specops 0.2.5 → 0.3.2
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/specops-codebase-mapper.md +764 -0
- package/.opencode/agent/specops-debugger.md +1246 -0
- package/.opencode/agent/specops-executor.md +475 -0
- package/.opencode/agent/specops-integration-checker.md +443 -0
- package/.opencode/agent/specops-phase-researcher.md +547 -0
- package/.opencode/agent/specops-plan-checker.md +690 -0
- package/.opencode/agent/specops-planner.md +581 -0
- package/.opencode/agent/specops-project-researcher.md +354 -0
- package/.opencode/agent/specops-research-synthesizer.md +242 -0
- package/.opencode/agent/specops-roadmapper.md +642 -0
- package/.opencode/agent/specops-work-verifier.md +573 -0
- package/.opencode/references/checkpoints.md +776 -0
- package/.opencode/references/continuation-format.md +249 -0
- package/.opencode/references/decimal-phase-calculation.md +65 -0
- package/.opencode/references/git-integration.md +248 -0
- package/.opencode/references/git-planning-commit.md +38 -0
- package/.opencode/references/model-profile-resolution.md +34 -0
- package/.opencode/references/model-profiles.md +92 -0
- package/.opencode/references/phase-argument-parsing.md +61 -0
- package/.opencode/references/planning-config.md +196 -0
- package/.opencode/references/questioning.md +145 -0
- package/.opencode/references/tdd.md +263 -0
- package/.opencode/references/ui-brand.md +160 -0
- package/.opencode/references/verification-patterns.md +612 -0
- package/.opencode/templates/DEBUG.md +164 -0
- package/.opencode/templates/UAT.md +180 -0
- package/.opencode/templates/VALIDATION.md +76 -0
- package/.opencode/templates/codebase/architecture.md +255 -0
- package/.opencode/templates/codebase/concerns.md +310 -0
- package/.opencode/templates/codebase/conventions.md +307 -0
- package/.opencode/templates/codebase/integrations.md +280 -0
- package/.opencode/templates/codebase/stack.md +186 -0
- package/.opencode/templates/codebase/structure.md +285 -0
- package/.opencode/templates/codebase/testing.md +480 -0
- package/.opencode/templates/context.md +221 -0
- package/.opencode/templates/continue-here.md +78 -0
- package/.opencode/templates/debug-subagent-prompt.md +91 -0
- package/.opencode/templates/discovery.md +147 -0
- package/.opencode/templates/milestone-archive.md +123 -0
- package/.opencode/templates/milestone.md +115 -0
- package/.opencode/templates/phase-prompt.md +333 -0
- package/.opencode/templates/planner-subagent-prompt.md +117 -0
- package/.opencode/templates/project.md +184 -0
- package/.opencode/templates/requirements.md +130 -0
- package/.opencode/templates/research-project/ARCHITECTURE.md +204 -0
- package/.opencode/templates/research-project/FEATURES.md +147 -0
- package/.opencode/templates/research-project/PITFALLS.md +200 -0
- package/.opencode/templates/research-project/STACK.md +120 -0
- package/.opencode/templates/research-project/SUMMARY.md +170 -0
- package/.opencode/templates/research.md +278 -0
- package/.opencode/templates/retrospective.md +54 -0
- package/.opencode/templates/roadmap.md +202 -0
- package/.opencode/templates/state.md +176 -0
- package/.opencode/templates/summary-complex.md +59 -0
- package/.opencode/templates/summary-minimal.md +41 -0
- package/.opencode/templates/summary-standard.md +48 -0
- package/.opencode/templates/summary.md +248 -0
- package/.opencode/templates/user-setup.md +311 -0
- package/.opencode/templates/verification-report.md +322 -0
- package/.opencode/workflows/add-phase.md +111 -0
- package/.opencode/workflows/add-tests.md +350 -0
- package/.opencode/workflows/add-todo.md +157 -0
- package/.opencode/workflows/audit-milestone.md +297 -0
- package/.opencode/workflows/check-todos.md +176 -0
- package/.opencode/workflows/cleanup.md +152 -0
- package/.opencode/workflows/complete-milestone.md +763 -0
- package/.opencode/workflows/diagnose-issues.md +219 -0
- package/.opencode/workflows/discovery-phase.md +288 -0
- package/.opencode/workflows/discuss-phase.md +542 -0
- package/.opencode/workflows/execute-phase.md +449 -0
- package/.opencode/workflows/execute-plan.md +447 -0
- package/.opencode/workflows/health.md +156 -0
- package/.opencode/workflows/help.md +489 -0
- package/.opencode/workflows/insert-phase.md +129 -0
- package/.opencode/workflows/list-phase-assumptions.md +178 -0
- package/.opencode/workflows/map-codebase.md +315 -0
- package/.opencode/workflows/new-milestone.md +382 -0
- package/.opencode/workflows/new-project.md +1116 -0
- package/.opencode/workflows/pause-work.md +122 -0
- package/.opencode/workflows/plan-milestone-gaps.md +274 -0
- package/.opencode/workflows/plan-phase.md +569 -0
- package/.opencode/workflows/progress.md +381 -0
- package/.opencode/workflows/quick.md +453 -0
- package/.opencode/workflows/remove-phase.md +154 -0
- package/.opencode/workflows/research-phase.md +73 -0
- package/.opencode/workflows/resume-project.md +304 -0
- package/.opencode/workflows/set-profile.md +80 -0
- package/.opencode/workflows/settings.md +213 -0
- package/.opencode/workflows/transition.md +544 -0
- package/.opencode/workflows/update.md +219 -0
- package/.opencode/workflows/verify-phase.md +242 -0
- package/.opencode/workflows/verify-work.md +569 -0
- package/commands/specops/add-phase.md +43 -0
- package/commands/specops/add-tests.md +41 -0
- package/commands/specops/add-todo.md +47 -0
- package/commands/specops/audit-milestone.md +36 -0
- package/commands/specops/check-todos.md +45 -0
- package/commands/specops/cleanup.md +18 -0
- package/commands/specops/complete-milestone.md +136 -0
- package/commands/specops/debug.md +167 -0
- package/commands/specops/discuss-phase.md +83 -0
- package/commands/specops/execute-phase.md +41 -0
- package/commands/specops/health.md +22 -0
- package/commands/specops/help.md +22 -0
- package/commands/specops/insert-phase.md +32 -0
- package/commands/specops/join-discord.md +18 -0
- package/commands/specops/list-phase-assumptions.md +46 -0
- package/commands/specops/map-codebase.md +71 -0
- package/commands/specops/new-milestone.md +44 -0
- package/commands/specops/new-project.md +42 -0
- package/commands/specops/pause-work.md +38 -0
- package/commands/specops/plan-milestone-gaps.md +34 -0
- package/commands/specops/plan-phase.md +45 -0
- package/commands/specops/progress.md +24 -0
- package/commands/specops/quick.md +41 -0
- package/commands/specops/reapply-patches.md +111 -0
- package/commands/specops/remove-phase.md +31 -0
- package/commands/specops/research-phase.md +189 -0
- package/commands/specops/resume-work.md +40 -0
- package/commands/specops/set-profile.md +34 -0
- package/commands/specops/settings.md +36 -0
- package/commands/specops/update.md +37 -0
- package/commands/specops/verify-work.md +38 -0
- package/dist/__integration__/fixtures/generator.d.ts +4 -0
- package/dist/__integration__/fixtures/generator.js +1 -0
- package/dist/__integration__/mocks/server.d.ts +7 -0
- package/dist/__integration__/mocks/server.js +1 -0
- package/dist/__integration__/setup.d.ts +6 -0
- package/dist/__integration__/setup.js +1 -0
- package/dist/acceptance/lazyDetector.js +1 -1
- package/dist/acceptance/reporter.js +1 -1
- package/dist/acceptance/runner.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/techContextLoader.js +1 -1
- package/dist/engine.d.ts +1 -0
- 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.d.ts +4 -3
- package/dist/init.js +1 -1
- package/dist/machines/agentMachine.js +1 -1
- package/dist/machines/supervisorMachine.js +1 -1
- package/dist/persistence/schema.js +1 -1
- package/dist/persistence/stateFile.js +1 -1
- package/dist/plugin-engine.js +1 -1
- package/dist/plugin.js +1 -1
- package/dist/requirement-analysis/analyzers/repository-parser.d.ts +121 -0
- package/dist/requirement-analysis/analyzers/repository-parser.js +1 -0
- package/dist/requirement-analysis/generators/prd-generator.d.ts +90 -0
- package/dist/requirement-analysis/generators/prd-generator.js +1 -0
- package/dist/requirement-analysis/integrations/v1-integration.d.ts +73 -0
- package/dist/requirement-analysis/integrations/v1-integration.js +1 -0
- package/dist/requirement-analysis/tools/analyze-requirements.js +1 -0
- package/dist/requirement-analysis/types/analysis-result.d.ts +326 -0
- package/dist/requirement-analysis/types/analysis-result.js +1 -0
- package/dist/requirement-analysis/types/feature-mapping.d.ts +294 -0
- package/dist/requirement-analysis/types/feature-mapping.js +1 -0
- package/dist/requirement-analysis/types/index.d.ts +171 -0
- package/dist/requirement-analysis/types/index.js +1 -0
- package/dist/requirement-analysis/types/tech-stack.d.ts +213 -0
- package/dist/requirement-analysis/types/tech-stack.js +1 -0
- package/dist/requirement-analysis/utils/error-handler.d.ts +112 -0
- package/dist/requirement-analysis/utils/error-handler.js +1 -0
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.js +1 -1
- package/dist/utils/id.js +1 -1
- package/package.json +4 -2
- package/skills/competitor-search/SKILL.md +169 -0
- package/skills/demand-analysis/SKILL.md +307 -0
- package/skills/feature-search/SKILL.md +182 -0
- package/skills/requirement-analysis/README.md +464 -0
- package/skills/requirement-analysis/SKILL.md +224 -0
- package/skills/requirement-analysis/templates/feature-mapping-template.json +210 -0
- package/skills/requirement-analysis/templates/prd-template.md +104 -0
- package/skills/tech-selection/SKILL.md +198 -0
- package/dist/__e2e__/01-state-engine.e2e.test.d.ts +0 -10
- package/dist/__e2e__/01-state-engine.e2e.test.js +0 -1
- package/dist/acceptance/lazyDetector.test.d.ts +0 -1
- package/dist/acceptance/lazyDetector.test.js +0 -1
- package/dist/acceptance/reporter.test.d.ts +0 -1
- package/dist/acceptance/reporter.test.js +0 -1
- package/dist/acceptance/runner.test.d.ts +0 -1
- package/dist/acceptance/runner.test.js +0 -1
- package/dist/context/promptTemplate.test.d.ts +0 -1
- package/dist/context/promptTemplate.test.js +0 -1
- package/dist/context/techContextLoader.test.d.ts +0 -1
- package/dist/context/techContextLoader.test.js +0 -1
- package/dist/machines/agentMachine.test.d.ts +0 -1
- package/dist/machines/agentMachine.test.js +0 -1
- package/dist/machines/supervisorMachine.test.d.ts +0 -1
- package/dist/machines/supervisorMachine.test.js +0 -1
- package/dist/persistence/stateFile.test.d.ts +0 -1
- package/dist/persistence/stateFile.test.js +0 -1
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
<trigger>
|
|
2
|
+
在以下情况使用此工作流:
|
|
3
|
+
- 在现有项目上开始新会话
|
|
4
|
+
- 用户说"继续"、"下一步是什么"、"我们到哪了"、"恢复"
|
|
5
|
+
- 当 .planning/ 已存在时的任何规划操作
|
|
6
|
+
- 用户离开项目一段时间后返回
|
|
7
|
+
</trigger>
|
|
8
|
+
|
|
9
|
+
<purpose>
|
|
10
|
+
即时恢复完整的项目上下文,让"我们到哪了?"能得到即时、完整的回答。
|
|
11
|
+
</purpose>
|
|
12
|
+
|
|
13
|
+
<required_reading>
|
|
14
|
+
@.opencode/references/continuation-format.md
|
|
15
|
+
</required_reading>
|
|
16
|
+
|
|
17
|
+
<process>
|
|
18
|
+
|
|
19
|
+
<step name="initialize">
|
|
20
|
+
一次调用加载所有上下文:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
INIT=$(node .opencode/bin/specops-tools.cjs init resume)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
解析 JSON 获取:`state_exists`、`roadmap_exists`、`project_exists`、`planning_exists`、`has_interrupted_agent`、`interrupted_agent_id`、`commit_docs`。
|
|
27
|
+
|
|
28
|
+
**如果 `state_exists` 为 true:** 继续到 load_state
|
|
29
|
+
**如果 `state_exists` 为 false 但 `roadmap_exists` 或 `project_exists` 为 true:** 提供重建 STATE.md 的选项
|
|
30
|
+
**如果 `planning_exists` 为 false:** 这是新项目——路由到 /specops:new-project
|
|
31
|
+
</step>
|
|
32
|
+
|
|
33
|
+
<step name="load_state">
|
|
34
|
+
|
|
35
|
+
读取并解析 STATE.md,然后读取 PROJECT.md:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
cat .planning/STATE.md
|
|
39
|
+
cat .planning/PROJECT.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**从 STATE.md 提取:**
|
|
43
|
+
|
|
44
|
+
- **项目参考**:核心价值和当前焦点
|
|
45
|
+
- **当前位置**:第 X 阶段(共 Y 个),计划 A(共 B 个),状态
|
|
46
|
+
- **进度**:可视化进度条
|
|
47
|
+
- **近期决策**:影响当前工作的关键决策
|
|
48
|
+
- **待办事项**:会话期间捕获的想法
|
|
49
|
+
- **阻塞/关注点**:遗留的问题
|
|
50
|
+
- **会话连续性**:上次停在哪里,任何恢复文件
|
|
51
|
+
|
|
52
|
+
**从 PROJECT.md 提取:**
|
|
53
|
+
|
|
54
|
+
- **这是什么**:当前准确的描述
|
|
55
|
+
- **需求**:已验证的、活跃的、超出范围的
|
|
56
|
+
- **关键决策**:完整的决策日志及结果
|
|
57
|
+
- **约束**:实现的硬性限制
|
|
58
|
+
</step>
|
|
59
|
+
|
|
60
|
+
<step name="check_incomplete_work">
|
|
61
|
+
查找需要关注的未完成工作:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 检查 continue-here 文件(计划中途恢复)
|
|
65
|
+
ls .planning/phases/*/.continue-here*.md 2>/dev/null
|
|
66
|
+
|
|
67
|
+
# 检查没有摘要的计划(未完成的执行)
|
|
68
|
+
for plan in .planning/phases/*/*-PLAN.md; do
|
|
69
|
+
summary="${plan/PLAN/SUMMARY}"
|
|
70
|
+
[ ! -f "$summary" ] && echo "Incomplete: $plan"
|
|
71
|
+
done 2>/dev/null
|
|
72
|
+
|
|
73
|
+
# 检查中断的 Agent(使用 init 中的 has_interrupted_agent 和 interrupted_agent_id)
|
|
74
|
+
if [ "$has_interrupted_agent" = "true" ]; then
|
|
75
|
+
echo "Interrupted agent: $interrupted_agent_id"
|
|
76
|
+
fi
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**如果存在 .continue-here 文件:**
|
|
80
|
+
|
|
81
|
+
- 这是计划中途的恢复点
|
|
82
|
+
- 读取文件获取具体的恢复上下文
|
|
83
|
+
- 标记:"发现计划中途检查点"
|
|
84
|
+
|
|
85
|
+
**如果存在没有 SUMMARY 的 PLAN:**
|
|
86
|
+
|
|
87
|
+
- 执行已开始但未完成
|
|
88
|
+
- 标记:"发现未完成的计划执行"
|
|
89
|
+
|
|
90
|
+
**如果发现中断的 Agent:**
|
|
91
|
+
|
|
92
|
+
- 子 Agent 已生成但会话在完成前结束
|
|
93
|
+
- 读取 agent-history.json 获取任务详情
|
|
94
|
+
- 标记:"发现中断的 Agent"
|
|
95
|
+
</step>
|
|
96
|
+
|
|
97
|
+
<step name="present_status">
|
|
98
|
+
向用户展示完整的项目状态:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
102
|
+
║ 项目状态 ║
|
|
103
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
104
|
+
║ 构建中:[PROJECT.md "这是什么"的一句话描述] ║
|
|
105
|
+
║ ║
|
|
106
|
+
║ 阶段:[X] / [Y] - [阶段名称] ║
|
|
107
|
+
║ 计划:[A] / [B] - [状态] ║
|
|
108
|
+
║ 进度:[██████░░░░] XX% ║
|
|
109
|
+
║ ║
|
|
110
|
+
║ 最近活动:[日期] - [做了什么] ║
|
|
111
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
112
|
+
|
|
113
|
+
[如果发现未完成的工作:]
|
|
114
|
+
⚠️ 检测到未完成的工作:
|
|
115
|
+
- [.continue-here 文件或未完成的计划]
|
|
116
|
+
|
|
117
|
+
[如果发现中断的 Agent:]
|
|
118
|
+
⚠️ 检测到中断的 Agent:
|
|
119
|
+
Agent ID:[id]
|
|
120
|
+
任务:[来自 agent-history.json 的任务描述]
|
|
121
|
+
中断时间:[时间戳]
|
|
122
|
+
|
|
123
|
+
恢复方式:Task 工具(带 Agent ID 的 resume 参数)
|
|
124
|
+
|
|
125
|
+
[如果有待办事项:]
|
|
126
|
+
📋 [N] 个待办事项 — /specops:check-todos 查看
|
|
127
|
+
|
|
128
|
+
[如果有阻塞项:]
|
|
129
|
+
⚠️ 遗留关注点:
|
|
130
|
+
- [阻塞项 1]
|
|
131
|
+
- [阻塞项 2]
|
|
132
|
+
|
|
133
|
+
[如果对齐状态不是 ✓:]
|
|
134
|
+
⚠️ 简要对齐:[状态] - [评估]
|
|
135
|
+
```
|
|
136
|
+
</step>
|
|
137
|
+
|
|
138
|
+
<step name="determine_next_action">
|
|
139
|
+
根据项目状态确定最合理的下一步操作:
|
|
140
|
+
|
|
141
|
+
**如果存在中断的 Agent:**
|
|
142
|
+
→ 主要:恢复中断的 Agent(Task 工具带 resume 参数)
|
|
143
|
+
→ 选项:重新开始(放弃 Agent 工作)
|
|
144
|
+
|
|
145
|
+
**如果存在 .continue-here 文件:**
|
|
146
|
+
→ 主要:从检查点恢复
|
|
147
|
+
→ 选项:在当前计划上重新开始
|
|
148
|
+
|
|
149
|
+
**如果有未完成的计划(PLAN 没有 SUMMARY):**
|
|
150
|
+
→ 主要:完成未完成的计划
|
|
151
|
+
→ 选项:放弃并继续
|
|
152
|
+
|
|
153
|
+
**如果阶段进行中,所有计划已完成:**
|
|
154
|
+
→ 主要:过渡到下一阶段
|
|
155
|
+
→ 选项:审查已完成的工作
|
|
156
|
+
|
|
157
|
+
**如果阶段准备规划:**
|
|
158
|
+
→ 检查此阶段是否存在 CONTEXT.md:
|
|
159
|
+
|
|
160
|
+
- 如果 CONTEXT.md 缺失:
|
|
161
|
+
→ 主要:讨论阶段愿景(用户如何想象它的运作方式)
|
|
162
|
+
→ 次要:直接规划(跳过上下文收集)
|
|
163
|
+
- 如果 CONTEXT.md 存在:
|
|
164
|
+
→ 主要:规划阶段
|
|
165
|
+
→ 选项:审查路线图
|
|
166
|
+
|
|
167
|
+
**如果阶段准备执行:**
|
|
168
|
+
→ 主要:执行下一个计划
|
|
169
|
+
→ 选项:先审查计划
|
|
170
|
+
</step>
|
|
171
|
+
|
|
172
|
+
<step name="offer_options">
|
|
173
|
+
根据项目状态展示上下文相关的选项:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
你想做什么?
|
|
177
|
+
|
|
178
|
+
[基于状态的主要操作——例如:]
|
|
179
|
+
1. 恢复中断的 Agent [如果发现中断的 Agent]
|
|
180
|
+
或
|
|
181
|
+
1. 执行阶段(/specops:execute-phase {phase})
|
|
182
|
+
或
|
|
183
|
+
1. 讨论阶段 3 上下文(/specops:discuss-phase 3)[如果 CONTEXT.md 缺失]
|
|
184
|
+
或
|
|
185
|
+
1. 规划阶段 3(/specops:plan-phase 3)[如果 CONTEXT.md 存在或讨论选项被拒绝]
|
|
186
|
+
|
|
187
|
+
[次要选项:]
|
|
188
|
+
2. 审查当前阶段状态
|
|
189
|
+
3. 查看待办事项([N] 个待处理)
|
|
190
|
+
4. 审查简要对齐
|
|
191
|
+
5. 其他
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**注意:** 提供阶段规划选项时,先检查 CONTEXT.md 是否存在:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
ls .planning/phases/XX-name/*-CONTEXT.md 2>/dev/null
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
如果缺失,建议先 discuss-phase 再 plan。如果存在,直接提供 plan。
|
|
201
|
+
|
|
202
|
+
等待用户选择。
|
|
203
|
+
</step>
|
|
204
|
+
|
|
205
|
+
<step name="route_to_workflow">
|
|
206
|
+
根据用户选择路由到相应的工作流:
|
|
207
|
+
|
|
208
|
+
- **执行计划** → 显示用户清除后运行的命令:
|
|
209
|
+
```
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## ▶ 下一步
|
|
213
|
+
|
|
214
|
+
**{phase}-{plan}:[计划名称]** — [PLAN.md 中的目标]
|
|
215
|
+
|
|
216
|
+
`/specops:execute-phase {phase}`
|
|
217
|
+
|
|
218
|
+
<sub>先 `/clear` → 全新上下文窗口</sub>
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
```
|
|
222
|
+
- **规划阶段** → 显示用户清除后运行的命令:
|
|
223
|
+
```
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## ▶ 下一步
|
|
227
|
+
|
|
228
|
+
**阶段 [N]:[名称]** — [ROADMAP.md 中的目标]
|
|
229
|
+
|
|
230
|
+
`/specops:plan-phase [阶段编号]`
|
|
231
|
+
|
|
232
|
+
<sub>先 `/clear` → 全新上下文窗口</sub>
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
**其他可用操作:**
|
|
237
|
+
- `/specops:discuss-phase [N]` — 先收集上下文
|
|
238
|
+
- `/specops:research-phase [N]` — 调查未知项
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
```
|
|
242
|
+
- **过渡** → ./transition.md
|
|
243
|
+
- **查看待办** → 读取 .planning/todos/pending/,展示摘要
|
|
244
|
+
- **审查对齐** → 读取 PROJECT.md,与当前状态比较
|
|
245
|
+
- **其他** → 询问需要什么
|
|
246
|
+
</step>
|
|
247
|
+
|
|
248
|
+
<step name="update_session">
|
|
249
|
+
在继续到路由的工作流之前,更新会话连续性:
|
|
250
|
+
|
|
251
|
+
更新 STATE.md:
|
|
252
|
+
|
|
253
|
+
```markdown
|
|
254
|
+
## Session Continuity
|
|
255
|
+
|
|
256
|
+
Last session: [now]
|
|
257
|
+
Stopped at: Session resumed, proceeding to [action]
|
|
258
|
+
Resume file: [updated if applicable]
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
这确保如果会话意外结束,下次恢复时知道状态。
|
|
262
|
+
</step>
|
|
263
|
+
|
|
264
|
+
</process>
|
|
265
|
+
|
|
266
|
+
<reconstruction>
|
|
267
|
+
如果 STATE.md 缺失但其他产物存在:
|
|
268
|
+
|
|
269
|
+
"STATE.md 缺失。正在从产物重建……"
|
|
270
|
+
|
|
271
|
+
1. 读取 PROJECT.md → 提取"这是什么"和核心价值
|
|
272
|
+
2. 读取 ROADMAP.md → 确定阶段,找到当前位置
|
|
273
|
+
3. 扫描 \*-SUMMARY.md 文件 → 提取决策、关注点
|
|
274
|
+
4. 统计 .planning/todos/pending/ 中的待办事项
|
|
275
|
+
5. 检查 .continue-here 文件 → 会话连续性
|
|
276
|
+
|
|
277
|
+
重建并写入 STATE.md,然后正常继续。
|
|
278
|
+
|
|
279
|
+
这处理以下情况:
|
|
280
|
+
|
|
281
|
+
- 项目早于 STATE.md 引入
|
|
282
|
+
- 文件被意外删除
|
|
283
|
+
- 克隆仓库时没有完整的 .planning/ 状态
|
|
284
|
+
</reconstruction>
|
|
285
|
+
|
|
286
|
+
<quick_resume>
|
|
287
|
+
如果用户说"继续"或"开始":
|
|
288
|
+
- 静默加载状态
|
|
289
|
+
- 确定主要操作
|
|
290
|
+
- 立即执行,不展示选项
|
|
291
|
+
|
|
292
|
+
"从 [状态] 继续……[操作]"
|
|
293
|
+
</quick_resume>
|
|
294
|
+
|
|
295
|
+
<success_criteria>
|
|
296
|
+
恢复完成的标志:
|
|
297
|
+
|
|
298
|
+
- [ ] STATE.md 已加载(或已重建)
|
|
299
|
+
- [ ] 已检测并标记未完成的工作
|
|
300
|
+
- [ ] 已向用户展示清晰的状态
|
|
301
|
+
- [ ] 已提供上下文相关的下一步操作
|
|
302
|
+
- [ ] 用户清楚项目当前的位置
|
|
303
|
+
- [ ] 会话连续性已更新
|
|
304
|
+
</success_criteria>
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
切换 SpecOps Agent 使用的模型配置。控制每个 Agent 使用哪个 Claude 模型,在质量和 token 消耗之间取得平衡。
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
在开始之前,阅读调用提示的 execution_context 中引用的所有文件。
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="validate">
|
|
12
|
+
验证参数:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
if $ARGUMENTS.profile not in ["quality", "balanced", "budget"]:
|
|
16
|
+
Error: Invalid profile "$ARGUMENTS.profile"
|
|
17
|
+
Valid profiles: quality, balanced, budget
|
|
18
|
+
EXIT
|
|
19
|
+
```
|
|
20
|
+
</step>
|
|
21
|
+
|
|
22
|
+
<step name="ensure_and_load_config">
|
|
23
|
+
确保配置存在并加载当前状态:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
node .opencode/bin/specops-tools.cjs config-ensure-section
|
|
27
|
+
INIT=$(node .opencode/bin/specops-tools.cjs state load)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
如果 `.planning/config.json` 不存在,则使用默认值创建,并加载当前配置。
|
|
31
|
+
</step>
|
|
32
|
+
|
|
33
|
+
<step name="update_config">
|
|
34
|
+
从 state load 或直接读取当前配置:
|
|
35
|
+
|
|
36
|
+
更新 `model_profile` 字段:
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"model_profile": "$ARGUMENTS.profile"
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
将更新后的配置写回 `.planning/config.json`。
|
|
44
|
+
</step>
|
|
45
|
+
|
|
46
|
+
<step name="confirm">
|
|
47
|
+
显示确认信息及所选配置的模型表:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
✓ Model profile set to: $ARGUMENTS.profile
|
|
51
|
+
|
|
52
|
+
Agents will now use:
|
|
53
|
+
|
|
54
|
+
[Show table from MODEL_PROFILES in specops-tools.cjs for selected profile]
|
|
55
|
+
|
|
56
|
+
Example:
|
|
57
|
+
| Agent | Model |
|
|
58
|
+
|-------|-------|
|
|
59
|
+
| specops-planner | opus |
|
|
60
|
+
| specops-executor | sonnet |
|
|
61
|
+
| specops-verifier | haiku |
|
|
62
|
+
| ... | ... |
|
|
63
|
+
|
|
64
|
+
Next spawned agents will use the new profile.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
配置名称映射:
|
|
68
|
+
- quality:使用 MODEL_PROFILES 中的 "quality" 列
|
|
69
|
+
- balanced:使用 MODEL_PROFILES 中的 "balanced" 列
|
|
70
|
+
- budget:使用 MODEL_PROFILES 中的 "budget" 列
|
|
71
|
+
</step>
|
|
72
|
+
|
|
73
|
+
</process>
|
|
74
|
+
|
|
75
|
+
<success_criteria>
|
|
76
|
+
- [ ] 参数已验证
|
|
77
|
+
- [ ] 配置文件已确认存在
|
|
78
|
+
- [ ] 配置已更新为新的 model_profile
|
|
79
|
+
- [ ] 已显示确认信息及模型表
|
|
80
|
+
</success_criteria>
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
通过多问题提示交互式配置 SpecOps 工作流 Agent(研究、计划检查、验证器)和模型配置选择。将用户偏好更新到 .planning/config.json。可选择将设置保存为全局默认值(.opencode/defaults.json)供未来项目使用。
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
在开始之前,阅读调用提示的 execution_context 中引用的所有文件。
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="ensure_and_load_config">
|
|
12
|
+
确保配置存在并加载当前状态:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
node .opencode/bin/specops-tools.cjs config-ensure-section
|
|
16
|
+
INIT=$(node .opencode/bin/specops-tools.cjs state load)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
如果 `.planning/config.json` 不存在则创建默认配置,并加载当前配置值。
|
|
20
|
+
</step>
|
|
21
|
+
|
|
22
|
+
<step name="read_current">
|
|
23
|
+
```bash
|
|
24
|
+
cat .planning/config.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
解析当前值(如果不存在则默认为 `true`):
|
|
28
|
+
- `workflow.research` — 在 plan-phase 期间生成研究员
|
|
29
|
+
- `workflow.plan_check` — 在 plan-phase 期间生成计划检查器
|
|
30
|
+
- `workflow.verifier` — 在 execute-phase 期间生成验证器
|
|
31
|
+
- `workflow.nyquist_validation` — 在 plan-phase 期间进行验证架构研究
|
|
32
|
+
- `model_profile` — 每个 Agent 使用的模型(默认:`balanced`)
|
|
33
|
+
- `git.branching_strategy` — 分支策略(默认:`"none"`)
|
|
34
|
+
</step>
|
|
35
|
+
|
|
36
|
+
<step name="present_settings">
|
|
37
|
+
使用 AskUserQuestion 并预选当前值:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
AskUserQuestion([
|
|
41
|
+
{
|
|
42
|
+
question: "Agent 使用哪个模型配置?",
|
|
43
|
+
header: "模型",
|
|
44
|
+
multiSelect: false,
|
|
45
|
+
options: [
|
|
46
|
+
{ label: "Quality", description: "除验证外全部使用 Opus(最高成本)" },
|
|
47
|
+
{ label: "Balanced(推荐)", description: "规划用 Opus,执行/验证用 Sonnet" },
|
|
48
|
+
{ label: "Budget", description: "编写用 Sonnet,研究/验证用 Haiku(最低成本)" }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
question: "是否生成计划研究员?(在规划前研究领域知识)",
|
|
53
|
+
header: "研究",
|
|
54
|
+
multiSelect: false,
|
|
55
|
+
options: [
|
|
56
|
+
{ label: "是", description: "在规划前研究阶段目标" },
|
|
57
|
+
{ label: "否", description: "跳过研究,直接规划" }
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
question: "是否生成计划检查器?(在执行前验证计划)",
|
|
62
|
+
header: "计划检查",
|
|
63
|
+
multiSelect: false,
|
|
64
|
+
options: [
|
|
65
|
+
{ label: "是", description: "验证计划是否满足阶段目标" },
|
|
66
|
+
{ label: "否", description: "跳过计划验证" }
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
question: "是否生成执行验证器?(验证阶段完成情况)",
|
|
71
|
+
header: "验证器",
|
|
72
|
+
multiSelect: false,
|
|
73
|
+
options: [
|
|
74
|
+
{ label: "是", description: "执行后验证必要项" },
|
|
75
|
+
{ label: "否", description: "跳过执行后验证" }
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
question: "是否自动推进流水线?(discuss → plan → execute 自动执行)",
|
|
80
|
+
header: "自动推进",
|
|
81
|
+
multiSelect: false,
|
|
82
|
+
options: [
|
|
83
|
+
{ label: "否(推荐)", description: "阶段间手动 /clear + 粘贴" },
|
|
84
|
+
{ label: "是", description: "通过 Task() 子 Agent 链式执行(相同隔离性)" }
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
question: "是否启用 Nyquist 验证?(在规划期间研究测试覆盖率)",
|
|
89
|
+
header: "Nyquist",
|
|
90
|
+
multiSelect: false,
|
|
91
|
+
options: [
|
|
92
|
+
{ label: "是(推荐)", description: "在 plan-phase 期间研究自动化测试覆盖率。为计划添加验证要求。如果任务缺少自动化验证则阻止审批。" },
|
|
93
|
+
{ label: "否", description: "跳过验证研究。适用于快速原型或无测试阶段。" }
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
question: "Git 分支策略?",
|
|
98
|
+
header: "分支",
|
|
99
|
+
multiSelect: false,
|
|
100
|
+
options: [
|
|
101
|
+
{ label: "无(推荐)", description: "直接提交到当前分支" },
|
|
102
|
+
{ label: "按阶段", description: "为每个阶段创建分支(specops/phase-{N}-{name})" },
|
|
103
|
+
{ label: "按里程碑", description: "为整个里程碑创建分支(specops/{version}-{name})" }
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
])
|
|
107
|
+
```
|
|
108
|
+
</step>
|
|
109
|
+
|
|
110
|
+
<step name="update_config">
|
|
111
|
+
将新设置合并到现有 config.json 中:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
...existing_config,
|
|
116
|
+
"model_profile": "quality" | "balanced" | "budget",
|
|
117
|
+
"workflow": {
|
|
118
|
+
"research": true/false,
|
|
119
|
+
"plan_check": true/false,
|
|
120
|
+
"verifier": true/false,
|
|
121
|
+
"auto_advance": true/false,
|
|
122
|
+
"nyquist_validation": true/false
|
|
123
|
+
},
|
|
124
|
+
"git": {
|
|
125
|
+
"branching_strategy": "none" | "phase" | "milestone"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
将更新后的配置写入 `.planning/config.json`。
|
|
131
|
+
</step>
|
|
132
|
+
|
|
133
|
+
<step name="save_as_defaults">
|
|
134
|
+
询问是否将这些设置保存为未来项目的全局默认值:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
AskUserQuestion([
|
|
138
|
+
{
|
|
139
|
+
question: "是否将这些设置保存为所有新项目的默认值?",
|
|
140
|
+
header: "默认值",
|
|
141
|
+
multiSelect: false,
|
|
142
|
+
options: [
|
|
143
|
+
{ label: "是", description: "新项目将使用这些设置启动(保存到 .opencode/defaults.json)" },
|
|
144
|
+
{ label: "否", description: "仅应用于当前项目" }
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
])
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
如果选择"是":将相同的配置对象(去除项目特定字段如 `brave_search`)写入 `.opencode/defaults.json`:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
mkdir -p .opencode
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
写入 `.opencode/defaults.json`:
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"mode": <当前值>,
|
|
160
|
+
"depth": <当前值>,
|
|
161
|
+
"model_profile": <当前值>,
|
|
162
|
+
"commit_docs": <当前值>,
|
|
163
|
+
"parallelization": <当前值>,
|
|
164
|
+
"branching_strategy": <当前值>,
|
|
165
|
+
"workflow": {
|
|
166
|
+
"research": <当前值>,
|
|
167
|
+
"plan_check": <当前值>,
|
|
168
|
+
"verifier": <当前值>,
|
|
169
|
+
"auto_advance": <当前值>,
|
|
170
|
+
"nyquist_validation": <当前值>
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
</step>
|
|
175
|
+
|
|
176
|
+
<step name="confirm">
|
|
177
|
+
显示:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
181
|
+
SpecOps ► 设置已更新
|
|
182
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
183
|
+
|
|
184
|
+
| 设置项 | 值 |
|
|
185
|
+
|----------------------|-------|
|
|
186
|
+
| 模型配置 | {quality/balanced/budget} |
|
|
187
|
+
| 计划研究员 | {开启/关闭} |
|
|
188
|
+
| 计划检查器 | {开启/关闭} |
|
|
189
|
+
| 执行验证器 | {开启/关闭} |
|
|
190
|
+
| 自动推进 | {开启/关闭} |
|
|
191
|
+
| Nyquist 验证 | {开启/关闭} |
|
|
192
|
+
| Git 分支 | {无/按阶段/按里程碑} |
|
|
193
|
+
| 已保存为默认值 | {是/否} |
|
|
194
|
+
|
|
195
|
+
这些设置将应用于后续的 /specops:plan-phase 和 /specops:execute-phase 运行。
|
|
196
|
+
|
|
197
|
+
快捷命令:
|
|
198
|
+
- /specops:set-profile <profile> — 切换模型配置
|
|
199
|
+
- /specops:plan-phase --research — 强制启用研究
|
|
200
|
+
- /specops:plan-phase --skip-research — 跳过研究
|
|
201
|
+
- /specops:plan-phase --skip-verify — 跳过计划检查
|
|
202
|
+
```
|
|
203
|
+
</step>
|
|
204
|
+
|
|
205
|
+
</process>
|
|
206
|
+
|
|
207
|
+
<success_criteria>
|
|
208
|
+
- [ ] 已读取当前配置
|
|
209
|
+
- [ ] 向用户展示了 7 项设置(配置 + 5 个工作流开关 + git 分支)
|
|
210
|
+
- [ ] 已更新配置的 model_profile、workflow 和 git 部分
|
|
211
|
+
- [ ] 已提供保存为全局默认值的选项(.opencode/defaults.json)
|
|
212
|
+
- [ ] 已向用户确认变更
|
|
213
|
+
</success_criteria>
|