@specpow/framework 0.2.2 → 0.4.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/.specpow/hooks/session-start +1 -1
- package/.specpow/skills/cli-router/SKILL.md +107 -0
- package/.specpow/skills/execution-parallel-agents/SKILL.md +0 -5
- package/.specpow/skills/execution-sdd-orchestrator/SKILL.md +366 -0
- package/.specpow/skills/execution-subagent-dispatch/SKILL.md +295 -0
- package/.specpow/skills/execution-subagent-driven-dev/SKILL.md +0 -5
- package/.specpow/skills/planning-apply-change/SKILL.md +0 -5
- package/.specpow/skills/planning-explore/SKILL.md +0 -5
- package/.specpow/skills/planning-propose/SKILL.md +0 -5
- package/.specpow/skills/using-specpow/SKILL.md +232 -0
- package/CHANGELOG.md +143 -0
- package/README.md +55 -20
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +13 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/apply.d.ts +1 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +93 -3
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/channel.d.ts.map +1 -1
- package/dist/commands/channel.js +10 -3
- package/dist/commands/channel.js.map +1 -1
- package/dist/commands/config.js +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +0 -1
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +11 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +125 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/propose.d.ts.map +1 -1
- package/dist/commands/propose.js +23 -10
- package/dist/commands/propose.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +25 -0
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +26 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/agent-contract.d.ts +1 -1
- package/dist/core/agent-contract.d.ts.map +1 -1
- package/dist/core/artifact-graph/types.d.ts +4 -4
- package/dist/core/channel/channel-event-log.d.ts +1 -0
- package/dist/core/channel/channel-event-log.d.ts.map +1 -1
- package/dist/core/channel/channel-event-log.js +4 -2
- package/dist/core/channel/channel-event-log.js.map +1 -1
- package/dist/core/channel/channel-runtime.d.ts +8 -1
- package/dist/core/channel/channel-runtime.d.ts.map +1 -1
- package/dist/core/channel/channel-runtime.js +29 -2
- package/dist/core/channel/channel-runtime.js.map +1 -1
- package/dist/core/hooks/hook-registry.d.ts +1 -1
- package/dist/core/hooks/hook-registry.d.ts.map +1 -1
- package/dist/core/hooks/hook-registry.js +13 -15
- package/dist/core/hooks/hook-registry.js.map +1 -1
- package/dist/core/hooks/hook-types.d.ts +3 -3
- package/dist/core/hooks/hook-types.d.ts.map +1 -1
- package/dist/core/hooks/post-tool-call-hook.d.ts.map +1 -1
- package/dist/core/hooks/post-tool-call-hook.js +17 -11
- package/dist/core/hooks/post-tool-call-hook.js.map +1 -1
- package/dist/core/hooks/pre-tool-call-hook.d.ts.map +1 -1
- package/dist/core/hooks/pre-tool-call-hook.js +1 -2
- package/dist/core/hooks/pre-tool-call-hook.js.map +1 -1
- package/dist/core/hooks/session-start-hook.d.ts +1 -1
- package/dist/core/hooks/session-start-hook.d.ts.map +1 -1
- package/dist/core/hooks/session-start-hook.js +88 -18
- package/dist/core/hooks/session-start-hook.js.map +1 -1
- package/dist/core/init/engine.d.ts +6 -0
- package/dist/core/init/engine.d.ts.map +1 -1
- package/dist/core/init/engine.js +3 -1
- package/dist/core/init/engine.js.map +1 -1
- package/dist/core/parsers/index.d.ts.map +1 -1
- package/dist/core/parsers/index.js +16 -0
- package/dist/core/parsers/index.js.map +1 -1
- package/dist/core/sdd-engine/ai-caller.d.ts +5 -0
- package/dist/core/sdd-engine/ai-caller.d.ts.map +1 -1
- package/dist/core/sdd-engine/ai-caller.js +7 -2
- package/dist/core/sdd-engine/ai-caller.js.map +1 -1
- package/dist/core/sdd-engine/controller.d.ts +8 -0
- package/dist/core/sdd-engine/controller.d.ts.map +1 -1
- package/dist/core/sdd-engine/controller.js +26 -13
- package/dist/core/sdd-engine/controller.js.map +1 -1
- package/dist/core/sdd-engine/index.d.ts.map +1 -1
- package/dist/core/sdd-engine/index.js +0 -1
- package/dist/core/sdd-engine/index.js.map +1 -1
- package/dist/core/sdd-engine/model-selector.d.ts +6 -0
- package/dist/core/sdd-engine/model-selector.d.ts.map +1 -1
- package/dist/core/sdd-engine/model-selector.js +6 -0
- package/dist/core/sdd-engine/model-selector.js.map +1 -1
- package/dist/core/templates/index.d.ts.map +1 -1
- package/dist/core/templates/index.js +12 -2
- package/dist/core/templates/index.js.map +1 -1
- package/dist/templates/claude-commands/specpow-apply.md +23 -0
- package/dist/templates/claude-commands/specpow-archive.md +22 -0
- package/dist/templates/claude-commands/specpow-explore.md +21 -0
- package/dist/templates/claude-commands/specpow-propose.md +27 -0
- package/dist/templates/claude-commands/specpow-status.md +22 -0
- package/dist/templates/claude-commands/specpow-verify.md +21 -0
- package/dist/templates/claude-commands/specpow.md +33 -0
- package/package.json +1 -1
- package/dist/core/sdd-engine/dispatcher.d.ts +0 -62
- package/dist/core/sdd-engine/dispatcher.d.ts.map +0 -1
- package/dist/core/sdd-engine/dispatcher.js +0 -133
- package/dist/core/sdd-engine/dispatcher.js.map +0 -1
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: execution-subagent-dispatch
|
|
3
|
+
description: 子代理派发技能。将 ai-caller.ts 的三种 prompt 模板(实现者、审查者、重审者)转化为宿主 Agent 可执行的指令。当需要派发子代理执行具体任务时使用。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
trigger: on-demand
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 子代理派发技能
|
|
9
|
+
|
|
10
|
+
当需要派发子代理执行实现、审查或重审任务时,按以下模板构建指令。
|
|
11
|
+
|
|
12
|
+
## 核心原则
|
|
13
|
+
|
|
14
|
+
1. **文件即接口** — 告诉子代理去哪里读文件,不在 prompt 中粘贴大段内容
|
|
15
|
+
2. **新鲜上下文** — 每个子代理只获得它需要的文件路径,不继承历史对话
|
|
16
|
+
3. **输出到文件** — 所有结果写入指定文件,不通过对话返回
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 实现者子代理 Prompt 模板
|
|
21
|
+
|
|
22
|
+
派发实现者时,给子代理的指令应包含以下部分:
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
# 任务实现
|
|
26
|
+
|
|
27
|
+
## 上下文
|
|
28
|
+
你正在项目 {projectContext} 中工作。
|
|
29
|
+
|
|
30
|
+
## 任务简报
|
|
31
|
+
请阅读完整的任务简报文件: {briefPath}
|
|
32
|
+
|
|
33
|
+
## 规范约束
|
|
34
|
+
{specConstraints}
|
|
35
|
+
(如无 spec,写"遵循项目现有代码风格和架构约定")
|
|
36
|
+
|
|
37
|
+
## 涉及文件
|
|
38
|
+
{filesList}
|
|
39
|
+
(如无指定文件,写"由你自行判断需要修改的文件")
|
|
40
|
+
|
|
41
|
+
## 铁律:测试驱动开发 (TDD)
|
|
42
|
+
|
|
43
|
+
没有失败测试就不写产品代码!
|
|
44
|
+
|
|
45
|
+
## 执行步骤 — RED-GREEN-REFACTOR
|
|
46
|
+
|
|
47
|
+
### RED — 先写一个失败的测试
|
|
48
|
+
1. 阅读任务简报,理解需求行为
|
|
49
|
+
2. 为下一个要实现的 _行为_ 写一个测试
|
|
50
|
+
3. 运行测试,确认它失败
|
|
51
|
+
4. 失败原因必须是"功能还不存在"
|
|
52
|
+
|
|
53
|
+
### GREEN — 写最少的代码让测试通过
|
|
54
|
+
1. 写刚好够让测试通过的代码
|
|
55
|
+
2. 不多写。YAGNI。
|
|
56
|
+
3. 运行测试,确认全部通过
|
|
57
|
+
|
|
58
|
+
### REFACTOR — 在测试保护下清理代码
|
|
59
|
+
1. 消除重复,改善命名
|
|
60
|
+
2. 运行测试,确认仍然全部通过
|
|
61
|
+
|
|
62
|
+
重复 RED-GREEN-REFACTOR 直到任务完成。
|
|
63
|
+
|
|
64
|
+
## 报告要求
|
|
65
|
+
将详细的实现报告写入: {reportPath}
|
|
66
|
+
|
|
67
|
+
报告格式(文本要点):
|
|
68
|
+
```
|
|
69
|
+
报告格式:
|
|
70
|
+
- 状态: DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED
|
|
71
|
+
- 产生的 commit 列表(如果适用)
|
|
72
|
+
- 测试摘要(RED 阶段写了哪些测试,GREEN 阶段全部通过)
|
|
73
|
+
- 任何疑虑或未解决的问题
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
注意:`parseTaskReport` 同时接受上述文本格式和 JSON 格式。JSON 格式使用大写状态值:`"status": "DONE|DONE_WITH_CONCERNS|NEEDS_CONTEXT|BLOCKED"`。
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 变量说明
|
|
80
|
+
|
|
81
|
+
| 变量 | 来源 | 示例 |
|
|
82
|
+
|------|------|------|
|
|
83
|
+
| `{projectContext}` | 项目根目录名 | `specpow` |
|
|
84
|
+
| `{briefPath}` | 任务简报路径 | `.specpow/sdd/{change}/task-{N}-brief.md` |
|
|
85
|
+
| `{specConstraints}` | specs/ 目录中的规范内容 | 从 `specs/*.md` 读取 |
|
|
86
|
+
| `{filesList}` | 任务涉及的文件列表 | 从任务描述中提取 |
|
|
87
|
+
| `{reportPath}` | 实现报告输出路径 | `.specpow/sdd/{change}/task-{N}-report.md` |
|
|
88
|
+
|
|
89
|
+
### Fix 轮次的实现者派发
|
|
90
|
+
|
|
91
|
+
修复轮次复用相同的 prompt 模板,但:
|
|
92
|
+
- **不修改 brief 文件** — 复用原始 brief,open findings 通过指令传递
|
|
93
|
+
- **追加 open findings 列表** — 在 prompt 中列出需要修复的 findings
|
|
94
|
+
- **reportPath 变更** — 写入 `task-{N}-report.md.fix-{R}`(不是覆盖原 report)
|
|
95
|
+
- **模型升级** — 第 4-5 轮使用比当前高一级模型
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 审查者子代理 Prompt 模板
|
|
100
|
+
|
|
101
|
+
派发审查者时,给子代理的指令应包含以下部分:
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
# 代码审查 — 三阶段裁决
|
|
105
|
+
|
|
106
|
+
## 任务上下文
|
|
107
|
+
- 任务: {taskTitle}
|
|
108
|
+
- 简报: {briefPath}
|
|
109
|
+
|
|
110
|
+
## 审查包
|
|
111
|
+
请阅读完整的审查包: {reviewPackagePath}
|
|
112
|
+
|
|
113
|
+
## 审查流程
|
|
114
|
+
|
|
115
|
+
### 第一阶段: 规格合规裁决
|
|
116
|
+
对照任务简报,逐项检查:
|
|
117
|
+
1. 所有需求项是否已实现
|
|
118
|
+
2. 是否有超出规范的实现(scope creep)
|
|
119
|
+
3. 接口签名是否与设计一致
|
|
120
|
+
|
|
121
|
+
### 第二阶段: 代码质量裁决
|
|
122
|
+
1. 命名和结构是否清晰
|
|
123
|
+
2. 错误处理是否完整
|
|
124
|
+
3. 是否有安全隐患
|
|
125
|
+
4. 是否有性能问题
|
|
126
|
+
|
|
127
|
+
### 第三阶段: TDD 合规裁决
|
|
128
|
+
1. 是否有测试覆盖新增/修改的代码
|
|
129
|
+
2. 测试是否断言行为而非实现细节
|
|
130
|
+
3. 测试是否在代码之前编写(检查 commit 顺序或测试结构)
|
|
131
|
+
4. 关键路径和边界条件是否有测试
|
|
132
|
+
|
|
133
|
+
## 输出格式
|
|
134
|
+
将审查结果写入文件: {reviewResultPath}
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"specCompliant": true/false,
|
|
139
|
+
"qualityApproved": true/false,
|
|
140
|
+
"findings": [
|
|
141
|
+
{
|
|
142
|
+
"id": "F-001",
|
|
143
|
+
"severity": "critical|important|minor",
|
|
144
|
+
"description": "...",
|
|
145
|
+
"file": "path/to/file",
|
|
146
|
+
"line": 42,
|
|
147
|
+
"isLoadBearing": true/false
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"cannotVerify": ["从 diff 无法验证的项目"]
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 变量说明
|
|
156
|
+
|
|
157
|
+
| 变量 | 来源 | 示例 |
|
|
158
|
+
|------|------|------|
|
|
159
|
+
| `{taskTitle}` | 任务标题 | 从 brief 中读取 |
|
|
160
|
+
| `{briefPath}` | 任务简报路径 | `.specpow/sdd/{change}/task-{N}-brief.md` |
|
|
161
|
+
| `{reviewPackagePath}` | 审查包路径(diff) | `.specpow/sdd/{change}/review-package.md` |
|
|
162
|
+
| `{reviewResultPath}` | 审查结果输出路径 | `.specpow/sdd/{change}/review-result.json` |
|
|
163
|
+
|
|
164
|
+
### 审查要点
|
|
165
|
+
|
|
166
|
+
- **不输出 `addressed` 字段** — 初始审查不判断 addressed,该字段由重审者填充
|
|
167
|
+
- **cannotVerify** — 无法从 diff 验证的项目(如运行时行为、外部依赖)放在此数组中
|
|
168
|
+
- **isLoadBearing** — 标记该 finding 是否为承重墙(阻塞性),非承重墙的 finding 可以 park
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 重审者子代理 Prompt 模板
|
|
173
|
+
|
|
174
|
+
派发重审者时(修复循环中),给子代理的指令应包含以下部分:
|
|
175
|
+
|
|
176
|
+
```markdown
|
|
177
|
+
# 范围限定重新审查
|
|
178
|
+
|
|
179
|
+
只审查修复 diff: {fixDiffPath}
|
|
180
|
+
|
|
181
|
+
## 待验证的开放发现
|
|
182
|
+
{openFindingsList}
|
|
183
|
+
|
|
184
|
+
## 要求
|
|
185
|
+
对每个发现做出裁决: ADDRESSED / NOT ADDRESSED
|
|
186
|
+
新问题(仅限修复 diff 内的)标记为 NEW
|
|
187
|
+
超出修复范围的观察 → 忽略(不记录)
|
|
188
|
+
|
|
189
|
+
将结果写入: {reReviewResultPath}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 变量说明
|
|
193
|
+
|
|
194
|
+
| 变量 | 来源 | 示例 |
|
|
195
|
+
|------|------|------|
|
|
196
|
+
| `{fixDiffPath}` | 修复 diff 路径 | `.specpow/sdd/{change}/review-package.md`(复用审查包命名) |
|
|
197
|
+
| `{openFindingsList}` | 开放 findings 列表 | 格式化后的 finding 列表(见下方) |
|
|
198
|
+
| `{reReviewResultPath}` | 重审结果输出路径 | `.specpow/sdd/{change}/re-review-result.json` |
|
|
199
|
+
|
|
200
|
+
### Open Findings 列表格式
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
1. [critical] Description of finding 1 (src/foo.ts:42)
|
|
204
|
+
2. [important] Description of finding 2 (src/bar.ts)
|
|
205
|
+
3. [minor] Description of finding 3
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 重审要点
|
|
209
|
+
|
|
210
|
+
- **只审查修复部分** — 不重新审查整个任务,只看 fix diff
|
|
211
|
+
- **对每个 finding 裁决** — ADDRESSED 或 NOT ADDRESSED
|
|
212
|
+
- **新问题限制范围** — 只有在 fix diff 内发现的新问题才标记为 NEW
|
|
213
|
+
- **超出范围忽略** — 不在 fix 范围内的观察不记录
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 派发流程(宿主 Agent 操作)
|
|
218
|
+
|
|
219
|
+
### 1. 实现者派发
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# 1. 确保 brief 文件已写入
|
|
223
|
+
# (由编排技能在步骤 2a 完成)
|
|
224
|
+
|
|
225
|
+
# 2. 使用宿主原生 subagent 工具派发
|
|
226
|
+
# Claude Code: Agent tool
|
|
227
|
+
# Cursor: subagent tool
|
|
228
|
+
# 其他: 参考宿主工具文档
|
|
229
|
+
|
|
230
|
+
# 3. 子代理读取 brief → 实现 → 写 report
|
|
231
|
+
|
|
232
|
+
# 4. 读取 report 文件,解析 JSON
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 2. 审查者派发
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# 1. 生成审查包(diff)
|
|
239
|
+
BASE_COMMIT={recorded base commit}
|
|
240
|
+
HEAD_COMMIT=$(git rev-parse HEAD)
|
|
241
|
+
git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/sdd/{change}/review-package.md
|
|
242
|
+
|
|
243
|
+
# 2. 使用宿主原生 subagent 工具派发审查者
|
|
244
|
+
# Prompt: 审查者模板(见上方)
|
|
245
|
+
|
|
246
|
+
# 3. 子代理读取 brief + review package → 审查 → 写 review-result.json
|
|
247
|
+
|
|
248
|
+
# 4. 读取 review-result.json,解析 JSON
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 3. 重审者派发(修复循环中)
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# 1. 生成修复 diff(复用 generateReviewPackage 命名模式)
|
|
255
|
+
FIX_BASE=$(git rev-parse HEAD)
|
|
256
|
+
# 实现者修复后...
|
|
257
|
+
FIX_HEAD=$(git rev-parse HEAD)
|
|
258
|
+
git diff ${FIX_BASE}..${FIX_HEAD} > .specpow/sdd/{change}/review-package.md
|
|
259
|
+
|
|
260
|
+
# 2. 使用宿主原生 subagent 工具派发重审者
|
|
261
|
+
# Prompt: 重审者模板(见上方)+ open findings 列表
|
|
262
|
+
|
|
263
|
+
# 3. 子代理读取 fix diff → 对每个 finding 裁决 → 写 re-review-result.json
|
|
264
|
+
|
|
265
|
+
# 4. 读取 re-review-result.json,解析 JSON
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 模型选择指导
|
|
271
|
+
|
|
272
|
+
根据任务复杂度选择子代理模型(如果宿主工具支持):
|
|
273
|
+
|
|
274
|
+
| 场景 | 条件 | 推荐级别 |
|
|
275
|
+
|------|------|----------|
|
|
276
|
+
| 机械实现 | ≤2 文件 + 完整 spec | cheap(默认 haiku) |
|
|
277
|
+
| 集成实现 | 多文件协调 | standard(默认 sonnet) |
|
|
278
|
+
| 架构设计 | 需要设计判断 | capable(默认 opus) |
|
|
279
|
+
| 简单审查 | <100 行 diff | cheap(默认 haiku) |
|
|
280
|
+
| 标准审查 | 一般变更 | standard(默认 sonnet) |
|
|
281
|
+
| 复杂审查 | 复杂变更 | capable(默认 opus) |
|
|
282
|
+
| 最终审查 | 全变更审查 | capable(默认 opus) |
|
|
283
|
+
| 修复轮次 4-5 | 升级模型 | 比当前高一级 |
|
|
284
|
+
|
|
285
|
+
**注意**:这只是指导。根据你实际可用的模型做出最佳选择。
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 关键原则
|
|
290
|
+
|
|
291
|
+
1. **文件即接口** — 所有产物通过文件传递,不占用上下文
|
|
292
|
+
2. **范围限定** — 重审者只审查修复部分,提高效率
|
|
293
|
+
3. **铁律 TDD** — 实现者必须遵循 RED-GREEN-REFACTOR
|
|
294
|
+
4. **三阶段审查** — 规格合规 → 代码质量 → TDD 合规
|
|
295
|
+
5. **模型升级** — 修复轮次 4-5 升级模型,避免卡死
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: using-specpow
|
|
3
|
+
description: Bootstrap 元技能。Host-Driven 模式下会话启动时自动加载。教会宿主 Agent 使用原生工具执行 SDD 工作流。融合 Superpowers using-superpowers 模式 + SpecPow SDD 编排能力。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
trigger: session-start
|
|
6
|
+
mode: host-driven
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<SUBAGENT-STOP>
|
|
10
|
+
如果你是被分发去执行特定任务的子代理,忽略此技能。
|
|
11
|
+
</SUBAGENT-STOP>
|
|
12
|
+
|
|
13
|
+
<EXTREMELY_IMPORTANT>
|
|
14
|
+
如果你认为有任何 1% 的可能性某个技能适用于你正在做的事,你绝对必须调用该技能。
|
|
15
|
+
如果一个技能适用于你的任务,你没有选择。你必须使用它。
|
|
16
|
+
这不可协商。你不能合理化地绕过它。
|
|
17
|
+
</EXTREMELY_IMPORTANT>
|
|
18
|
+
|
|
19
|
+
# SpecPow Host-Driven SDD 工作流
|
|
20
|
+
|
|
21
|
+
你已加载 **SpecPow** — 一个规范驱动的 AI 开发框架。
|
|
22
|
+
它结合了 OpenSpec 的规范驱动规划与 Superpowers 的子代理驱动执行。
|
|
23
|
+
|
|
24
|
+
**当前模式:Host-Driven** — 你将使用**原生工具**(subagent、file I/O、bash)执行整个 SDD 方法论。
|
|
25
|
+
TypeScript 代码仅负责非 AI 工作(文件创建、schema 解析)。**你是编排者。**
|
|
26
|
+
|
|
27
|
+
## 铁律
|
|
28
|
+
|
|
29
|
+
1. **先查技能** — 任何响应或行动之前,先扫描 `.specpow/skills/` 目录查找相关技能
|
|
30
|
+
2. **文件即接口** — 子代理通过文件通信(brief、report、review JSON),不通过对话上下文
|
|
31
|
+
3. **Ledger 是真相** — 上下文压缩后,信任 Ledger(`.specpow/sdd/<change>/progress.md`)和 git log,不信任自己的记忆
|
|
32
|
+
4. **TDD 强制** — RED → GREEN → REFACTOR,不可跳过
|
|
33
|
+
5. **规范即契约** — specs 中定义的行为必须被实现遵守
|
|
34
|
+
6. **审查+测试才完成** — 每个任务实施完成后,必须经过**代码审查**且**测试全部通过**,才能标记为 done。审查通过后标记完成;审查未通过则进入修复循环(最多 5 轮),每轮修复后重新审查修复部分。
|
|
35
|
+
7. **发现必须验证** — 审查中发现的每个问题,必须**确认其真实存在**(读代码、跑测试、看 diff)后才能记录。禁止无中生有——不确定的发现标记为 `cannotVerify`,不标记为 finding。
|
|
36
|
+
|
|
37
|
+
## 触发纪律(Trigger Discipline)
|
|
38
|
+
|
|
39
|
+
| 用户说 / 场景 | 你做什么 |
|
|
40
|
+
|---------------|----------|
|
|
41
|
+
| `specpow apply`(默认模式) | 不干预 — TypeScript SDD 引擎接管 |
|
|
42
|
+
| `specpow apply --host-driven`(计划中) | 读取任务清单,按 `execution-subagent-driven-dev` 技能逐任务执行 |
|
|
43
|
+
| `specpow explore "..."` | 调用 `planning-explore` 技能 |
|
|
44
|
+
| `specpow propose <name>` | 调用 `planning-propose` 技能 |
|
|
45
|
+
| 任何编码任务 | 先检查 `.specpow/skills/` 是否有适用技能 |
|
|
46
|
+
| 发现 SDD 工作区(`.specpow/sdd/<change>/`) | 自动读取 progress.md 并按 SDD 流程继续 |
|
|
47
|
+
|
|
48
|
+
## Host-Driven 模式核心概念
|
|
49
|
+
|
|
50
|
+
### 你拥有的原生工具
|
|
51
|
+
|
|
52
|
+
| 工具类型 | 用途 | 示例 |
|
|
53
|
+
|---------|------|------|
|
|
54
|
+
| **Subagent 工具** | 派发实现者/审查者子代理 | Claude Code: Agent tool; Cursor: subagent |
|
|
55
|
+
| **File I/O** | 读写 brief、report、review JSON | Read/Write 工具 |
|
|
56
|
+
| **Bash** | 执行 git 操作、运行测试 | `git diff`, `npm test` |
|
|
57
|
+
| **Ledger** | 记录进度、恢复状态 | 追加到 `.specpow/sdd/<change>/progress.md` |
|
|
58
|
+
|
|
59
|
+
### 文件通信协议
|
|
60
|
+
|
|
61
|
+
子代理之间通过文件通信,每个文件有固定位置:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
.specpow/
|
|
65
|
+
├── sdd/{change}/
|
|
66
|
+
│ ├── progress.md # 进度账本(追加写入)
|
|
67
|
+
│ ├── task-{N}-brief.md # 任务简报
|
|
68
|
+
│ ├── task-{N}-report.md # 实现报告
|
|
69
|
+
│ └── task-{N}-report.md.fix-{R} # 修复报告(第 R 轮)
|
|
70
|
+
├── openspec/
|
|
71
|
+
│ └── changes/{change}/
|
|
72
|
+
│ ├── specs/ # 规范文件
|
|
73
|
+
│ ├── design.md # 设计文档
|
|
74
|
+
│ └── .openspec.yaml # 变更配置
|
|
75
|
+
└── skills/ # 技能目录(你正在这里)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Report JSON 格式
|
|
79
|
+
|
|
80
|
+
实现者子代理完成后写入 report:
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"status": "done|blocked|in_progress|done_with_concerns|needs_context",
|
|
84
|
+
"commits": ["sha1", "sha2"],
|
|
85
|
+
"testSummary": "X tests passed",
|
|
86
|
+
"concerns": "any issues or null",
|
|
87
|
+
"fixReport": "修复轮次时的修复说明(仅 fix 轮次填写)"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Review JSON 格式
|
|
92
|
+
|
|
93
|
+
审查者子代理完成后写入 review:
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"specCompliant": true,
|
|
97
|
+
"qualityApproved": true,
|
|
98
|
+
"findings": [
|
|
99
|
+
{
|
|
100
|
+
"id": "F1",
|
|
101
|
+
"severity": "critical|important|minor",
|
|
102
|
+
"description": "...",
|
|
103
|
+
"file": "src/foo.ts",
|
|
104
|
+
"line": 42,
|
|
105
|
+
"isLoadBearing": false
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"cannotVerify": []
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## SDD 编排快速参考
|
|
113
|
+
|
|
114
|
+
完整的编排流程在 `execution-sdd-orchestrator` 技能中详细描述。核心循环:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
对每个任务:
|
|
118
|
+
1. 创建 Brief → task-{N}-brief.md
|
|
119
|
+
2. 派发实现者 → 读 brief → 写代码 → 写 report JSON → task-{N}-report.md
|
|
120
|
+
3. 检查 report(blocked? → 跳过; done? → 继续)
|
|
121
|
+
4. 派发审查者 → 读 brief + diff + specs → 写 review JSON
|
|
122
|
+
5. 运行测试
|
|
123
|
+
6. 分析结果 → 审查通过 + 测试通过? → 标记 done → 下一任务
|
|
124
|
+
→ 需要修复? → 修复循环(最多 5 轮):
|
|
125
|
+
每轮:修复 findings → 派发重审者(只审查修复部分)→ 运行测试 → 分析
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 模型选择指导
|
|
129
|
+
|
|
130
|
+
你可以根据任务复杂度选择子代理模型(如果宿主工具支持):
|
|
131
|
+
|
|
132
|
+
| 场景 | 条件 | 推荐级别 |
|
|
133
|
+
|------|------|----------|
|
|
134
|
+
| 机械实现 | ≤2 文件 + 完整 spec | cheap(默认 haiku) |
|
|
135
|
+
| 集成实现 | 多文件协调 | standard(默认 sonnet) |
|
|
136
|
+
| 架构设计 | 需要设计判断 | capable(默认 opus) |
|
|
137
|
+
| 简单审查 | <100 行 diff | cheap(默认 haiku) |
|
|
138
|
+
| 最终审查 | 全变更审查 | capable(默认 opus) |
|
|
139
|
+
| 修复轮次 4-5 | 升级模型 | 比当前高一级 |
|
|
140
|
+
|
|
141
|
+
**注意**:这只是指导。根据你实际可用的模型做出最佳选择。
|
|
142
|
+
|
|
143
|
+
## 技能优先级
|
|
144
|
+
|
|
145
|
+
当多个技能适用时,流程技能先行 — 它们设定方法,然后实施技能执行。
|
|
146
|
+
- "让我们构建 X" → 先 explore/brainstorming,然后实施技能
|
|
147
|
+
- "修复这个 bug" → 先 systematic-debugging,然后领域技能
|
|
148
|
+
- "创建新变更" → 先 propose,然后 apply-change
|
|
149
|
+
- "执行任务" → 先 subagent-driven-dev,然后相关实施技能
|
|
150
|
+
|
|
151
|
+
## 可用技能清单
|
|
152
|
+
|
|
153
|
+
### 规划类(先于编码)
|
|
154
|
+
- `planning-explore` — 苏格拉底式需求探索(无承诺)
|
|
155
|
+
- `planning-propose` — 创建变更提案(proposal + specs + design + tasks)
|
|
156
|
+
- `planning-write-plans` — 将设计转化为极详细的实现计划
|
|
157
|
+
- `planning-write-specs` — 编写 delta 规范
|
|
158
|
+
- `planning-write-design` — 创建架构设计文档
|
|
159
|
+
- `planning-apply-change` — 执行变更(SDD 引擎驱动)
|
|
160
|
+
- `planning-onboard` — 项目入门引导
|
|
161
|
+
- `planning-archive-change` — 归档变更
|
|
162
|
+
- `planning-verify-change` — 规范合规性验证
|
|
163
|
+
- `planning-update-change` — 更新变更
|
|
164
|
+
|
|
165
|
+
### 执行类(编码阶段)
|
|
166
|
+
- `execution-subagent-driven-dev` — **子代理驱动开发**(核心执行引擎)
|
|
167
|
+
- `execution-tdd` — 测试驱动开发(RED-GREEN-REFACTOR)
|
|
168
|
+
- `execution-systematic-debugging` — 4 阶段根因分析
|
|
169
|
+
- `execution-parallel-agents` — 并行子代理调度
|
|
170
|
+
- `execution-git-worktrees` — Git worktree 管理
|
|
171
|
+
- `execution-finish-branch` — 分支完成与合并
|
|
172
|
+
- `execution-requesting-review` — 请求代码审查
|
|
173
|
+
- `execution-receiving-review` — 接收审查反馈
|
|
174
|
+
- `execution-verification-before-completion` — 完成前验证铁律
|
|
175
|
+
|
|
176
|
+
### 质量类(验证阶段)
|
|
177
|
+
- `planning-verify-change` — 规范合规性验证
|
|
178
|
+
|
|
179
|
+
### 业务类(领域能力)
|
|
180
|
+
- `business-java-codegen` — Java 后端代码生成
|
|
181
|
+
- `business-ui-codegen` — Vue2 前端代码生成
|
|
182
|
+
- `business-test-gen` — 测试生成
|
|
183
|
+
- `business-code-review` — 业务代码审查
|
|
184
|
+
- `business-db-design` — 数据库设计
|
|
185
|
+
- `business-prd-writer` — PRD 编写
|
|
186
|
+
- `business-deploy-check` — 发版检查
|
|
187
|
+
- `business-doc-sync` — 文档同步
|
|
188
|
+
- `business-menu-register` — 菜单注册
|
|
189
|
+
|
|
190
|
+
### 元技能类
|
|
191
|
+
- `meta-using-skills` — 如何使用技能
|
|
192
|
+
- `meta-writing-skills` — 如何编写新技能
|
|
193
|
+
- `meta-create-skill` — 引导式技能创建向导
|
|
194
|
+
|
|
195
|
+
## 红旗(立即停止)
|
|
196
|
+
|
|
197
|
+
这些想法意味着 STOP — 你在合理化跳过技能:
|
|
198
|
+
|
|
199
|
+
| 想法 | 现实 |
|
|
200
|
+
|------|------|
|
|
201
|
+
| "这只是个简单问题" | 问题也是任务。检查技能。 |
|
|
202
|
+
| "我需要先了解更多上下文" | 技能检查在澄清问题之前。 |
|
|
203
|
+
| "让我先探索代码库" | 技能告诉你如何探索。先检查。 |
|
|
204
|
+
| "这不需要正式的技能" | 如果技能存在,就使用它。 |
|
|
205
|
+
| "这个技能太重量级了" | 简单的事会变复杂。使用它。 |
|
|
206
|
+
| "我先做这一件事" | 做任何事之前先检查技能。 |
|
|
207
|
+
| "我记得这个技能" | 技能会演进。读当前版本。 |
|
|
208
|
+
| "这不算一个任务" | 行动 = 任务。检查技能。 |
|
|
209
|
+
| "我直接用 claude CLI 调用" | Host-Driven 模式用原生 subagent 工具,不用 CLI 子进程。 |
|
|
210
|
+
| "让我直接调用 SDDController" | 不要!你是编排者,用技能指令而非 TypeScript 代码。 |
|
|
211
|
+
|
|
212
|
+
## 平台适配
|
|
213
|
+
|
|
214
|
+
如果你的 AI 工具在此列表中,读取其参考文件获取特殊指令(**计划中** — 文件尚未创建,当前使用通用指令):
|
|
215
|
+
|
|
216
|
+
- Claude Code: `references/claude-tools.md`(计划中)
|
|
217
|
+
- Cursor: `references/cursor-tools.md`(计划中)
|
|
218
|
+
- CodeBuddy: `references/codebuddy-tools.md`(计划中)
|
|
219
|
+
- GitHub Copilot: `references/copilot-tools.md`(计划中)
|
|
220
|
+
- Codex: `references/codex-tools.md`(计划中)
|
|
221
|
+
|
|
222
|
+
## 用户指令优先级
|
|
223
|
+
|
|
224
|
+
用户指令(CLAUDE.md, AGENTS.md 等直接请求)优先于技能,技能优先于默认行为。只有当你的搭档明确要求时,才跳过技能工作流。
|
|
225
|
+
|
|
226
|
+
## SpecPow 特有规则
|
|
227
|
+
|
|
228
|
+
1. **规划先于编码** — 任何超过 30 分钟的编码工作,必须先完成 propose 流程
|
|
229
|
+
2. **规范即契约** — specs 中定义的行为必须被实现遵守,SDD 审查会验证
|
|
230
|
+
3. **账本即真理** — 上下文压缩后,信任账本和 git log,而非自己的记忆
|
|
231
|
+
4. **文件即接口** — Agent 之间通过文件通信,不依赖对话上下文
|
|
232
|
+
5. **双模式共存** — 默认模式用 SDD Engine(TypeScript 编排);`--host-driven` 模式用宿主 Agent 编排
|