sillyspec 3.9.0 → 3.10.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.
Files changed (206) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +17 -0
  2. package/.claude/skills/sillyspec-auto/SKILL.md +78 -0
  3. package/.claude/skills/sillyspec-brainstorm/SKILL.md +17 -0
  4. package/{templates/commit.md → .claude/skills/sillyspec-commit/SKILL.md} +32 -47
  5. package/.claude/skills/sillyspec-continue/SKILL.md +45 -0
  6. package/.claude/skills/sillyspec-doctor/SKILL.md +27 -0
  7. package/.claude/skills/sillyspec-execute/SKILL.md +17 -0
  8. package/.claude/skills/sillyspec-explore/SKILL.md +105 -0
  9. package/.claude/skills/sillyspec-export/SKILL.md +53 -0
  10. package/.claude/skills/sillyspec-init/SKILL.md +170 -0
  11. package/.claude/skills/sillyspec-plan/SKILL.md +17 -0
  12. package/.claude/skills/sillyspec-propose/SKILL.md +17 -0
  13. package/.claude/skills/sillyspec-quick/SKILL.md +17 -0
  14. package/.claude/skills/sillyspec-resume/SKILL.md +111 -0
  15. package/.claude/skills/sillyspec-scan/SKILL.md +17 -0
  16. package/.claude/skills/sillyspec-state/SKILL.md +54 -0
  17. package/.claude/skills/sillyspec-status/SKILL.md +17 -0
  18. package/.claude/skills/sillyspec-verify/SKILL.md +17 -0
  19. package/.claude/skills/sillyspec-workspace/SKILL.md +149 -0
  20. package/README.md +19 -11
  21. package/SKILL.md +15 -10
  22. package/package.json +7 -9
  23. package/packages/dashboard/dist/assets/index-BcM2J-hv.css +1 -0
  24. package/packages/dashboard/dist/assets/index-DpLHK4jv.js +7446 -0
  25. package/packages/dashboard/dist/index.html +16 -16
  26. package/packages/dashboard/dist/prototype-dashboard.html +836 -0
  27. package/packages/dashboard/dist/prototype-overview.html +256 -0
  28. package/packages/dashboard/package-lock.json +226 -6
  29. package/packages/dashboard/package.json +8 -5
  30. package/packages/dashboard/public/logo.jpg +0 -0
  31. package/packages/dashboard/public/prototype-dashboard.html +836 -0
  32. package/packages/dashboard/public/prototype-overview.html +256 -0
  33. package/packages/dashboard/server/executor.js +1 -1
  34. package/packages/dashboard/server/index.js +341 -113
  35. package/packages/dashboard/server/parser.js +442 -30
  36. package/packages/dashboard/server/watcher.js +214 -134
  37. package/packages/dashboard/src/App.vue +475 -71
  38. package/packages/dashboard/src/components/ActionBar.vue +36 -43
  39. package/packages/dashboard/src/components/CommandPalette.vue +45 -66
  40. package/packages/dashboard/src/components/DetailPanel.vue +68 -53
  41. package/packages/dashboard/src/components/DocPreview.vue +257 -0
  42. package/packages/dashboard/src/components/DocTree.vue +114 -0
  43. package/packages/dashboard/src/components/HResizeHandle.vue +48 -0
  44. package/packages/dashboard/src/components/LogStream.vue +13 -33
  45. package/packages/dashboard/src/components/PipelineStage.vue +8 -8
  46. package/packages/dashboard/src/components/PipelineView.vue +99 -45
  47. package/packages/dashboard/src/components/ProjectCard.vue +187 -0
  48. package/packages/dashboard/src/components/ProjectList.vue +103 -45
  49. package/packages/dashboard/src/components/ProjectOverview.vue +152 -0
  50. package/packages/dashboard/src/components/StageBadge.vue +13 -13
  51. package/packages/dashboard/src/components/StepCard.vue +15 -15
  52. package/packages/dashboard/src/components/VResizeHandle.vue +61 -0
  53. package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -0
  54. package/packages/dashboard/src/components/detail/GitDetail.vue +61 -0
  55. package/packages/dashboard/src/components/detail/TechDetail.vue +43 -0
  56. package/packages/dashboard/src/composables/useDashboard.js +48 -6
  57. package/packages/dashboard/src/composables/useKeyboard.js +6 -4
  58. package/packages/dashboard/src/composables/useLayout.js +131 -0
  59. package/packages/dashboard/src/main.js +4 -1
  60. package/packages/dashboard/src/style.css +17 -17
  61. package/src/index.js +141 -22
  62. package/src/init.js +93 -231
  63. package/src/migrate.js +117 -0
  64. package/src/progress.js +460 -0
  65. package/src/run.js +635 -0
  66. package/src/setup.js +2 -72
  67. package/src/stages/archive.js +54 -0
  68. package/src/stages/brainstorm.js +264 -0
  69. package/src/stages/doctor.js +303 -0
  70. package/src/stages/execute.js +287 -0
  71. package/src/stages/explore.js +34 -0
  72. package/src/stages/index.js +28 -0
  73. package/src/stages/plan.js +354 -0
  74. package/src/stages/propose.js +115 -0
  75. package/src/stages/quick.js +64 -0
  76. package/src/stages/scan.js +141 -0
  77. package/src/stages/status.js +65 -0
  78. package/src/stages/verify.js +135 -0
  79. package/.sillyspec/changes/dashboard/design.md +0 -219
  80. package/.sillyspec/plans/2026-04-05-dashboard.md +0 -737
  81. package/.sillyspec/specs/2026-04-05-dashboard-design.md +0 -206
  82. package/dist/steps/brainstorm/01-load-context.md +0 -30
  83. package/dist/steps/brainstorm/02-reuse-check.md +0 -6
  84. package/dist/steps/brainstorm/03-prototype-analysis.md +0 -11
  85. package/dist/steps/brainstorm/04-module-split.md +0 -23
  86. package/dist/steps/brainstorm/05-dialog-explore.md +0 -8
  87. package/dist/steps/brainstorm/06-propose-approaches.md +0 -3
  88. package/dist/steps/brainstorm/07-present-design.md +0 -3
  89. package/dist/steps/brainstorm/08-write-design.md +0 -21
  90. package/dist/steps/brainstorm/09-self-review.md +0 -15
  91. package/dist/steps/brainstorm/10-user-confirm.md +0 -3
  92. package/dist/steps/brainstorm/11-output-spec.md +0 -7
  93. package/dist/steps/brainstorm/manifest.yaml +0 -26
  94. package/dist/steps/execute/01-load-context.md +0 -41
  95. package/dist/steps/execute/02-scan-conventions.md +0 -47
  96. package/dist/steps/execute/03-skill-mcp.md +0 -19
  97. package/dist/steps/execute/04-assign-task.md +0 -22
  98. package/dist/steps/execute/04b-prompt-template.md +0 -54
  99. package/dist/steps/execute/05-write-test.md +0 -7
  100. package/dist/steps/execute/06-write-code.md +0 -8
  101. package/dist/steps/execute/07-run-test.md +0 -26
  102. package/dist/steps/execute/08-fix-issues.md +0 -28
  103. package/dist/steps/execute/09-next-task.md +0 -33
  104. package/dist/steps/execute/manifest.yaml +0 -28
  105. package/dist/steps/plan/01-load-context.md +0 -22
  106. package/dist/steps/plan/02-anchor-confirm.md +0 -1
  107. package/dist/steps/plan/03-expand-tasks.md +0 -33
  108. package/dist/steps/plan/04-mark-order.md +0 -15
  109. package/dist/steps/plan/05-e2e-planning.md +0 -17
  110. package/dist/steps/plan/06-self-check.md +0 -16
  111. package/dist/steps/plan/07-save.md +0 -1
  112. package/dist/steps/plan/manifest.yaml +0 -18
  113. package/dist/steps/scan/01-env-detect.md +0 -51
  114. package/dist/steps/scan/02-tech-stack.md +0 -16
  115. package/dist/steps/scan/03-conventions.md +0 -16
  116. package/dist/steps/scan/04-structure.md +0 -19
  117. package/dist/steps/scan/05-quality.md +0 -18
  118. package/dist/steps/scan/06-complete.md +0 -49
  119. package/dist/steps/scan/manifest.yaml +0 -16
  120. package/dist/steps/verify/01-load-specs.md +0 -28
  121. package/dist/steps/verify/02-check-tasks.md +0 -1
  122. package/dist/steps/verify/03-check-design.md +0 -6
  123. package/dist/steps/verify/04-run-tests.md +0 -7
  124. package/dist/steps/verify/05-e2e-tests.md +0 -27
  125. package/dist/steps/verify/05b-e2e-fix.md +0 -33
  126. package/dist/steps/verify/06-code-quality.md +0 -25
  127. package/dist/steps/verify/07-lint-check.md +0 -27
  128. package/dist/steps/verify/08-output-report.md +0 -14
  129. package/dist/steps/verify/manifest.yaml +0 -22
  130. package/docs/.vitepress/config.mts +0 -45
  131. package/docs/.vitepress/dist/404.html +0 -25
  132. package/docs/.vitepress/dist/assets/app.YytxICdd.js +0 -1
  133. package/docs/.vitepress/dist/assets/chunks/framework.Czhw_PXq.js +0 -19
  134. package/docs/.vitepress/dist/assets/chunks/theme.DusTRZQk.js +0 -1
  135. package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.js +0 -1
  136. package/docs/.vitepress/dist/assets/index.md.C3VCvtQA.lean.js +0 -1
  137. package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  138. package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  139. package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  140. package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  141. package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  142. package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  143. package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  144. package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  145. package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  146. package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  147. package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  148. package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  149. package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  150. package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  151. package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.js +0 -15
  152. package/docs/.vitepress/dist/assets/sillyspec_commands.md.CXFFsj08.lean.js +0 -1
  153. package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.js +0 -4
  154. package/docs/.vitepress/dist/assets/sillyspec_dashboard.md.BuPXHqjX.lean.js +0 -1
  155. package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.js +0 -1
  156. package/docs/.vitepress/dist/assets/sillyspec_file-io.md.Cz3x7llx.lean.js +0 -1
  157. package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.js +0 -4
  158. package/docs/.vitepress/dist/assets/sillyspec_getting-started.md.ClcvV8k3.lean.js +0 -1
  159. package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.js +0 -5
  160. package/docs/.vitepress/dist/assets/sillyspec_install.md.CKuR2tiT.lean.js +0 -1
  161. package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.js +0 -28
  162. package/docs/.vitepress/dist/assets/sillyspec_lifecycle.md.DY293cR1.lean.js +0 -1
  163. package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.js +0 -30
  164. package/docs/.vitepress/dist/assets/sillyspec_structure.md.sVYS4zPs.lean.js +0 -1
  165. package/docs/.vitepress/dist/assets/style.DFTx90Kk.css +0 -1
  166. package/docs/.vitepress/dist/hashmap.json +0 -1
  167. package/docs/.vitepress/dist/index.html +0 -28
  168. package/docs/.vitepress/dist/sillyspec/commands.html +0 -42
  169. package/docs/.vitepress/dist/sillyspec/dashboard.html +0 -31
  170. package/docs/.vitepress/dist/sillyspec/file-io.html +0 -28
  171. package/docs/.vitepress/dist/sillyspec/getting-started.html +0 -31
  172. package/docs/.vitepress/dist/sillyspec/install.html +0 -32
  173. package/docs/.vitepress/dist/sillyspec/lifecycle.html +0 -55
  174. package/docs/.vitepress/dist/sillyspec/structure.html +0 -57
  175. package/docs/.vitepress/dist/vp-icons.css +0 -1
  176. package/docs/index.md +0 -34
  177. package/docs/sillyspec/commands.md +0 -218
  178. package/docs/sillyspec/dashboard.md +0 -51
  179. package/docs/sillyspec/file-io.md +0 -34
  180. package/docs/sillyspec/getting-started.md +0 -61
  181. package/docs/sillyspec/install.md +0 -51
  182. package/docs/sillyspec/lifecycle.md +0 -146
  183. package/docs/sillyspec/structure.md +0 -62
  184. package/packages/dashboard/dist/assets/index-Bh-GPjKY.css +0 -1
  185. package/packages/dashboard/dist/assets/index-CrCn5Gg6.js +0 -17
  186. package/src/step.js +0 -543
  187. package/templates/archive.md +0 -120
  188. package/templates/brainstorm.md +0 -170
  189. package/templates/continue.md +0 -32
  190. package/templates/execute.md +0 -304
  191. package/templates/explore.md +0 -59
  192. package/templates/export.md +0 -21
  193. package/templates/init.md +0 -61
  194. package/templates/plan.md +0 -146
  195. package/templates/quick.md +0 -135
  196. package/templates/scan-quick.md +0 -49
  197. package/templates/scan.md +0 -156
  198. package/templates/skills/playwright-e2e/SKILL.md +0 -340
  199. package/templates/status.md +0 -75
  200. package/templates/verify.md +0 -236
  201. package/templates/workspace-sync.md +0 -99
  202. package/templates/workspace.md +0 -70
  203. /package/{docs/.vitepress/dist/logo.jpg → logo.jpg} +0 -0
  204. /package/{docs/.vitepress → packages/dashboard}/dist/favicon.jpg +0 -0
  205. /package/{docs/public → packages/dashboard/dist}/logo.jpg +0 -0
  206. /package/{docs → packages/dashboard}/public/favicon.jpg +0 -0
