specops 0.2.2 → 0.2.4
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/.opencode/agent/demand-analyst.md +69 -18
- package/.opencode/agent/verifier.md +231 -0
- package/.opencode/skills/brainstorming/SKILL.md +105 -0
- package/.opencode/skills/demand-analysis/SKILL.md +261 -47
- package/.opencode/skills/dispatching-parallel-agents/SKILL.md +180 -0
- package/.opencode/skills/executing-plans/SKILL.md +90 -0
- package/.opencode/skills/finishing-a-development-branch/SKILL.md +222 -0
- package/.opencode/skills/receiving-code-review/SKILL.md +213 -0
- package/.opencode/skills/repo-clone-analyze/SKILL.md +371 -0
- package/.opencode/skills/requesting-code-review/SKILL.md +105 -0
- package/.opencode/skills/requesting-code-review/code-reviewer.md +146 -0
- package/.opencode/skills/subagent-driven-development/SKILL.md +242 -0
- package/.opencode/skills/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
- package/.opencode/skills/subagent-driven-development/implementer-prompt.md +78 -0
- package/.opencode/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/.opencode/skills/systematic-debugging/SKILL.md +296 -0
- package/.opencode/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/.opencode/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/.opencode/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/.opencode/skills/test-driven-development/SKILL.md +399 -0
- package/.opencode/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/.opencode/skills/using-git-worktrees/SKILL.md +218 -0
- package/.opencode/skills/using-superpowers/SKILL.md +99 -0
- package/.opencode/skills/verification-before-completion/SKILL.md +150 -0
- package/.opencode/skills/writing-plans/SKILL.md +123 -0
- package/.opencode/skills/writing-skills/SKILL.md +654 -0
- package/dist/__e2e__/01-state-engine.e2e.test.js +1 -1
- package/dist/acceptance/lazyDetector.js +1 -1
- package/dist/acceptance/lazyDetector.test.js +1 -1
- package/dist/acceptance/reporter.js +1 -1
- package/dist/acceptance/reporter.test.js +1 -1
- package/dist/acceptance/runner.js +1 -1
- package/dist/acceptance/runner.test.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/context/index.js +1 -1
- package/dist/context/promptTemplate.js +1 -1
- package/dist/context/promptTemplate.test.js +1 -1
- package/dist/context/techContextLoader.js +1 -1
- package/dist/context/techContextLoader.test.js +1 -1
- package/dist/engine.js +1 -1
- package/dist/evolution/distiller.js +1 -1
- package/dist/evolution/index.js +1 -1
- package/dist/evolution/memoryGraph.js +1 -1
- package/dist/evolution/selector.js +1 -1
- package/dist/evolution/signals.js +1 -1
- package/dist/evolution/solidify.js +1 -1
- package/dist/evolution/store.js +1 -1
- package/dist/evolution/types.js +1 -1
- package/dist/init.js +1 -1
- package/dist/machines/agentMachine.js +1 -1
- package/dist/machines/agentMachine.test.js +1 -1
- package/dist/machines/supervisorMachine.js +1 -1
- package/dist/machines/supervisorMachine.test.js +1 -1
- package/dist/persistence/schema.js +1 -1
- package/dist/persistence/stateFile.js +1 -1
- package/dist/persistence/stateFile.test.js +1 -1
- package/dist/plugin-engine.js +1 -1
- package/dist/plugin.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/utils/id.js +1 -1
- package/package.json +8 -2
- package/scripts/postinstall.mjs +37 -7
|
@@ -1,25 +1,74 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: demand-analysis
|
|
3
|
-
description: "需求分析编排 Skill —
|
|
3
|
+
description: "需求分析编排 Skill — 完整的 Phase 0 流程:Brainstorm → 输入识别 → 功能拆分 → 竞品搜索 → 功能搜索 → Clone 分析 → 技术选型 → PRD 合成。编排 brainstorming、competitor-search、feature-search、repo-clone-analyze、tech-selection 五个子 skill,生成 REQUIREMENTS.md + TECH-CONTEXT.md,对接 GSD new-project。触发词:'需求分析'、'分析需求'、'analyze demand'、'拆分功能'。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 需求分析 Skill(编排层)
|
|
7
7
|
|
|
8
8
|
<role>
|
|
9
|
-
|
|
9
|
+
你是需求分析编排专家。你接收用户输入,按 8 个 PHASE 顺序执行完整分析链路:
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
**你不亲自执行搜索、分析和选型 — 你调用专门的子 skill 来完成。**
|
|
12
12
|
|
|
13
13
|
你的职责是:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
0. 调用 `brainstorming` skill 澄清需求、呈现设计、获得批准
|
|
15
|
+
1. 识别输入类型 → 产品定位
|
|
16
|
+
2. 功能拆分(三级:MVP / 增强 / 可选)
|
|
17
|
+
3. 调用 `competitor-search` skill 搜索竞品
|
|
18
|
+
4. 调用 `feature-search` skill 搜索开源实现
|
|
19
|
+
5. 调用 `repo-clone-analyze` skill Clone 并分析参考项目
|
|
20
|
+
6. 调用 `tech-selection` skill 进行技术选型
|
|
21
|
+
7. 合成所有产出,生成 REQUIREMENTS.md + TECH-CONTEXT.md
|
|
19
22
|
</role>
|
|
20
23
|
|
|
21
24
|
---
|
|
22
25
|
|
|
26
|
+
## 硬约束
|
|
27
|
+
|
|
28
|
+
| 约束 | 说明 |
|
|
29
|
+
|------|------|
|
|
30
|
+
| **Brainstorm 门禁** | PHASE 0 设计批准前,**禁止**进入任何后续 PHASE |
|
|
31
|
+
| **子 skill 调用** | 搜索/分析/选型必须通过 `skill()` 调用,不得自行执行 |
|
|
32
|
+
| **顺序执行** | PHASE 必须按 0→1→2→3→4→5→6→7 顺序执行,不得跳过 |
|
|
33
|
+
| **状态更新** | 每个 PHASE 转换时必须调用 specops CLI 更新状态 |
|
|
34
|
+
| **全中文输出** | 所有文档、报告、状态描述均使用中文 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## PHASE 0: Brainstorm(需求澄清与设计批准)
|
|
39
|
+
|
|
40
|
+
<brainstorm>
|
|
41
|
+
|
|
42
|
+
**调用子 skill:**
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
skill(name="brainstorming")
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
按照 brainstorming skill 的指令执行:
|
|
49
|
+
- **一次一问**:每轮只问一个澄清问题,等用户回答后再问下一个
|
|
50
|
+
- 探索用户意图、需求边界、目标用户、核心场景
|
|
51
|
+
- 逐步收敛,形成设计方案
|
|
52
|
+
- 呈现设计方案给用户审阅
|
|
53
|
+
|
|
54
|
+
**输出:**
|
|
55
|
+
- 设计文档:`docs/plans/YYYY-MM-DD-<主题>-design.md`
|
|
56
|
+
- 用户明确批准("可以"、"通过"、"approved" 等肯定回复)
|
|
57
|
+
|
|
58
|
+
**门禁条件:**
|
|
59
|
+
- ✅ 设计文档已生成
|
|
60
|
+
- ✅ 用户已明确批准设计
|
|
61
|
+
- ❌ 未批准 → 继续迭代设计,不得进入 PHASE 1
|
|
62
|
+
|
|
63
|
+
**状态更新:**
|
|
64
|
+
```bash
|
|
65
|
+
npx specops update-operation --agent-id <id> --operation "正在 Brainstorm 澄清需求..." --skill "brainstorming"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
</brainstorm>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
23
72
|
## PHASE 1: 输入识别与产品定位
|
|
24
73
|
|
|
25
74
|
<input_detection>
|
|
@@ -73,9 +122,15 @@ description: "需求分析编排 Skill — 识别输入类型(需求/仓库/
|
|
|
73
122
|
5. 核心关键词:提炼 3-5 个搜索关键词(中英文各一组)
|
|
74
123
|
```
|
|
75
124
|
|
|
125
|
+
**状态更新:**
|
|
126
|
+
```bash
|
|
127
|
+
npx specops advance --agent-id <id>
|
|
128
|
+
npx specops update-operation --agent-id <id> --operation "正在识别输入类型和产品定位..." --skill "demand-analysis"
|
|
129
|
+
```
|
|
130
|
+
|
|
76
131
|
---
|
|
77
132
|
|
|
78
|
-
## PHASE 2:
|
|
133
|
+
## PHASE 2: 功能拆分
|
|
79
134
|
|
|
80
135
|
对产品的每个功能模块进行三级拆分:
|
|
81
136
|
|
|
@@ -98,6 +153,12 @@ description: "需求分析编排 Skill — 识别输入类型(需求/仓库/
|
|
|
98
153
|
|
|
99
154
|
完成功能拆分后,你手上有:**产品定位 + 关键词 + SC 列表**。
|
|
100
155
|
|
|
156
|
+
**状态更新:**
|
|
157
|
+
```bash
|
|
158
|
+
npx specops advance --agent-id <id>
|
|
159
|
+
npx specops update-operation --agent-id <id> --operation "正在拆分功能模块..." --skill "demand-analysis"
|
|
160
|
+
```
|
|
161
|
+
|
|
101
162
|
---
|
|
102
163
|
|
|
103
164
|
## PHASE 3: 调用竞品搜索 Skill
|
|
@@ -116,6 +177,12 @@ skill(name="competitor-search")
|
|
|
116
177
|
|
|
117
178
|
**等待竞品搜索完成,获得竞品搜索报告后再进入下一步。**
|
|
118
179
|
|
|
180
|
+
**状态更新:**
|
|
181
|
+
```bash
|
|
182
|
+
npx specops advance --agent-id <id>
|
|
183
|
+
npx specops update-operation --agent-id <id> --operation "正在搜索竞品..." --skill "competitor-search"
|
|
184
|
+
```
|
|
185
|
+
|
|
119
186
|
</skill_invocation>
|
|
120
187
|
|
|
121
188
|
---
|
|
@@ -143,11 +210,50 @@ skill(name="feature-search")
|
|
|
143
210
|
|
|
144
211
|
**等待所有功能搜索完成,获得功能搜索报告后再进入下一步。**
|
|
145
212
|
|
|
213
|
+
**状态更新:**
|
|
214
|
+
```bash
|
|
215
|
+
npx specops advance --agent-id <id>
|
|
216
|
+
npx specops update-operation --agent-id <id> --operation "正在搜索开源实现..." --skill "feature-search"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
</skill_invocation>
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## PHASE 5: 调用 Clone + 分析 Skill
|
|
224
|
+
|
|
225
|
+
<skill_invocation>
|
|
226
|
+
|
|
227
|
+
**现在调用仓库 Clone 分析 skill:**
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
skill(name="repo-clone-analyze")
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
调用后,按照 repo-clone-analyze skill 的指令执行:
|
|
234
|
+
- 从 PHASE 3(竞品搜索)和 PHASE 4(功能搜索)的结果中筛选需要 clone 的项目
|
|
235
|
+
- 排除基础框架和通用库(react、express、yargs、commander、zod 等)
|
|
236
|
+
- Clone 功能参考项目(竞品、开源实现),深度分析源码
|
|
237
|
+
- 生成 overview.md + index.json + ref.json
|
|
238
|
+
|
|
239
|
+
**传入参数:**
|
|
240
|
+
- PHASE 3 的竞品搜索报告(竞品列表 + GitHub URL)
|
|
241
|
+
- PHASE 4 的功能搜索报告(开源项目列表 + GitHub URL)
|
|
242
|
+
- 项目根目录路径(用于确定 `.specops/ref/` 输出目录)
|
|
243
|
+
|
|
244
|
+
**等待 Clone 分析完成,获得 ref.json 后再进入下一步。**
|
|
245
|
+
|
|
246
|
+
**状态更新:**
|
|
247
|
+
```bash
|
|
248
|
+
npx specops advance --agent-id <id>
|
|
249
|
+
npx specops update-operation --agent-id <id> --operation "正在 Clone 并分析参考项目..." --skill "repo-clone-analyze"
|
|
250
|
+
```
|
|
251
|
+
|
|
146
252
|
</skill_invocation>
|
|
147
253
|
|
|
148
254
|
---
|
|
149
255
|
|
|
150
|
-
## PHASE
|
|
256
|
+
## PHASE 6: 调用技术选型 Skill
|
|
151
257
|
|
|
152
258
|
<skill_invocation>
|
|
153
259
|
|
|
@@ -157,20 +263,34 @@ skill(name="feature-search")
|
|
|
157
263
|
skill(name="tech-selection")
|
|
158
264
|
```
|
|
159
265
|
|
|
160
|
-
调用后,按照 tech-selection skill
|
|
266
|
+
调用后,按照 tech-selection skill 的指令,基于前面所有阶段的产出进行技术选型:
|
|
161
267
|
- 输入 1: PHASE 1 的产品定位
|
|
162
268
|
- 输入 2: PHASE 3 的竞品搜索报告(竞品技术栈数据)
|
|
163
269
|
- 输入 3: PHASE 4 的功能搜索报告(推荐的开源库/框架)
|
|
270
|
+
- 输入 4: PHASE 5 的 ref.json(参考项目的功能-代码索引,技术栈详情)
|
|
271
|
+
|
|
272
|
+
**ref.json 为技术选型提供的额外信息:**
|
|
273
|
+
- 参考项目实际使用的技术栈和依赖
|
|
274
|
+
- 各功能模块的实现方式和架构模式
|
|
275
|
+
- 可直接借鉴的代码路径和关键文件
|
|
164
276
|
|
|
165
277
|
**等待技术选型完成,获得技术选型文档后进入合成阶段。**
|
|
166
278
|
|
|
279
|
+
**状态更新:**
|
|
280
|
+
```bash
|
|
281
|
+
npx specops advance --agent-id <id>
|
|
282
|
+
npx specops update-operation --agent-id <id> --operation "正在进行技术选型..." --skill "tech-selection"
|
|
283
|
+
```
|
|
284
|
+
|
|
167
285
|
</skill_invocation>
|
|
168
286
|
|
|
169
287
|
---
|
|
170
288
|
|
|
171
|
-
## PHASE
|
|
289
|
+
## PHASE 7: 合成 PRD
|
|
172
290
|
|
|
173
|
-
将 PHASE
|
|
291
|
+
将 PHASE 0-6 的所有产出合成为两个文档:
|
|
292
|
+
|
|
293
|
+
### 输出 1: `.specops/REQUIREMENTS.md`
|
|
174
294
|
|
|
175
295
|
```markdown
|
|
176
296
|
# 需求分析报告
|
|
@@ -179,6 +299,7 @@ skill(name="tech-selection")
|
|
|
179
299
|
- 输入类型: [REQUIREMENT/REPO/REPOS/WEBSITE]
|
|
180
300
|
- 分析时间: [时间戳]
|
|
181
301
|
- 原始输入摘要: [一句话概括用户输入]
|
|
302
|
+
- 设计文档: [docs/plans/YYYY-MM-DD-<主题>-design.md]
|
|
182
303
|
|
|
183
304
|
## 一、产品定位
|
|
184
305
|
- 产品名称: ...
|
|
@@ -221,7 +342,19 @@ skill(name="tech-selection")
|
|
|
221
342
|
### 未找到开源实现的功能点
|
|
222
343
|
- SC-xxx: 建议自行实现,参考[技术方案]
|
|
223
344
|
|
|
224
|
-
##
|
|
345
|
+
## 五、参考项目深度分析
|
|
346
|
+
> 来源: repo-clone-analyze skill
|
|
347
|
+
|
|
348
|
+
### Clone 分析的项目
|
|
349
|
+
| 项目 | 分析原因 | overview | index |
|
|
350
|
+
|------|---------|----------|-------|
|
|
351
|
+
| project-a | 竞品,核心功能参考 | .specops/ref/project-a/overview.md | .specops/ref/project-a/index.json |
|
|
352
|
+
|
|
353
|
+
### 功能级索引
|
|
354
|
+
- ref.json 路径: `.specops/ref/ref.json`
|
|
355
|
+
- 包含功能: [功能名列表]
|
|
356
|
+
|
|
357
|
+
## 六、技术选型
|
|
225
358
|
> 来源: tech-selection skill
|
|
226
359
|
|
|
227
360
|
| 维度 | 选型 | 版本 | 理由 |
|
|
@@ -233,7 +366,7 @@ skill(name="tech-selection")
|
|
|
233
366
|
| 包名 | 版本 | 用途 |
|
|
234
367
|
|------|------|------|
|
|
235
368
|
|
|
236
|
-
##
|
|
369
|
+
## 七、建议实施路线
|
|
237
370
|
### Phase 1: MVP(预计 X 周)
|
|
238
371
|
- 实现 SC-001 ~ SC-xxx
|
|
239
372
|
- 核心技术: [列表]
|
|
@@ -245,25 +378,72 @@ skill(name="tech-selection")
|
|
|
245
378
|
- ...
|
|
246
379
|
```
|
|
247
380
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
381
|
+
### 输出 2: `.specops/TECH-CONTEXT.md`
|
|
382
|
+
|
|
383
|
+
从技术选型结果中提取,格式对齐 GSD 的 TECH-CONTEXT 模板:
|
|
384
|
+
|
|
385
|
+
```markdown
|
|
386
|
+
# 技术上下文
|
|
387
|
+
|
|
388
|
+
## 锁定依赖
|
|
389
|
+
| 包名 | 版本 | 用途 |
|
|
390
|
+
|------|------|------|
|
|
391
|
+
|
|
392
|
+
## 禁止模式
|
|
393
|
+
| 模式 | 原因 |
|
|
394
|
+
|------|------|
|
|
395
|
+
|
|
396
|
+
## 编码约定
|
|
397
|
+
- ...
|
|
398
|
+
|
|
399
|
+
## 项目结构
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 下一步提示
|
|
403
|
+
|
|
404
|
+
合成完成后,输出提示:
|
|
405
|
+
|
|
406
|
+
```
|
|
407
|
+
✅ 需求分析完成!
|
|
408
|
+
|
|
409
|
+
产出文件:
|
|
410
|
+
- .specops/REQUIREMENTS.md(需求文档)
|
|
411
|
+
- .specops/TECH-CONTEXT.md(技术上下文)
|
|
412
|
+
- .specops/ref/ref.json(参考项目索引)
|
|
413
|
+
- docs/plans/YYYY-MM-DD-<主题>-design.md(设计文档)
|
|
414
|
+
|
|
415
|
+
下一步:
|
|
416
|
+
/gsd-new-project --auto
|
|
417
|
+
(GSD 将读取 REQUIREMENTS.md 自动创建项目)
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**状态更新:**
|
|
421
|
+
```bash
|
|
422
|
+
npx specops advance --agent-id <id>
|
|
423
|
+
npx specops update-operation --agent-id <id> --operation "正在合成 PRD..." --skill "demand-analysis"
|
|
424
|
+
```
|
|
253
425
|
|
|
254
426
|
---
|
|
255
427
|
|
|
256
|
-
##
|
|
428
|
+
## 状态更新汇总
|
|
257
429
|
|
|
258
|
-
每执行一个 PHASE
|
|
430
|
+
每执行一个 PHASE,调用 specops CLI 更新状态:
|
|
259
431
|
|
|
260
432
|
```
|
|
261
|
-
PHASE
|
|
262
|
-
PHASE
|
|
263
|
-
PHASE
|
|
264
|
-
PHASE
|
|
265
|
-
PHASE
|
|
266
|
-
PHASE
|
|
433
|
+
PHASE 0: operation="正在 Brainstorm 澄清需求..." skill="brainstorming"
|
|
434
|
+
PHASE 1: operation="正在识别输入类型和产品定位..." skill="demand-analysis"
|
|
435
|
+
PHASE 2: operation="正在拆分功能模块..." skill="demand-analysis"
|
|
436
|
+
PHASE 3: operation="正在搜索竞品..." skill="competitor-search"
|
|
437
|
+
PHASE 4: operation="正在搜索开源实现..." skill="feature-search"
|
|
438
|
+
PHASE 5: operation="正在 Clone 并分析参考项目..." skill="repo-clone-analyze"
|
|
439
|
+
PHASE 6: operation="正在进行技术选型..." skill="tech-selection"
|
|
440
|
+
PHASE 7: operation="正在合成 PRD..." skill="demand-analysis"
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
每个 PHASE 转换时调用:
|
|
444
|
+
```bash
|
|
445
|
+
npx specops advance --agent-id <id>
|
|
446
|
+
npx specops update-operation --agent-id <id> --operation "当前操作" --skill "当前skill"
|
|
267
447
|
```
|
|
268
448
|
|
|
269
449
|
---
|
|
@@ -273,35 +453,69 @@ PHASE 6: operation="正在合成需求文档..." skill="demand-analys
|
|
|
273
453
|
```
|
|
274
454
|
用户输入
|
|
275
455
|
│
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
456
|
+
▼
|
|
457
|
+
PHASE 0: skill(name="brainstorming")
|
|
458
|
+
│ 一次一问 → 设计文档 → 用户批准
|
|
459
|
+
│ 输出: docs/plans/YYYY-MM-DD-<主题>-design.md
|
|
460
|
+
│
|
|
461
|
+
├─ 未批准 → 继续迭代(不得进入后续 PHASE)
|
|
462
|
+
│
|
|
463
|
+
▼ (批准后)
|
|
464
|
+
PHASE 1: 输入识别 + 产品定位
|
|
465
|
+
│ ├─ REPOS? ──→ 并行分析各仓库 ──┐
|
|
466
|
+
│ ├─ REPO? ──→ 分析单仓库 ──────┤
|
|
467
|
+
│ ├─ WEBSITE? → 抓取网站信息 ────┤
|
|
468
|
+
│ └─ TEXT ─────────────────────────┤
|
|
469
|
+
│ ▼
|
|
470
|
+
│ 产品定位表
|
|
471
|
+
▼
|
|
472
|
+
PHASE 2: 功能拆分(SC 编号 + 复杂度)
|
|
473
|
+
│
|
|
474
|
+
▼
|
|
475
|
+
PHASE 3: skill(name="competitor-search")
|
|
476
|
+
│ 竞品搜索报告
|
|
477
|
+
▼
|
|
478
|
+
PHASE 4: skill(name="feature-search")
|
|
479
|
+
│ 功能搜索报告
|
|
480
|
+
▼
|
|
481
|
+
PHASE 5: skill(name="repo-clone-analyze")
|
|
482
|
+
│ 筛选 → Clone → 分析 → ref.json
|
|
483
|
+
▼
|
|
484
|
+
PHASE 6: skill(name="tech-selection")
|
|
485
|
+
│ 技术选型(含 ref.json 输入)
|
|
486
|
+
▼
|
|
487
|
+
PHASE 7: 合成 PRD
|
|
488
|
+
│ → .specops/REQUIREMENTS.md
|
|
489
|
+
│ → .specops/TECH-CONTEXT.md
|
|
490
|
+
│ → 提示: /gsd-new-project --auto
|
|
491
|
+
▼
|
|
492
|
+
传递给 GSD
|
|
292
493
|
```
|
|
293
494
|
|
|
294
495
|
---
|
|
295
496
|
|
|
497
|
+
## 合成规则
|
|
498
|
+
|
|
499
|
+
1. 竞品分析和功能搜索的数据**直接引用**子 skill 报告,不要重新编造
|
|
500
|
+
2. 参考项目分析的数据**直接引用** ref.json 和 overview.md,不要重新编造
|
|
501
|
+
3. 实施路线要基于功能复杂度 + 开源可用性排序(有现成开源的优先)
|
|
502
|
+
4. 每个 Phase 估算时间要参考竞品规模和技术复杂度
|
|
503
|
+
5. TECH-CONTEXT.md 的格式必须对齐 GSD 的技术上下文模板
|
|
504
|
+
6. 最终输出文件写入项目的 `.specops/` 目录
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
296
508
|
## 反模式
|
|
297
509
|
|
|
298
510
|
| 违规行为 | 严重性 |
|
|
299
511
|
|---------|--------|
|
|
300
|
-
|
|
|
301
|
-
|
|
|
512
|
+
| Brainstorm 未批准就进入后续 PHASE | **致命** — 必须获得用户批准 |
|
|
513
|
+
| 不调用子 skill 自己做搜索/选型/分析 | **严重** — 必须通过 skill() 调用 |
|
|
514
|
+
| 跳过 PHASE 0-7 中任何一个 | **严重** |
|
|
302
515
|
| 没有识别输入类型就开始分析 | 高 |
|
|
303
516
|
| 跳过功能拆分直接出文档 | 高 |
|
|
304
517
|
| 子 skill 报告还没返回就开始写合成文档 | 高 — 必须等待子 skill 完成 |
|
|
305
518
|
| 功能描述太笼统没有具体 SC 编号 | 中 |
|
|
306
|
-
|
|
|
519
|
+
| 不调用 specops CLI 更新状态 | 中 |
|
|
520
|
+
| 不生成 TECH-CONTEXT.md | 中 |
|
|
307
521
|
| 输出不是中文 | 中 |
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dispatching-parallel-agents
|
|
3
|
+
description: 面对 2 个以上独立任务时使用,这些任务之间没有共享状态或顺序依赖
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 并行 Agent 调度
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
当你有多个不相关的故障(不同的测试文件、不同的子系统、不同的 bug),逐个排查是浪费时间。每个排查都是独立的,可以并行进行。
|
|
11
|
+
|
|
12
|
+
**核心原则:** 每个独立问题域派发一个 agent。让它们并发工作。
|
|
13
|
+
|
|
14
|
+
## 何时使用
|
|
15
|
+
|
|
16
|
+
```dot
|
|
17
|
+
digraph when_to_use {
|
|
18
|
+
"多个故障?" [shape=diamond];
|
|
19
|
+
"它们独立吗?" [shape=diamond];
|
|
20
|
+
"单个 agent 排查全部" [shape=box];
|
|
21
|
+
"每个问题域一个 agent" [shape=box];
|
|
22
|
+
"能并行工作吗?" [shape=diamond];
|
|
23
|
+
"顺序 agent" [shape=box];
|
|
24
|
+
"并行调度" [shape=box];
|
|
25
|
+
|
|
26
|
+
"多个故障?" -> "它们独立吗?" [label="是"];
|
|
27
|
+
"它们独立吗?" -> "单个 agent 排查全部" [label="否 - 相关"];
|
|
28
|
+
"它们独立吗?" -> "能并行工作吗?" [label="是"];
|
|
29
|
+
"能并行工作吗?" -> "并行调度" [label="是"];
|
|
30
|
+
"能并行工作吗?" -> "顺序 agent" [label="否 - 共享状态"];
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**适用场景:**
|
|
35
|
+
- 3 个以上测试文件因不同根因失败
|
|
36
|
+
- 多个子系统独立出问题
|
|
37
|
+
- 每个问题无需其他问题的上下文即可理解
|
|
38
|
+
- 排查之间没有共享状态
|
|
39
|
+
|
|
40
|
+
**不适用场景:**
|
|
41
|
+
- 故障相关(修一个可能修好其他的)
|
|
42
|
+
- 需要理解完整系统状态
|
|
43
|
+
- agent 之间会互相干扰
|
|
44
|
+
|
|
45
|
+
## 模式
|
|
46
|
+
|
|
47
|
+
### 1. 识别独立域
|
|
48
|
+
|
|
49
|
+
按故障分组:
|
|
50
|
+
- 文件 A 测试:工具审批流程
|
|
51
|
+
- 文件 B 测试:批量完成行为
|
|
52
|
+
- 文件 C 测试:中止功能
|
|
53
|
+
|
|
54
|
+
每个域都是独立的,修复工具审批不会影响中止测试。
|
|
55
|
+
|
|
56
|
+
### 2. 创建聚焦的 Agent 任务
|
|
57
|
+
|
|
58
|
+
每个 agent 获得:
|
|
59
|
+
- **明确范围:** 一个测试文件或子系统
|
|
60
|
+
- **清晰目标:** 让这些测试通过
|
|
61
|
+
- **约束条件:** 不要修改其他代码
|
|
62
|
+
- **预期输出:** 发现和修复的摘要
|
|
63
|
+
|
|
64
|
+
### 3. 并行调度
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// 在 opencode 环境中
|
|
68
|
+
task(run_in_background=true, prompt="修复 agent-tool-abort.test.ts 的失败")
|
|
69
|
+
task(run_in_background=true, prompt="修复 batch-completion-behavior.test.ts 的失败")
|
|
70
|
+
task(run_in_background=true, prompt="修复 tool-approval-race-conditions.test.ts 的失败")
|
|
71
|
+
// 三个并发运行
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 4. 审查与集成
|
|
75
|
+
|
|
76
|
+
agent 返回后:
|
|
77
|
+
- 阅读每个摘要
|
|
78
|
+
- 验证修复不冲突
|
|
79
|
+
- 运行完整测试套件
|
|
80
|
+
- 集成所有变更
|
|
81
|
+
|
|
82
|
+
## Agent 提示词结构
|
|
83
|
+
|
|
84
|
+
好的 agent 提示词应该:
|
|
85
|
+
1. **聚焦** - 一个清晰的问题域
|
|
86
|
+
2. **自包含** - 理解问题所需的所有上下文
|
|
87
|
+
3. **明确输出** - agent 应该返回什么?
|
|
88
|
+
|
|
89
|
+
```markdown
|
|
90
|
+
修复 src/agents/agent-tool-abort.test.ts 中的 3 个失败测试:
|
|
91
|
+
|
|
92
|
+
1. "should abort tool with partial output capture" - 期望消息中包含 'interrupted at'
|
|
93
|
+
2. "should handle mixed completed and aborted tools" - 快速工具被中止而非完成
|
|
94
|
+
3. "should properly track pendingToolCount" - 期望 3 个结果但得到 0
|
|
95
|
+
|
|
96
|
+
这些是时序/竞态条件问题。你的任务:
|
|
97
|
+
|
|
98
|
+
1. 阅读测试文件,理解每个测试验证什么
|
|
99
|
+
2. 找到根因 - 是时序问题还是实际 bug?
|
|
100
|
+
3. 修复方式:
|
|
101
|
+
- 用基于事件的等待替换任意超时
|
|
102
|
+
- 如果发现中止实现的 bug 则修复
|
|
103
|
+
- 如果测试的是已变更的行为则调整测试期望
|
|
104
|
+
|
|
105
|
+
不要只是增加超时 - 找到真正的问题。
|
|
106
|
+
|
|
107
|
+
返回:你发现了什么以及修复了什么的摘要。
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 常见错误
|
|
111
|
+
|
|
112
|
+
**❌ 范围太广:** "修复所有测试" - agent 会迷失
|
|
113
|
+
**✅ 具体:** "修复 agent-tool-abort.test.ts" - 聚焦的范围
|
|
114
|
+
|
|
115
|
+
**❌ 没有上下文:** "修复竞态条件" - agent 不知道在哪
|
|
116
|
+
**✅ 有上下文:** 粘贴错误信息和测试名称
|
|
117
|
+
|
|
118
|
+
**❌ 没有约束:** agent 可能重构所有东西
|
|
119
|
+
**✅ 有约束:** "不要修改生产代码" 或 "只修复测试"
|
|
120
|
+
|
|
121
|
+
**❌ 输出模糊:** "修好它" - 你不知道改了什么
|
|
122
|
+
**✅ 输出明确:** "返回根因和变更的摘要"
|
|
123
|
+
|
|
124
|
+
## 何时不使用
|
|
125
|
+
|
|
126
|
+
**相关故障:** 修一个可能修好其他的,先一起排查
|
|
127
|
+
**需要完整上下文:** 理解问题需要看整个系统
|
|
128
|
+
**探索性调试:** 你还不知道什么坏了
|
|
129
|
+
**共享状态:** agent 会互相干扰(编辑同一文件、使用同一资源)
|
|
130
|
+
|
|
131
|
+
## 真实案例
|
|
132
|
+
|
|
133
|
+
**场景:** 大规模重构后 3 个文件中有 6 个测试失败
|
|
134
|
+
|
|
135
|
+
**失败情况:**
|
|
136
|
+
- agent-tool-abort.test.ts:3 个失败(时序问题)
|
|
137
|
+
- batch-completion-behavior.test.ts:2 个失败(工具未执行)
|
|
138
|
+
- tool-approval-race-conditions.test.ts:1 个失败(执行次数 = 0)
|
|
139
|
+
|
|
140
|
+
**决策:** 独立域 - 中止逻辑与批量完成与竞态条件各自独立
|
|
141
|
+
|
|
142
|
+
**调度:**
|
|
143
|
+
```
|
|
144
|
+
Agent 1 → 修复 agent-tool-abort.test.ts
|
|
145
|
+
Agent 2 → 修复 batch-completion-behavior.test.ts
|
|
146
|
+
Agent 3 → 修复 tool-approval-race-conditions.test.ts
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**结果:**
|
|
150
|
+
- Agent 1:用基于事件的等待替换了超时
|
|
151
|
+
- Agent 2:修复了事件结构 bug(threadId 位置错误)
|
|
152
|
+
- Agent 3:添加了异步工具执行完成的等待
|
|
153
|
+
|
|
154
|
+
**集成:** 所有修复独立,无冲突,完整套件全绿
|
|
155
|
+
|
|
156
|
+
**节省时间:** 3 个问题并行解决 vs 顺序解决
|
|
157
|
+
|
|
158
|
+
## 核心收益
|
|
159
|
+
|
|
160
|
+
1. **并行化** - 多个排查同时进行
|
|
161
|
+
2. **聚焦** - 每个 agent 范围窄,需要跟踪的上下文少
|
|
162
|
+
3. **独立性** - agent 互不干扰
|
|
163
|
+
4. **速度** - 3 个问题在 1 个问题的时间内解决
|
|
164
|
+
|
|
165
|
+
## 验证
|
|
166
|
+
|
|
167
|
+
agent 返回后:
|
|
168
|
+
1. **审查每个摘要** - 理解改了什么
|
|
169
|
+
2. **检查冲突** - agent 是否编辑了同一段代码?
|
|
170
|
+
3. **运行完整套件** - 验证所有修复协同工作
|
|
171
|
+
4. **抽查** - agent 可能犯系统性错误
|
|
172
|
+
|
|
173
|
+
## 实际影响
|
|
174
|
+
|
|
175
|
+
来自调试会话(2025-10-03):
|
|
176
|
+
- 3 个文件中 6 个失败
|
|
177
|
+
- 3 个 agent 并行调度
|
|
178
|
+
- 所有排查并发完成
|
|
179
|
+
- 所有修复成功集成
|
|
180
|
+
- agent 变更之间零冲突
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: executing-plans
|
|
3
|
+
description: "有写好的实现计划需要在单独会话中执行时使用,带审查检查点"
|
|
4
|
+
triggers:
|
|
5
|
+
- "执行计划"
|
|
6
|
+
- "实现计划"
|
|
7
|
+
- "按计划开发"
|
|
8
|
+
- "分批执行"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# 执行计划
|
|
12
|
+
|
|
13
|
+
## 概述
|
|
14
|
+
|
|
15
|
+
加载计划,批判性审查,分批执行任务,批次之间报告等待审查。
|
|
16
|
+
|
|
17
|
+
**核心原则:** 分批执行,带检查点供架构师审查。
|
|
18
|
+
|
|
19
|
+
**开始时宣布:** "我正在使用 executing-plans skill 来实现这个计划。"
|
|
20
|
+
|
|
21
|
+
## 流程
|
|
22
|
+
|
|
23
|
+
### 步骤 1:加载并审查计划
|
|
24
|
+
1. 读取计划文件
|
|
25
|
+
2. 批判性审查,找出任何问题或疑虑
|
|
26
|
+
3. 如果有疑虑:在开始之前向你的人类搭档提出
|
|
27
|
+
4. 如果没有疑虑:创建 TodoWrite 并继续
|
|
28
|
+
|
|
29
|
+
### 步骤 2:执行批次
|
|
30
|
+
**默认:前 3 个任务**
|
|
31
|
+
|
|
32
|
+
对每个任务:
|
|
33
|
+
1. 标记为 in_progress
|
|
34
|
+
2. 严格按照每一步执行(计划已经拆成了小步骤)
|
|
35
|
+
3. 按要求运行验证
|
|
36
|
+
4. 标记为 completed
|
|
37
|
+
|
|
38
|
+
### 步骤 3:报告
|
|
39
|
+
批次完成时:
|
|
40
|
+
- 展示实现了什么
|
|
41
|
+
- 展示验证输出
|
|
42
|
+
- 说:"等待反馈。"
|
|
43
|
+
|
|
44
|
+
### 步骤 4:继续
|
|
45
|
+
根据反馈:
|
|
46
|
+
- 如果需要就应用修改
|
|
47
|
+
- 执行下一批次
|
|
48
|
+
- 重复直到完成
|
|
49
|
+
|
|
50
|
+
### 步骤 5:完成开发
|
|
51
|
+
|
|
52
|
+
所有任务完成并验证后:
|
|
53
|
+
- 先运行 specops acceptance runner 进行验收测试
|
|
54
|
+
- 宣布:"我正在使用 finishing-a-development-branch skill 来完成这项工作。"
|
|
55
|
+
- **必须使用的子 SKILL:** 使用 specops:finishing-a-development-branch
|
|
56
|
+
- 按照那个 skill 来验证测试、展示选项、执行选择
|
|
57
|
+
|
|
58
|
+
## 什么时候停下来求助
|
|
59
|
+
|
|
60
|
+
**遇到以下情况立即停止执行:**
|
|
61
|
+
- 批次中途遇到阻塞(缺少依赖、测试失败、指令不清楚)
|
|
62
|
+
- 计划有关键缺口导致无法开始
|
|
63
|
+
- 你不理解某条指令
|
|
64
|
+
- 验证反复失败
|
|
65
|
+
|
|
66
|
+
**宁可问清楚,也不要猜。**
|
|
67
|
+
|
|
68
|
+
## 什么时候回到前面的步骤
|
|
69
|
+
|
|
70
|
+
**回到审查(步骤 1)的情况:**
|
|
71
|
+
- 搭档根据你的反馈更新了计划
|
|
72
|
+
- 根本方案需要重新思考
|
|
73
|
+
|
|
74
|
+
**不要硬闯阻塞** - 停下来问。
|
|
75
|
+
|
|
76
|
+
## 注意事项
|
|
77
|
+
- 先批判性审查计划
|
|
78
|
+
- 严格按照计划步骤执行
|
|
79
|
+
- 不要跳过验证
|
|
80
|
+
- 计划提到的 skill 要引用
|
|
81
|
+
- 批次之间:只报告,然后等待
|
|
82
|
+
- 遇到阻塞就停下来,不要猜
|
|
83
|
+
- 未经用户明确同意,永远不要在 main/master 分支上开始实现
|
|
84
|
+
|
|
85
|
+
## 集成
|
|
86
|
+
|
|
87
|
+
**必需的工作流 skill:**
|
|
88
|
+
- **specops:using-git-worktrees** - 必需:开始之前搭建隔离的工作空间
|
|
89
|
+
- **specops:writing-plans** - 创建本 skill 要执行的计划
|
|
90
|
+
- **specops:finishing-a-development-branch** - 所有任务完成后收尾开发
|