sillyspec 3.8.4 → 3.8.6

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.
Files changed (163) hide show
  1. package/README.md +0 -6
  2. package/docs/.vitepress/config.mts +45 -0
  3. package/docs/.vitepress/dist/404.html +25 -0
  4. package/docs/.vitepress/dist/assets/app.YytxICdd.js +1 -0
  5. package/docs/.vitepress/dist/assets/chunks/framework.Czhw_PXq.js +19 -0
  6. package/docs/.vitepress/dist/assets/chunks/theme.DusTRZQk.js +1 -0
  7. package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.js +1 -0
  8. package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.lean.js +1 -0
  9. package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  10. package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  11. package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  12. package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  13. package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  14. package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  15. package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  16. package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  17. package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  18. package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  19. package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  20. package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  21. package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  22. package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  23. package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.js +15 -0
  24. package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.lean.js +1 -0
  25. package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.js +4 -0
  26. package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.lean.js +1 -0
  27. package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.js +1 -0
  28. package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.lean.js +1 -0
  29. package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.js +4 -0
  30. package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.lean.js +1 -0
  31. package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.js +5 -0
  32. package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.lean.js +1 -0
  33. package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.js +28 -0
  34. package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.lean.js +1 -0
  35. package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.js +30 -0
  36. package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.lean.js +1 -0
  37. package/docs/.vitepress/dist/assets/style.DFTx90Kk.css +1 -0
  38. package/docs/.vitepress/dist/hashmap.json +1 -0
  39. package/docs/.vitepress/dist/index.html +28 -0
  40. package/docs/.vitepress/dist/sillyspec/commands.html +42 -0
  41. package/docs/.vitepress/dist/sillyspec/dashboard.html +31 -0
  42. package/docs/.vitepress/dist/sillyspec/file-io.html +28 -0
  43. package/docs/.vitepress/dist/sillyspec/getting-started.html +31 -0
  44. package/docs/.vitepress/dist/sillyspec/install.html +32 -0
  45. package/docs/.vitepress/dist/sillyspec/lifecycle.html +55 -0
  46. package/docs/.vitepress/dist/sillyspec/structure.html +57 -0
  47. package/docs/.vitepress/dist/vp-icons.css +1 -0
  48. package/docs/index.md +34 -0
  49. package/docs/sillyspec/commands.md +218 -0
  50. package/docs/sillyspec/dashboard.md +51 -0
  51. package/docs/sillyspec/file-io.md +34 -0
  52. package/docs/sillyspec/getting-started.md +61 -0
  53. package/docs/sillyspec/install.md +51 -0
  54. package/docs/sillyspec/lifecycle.md +146 -0
  55. package/docs/sillyspec/structure.md +62 -0
  56. package/package.json +11 -9
  57. package/packages/dashboard/dist/assets/index-Bh-GPjKY.css +1 -0
  58. package/packages/dashboard/dist/assets/index-CrCn5Gg6.js +17 -0
  59. package/packages/dashboard/dist/index.html +2 -2
  60. package/packages/dashboard/package-lock.json +0 -220
  61. package/packages/dashboard/package.json +5 -8
  62. package/packages/dashboard/server/index.js +106 -255
  63. package/packages/dashboard/server/parser.js +29 -333
  64. package/packages/dashboard/server/watcher.js +131 -203
  65. package/packages/dashboard/src/App.vue +10 -181
  66. package/packages/dashboard/src/components/ActionBar.vue +42 -26
  67. package/packages/dashboard/src/components/CommandPalette.vue +65 -40
  68. package/packages/dashboard/src/components/DetailPanel.vue +53 -68
  69. package/packages/dashboard/src/components/LogStream.vue +33 -13
  70. package/packages/dashboard/src/components/PipelineStage.vue +8 -8
  71. package/packages/dashboard/src/components/PipelineView.vue +45 -80
  72. package/packages/dashboard/src/components/ProjectList.vue +45 -103
  73. package/packages/dashboard/src/components/StageBadge.vue +13 -13
  74. package/packages/dashboard/src/components/StepCard.vue +15 -15
  75. package/packages/dashboard/src/composables/useDashboard.js +6 -20
  76. package/packages/dashboard/src/composables/useKeyboard.js +4 -6
  77. package/packages/dashboard/src/main.js +1 -4
  78. package/packages/dashboard/src/style.css +17 -17
  79. package/src/index.js +12 -123
  80. package/src/init.js +227 -86
  81. package/src/setup.js +9 -1
  82. package/templates/archive.md +121 -0
  83. package/templates/brainstorm.md +240 -0
  84. package/{.claude/skills/sillyspec-commit/SKILL.md → templates/commit.md} +47 -29
  85. package/templates/continue.md +32 -0
  86. package/templates/execute.md +314 -0
  87. package/templates/explore.md +60 -0
  88. package/templates/export.md +21 -0
  89. package/templates/init.md +61 -0
  90. package/templates/plan.md +157 -0
  91. package/templates/quick.md +135 -0
  92. package/templates/scan-quick.md +49 -0
  93. package/templates/scan.md +172 -0
  94. package/templates/skills/playwright-e2e/SKILL.md +340 -0
  95. package/templates/status.md +75 -0
  96. package/templates/verify.md +253 -0
  97. package/templates/workspace-sync.md +99 -0
  98. package/templates/workspace.md +70 -0
  99. package/.claude/skills/sillyspec-archive/SKILL.md +0 -17
  100. package/.claude/skills/sillyspec-auto/SKILL.md +0 -77
  101. package/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -17
  102. package/.claude/skills/sillyspec-continue/SKILL.md +0 -44
  103. package/.claude/skills/sillyspec-doctor/SKILL.md +0 -22
  104. package/.claude/skills/sillyspec-execute/SKILL.md +0 -17
  105. package/.claude/skills/sillyspec-explore/SKILL.md +0 -96
  106. package/.claude/skills/sillyspec-export/SKILL.md +0 -53
  107. package/.claude/skills/sillyspec-init/SKILL.md +0 -170
  108. package/.claude/skills/sillyspec-plan/SKILL.md +0 -52
  109. package/.claude/skills/sillyspec-propose/SKILL.md +0 -17
  110. package/.claude/skills/sillyspec-quick/SKILL.md +0 -17
  111. package/.claude/skills/sillyspec-resume/SKILL.md +0 -111
  112. package/.claude/skills/sillyspec-scan/SKILL.md +0 -17
  113. package/.claude/skills/sillyspec-state/SKILL.md +0 -54
  114. package/.claude/skills/sillyspec-status/SKILL.md +0 -17
  115. package/.claude/skills/sillyspec-verify/SKILL.md +0 -17
  116. package/.claude/skills/sillyspec-workspace/SKILL.md +0 -149
  117. package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +0 -97
  118. package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +0 -51
  119. package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +0 -29
  120. package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +0 -34
  121. package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +0 -13
  122. package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +0 -43
  123. package/.sillyspec/changes/auto-mode/design.md +0 -50
  124. package/.sillyspec/changes/auto-mode/proposal.md +0 -19
  125. package/.sillyspec/changes/auto-mode/requirements.md +0 -21
  126. package/.sillyspec/changes/auto-mode/tasks.md +0 -7
  127. package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +0 -199
  128. package/.sillyspec/changes/dashboard/design.md.braindraft +0 -206
  129. package/.sillyspec/changes/run-command-design/design.md +0 -1230
  130. package/.sillyspec/changes/unified-docs-design/design.md +0 -199
  131. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  132. package/.sillyspec/knowledge/INDEX.md +0 -8
  133. package/.sillyspec/knowledge/uncategorized.md +0 -3
  134. package/.sillyspec/projects/sillyspec.yaml +0 -3
  135. package/packages/dashboard/dist/assets/index-D1EVTLmc.js +0 -7446
  136. package/packages/dashboard/dist/assets/index-DGe8CqeP.css +0 -1
  137. package/packages/dashboard/public/logo.jpg +0 -0
  138. package/packages/dashboard/src/components/DocPreview.vue +0 -160
  139. package/packages/dashboard/src/components/DocTree.vue +0 -58
  140. package/packages/dashboard/src/components/ProjectOverview.vue +0 -178
  141. package/packages/dashboard/src/components/detail/DocsDetail.vue +0 -48
  142. package/packages/dashboard/src/components/detail/GitDetail.vue +0 -61
  143. package/packages/dashboard/src/components/detail/TechDetail.vue +0 -43
  144. package/src/derive.js +0 -147
  145. package/src/migrate.js +0 -117
  146. package/src/progress.js +0 -495
  147. package/src/run.js +0 -640
  148. package/src/stages/archive.js +0 -54
  149. package/src/stages/brainstorm.js +0 -239
  150. package/src/stages/doctor.js +0 -312
  151. package/src/stages/execute.js +0 -258
  152. package/src/stages/index.js +0 -35
  153. package/src/stages/plan.js +0 -259
  154. package/src/stages/propose.js +0 -115
  155. package/src/stages/quick.js +0 -64
  156. package/src/stages/scan.js +0 -141
  157. package/src/stages/status.js +0 -65
  158. package/src/stages/verify.js +0 -135
  159. /package/.sillyspec/{changes/brainstorm-archive → specs}/2026-04-05-dashboard-design.md +0 -0
  160. /package/{packages/dashboard → docs/.vitepress}/dist/favicon.jpg +0 -0
  161. /package/{logo.jpg → docs/.vitepress/dist/logo.jpg} +0 -0
  162. /package/{packages/dashboard → docs}/public/favicon.jpg +0 -0
  163. /package/{packages/dashboard/dist → docs/public}/logo.jpg +0 -0
