sillyspec 3.8.2 → 3.8.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.
@@ -13,5 +13,40 @@ description: 编写实现计划 — 2-5 分钟粒度,精确到文件路径和
13
13
  4. 重复 2-3 直到阶段完成
14
14
  5. **禁止**在没有运行 CLI 的情况下自行决定流程
15
15
 
16
+ ## 子代理并行优化(可选)
17
+
18
+ 当 CLI 进入"写任务蓝图 task-N.md"步骤时(Step 5 之后),可以用子代理并行加速:
19
+
20
+ 1. 读取 plan.md,统计任务数量
21
+ 2. 为每个 task-N.md 启动一个独立子代理
22
+ 3. 每个子代理的任务:
23
+ - 读取 design.md 和 plan.md
24
+ - 读取相关源文件
25
+ - 按格式要求写 task-N.md 并保存
26
+ 4. 所有子代理完成后,继续 CLI 的下一步(审查一致性)
27
+
28
+ **子代理 prompt 模板:**
29
+ ```
30
+ 你是计划编写者。请为以下任务编写详细蓝图。
31
+
32
+ 任务:${taskName}
33
+ 变更目录:${changeDir}
34
+ 文件路径:${changeDir}/tasks/task-${taskNum}.md
35
+
36
+ 要求:
37
+ 1. 读取 design.md 和 plan.md 了解上下文
38
+ 2. 读取相关源文件了解现有代码
39
+ 3. 按以下格式编写任务蓝图并保存到文件:
40
+ - 修改文件列表
41
+ - 实现要求
42
+ - 接口定义/数据结构
43
+ - 边界处理
44
+ - 参考
45
+ - TDD 步骤
46
+ - 验收标准(checkbox)
47
+ ```
48
+
49
+ **注意:** 手动跑 plan 时不用子代理(串行即可),auto skill 中建议用子代理并行。
50
+
16
51
  ## 用户指令
17
52
  $ARGUMENTS
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  >
10
10
  > 📖 **在线文档**:https://sillyspec.ppdmq.top/
11
11
  >
12
- > 💡 **核心理念:Code is Cheap, Context is Expensive.** 规范(Spec)才是核心资产,代码只是规范的衍生物。
12
+ > 💡 **核心理念:Code is Cheap, Context is Expensive.** 文档是核心资产,代码是文档的产物。没有文档就没有代码——文档是 AI 的记忆,是团队协作的基础,是后续维护的唯一依据。
13
13
 
14
14
  ## 安装
15
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "3.8.2",
3
+ "version": "3.8.4",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "icon": "logo.jpg",
6
6
  "homepage": "https://sillyspec.ppdmq.top/",
package/src/run.js CHANGED
@@ -135,12 +135,12 @@ function outputStep(stageName, stepIndex, steps, cwd) {
135
135
  console.log(`## Step ${stepIndex + 1}/${total}: ${step.name}\n`)
136
136
  console.log(step.prompt)
137
137
  console.log(`\n### ⚠️ 铁律`)
138
+ console.log('- **文档是核心资产,代码是文档的产物。** 没有文档就没有代码——文档是 AI 的记忆,是团队协作的基础,是后续维护的唯一依据。任何代码产出必须先有对应的设计/规范文档支撑。')
138
139
  console.log('- 只做本步骤描述的操作,不得自行扩展或跳过')
139
140
  console.log('- 不要回头修改已完成的步骤')
140
- console.log('- 不要使用 npx 命令,直接使用 sillyspec(已全局安装)')
141
141
  console.log('- 不要编造不存在的 CLI 子命令')
142
142
  console.log('- 完成后立即执行 --done 命令,不得跳过')
143
- console.log('- 生成的文件头部必须包含 author(git 用户名)和 created_at(精确到秒)')
143
+ console.log('- 文档类型文件(.md/.yaml/.json 等)头部必须包含 author(git 用户名)和 created_at(精确到秒)')
144
144
  console.log('- 执行构建/测试前必须先读 local.yaml,优先使用其中配置的命令、路径和环境变量;未配置时才使用默认值')
145
145
  console.log(`\n### 完成后执行`)
146
146
  console.log(`sillyspec run ${stageName} --done --input "用户原始需求/反馈" --output "你的摘要"`)
@@ -28,9 +28,11 @@ export const definition = {
28
28
 
29
29
  ### 操作
30
30
  1. 读取 CODEBASE-OVERVIEW.md + 共享规范 + 子项目上下文
31
- 2. 询问本次需求属于哪个子项目
32
- 3. 棕地项目:读取 docs/<project>/scan/ 下的 STRUCTURE.md、CONVENTIONS.md、ARCHITECTURE.md
33
- 4. 查看进行中的变更:\`ls .sillyspec/changes/ | grep -v archive\`
31
+ 2. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
32
+ 3. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`
33
+ 4. 询问本次需求属于哪个子项目
34
+ 5. 棕地项目:读取 docs/<project>/scan/ 下的 STRUCTURE.md、CONVENTIONS.md、ARCHITECTURE.md
35
+ 6. 查看进行中的变更:\`ls .sillyspec/changes/ | grep -v archive\`
34
36
 
35
37
  ### 输出
36
38
  项目现状理解摘要(3-5 句话,关键约定和架构决策)
@@ -172,18 +172,27 @@ function buildWavePrompt(wave, waveIndex, changeDir) {
172
172
  const taskList = wave.tasks.map((t, ti) => {
173
173
  const taskNum = String(t.index || (ti + 1)).padStart(2, '0')
174
174
  const taskFile = changeDir ? `${changeDir}/tasks/task-${taskNum}.md` : ''
175
+ const taskFileExists = taskFile && existsSync(taskFile)
175
176
  let s = `- [ ] ${t.name}`
176
177
  if (t.file) s += ` (${t.file})`
177
- if (taskFile) s += `
178
- 📋 **执行前必须读取任务蓝图:\`cat ${taskFile}\`**`
178
+ if (taskFileExists) {
179
+ const taskContent = readFileSync(taskFile, 'utf8').trim()
180
+ s += `
181
+ \n### 📋 任务蓝图(task-${taskNum}.md)\n${taskContent}`
182
+ }
179
183
  if (t.reference) s += `\n 参考: ${t.reference}`
180
184
  if (t.steps) s += `\n 步骤: ${t.steps}`
181
185
  return s
182
186
  }).join('\n')