@@ -1,206 +0,0 @@
1
- # SillySpec Dashboard 设计
2
-
3
- ## 概述
4
-
5
- 为 SillySpec CLI 工具添加可视化仪表盘(`sillyspec dashboard`),用户通过浏览器直观查看和管理项目进度、阶段流程、任务详情和实时日志。
6
-
7
- ## 目标用户
8
-
9
- SillySpec 全部用户(官方功能,随 npm 包发布)。
10
-
11
- ## 分期计划
12
-
13
- ### 一期(MVP)
14
-
15
- 可视化仪表盘 + CLI 命令执行 + 实时日志流。
16
-
17
- ### 二期(进阶)
18
-
19
- Web Terminal(xterm.js)+ 自定义命令 + AI 交互(视需求而定)。
20
-
21
- ## 架构
22
-
23
- ```
24
- sillyspec dashboard
25
-
26
-
27
- Node.js HTTP Server (localhost:3456)
28
-
29
- ├─ chokidar: watch .sillyspec/ 目录
30
- ├─ WebSocket: 实时推送状态变更
31
- └─ REST API: 项目列表、状态、日志、CLI 执行
32
-
33
-
34
- Vue 3 SPA (浏览器)
35
- ```
36
-
37
- ### 文件结构
38
-
39
- ```
40
- sillyspec/packages/dashboard/
41
- ├── server/
42
- │ ├── index.js # HTTP + WebSocket 服务启动
43
- │ ├── watcher.js # chokidar 文件监听 + 增量解析
44
- │ └── api.js # REST 路由
45
- ├── src/
46
- │ ├── App.vue
47
- │ ├── components/
48
- │ │ ├── ProjectList.vue # 左栏:项目列表
49
- │ │ ├── PipelineView.vue # 中栏:阶段 pipeline
50
- │ │ ├── StepCard.vue # 步骤卡片(可展开折叠)
51
- │ │ ├── DetailPanel.vue # 右栏:详情 + 日志
52
- │ │ ├── LogStream.vue # 终端风格日志流
53
- │ │ ├── CommandPalette.vue # Cmd+K 命令面板
54
- │ │ └── StageBadge.vue # 阶段状态标签
55
- │ ├── composables/
56
- │ │ ├── useWebSocket.js # WebSocket 连接管理
57
- │ │ └── useKeyboard.js # 键盘快捷键
58
- │ └── styles/
59
- │ └── theme.css # 深色主题变量
60
- ├── package.json
61
- └── vite.config.js
62
- ```
63
-
64
- ## 核心页面设计
65
-
66
- ### 三栏布局
67
-
68
- ```
69
- ┌──────────┬─────────────────────────┬──────────────────┐
70
- │ 项目列表 │ Pipeline 视图(中) │ 详情+日志(右) │
71
- │ (200px) │ (flex-1) │ (320px,可收起) │
72
- │ │ │ │
73
- │ 📁 proj1 │ ✅ brainstorm │ Step 3 详情 │
74
- │ 📁 proj2 │ ⏳ plan ← 当前 │ 结论:选择React │
75
- │ 📁 proj3 │ ⬜ execute │ 决策:... │
76
- │ │ ⬜ verify │ 📋 实时日志 │
77
- └──────────┴─────────────────────────┴──────────────────┘
78
- ```
79
-
80
- ### 信息分层(三级密度)
81
-
82
- 1. **低密度(默认)**:阶段名 + 状态图标
83
- 2. **中密度(hover)**:步骤摘要(1-2 句话)
84
- 3. **高密度(点击)**:右侧面板展开完整详情 + 日志
85
-
86
- ### 异常高亮
87
-
88
- 失败/阻塞/超时步骤自动标红,视觉上突出,不需用户手动查找。
89
-
90
- ## 数据源与同步
91
-
92
- ### 数据文件
93
-
94
- | 文件 | 用途 |
95
- |---|---|
96
- | `STATE.md` | 当前阶段、状态、下一步命令 |
97
- | `.runtime/progress.json` | 步骤进度、摘要、时间戳 |
98
- | `.runtime/user-inputs.md` | 用户输入记录 |
99
- | `specs/*.md` | 设计文档 |
100
- | `changes/*/design.md` | 技术方案 |
101
-
102
- ### 同步方案
103
-
104
- - **启动时**:全量读取 `.sillyspec/` 目录,构建初始状态
105
- - **运行时**:chokidar watch 文件变化 → 解析 → WebSocket 增量推送
106
- - **不轮询,不做 diff**,文件变化直接读取推送
107
-
108
- ### CLI 命令执行(一期)
109
-
110
- 后端通过 `child_process.spawn` 执行 CLI 命令:
111
- - "下一步"按钮 → `sillyspec next`
112
- - 阶段切换按钮 → `sillyspec plan` / `sillyspec execute` 等
113
- - 执行结果通过 WebSocket 实时推送到前端日志面板
114
-
115
- ## 交互设计
116
-
117
- ### 键盘快捷键
118
-
119
- | 快捷键 | 功能 |
120
- |---|---|
121
- | `j/k` | 上下切换步骤 |
122
- | `Enter` | 展开详情 |
123
- | `Escape` | 收起面板 |
124
- | `/` | 搜索日志 |
125
- | `Cmd/Ctrl+K` | 命令面板 |
126
-
127
- ### 命令面板功能
128
-
129
- - 搜索项目名
130
- - 跳转到指定阶段
131
- - 切换深色/浅色主题
132
-
133
- ### CLI 命令
134
-
135
- ```bash
136
- sillyspec dashboard # 启动 + 自动开浏览器
137
- sillyspec dashboard --port 8080 # 自定义端口
138
- sillyspec dashboard --no-open # 不自动打开浏览器
139
- ```
140
-
141
- ## 视觉设计
142
-
143
- ### 配色
144
-
145
- | 用途 | 色值 |
146
- |---|---|
147
- | 背景 | `#0D1117` |
148
- | 主色(进行中) | `#00D4AA` |
149
- | 阻塞 | `#F59E0B` |
150
- | 失败 | `#F87171` |
151
- | 未开始 | `#6B7280` |
152
-
153
- ### 动效
154
-
155
- - 阶段完成:脉冲光效(CSS animation,200ms)
156
- - 日志新行:淡入
157
- - hover 过渡:100ms
158
- - 进度条:弹性缓动
159
-
160
- ## 技术选型
161
-
162
- | 层 | 技术 |
163
- |---|---|
164
- | 前端框架 | Vue 3 |
165
- | 构建工具 | Vite |
166
- | CSS | Tailwind CSS |
167
- | 后端 | Node.js 原生 http + ws |
168
- | 文件监听 | chokidar |
169
- | 数据库 | 无,纯文件系统 |
170
-
171
- ## 约束和假设
172
-
173
- - 用户本地已有 Node.js(SillySpec 前置依赖)
174
- - 仪表盘为本地工具,不考虑多用户并发
175
- - 前端构建产物嵌入 npm 包,无需额外 build
176
- - 不引入 Express、数据库等重依赖
177
-
178
- ## 状态历史时间线
179
-
180
- Pipeline 视图下方展示时间线,记录每个步骤的:
181
- - 开始时间 / 结束时间 / 耗时
182
- - 状态变化(进行中 → 完成/阻塞/失败)
183
- - 可按时间排序,快速定位耗时最长或异常步骤
184
-
185
- 数据来源:`progress.json` 中的 `summaries` 和时间戳。
186
-
187
- ## 不在范围内(一期)
188
-
189
- - 用户认证/权限
190
- - 多人协作
191
- - 数据持久化(纯文件系统)
192
- - AI 对话交互(二期)
193
- - Web Terminal(二期)
194
-
195
- ## 验收标准
196
-
197
- - [ ] `sillyspec dashboard` 一键启动,自动打开浏览器
198
- - [ ] 三栏布局正确渲染,响应式适配
199
- - [ ] 文件变化后前端实时更新(<1s 延迟)
200
- - [ ] 步骤卡片三级信息分层(默认/hover/点击)
201
- - [ ] 实时日志流正常显示,可搜索可过滤
202
- - [ ] 键盘快捷键可用(j/k/Enter/Escape/Cmd+K)
203
- - [ ] 命令面板可搜索项目名和阶段
204
- - [ ] CLI 命令执行按钮可用,结果实时显示
205
- - [ ] 异常步骤自动高亮
206
- - [ ] 深色/浅色主题切换
@@ -1,30 +0,0 @@
1
- **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
2
-
3
- ## 核心约束(必须遵守)
4
- - ❌ 写实现代码(任何语言)
5
- - ❌ 修改任何源代码文件
6
- - ❌ 安装依赖或执行构建命令
7
- - ❌ 创建数据库迁移脚本
8
- - ❌ 跳过 brainstorm 直接进入 execute/plan
9
- - ❌ 在 checklist 未完成前开始写设计文档
10
- - ❌ 编造不存在的表名、字段名、API 端点
11
- - ❌ 一次性抛出多个问题(必须逐个等待回答)
12
- - ❌ 用户确认前自行推进到 plan 或任何后续阶段
13
-
14
- **终态:** brainstorm 完成后唯一出口是 plan 阶段。不允许直接进入 execute 或任何代码操作。
15
-
16
- ## 加载项目上下文
17
-
18
- ```bash
19
- ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
20
- ```
21
-
22
- **工作区模式:** AskUserQuestion 选子项目,**cd 到子项目目录执行**,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/docs/<project>/changes/`。修改在子项目目录中暂存。
23
-
24
- **单项目模式:**
25
- ```bash
26
- cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
- cat .sillyspec/docs/<project>/scan/{STRUCTURE,CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
28
- ls .sillyspec/changes/ 2>/dev/null | grep -v archive
29
- ls .sillyspec/knowledge/ 2>/dev/null
30
- ```
@@ -1,6 +0,0 @@
1
- 检查已有变更和可复用模板,避免冲突和重复劳动。
2
-
3
- - **同名变更:** `ls .sillyspec/changes/ | grep -v archive` — 有相关变更则提示避免冲突
4
- - **全局模板:** `ls ~/.sillyspec/templates/ 2>/dev/null` — 有匹配模板则建议复用
5
-
6
- 无匹配则跳过,不输出。
@@ -1,11 +0,0 @@
1
- **如有图片则必做。无图片则跳过此步骤。**
2
-
3
- **不要只看描述文字,图片包含布局、字段、交互等视觉信息。**
4
-
5
- 对每张图逐页分析(先主页面后子页面):
6
- 1. **页面结构** — 识别搜索区、操作栏、表格、表单等区块
7
- 2. **表单字段** — 字段名、类型、必填、选项
8
- 3. **交互流程** — 页面跳转、按钮行为、流程线
9
- 4. **标注备注** — 业务规则、状态说明、权限说明
10
-
11
- 展示分析结果,问用户确认有无遗漏。
@@ -1,23 +0,0 @@
1
- 评估需求范围,复杂需求拆分子项目/阶段。
2
-
3
- **满足以下任意 2 条就建议拆分:**
4
- - 3+ 个可独立交付的功能模块
5
- - 3+ 种角色有不同权限和视图
6
- - 跨页面状态流转(审批流、多步表单)
7
- - brainstorm 提问发现需求范围过大
8
-
9
- 确认拆分后生成 MASTER.md:
10
-
11
- ```bash
12
- mkdir -p .sillyspec/changes/<变更名>/stages
13
- ```
14
-
15
- `MASTER.md` 内容:概述、拆分计划表(阶段/范围/状态)、整体技术方向、阶段间依赖、原型分析摘要、经验记录。
16
-
17
- ```bash
18
- git add .sillyspec/changes/<变更名>/MASTER.md
19
- ```
20
-
21
- 提示用户:对子阶段执行 brainstorm,读取 MASTER.md + 前序阶段经验 + 对应原型,设计文档保存到 `.sillyspec/changes/<变更名>/stages/<stage-N>/`。
22
-
23
- 不需要拆分则跳过此步骤。
@@ -1,8 +0,0 @@
1
- **核心规则:一次只问一个问题。**
2
-
3
- 1. 从最核心的问题开始(用户到底想做什么?)
4
- 2. 等待回答,根据信息量决定追问还是进入方案讨论
5
- 3. 探索顺序按需:目的 → 约束 → 边界 → 成功标准
6
- 4. **大多数 brainstorm 2-3 轮就应进入方案讨论**
7
-
8
- 探索阶段可使用项目已配置的 MCP 工具或 web search 调研技术方案和 API 用法,不要凭记忆写方案。检测可用工具:`cat .claude/mcp.json .cursor/mcp.json 2>/dev/null`
@@ -1,3 +0,0 @@
1
- 提出 2-3 种方案。
2
-
3
- 每种方案列优劣,给出推荐和理由。
@@ -1,3 +0,0 @@
1
- 分段展示设计,逐段确认。
2
-
3
- 简单项目几句话;复杂项目每段 200-300 字逐段确认。
@@ -1,21 +0,0 @@
1
- 写设计文档并保存到 `.sillyspec/changes/<变更名>/design.md`:
2
-
3
- ```markdown
4
- # [Feature Name] 设计
5
-
6
- ## 动机与范围
7
- (为什么做、范围边界、成功标准)
8
-
9
- ## 功能需求
10
- (需求场景、验收标准)
11
- - [ ] 标准 1
12
-
13
- ## 技术方案
14
- ## 约束和假设
15
- ## 不在范围内
16
- ## 文件变更
17
- ## 代码风格参照
18
- (参考已有源文件,标注返回值类型、异常类型、注解风格)
19
- ```
20
-
21
- **注意:** 引用的表名必须来自 `.sillyspec/docs/<project>/scan/ARCHITECTURE.md` 数据模型或明确标注"新增"。必须先读取该文件。
@@ -1,15 +0,0 @@
1
- AI 自审(必须执行)。
2
-
3
- 对照 `.sillyspec/changes/<变更名>/design.md` 检查:
4
-
5
- - 需求覆盖:是否完整覆盖对话式探索确认的需求点?
6
- - 约束一致性:技术方案是否与 `.sillyspec/docs/<project>/scan/ARCHITECTURE.md`、`.sillyspec/docs/<project>/scan/CONVENTIONS.md` 一致?
7
- - 表名/字段真实性:是否来自真实 schema?
8
- - 范围控制:是否包含不必要功能(YAGNI)?
9
- - 验收标准:是否具体、可测试?
10
- - 变更冲突:是否与复用检查阶段检测到的已有变更冲突?
11
- - 缺口:模糊表述("适当的"/"必要时"等)是否已明确化
12
- - 缺口:隐含假设(登录态、数据量、并发预期)是否已显式写出
13
- - 缺口:边界场景(空数据、并发、服务不可用)是否已考虑
14
-
15
- 发现问题 → 修改文档,重新自审。不确定的标注「⚠️ 自审存疑」让用户判断。
@@ -1,3 +0,0 @@
1
- ⛔ 门禁步骤。
2
-
3
- 展示设计方案,使用 AskUserQuestion 让用户三选一:确认 / 需要修改 / 推翻重来。
@@ -1,7 +0,0 @@
1
- 用户确认后,确认 `.sillyspec/changes/<变更名>/design.md` 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如上一步已保存则无需重复。
2
-
3
- ## 关键原则
4
- - YAGNI — 无情砍掉不需要的功能
5
- - 总是探索替代方案
6
- - 设计可以很短,但必须存在
7
- - "简单"的项目更需要设计——未检视的假设造成最大浪费
@@ -1,26 +0,0 @@
1
- phase: brainstorm
2
- description: 需求探索与方案设计
3
- requires: [scan]
4
- steps:
5
- - file: 01-load-context.md
6
- name: 加载项目上下文
7
- - file: 02-reuse-check.md
8
- name: 协作与复用检查
9
- - file: 03-prototype-analysis.md
10
- name: 原型/设计图分析
11
- - file: 04-module-split.md
12
- name: 大模块拆分
13
- - file: 05-dialog-explore.md
14
- name: 对话式探索
15
- - file: 06-propose-approaches.md
16
- name: 提出方案
17
- - file: 07-present-design.md
18
- name: 分段展示设计
19
- - file: 08-write-design.md
20
- name: 写设计文档
21
- - file: 09-self-review.md
22
- name: AI 自审
23
- - file: 10-user-confirm.md
24
- name: 用户确认
25
- - file: 11-output-spec.md
26
- name: 输出技术方案
@@ -1,41 +0,0 @@
1
- **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
2
-
3
- ## 核心约束(必须遵守)
4
- - ❌ 跳步执行(不允许跳过 plan 直接 execute)
5
- - ❌ 先写代码后补测试
6
- - ❌ 编造不存在的方法/注解/路径/类/字段
7
- - ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
8
- - ❌ 意外修改了计划外的文件却不报告
9
-
10
- **所有任务通过子代理执行,主代理负责调度和记录。**
11
-
12
- ## 加载上下文
13
-
14
- ```bash
15
- ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
16
- ```
17
-
18
- **工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + `.sillyspec/workspace/CODEBASE-OVERVIEW.md`。所有代码修改、测试运行在子项目目录中执行。
19
-
20
- ```bash
21
- PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
22
- LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
23
- cat "$LATEST"/{tasks,design}.md 2>/dev/null
24
- cat .sillyspec/docs/<project>/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
25
- cat .sillyspec/local.yaml 2>/dev/null
26
- ```
27
-
28
- **知识库查询(强制步骤):**
29
- ```bash
30
- cat .sillyspec/knowledge/INDEX.md 2>/dev/null
31
- ```
32
- 根据当前 task 描述中的关键词匹配 INDEX.md 条目。命中时读取对应 knowledge 文件,注入子代理 prompt。未命中则跳过。
33
-
34
- ## 确认频率
35
-
36
- 用 AskUserQuestion 询问用户选择:
37
- - **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
38
- - **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
39
- - **全自动** — 全部自动执行,不在中途打断用户
40
-
41
- 如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
@@ -1,47 +0,0 @@
1
- 主代理在 dispatch 子代理前执行以下扫描。
2
-
3
- ## 编码规范扫描
4
-
5
- ```bash
6
- for f in .eslintrc .eslintrc.js .eslintrc.cjs .eslintrc.json .eslintrc.yml \
7
- .prettierrc .prettierrc.js .prettierrc.json .prettierrc.yml \
8
- tsconfig.json tsconfig.base.json \
9
- .editorconfig \
10
- .tailwind.config.js .tailwind.config.ts \
11
- .stylelintrc .stylelintrc.js .stylelintrc.json \
12
- CONTRIBUTING.md CODE_STYLE.md; do
13
- [ -f "$f" ] && echo "=== $f ===" && cat "$f"
14
- done
15
- cat package.json 2>/dev/null | grep -A5 '"lint\|"format\|"typecheck\|"type-check'
16
- ```
17
-
18
- 扫描后生成**编码规范摘要**(提炼关键约束,非原文粘贴),格式:
19
-
20
- ```
21
- ## 编码规范约束(自动扫描)
22
- ### ESLint
23
- {关键规则}
24
- ### Prettier
25
- {格式化规则}
26
- ### TypeScript
27
- {严格模式设置}
28
- ### Import / 命名约定
29
- {导入排序、命名风格}
30
- ### 框架约定
31
- {框架特定约定}
32
- ```
33
-
34
- 注入到子代理 prompt,追加铁律:**遵守编码规范:如规范与任务描述冲突,优先遵守规范并报告。**
35
-
36
- ## 测试模式扫描(E2E/测试任务时执行)
37
-
38
- ```bash
39
- cat package.json 2>/dev/null | grep -E "playwright|cypress|jest|vitest|mocha"
40
- find . -name "*.spec.ts" -o -name "*.test.ts" -o -name "*.spec.tsx" -o -name "*.spec.js" \
41
- -o -name "playwright.config.*" -o -name "vitest.config.*" -o -name "jest.config.*" \
42
- 2>/dev/null | grep -v node_modules | head -10
43
- ```
44
-
45
- 读取 1-2 个已有测试文件作为风格参考,生成测试模式摘要(框架、断言风格、Fixtures、文件组织、配置要点),注入到 E2E/测试子代理 prompt。
46
-
47
- 追加铁律:**参照已有测试风格编写新测试,不要凭记忆写测试。**
@@ -1,19 +0,0 @@
1
- ## Skill 扫描
2
-
3
- ```bash
4
- for skill_dir in .claude/skills/*/SKILL.md .cursor/skills/*/SKILL.md .opencode/skills/*/SKILL.md; do
5
- [ -f "$skill_dir" ] && echo "=== $skill_dir ===" && cat "$skill_dir"
6
- done
7
- ```
8
-
9
- 根据任务关键词匹配 skill,匹配到的 SKILL.md 全文注入子代理 prompt。
10
-
11
- ## MCP 能力检测
12
-
13
- 检查当前可用工具列表中是否存在以下 MCP 工具:
14
- - Context7 / 文档查询工具
15
- - 数据库工具(postgres/sqlite/mysql/redis)
16
- - 浏览器工具(browser/chrome/playwright/devtools)
17
-
18
- 有 Context7 → 提示子代理用 MCP 查文档;无 → 提示用 web search。
19
- 有数据库 MCP → 在子代理 prompt 注入数据操作可用。
@@ -1,22 +0,0 @@
1
- ## 执行流程
2
-
3
- 1. 解析 tasks.md,按 Wave 分组
4
- 2. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
5
- 3. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
6
- 4. 子代理返回结果后,主代理勾选 tasks.md、更新 STATE.md
7
-
8
- ## 子代理 Prompt 模板
9
-
10
- 主代理 dispatch 子代理前,必须准备以下 prompt(所有内容**内联**,不让子代理自己读文件)。prompt 格式见 `04b-prompt-template.md`。
11
-
12
- 需要注入的变量:
13
- - `{任务描述}` — tasks.md 中当前 task 的完整内容(包括步骤字段)
14
- - `{CONVENTIONS.md 全文}` — 来自 `.sillyspec/docs/<project>/scan/CONVENTIONS.md`
15
- - `{编码规范约束}` — 02-scan-conventions 步骤生成的规范摘要
16
- - `{测试模式参考}` — 仅 E2E/测试任务注入,02-scan-conventions 步骤生成
17
- - `{ARCHITECTURE.md 全文}` — 来自 `.sillyspec/docs/<project>/scan/ARCHITECTURE.md`
18
- - `{构建命令}` — `.sillyspec/local.yaml` 中的 build 命令
19
- - `{工作目录}` — 子项目目录路径
20
- - `{相关知识}` — knowledge/ 中匹配到的内容,未命中则删除此段
21
- - `{文档查询指引}` — MCP 检测结果动态注入
22
- - `{本地 Skills}` — 匹配到的 SKILL.md 全文,无匹配则省略
@@ -1,54 +0,0 @@
1
- 子代理 Prompt 模板(供 04-assign-task.md 引用,dispatch 时所有变量需内联):
2
-
3
- ```
4
- 你正在执行任务:
5
-
6
- ## 任务描述
7
- {任务描述}
8
-
9
- ## 项目约定
10
- {CONVENTIONS.md 全文}
11
-
12
- ## 编码规范约束(自动扫描)
13
- {编码规范约束}
14
-
15
- ## 测试模式参考(仅 E2E/测试任务注入)
16
- {测试模式参考}
17
-
18
- ## 项目架构
19
- {ARCHITECTURE.md 全文}
20
-
21
- ## 构建命令 / 工作目录
22
- {构建命令}
23
- {工作目录}
24
-
25
- ## 相关知识 / 文档查询指引 / 本地 Skills
26
- {相关知识}
27
- {文档查询指引}
28
- {本地 Skills}
29
-
30
- ## 数据操作
31
- ⛔ 任何 DML/DDL 操作必须暂停并报告给用户确认。新建表不受此限制。
32
-
33
- ## 铁律
34
- 1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格后再写
35
- 2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → BLOCKED
36
- 3. **不编造:** 不编造不存在的方法/注解/类/字段
37
- 4. **不自行补全:** 缺失接口/方法 → BLOCKED
38
- 5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试并确认结果
39
- 6. **测试直接通过 = 测了已有行为,重写测试**
40
- 7. **E2E 任务:** 先 cat 相关代码,参考测试模式,查阅用法文档,写完立即跑确认通过
41
- 8. **Lint 校验:** 完成后运行 lint,自动修复可修复的问题
42
- 9. **暂存:** lint 通过后 git add -A(不要 commit)
43
- 10. **遵守编码规范:** 规范与任务描述冲突时,优先遵守规范并报告
44
- 11. **参照已有测试风格,不要凭记忆写测试**
45
- 12. **先 grep 项目中类似功能的已有代码,照着现有模式写**
46
-
47
- ## 完成后报告(严格格式)
48
- - **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
49
- - **改动文件:** {列表}
50
- - **测试结果:** {通过/失败/跳过及原因}
51
- - **Commit:** {hash 或 "无"}
52
- - **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
53
- - **发现的坑:** {项目特有规律/陷阱/约定,无则写"无"}
54
- ```
@@ -1,7 +0,0 @@
1
- 子代理执行任务的第一步:写测试。
2
-
3
- 按 tasks.md 中当前 task 的「步骤」字段第 1 步执行:写测试。
4
-
5
- - 运行测试确认失败(TDD 红)
6
- - 如果测试直接通过 → 重新写测试(测了已有行为)
7
- - 纯配置/数据/文档类任务跳过此步骤
@@ -1,8 +0,0 @@
1
- 子代理执行任务的核心步骤:写代码。
2
-
3
- 按 tasks.md 中当前 task 的「步骤」字段第 3 步执行:写代码实现。
4
-
5
- - 必须先 cat 要修改的文件和参考文件
6
- - grep 确认调用的方法存在
7
- - 遵守编码规范约束
8
- - 纯配置/数据/文档类任务直接执行实现步骤
@@ -1,26 +0,0 @@
1
- 子代理执行任务的验证步骤:运行测试。
2
-
3
- 按 tasks.md 中当前 task 的「步骤」字段第 4 步执行:运行测试确认通过。
4
-
5
- - 运行全部测试,确认通过
6
- - 运行 lint,自动修复可修复的问题
7
- - lint 通过后 git add -A
8
-
9
- ## 子代理结果处理
10
-
11
- 子代理返回后,主代理:
12
-
13
- 1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
14
- 2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
15
- 3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
16
- - 重试(重新 dispatch 同一任务)
17
- - 跳过(勾选并标注 SKIPPED)
18
- - 停止(暂停执行,用户处理后继续)
19
-
20
- **知识库写入:** 如果子代理报告中「发现的坑」不为"无",追加到 `.sillyspec/knowledge/uncategorized.md`:
21
- ```markdown
22
- ### [待确认] {简短标题}
23
- > 来源:{变更名} / {task 编号} | {时间戳}
24
-
25
- {坑的具体描述}
26
- ```
@@ -1,28 +0,0 @@
1
- 如果测试失败或子代理返回 BLOCKED,主代理处理修复。
2
-
3
- **测试失败修复循环:**
4
-
5
- ```
6
- ROUND = 1
7
- MAX_ROUNDS = 5
8
-
9
- while ROUND <= MAX_ROUNDS:
10
- 1. 运行失败测试,捕获完整输出
11
- 2. 全部通过 → 跳出循环,标记 ✅
12
- 3. 对每个失败测试:
13
- a. 读取 .sillyspec/local.yaml 中当前变更的 fixAttempts
14
- b. fixAttempts >= MAX_ROUNDS → 跳过,标记 ❌ MAX_REACHED
15
- c. 否则 → 重新 dispatch 子代理修复,prompt 包含:
16
- - 失败的测试文件路径和测试名
17
- - 完整错误信息(含期望值 vs 实际值)
18
- - 相关源文件路径
19
- - "只修复这个测试失败,不要改其他代码"
20
- d. 修复后重跑确认
21
- e. 通过 → fixAttempts 不变;仍失败 → fixAttempts + 1
22
- 4. 写入 .sillyspec/local.yaml
23
- 5. ROUND++
24
- 6. 本轮无任何修复 → 跳出循环
25
- ```
26
-
27
- **BLOCKED 处理:**
28
- - AskUserQuestion 三选一:重试 / 跳过 / 停止