docs: 精简命令模板去除冗余代码块 (v1.7.19)
- 统一所有调用外部模型的命令模板格式
- 顶部保留完整调用规范,阶段中只引用不重复
- 添加 ⚠️ 必须调用标记确保强制执行
- 修改文件:backend/frontend/debug/optimize/review/test/analyze.md
This commit is contained in:
1 parent
038abfd922
commit
97c7cb8bc6
11 files changed
+178
-39
No files matched your search
@@ -7,6 +7,89 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
---
|
||||
|
||||
## [1.7.19] - 2026-01-13
|
||||
|
||||
### 📝 文档优化
|
||||
|
||||
**精简命令模板,去除冗余代码块**
|
||||
|
||||
所有调用外部模型的命令模板已统一格式:
|
||||
- 顶部保留完整的「多模型调用规范」代码示例(只出现一次)
|
||||
- 各阶段改为 `⚠️ 必须调用 xxx(参照上方调用规范)` + 参数表格
|
||||
- 避免重复教学,减少模板体积
|
||||
|
||||
**修改文件**:
|
||||
- `templates/commands/backend.md` - 阶段 2、3、5 精简
|
||||
- `templates/commands/frontend.md` - 阶段 2、3、5 精简
|
||||
- `templates/commands/debug.md` - 阶段 2 精简
|
||||
- `templates/commands/optimize.md` - 阶段 2 精简
|
||||
- `templates/commands/review.md` - 阶段 2 精简
|
||||
- `templates/commands/test.md` - 阶段 2 精简
|
||||
- `templates/commands/analyze.md` - 阶段 2 添加 ⚠️ 强调标记
|
||||
|
||||
---
|
||||
|
||||
## [1.7.18] - 2026-01-13
|
||||
|
||||
### 🐛 Bug 修复
|
||||
|
||||
**修复 Windows 系统 Codex 进程无法自动终止问题**
|
||||
|
||||
#### 问题背景
|
||||
|
||||
用户在 Windows 系统上使用 Codex 时遇到问题:
|
||||
- Codex 任务实际已完成(Web 界面显示完成,输出了 `agent_message` 和 `turn.completed`)
|
||||
- 但 codeagent-wrapper 进程一直不退出
|
||||
- 导致 Claude Code Task 工具无法获取日志,一直等待
|
||||
- 只有手动关闭进程才能继续
|
||||
|
||||
**根本原因**:
|
||||
- `terminateCommand` 函数使用 `syscall.SIGTERM` 信号终止进程
|
||||
- **Windows 不支持 SIGTERM 信号**,该调用静默失败(不报错但不执行任何操作)
|
||||
- 虽然有 `forceKillDelay` 后的 `Kill()` 备用逻辑,但代码在 `waitCh` 上阻塞等待进程退出
|
||||
- 导致 Kill() 的定时器无法正确触发或进程无法正常退出
|
||||
|
||||
#### 核心修复
|
||||
|
||||
1. **Windows 平台直接使用 Kill()**:
|
||||
- `terminateCommand()` 函数:Windows 上直接调用 `proc.Kill()` 而非 `SIGTERM`
|
||||
- `terminateProcess()` 函数:同样的修复
|
||||
- `forwardSignals()` 函数:同样的修复
|
||||
|
||||
2. **保持 Unix 兼容性**:
|
||||
- Unix/Linux/macOS 仍使用 `SIGTERM` 实现优雅退出
|
||||
- 保留 `forceKillDelay` 后的强制 Kill 逻辑
|
||||
|
||||
#### 技术细节
|
||||
|
||||
修改文件:`codeagent-wrapper/executor.go`
|
||||
|
||||
```go
|
||||
// 修复前
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
|
||||
// 修复后
|
||||
if isWindows() {
|
||||
_ = proc.Kill() // Windows: 直接终止
|
||||
} else {
|
||||
_ = proc.Signal(syscall.SIGTERM) // Unix: 优雅退出
|
||||
}
|
||||
```
|
||||
|
||||
#### 影响范围
|
||||
|
||||
- ✅ **修复前**:Windows 用户 Codex 完成后进程卡住,需要手动终止
|
||||
- ✅ **修复后**:所有平台进程正确终止,Task 工具可以正常获取结果
|
||||
- ✅ **向后兼容**:Unix 平台行为不变
|
||||
|
||||
#### 相关文件
|
||||
|
||||
- `codeagent-wrapper/executor.go` - 修改 3 个函数的信号处理逻辑
|
||||
- `codeagent-wrapper/main.go` - 版本号升级至 v5.5.0
|
||||
- 重新编译所有平台二进制文件
|
||||
|
||||
---
|
||||
|
||||
## [1.7.17] - 2026-01-12
|
||||
|
||||
### 🐛 Bug 修复
|
||||
|
||||
@@ -1256,12 +1256,17 @@ func forwardSignals(ctx context.Context, cmd commandRunner, logErrorFn func(stri
|
||||
case sig := <-sigCh:
|
||||
logErrorFn(fmt.Sprintf("Received signal: %v", sig))
|
||||
if proc := cmd.Process(); proc != nil {
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
time.AfterFunc(time.Duration(forceKillDelay.Load())*time.Second, func() {
|
||||
if p := cmd.Process(); p != nil {
|
||||
_ = p.Kill()
|
||||
}
|
||||
})
|
||||
// Windows does not support SIGTERM - use Kill() directly
|
||||
if isWindows() {
|
||||
_ = proc.Kill()
|
||||
} else {
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
time.AfterFunc(time.Duration(forceKillDelay.Load())*time.Second, func() {
|
||||
if p := cmd.Process(); p != nil {
|
||||
_ = p.Kill()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
case <-ctx.Done():
|
||||
}
|
||||
@@ -1326,7 +1331,14 @@ func terminateCommand(cmd commandRunner) *forceKillTimer {
|
||||
return nil
|
||||
}
|
||||
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
// Windows does not support SIGTERM - it silently fails without terminating the process.
|
||||
// This causes codeagent-wrapper to hang waiting for the process to exit.
|
||||
// On Windows, we directly use Kill() which calls TerminateProcess().
|
||||
if isWindows() {
|
||||
_ = proc.Kill()
|
||||
} else {
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
}
|
||||
|
||||
done := make(chan struct{}, 1)
|
||||
timer := time.AfterFunc(time.Duration(forceKillDelay.Load())*time.Second, func() {
|
||||
@@ -1348,7 +1360,12 @@ func terminateProcess(cmd commandRunner) *time.Timer {
|
||||
return nil
|
||||
}
|
||||
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
// Windows does not support SIGTERM - use Kill() directly
|
||||
if isWindows() {
|
||||
_ = proc.Kill()
|
||||
} else {
|
||||
_ = proc.Signal(syscall.SIGTERM)
|
||||
}
|
||||
|
||||
return time.AfterFunc(time.Duration(forceKillDelay.Load())*time.Second, func() {
|
||||
if p := cmd.Process(); p != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
version = "5.4.1"
|
||||
version = "5.5.0"
|
||||
defaultWorkdir = "."
|
||||
defaultTimeout = 7200 // seconds (2 hours)
|
||||
defaultCoverageTarget = 90.0
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ccg-workflow",
|
||||
"version": "1.7.17",
|
||||
"version": "1.7.19",
|
||||
"description": "Claude-Codex-Gemini 多模型协作系统 - 智能路由多模型开发工作流",
|
||||
"type": "module",
|
||||
"packageManager": "pnpm@10.17.1",
|
||||
|
||||
@@ -73,11 +73,14 @@ EOF",
|
||||
|
||||
`[模式:分析]`
|
||||
|
||||
**并行调用**(`run_in_background: true`):
|
||||
- Codex:使用分析提示词,输出技术可行性、架构影响、性能考量
|
||||
- Gemini:使用分析提示词,输出 UI/UX 影响、用户体验、视觉设计考量
|
||||
**⚠️ 必须并行调用 Codex 和 Gemini**(参照上方调用规范,使用 `run_in_background: true`):
|
||||
|
||||
用 `TaskOutput` 等待两个模型的完整结果。
|
||||
| 模型 | ROLE_FILE | OUTPUT |
|
||||
|------|-----------|--------|
|
||||
| **Codex** | `~/.claude/.ccg/prompts/codex/analyzer.md` | 技术可行性、架构影响、性能考量 |
|
||||
| **Gemini** | `~/.claude/.ccg/prompts/gemini/analyzer.md` | UI/UX 影响、用户体验、视觉设计考量 |
|
||||
|
||||
用 `TaskOutput` 等待两个模型的完整结果。**必须等所有模型返回后才能进入下一阶段**。
|
||||
|
||||
### 🔀 阶段 3:交叉验证
|
||||
|
||||
|
||||
@@ -99,9 +99,13 @@ EOF",
|
||||
|
||||
`[模式:构思]` - Codex 主导分析
|
||||
|
||||
调用 Codex,使用分析提示词,输出技术可行性、推荐方案、风险点。
|
||||
**⚠️ 必须调用 Codex**(参照上方调用规范):
|
||||
- ROLE_FILE: `~/.claude/.ccg/prompts/codex/analyzer.md`
|
||||
- 需求:增强后的需求(如未增强则用 $ARGUMENTS)
|
||||
- 上下文:阶段 1 收集的项目上下文
|
||||
- OUTPUT: 技术可行性分析、推荐方案(至少 2 个)、风险点评估
|
||||
|
||||
**📌 保存 SESSION_ID**(`CODEX_SESSION`)。
|
||||
**📌 保存 SESSION_ID**(`CODEX_SESSION`)用于后续阶段复用。
|
||||
|
||||
输出方案(至少 2 个),等待用户选择。
|
||||
|
||||
@@ -109,7 +113,11 @@ EOF",
|
||||
|
||||
`[模式:计划]` - Codex 主导规划
|
||||
|
||||
调用 Codex(`resume $CODEX_SESSION`),使用规划提示词,输出文件结构、函数/类设计、依赖。
|
||||
**⚠️ 必须调用 Codex**(使用 `resume <CODEX_SESSION>` 复用会话):
|
||||
- ROLE_FILE: `~/.claude/.ccg/prompts/codex/architect.md`
|
||||
- 需求:用户选择的方案
|
||||
- 上下文:阶段 2 的分析结果
|
||||
- OUTPUT: 文件结构、函数/类设计、依赖关系
|
||||
|
||||
Claude 综合规划,请求用户批准后存入 `.claude/plan/任务名.md`
|
||||
|
||||
@@ -125,7 +133,11 @@ Claude 综合规划,请求用户批准后存入 `.claude/plan/任务名.md`
|
||||
|
||||
`[模式:优化]` - Codex 主导审查
|
||||
|
||||
调用 Codex,使用审查提示词,关注安全性、性能、错误处理、API规范。
|
||||
**⚠️ 必须调用 Codex**(参照上方调用规范):
|
||||
- ROLE_FILE: `~/.claude/.ccg/prompts/codex/reviewer.md`
|
||||
- 需求:审查以下后端代码变更
|
||||
- 上下文:git diff 或代码内容
|
||||
- OUTPUT: 安全性、性能、错误处理、API 规范问题列表
|
||||
|
||||
整合审查意见,用户确认后执行优化。
|
||||
|
||||
|
||||
@@ -64,11 +64,14 @@ EOF",
|
||||
|
||||
`[模式:诊断]`
|
||||
|
||||
**并行调用**(`run_in_background: true`):
|
||||
- Codex:分析逻辑错误、数据流、异常处理、API、数据库
|
||||
- Gemini:分析 UI 渲染、状态管理、事件绑定、组件生命周期
|
||||
**⚠️ 必须并行调用 Codex 和 Gemini**(参照上方调用规范,使用 `run_in_background: true`):
|
||||
|
||||
用 `TaskOutput` 等待两个模型的诊断结果。
|
||||
| 模型 | 需求 | OUTPUT |
|
||||
|------|------|--------|
|
||||
| **Codex** | 诊断问题($ARGUMENTS) | 诊断假设(按可能性排序),每个假设包含原因、证据、修复建议 |
|
||||
| **Gemini** | 诊断问题($ARGUMENTS) | 诊断假设(按可能性排序),每个假设包含原因、证据、修复建议 |
|
||||
|
||||
用 `TaskOutput` 等待两个模型的诊断结果。**必须等所有模型返回后才能进入下一阶段**。
|
||||
|
||||
### 🔀 阶段 3:假设整合
|
||||
|
||||
|
||||
@@ -99,9 +99,13 @@ EOF",
|
||||
|
||||
`[模式:构思]` - Gemini 主导分析
|
||||
|
||||
调用 Gemini,使用分析提示词,输出 UI 可行性、推荐方案、用户体验。
|
||||
**⚠️ 必须调用 Gemini**(参照上方调用规范):
|
||||
- ROLE_FILE: `~/.claude/.ccg/prompts/gemini/analyzer.md`
|
||||
- 需求:增强后的需求(如未增强则用 $ARGUMENTS)
|
||||
- 上下文:阶段 1 收集的项目上下文
|
||||
- OUTPUT: UI 可行性分析、推荐方案(至少 2 个)、用户体验评估
|
||||
|
||||
**📌 保存 SESSION_ID**(`GEMINI_SESSION`)。
|
||||
**📌 保存 SESSION_ID**(`GEMINI_SESSION`)用于后续阶段复用。
|
||||
|
||||
输出方案(至少 2 个),等待用户选择。
|
||||
|
||||
@@ -109,7 +113,11 @@ EOF",
|
||||
|
||||
`[模式:计划]` - Gemini 主导规划
|
||||
|
||||
调用 Gemini(`resume $GEMINI_SESSION`),使用规划提示词,输出组件结构、UI流程、样式方案。
|
||||
**⚠️ 必须调用 Gemini**(使用 `resume <GEMINI_SESSION>` 复用会话):
|
||||
- ROLE_FILE: `~/.claude/.ccg/prompts/gemini/architect.md`
|
||||
- 需求:用户选择的方案
|
||||
- 上下文:阶段 2 的分析结果
|
||||
- OUTPUT: 组件结构、UI 流程、样式方案
|
||||
|
||||
Claude 综合规划,请求用户批准后存入 `.claude/plan/任务名.md`
|
||||
|
||||
@@ -125,7 +133,11 @@ Claude 综合规划,请求用户批准后存入 `.claude/plan/任务名.md`
|
||||
|
||||
`[模式:优化]` - Gemini 主导审查
|
||||
|
||||
调用 Gemini,使用审查提示词,关注可访问性、响应式、性能、设计一致性。
|
||||
**⚠️ 必须调用 Gemini**(参照上方调用规范):
|
||||
- ROLE_FILE: `~/.claude/.ccg/prompts/gemini/reviewer.md`
|
||||
- 需求:审查以下前端代码变更
|
||||
- 上下文:git diff 或代码内容
|
||||
- OUTPUT: 可访问性、响应式、性能、设计一致性问题列表
|
||||
|
||||
整合审查意见,用户确认后执行优化。
|
||||
|
||||
|
||||
@@ -70,11 +70,14 @@ EOF",
|
||||
|
||||
`[模式:分析]`
|
||||
|
||||
**并行调用**(`run_in_background: true`):
|
||||
- Codex:分析后端性能问题,输出瓶颈列表、优化方案、预期收益
|
||||
- Gemini:分析前端性能问题(Core Web Vitals),输出瓶颈列表、优化方案、预期收益
|
||||
**⚠️ 必须并行调用 Codex 和 Gemini**(参照上方调用规范,使用 `run_in_background: true`):
|
||||
|
||||
用 `TaskOutput` 等待两个模型的完整结果。
|
||||
| 模型 | 需求 | OUTPUT |
|
||||
|------|------|--------|
|
||||
| **Codex** | 分析后端性能问题($ARGUMENTS) | 性能瓶颈列表、优化方案、预期收益 |
|
||||
| **Gemini** | 分析前端性能问题(Core Web Vitals)($ARGUMENTS) | 性能瓶颈列表、优化方案、预期收益 |
|
||||
|
||||
用 `TaskOutput` 等待两个模型的完整结果。**必须等所有模型返回后才能进入下一阶段**。
|
||||
|
||||
### 🔀 阶段 3:优化整合
|
||||
|
||||
|
||||
@@ -56,11 +56,14 @@ EOF",
|
||||
|
||||
`[模式:审查]`
|
||||
|
||||
**并行调用**(`run_in_background: true`):
|
||||
- Codex:审查安全性、性能、错误处理、可维护性
|
||||
- Gemini:审查可访问性、响应式、设计一致性、用户体验
|
||||
**⚠️ 必须并行调用 Codex 和 Gemini**(参照上方调用规范,使用 `run_in_background: true`):
|
||||
|
||||
用 `TaskOutput` 等待两个模型的审查结果。
|
||||
| 模型 | 需求 | OUTPUT |
|
||||
|------|------|--------|
|
||||
| **Codex** | 审查代码变更(git diff 内容) | 按 Critical/Major/Minor/Suggestion 分类列出安全性、性能、错误处理问题 |
|
||||
| **Gemini** | 审查代码变更(git diff 内容) | 按 Critical/Major/Minor/Suggestion 分类列出可访问性、响应式、设计一致性问题 |
|
||||
|
||||
用 `TaskOutput` 等待两个模型的审查结果。**必须等所有模型返回后才能进入下一阶段**。
|
||||
|
||||
### 🔀 阶段 3:综合反馈
|
||||
|
||||
|
||||
@@ -83,12 +83,15 @@ EOF",
|
||||
|
||||
`[模式:生成]`
|
||||
|
||||
**根据代码类型路由**:
|
||||
- 后端代码:调用 Codex 生成测试
|
||||
- 前端代码:调用 Gemini 生成测试
|
||||
- 全栈代码:并行调用两者(`run_in_background: true`)
|
||||
**⚠️ 根据代码类型必须调用对应模型**(参照上方调用规范):
|
||||
|
||||
用 `TaskOutput` 等待模型返回测试代码。
|
||||
| 代码类型 | 调用模型 | OUTPUT |
|
||||
|----------|----------|--------|
|
||||
| **后端** | Codex | 完整测试代码(使用项目现有测试框架,覆盖正常路径、边界条件、异常处理) |
|
||||
| **前端** | Gemini | 完整测试代码(使用项目现有测试框架,覆盖正常路径、边界条件、异常处理) |
|
||||
| **全栈** | 并行调用两者(`run_in_background: true`) | 后端 + 前端测试代码 |
|
||||
|
||||
**必须等所有模型返回后才能进入下一阶段**。
|
||||
|
||||
### 🔀 阶段 3:测试整合
|
||||
|
||||
|
||||
Reference in new issue
Block a user