@@ -0,0 +1,314 @@
1
+ ## 交互规范
2
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
+
4
+ ## 核心约束(必须遵守)
5
+ - ❌ 跳过状态检查,自行推断阶段
6
+ - ❌ 跳步执行(不允许跳过 plan 直接 execute)
7
+ - ❌ 先写代码后补测试
8
+ - ❌ 编造不存在的方法/注解/路径/类/字段
9
+ - ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
10
+ - ❌ 意外修改了计划外的文件却不报告
11
+
12
+ ## 状态检查(必须先执行)
13
+
14
+ ```bash
15
+ cat .sillyspec/STATE.md 2>/dev/null
16
+ ```
17
+
18
+ 有 STATE.md 且 phase 为 execute → 继续。无 STATE.md 或 phase 不对 → 检查是否有未完成的 tasks.md:
19
+
20
+ ```bash
21
+ ls .sillyspec/changes/*/tasks.md 2>/dev/null | xargs grep -l '\- \[ \]' 2>/dev/null
22
+ ```
23
+
24
+ 有未完成的 tasks.md → 继续。没有 → 提示 `/sillyspec:continue`。
25
+
26
+ ## 执行范围
27
+ $ARGUMENTS
28
+
29
+ ---
30
+
31
+ ## 加载上下文
32
+
33
+ ```bash
34
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
35
+ ```
36
+
37
+ **工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md。所有代码修改、测试运行在子项目目录中执行。
38
+
39
+ **加载以下文件(主代理读取,后续注入子代理):**
40
+ ```bash
41
+ PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
42
+ LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
43
+ cat "$LATEST"/{tasks,design}.md 2>/dev/null
44
+ cat .sillyspec/docs/<project>/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
45
+ cat .sillyspec/local.yaml 2>/dev/null
46
+ ```
47
+
48
+ **知识库查询(强制步骤):**
49
+ 主代理在 dispatch 每个子代理前,必须执行:
50
+ ```bash
51
+ cat .sillyspec/knowledge/INDEX.md 2>/dev/null
52
+ ```
53
+ 根据当前 task 描述中的关键词(技术名词、模块名、文件路径等)匹配 INDEX.md 条目。命中时读取对应 knowledge 文件,将内容注入子代理 prompt 的「相关知识」段。未命中则跳过,不注入空段。
54
+
55
+ 子代理遇到不熟悉的库或 API 时,优先使用已配置的 MCP 工具(Context7 等)或 web search 查最新文档,不要凭记忆猜测用法。
56
+
57
+ **编码规范扫描(主代理执行):**
58
+ 主代理在 dispatch 子代理前,扫描项目中常见的编码规范配置文件,将关键规则注入子代理 prompt 的「编码规范约束」段。
59
+
60
+ ```bash
61
+ # 检测存在的配置文件
62
+ for f in .eslintrc .eslintrc.js .eslintrc.cjs .eslintrc.json .eslintrc.yml \
63
+ .prettierrc .prettierrc.js .prettierrc.json .prettierrc.yml \
64
+ tsconfig.json tsconfig.base.json \
65
+ .editorconfig \
66
+ .tailwind.config.js .tailwind.config.ts \
67
+ .stylelintrc .stylelintrc.js .stylelintrc.json \
68
+ CONTRIBUTING.md CODE_STYLE.md; do
69
+ [ -f "$f" ] && echo "=== $f ===" && cat "$f"
70
+ done
71
+ # 也检查 package.json 中的 lint/format 脚本
72
+ cat package.json 2>/dev/null | grep -A5 '"lint\|"format\|"typecheck\|"type-check'
73
+ ```
74
+
75
+ 扫描后,主代理根据检测结果生成**编码规范摘要**(不是原文粘贴,是提炼关键约束),格式如下。如果某个类别未检测到对应配置文件,则省略该段:
76
+
77
+ ```
78
+ ## 编码规范约束(自动扫描)
79
+
80
+ ### ESLint
81
+ {提取的关键规则,如:禁止 var、要求分号、禁止未使用变量、特定插件规则等}
82
+
83
+ ### Prettier
84
+ {提取的格式化规则,如:单引号、2空格缩进、无分号、行宽 80 等}
85
+
86
+ ### TypeScript
87
+ {从 tsconfig 提取的严格模式设置,如:strict: true、noUncheckedIndexedAccess 等}
88
+
89
+ ### Import / 命名约定
90
+ {从 eslint/import 插件或 editorconfig 提取的导入排序、命名风格等}
91
+
92
+ ### 框架约定
93
+ {检测到的框架特定约定,如:Next.js App Router、Tailwind 类名风格等}
94
+ ```
95
+
96
+ 将此摘要注入到每个子代理 prompt 的「项目约定」段之后,并追加一条铁律:
97
+ > **10. 遵守编码规范:** 以上「编码规范约束」中的所有规则必须严格遵守。如规则与任务描述冲突,优先遵守规范约束并报告。
98
+
99
+ **测试模式扫描(主代理执行):**
100
+ 对包含 E2E/测试任务时,扫描项目已有的测试文件,提取测试风格注入子代理 prompt 的「测试模式参考」段。
101
+
102
+ ```bash
103
+ # 检测测试框架
104
+ cat package.json 2>/dev/null | grep -E "playwright|cypress|jest|vitest|mocha"
105
+
106
+ # 查找已有测试文件
107
+ find . -name "*.spec.ts" -o -name "*.test.ts" -o -name "*.spec.tsx" -o -name "*.spec.js" \
108
+ -o -name "playwright.config.*" -o -name "vitest.config.*" -o -name "jest.config.*" \
109
+ 2>/dev/null | grep -v node_modules | head -10
110
+
111
+ # 读取 1-2 个已有测试文件作为风格参考
112
+ # 优先读 E2E 测试,其次读通用测试
113
+ find tests/e2e e2e cypress/e2e __tests__ src -name "*.spec.ts" -o -name "*.test.ts" \
114
+ 2>/dev/null | grep -v node_modules | head -3 | xargs cat 2>/dev/null
115
+ ```
116
+
117
+ 扫描后生成**测试模式摘要**:
118
+
119
+ ```
120
+ ## 测试模式参考(自动扫描)
121
+
122
+ ### 测试框架
123
+ {检测到的框架及版本,如:Playwright 1.42、Vitest 1.2}
124
+
125
+ ### 断言风格
126
+ {从已有测试提取的断言模式,如:expect(page).toHaveText()、toEqual、toBeTruthy 等}
127
+
128
+ ### Fixtures / Helper
129
+ {项目自定义的 test fixtures、page objects、helper 函数}
130
+
131
+ ### 文件组织
132
+ {测试文件目录结构、命名约定、文件内组织方式}
133
+
134
+ ### 配置要点
135
+ {playwright.config.ts 中的 baseURL、timeout、retries 等关键配置}
136
+ ```
137
+
138
+ 将此摘要注入到每个 E2E/测试子代理 prompt 的「任务描述」段之后,并追加一条铁律:
139
+ > **11. 参照已有测试风格:** 编写新测试时必须参照以上「测试模式参考」中的风格,包括断言方式、fixtures 使用、文件组织。不要凭记忆写测试。
140
+ > **12. 参考已有实现:** 写新功能前,先 grep 项目中类似功能的已有代码(`grep -r "关键词" src/`),照着项目现有的模式、风格和封装方式写,不要凭记忆编造。
141
+
142
+ **Skill 扫描(主代理执行):**
143
+ 对每个子代理 dispatch 前,扫描项目中已安装的 skill,匹配相关 skill 注入子代理 prompt 的「本地 Skills」段。
144
+
145
+ ```bash
146
+ for skill_dir in .claude/skills/*/SKILL.md .cursor/skills/*/SKILL.md .opencode/skills/*/SKILL.md; do
147
+ [ -f "$skill_dir" ] && echo "=== $skill_dir ===" && cat "$skill_dir"
148
+ done
149
+ ```
150
+
151
+ 扫描后,根据当前任务描述的关键词匹配 skill 的 name 和 description:
152
+ - 任务包含"E2E"/"端到端"/"测试用例" → 匹配 playwright-e2e skill
153
+ - 未来可扩展更多 skill
154
+
155
+ 匹配到的 skill → 将 SKILL.md 全文注入子代理 prompt。未匹配则省略该段。
156
+
157
+ **MCP 能力检测(主代理执行):**
158
+ 检查当前可用工具列表中是否存在以下类型的 MCP 工具(不要只依赖配置文件路径,不同客户端配置位置不同):
159
+ - Context7 / 文档查询工具
160
+ - 数据库工具(postgres/sqlite/mysql/redis)
161
+ - 浏览器工具(browser/chrome/playwright/devtools)
162
+ - 搜索工具(search/web_search)
163
+ 根据检测结果,在子代理 prompt 的「文档查询指引」段动态注入:
164
+ - 有 `context7` → `遇到不熟悉的库/API,使用 Context7 MCP(resolve-library-id → query-docs)查询最新文档`
165
+ - 无 `context7` → `遇到不熟悉的库/API,使用 web search 查询最新官方文档`
166
+ - 有数据库 MCP(postgres/sqlite/mysql/redis)→ 在「数据操作」段注入对应 MCP 可用
167
+ - 检测为空 → 不注入额外提示
168
+
169
+ 如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
170
+
171
+ ---
172
+
173
+ ## 确认频率
174
+
175
+ 用 AskUserQuestion 询问用户选择:
176
+ - **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
177
+ - **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
178
+ - **全自动** — 全部自动执行,不在中途打断用户
179
+
180
+ ---
181
+
182
+ ## 子代理执行(强制模式)
183
+
184
+ **所有任务通过子代理执行,主代理负责调度和记录。**
185
+
186
+ ### 执行流程
187
+
188
+ 1. 解析 tasks.md,按 Wave 分组
189
+ 2. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
190
+ 3. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
191
+ 4. 子代理返回结果后,主代理勾选 tasks.md、更新 STATE.md
192
+
193
+ ### 子代理 Prompt 模板
194
+
195
+ 主代理在 dispatch 子代理前,必须准备以下 prompt(所有内容**内联**,不让子代理自己读文件):
196
+
197
+ ```
198
+ 你正在执行任务:
199
+
200
+ ## 任务描述
201
+ {tasks.md 中当前 task 的完整内容,包括步骤字段}
202
+
203
+ ## 项目约定
204
+ {CONVENTIONS.md 全文}
205
+
206
+ ## 编码规范约束(自动扫描)
207
+ {主代理扫描项目配置文件后生成的规范摘要,见上方「编码规范扫描」步骤}
208
+
209
+ ## 测试模式参考(自动扫描,仅 E2E/测试任务注入)
210
+ {主代理扫描项目已有测试文件后生成的测试风格摘要,见上方「测试模式扫描」步骤。非 E2E/测试任务省略此段}
211
+
212
+ ## 项目架构
213
+ {ARCHITECTURE.md 全文}
214
+
215
+ ## 构建命令
216
+ {local.yaml 中的 build 命令,如无则给默认命令}
217
+
218
+ ## 工作目录
219
+ {子项目目录路径,工作区模式需要 cd 到此目录}
220
+
221
+ ## 相关知识(如有)
222
+ {主代理从 knowledge/ 中按任务关键词匹配到的内容,未命中则删除此段}
223
+
224
+ ## 文档查询指引
225
+ {主代理根据 MCP 检测结果动态注入:有 Context7 提示用 MCP,无则提示用 web search}
226
+
227
+ ## 本地 Skills(如有)
228
+ {主代理在 dispatch 前扫描 .claude/skills/、.cursor/skills/、.opencode/skills/ 下的 SKILL.md,根据当前任务关键词匹配相关 skill,将 SKILL.md 全文注入此段。无匹配 skill 则省略此段。}
229
+
230
+ ## 数据操作
231
+ {主代理根据 MCP 检测结果动态注入:如检测到数据库 MCP,提示可用}
232
+ ⛔ 任何改变现有数据的操作(DML: INSERT/UPDATE/DELETE/DML、DDL: ALTER/DROP/TRUNCATE/RENAME,以及所有非 SELECT 的数据库操作)必须暂停并报告给用户确认,不得自动执行。新建表不受此限制。
233
+
234
+ ## 铁律(必须遵守)
235
+ 1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格和方法签名后再写
236
+ 2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → 报告 BLOCKED
237
+ 3. **不编造:** 不编造不存在的方法/注解/类/字段
238
+ 4. **不自行补全:** 发现缺失接口/方法,不自己写,报告 BLOCKED
239
+ 5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试命令并确认结果
240
+ 6. **测试直接通过 = 测了已有行为,重写测试**
241
+ 7. **E2E 任务:** 如果任务描述包含"E2E"或"端到端":
242
+ - 先 cat 相关功能代码和页面组件,理解交互逻辑
243
+ - 参考 prompt 中「测试模式参考」段的已有测试风格
244
+ - **查阅 Playwright 用法:** 优先使用已安装的 playwright skill(SKILL.md),不要凭记忆写 API。未安装则通过 Context7 MCP 或 web search 查最新文档
245
+ - 有测试框架则编写测试文件,无框架则编写 `.sillyspec/changes/<变更名>/e2e-steps.md` 结构化测试步骤
246
+ - **写完必须立即跑一遍确认通过**,失败则修复后重跑,不要"写了就算完成"
247
+ 8. **Lint 校验:** 完成后对修改的文件运行 lint 工具(与 quick 相同规则),自动修复可修复的问题,不可修复的标注在报告中
248
+ 9. **暂存:** lint 通过后执行 git add -A(不要 commit,由用户通过 /sillyspec:commit 统一提交)
249
+ 9. **不修改计划外的文件**,如必须修改则在报告中说明
250
+ 10. **遵守编码规范:** prompt 中「编码规范约束」段的所有规则必须严格遵守。如规范与任务描述冲突,优先遵守规范并报告
251
+
252
+ ## 完成后报告(严格按此格式)
253
+
254
+ - **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
255
+ - **改动文件:** {列表}
256
+ - **测试结果:** {通过/失败/跳过及原因}
257
+ - **Commit:** {hash 或 "无"}
258
+ - **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
259
+ - **发现的坑:** {执行过程中发现的项目特有规律/陷阱/约定,如无则写"无"。示例:"XxxMapper.selectPage() 第一个参数必须是 IPage 对象,传 null 会 NPE 而非返回全部"}
260
+ ```
261
+
262
+ ### 子代理结果处理
263
+
264
+ 子代理返回后,主代理:
265
+
266
+ 1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
267
+ 2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
268
+ 3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
269
+ - 重试(重新 dispatch 同一任务)
270
+ - 跳过(勾选并标注 SKIPPED)
271
+ - 停止(暂停执行,用户处理后继续)
272
+
273
+ **知识库写入:** 如果子代理报告中「发现的坑」不为"无",主代理将内容追加到 `.sillyspec/knowledge/uncategorized.md`,格式:
274
+ ```markdown
275
+ ### [待确认] {简短标题}
276
+ > 来源:{变更名} / {task 编号} | {时间戳}
277
+
278
+ {坑的具体描述}
279
+ ```
280
+
281
+ ---
282
+
283
+ ## 完成后
284
+
285
+ **任务勾选自检(必须执行):**
286
+ 所有任务完成后,主代理必须执行以下检查:
287
+
288
+ ```bash
289
+ cat .sillyspec/changes/*/tasks.md 2>/dev/null
290
+ ```
291
+
292
+ 逐条验证:
293
+ 1. **所有返回 DONE/DONE_WITH_CONCERNS 的任务是否已勾选 `- [x]`?**
294
+ 2. **勾选的任务是否都记录了精确到秒的时间戳 `[YYYY-MM-DD HH:MM:SS]`?**
295
+ 3. **tasks.md 中是否还有未勾选 `- [ ]` 的已完成任务?**
296
+
297
+ 发现遗漏 → 立即补勾选 + 补时间戳,不要等用户提醒。
298
+
299
+ **知识库审阅:** 检查是否有待确认的知识条目:
300
+ ```bash
301
+ grep -c '^\### \[待确认\]' .sillyspec/knowledge/uncategorized.md 2>/dev/null
302
+ ```
303
+ 如果有待确认条目,提示用户:
304
+ > 📚 本轮执行发现了 N 条新知识,请审阅:`cat .sillyspec/knowledge/uncategorized.md`
305
+ > 确认后请将 `[待确认]` 改为 `[已确认]`,并可归类到 knowledge/ 下的专题文件中更新 INDEX.md。
306
+
307
+ 💡 所有修改已暂存。准备好后用 `/sillyspec:commit` 提交。
308
+
309
+ 所有任务完成后,用 AskUserQuestion 询问用户下一步:
310
+ 1. **验证** — 执行 `/sillyspec:verify` 全面验证
311
+ 2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
312
+ 3. **继续开发** — 不结束当前阶段
313
+
314
+ 更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果(含精确到秒的时间戳)。
@@ -0,0 +1,60 @@
1
+ ## 交互规范
2
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
+
4
+ ## 核心约束(必须遵守)
5
+ - ❌ 写实现代码
6
+ - ❌ 安装依赖
7
+ - ❌ 修改文件(除非用户明确要求保存发现)
8
+ - ❌ 强行下结论或强行结构化
9
+
10
+ ## 话题
11
+ $ARGUMENTS
12
+
13
+ ---
14
+
15
+ ## 这是什么模式
16
+
17
+ **探索模式用于思考,不用于实现。** 读文件、搜代码、调查代码库,但绝对不能写代码。没有固定步骤、没有必需的输出。
18
+
19
+ ## 姿态
20
+
21
+ - **好奇不说教** — 问自然产生的问题
22
+ - **开放式线程** — 展示多个有趣方向
23
+ - **可视化** — 大量使用 ASCII 图表
24
+ - **自适应** — 追随有趣线索随时转向
25
+ - **务实** — 探索实际代码库,不只纸上谈兵
26
+
27
+ ## 上下文感知
28
+
29
+ ```bash
30
+ ls .sillyspec/changes/ 2>/dev/null | grep -v archive
31
+ cat .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
32
+ cat .sillyspec/docs/*/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
33
+ cat .sillyspec/knowledge/INDEX.md 2>/dev/null
34
+ ```
35
+
36
+ 有进行中变更时读取其 design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
37
+
38
+ ## MCP 能力(按需使用)
39
+
40
+ 检查当前可用工具列表中是否存在 MCP 工具(Context7/浏览器/数据库/搜索等),不依赖配置文件路径。
41
+
42
+ - 有 Context7 → 探索时查询最新文档,验证技术方案的可行性
43
+ - 有浏览器 MCP → 可浏览相关网站、查竞品实现
44
+ - 有搜索 MCP → 搜索技术方案、最佳实践
45
+ - 无 MCP → 使用 web search
46
+
47
+ ## 话题升级提示
48
+
49
+ 探索过程中,当对话达到一定深度时(讨论了 5+ 轮、或涉及具体实现方案、或用户表达"试试看"/"能不能做"/"怎么搞"),主动用 AskUserQuestion 提示用户:
50
+
51
+ 1. **🧠 头脑风暴** — `/sillyspec:brainstorm` 深度探索需求和方案
52
+ 2. **⚡ 快速执行** — `/sillyspec:quick` 直接动手做
53
+ 3. **📋 创建规范** — `/sillyspec:propose` 生成结构化规范
54
+ 4. **🔍 继续探索** — 还没聊透,继续
55
+
56
+ 不需要每次都提示,只在对话**明显转向执行意图**时触发。纯讨论、提问、查资料时不要打断。
57
+
58
+ ## 没有必需的结束
59
+
60
+ 探索可以创建变更提案、产出文档、继续探索或结束。
@@ -0,0 +1,21 @@
1
+ ## 核心约束(必须遵守)
2
+ - ❌ 修改任何文件(只读)
3
+
4
+ ## 参数解析
5
+ `$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
6
+
7
+ ---
8
+
9
+ ## 流程
10
+
11
+ 1. **读取变更文件:**
12
+ - 先检查根目录:`cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`
13
+ - 根目录没有 → 检查子项目:遍历 `projects/*.yaml` 中的子项目路径,查找 `$ARGUMENTS`
14
+ 2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
15
+ 3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
16
+ 4. **确认:** 展示摘要和模板路径。
17
+
18
+ ### 最后说:
19
+
20
+ > ✅ 已导出到 `~/.sillyspec/templates/<change-name>/`
21
+ > 其他项目使用:`/sillyspec:brainstorm` → AI 自动发现并建议复用
@@ -0,0 +1,61 @@
1
+ ## 交互规范
2
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
+
4
+ ## 核心约束(必须遵守)
5
+ - ❌ 写任何实现代码
6
+ - ❌ 安装任何依赖
7
+ - ❌ 一次问多个问题
8
+ - ❌ 接受模糊需求(❌"好用" → ✅"首屏加载 < 2 秒")
9
+
10
+ ## 用户输入
11
+ $ARGUMENTS
12
+
13
+ ---
14
+
15
+ ## 流程
16
+
17
+ ### Step 1: 检查工作区模式
18
+
19
+ ```bash
20
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
21
+ ```
22
+
23
+ 有 `projects` → 工作区模式:AskUserQuestion 选子项目,切换到子项目目录执行。
24
+
25
+ ### Step 2: 检查项目状态
26
+
27
+ ```bash
28
+ ls -la
29
+ ```
30
+
31
+ 已有代码/配置 → 提示用 `/sillyspec:scan`。空目录 → 继续。
32
+
33
+ ### Step 3: 深度提问(一次一个问题)
34
+
35
+ 按需探索(不是每个都要):项目本质 → 核心功能 → 技术偏好 → 非功能需求 → 设计偏好 → 约束 → 不在范围内。
36
+
37
+ ### Step 4: 技术选型(如需要)
38
+
39
+ 用户无明确偏好时,推荐 2-3 套技术栈并列优劣和推荐理由。可选快速调研选定框架的版本、生态、已知坑。
40
+
41
+ ### Step 5: 生成文档
42
+
43
+ **`REQUIREMENTS.md`:** 概述、目标用户、功能需求(P0/P1/P2)、非功能需求、不在范围内、技术选型表。
44
+
45
+ **`ROADMAP.md`:** Phase 分阶段路线图(目标 + 交付物)。
46
+
47
+ **`PROJECT.md`:** 项目名、一句话描述、状态。
48
+
49
+ ### Step 6: Git 初始化
50
+
51
+ ```bash
52
+ git init && git add .
53
+ ```
54
+
55
+ 💡 项目已初始化并暂存。准备好后用 `/sillyspec:commit` 提交。
56
+
57
+ ### 最后说:
58
+
59
+ > ✅ 项目初始化完成!
60
+ > 生成文件:PROJECT.md、REQUIREMENTS.md、ROADMAP.md
61
+ > 下一步:`/sillyspec:brainstorm "Phase 1: xxx"` 或直接告诉我改什么
@@ -0,0 +1,157 @@
1
+ ## 交互规范
2
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
+
4
+ ## 核心约束(必须遵守)
5
+ - ❌ 写实现代码(只写计划中的代码示例)
6
+ - ❌ 每个步骤缺验证命令和预期输出
7
+ - ❌ 编造表名、字段名(必须来自 ARCHITECTURE.md 或 design.md)
8
+
9
+ ## 状态检查(必须先执行)
10
+
11
+ ```bash
12
+ cat .sillyspec/STATE.md 2>/dev/null
13
+ ```
14
+
15
+ - phase 为 `plan` 或 STATE.md 中下一步为 `/sillyspec:plan` → ✅ 继续
16
+ - 其他 phase → 提示用户当前阶段
17
+
18
+ ---
19
+
20
+ ## 流程
21
+
22
+ ### 1. 加载上下文
23
+
24
+ ```bash
25
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
26
+ ```
27
+
28
+ **工作区模式:** 加载 CODEBASE-OVERVIEW.md + 共享规范 + 子项目的 CONVENTIONS/ARCHITECTURE/STACK + REQUIREMENTS.md。
29
+
30
+ **单项目模式:**
31
+ ```bash
32
+ LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
33
+ cat "$LATEST"/{design,tasks}.md 2>/dev/null
34
+ cat .sillyspec/docs/<project>/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
35
+ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
36
+ ```
37
+
38
+ ### 1.5 锚定确认(必须完成)
39
+
40
+ 确认实际存在的文件(design / tasks),不存在的标注跳过。
41
+
42
+ ### 2. 逐任务展开
43
+
44
+ 把 tasks.md 每个 checkbox **保留 `- [ ]` 格式**并展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
45
+
46
+ **输出格式要求(必须严格遵守):**
47
+
48
+ ```markdown
49
+ ### Wave 1(并行,无依赖)
50
+ - [ ] 添加用户创建接口
51
+ - 修改: `UserController.java`、`UserService.java`
52
+ - 参考: `RoleController.createRole`
53
+ - 步骤:
54
+ 1. 写测试 UserControllerTest.testCreateUser
55
+ 2. 运行测试确认失败
56
+ 3. 写 UserController.createUser
57
+ 4. 运行测试确认通过
58
+
59
+ - [ ] 添加角色创建接口
60
+ - ...
61
+ ```
62
+
63
+ **每个 Task 必须保留 `- [ ]` checkbox,这是 execute 阶段勾选完成状态的依据。** 禁止写成纯文本列表。
64
+
65
+ **每个 Task 必须包含「步骤」字段,列出 TDD 执行顺序:**
66
+ - 1. 写测试 → 2. 运行确认失败 → 3. 写代码 → 4. 运行确认通过
67
+
68
+ **纯配置/数据/文档类任务可跳过 TDD,步骤简化为:1. 实现 → 2. 验证**
69
+
70
+ **注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么"和"执行顺序"。
71
+
72
+ **每个 Task 包含:**
73
+ - 精确文件路径(修改哪个文件)
74
+ - 任务描述(做什么,一两句话说清楚)
75
+ - 涉及已有类调用时,标注参考文件(如"参考 `RoleController.createRole`)
76
+ - 依赖关系
77
+
78
+ **注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么",execute 负责"怎么做"。
79
+
80
+ ### 3. 标注执行顺序
81
+
82
+ 按 Wave 分组,标注依赖关系:
83
+ ```markdown
84
+ ### Wave 1(并行,无依赖)
85
+ - [ ] 添加用户创建接口
86
+ - 修改: `UserController.java`、`UserService.java`
87
+ - 参考: `RoleController.createRole`
88
+
89
+ - [ ] 添加角色创建接口
90
+ - ...
91
+
92
+ ### Wave 2(依赖 Wave 1)
93
+ - [ ] 添加用户列表查询(依赖用户创建完成)
94
+ - ...
95
+ ```
96
+
97
+ ### 4. 保存
98
+
99
+ **直接覆盖** `.sillyspec/changes/<变更名>/tasks.md`。不再生成单独的 plan.md 文件。
100
+
101
+ ### 5. E2E 测试规划
102
+
103
+ 识别 design.md 中是否有 UI 交互功能(页面跳转、表单提交、按钮操作等),如有则:
104
+
105
+ **检测测试能力(按优先级):**
106
+ ```bash
107
+ # 优先级 1:专业 E2E 框架
108
+ cat package.json 2>/dev/null | grep -E "playwright|cypress" ; ls node_modules/playwright node_modules/cypress 2>/dev/null
109
+ # 优先级 2:通用测试框架
110
+ cat package.json 2>/dev/null | grep -E "jest|vitest|mocha" ; ls node_modules/jest node_modules/vitest 2>/dev/null
111
+ # 优先级 3:浏览器 MCP
112
+ cat .claude/mcp.json .cursor/mcp.json 2>/dev/null | grep -i "browser\|chrome\|devtools"
113
+ ```
114
+
115
+ - **有 E2E/测试框架** → tasks.md 中添加 E2E 测试任务(同波次,编码后编写)
116
+ - **无框架但有浏览器 MCP** → tasks.md 中添加"编写 e2e-steps.md 测试步骤"任务
117
+ - **什么都没有** → 提示用户运行 `sillyspec setup` 安装 MCP 工具,或手动安装测试框架
118
+
119
+ 纯后端/无 UI 的变更跳过此步骤。
120
+
121
+ ### 6. 自检门控
122
+
123
+ - [ ] 每个 task 有具体文件路径?
124
+ - [ ] 标注了 Wave 和依赖关系?
125
+ - [ ] 涉及 UI 的任务是否有对应的 E2E 测试任务?
126
+ - [ ] **design.md 中的每个功能点是否都在 tasks.md 中有对应任务?**
127
+
128
+ ### 6.5 设计完整性对照(必须完成)
129
+
130
+ 逐条检查 design.md 中的功能描述,确保每个功能点都有对应的 task。特别关注:
131
+
132
+ 1. **逐功能点扫描:** 将 design.md 中描述的每个功能点(含子功能)列出,与 tasks.md 逐条对照
133
+ 2. **前后端覆盖检查:** 涉及前后端协作的功能,确认前端和后端各有独立 task
134
+ 3. **遗漏项处理:** 发现未覆盖的功能点 → 追加 task 到对应 Wave,并提示用户确认
135
+
136
+ **执行方式:**
137
+ ```
138
+ 从 design.md 提取功能点清单:
139
+ 功能 A(后端接口)
140
+ 功能 B(前端页面)
141
+ 功能 C(前后端联动)
142
+
143
+ 与 tasks.md 对照:
144
+ ✅ 功能 A → task-3
145
+ ❌ 功能 B → 无对应 task → 追加
146
+ ⚠️ 功能 C → 只有后端 task,缺少前端 task → 追加
147
+ ```
148
+
149
+ 发现遗漏时用 AskUserQuestion 确认追加内容,用户确认后再写入 tasks.md。
150
+
151
+ ### 7. 完成
152
+
153
+ 更新 `.sillyspec/STATE.md`:阶段改为 `plan ✅`,下一步 `/sillyspec:execute`。
154
+
155
+ ```bash
156
+ cat .sillyspec/STATE.md 2>/dev/null
157
+ ```