ccgx-workflow 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +469 -0
- package/README.zh-CN.md +466 -0
- package/bin/ccg.mjs +2 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.mjs +173 -0
- package/dist/index.d.mts +1774 -0
- package/dist/index.d.ts +1774 -0
- package/dist/index.mjs +2029 -0
- package/dist/shared/ccgx-workflow.WgUzkiC3.mjs +5248 -0
- package/package.json +129 -0
- package/templates/commands/agents/assumptions-analyzer.md +129 -0
- package/templates/commands/agents/code-fixer.md +292 -0
- package/templates/commands/agents/codebase-mapper.md +152 -0
- package/templates/commands/agents/debug-session-manager.md +247 -0
- package/templates/commands/agents/debugger.md +111 -0
- package/templates/commands/agents/eval-auditor.md +171 -0
- package/templates/commands/agents/framework-selector.md +152 -0
- package/templates/commands/agents/get-current-datetime.md +29 -0
- package/templates/commands/agents/init-architect.md +114 -0
- package/templates/commands/agents/integration-checker.md +163 -0
- package/templates/commands/agents/interface-auditor.md +170 -0
- package/templates/commands/agents/nyquist-auditor.md +131 -0
- package/templates/commands/agents/pattern-mapper.md +111 -0
- package/templates/commands/agents/phase-runner.md +321 -0
- package/templates/commands/agents/plan-checker.md +255 -0
- package/templates/commands/agents/planner.md +320 -0
- package/templates/commands/agents/team-architect.md +186 -0
- package/templates/commands/agents/team-qa.md +121 -0
- package/templates/commands/agents/team-reviewer.md +157 -0
- package/templates/commands/agents/ui-ux-designer.md +573 -0
- package/templates/commands/agents/verifier.md +274 -0
- package/templates/commands/analyze.md +210 -0
- package/templates/commands/autonomous.md +792 -0
- package/templates/commands/cancel.md +132 -0
- package/templates/commands/clean-branches.md +117 -0
- package/templates/commands/codex-exec.md +404 -0
- package/templates/commands/commit.md +151 -0
- package/templates/commands/context.md +332 -0
- package/templates/commands/debate.md +165 -0
- package/templates/commands/debug.md +226 -0
- package/templates/commands/enhance.md +64 -0
- package/templates/commands/execute.md +380 -0
- package/templates/commands/init.md +123 -0
- package/templates/commands/optimize.md +217 -0
- package/templates/commands/plan.md +373 -0
- package/templates/commands/result.md +106 -0
- package/templates/commands/review.md +338 -0
- package/templates/commands/rollback.md +116 -0
- package/templates/commands/spec-impl.md +139 -0
- package/templates/commands/spec-init.md +101 -0
- package/templates/commands/spec-plan.md +210 -0
- package/templates/commands/spec-research.md +152 -0
- package/templates/commands/spec-review.md +120 -0
- package/templates/commands/status.md +206 -0
- package/templates/commands/team-exec.md +265 -0
- package/templates/commands/test.md +236 -0
- package/templates/commands/verify-work.md +338 -0
- package/templates/commands/verify.md +66 -0
- package/templates/commands/workflow.md +190 -0
- package/templates/commands/worktree.md +128 -0
- package/templates/hooks/ccg-context-monitor.js +159 -0
- package/templates/hooks/ccg-session-state.cjs +510 -0
- package/templates/hooks/ccg-statusline.js +142 -0
- package/templates/output-styles/abyss-command.md +56 -0
- package/templates/output-styles/abyss-concise.md +89 -0
- package/templates/output-styles/abyss-cultivator.md +302 -0
- package/templates/output-styles/abyss-ritual.md +70 -0
- package/templates/output-styles/engineer-professional.md +89 -0
- package/templates/output-styles/laowang-engineer.md +127 -0
- package/templates/output-styles/nekomata-engineer.md +120 -0
- package/templates/output-styles/ojousama-engineer.md +121 -0
- package/templates/prompts/claude/analyzer.md +59 -0
- package/templates/prompts/claude/architect.md +54 -0
- package/templates/prompts/claude/debugger.md +71 -0
- package/templates/prompts/claude/optimizer.md +73 -0
- package/templates/prompts/claude/reviewer.md +63 -0
- package/templates/prompts/claude/tester.md +69 -0
- package/templates/prompts/codex/analyzer.md +58 -0
- package/templates/prompts/codex/architect.md +54 -0
- package/templates/prompts/codex/debugger.md +74 -0
- package/templates/prompts/codex/optimizer.md +81 -0
- package/templates/prompts/codex/reviewer.md +73 -0
- package/templates/prompts/codex/tester.md +62 -0
- package/templates/prompts/gemini/analyzer.md +61 -0
- package/templates/prompts/gemini/architect.md +55 -0
- package/templates/prompts/gemini/debugger.md +78 -0
- package/templates/prompts/gemini/frontend.md +64 -0
- package/templates/prompts/gemini/optimizer.md +84 -0
- package/templates/prompts/gemini/reviewer.md +80 -0
- package/templates/prompts/gemini/tester.md +68 -0
- package/templates/rules/ccg-skill-routing.md +83 -0
- package/templates/rules/ccg-skills.md +71 -0
- package/templates/scripts/ccg-phase-runner-launcher.mjs +467 -0
- package/templates/scripts/invoke-model.mjs +949 -0
- package/templates/scripts/repatch-gemini-plugin.mjs +194 -0
- package/templates/skills/SKILL.md +92 -0
- package/templates/skills/domains/ai/SKILL.md +35 -0
- package/templates/skills/domains/ai/agent-dev.md +242 -0
- package/templates/skills/domains/ai/llm-security.md +288 -0
- package/templates/skills/domains/ai/prompt-and-eval.md +279 -0
- package/templates/skills/domains/ai/rag-system.md +542 -0
- package/templates/skills/domains/architecture/SKILL.md +43 -0
- package/templates/skills/domains/architecture/api-design.md +225 -0
- package/templates/skills/domains/architecture/caching.md +299 -0
- package/templates/skills/domains/architecture/cloud-native.md +285 -0
- package/templates/skills/domains/architecture/message-queue.md +329 -0
- package/templates/skills/domains/architecture/security-arch.md +297 -0
- package/templates/skills/domains/data-engineering/SKILL.md +208 -0
- package/templates/skills/domains/development/SKILL.md +47 -0
- package/templates/skills/domains/development/cpp.md +246 -0
- package/templates/skills/domains/development/go.md +323 -0
- package/templates/skills/domains/development/java.md +277 -0
- package/templates/skills/domains/development/python.md +288 -0
- package/templates/skills/domains/development/rust.md +313 -0
- package/templates/skills/domains/development/shell.md +313 -0
- package/templates/skills/domains/development/typescript.md +277 -0
- package/templates/skills/domains/devops/SKILL.md +40 -0
- package/templates/skills/domains/devops/cost-optimization.md +272 -0
- package/templates/skills/domains/devops/database.md +217 -0
- package/templates/skills/domains/devops/devsecops.md +198 -0
- package/templates/skills/domains/devops/git-workflow.md +181 -0
- package/templates/skills/domains/devops/observability.md +280 -0
- package/templates/skills/domains/devops/performance.md +336 -0
- package/templates/skills/domains/devops/testing.md +283 -0
- package/templates/skills/domains/frontend-design/SKILL.md +244 -0
- package/templates/skills/domains/frontend-design/agents/openai.yaml +4 -0
- package/templates/skills/domains/frontend-design/claymorphism/SKILL.md +121 -0
- package/templates/skills/domains/frontend-design/claymorphism/references/tokens.css +52 -0
- package/templates/skills/domains/frontend-design/component-patterns.md +202 -0
- package/templates/skills/domains/frontend-design/engineering.md +287 -0
- package/templates/skills/domains/frontend-design/glassmorphism/SKILL.md +142 -0
- package/templates/skills/domains/frontend-design/glassmorphism/references/tokens.css +32 -0
- package/templates/skills/domains/frontend-design/liquid-glass/SKILL.md +139 -0
- package/templates/skills/domains/frontend-design/liquid-glass/references/tokens.css +81 -0
- package/templates/skills/domains/frontend-design/neubrutalism/SKILL.md +145 -0
- package/templates/skills/domains/frontend-design/neubrutalism/references/tokens.css +44 -0
- package/templates/skills/domains/frontend-design/reference/color-and-contrast.md +132 -0
- package/templates/skills/domains/frontend-design/reference/interaction-design.md +195 -0
- package/templates/skills/domains/frontend-design/reference/motion-design.md +99 -0
- package/templates/skills/domains/frontend-design/reference/responsive-design.md +114 -0
- package/templates/skills/domains/frontend-design/reference/spatial-design.md +100 -0
- package/templates/skills/domains/frontend-design/reference/typography.md +133 -0
- package/templates/skills/domains/frontend-design/reference/ux-writing.md +107 -0
- package/templates/skills/domains/frontend-design/state-management.md +680 -0
- package/templates/skills/domains/frontend-design/ui-aesthetics.md +110 -0
- package/templates/skills/domains/frontend-design/ux-principles.md +156 -0
- package/templates/skills/domains/infrastructure/SKILL.md +201 -0
- package/templates/skills/domains/mobile/SKILL.md +225 -0
- package/templates/skills/domains/orchestration/SKILL.md +30 -0
- package/templates/skills/domains/orchestration/multi-agent.md +263 -0
- package/templates/skills/domains/security/SKILL.md +73 -0
- package/templates/skills/domains/security/blue-team.md +436 -0
- package/templates/skills/domains/security/code-audit.md +265 -0
- package/templates/skills/domains/security/pentest.md +226 -0
- package/templates/skills/domains/security/red-team.md +374 -0
- package/templates/skills/domains/security/threat-intel.md +372 -0
- package/templates/skills/domains/security/vuln-research.md +369 -0
- package/templates/skills/impeccable/adapt/SKILL.md +201 -0
- package/templates/skills/impeccable/animate/SKILL.md +176 -0
- package/templates/skills/impeccable/arrange/SKILL.md +126 -0
- package/templates/skills/impeccable/audit/SKILL.md +149 -0
- package/templates/skills/impeccable/bolder/SKILL.md +118 -0
- package/templates/skills/impeccable/clarify/SKILL.md +185 -0
- package/templates/skills/impeccable/colorize/SKILL.md +144 -0
- package/templates/skills/impeccable/critique/SKILL.md +203 -0
- package/templates/skills/impeccable/critique/reference/cognitive-load.md +106 -0
- package/templates/skills/impeccable/critique/reference/heuristics-scoring.md +234 -0
- package/templates/skills/impeccable/critique/reference/personas.md +178 -0
- package/templates/skills/impeccable/delight/SKILL.md +305 -0
- package/templates/skills/impeccable/distill/SKILL.md +123 -0
- package/templates/skills/impeccable/extract/SKILL.md +94 -0
- package/templates/skills/impeccable/harden/SKILL.md +357 -0
- package/templates/skills/impeccable/normalize/SKILL.md +72 -0
- package/templates/skills/impeccable/onboard/SKILL.md +248 -0
- package/templates/skills/impeccable/optimize/SKILL.md +268 -0
- package/templates/skills/impeccable/overdrive/SKILL.md +143 -0
- package/templates/skills/impeccable/polish/SKILL.md +205 -0
- package/templates/skills/impeccable/quieter/SKILL.md +104 -0
- package/templates/skills/impeccable/teach-impeccable/SKILL.md +72 -0
- package/templates/skills/impeccable/typeset/SKILL.md +117 -0
- package/templates/skills/orchestration/multi-agent/SKILL.md +533 -0
- package/templates/skills/run_skill.js +129 -0
- package/templates/skills/scrapling/SKILL.md +98 -0
- package/templates/skills/scrapling/references/api-quick-ref.md +127 -0
- package/templates/skills/scrapling/references/cookie-vault.md +56 -0
- package/templates/skills/scrapling/references/maintenance.md +79 -0
- package/templates/skills/scrapling/references/site-patterns.md +86 -0
- package/templates/skills/scrapling/references/troubleshooting.md +95 -0
- package/templates/skills/scrapling/templates/basic_fetch.py +19 -0
- package/templates/skills/scrapling/templates/parse_only.py +15 -0
- package/templates/skills/scrapling/templates/session_login.py +19 -0
- package/templates/skills/scrapling/templates/stealth_cloudflare.py +28 -0
- package/templates/skills/tools/extract-learnings/SKILL.md +77 -0
- package/templates/skills/tools/forensics/SKILL.md +89 -0
- package/templates/skills/tools/gen-docs/SKILL.md +116 -0
- package/templates/skills/tools/gen-docs/scripts/doc_generator.js +435 -0
- package/templates/skills/tools/health/SKILL.md +121 -0
- package/templates/skills/tools/lib/shared.js +98 -0
- package/templates/skills/tools/map-codebase/SKILL.md +118 -0
- package/templates/skills/tools/override-refusal/SKILL.md +53 -0
- package/templates/skills/tools/override-refusal/agents/openai.yaml +4 -0
- package/templates/skills/tools/override-refusal/scripts/refusal_rewriter.js +226 -0
- package/templates/skills/tools/verify-change/SKILL.md +143 -0
- package/templates/skills/tools/verify-change/scripts/change_analyzer.js +289 -0
- package/templates/skills/tools/verify-module/SKILL.md +130 -0
- package/templates/skills/tools/verify-module/scripts/module_scanner.js +171 -0
- package/templates/skills/tools/verify-quality/SKILL.md +163 -0
- package/templates/skills/tools/verify-quality/scripts/quality_checker.js +337 -0
- package/templates/skills/tools/verify-security/SKILL.md +146 -0
- package/templates/skills/tools/verify-security/scripts/security_scanner.js +283 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: '智能 Git 提交:分析改动生成 Conventional Commit 信息,支持拆分建议'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Commit - 智能 Git 提交
|
|
6
|
+
|
|
7
|
+
分析当前改动,生成 Conventional Commits 风格的提交信息。
|
|
8
|
+
|
|
9
|
+
## 使用方法
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/commit [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 选项
|
|
16
|
+
|
|
17
|
+
| 选项 | 说明 |
|
|
18
|
+
|------|------|
|
|
19
|
+
| `--no-verify` | 跳过 Git 钩子 |
|
|
20
|
+
| `--all` | 暂存所有改动 |
|
|
21
|
+
| `--amend` | 修补上次提交 |
|
|
22
|
+
| `--signoff` | 附加签名 |
|
|
23
|
+
| `--emoji` | 包含 emoji 前缀 |
|
|
24
|
+
| `--scope <scope>` | 指定作用域 |
|
|
25
|
+
| `--type <type>` | 指定提交类型 |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 执行工作流
|
|
30
|
+
|
|
31
|
+
### 🔍 阶段 1:仓库校验
|
|
32
|
+
|
|
33
|
+
`[模式:检查]`
|
|
34
|
+
|
|
35
|
+
1. 验证 Git 仓库状态
|
|
36
|
+
2. 检测 rebase/merge 冲突
|
|
37
|
+
3. 读取当前分支/HEAD 状态
|
|
38
|
+
|
|
39
|
+
### 📋 阶段 2:改动检测
|
|
40
|
+
|
|
41
|
+
`[模式:分析]`
|
|
42
|
+
|
|
43
|
+
1. 获取已暂存与未暂存改动
|
|
44
|
+
2. 若暂存区为空:
|
|
45
|
+
- `--all` → 执行 `git add -A`
|
|
46
|
+
- 否则提示选择
|
|
47
|
+
|
|
48
|
+
### ✂️ 阶段 3:拆分建议
|
|
49
|
+
|
|
50
|
+
`[模式:建议]`
|
|
51
|
+
|
|
52
|
+
按以下维度聚类:
|
|
53
|
+
- 关注点(源代码 vs 文档/测试)
|
|
54
|
+
- 文件模式(不同目录/包)
|
|
55
|
+
- 改动类型(新增 vs 删除)
|
|
56
|
+
|
|
57
|
+
若检测到多组独立变更(>300 行 / 跨多个顶级目录),建议拆分。
|
|
58
|
+
|
|
59
|
+
### ✍️ 阶段 4:生成提交信息
|
|
60
|
+
|
|
61
|
+
`[模式:生成]`
|
|
62
|
+
|
|
63
|
+
**格式**:`[emoji] <type>(<scope>): <subject>`
|
|
64
|
+
|
|
65
|
+
- 首行 ≤ 72 字符
|
|
66
|
+
- 祈使语气
|
|
67
|
+
- 消息体:动机、实现要点、影响范围
|
|
68
|
+
|
|
69
|
+
**语言**:根据最近 50 次提交判断中文/英文
|
|
70
|
+
|
|
71
|
+
### 📦 阶段 5:Context 自动归档(若 .context/ 存在)
|
|
72
|
+
|
|
73
|
+
`[模式:上下文归档]`
|
|
74
|
+
|
|
75
|
+
**前置判断**:
|
|
76
|
+
- 若 `.context/` 目录不存在 → 在提交成功后输出提示:`💡 建议执行 /ccg:context init 启用决策追踪`,不阻断
|
|
77
|
+
- 若 `.context/` 存在 → 执行以下步骤
|
|
78
|
+
|
|
79
|
+
**从 git diff 自动生成 ContextEntry**:
|
|
80
|
+
|
|
81
|
+
1. 获取当前分支名:`git branch --show-current`
|
|
82
|
+
2. 获取暂存区变更:`git diff --cached --stat` + `git diff --cached`(完整 diff)
|
|
83
|
+
3. **分析 diff 生成 ContextEntry**:
|
|
84
|
+
- `summary`:从阶段 4 生成的 commit message 中取首行
|
|
85
|
+
- `decisions`:分析 diff 中的关键变更(新增依赖、架构调整、接口变更、配置修改),推断决策理由
|
|
86
|
+
- `bugs`:若 commit type 为 `fix`,从 diff 中提取 bug 症状、根因、修复方式
|
|
87
|
+
- `changes.files`:从 `git diff --cached --name-only` 提取
|
|
88
|
+
- `tests`:若变更包含测试文件,记录测试相关信息
|
|
89
|
+
4. **合并 session.log**(可选):若 `.context/current/branches/<branch>/session.log` 存在且非空,将其中的手动记录合并到 decisions/bugs 中,然后清空 session.log
|
|
90
|
+
5. **脱敏**:扫描 token/key/password/secret 模式 → 替换为 `[REDACTED]`
|
|
91
|
+
6. **追加**:将 ContextEntry 作为一行追加到 `.context/history/commits.jsonl`
|
|
92
|
+
7. **重生成**:更新 `.context/history/commits.md` 人类视图
|
|
93
|
+
8. **暂存**:`git add .context/history/`
|
|
94
|
+
9. **Trailer**:在 commit message 中添加 `Context-Id: <uuid>` trailer
|
|
95
|
+
|
|
96
|
+
**ContextEntry 格式**参见 `/ccg:context` 命令中的 Schema 定义。
|
|
97
|
+
|
|
98
|
+
**失败降级**:若归档过程出错,不阻断提交。写入 minimal ContextEntry(仅 summary + files),继续正常提交。
|
|
99
|
+
|
|
100
|
+
### ✅ 阶段 6:执行提交
|
|
101
|
+
|
|
102
|
+
`[模式:执行]`
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
git commit [-S] [--no-verify] [-s] -F .git/COMMIT_EDITMSG
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Type 与 Emoji 映射
|
|
111
|
+
|
|
112
|
+
| Emoji | Type | 说明 |
|
|
113
|
+
|-------|------|------|
|
|
114
|
+
| ✨ | `feat` | 新增功能 |
|
|
115
|
+
| 🐛 | `fix` | 缺陷修复 |
|
|
116
|
+
| 📝 | `docs` | 文档更新 |
|
|
117
|
+
| 🎨 | `style` | 代码格式 |
|
|
118
|
+
| ♻️ | `refactor` | 重构 |
|
|
119
|
+
| ⚡️ | `perf` | 性能优化 |
|
|
120
|
+
| ✅ | `test` | 测试相关 |
|
|
121
|
+
| 🔧 | `chore` | 构建/工具 |
|
|
122
|
+
| 👷 | `ci` | CI/CD |
|
|
123
|
+
| ⏪️ | `revert` | 回滚 |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 示例
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# 基本提交
|
|
131
|
+
/commit
|
|
132
|
+
|
|
133
|
+
# 暂存所有并提交
|
|
134
|
+
/commit --all
|
|
135
|
+
|
|
136
|
+
# 带 emoji 提交
|
|
137
|
+
/commit --emoji
|
|
138
|
+
|
|
139
|
+
# 指定类型和作用域
|
|
140
|
+
/commit --scope ui --type feat --emoji
|
|
141
|
+
|
|
142
|
+
# 修补上次提交
|
|
143
|
+
/commit --amend --signoff
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## 关键规则
|
|
147
|
+
|
|
148
|
+
1. **仅使用 Git** – 不调用包管理器
|
|
149
|
+
2. **尊重钩子** – 默认执行,`--no-verify` 可跳过
|
|
150
|
+
3. **不改源码** – 只读写 `.git/COMMIT_EDITMSG`
|
|
151
|
+
4. **原子提交** – 一次提交只做一件事
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: '项目上下文管理:初始化 .context 目录、记录决策日志、压缩归档、查看历史'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Context - 项目上下文管理
|
|
6
|
+
|
|
7
|
+
管理 `.context/` 目录结构,为 LLM 工具提供决策审计链。
|
|
8
|
+
|
|
9
|
+
## 使用方法
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/context <subcommand> [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 子命令
|
|
16
|
+
|
|
17
|
+
| 子命令 | 说明 |
|
|
18
|
+
|--------|------|
|
|
19
|
+
| `init` | 初始化 `.context/` 目录结构 |
|
|
20
|
+
| `log <message>` | (可选)手动追加备注到 session.log,commit 时会合并 |
|
|
21
|
+
| `show` | 查看当前分支的 session.log |
|
|
22
|
+
| `compress` | 压缩 session.log → uncommit.md(手动预览用) |
|
|
23
|
+
| `history` | 查看 history/commits.md |
|
|
24
|
+
| `squash <ids...>` | 合并多条 history 记录(配合 git squash) |
|
|
25
|
+
|
|
26
|
+
> **核心用法**:`init` 一次,之后只管开发。`/ccg:commit` 提交时自动从 git diff 分析决策并归档到 history/。`log` 仅在你想手动补充备注时使用。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 执行工作流
|
|
31
|
+
|
|
32
|
+
### 子命令:init
|
|
33
|
+
|
|
34
|
+
`[模式:初始化]`
|
|
35
|
+
|
|
36
|
+
在当前项目根目录创建 `.context/` 结构:
|
|
37
|
+
|
|
38
|
+
1. 检测项目根目录(查找 `.git/`)
|
|
39
|
+
2. 若 `.context/` 已存在,跳过已有文件,仅补全缺失
|
|
40
|
+
3. 创建以下结构:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
.context/
|
|
44
|
+
├── .gitignore
|
|
45
|
+
├── .gitattributes
|
|
46
|
+
├── prefs/
|
|
47
|
+
│ ├── coding-style.md
|
|
48
|
+
│ └── workflow.md
|
|
49
|
+
├── current/
|
|
50
|
+
│ └── branches/
|
|
51
|
+
│ └── .gitkeep
|
|
52
|
+
└── history/
|
|
53
|
+
├── commits.jsonl
|
|
54
|
+
├── commits.md
|
|
55
|
+
└── archives/
|
|
56
|
+
└── .gitkeep
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
4. **创建 `.context/.gitignore`**:
|
|
60
|
+
|
|
61
|
+
```gitignore
|
|
62
|
+
# Ephemeral workspace — never commit
|
|
63
|
+
current/
|
|
64
|
+
|
|
65
|
+
# Raw interaction logs — always local only
|
|
66
|
+
**/session.log
|
|
67
|
+
**/session.raw.log
|
|
68
|
+
**/*.session.log
|
|
69
|
+
**/*.raw.log
|
|
70
|
+
|
|
71
|
+
# Editor / temp
|
|
72
|
+
**/*.tmp
|
|
73
|
+
**/*.bak
|
|
74
|
+
**/*.swp
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
5. **创建 `.context/.gitattributes`**:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
# JSONL append-only: 'union' merge reduces conflicts
|
|
81
|
+
history/commits.jsonl merge=union
|
|
82
|
+
history/archives/*.jsonl merge=union
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
6. **创建 `.context/prefs/coding-style.md`**(团队编码规范模板):
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
# Coding Style Guide
|
|
89
|
+
|
|
90
|
+
> 此文件定义团队编码规范,所有 LLM 工具在修改代码时必须遵守。
|
|
91
|
+
> 提交到 Git,团队共享。
|
|
92
|
+
|
|
93
|
+
## General
|
|
94
|
+
- Prefer small, reviewable changes; avoid unrelated refactors.
|
|
95
|
+
- Keep functions short (<50 lines); avoid deep nesting (≤3 levels).
|
|
96
|
+
- Name things explicitly; no single-letter variables except loop counters.
|
|
97
|
+
- Handle errors explicitly; never swallow errors silently.
|
|
98
|
+
|
|
99
|
+
## Language-Specific
|
|
100
|
+
<!-- 根据项目语言补充,例如:-->
|
|
101
|
+
<!-- ### TypeScript -->
|
|
102
|
+
<!-- - Use strict mode; prefer `interface` over `type` for object shapes. -->
|
|
103
|
+
|
|
104
|
+
## Git Commits
|
|
105
|
+
- Conventional Commits, imperative mood.
|
|
106
|
+
- Atomic commits: one logical change per commit.
|
|
107
|
+
|
|
108
|
+
## Testing
|
|
109
|
+
- Every feat/fix MUST include corresponding tests.
|
|
110
|
+
- Coverage must not decrease.
|
|
111
|
+
- Fix flow: write failing test FIRST, then fix code.
|
|
112
|
+
|
|
113
|
+
## Security
|
|
114
|
+
- Never log secrets (tokens/keys/cookies/JWT).
|
|
115
|
+
- Validate inputs at trust boundaries.
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
7. **创建 `.context/prefs/workflow.md`**(LLM 工作流规则):
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
# Development Workflow Rules
|
|
122
|
+
|
|
123
|
+
> 此文件定义 LLM 开发工作流的强制规则。
|
|
124
|
+
> 所有 LLM 工具在执行任务时必须遵守,不可跳过任何步骤。
|
|
125
|
+
|
|
126
|
+
## Full Flow (MUST follow, no exceptions)
|
|
127
|
+
|
|
128
|
+
### feat (新功能)
|
|
129
|
+
1. 理解需求,分析影响范围
|
|
130
|
+
2. 读取现有代码,理解模式
|
|
131
|
+
3. 编写实现代码
|
|
132
|
+
4. 编写对应测试
|
|
133
|
+
5. 运行测试,修复失败
|
|
134
|
+
6. 更新文档(若 API 变更)
|
|
135
|
+
7. 自查 lint / type-check
|
|
136
|
+
|
|
137
|
+
### fix (缺陷修复)
|
|
138
|
+
1. 复现问题,确认症状
|
|
139
|
+
2. 定位根因
|
|
140
|
+
3. 编写失败测试(先有红灯)
|
|
141
|
+
4. 修复代码
|
|
142
|
+
5. 验证测试通过(变绿灯)
|
|
143
|
+
6. 回归测试
|
|
144
|
+
|
|
145
|
+
### refactor (重构)
|
|
146
|
+
1. 确保现有测试通过
|
|
147
|
+
2. 小步重构,每步可验证
|
|
148
|
+
3. 重构后测试必须全部通过
|
|
149
|
+
4. 不改变外部行为
|
|
150
|
+
|
|
151
|
+
## Context Logging (决策记录)
|
|
152
|
+
|
|
153
|
+
当你做出以下决策时,MUST 追加到 `.context/current/branches/<当前分支>/session.log`:
|
|
154
|
+
|
|
155
|
+
1. **方案选择**:选 A 不选 B 时,记录原因
|
|
156
|
+
2. **Bug 发现与修复**:根因 + 修复方法 + 教训
|
|
157
|
+
3. **API/架构决策**:接口设计选择
|
|
158
|
+
4. **放弃的方案**:为什么放弃
|
|
159
|
+
|
|
160
|
+
追加格式:
|
|
161
|
+
|
|
162
|
+
## <ISO-8601 时间>
|
|
163
|
+
**Decision**: <你选择了什么>
|
|
164
|
+
**Alternatives**: <被排除的方案>
|
|
165
|
+
**Reason**: <为什么>
|
|
166
|
+
**Risk**: <潜在风险>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
8. **创建 `.context/history/commits.jsonl`**(空文件)
|
|
170
|
+
|
|
171
|
+
9. **创建 `.context/history/commits.md`**(人类视图模板):
|
|
172
|
+
|
|
173
|
+
```markdown
|
|
174
|
+
# Commit Decision History
|
|
175
|
+
|
|
176
|
+
> 此文件是 `commits.jsonl` 的人类可读视图,可由工具重生成。
|
|
177
|
+
> Canonical store: `commits.jsonl` (JSONL, append-only)
|
|
178
|
+
|
|
179
|
+
| Date | Context-Id | Commit | Summary | Decisions | Bugs | Risk |
|
|
180
|
+
|------|-----------|--------|---------|-----------|------|------|
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
10. **注入 CLAUDE.md 引用**(若项目存在 CLAUDE.md):
|
|
184
|
+
|
|
185
|
+
检测项目根目录是否有 `CLAUDE.md`,若有则在末尾追加:
|
|
186
|
+
|
|
187
|
+
```markdown
|
|
188
|
+
|
|
189
|
+
## .context 项目上下文
|
|
190
|
+
|
|
191
|
+
> 项目使用 `.context/` 管理开发决策上下文。
|
|
192
|
+
|
|
193
|
+
- 编码规范:`.context/prefs/coding-style.md`
|
|
194
|
+
- 工作流规则:`.context/prefs/workflow.md`
|
|
195
|
+
- 决策历史:`.context/history/commits.md`
|
|
196
|
+
|
|
197
|
+
**规则**:修改代码前必读 prefs/,做决策时按 workflow.md 规则记录日志。
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
11. 输出初始化结果摘要
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### 子命令:log
|
|
205
|
+
|
|
206
|
+
`[模式:记录]`
|
|
207
|
+
|
|
208
|
+
1. 获取当前 Git 分支名:`git branch --show-current`
|
|
209
|
+
2. 确保 `.context/current/branches/<branch>/` 目录存在
|
|
210
|
+
3. 将 `<message>` 以结构化格式追加到 `session.log`:
|
|
211
|
+
|
|
212
|
+
```markdown
|
|
213
|
+
## <ISO-8601 当前时间>
|
|
214
|
+
<message>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### 子命令:show
|
|
220
|
+
|
|
221
|
+
`[模式:查看]`
|
|
222
|
+
|
|
223
|
+
1. 获取当前分支名
|
|
224
|
+
2. 读取 `.context/current/branches/<branch>/session.log`
|
|
225
|
+
3. 若不存在,提示 "当前分支暂无决策日志"
|
|
226
|
+
4. 输出内容
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
### 子命令:compress
|
|
231
|
+
|
|
232
|
+
`[模式:压缩]`
|
|
233
|
+
|
|
234
|
+
将 `session.log` 压缩为结构化 `uncommit.md`,供提交前审查。
|
|
235
|
+
|
|
236
|
+
1. 读取 `.context/current/branches/<branch>/session.log`
|
|
237
|
+
2. 若为空,提示无内容可压缩
|
|
238
|
+
3. **脱敏**:扫描并替换潜在敏感信息(token/key/password → `[REDACTED]`)
|
|
239
|
+
4. **结构化提取**:从日志中提取 decisions / bugs / alternatives
|
|
240
|
+
5. **生成 uncommit.md**:
|
|
241
|
+
|
|
242
|
+
```markdown
|
|
243
|
+
# Pre-commit Summary: <branch-name>
|
|
244
|
+
|
|
245
|
+
| Time | Summary | Decision | Method | Result & Bug |
|
|
246
|
+
|------|---------|----------|--------|--------------|
|
|
247
|
+
| ... | ... | ... | ... | ... |
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
6. 输出压缩结果供用户审查
|
|
251
|
+
7. 提示用户:确认后可执行 `/ccg:commit` 提交
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
### 子命令:history
|
|
256
|
+
|
|
257
|
+
`[模式:查看]`
|
|
258
|
+
|
|
259
|
+
1. 读取 `.context/history/commits.md`
|
|
260
|
+
2. 若不存在,提示 "暂无历史记录,请先使用 /ccg:context init"
|
|
261
|
+
3. 输出内容
|
|
262
|
+
4. 若用户指定文件路径,从 `commits.jsonl` 检索 `changes.files` 包含该路径的条目
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
### 子命令:squash
|
|
267
|
+
|
|
268
|
+
`[模式:合并]`
|
|
269
|
+
|
|
270
|
+
配合 `git squash` 使用,合并多条 ContextEntry。
|
|
271
|
+
|
|
272
|
+
1. 接收 Context-Id 列表
|
|
273
|
+
2. 从 `commits.jsonl` 读取对应条目
|
|
274
|
+
3. 生成新的聚合 ContextEntry:
|
|
275
|
+
- 新 `context_id`(UUIDv7)
|
|
276
|
+
- `Context-Refs` = 所有被 squash 的 ids
|
|
277
|
+
- 合并 decisions / bugs / changes
|
|
278
|
+
4. 追加到 `commits.jsonl`
|
|
279
|
+
5. 重生成 `commits.md`
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## ContextEntry Schema (v1.0.0)
|
|
284
|
+
|
|
285
|
+
每条 JSONL 记录格式:
|
|
286
|
+
|
|
287
|
+
```json
|
|
288
|
+
{
|
|
289
|
+
"schema_version": "1.0.0",
|
|
290
|
+
"context_id": "<UUIDv7>",
|
|
291
|
+
"created_at": "<ISO-8601>",
|
|
292
|
+
"producer": {
|
|
293
|
+
"tool": "<tool-name>",
|
|
294
|
+
"llm": { "provider": "<provider>", "model": "<model>" }
|
|
295
|
+
},
|
|
296
|
+
"git": {
|
|
297
|
+
"branch": "<branch>",
|
|
298
|
+
"commit_sha": "<short-sha>",
|
|
299
|
+
"trailers": { "Context-Id": "<uuid>" }
|
|
300
|
+
},
|
|
301
|
+
"summary": "<one-line summary>",
|
|
302
|
+
"decisions": [{
|
|
303
|
+
"title": "<decision title>",
|
|
304
|
+
"rationale": "<why>",
|
|
305
|
+
"tradeoffs": ["<tradeoff>"],
|
|
306
|
+
"assumptions": ["<assumption>"],
|
|
307
|
+
"rejected_alternatives": [{ "option": "<alt>", "reason": "<why rejected>" }],
|
|
308
|
+
"side_effects": ["<side effect>"]
|
|
309
|
+
}],
|
|
310
|
+
"bugs": [{
|
|
311
|
+
"symptom": "<what happened>",
|
|
312
|
+
"root_cause": "<why>",
|
|
313
|
+
"fix": "<how fixed>",
|
|
314
|
+
"lesson": "<takeaway>"
|
|
315
|
+
}],
|
|
316
|
+
"changes": { "files": ["<path>"] },
|
|
317
|
+
"tests": [{ "command": "<cmd>", "result": "<pass/fail>", "coverage": "<pct>" }],
|
|
318
|
+
"privacy": { "classification": "internal", "redactions_applied": true }
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 关键规则
|
|
325
|
+
|
|
326
|
+
1. **prefs/ 提交到 Git** — 团队共享编码规范
|
|
327
|
+
2. **current/ 永不提交** — 原始日志仅本地
|
|
328
|
+
3. **history/ 提交到 Git** — 永久决策归档
|
|
329
|
+
4. **commits.jsonl 是 canonical** — commits.md 可重生成
|
|
330
|
+
5. **UUIDv7 为主键** — 不依赖 commit SHA(rebase-safe)
|
|
331
|
+
6. **merge=union** — JSONL append 冲突自动合并
|
|
332
|
+
7. **脱敏先于一切** — 任何写入 history 前必须脱敏
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: '原生多轮对辩原语:codex propose ↔ gemini challenge ↔ codex respond,主线编排 cap N 轮或 challenger 自报无 critical 即停'
|
|
3
|
+
argument-hint: "<topic> [--max-rounds N] [--layer backend|frontend|fullstack]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debate - 原生多轮对辩原语
|
|
7
|
+
|
|
8
|
+
`/ccg:debate <topic>` 由**主线**管 A↔B 多轮对辩状态机。不是 spawn 一个 agent 让它管对辩——主线自己每轮 spawn 一次模型 + 接 ≤ 200 token 摘要 + 判收敛 + 决定下一轮。
|
|
9
|
+
|
|
10
|
+
> **设计来源**:用户 Q3 + `.ccg-research/07-multimodel-collaboration-rethink.md`:多模型协作的硬主修复,避免单模型自我洗稿。
|
|
11
|
+
|
|
12
|
+
## 使用方法
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
/ccg:debate <topic> [--max-rounds N] [--layer backend|frontend|fullstack]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Flags**:
|
|
19
|
+
|
|
20
|
+
| Flag | 默认 | 说明 |
|
|
21
|
+
|------|------|------|
|
|
22
|
+
| `--max-rounds N` | `3` | 最大轮数;硬上限 `10` |
|
|
23
|
+
| `--layer backend\|frontend\|fullstack` | `backend` | 影响 propose / challenge 角色分配(见下表) |
|
|
24
|
+
|
|
25
|
+
## 轮次协议
|
|
26
|
+
|
|
27
|
+
主线按 `debateStateMachine(topic, options)` 给出的计划顺序 spawn:
|
|
28
|
+
|
|
29
|
+
| Round | Kind | backend | frontend | fullstack |
|
|
30
|
+
|-------|------|---------|----------|-----------|
|
|
31
|
+
| 1 | propose | codex | gemini | codex + gemini 并行 |
|
|
32
|
+
| 2 | challenge | gemini | codex | codex + gemini 并行(互相反对) |
|
|
33
|
+
| 3 | respond | codex | gemini | codex + gemini 并行 |
|
|
34
|
+
|
|
35
|
+
> 第 4 轮起循环 propose → challenge → respond,按 `--max-rounds` 截断。
|
|
36
|
+
|
|
37
|
+
## 提示词文件
|
|
38
|
+
|
|
39
|
+
| Kind | CCG Prompt(内嵌或参考) |
|
|
40
|
+
|------|------------------------|
|
|
41
|
+
| propose / respond | `~/.claude/.ccg/prompts/{codex\|gemini}/architect.md`(建设性视角) |
|
|
42
|
+
| challenge | `~/.claude/.ccg/prompts/{codex\|gemini}/reviewer.md`(adversarial / 专挑漏洞) |
|
|
43
|
+
|
|
44
|
+
## 主线编排状态机
|
|
45
|
+
|
|
46
|
+
**Step 0:解析参数**
|
|
47
|
+
|
|
48
|
+
1. 读 `$ARGUMENTS`,第一个非 flag token 即 topic(用引号包裹整段任务描述)
|
|
49
|
+
2. 解析 `--max-rounds N` / `--layer X`
|
|
50
|
+
3. **检测 plugin 可用性(纯目录探测,禁止运行时探活)**:
|
|
51
|
+
- 用 `Bash` 跑 `ls ~/.claude/plugins/ 2>/dev/null` 找 `codex@*` / `gemini@*` 前缀子目录
|
|
52
|
+
- 子目录内须含 `SKILL.md` / `plugin.json` / `package.json` / `manifest.json` 任一 marker → 标 `installed: true`
|
|
53
|
+
- ⛔ **严禁**调用 `/gemini:status` / `/codex:status` / 任何 broker / runtime / health 探活——broker 是**懒启动**的,启动后才有;当前 `brokerRunning: false` 不代表 plugin 不可用
|
|
54
|
+
- 等价 helper:`detectPluginAvailability()`(`src/utils/plugin-detection.ts:156`)
|
|
55
|
+
- 任一 plugin 真未装 → 该模型走 general-purpose 降级路径
|
|
56
|
+
4. 调用 helper:`debateStateMachine(topic, { maxRounds, layer, pluginsAvailable })` 得到 `DebateRoundPlan[]`
|
|
57
|
+
|
|
58
|
+
**Step 1:按计划逐轮 spawn**
|
|
59
|
+
|
|
60
|
+
对每个 round(`for (let i = 0; i < plan.length; i++)`):
|
|
61
|
+
|
|
62
|
+
1. 取 `round = plan[i]`
|
|
63
|
+
2. 对 `round.models` 中的每个 model:
|
|
64
|
+
- **plugin 路径**(`pluginSubagent` = `codex:codex-rescue` 或 `gemini:gemini-rescue`):spawn `Agent(subagent_type=round.pluginSubagent[idx], prompt=<下面的 prompt 模板>)`
|
|
65
|
+
- codex 模型 → `Agent(subagent_type="codex:codex-rescue", ...)`
|
|
66
|
+
- gemini 模型 → `Agent(subagent_type="gemini:gemini-rescue", ...)`
|
|
67
|
+
- **降级路径**(`models[idx] === 'general-purpose'`):spawn `Agent(subagent_type="general-purpose", prompt=<内嵌 round.ccgPromptFiles[idx] 文件全文> + <下面的 prompt 模板>)`
|
|
68
|
+
3. ⛔ **plugin spawn 失败必须重试**:若 `Agent(subagent_type="codex:codex-rescue"|"gemini:gemini-rescue")` 调用失败(spawn 抛错 / 返回非结构化错误 / `parseRoundSummary` 返回 `parsed=false`),最多重试 **2 次**(间隔 **5 秒**)。仅当 **3 次全部失败**时才把该模型本轮替换为 general-purpose 降级路径,并在合成的 `RoundSummary.notes` 标 `plugin spawn failed after 3 attempts, degraded: <具体根因>`。⛔ **禁止**单次失败或单次 broker 负信号即降级——broker 懒启动属正常态。
|
|
69
|
+
|
|
70
|
+
**v4.4.3 schema 硬约束**:标记格式必须是 `plugin spawn failed after N attempts, degraded: <reason>` 三段式(N 必须 ≥ 3,reason 必须给具体根因如 `broker timeout` / `API quota` / `parse-failed`,禁用占位文本如 `unknown` / `n/a`)。`parseRoundSummary` 自动从 NOTES 抽取 populate `RoundSummary.degraded`,Step 2 综合阶段会调 `validateRetryProtocol(累积 RoundSummary[])` 校验合规——违规会出现在最终输出的 ⚠️ 协议违规区段(用户可见)。这是把"3 次重试 + degraded 标记"从 prompt 软约束硬化为 schema-level 校验。
|
|
71
|
+
4. **等待所有 model 返回**(`run_in_background: true` + 事件驱动等通知(不调 TaskOutput))
|
|
72
|
+
5. 对每个返回的 ≤200 token 摘要调用 `parseRoundSummary(text)` → `RoundSummary`
|
|
73
|
+
6. 把本轮的 `RoundSummary[]`(fullstack 为 2 条;backend/frontend 为 1 条)合成一条主 `RoundSummary`(取最长 length,合并 propose/challenge/respond/notes 字段)追加到累积数组
|
|
74
|
+
7. **判收敛**:`shouldStop(累积 RoundSummary[], maxRounds)` → 返回 true 即跳出循环
|
|
75
|
+
|
|
76
|
+
**Step 2:综合输出**
|
|
77
|
+
|
|
78
|
+
主线综合产出:
|
|
79
|
+
- **最终方案**(最近一轮 propose 或 respond)
|
|
80
|
+
- **分歧点列表**(所有 challenge 内容去重 + 简化)
|
|
81
|
+
- **各方观点摘要表**(每轮 model × kind × 一行核心观点)
|
|
82
|
+
- **收敛理由**(哪个信号触发了停止:`no critical` / `max rounds` / `length-converged`)
|
|
83
|
+
- ⚠️ **协议违规区段**(**v4.4.3 强制**):在输出最终 markdown 前调用 `validateRetryProtocol(累积 RoundSummary[])` → `RetryProtocolReport`:
|
|
84
|
+
- `report.compliant === false` → 主线 **必须** 在最终输出加一段 `## ⚠️ Retry Protocol Violations`,逐条列 `report.violations[]`(含 `round` / `kind` / `message`)
|
|
85
|
+
- 4 类违规枚举:`parse-failed-no-degraded` / `insufficient-attempts` / `missing-reason` / `silent-success`
|
|
86
|
+
- 设计动机:原 prompt 软约束 "3 次重试 + degraded 标记" 实测会被主线 LLM 跳过(v4.4.2 dogfood 真实案例:主线 R1 一次 fallback 就接受未重试也未标 degraded)。schema 硬校验让违规可观测、可枚举,避免 silent fallback 在 debate 综合阶段被吞
|
|
87
|
+
- **不要**把 violations 摘要塞进对辩主体内容然后跑路——必须独立成段,让用户看见具体哪轮哪种违规
|
|
88
|
+
|
|
89
|
+
主线输出 markdown 表格,**不写文件**——主线直接展示给用户。
|
|
90
|
+
|
|
91
|
+
## Round prompt 模板(spawn 时注入)
|
|
92
|
+
|
|
93
|
+
### propose / respond round
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
你是<layer>层的 architect。
|
|
97
|
+
任务:propose <topic>(或 respond 上一轮的 challenge:<上一轮 challenge 内容>)
|
|
98
|
+
|
|
99
|
+
要求:
|
|
100
|
+
1. 给出**可落地**的方案,含关键设计决策与权衡
|
|
101
|
+
2. 主动列出 ≥ 2 个潜在风险或反对意见的预判
|
|
102
|
+
3. 输出 ≤ 200 token,严格格式:
|
|
103
|
+
STATUS: completed
|
|
104
|
+
PROPOSE: <方案核心一句话> # 或 RESPOND:
|
|
105
|
+
NOTES: <关键发现 / 风险点 / 一行总结>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### challenge round
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
你是<layer>层的 critic / reviewer,**严格 adversarial 视角**。
|
|
112
|
+
任务:challenge <上一轮 propose 内容>
|
|
113
|
+
|
|
114
|
+
要求:
|
|
115
|
+
1. 找出 ≥ 2 个 critical / 重大风险(性能、安全、可维护性、边界条件)
|
|
116
|
+
2. 如果**真的没有 critical**,明确说"no critical issue"或"agreement reached"
|
|
117
|
+
3. 输出 ≤ 200 token:
|
|
118
|
+
STATUS: completed
|
|
119
|
+
CHALLENGE: <核心反对论点>
|
|
120
|
+
NOTES: <发现的关键漏洞 / "no critical issue" / 改进建议>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 降级路径
|
|
124
|
+
|
|
125
|
+
| 触发条件 | 主线行为 |
|
|
126
|
+
|---------|----------|
|
|
127
|
+
| `detectPlugin(name)` 返回 `{ installed: false }`(目录或 marker 缺失)**或**同一模型连续 3 次 spawn 失败 | `Agent(subagent_type="general-purpose", prompt=<内嵌 ~/.claude/.ccg/prompts/<model>/<file>.md 全文> + Round prompt 模板)` |
|
|
128
|
+
| `parseRoundSummary` 返回 `parsed=false`(subagent 摘要格式损坏) | 本轮主 RoundSummary 标 `parsed=false`,继续下一轮但在最终 NOTES 里标"未达成共识" |
|
|
129
|
+
| 主线无法解析任何字段(连续 2 轮都 parsed=false) | 提前停止,输出"未达成共识 / 子模型摘要解析失败" 给用户 |
|
|
130
|
+
|
|
131
|
+
## 收敛信号(`shouldStop` 双信号)
|
|
132
|
+
|
|
133
|
+
主线**不应**自己重新发明收敛逻辑——直接用 helper:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
shouldStop(rounds, maxRounds) → boolean
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
判定规则:
|
|
140
|
+
1. **任一轮**的 `challenge` 或 `notes` 字段含 `no critical` / `agreement reached` / `lgtm` / `无 critical` / `达成共识` → 立即停
|
|
141
|
+
2. 已达 `maxRounds` → 强制停
|
|
142
|
+
3. 相邻两轮 `length` 变化 < 20% → 信息收敛,停
|
|
143
|
+
|
|
144
|
+
## Helper
|
|
145
|
+
|
|
146
|
+
实现于 `src/utils/debate-orchestrator.ts`,主线**不需要 import**(已通过 `src/index.ts` 导出供 SDK 用户调用),主线直接用此模板里描述的协议手动执行各步骤。
|
|
147
|
+
|
|
148
|
+
helper 暴露:
|
|
149
|
+
- `debateStateMachine(topic, options)` → `DebateRoundPlan[]`
|
|
150
|
+
- `parseRoundSummary(text)` → `RoundSummary`(v4.4.3: 含 `degraded?: { attempts, reason }` 字段)
|
|
151
|
+
- `shouldStop(rounds, maxRounds)` → `boolean`
|
|
152
|
+
- `validateRetryProtocol(rounds)` → `RetryProtocolReport`(**v4.4.3**: Step 2 综合阶段必须调;非 compliant 时主线必须在输出加协议违规区段)
|
|
153
|
+
- `REQUIRED_RETRY_ATTEMPTS` = `3`(与 Step 1.3 的 "3 次全部失败" 文档同步)
|
|
154
|
+
|
|
155
|
+
## 不做
|
|
156
|
+
|
|
157
|
+
- ❌ **不**改源代码 / 不写文件(debate 是纯讨论原语)
|
|
158
|
+
- ❌ **不**调 codeagent-wrapper(debate 走 plugin spawn 范式)
|
|
159
|
+
- ❌ **不** spawn debate-manager subagent 让它管对辩——主线自己管,逐轮接摘要
|
|
160
|
+
|
|
161
|
+
## 与其他命令的关系
|
|
162
|
+
|
|
163
|
+
- `/ccg:plan` / `/ccg:analyze`:单次双模型并行,不轮转。`/ccg:debate` 适合需求**有争议**或**风险高**的设计决策,用多轮"propose → challenge → respond"压力测试。
|
|
164
|
+
- `/ccg:review --fix`:基于已有代码改动的审查闭环。`/ccg:debate` 用于**改动前**的方案讨论。
|
|
165
|
+
- `/ccg:autonomous`:长跑链路,每个 phase 自包含。`/ccg:debate` 是单一主题的对辩原语,不入 roadmap。
|