@zhuan-ai/zhuanspec 2.2.4 → 2.4.8
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/bin/zhuanspec-hook.js +3 -0
- package/dist/cli/hooks.d.ts +14 -0
- package/dist/cli/hooks.js +465 -0
- package/dist/cli/index.js +100 -0
- package/dist/commands/artifact-workflow.js +15 -34
- package/dist/commands/design.d.ts +42 -0
- package/dist/commands/design.js +337 -0
- package/dist/commands/progress.d.ts +32 -0
- package/dist/commands/progress.js +278 -0
- package/dist/commands/review.d.ts +32 -0
- package/dist/commands/review.js +472 -0
- package/dist/commands/validate.d.ts +14 -0
- package/dist/commands/validate.js +161 -10
- package/dist/core/archive.d.ts +1 -0
- package/dist/core/archive.js +45 -3
- package/dist/core/completions/command-registry.js +67 -0
- package/dist/core/configurators/slash/amazon-q.js +32 -2
- package/dist/core/configurators/slash/antigravity.js +8 -2
- package/dist/core/configurators/slash/auggie.js +16 -1
- package/dist/core/configurators/slash/base.js +1 -1
- package/dist/core/configurators/slash/claude.d.ts +4 -0
- package/dist/core/configurators/slash/claude.js +56 -1
- package/dist/core/configurators/slash/cline.js +8 -2
- package/dist/core/configurators/slash/codebuddy.js +22 -1
- package/dist/core/configurators/slash/codex.js +21 -0
- package/dist/core/configurators/slash/costrict.js +15 -0
- package/dist/core/configurators/slash/crush.js +22 -1
- package/dist/core/configurators/slash/cursor.js +22 -1
- package/dist/core/configurators/slash/factory.js +16 -1
- package/dist/core/configurators/slash/gemini.js +8 -2
- package/dist/core/configurators/slash/github-copilot.js +19 -1
- package/dist/core/configurators/slash/iflow.js +22 -1
- package/dist/core/configurators/slash/kilocode.js +4 -1
- package/dist/core/configurators/slash/opencode.js +27 -0
- package/dist/core/configurators/slash/qoder.d.ts +4 -0
- package/dist/core/configurators/slash/qoder.js +59 -1
- package/dist/core/configurators/slash/qwen.js +8 -2
- package/dist/core/configurators/slash/roocode.js +8 -2
- package/dist/core/configurators/slash/windsurf.js +8 -2
- package/dist/core/dashboard/metrics.d.ts +33 -0
- package/dist/core/dashboard/metrics.js +114 -0
- package/dist/core/hooks/collect-knowledge.d.ts +16 -0
- package/dist/core/hooks/collect-knowledge.js +203 -0
- package/dist/core/hooks/context-load-hook.d.ts +25 -0
- package/dist/core/hooks/context-load-hook.js +159 -0
- package/dist/core/hooks/deviation-check.d.ts +27 -0
- package/dist/core/hooks/deviation-check.js +403 -0
- package/dist/core/hooks/deviation-handler.d.ts +43 -0
- package/dist/core/hooks/deviation-handler.js +98 -0
- package/dist/core/hooks/init.d.ts +14 -0
- package/dist/core/hooks/init.js +244 -0
- package/dist/core/hooks/notify-milestone.d.ts +14 -0
- package/dist/core/hooks/notify-milestone.js +170 -0
- package/dist/core/hooks/post-apply.d.ts +29 -0
- package/dist/core/hooks/post-apply.js +173 -0
- package/dist/core/hooks/post-archive.d.ts +7 -0
- package/dist/core/hooks/post-archive.js +208 -0
- package/dist/core/hooks/pre-apply.d.ts +34 -0
- package/dist/core/hooks/pre-apply.js +139 -0
- package/dist/core/hooks/pre-archive.d.ts +7 -0
- package/dist/core/hooks/pre-archive.js +50 -0
- package/dist/core/hooks/record-progress.d.ts +49 -0
- package/dist/core/hooks/record-progress.js +494 -0
- package/dist/core/hooks/review-hooks.d.ts +89 -0
- package/dist/core/hooks/review-hooks.js +345 -0
- package/dist/core/hooks/review-orchestrator.d.ts +40 -0
- package/dist/core/hooks/review-orchestrator.js +146 -0
- package/dist/core/hooks/summarize.d.ts +15 -0
- package/dist/core/hooks/summarize.js +282 -0
- package/dist/core/hooks/user-input-hook.d.ts +25 -0
- package/dist/core/hooks/user-input-hook.js +179 -0
- package/dist/core/init.d.ts +8 -0
- package/dist/core/init.js +251 -23
- package/dist/core/parsers/requirement-blocks.js +13 -10
- package/dist/core/templates/agents-template.d.ts +1 -1
- package/dist/core/templates/agents-template.js +510 -243
- package/dist/core/templates/index.d.ts +1 -0
- package/dist/core/templates/index.js +1 -0
- package/dist/core/templates/skill-templates.js +46 -152
- package/dist/core/templates/slash-command-templates.d.ts +1 -1
- package/dist/core/templates/slash-command-templates.js +352 -20
- package/dist/core/templates/tasks-template.d.ts +7 -0
- package/dist/core/templates/tasks-template.js +130 -24
- package/dist/core/templates/tdd-tasks-template.d.ts +3 -0
- package/dist/core/templates/tdd-tasks-template.js +91 -38
- package/dist/core/templates/test-cases-template.d.ts +41 -0
- package/dist/core/templates/test-cases-template.js +128 -0
- package/dist/core/validation/strict-rules.d.ts +44 -5
- package/dist/core/validation/strict-rules.js +302 -8
- package/dist/core/validation/validator.js +52 -2
- package/dist/core/view.d.ts +1 -0
- package/dist/core/view.js +60 -2
- package/dist/mcp/index.d.ts +28 -0
- package/dist/mcp/index.js +31 -0
- package/dist/utils/file-system.d.ts +1 -0
- package/dist/utils/file-system.js +11 -0
- package/dist/utils/item-discovery.js +24 -2
- package/dist/utils/phase-utils.d.ts +36 -0
- package/dist/utils/phase-utils.js +117 -0
- package/package.json +22 -23
- package/schemas/spec-driven/schema.yaml +45 -31
- package/schemas/spec-driven/templates/spec.md +142 -5
- package/schemas/spec-driven/templates/tasks.md +73 -9
|
@@ -2,17 +2,119 @@ export const agentsTemplate = `# ZhuanSpec 使用说明
|
|
|
2
2
|
|
|
3
3
|
面向使用 ZhuanSpec 进行规范驱动开发的 AI 编程助手的说明文档。
|
|
4
4
|
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ⚡ 三条铁律(不可违反)
|
|
8
|
+
|
|
9
|
+
> 三条铁律是 ZhuanSpec 工作流的核心约束,任何情况下都必须遵守。
|
|
10
|
+
|
|
11
|
+
| 铁律 | 含义 | 违反后果 |
|
|
12
|
+
|------|------|---------|
|
|
13
|
+
| **No Spec, No Code** | 没有文档不准写代码 | Propose 阶段产出 spec 才能进入 Apply |
|
|
14
|
+
| **Spec is Truth** | 文档与代码冲突时,错的一定是代码 | 归档时强制校验 Spec-Code 一致性 |
|
|
15
|
+
| **Reverse Sync** | 发现偏差先修 Spec,再修代码 | Apply 阶段每完成一个 Task 做偏差检测 |
|
|
16
|
+
|
|
17
|
+
### 铁律执行机制
|
|
18
|
+
|
|
19
|
+
**铁律一执行**:
|
|
20
|
+
- Propose 阶段创建提案后,必须等待用户明确批准(回复"Plan Approved"或选择"批准,进入实施阶段")才能进入 Apply
|
|
21
|
+
- 自动验证通过后,使用选项式交互(AskUserQuestion)弹出确认对话框
|
|
22
|
+
- 未批准前,PreToolUse Hook 阻断所有代码修改操作
|
|
23
|
+
|
|
24
|
+
**铁律二执行**:
|
|
25
|
+
- Archive 阶段前,必须验证归档内容与代码实现一致
|
|
26
|
+
- 如不一致,必须先更新归档内容,再完成归档
|
|
27
|
+
- PreArchive Hook 检查 Spec-Code 一致性
|
|
28
|
+
|
|
29
|
+
**铁律三执行**:
|
|
30
|
+
- Apply 阶段每次 Write/Edit 操作前,PreToolUse Hook 检测偏离
|
|
31
|
+
- **偏离检测触发机制**:
|
|
32
|
+
- 提案范围外文件修改时自动触发
|
|
33
|
+
- 用户输入纠正关键词("不对"、"错了"、"这里应该是"等)时自动触发
|
|
34
|
+
- 通过读取 \`progress.json\` 的 \`phase\` 字段判断当前阶段
|
|
35
|
+
- 如果修改文件不在提案范围内,触发偏离处理流程:
|
|
36
|
+
1. 弹出选项式交互:更新提案后继续 / Bug修复豁免 / 取消修改
|
|
37
|
+
2. 用户选择"更新提案后继续" → AI 进入 Propose 模式 → 自动更新 proposal.md 和 tasks.md → \`zhuanspec validate --auto-fix\` → 返回 Apply 执行原修改
|
|
38
|
+
3. 用户选择"Bug修复豁免" → 标记为 Bug 修复 → 允许修改,跳过提案流程
|
|
39
|
+
4. 用户选择"取消" → 不执行修改 → 继续原任务
|
|
40
|
+
- **偏离修正流程**(用户纠正时):
|
|
41
|
+
1. 先修改 spec 文件,实时同步用户确认
|
|
42
|
+
2. 用户确认后修改代码,完成后验证
|
|
43
|
+
3. 用户确认无误后触发知识沉淀
|
|
44
|
+
|
|
45
|
+
### AI 自由度控制矩阵
|
|
46
|
+
|
|
47
|
+
| 阶段 | 自由度 | 允许行为 | 禁止行为 |
|
|
48
|
+
|------|--------|---------|---------|
|
|
49
|
+
| **Propose** | 高 | 探索代码、设计方案、提问澄清 | 编写任何代码 |
|
|
50
|
+
| **Apply** | 零 | 严格按 tasks.md 施工 | 超出提案范围修改、自行添加任务 |
|
|
51
|
+
| **Review** | 中 | 验证实现、生成测试、审查代码 | 修改功能代码 |
|
|
52
|
+
| **Archive** | 低 | 合并规范、生成摘要 | 修改已归档内容 |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 知识库检查
|
|
57
|
+
|
|
58
|
+
**在任何阶段开始前,必须先检查知识库:**
|
|
59
|
+
|
|
60
|
+
| 操作 | 命令 | 目的 |
|
|
61
|
+
|------|------|------|
|
|
62
|
+
| 搜索陷阱 | \`rg "[关键词]" zhuanspec/knowledge/troubleshooting/\` | 避免重复踩坑 |
|
|
63
|
+
| 搜索最佳实践 | \`rg "[关键词]" zhuanspec/knowledge/best-practices/\` | 学习成功经验 |
|
|
64
|
+
| 搜索隐式约定 | \`rg "[关键词]" zhuanspec/knowledge/implicit-conventions/\` | 理解团队约定 |
|
|
65
|
+
| 阅读知识索引 | \`cat zhuanspec/knowledge/index.md\` | 了解项目级知识摘要 |
|
|
66
|
+
|
|
67
|
+
**知识库作用**:
|
|
68
|
+
- 减少重复踩坑,积累项目经验
|
|
69
|
+
- 提供团队隐式约定的书面记录
|
|
70
|
+
- 加速新成员融入和知识传承
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
5
74
|
## 快速检查清单
|
|
6
75
|
|
|
7
76
|
- 搜索现有工作:\`zhuanspec spec list --long\`、\`zhuanspec list\`(仅使用 \`rg\` 进行全文搜索)
|
|
77
|
+
- **检查知识库**:\`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关陷阱和最佳实践
|
|
8
78
|
- 确定范围:新功能 vs 修改现有功能
|
|
9
79
|
- 选择唯一的 \`change-id\`:kebab-case 格式,动词开头(\`add-\`、\`update-\`、\`remove-\`、\`refactor-\`)
|
|
10
|
-
- 搭建结构:\`proposal.md\`、\`tasks.md\`、\`design.md
|
|
80
|
+
- 搭建结构:\`proposal.md\`、\`tasks.md\`、\`design.md\`,以及每个受影响功能的规范增量
|
|
11
81
|
- 编写增量:使用 \`## ADDED|MODIFIED|REMOVED|RENAMED Requirements\`;每个要求至少包含一个 \`#### Scenario:\`
|
|
12
82
|
- 验证:运行 \`zhuanspec validate [change-id] --strict\` 并修复问题
|
|
13
83
|
- 请求批准:在提案获得批准之前不要开始实施
|
|
14
84
|
|
|
15
|
-
##
|
|
85
|
+
## 进度汇报约定
|
|
86
|
+
|
|
87
|
+
Apply 阶段执行每个任务时,必须按以下格式输出进度:
|
|
88
|
+
|
|
89
|
+
**任务开始时**:
|
|
90
|
+
\`\`\`
|
|
91
|
+
━━━ 🚀 开始任务 [X.Y/N] ━━━━━━━━━━━━━━━━
|
|
92
|
+
任务: [任务描述]
|
|
93
|
+
Wave: W/N | Phase: Apply
|
|
94
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
95
|
+
\`\`\`
|
|
96
|
+
|
|
97
|
+
**任务完成后**:
|
|
98
|
+
\`\`\`
|
|
99
|
+
━━━ ✅ 任务完成 [X.Y/N] ━━━━━━━━━━━━━━━━
|
|
100
|
+
已修改: [文件列表]
|
|
101
|
+
下一个: [下一任务ID]
|
|
102
|
+
整体进度: ████████░░░░ XX.X%
|
|
103
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
|
+
\`\`\`
|
|
105
|
+
|
|
106
|
+
**进度条格式**:
|
|
107
|
+
- 使用 12 个 block 字符(█ 和 ░)
|
|
108
|
+
- 进度百分比 = (已完成任务数 / 总任务数) × 100
|
|
109
|
+
- 保留 1 位小数
|
|
110
|
+
|
|
111
|
+
**示例**:
|
|
112
|
+
- 3/8 完成 → \`███████░░░░░░░ 37.5%\`
|
|
113
|
+
- 6/8 完成 → \`████████████░░ 75.0%\`
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 四阶段工作流
|
|
16
118
|
|
|
17
119
|
### 阶段 1:创建变更
|
|
18
120
|
在以下情况下创建提案:
|
|
@@ -41,55 +143,229 @@ export const agentsTemplate = `# ZhuanSpec 使用说明
|
|
|
41
143
|
- 现有行为的测试
|
|
42
144
|
|
|
43
145
|
**工作流**
|
|
44
|
-
0.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
146
|
+
0. **检查知识库、加载项目知识并审查项目**:
|
|
147
|
+
- 运行 \`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关陷阱和最佳实践,避免重复踩坑
|
|
148
|
+
- 阅读 \`zhuanspec/knowledge/index.md\` 了解项目级知识摘要
|
|
149
|
+
- **加载项目知识**:调用 \`@skill:load-project-knowledge\` 进行渐进式加载:
|
|
150
|
+
* 输入:domain(当前项目)、keywords(从需求描述提取)
|
|
151
|
+
* 获取:matched_services(涉及的服务列表)、search_priority(检索优先路径)、architecture_constraints(架构约束)
|
|
152
|
+
* 使用:后续代码定位使用 search_priority 限定范围,方案设计检查 architecture_constraints
|
|
153
|
+
* 兼容策略:若未找到 project.md 或关键词无匹配,输出警告并使用全局检索
|
|
154
|
+
- 阅读 \`zhuanspec/project.md\` 了解项目约定(提示:"✓ Loaded project.md")
|
|
155
|
+
- 审查 \`zhuanspec/project.md\`,\`zhuanspec list\` 和 \`zhuanspec list --specs\` 以了解当前上下文。
|
|
156
|
+
1. **强制询问测试用例(TDD 模式检查点,必须首先执行)**:
|
|
157
|
+
- 使用选项式交互询问:"请提供相关的测试用例(可选),可以是:本地目录路径、在线链接(将通过 zzcase-data-fetcher skill 获取)、或跳过此步骤继续常规流程"
|
|
158
|
+
- 用户选择"提供测试用例":进入 TDD 驱动模式
|
|
159
|
+
* 明确告知:测试用例将用于需求定义、单元测试生成、实施验证
|
|
160
|
+
* 在 proposal.md 创建 "Test Case Coverage" 部分
|
|
161
|
+
* 在 tasks.md 使用 \`@test-case:TC-XXX\` 标签关联任务
|
|
162
|
+
* 创建 test-cases.md 记录测试用例详情
|
|
163
|
+
- 用户选择"跳过":继续常规流程(即提案无需考虑测试case)
|
|
164
|
+
|
|
165
|
+
⚠️ **CHECKPOINT [TDD-MODE]**:
|
|
166
|
+
- TDD 模式下,Apply 阶段每个任务完成后需验证对应测试用例通过
|
|
167
|
+
- Review 阶段包含测试覆盖率检查
|
|
168
|
+
- 测试用例在 TDD 模式下发挥关键验证作用,确保代码符合预期行为
|
|
169
|
+
|
|
170
|
+
2. **强制澄清检查(必须执行,不可跳过)**:分析用户请求,识别所有不确定或模糊的方面(范围、技术选择、实现细节、数据获取来源、服务分层、依赖关系、优先级、验收标准等......)。如果发现任何模糊之处,必须停止并使用**选项式交互**(如 \`AskQuestion\` 工具)提问,获得明确答复后才能继续。严禁在不确定的情况下自行推测或创建提案,严禁要求用户手动输入大段文字。
|
|
171
|
+
|
|
172
|
+
⚠️ **CHECKPOINT [PRE-CLARIFICATION]**:
|
|
173
|
+
You MUST record the pre-clarification result in tasks.md under "## Pre-Clarification Log":
|
|
174
|
+
- If questions were asked: Record each question and the user's answer
|
|
175
|
+
- If no clarification needed: Write "Status: COMPLETED - No clarification needed" with brief justification
|
|
176
|
+
- This section MUST NOT be empty or contain only HTML comments
|
|
177
|
+
- NEVER proceed to proposal writing without completing this checkpoint
|
|
178
|
+
|
|
179
|
+
3. 选择一个唯一的动词开头的 \`change-id\`,并在 \`zhuanspec/changes/<id>/\` 下搭建 \`proposal.md\`、\`tasks.md\`、\`design.md\` 和规范增量。
|
|
180
|
+
4. 将变更映射为具体的功能或要求,将多范围的工作分解为具有明确关系和顺序的不同规范增量。
|
|
181
|
+
5. 当解决方案跨越多个系统、引入新模式或在提交规范之前需要权衡讨论时,在 \`design.md\` 中捕获架构推理。
|
|
182
|
+
6. 在 \`changes/<id>/specs/<capability>/spec.md\` 中起草规范增量(每个功能一个文件夹),使用 \`## ADDED|MODIFIED|REMOVED Requirements\`,每个要求至少包含一个 \`#### Scenario:\`,并在相关时交叉引用相关功能。
|
|
183
|
+
7. **发现可用 Skill 并创建 tasks.md**:
|
|
184
|
+
- 运行 \`zhuanspec skills list --json\` 获取当前环境中可用的 skill 列表及其 description
|
|
185
|
+
- 在 \`proposal.md\` 的 **Skill Mapping** 段中基于 skill description 进行语义匹配:
|
|
186
|
+
- 仔细阅读每个 skill 的 description,理解其具体功能和适用场景
|
|
187
|
+
- 只有当实现区域的实际功能与 skill description 明确匹配时才关联
|
|
188
|
+
- 简单的代码修改(如枚举值增删)应匹配通用编码规范 skill,而非架构级 skill
|
|
189
|
+
- 避免仅因模块名称或文件路径中的关键词而错误匹配
|
|
190
|
+
- 在表格中说明匹配理由
|
|
191
|
+
- 将 \`tasks.md\` 起草为有序的小型、可验证工作项列表
|
|
192
|
+
- 使用 \`@skill:<real-skill-name>\` 标注与 skill 匹配的任务(支持多个:\`@skill:name1,name2\`)
|
|
193
|
+
- 仅当 skill 明确匹配任务时才标注,没有匹配的 skill 可省略标签
|
|
194
|
+
|
|
195
|
+
⚠️ **CHECKPOINT [SKILL-TAGGING]**:
|
|
196
|
+
1. You MUST run \`zhuanspec skills list\` first and record discovered skills in the Skill Mapping table
|
|
197
|
+
2. Every task MUST have either @skill:real-skill-name or @skill:none
|
|
198
|
+
3. If @skill:none, you MUST provide a justification (e.g., "pure config change, no skill applies")
|
|
199
|
+
4. @skill names MUST match exactly the names returned by \`zhuanspec skills list\` — do NOT invent skill names
|
|
200
|
+
5. The Skill Mapping table in tasks.md MUST NOT be empty
|
|
201
|
+
6. validate --strict will verify all @skill names exist in the known skill list
|
|
202
|
+
|
|
203
|
+
⚠️ **CHECKPOINT [TASK-ORDERING]**:
|
|
204
|
+
1. Tasks in tasks.md MUST be organized under Wave headers (### Wave 1, ### Wave 2, etc.)
|
|
205
|
+
2. Wave assignment must be computed from @depends relationships (Wave 1 = no deps, Wave N = depends on Wave N-1)
|
|
206
|
+
3. No task may appear before a task it depends on
|
|
207
|
+
4. You MUST add a "## Dependency Analysis" section at the end with "Status: COMPLETED"
|
|
208
|
+
5. validate --strict will verify task ordering matches computed waves
|
|
209
|
+
|
|
210
|
+
8. **测试 case 处理(仅 TDD 模式)**:
|
|
211
|
+
|
|
212
|
+
**⚠️ 模式判断**:根据以下条件判断当前是哪种模式:
|
|
213
|
+
- **有 case 模式**:用户提供测试 case 来源(taskId/bicId)、用户要求 TDD 工作流、或明确要求设计测试 case
|
|
214
|
+
- **无 case 模式**:普通 spec-driven 工作流,用户未提供测试 case 相关信息
|
|
215
|
+
|
|
216
|
+
**【有 case 模式】**(必须执行以下步骤):
|
|
217
|
+
- 获取测试 case 来源:
|
|
218
|
+
* 通过 taskId/bicId 获取测试 case(使用 MCP 工具 \`zzcase_get_api_report_queryBaseCase\`)
|
|
219
|
+
* 手动录入测试 case
|
|
220
|
+
- **【强制】创建 test-cases.md 文件**:
|
|
221
|
+
* 使用 \`getTestCasesTemplate\` 模板(从 \`src/core/templates/index.ts\` 导出)
|
|
222
|
+
* 文件路径:\`changes/<change-id>/test-cases.md\`
|
|
223
|
+
* 填写获取时间、来源(taskId/bicId/manual)、测试 case 详情
|
|
224
|
+
* 每个 TC-XXX 必须包含:前置条件、测试步骤、预期结果、验收点
|
|
225
|
+
- 在 \`tasks.md\` 增加 **Test Case Coverage** 表格(四列格式):
|
|
226
|
+
| Task | 测试 Case ID | 测试 Case 文件路径 | 覆盖场景 |
|
|
227
|
+
|------|-------------|-------------------|----------|
|
|
228
|
+
* "测试 Case 文件路径" 列填写 BIC 路径层级格式
|
|
229
|
+
- 使用 \`@test-case:TC-XXX\` 关联任务与测试 case
|
|
230
|
+
|
|
231
|
+
⚠️ **CHECKPOINT [TEST-CASE-COVERAGE]**(仅适用于有 case 模式):
|
|
232
|
+
1. 每个 Requirement 应至少对应一个测试 case
|
|
233
|
+
2. 测试 case 应覆盖正向和异常场景
|
|
234
|
+
3. **必须创建 test-cases.md 文件**(使用 \`getTestCasesTemplate\` 模板)
|
|
235
|
+
4. Test Case Coverage 表格必须包含四列:Task、测试 Case ID、测试 Case 文件路径、覆盖场景
|
|
236
|
+
5. validate --strict 会验证测试 case 覆盖率(**阻塞级别**)
|
|
237
|
+
|
|
238
|
+
**【无 case 模式】**(跳过测试 case 相关步骤):
|
|
239
|
+
- 不创建 test-cases.md
|
|
240
|
+
- tasks.md 不需要 Test Case Coverage 段
|
|
241
|
+
- validate --strict 的 test-case-coverage 规则自动跳过(SKIPPED)
|
|
242
|
+
- 单测统一在 Review 阶段处理
|
|
243
|
+
|
|
244
|
+
9. 【自动验证与修复】:
|
|
245
|
+
运行 \`zhuanspec validate <id> --strict --auto-fix\` 进行验证:
|
|
246
|
+
- 如果验证通过(PASS):继续下一步
|
|
247
|
+
- 如果验证失败(FAIL):自动触发修复循环:
|
|
248
|
+
* CLI 自动分析错误原因
|
|
249
|
+
* CLI 自动生成修复方案并执行
|
|
250
|
+
* 重新验证(最多 3 次循环)
|
|
251
|
+
* 循环结束后仍未通过:输出错误报告,等待人工干预
|
|
252
|
+
- 验证通过后,输出提案摘要
|
|
253
|
+
|
|
254
|
+
10. 【输出提案摘要】:
|
|
255
|
+
• 变更原因、内容、影响范围
|
|
256
|
+
• 关键 Requirements
|
|
257
|
+
• 任务数量和 Wave 分布
|
|
258
|
+
|
|
259
|
+
11. 【选项式交互确认】:
|
|
260
|
+
使用 AskQuestion 工具弹出确认对话框:
|
|
261
|
+
\`\`\`
|
|
262
|
+
问题: "请确认是否批准此提案?"
|
|
263
|
+
选项:
|
|
264
|
+
A) 批准,进入实施阶段
|
|
265
|
+
B) 需要修改提案内容
|
|
266
|
+
C) 暂不批准,稍后处理
|
|
267
|
+
D) 其他(请在后续补充说明)
|
|
268
|
+
\`\`\`
|
|
269
|
+
|
|
270
|
+
用户选择处理:
|
|
271
|
+
• 选择"批准":创建 \`.approved\` 文件,进入 Apply 阶段
|
|
272
|
+
• 选择"修改":返回步骤 4 修改提案内容
|
|
273
|
+
• 选择"暂不":保持提案状态,等待后续处理
|
|
274
|
+
• 选择"其他":等待用户补充说明后继续
|
|
275
|
+
|
|
276
|
+
⚠️ **CHECKPOINT [PLAN-APPROVED]**:
|
|
277
|
+
- 用户必须明确选择"批准"选项才能进入 Apply 阶段
|
|
278
|
+
- 未批准前禁止任何代码修改操作
|
|
279
|
+
- PreToolUse Hook 会阻断未批准状态的 Write/Edit 操作
|
|
57
280
|
|
|
58
281
|
### 阶段 2:实施变更
|
|
59
282
|
|
|
283
|
+
**前置检查**:
|
|
284
|
+
- ⚠️ **CHECKPOINT [PLAN-APPROVED]**: \`.approved\` 文件必须存在。未批准的提案禁止实施。
|
|
285
|
+
- PreToolUse Hook 会阻断未批准状态的 Write/Edit 操作
|
|
286
|
+
- 如果 \`.approved\` 不存在,提示用户先完成 Proposal 阶段的批准流程
|
|
287
|
+
|
|
60
288
|
将这些步骤作为待办事项跟踪,逐一完成。
|
|
61
289
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
290
|
+
0. **检查知识库、加载项目知识并阅读 proposal.md**:
|
|
291
|
+
- 运行 \`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关最佳实践和陷阱
|
|
292
|
+
- **加载项目知识**:调用 \`@skill:load-project-knowledge\` 进行渐进式加载:
|
|
293
|
+
* 输入:domain(当前项目)、keywords(从 tasks.md 提取)
|
|
294
|
+
* 获取:matched_services、search_priority、architecture_constraints
|
|
295
|
+
* 使用:代码定位使用 search_priority 限定范围,避免全局检索偏差
|
|
296
|
+
- 阅读 \`zhuanspec/project.md\` 了解项目约定(提示:"✓ Loaded project.md")
|
|
297
|
+
- 阅读 proposal.md - 了解要构建的内容
|
|
298
|
+
1. **阅读 design.md**(如果存在) - 审查技术决策
|
|
299
|
+
2. **阅读 tasks.md** - 获取实施清单
|
|
300
|
+
3. **判断执行模式** - 根据 tasks.md 内容选择执行策略:
|
|
301
|
+
- **如果 tasks.md 包含 \`@depends\` 依赖声明**:
|
|
302
|
+
→ 按 Wave 并行执行(使用 superpowers:subagent-driven-development skill)
|
|
68
303
|
- **如果 tasks.md 无依赖声明**:
|
|
69
|
-
→
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
|
|
304
|
+
→ 按顺序执行
|
|
305
|
+
4. **按顺序实施任务**(无依赖声明时)- 保持编辑最小化。如果任务标注了 \`@skill:<skill-name>\`,直接调用对应 skill
|
|
306
|
+
- **阶段职责要求**:Apply 阶段不生成单测文件;单测统一在 Review 阶段生成与验证。
|
|
307
|
+
5. **确认完成** - 在更新状态之前确保 \`tasks.md\` 中的每个项目都已完成
|
|
308
|
+
6. **更新清单** - 所有工作完成后,将每个任务设置为 \`- [x]\`
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
### 阶段 3:Review
|
|
312
|
+
|
|
313
|
+
**检查知识库、project.md 并执行审查**:
|
|
314
|
+
- 运行 \`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关审查最佳实践
|
|
315
|
+
- 阅读 \`zhuanspec/project.md\` 了解项目约定(提示:"✓ Loaded project.md")
|
|
316
|
+
|
|
317
|
+
执行 \`zhuanspec review <change-id>\`,启动三轨并行审查:
|
|
318
|
+
|
|
319
|
+
**三轨并行机制**:
|
|
320
|
+
- 使用 Agent 工具启动 3 个 subagent 并行执行
|
|
321
|
+
- **Code Review subagent**:调用 \`code-review-expert\` skill
|
|
322
|
+
- **Unit Test subagent**:调用 \`generate-mockito-unit-test-skill\` skill
|
|
323
|
+
- **Spec-Code Consistency subagent**:执行一致性检查
|
|
324
|
+
|
|
325
|
+
**Subagent 自闭环**:
|
|
326
|
+
- 每个 subagent 内部独立修复循环(最多3轮)
|
|
327
|
+
- 发现问题时立即修复,然后重新检查
|
|
328
|
+
- 输出独立报告文件:
|
|
329
|
+
- \`code-review-result.json\`
|
|
330
|
+
- \`unit-test-result.json\`
|
|
331
|
+
- \`spec-consistency-result.json\`
|
|
332
|
+
- 汇总生成 \`review-report.md\`
|
|
333
|
+
|
|
334
|
+
**验收标准**:
|
|
335
|
+
- review passed
|
|
336
|
+
- critical = 0
|
|
337
|
+
- 单测通过
|
|
338
|
+
- 三轨全部 PASS
|
|
339
|
+
|
|
340
|
+
### 阶段 4:归档变更
|
|
341
|
+
|
|
342
|
+
**前置检查**:
|
|
343
|
+
- ⚠️ **CHECKPOINT [REVIEW-PASSED]**: Review 阶段必须通过(三轨全部 PASS)
|
|
344
|
+
- \`review-report.md\` 存在且显示 passed
|
|
345
|
+
- \`code-review-result.json\`: critical = 0
|
|
346
|
+
- \`unit-test-result.json\`: tests passed
|
|
347
|
+
- \`spec-consistency-result.json\`: passed
|
|
348
|
+
|
|
349
|
+
**步骤**:
|
|
350
|
+
0. **检查知识库**:运行 \`rg "[关键词]" zhuanspec/knowledge/\` 搜索是否有需要沉淀的知识
|
|
351
|
+
1. **确定变更 ID**:运行 \`zhuanspec list\` 确认要归档的变更
|
|
352
|
+
2. **验证 Review 门禁**:确认上述四个结果文件存在且全部通过
|
|
353
|
+
3. **运行归档命令**:执行 \`zhuanspec archive <id> --yes\`(仅工具类工作使用 \`--skip-specs\`)
|
|
354
|
+
4. **验证归档结果**:运行 \`zhuanspec validate --strict\` 确认通过
|
|
355
|
+
5. **知识沉淀(手动补充)**:调用 \`@skill:zhuanspec:knowledge\` 从会话记忆补充知识
|
|
356
|
+
- CLI 已自动从变更目录提取结构化知识
|
|
357
|
+
- AI 需从会话补充隐式约定、调试发现等
|
|
358
|
+
6. **会话分析**:调用 \`@skill:session-analytics\` 分析会话指标数据
|
|
359
|
+
7. **输出反馈链接**:告知用户填写使用反馈:
|
|
360
|
+
📋 https://doc.weixin.qq.com/forms/AJ4AfQfgAAwACwAAwaVABsCNqDXIKn8sf
|
|
90
361
|
|
|
91
362
|
## 执行任何任务之前
|
|
92
363
|
|
|
364
|
+
**知识库检查:**
|
|
365
|
+
- [ ] 搜索相关陷阱:\`rg "[关键词]" zhuanspec/knowledge/troubleshooting/\`
|
|
366
|
+
- [ ] 搜索最佳实践:\`rg "[关键词]" zhuanspec/knowledge/best-practices/\`
|
|
367
|
+
- [ ] 阅读知识索引:\`cat zhuanspec/knowledge/index.md\`
|
|
368
|
+
|
|
93
369
|
**上下文检查清单:**
|
|
94
370
|
- [ ] 在 \`specs/[capability]/spec.md\` 中阅读相关规范
|
|
95
371
|
- [ ] 检查 \`changes/\` 中的待处理变更是否存在冲突
|
|
@@ -98,6 +374,7 @@ export const agentsTemplate = `# ZhuanSpec 使用说明
|
|
|
98
374
|
- [ ] 运行 \`zhuanspec list --specs\` 查看现有功能
|
|
99
375
|
|
|
100
376
|
**创建规范之前:**
|
|
377
|
+
- **检查知识库**:\`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关陷阱和最佳实践
|
|
101
378
|
- 始终检查功能是否已存在
|
|
102
379
|
- 优先修改现有规范而不是创建重复项
|
|
103
380
|
- 使用 \`zhuanspec show [spec]\` 审查当前状态
|
|
@@ -105,231 +382,120 @@ export const agentsTemplate = `# ZhuanSpec 使用说明
|
|
|
105
382
|
|
|
106
383
|
## 强制澄清工作流
|
|
107
384
|
|
|
108
|
-
|
|
385
|
+
> **核心原则**:遇到任何模糊点,必须澄清。严禁猜测、臆测、自行假设。
|
|
109
386
|
|
|
110
|
-
|
|
387
|
+
### 澄清闭环机制
|
|
111
388
|
|
|
112
|
-
|
|
113
|
-
- 现有规范(\`zhuanspec/specs/\`)
|
|
114
|
-
- 项目约定(\`zhuanspec/project.md\`)
|
|
115
|
-
- 代码库结构和现有模式
|
|
116
|
-
- 上下文文件和相关变更
|
|
389
|
+
在创建任何提案文件之前,必须执行以下流程:
|
|
117
390
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
391
|
+
\`\`\`
|
|
392
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
393
|
+
│ 1. 查阅现有来源 │
|
|
394
|
+
│ → 规范、项目约定、代码库、上下文文件 │
|
|
395
|
+
│ → 尝试从这些来源确定信息 │
|
|
396
|
+
├─────────────────────────────────────────────────────────────┤
|
|
397
|
+
│ 2. 识别模糊点 │
|
|
398
|
+
│ → 分析用户请求,列出不确定的方面 │
|
|
399
|
+
│ → 排除可以从现有来源确定的方面 │
|
|
400
|
+
├─────────────────────────────────────────────────────────────┤
|
|
401
|
+
│ 3. 判断提问策略 │
|
|
402
|
+
│ → 如果仍有模糊点:必须提问 │
|
|
403
|
+
│ → 如果全部明确:继续创建 │
|
|
404
|
+
├─────────────────────────────────────────────────────────────┤
|
|
405
|
+
│ 4. 生成澄清问题 │
|
|
406
|
+
│ → 优先检查 superpowers:brainstorming 是否可用 │
|
|
407
|
+
│ → 可用:调用该技能生成高质量问题 │
|
|
408
|
+
│ → 不可用:直接使用 AskUserQuestion │
|
|
409
|
+
├─────────────────────────────────────────────────────────────┤
|
|
410
|
+
│ 5. 选项式交互 │
|
|
411
|
+
│ → 2-5 个预设选项 + "其他"兜底 │
|
|
412
|
+
│ → 等待用户选择 │
|
|
413
|
+
├─────────────────────────────────────────────────────────────┤
|
|
414
|
+
│ 6. 处理"其他"选项 │
|
|
415
|
+
│ → 用户选择"其他"后针对性追问 │
|
|
416
|
+
│ → 仍优先使用选项式 │
|
|
417
|
+
├─────────────────────────────────────────────────────────────┤
|
|
418
|
+
│ 7. 开始创建 │
|
|
419
|
+
│ → 只有在所有模糊点都明确后才能创建提案 │
|
|
420
|
+
└─────────────────────────────────────────────────────────────┘
|
|
421
|
+
\`\`\`
|
|
134
422
|
|
|
135
|
-
###
|
|
423
|
+
### 提问策略选择
|
|
136
424
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
- **可从代码库分析获取**:信息可以通过分析代码库结构、现有模式、相关文件获取
|
|
142
|
-
- **可从上下文获取**:信息可以从上下文文件、相关变更、历史记录中获取
|
|
143
|
-
- **符合常见模式**:实现方式符合项目中的常见模式或最佳实践,无需特别询问
|
|
425
|
+
| 技能可用性 | 提问方式 | 说明 |
|
|
426
|
+
|-----------|---------|------|
|
|
427
|
+
| superpowers:brainstorming 可用 | 调用技能生成问题 | 高质量、结构化的澄清问题 |
|
|
428
|
+
| superpowers:brainstorming 不可用 | AskUserQuestion 直接提问 | 选项式交互,简洁高效 |
|
|
144
429
|
|
|
145
|
-
|
|
430
|
+
### Brainstorming 调用边界
|
|
146
431
|
|
|
147
|
-
|
|
432
|
+
**适用场景**:
|
|
433
|
+
| 场景类型 | 调用方式 | 说明 |
|
|
434
|
+
|----------|---------|------|
|
|
435
|
+
| **复杂模糊** | superpowers:brainstorming | 跨模块、新架构、多方案选择 |
|
|
436
|
+
| **简单澄清** | AskUserQuestion 直接提问 | 参数调整、范围边界、单一选择 |
|
|
437
|
+
| **已完整需求** | 跳过澄清 | 用户提供完整需求文档 |
|
|
148
438
|
|
|
149
|
-
|
|
439
|
+
**调用约束**:
|
|
440
|
+
- 仅使用 brainstorming 的**澄清提问能力**(步骤3:逐一提问澄清)
|
|
441
|
+
- **不进入完整设计流程**(步骤4-9:方案对比、设计文档)
|
|
442
|
+
- **不触发 writing-plans skill**(属于 Apply 阶段)
|
|
443
|
+
- 获得澄清后立即返回 ZhuanSpec 提案流程
|
|
150
444
|
|
|
151
|
-
|
|
445
|
+
### 选项式交互格式
|
|
152
446
|
|
|
153
|
-
|
|
447
|
+
**必须遵守**:
|
|
154
448
|
- 每个问题提供 2-5 个预设选项
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
- 选项文本要简洁明了,必要时附带简短说明
|
|
158
|
-
- 如果有多个独立的澄清问题,合并到同一次问答交互中(一次性展示多个问题)
|
|
159
|
-
|
|
160
|
-
**标准格式模板:**
|
|
449
|
+
- 末尾包含"其他"选项作为兜底
|
|
450
|
+
- 禁止要求用户手动输入大段文字
|
|
161
451
|
|
|
162
|
-
|
|
163
|
-
使用 AskQuestion 工具提问,结构如下:
|
|
164
|
-
|
|
165
|
-
问题 1: "关于 [不确定的方面]:[具体问题]"
|
|
166
|
-
选项:
|
|
167
|
-
A) [选项1 - 简短说明]
|
|
168
|
-
B) [选项2 - 简短说明]
|
|
169
|
-
C) [选项3 - 简短说明]
|
|
170
|
-
D) 其他(请在后续补充说明)
|
|
171
|
-
|
|
172
|
-
问题 2: "关于 [另一个方面]:[具体问题]"
|
|
173
|
-
选项:
|
|
174
|
-
A) [选项1]
|
|
175
|
-
B) [选项2]
|
|
176
|
-
C) 其他
|
|
177
|
-
\`\`\`
|
|
178
|
-
|
|
179
|
-
**工具调用示例(Cursor AskQuestion):**
|
|
452
|
+
**示例**:
|
|
180
453
|
\`\`\`json
|
|
181
454
|
{
|
|
182
455
|
"questions": [
|
|
183
456
|
{
|
|
184
457
|
"id": "scope",
|
|
185
|
-
"prompt": "
|
|
458
|
+
"prompt": "您希望改进哪些方面?",
|
|
186
459
|
"options": [
|
|
187
|
-
{"id": "security", "label": "
|
|
188
|
-
{"id": "ux", "label": "
|
|
189
|
-
{"id": "performance", "label": "
|
|
460
|
+
{"id": "security", "label": "安全性"},
|
|
461
|
+
{"id": "ux", "label": "用户体验"},
|
|
462
|
+
{"id": "performance", "label": "性能"},
|
|
190
463
|
{"id": "other", "label": "其他"}
|
|
191
464
|
],
|
|
192
465
|
"allow_multiple": true
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
"id": "priority",
|
|
196
|
-
"prompt": "如果有多个改进点,优先级如何?",
|
|
197
|
-
"options": [
|
|
198
|
-
{"id": "security_first", "label": "安全性优先"},
|
|
199
|
-
{"id": "ux_first", "label": "用户体验优先"},
|
|
200
|
-
{"id": "all_equal", "label": "同等重要,一起做"}
|
|
201
|
-
]
|
|
202
466
|
}
|
|
203
467
|
]
|
|
204
468
|
}
|
|
205
469
|
\`\`\`
|
|
206
470
|
|
|
207
|
-
|
|
208
|
-
- 永远不要让用户从零开始输入答案,总是提供可选的选项
|
|
209
|
-
- 选项应覆盖最常见的答案场景
|
|
210
|
-
- "其他"选项作为兜底,确保不遗漏特殊情况
|
|
211
|
-
- 用户选择"其他"后,再针对性地追问细节
|
|
212
|
-
|
|
213
|
-
### 禁止行为
|
|
214
|
-
|
|
215
|
-
在遇到模糊需求时,**严禁**以下行为:
|
|
216
|
-
- ❌ 自行推测用户意图
|
|
217
|
-
- ❌ 基于"最佳猜测"创建提案
|
|
218
|
-
- ❌ 假设用户想要什么
|
|
219
|
-
- ❌ 跳过澄清直接创建文件
|
|
220
|
-
- ❌ 使用模糊的表述来掩盖不确定性
|
|
221
|
-
- ❌ 要求用户手动输入大段文字来回答澄清问题(必须使用选项式交互)
|
|
471
|
+
### 常见模糊点清单
|
|
222
472
|
|
|
223
|
-
|
|
473
|
+
| 类别 | 需澄清的情况 |
|
|
474
|
+
|------|-------------|
|
|
475
|
+
| **范围** | 边界不明确("改进性能"、"优化代码") |
|
|
476
|
+
| **技术** | 多种实现方式但未指定偏好 |
|
|
477
|
+
| **优先级** | 多个需求但未说明顺序 |
|
|
478
|
+
| **验收** | 不清楚如何判断完成 |
|
|
479
|
+
| **实现** | 数据获取来源、服务分层、依赖关系不明确 |
|
|
480
|
+
| **位置** | 代码改动位置不明确 |
|
|
224
481
|
|
|
225
|
-
|
|
226
|
-
2. **识别模糊点**:仔细分析用户请求,列出所有不确定的方面,**但排除那些可以从现有来源确定的方面**
|
|
227
|
-
3. **判断是否需要询问**:对于每个不确定的方面,判断是否可以从现有来源确定:
|
|
228
|
-
- 如果可以确定,则使用从现有来源获取的信息,不询问
|
|
229
|
-
- 如果无法确定,则标记为需要询问
|
|
230
|
-
4. **构造选项式问题**:将所有需要询问的模糊点转化为带预设选项的选择题,尽量合并到一次交互中
|
|
231
|
-
5. **使用工具提问**:调用编辑器的结构化问答工具(如 \`AskQuestion\`)一次性展示所有问题和选项,等待用户选择
|
|
232
|
-
6. **等待用户选择**:必须等待用户选择答案,不能继续
|
|
233
|
-
7. **处理"其他"选项**:如果用户选择了"其他",再针对该问题追问具体细节(仍优先使用选项式,如确实无法预设则允许简短文字输入)
|
|
234
|
-
8. **确认理解**:在开始创建文件前,简要总结理解以确保准确
|
|
235
|
-
9. **开始创建**:只有在所有必要的模糊点都明确后,才能开始创建提案文件
|
|
482
|
+
### 禁止行为
|
|
236
483
|
|
|
237
|
-
|
|
484
|
+
| ❌ 禁止 | 原因 |
|
|
485
|
+
|--------|------|
|
|
486
|
+
| 自行推测用户意图 | 违反三条铁律 |
|
|
487
|
+
| 跳过澄清直接创建文件 | 违反 No Spec, No Code |
|
|
488
|
+
| 要求用户手动输入大段文字 | 效率低、体验差 |
|
|
238
489
|
|
|
239
|
-
|
|
490
|
+
---
|
|
240
491
|
|
|
241
|
-
|
|
242
|
-
1. 首先查阅现有规范(\`zhuanspec/specs/\`)中是否有登录相关的规范
|
|
243
|
-
2. 查阅项目约定(\`zhuanspec/project.md\`)了解项目架构和约定
|
|
244
|
-
3. 分析代码库结构,了解现有的登录实现方式
|
|
245
|
-
4. 如果从这些来源无法确定改进范围,则使用选项式交互询问
|
|
492
|
+
### 与三条铁律的关系
|
|
246
493
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
{
|
|
253
|
-
"id": "improvement_scope",
|
|
254
|
-
"prompt": "您希望改进登录功能的哪些方面?",
|
|
255
|
-
"options": [
|
|
256
|
-
{"id": "security", "label": "安全性(如添加双因素认证)"},
|
|
257
|
-
{"id": "ux", "label": "用户体验(如简化登录流程)"},
|
|
258
|
-
{"id": "performance", "label": "性能(如优化登录响应时间)"},
|
|
259
|
-
{"id": "other", "label": "其他"}
|
|
260
|
-
],
|
|
261
|
-
"allow_multiple": true
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"id": "tech_preference",
|
|
265
|
-
"prompt": "您有特定的技术偏好吗?",
|
|
266
|
-
"options": [
|
|
267
|
-
{"id": "jwt", "label": "JWT Token 认证"},
|
|
268
|
-
{"id": "session", "label": "Session 认证"},
|
|
269
|
-
{"id": "oauth", "label": "OAuth 第三方集成"},
|
|
270
|
-
{"id": "no_preference", "label": "无偏好,由你推荐"},
|
|
271
|
-
{"id": "other", "label": "其他"}
|
|
272
|
-
]
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
"id": "priority",
|
|
276
|
-
"prompt": "如果有多个改进点,优先级如何?",
|
|
277
|
-
"options": [
|
|
278
|
-
{"id": "security_first", "label": "安全性优先"},
|
|
279
|
-
{"id": "ux_first", "label": "用户体验优先"},
|
|
280
|
-
{"id": "perf_first", "label": "性能优先"},
|
|
281
|
-
{"id": "all_equal", "label": "同等重要,一起做"}
|
|
282
|
-
]
|
|
283
|
-
}
|
|
284
|
-
]
|
|
285
|
-
}
|
|
286
|
-
\`\`\`
|
|
287
|
-
|
|
288
|
-
**实现细节相关示例**(仅在无法从代码库分析确定时询问):
|
|
289
|
-
|
|
290
|
-
**用户请求**:"重构用户认证服务"
|
|
291
|
-
|
|
292
|
-
**如果无法从代码库分析确定,使用选项式交互提问**:
|
|
293
|
-
|
|
294
|
-
\`\`\`json
|
|
295
|
-
{
|
|
296
|
-
"questions": [
|
|
297
|
-
{
|
|
298
|
-
"id": "change_scope",
|
|
299
|
-
"prompt": "重构涉及哪些改动?",
|
|
300
|
-
"options": [
|
|
301
|
-
{"id": "modify_existing", "label": "修改现有认证服务类"},
|
|
302
|
-
{"id": "new_service", "label": "创建新的服务层"},
|
|
303
|
-
{"id": "both", "label": "两者都涉及"},
|
|
304
|
-
{"id": "other", "label": "其他"}
|
|
305
|
-
]
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
"id": "layer_scope",
|
|
309
|
-
"prompt": "改动应该在哪些层进行?",
|
|
310
|
-
"options": [
|
|
311
|
-
{"id": "controller", "label": "Controller 层"},
|
|
312
|
-
{"id": "service", "label": "Service 层"},
|
|
313
|
-
{"id": "repository", "label": "Repository 层"},
|
|
314
|
-
{"id": "all", "label": "全部层"}
|
|
315
|
-
],
|
|
316
|
-
"allow_multiple": true
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
"id": "refactor_strategy",
|
|
320
|
-
"prompt": "重构策略偏好?",
|
|
321
|
-
"options": [
|
|
322
|
-
{"id": "incremental", "label": "渐进式重构(逐步替换)"},
|
|
323
|
-
{"id": "rewrite", "label": "完全重写"},
|
|
324
|
-
{"id": "strangler", "label": "绞杀者模式(新旧并行后切换)"},
|
|
325
|
-
{"id": "no_preference", "label": "无偏好,由你推荐"}
|
|
326
|
-
]
|
|
327
|
-
}
|
|
328
|
-
]
|
|
329
|
-
}
|
|
330
|
-
\`\`\`
|
|
331
|
-
|
|
332
|
-
**注意**:如果可以从现有代码结构、规范或项目约定中确定这些信息,则不应询问,直接使用从现有来源获取的信息。
|
|
494
|
+
| 铁律 | 澄清工作流体现 |
|
|
495
|
+
|------|---------------|
|
|
496
|
+
| **No Spec, No Code** | 澄清完成后才能创建提案 |
|
|
497
|
+
| **Spec is Truth** | 澄清结果写入 tasks.md 的"澄清日志" |
|
|
498
|
+
| **Reverse Sync** | Apply 阶段偏离时重新进入澄清流程 |
|
|
333
499
|
|
|
334
500
|
### 搜索指导
|
|
335
501
|
- 枚举规范:\`zhuanspec spec list --long\`(或使用 \`--json\` 用于脚本)
|
|
@@ -378,6 +544,11 @@ zhuanspec validate [change] --strict
|
|
|
378
544
|
\`\`\`
|
|
379
545
|
zhuanspec/
|
|
380
546
|
├── project.md # 项目约定
|
|
547
|
+
├── knowledge/ # 项目级知识库
|
|
548
|
+
│ ├── index.md # 知识索引
|
|
549
|
+
│ ├── troubleshooting/ # 常见问题与陷阱
|
|
550
|
+
│ ├── best-practices/ # 最佳实践
|
|
551
|
+
│ └── implicit-conventions/ # 隐式约定
|
|
381
552
|
├── specs/ # 当前真实状态 - 已构建的内容
|
|
382
553
|
│ └── [capability]/ # 单一聚焦的功能
|
|
383
554
|
│ ├── spec.md # 要求和场景
|
|
@@ -386,7 +557,7 @@ zhuanspec/
|
|
|
386
557
|
│ ├── [change-name]/
|
|
387
558
|
│ │ ├── proposal.md # 原因、内容、影响
|
|
388
559
|
│ │ ├── tasks.md # 实施清单
|
|
389
|
-
│ │ ├── design.md #
|
|
560
|
+
│ │ ├── design.md # 技术决策(必选;知识提取来源)
|
|
390
561
|
│ │ └── specs/ # 增量变更
|
|
391
562
|
│ │ └── [capability]/
|
|
392
563
|
│ │ └── spec.md # ADDED/MODIFIED/REMOVED
|
|
@@ -482,14 +653,9 @@ The system SHALL provide...
|
|
|
482
653
|
4. 必须在文件末尾添加 "## 依赖分析" 章节并标明"状态:已完成"
|
|
483
654
|
5. validate --strict 会验证任务排序是否与计算的波次匹配
|
|
484
655
|
|
|
485
|
-
5.
|
|
486
|
-
|
|
487
|
-
- 横切变更(多个服务/模块)或新的架构模式
|
|
488
|
-
- 新的外部依赖或重要的数据模型更改
|
|
489
|
-
- 安全性、性能或迁移复杂性
|
|
490
|
-
- 在编码之前从技术决策中受益的模糊性
|
|
656
|
+
5. **创建 design.md(必选)**:
|
|
657
|
+
每个提案都必须创建 \`design.md\`,记录技术决策和架构思考:
|
|
491
658
|
|
|
492
|
-
最小 \`design.md\` 骨架:
|
|
493
659
|
\`\`\`markdown
|
|
494
660
|
## 背景
|
|
495
661
|
[背景、约束、利益相关者]
|
|
@@ -505,6 +671,12 @@ The system SHALL provide...
|
|
|
505
671
|
## 风险 / 权衡
|
|
506
672
|
- [风险] → 缓解措施
|
|
507
673
|
|
|
674
|
+
## 最佳实践
|
|
675
|
+
[实施过程中的最佳实践建议]
|
|
676
|
+
|
|
677
|
+
## 隐式约定
|
|
678
|
+
[团队特有的隐式约定或默认行为]
|
|
679
|
+
|
|
508
680
|
## 迁移计划
|
|
509
681
|
[步骤、回滚]
|
|
510
682
|
|
|
@@ -512,6 +684,10 @@ The system SHALL provide...
|
|
|
512
684
|
- [...]
|
|
513
685
|
\`\`\`
|
|
514
686
|
|
|
687
|
+
**重要**:design.md 是知识提取的主要来源,归档时会自动提取其中的"决策"、"最佳实践"、"隐式约定"沉淀到项目知识库。
|
|
688
|
+
- [...]
|
|
689
|
+
\`\`\`
|
|
690
|
+
|
|
515
691
|
## 规范文件格式
|
|
516
692
|
|
|
517
693
|
### 关键:场景格式
|
|
@@ -785,5 +961,96 @@ AI 助手在执行时**必须**按照 \`<scheduling_summary>\` 中的指令启
|
|
|
785
961
|
1. 仍按 wave 顺序执行任务
|
|
786
962
|
2. 每个 task 执行前,清理不相关的 skill 上下文
|
|
787
963
|
3. 每个 task 执行后,仅保留完成摘要,避免上下文累积膨胀
|
|
964
|
+
|
|
965
|
+
---
|
|
966
|
+
|
|
967
|
+
## Apply 阶段专用 Agent
|
|
968
|
+
|
|
969
|
+
Apply 阶段使用两种专用 Agent 类型执行代码实施任务,由编排 Agent(主 Agent)根据任务标注选择。
|
|
970
|
+
|
|
971
|
+
**Agent 定义文件路径**(供 Claude/Cursor 等工具注册):
|
|
972
|
+
- \`agents/zhuanspec/apply-agent.md\` - 普通代码实施 Agent
|
|
973
|
+
- \`agents/zhuanspec/tdd-apply-agent.md\` - TDD 模式 Agent
|
|
974
|
+
|
|
975
|
+
### Agent 类型选择规则
|
|
976
|
+
|
|
977
|
+
| 条件 | Agent 类型 | 定义文件 |
|
|
978
|
+
|------|-----------|---------|
|
|
979
|
+
| 任务无 \`@test-case\` 标注 | \`applyAgent\` | \`agents/zhuanspec/apply-agent.md\` |
|
|
980
|
+
| 任务有 \`@test-case:TC-XXX\` 标注 | \`tddApplyAgent\` | \`agents/zhuanspec/tdd-apply-agent.md\` |
|
|
981
|
+
|
|
982
|
+
### Agent 使用方式
|
|
983
|
+
|
|
984
|
+
编排 Agent(主 Agent)在 Wave 并行执行时:
|
|
985
|
+
|
|
986
|
+
1. **选择 Agent**:根据任务的 \`@test-case\` 标注选择对应 Agent 类型
|
|
987
|
+
2. **加载 Agent 定义**:读取对应 Agent 定义文件获取完整指令
|
|
988
|
+
3. **注入上下文**:
|
|
989
|
+
- 当前 task 的完整描述
|
|
990
|
+
- 相关 spec 文件内容
|
|
991
|
+
- Rules 和 Knowledge(踩坑警告、最佳实践)
|
|
992
|
+
- 前序 wave 完成摘要
|
|
993
|
+
4. **启动 Subagent**:使用 Agent tool 启动 subagent
|
|
994
|
+
5. **处理状态报告**:根据 Agent 返回的 Status 执行后续操作
|
|
995
|
+
|
|
996
|
+
### Rules 和 Knowledge 注入(关键)
|
|
997
|
+
|
|
998
|
+
编排 Agent MUST 在每个 subagent prompt 中注入以下上下文:
|
|
999
|
+
|
|
1000
|
+
**Rules 加载**(根据 @skill 选择性注入):
|
|
1001
|
+
- \`api-design.md\` - 前后端接口设计规范(涉及 Controller/API 时)
|
|
1002
|
+
- \`dao-standards.md\` - Java DAO 层规范(涉及 DAO 时)
|
|
1003
|
+
- \`coding-standards.md\` - KF 后端编码规则(涉及 Java 代码时)
|
|
1004
|
+
- \`java-db-schema-standards.md\` - MySQL 数据库建表改表规范
|
|
1005
|
+
|
|
1006
|
+
**Knowledge 加载**(MUST 始终注入):
|
|
1007
|
+
- \`knowledge/index.md\` - 知识索引摘要
|
|
1008
|
+
- 相关 \`best-practices/\` 内容(最佳实践)
|
|
1009
|
+
- 相关 \`troubleshooting/\` 内容(踩坑警告)
|
|
1010
|
+
|
|
1011
|
+
### 状态处理策略
|
|
1012
|
+
|
|
1013
|
+
| Status | 处理方式 |
|
|
1014
|
+
|--------|---------|
|
|
1015
|
+
| **DONE** | 继续下一任务,记录完成摘要 |
|
|
1016
|
+
| **DONE_WITH_CONCERNS** | 评估 concerns,正确性问题先修复,观察性问题记录后继续 |
|
|
1017
|
+
| **BLOCKED** | 评估 blocker 类型:提供上下文/换更强模型/拆分任务/修改计划 |
|
|
1018
|
+
| **NEEDS_CONTEXT** | 提供缺失信息并重新启动 subagent |
|
|
1019
|
+
|
|
1020
|
+
### Subagent 上下文隔离规则
|
|
1021
|
+
|
|
1022
|
+
**必须注入**:
|
|
1023
|
+
- 当前 task 的完整描述和验收标准
|
|
1024
|
+
- 当前 task 关联的 \`@skill\` 内容
|
|
1025
|
+
- 相关的 spec 文件路径和内容(仅限该 task 涉及的部分)
|
|
1026
|
+
- 前序 wave 的完成摘要(而非完整输出)
|
|
1027
|
+
- Rules 和 Knowledge 上下文
|
|
1028
|
+
|
|
1029
|
+
**禁止注入**:
|
|
1030
|
+
- 其他 wave 的 task 详情
|
|
1031
|
+
- 不相关的 skill 内容
|
|
1032
|
+
- 其他 subagent 的完整输出
|
|
1033
|
+
|
|
1034
|
+
---
|
|
1035
|
+
|
|
1036
|
+
### Rules 和 Knowledge 注入示例
|
|
1037
|
+
|
|
1038
|
+
编排 Agent 在启动 subagent 时的 prompt 示例:
|
|
1039
|
+
|
|
1040
|
+
\`\`\`markdown
|
|
1041
|
+
## Rules 和 Knowledge 上下文(必须遵循)
|
|
1042
|
+
|
|
1043
|
+
### 相关 Rules
|
|
1044
|
+
[根据 @skill 标注注入对应 rules 内容,如 api-design.md]
|
|
1045
|
+
|
|
1046
|
+
### Knowledge - 最佳实践
|
|
1047
|
+
[注入 best-practices 内容]
|
|
1048
|
+
|
|
1049
|
+
### Knowledge - 踩坑警告
|
|
1050
|
+
[注入 troubleshooting 内容,如有]
|
|
1051
|
+
|
|
1052
|
+
⚠️ **重要**: 以下 rules 和 knowledge MUST 在实施过程中遵循。
|
|
1053
|
+
如有任何不确定,报告 NEEDS_CONTEXT 状态。
|
|
1054
|
+
\`\`\`
|
|
788
1055
|
`;
|
|
789
1056
|
//# sourceMappingURL=agents-template.js.map
|