187
+ const hasTaskBlueprints = changeDir && existsSync(join(changeDir, 'tasks'))
188
+ const taskBlueprintRule = hasTaskBlueprints
189
+ ? '每个任务有独立的 task-N.md 蓝图——只做蓝图里写的事,不要实现蓝图之外的功能。如果蓝图有问题,**停下来反馈**,不要自己改。问题归因:实现困难 → task 蓝图没写好 → plan 没做好 → design 有缺陷。'
190
+ : '如果发现 plan 不合理,**停下来反馈**,不要自己改方案。问题归因:实现困难 → plan 没做好 → design 有缺陷。'
183
191
  return `## Wave ${waveIndex}: 执行以下任务
184
192
 
185
193
  ### Wave 开始前
186
194
  1. 读取 design.md 的「编码铁律」章节(如果存在),严格遵守
195
+ 2. 读取 plan.md 了解全局任务划分和依赖关系
187
196
  2. 确认本 Wave 的输入/输出契约(前置 Wave 产出了什么,本 Wave 需要消费什么)
188
197
  3. 检查前置 Wave 的产出是否完整(文件是否存在、测试是否通过)
189
198
  4. **上下文分层加载**:
@@ -197,15 +206,16 @@ ${taskList}
197
206
  ### 执行要求
198
207
  1. 按任务顺序执行,同一 Wave 内任务可并行
199
208
  2. 铁律:先读后写、grep 确认方法存在、不编造、TDD
200
- 3. **禁止发散思维**:你是代码搬运工,严格按 plan 执行,不要自行发挥"更好的方案"。如果发现 plan 不合理,**停下来反馈**,不要自己改方案。问题归因:实现困难 → plan 没做好;plan 做不好 → design 有缺陷。链路可追溯,不要在中途偷偷修设计。
201
- 4. **Reverse Sync**:发现 Bug 或实现与 design.md 不一致时,先检查是代码错了还是 design.md 有遗漏,有遗漏则先修 design.md 再修代码。design.md 是唯一 truth source。
209
+ 3. **禁止发散思维**:你是代码搬运工,严格按任务描述执行,不增不减不改。${taskBlueprintRule}
210
+ 4. **Reverse Sync**:发现 Bug 或实现与 design.md/task-N.md 不一致时,先检查是代码错了还是文档有遗漏,有遗漏则先修文档再修代码。
202
211
  3. **不要频繁编译!** 编译很慢,只在以下情况运行:
203
212
  - 写了大量代码后需要验证语法正确性
204
213
  - 最后一个 Wave 完成后做一次全量编译验证
205
214
  - 用户明确要求编译时
206
215
  4. 单个任务完成后只跑**对应模块的单元测试**(TDD 绿灯确认),不要跑全量编译
207
216
  5. 每个任务完成后:
208
- - 勾选 tasks.md 中对应 checkbox
217
+ - 勾选 task-N.md 中的验收标准 checkbox
218
+ - 勾选 plan.md / tasks.md 中对应任务的 checkbox
209
219
  - 记录改动文件和测试结果
210
220
  6. 遇到 BLOCKED → 记录原因,选择:重试/跳过/停止
211
221
 
@@ -22,7 +22,10 @@ export const definition = {
22
22
 
23
23
  ### 操作
24
24
  1. 读取 proposal.md、design.md、tasks.md、requirements.md
25
- 2. 标注每个文件的存在/不存在状态
25
+ 2. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
26
+ 3. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`(构建命令、测试命令、lint 命令等)
27
+ 4. 加载代码规范:\`cat .sillyspec/docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
28
+ 5. 标注每个文件的存在/不存在状态
26
29
 
27
30
  ### 输出
28
31
  文件加载确认清单`,
@@ -69,6 +72,23 @@ export const definition = {
69
72
  outputHint: '设计一致性报告',
70
73
  optional: false
71
74
  },
75
+ {
76
+ name: '任务蓝图验收',
77
+ prompt: `检查每个 task-N.md 的验收标准是否全部满足。
78
+
79
+ ### 操作
80
+ 1. 检查变更目录下 tasks/ 是否存在
81
+ 2. 如果存在:
82
+ - 逐个读取 tasks/task-NN.md
83
+ - 检查每个文件的「验收标准」checkbox 是否全部勾选
84
+ - 未勾选的项列为不通过
85
+ 3. 如果不存在:跳过此步骤
86
+
87
+ ### 输出
88
+ 验收结果:通过/不通过 + 未通过的项`,
89
+ outputHint: '验收结果',
90
+ optional: false
91
+ },
72
92
  {
73
93
  name: '运行测试和质量扫描',
74
94
  prompt: `运行测试和代码质量扫描。