sillyspec 3.7.8 → 3.7.9
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/.sillyspec/changes/dashboard/design.md +219 -0
- package/.sillyspec/plans/2026-04-05-dashboard.md +737 -0
- package/.sillyspec/specs/2026-04-05-dashboard-design.md +206 -0
- package/bin/sillyspec.js +0 -0
- package/package.json +1 -1
- package/packages/dashboard/dist/assets/index-Bh-GPjKY.css +1 -0
- package/packages/dashboard/dist/assets/index-CrCn5Gg6.js +17 -0
- package/packages/dashboard/dist/index.html +16 -0
- package/packages/dashboard/index.html +15 -0
- package/packages/dashboard/package-lock.json +2164 -0
- package/packages/dashboard/package.json +22 -0
- package/packages/dashboard/server/executor.js +86 -0
- package/packages/dashboard/server/index.js +359 -0
- package/packages/dashboard/server/parser.js +154 -0
- package/packages/dashboard/server/watcher.js +277 -0
- package/packages/dashboard/src/App.vue +154 -0
- package/packages/dashboard/src/components/ActionBar.vue +100 -0
- package/packages/dashboard/src/components/CommandPalette.vue +117 -0
- package/packages/dashboard/src/components/DetailPanel.vue +122 -0
- package/packages/dashboard/src/components/LogStream.vue +85 -0
- package/packages/dashboard/src/components/PipelineStage.vue +75 -0
- package/packages/dashboard/src/components/PipelineView.vue +94 -0
- package/packages/dashboard/src/components/ProjectList.vue +152 -0
- package/packages/dashboard/src/components/StageBadge.vue +53 -0
- package/packages/dashboard/src/components/StepCard.vue +89 -0
- package/packages/dashboard/src/composables/useDashboard.js +171 -0
- package/packages/dashboard/src/composables/useKeyboard.js +117 -0
- package/packages/dashboard/src/composables/useWebSocket.js +129 -0
- package/packages/dashboard/src/main.js +5 -0
- package/packages/dashboard/src/style.css +132 -0
- package/packages/dashboard/vite.config.js +18 -0
- package/src/index.js +68 -8
- package/src/init.js +23 -1
- package/src/progress.js +422 -0
- package/templates/archive.md +56 -0
- package/templates/brainstorm.md +82 -26
- package/templates/commit.md +2 -0
- package/templates/execute.md +2 -1
- package/templates/progress-format.md +90 -0
- package/templates/quick.md +36 -3
- package/templates/resume-dialog.md +55 -0
package/templates/brainstorm.md
CHANGED
|
@@ -21,6 +21,23 @@ cat .sillyspec/STATE.md 2>/dev/null
|
|
|
21
21
|
- phase 为 `brainstorm` 或无 STATE.md → ✅ 继续
|
|
22
22
|
- 其他 phase → 提示用户当前阶段,建议先完成
|
|
23
23
|
|
|
24
|
+
## 进度恢复检查(必须先执行)
|
|
25
|
+
|
|
26
|
+
1. 读取 `.sillyspec/.runtime/progress.json`(使用 read 工具)
|
|
27
|
+
2. 如果文件存在且 `currentStage` 为 `brainstorm`:
|
|
28
|
+
a. 按 resume-dialog.md 模板向用户展示恢复信息(见下方)
|
|
29
|
+
b. 用户确认后,将 `resumeCount` +1,更新 `lastActiveAt`,写入 progress.json
|
|
30
|
+
c. 将已完成步骤的结论作为「已确认的决策,无需重新讨论」注入上下文
|
|
31
|
+
d. 从 `inProgressStep.id` 继续,**禁止回头重新讨论已完成步骤**
|
|
32
|
+
3. 如果文件不存在或 `currentStage` 不是 `brainstorm`:正常启动
|
|
33
|
+
|
|
34
|
+
### 恢复对话规则
|
|
35
|
+
- 首次恢复(resumeCount < 3):友好欢迎,展示进度条和关键结论
|
|
36
|
+
- 频繁中断(resumeCount >= 3):建议重新开始,但尊重用户选择
|
|
37
|
+
- 长时间中断(距 lastActiveAt > 24h):先回顾上次聊了什么,再问是否继续
|
|
38
|
+
- 恢复时说「欢迎回来」而非「检测到中断」
|
|
39
|
+
- 参考模板:`.sillyspec/.runtime/templates/resume-dialog.md`
|
|
40
|
+
|
|
24
41
|
## 用户想法
|
|
25
42
|
$ARGUMENTS
|
|
26
43
|
|
|
@@ -28,18 +45,19 @@ $ARGUMENTS
|
|
|
28
45
|
|
|
29
46
|
## Checklist(必须按顺序完成,不允许跳步或并行)
|
|
30
47
|
|
|
31
|
-
- [ ] **Step 1** — 加载项目上下文
|
|
32
|
-
- [ ] **Step
|
|
33
|
-
- [ ] **Step
|
|
34
|
-
- [ ] **Step
|
|
35
|
-
- [ ] **Step
|
|
36
|
-
- [ ] **Step
|
|
37
|
-
- [ ] **Step
|
|
38
|
-
- [ ] **Step
|
|
39
|
-
- [ ] **Step
|
|
40
|
-
- [ ] **Step
|
|
41
|
-
- [ ] **Step
|
|
42
|
-
- [ ] **Step
|
|
48
|
+
- [ ] **Step 1** — 加载项目上下文 → 保存进度
|
|
49
|
+
- [ ] **Step 2** — 协作与复用检查(同名变更 + 全局模板)→ 保存进度
|
|
50
|
+
- [ ] **Step 3** — 原型/设计图分析(如有)→ 保存进度
|
|
51
|
+
- [ ] **Step 4** — 评估需求范围,复杂需求拆分子项目/阶段,生成 MASTER.md → 保存进度
|
|
52
|
+
- [ ] **Step 5** — 对话式探索(一次一个问题,2-3 轮内完成)→ 保存进度
|
|
53
|
+
- [ ] **Step 6** — 提出 2-3 个方案并推荐 → 保存进度
|
|
54
|
+
- [ ] **Step 7** — 分段展示设计,逐段确认 → 保存进度
|
|
55
|
+
- [ ] **Step 8** — 写设计文档并保存 → 保存进度
|
|
56
|
+
- [ ] **Step 9** — AI 自审(对照约束检查)→ 保存进度
|
|
57
|
+
- [ ] **Step 10** — 用户确认设计方案 → 保存进度
|
|
58
|
+
- [ ] **Step 11** — 输出 design.md → 保存进度
|
|
59
|
+
- [ ] **Step 12** — 更新 STATE.md → 保存进度
|
|
60
|
+
- [ ] **Step 13** — 保存最终进度
|
|
43
61
|
|
|
44
62
|
**终态:** brainstorm 完成后唯一出口是 `/sillyspec:plan`。不允许直接进入 execute 或任何代码操作。
|
|
45
63
|
|
|
@@ -63,14 +81,14 @@ ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
|
63
81
|
ls .sillyspec/knowledge/ 2>/dev/null
|
|
64
82
|
```
|
|
65
83
|
|
|
66
|
-
### Step
|
|
84
|
+
### Step 2: 协作与复用检查
|
|
67
85
|
|
|
68
86
|
- **同名变更:** `ls .sillyspec/changes/ | grep -v archive` — 有相关变更则提示避免冲突
|
|
69
87
|
- **全局模板:** `ls ~/.sillyspec/templates/ 2>/dev/null` — 有匹配模板则建议复用
|
|
70
88
|
|
|
71
89
|
无匹配则跳过,不输出。
|
|
72
90
|
|
|
73
|
-
### Step
|
|
91
|
+
### Step 3: 原型/设计图分析(如有图片则必做)
|
|
74
92
|
|
|
75
93
|
**不要只看描述文字,图片包含布局、字段、交互等视觉信息。**
|
|
76
94
|
|
|
@@ -82,7 +100,7 @@ ls .sillyspec/knowledge/ 2>/dev/null
|
|
|
82
100
|
|
|
83
101
|
展示分析结果,问用户确认有无遗漏。
|
|
84
102
|
|
|
85
|
-
### Step
|
|
103
|
+
### Step 4: 大模块拆分
|
|
86
104
|
|
|
87
105
|
**满足以下任意 2 条就建议拆分:**
|
|
88
106
|
- 3+ 个可独立交付的功能模块
|
|
@@ -108,7 +126,7 @@ git add .sillyspec/changes/<变更名>/MASTER.md
|
|
|
108
126
|
|
|
109
127
|
**子阶段 brainstorm:** 读取 MASTER.md + 前序阶段经验 + 对应原型,设计文档保存到 `.sillyspec/changes/<变更名>/stages/<stage-N>/`。
|
|
110
128
|
|
|
111
|
-
### Step
|
|
129
|
+
### Step 5: 对话式探索
|
|
112
130
|
|
|
113
131
|
**核心规则:一次只问一个问题。**
|
|
114
132
|
|
|
@@ -119,15 +137,15 @@ git add .sillyspec/changes/<变更名>/MASTER.md
|
|
|
119
137
|
|
|
120
138
|
探索阶段可使用项目已配置的 MCP 工具或 web search 调研技术方案和 API 用法,不要凭记忆写方案。检测可用工具:`cat .claude/mcp.json .cursor/mcp.json 2>/dev/null`
|
|
121
139
|
|
|
122
|
-
### Step
|
|
140
|
+
### Step 6: 提出 2-3 种方案
|
|
123
141
|
|
|
124
142
|
每种方案列优劣,给出推荐和理由。
|
|
125
143
|
|
|
126
|
-
### Step
|
|
144
|
+
### Step 7: 分段展示设计
|
|
127
145
|
|
|
128
146
|
简单项目几句话;复杂项目每段 200-300 字逐段确认。
|
|
129
147
|
|
|
130
|
-
### Step
|
|
148
|
+
### Step 8: 写设计文档
|
|
131
149
|
|
|
132
150
|
保存到 `.sillyspec/changes/<变更名>/design.md`:
|
|
133
151
|
|
|
@@ -151,34 +169,72 @@ git add .sillyspec/changes/<变更名>/MASTER.md
|
|
|
151
169
|
|
|
152
170
|
**注意:** 引用的表名必须来自 ARCHITECTURE.md 数据模型或明确标注"新增"。必须先读取 `.sillyspec/codebase/ARCHITECTURE.md`。
|
|
153
171
|
|
|
154
|
-
### Step
|
|
172
|
+
### Step 9: AI 自审(必须执行)
|
|
155
173
|
|
|
156
|
-
- 需求覆盖:是否完整覆盖 Step
|
|
174
|
+
- 需求覆盖:是否完整覆盖 Step 5 确认的需求点?
|
|
157
175
|
- 约束一致性:技术方案是否与 ARCHITECTURE.md、CONVENTIONS.md 一致?
|
|
158
176
|
- 表名/字段真实性:是否来自真实 schema?
|
|
159
177
|
- 范围控制:是否包含不必要功能(YAGNI)?
|
|
160
178
|
- 验收标准:是否具体、可测试?
|
|
161
|
-
- 变更冲突:是否与 Step
|
|
179
|
+
- 变更冲突:是否与 Step 2 检测到的已有变更冲突?
|
|
162
180
|
- 缺口:模糊表述("适当的"/"必要时"等)是否已明确化
|
|
163
181
|
- 缺口:隐含假设(登录态、数据量、并发预期)是否已显式写出
|
|
164
182
|
- 缺口:边界场景(空数据、并发、服务不可用)是否已考虑
|
|
165
183
|
|
|
166
184
|
发现问题 → 修改文档,重新自审。不确定的标注「⚠️ 自审存疑」让用户判断。
|
|
167
185
|
|
|
168
|
-
### Step
|
|
186
|
+
### Step 10: 用户确认(⛔ 门禁)
|
|
169
187
|
|
|
170
188
|
展示设计方案,AskUserQuestion:确认 / 需要修改 / 推翻重来。
|
|
171
189
|
|
|
172
|
-
### Step
|
|
190
|
+
### Step 11: 输出技术方案
|
|
173
191
|
|
|
174
|
-
用户确认后,确认 design.md 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如 Step
|
|
192
|
+
用户确认后,确认 design.md 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如 Step 8 已保存则无需重复。
|
|
175
193
|
|
|
176
|
-
### Step
|
|
194
|
+
### Step 12: 更新 STATE.md
|
|
177
195
|
|
|
178
196
|
自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步 `/sillyspec:plan`、关键决策、历史记录。不需要 Git 提交。
|
|
179
197
|
|
|
198
|
+
### Step 13: 保存最终进度
|
|
199
|
+
|
|
200
|
+
1. 更新 `.sillyspec/.runtime/progress.json`:
|
|
201
|
+
- `stages.brainstorm.status` 设为 `completed`
|
|
202
|
+
- 写入 `stageSummary`(2-3 句总结核心设计决策)
|
|
203
|
+
- `currentStage` 更新为 `plan`
|
|
204
|
+
- `checkpoint` 设为「brainstorm 完成,等待 plan」
|
|
205
|
+
2. Append `user-inputs.md` 最终记录
|
|
206
|
+
3. 告知用户:「brainstorm 完成 ✅ 进度已保存,下一步 /sillyspec:plan」
|
|
207
|
+
|
|
180
208
|
## 关键原则
|
|
181
209
|
- YAGNI — 无情砍掉不需要的功能
|
|
182
210
|
- 总是探索替代方案
|
|
183
211
|
- 设计可以很短,但必须存在
|
|
184
212
|
- "简单"的项目更需要设计——未检视的假设造成最大浪费
|
|
213
|
+
|
|
214
|
+
## 进度保存规则(⚠️ HARD-GATE)
|
|
215
|
+
|
|
216
|
+
**每步完成后必须执行,不允许跳过:**
|
|
217
|
+
|
|
218
|
+
1. 使用 write 工具更新 `.sillyspec/.runtime/progress.json`
|
|
219
|
+
2. 将当前步骤 ID 加入 `completedSteps`
|
|
220
|
+
3. 在 `summaries` 中写入本步结构化摘要:
|
|
221
|
+
- `conclusion`(1-2句核心结论,必填)
|
|
222
|
+
- `decisions`(用户确认的决策列表)
|
|
223
|
+
- `rejectedAlternatives`(被否方案 + 简要理由)
|
|
224
|
+
- `userMessages`(用户影响决策的原话)
|
|
225
|
+
- `openQuestions`(遗留问题)
|
|
226
|
+
- `keyEntities`(涉及的关键实体/概念)
|
|
227
|
+
4. 更新 `checkpoint`(一句话描述)
|
|
228
|
+
5. 刷新 `lastActiveAt`(ISO 格式)
|
|
229
|
+
6. `_version` +1
|
|
230
|
+
7. Append `.sillyspec/.runtime/user-inputs.md`(格式见 progress-format.md)
|
|
231
|
+
8. 对用户说:「✅ 第X步完成,进度已保存。」
|
|
232
|
+
|
|
233
|
+
**下步启动检查:** 进入下一步前,先确认 progress.json 的 currentStep 已更新。如果发现未保存,立即补保存。
|
|
234
|
+
|
|
235
|
+
## 多任务并行提醒
|
|
236
|
+
|
|
237
|
+
如果用户在 brainstorm 过程中临时要求执行 quick 任务:
|
|
238
|
+
- quick 任务不写入 progress.json,不影响当前 brainstorm 状态
|
|
239
|
+
- quick 完成后,brainstorm 从断点继续
|
|
240
|
+
- 告知用户:「quick 任务会独立执行,brainstorm 进度不受影响」
|
package/templates/commit.md
CHANGED
|
@@ -43,6 +43,8 @@ git diff --cached --stat
|
|
|
43
43
|
```bash
|
|
44
44
|
USER=$(git config user.name 2>/dev/null || echo "default")
|
|
45
45
|
cat .sillyspec/quicklog/QUICKLOG-${USER}.md 2>/dev/null
|
|
46
|
+
# 同时扫描活跃变更目录下的归属 quicklog
|
|
47
|
+
for dir in .sillyspec/changes/*/quicklog/*.md; do [ -f "$dir" ] && cat "$dir"; done 2>/dev/null
|
|
46
48
|
```
|
|
47
49
|
|
|
48
50
|
**来源 B — tasks.md(execute 产生的修改):**
|
package/templates/execute.md
CHANGED
|
@@ -244,7 +244,8 @@ done
|
|
|
244
244
|
- **查阅 Playwright 用法:** 优先使用已安装的 playwright skill(SKILL.md),不要凭记忆写 API。未安装则通过 Context7 MCP 或 web search 查最新文档
|
|
245
245
|
- 有测试框架则编写测试文件,无框架则编写 `.sillyspec/changes/<变更名>/e2e-steps.md` 结构化测试步骤
|
|
246
246
|
- **写完必须立即跑一遍确认通过**,失败则修复后重跑,不要"写了就算完成"
|
|
247
|
-
8.
|
|
247
|
+
8. **Lint 校验:** 完成后对修改的文件运行 lint 工具(与 quick 相同规则),自动修复可修复的问题,不可修复的标注在报告中
|
|
248
|
+
9. **暂存:** lint 通过后执行 git add -A(不要 commit,由用户通过 /sillyspec:commit 统一提交)
|
|
248
249
|
9. **不修改计划外的文件**,如必须修改则在报告中说明
|
|
249
250
|
10. **遵守编码规范:** prompt 中「编码规范约束」段的所有规则必须严格遵守。如规范与任务描述冲突,优先遵守规范并报告
|
|
250
251
|
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Progress Format — AI 写入规范
|
|
2
|
+
|
|
3
|
+
> 本文件供 AI 在各阶段执行时参考,规范 progress.json 和 user-inputs.md 的写入方式。
|
|
4
|
+
|
|
5
|
+
## 文件位置
|
|
6
|
+
|
|
7
|
+
- **进度文件:** `.sillyspec/.runtime/progress.json`
|
|
8
|
+
- **用户输入记录:** `.sillyspec/.runtime/user-inputs.md`
|
|
9
|
+
|
|
10
|
+
## progress.json 字段说明
|
|
11
|
+
|
|
12
|
+
| 字段 | 类型 | 说明 |
|
|
13
|
+
|------|------|------|
|
|
14
|
+
| `_version` | number | 内部版本号,固定为 `1` |
|
|
15
|
+
| `schemaVersion` | string | Schema 版本,固定为 `"1.0.0"` |
|
|
16
|
+
| `currentStage` | string | 当前阶段:`brainstorm` / `propose` / `plan` / `execute` / `verify` |
|
|
17
|
+
| `lastActiveAt` | string | ISO 8601 时间戳,每次更新时刷新 |
|
|
18
|
+
| `resumeCount` | number | 恢复次数,每次恢复时 +1 |
|
|
19
|
+
| `checkpoint` | string | 一句话描述当前进度(给恢复时快速定位) |
|
|
20
|
+
| `stages.<stage>.status` | string | 阶段状态:`not_started` / `in_progress` / `completed` |
|
|
21
|
+
| `stages.<stage>.completedSteps` | number[] | 已完成步骤 ID 列表 |
|
|
22
|
+
| `stages.<stage>.inProgressStep` | object/null | 当前进行中的步骤:`{ id, name, startedAt, partialContext }` |
|
|
23
|
+
| `stages.<stage>.summaries` | object | 步骤结论,key 为步骤 ID,value 见下方 |
|
|
24
|
+
| `stages.<stage>.artifacts` | array | 产出文件列表:`[{ stepId, name, paths }]` |
|
|
25
|
+
| `stages.<stage>.stageSummary` | string/null | 阶段总结 |
|
|
26
|
+
|
|
27
|
+
### summaries 结构
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"1": {
|
|
32
|
+
"conclusion": "一句话结论",
|
|
33
|
+
"keyEntities": ["实体1", "实体2"],
|
|
34
|
+
"decisions": ["决定A"],
|
|
35
|
+
"rejectedAlternatives": ["被否的方案B"],
|
|
36
|
+
"userMessages": ["用户原话摘要"],
|
|
37
|
+
"openQuestions": ["未解决的问题"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## user-inputs.md 格式
|
|
43
|
+
|
|
44
|
+
每步完成时 **append**(不覆盖)用户在本步说的所有原话:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
# 用户输入记录
|
|
48
|
+
|
|
49
|
+
## Step 1 - 需求理解 (2026-04-05 00:30)
|
|
50
|
+
- 我们主要做研发项目管理,不搞CRM
|
|
51
|
+
- 目标用户是中大型团队,50人以上
|
|
52
|
+
|
|
53
|
+
## Step 3 - 竞品分析 (2026-04-05 00:45)
|
|
54
|
+
- Jira太重了,我们想做轻的
|
|
55
|
+
- 排期最烦了,能不能AI帮搞
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 时间戳格式
|
|
59
|
+
|
|
60
|
+
`YYYY-MM-DD HH:MM`
|
|
61
|
+
|
|
62
|
+
### 获取当前时间
|
|
63
|
+
|
|
64
|
+
- JavaScript:`new Date().toLocaleString('sv-SE', { timeZone: 'Asia/Shanghai', hour12: false }).slice(0, 16)` → `"2026-04-05 13:37"`
|
|
65
|
+
- 或 shell 命令:`date '+%Y-%m-%d %H:%M'`
|
|
66
|
+
|
|
67
|
+
## 每步完成后的保存流程
|
|
68
|
+
|
|
69
|
+
1. **更新 progress.json**:
|
|
70
|
+
- 将步骤 ID 加入 `completedSteps`
|
|
71
|
+
- 清空 `inProgressStep`(或设为下一步)
|
|
72
|
+
- 在 `summaries` 中写入本步结论
|
|
73
|
+
- 刷新 `lastActiveAt`
|
|
74
|
+
- 更新 `checkpoint`(一句话描述)
|
|
75
|
+
|
|
76
|
+
2. **Append user-inputs.md**:
|
|
77
|
+
- 追加 `## Step N - 步骤名 (YYYY-MM-DD HH:MM)` 段落
|
|
78
|
+
- 列出用户在本步的所有原话
|
|
79
|
+
- **不要删除之前的内容,只追加**
|
|
80
|
+
|
|
81
|
+
3. **如果阶段完成**:
|
|
82
|
+
- 设置 `stages.<stage>.status = "completed"`
|
|
83
|
+
- 写入 `stageSummary`
|
|
84
|
+
- 更新 `currentStage` 为下一阶段
|
|
85
|
+
|
|
86
|
+
## 多任务并行说明
|
|
87
|
+
|
|
88
|
+
- `quick` 命令**不修改** progress.json,独立执行
|
|
89
|
+
- quick 完成后主流程状态不变,直接继续
|
|
90
|
+
- `resume` 恢复时忽略 quick 的内容
|
package/templates/quick.md
CHANGED
|
@@ -19,6 +19,14 @@ $ARGUMENTS
|
|
|
19
19
|
## 流程
|
|
20
20
|
|
|
21
21
|
1. **解析参数:** 检查是否携带 `--change <变更名>`,确定记录方式
|
|
22
|
+
1.5 **归属检查:** 如果没有 `--change` 参数,检查 `.sillyspec/changes/` 下是否有非 archive 的活跃变更目录:
|
|
23
|
+
```bash
|
|
24
|
+
ls -d .sillyspec/changes/*/ 2>/dev/null | grep -v archive
|
|
25
|
+
```
|
|
26
|
+
- 有活跃变更 → AskUserQuestion 询问本次 quick 归属哪个变更,默认选当前活跃的
|
|
27
|
+
- 用户选择后将日志写入 `.sillyspec/changes/<变更名>/quicklog/` 而非独立 QUICKLOG
|
|
28
|
+
- 用户选择"无归属" → 走原有的独立 QUICKLOG 流程
|
|
29
|
+
- 无活跃变更 → 走原有的独立 QUICKLOG 流程
|
|
22
30
|
2. **理解任务:** 模糊则问一个问题确认
|
|
23
31
|
3. **加载上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
|
|
24
32
|
3b. **编码规范扫描:** 检测项目中的编码规范配置文件(`.eslintrc*`、`.prettierrc*`、`tsconfig.json`、`.editorconfig`、`tailwind.config.*`、`CONTRIBUTING.md`),提取关键规则生成摘要。写作代码时必须严格遵守这些规则(分号/引号/缩进/命名风格等),如不确定优先遵守规范约束。
|
|
@@ -54,14 +62,39 @@ cat .sillyspec/local.yaml 2>/dev/null
|
|
|
54
62
|
```bash
|
|
55
63
|
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || pnpm test 2>/dev/null || npm test 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
56
64
|
```
|
|
57
|
-
8. **
|
|
58
|
-
|
|
65
|
+
8. **Lint 校验(如项目配置了):** 写完代码后、暂存前,运行项目的 lint 工具验证代码质量:
|
|
66
|
+
```bash
|
|
67
|
+
# 检测并运行可用的 lint 工具
|
|
68
|
+
npx eslint <修改的文件> 2>/dev/null || \
|
|
69
|
+
npx prettier --check <修改的文件> 2>/dev/null || \
|
|
70
|
+
npx tsc --noEmit 2>/dev/null || \
|
|
71
|
+
true # 没有 lint 工具则跳过
|
|
72
|
+
```
|
|
73
|
+
- **有报错 → 自动修复:** `npx eslint --fix <修改的文件>` / `npx prettier --write <修改的文件>`
|
|
74
|
+
- **修复后仍有报错 → 在 QUICKLOG 中标注,提醒用户手动处理**
|
|
75
|
+
- **工作区模式下,在子项目目录中执行,不要在主项目目录执行**
|
|
76
|
+
9. **Git 暂存:** `git add -A`。**不要 commit**,由用户通过 `/sillyspec:commit` 统一提交。**工作区模式下,确认当前在正确的子项目目录中执行暂存。**
|
|
77
|
+
10. **记录:**
|
|
59
78
|
- **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选,**记录精确到秒的时间戳**:
|
|
60
79
|
|
|
61
80
|
```
|
|
62
81
|
- [x] [YYYY-MM-DD HH:MM:SS] 任务描述
|
|
63
82
|
```
|
|
64
|
-
- **无 `--change
|
|
83
|
+
- **无 `--change` 但步骤 1.5 确认了归属变更:** 记录到 `.sillyspec/changes/<变更名>/quicklog/YYYY-MM-DD-HHMMSS-任务简述.md`,格式:
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
# quick: 任务描述
|
|
87
|
+
|
|
88
|
+
- 时间:YYYY-MM-DD HH:MM:SS
|
|
89
|
+
- 关联变更:<变更名>
|
|
90
|
+
- 修改文件:
|
|
91
|
+
- `path/to/file1`
|
|
92
|
+
- `path/to/file2`
|
|
93
|
+
- 改动说明:(2-3 句描述做了什么)
|
|
94
|
+
- 发现的坑:(如有,简要记录)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
- **无 `--change` 且无归属:** 记录到 `.sillyspec/quicklog/QUICKLOG-<git用户名>.md`(见下方规则)
|
|
65
98
|
10. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
|
|
66
99
|
|
|
67
100
|
11. **记录发现的坑:** 执行过程中如果发现项目特有的规律、陷阱或约定(如"某方法参数顺序容易搞反"、"某表有隐藏软删除字段"),追加到 `.sillyspec/knowledge/uncategorized.md`,格式:
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Resume Dialog Template
|
|
2
|
+
|
|
3
|
+
> 此模板用于 AI 恢复中断的 SillySpec 工作流程。
|
|
4
|
+
|
|
5
|
+
## 恢复流程
|
|
6
|
+
|
|
7
|
+
当用户执行 `resume` 或对话中断后恢复时,按以下步骤操作:
|
|
8
|
+
|
|
9
|
+
### 1. 读取进度
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
读取 .sillyspec/.runtime/progress.json
|
|
13
|
+
读取 .sillyspec/.runtime/user-inputs.md(截取当前阶段相关部分)
|
|
14
|
+
读取 .sillyspec/STATE.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 2. 向用户确认
|
|
18
|
+
|
|
19
|
+
用简洁的语言告知:
|
|
20
|
+
|
|
21
|
+
- 当前阶段和步骤
|
|
22
|
+
- 上次做到哪里(checkpoint)
|
|
23
|
+
- 距上次活跃时间
|
|
24
|
+
- 下一步要做什么
|
|
25
|
+
|
|
26
|
+
**示例:**
|
|
27
|
+
|
|
28
|
+
> 📋 上次你在 **brainstorm** 阶段的 **Step 4 - 技术选型**,已经讨论了前端框架的选择。
|
|
29
|
+
> 距今约 2 小时。要继续技术选型,还是回顾一下之前的结论?
|
|
30
|
+
|
|
31
|
+
### 3. 恢复上下文
|
|
32
|
+
|
|
33
|
+
从 `summaries` 和 `user-inputs.md` 中提取之前的关键信息,注入对话:
|
|
34
|
+
|
|
35
|
+
- 已完成的步骤结论
|
|
36
|
+
- 已做的决策和被否的方案
|
|
37
|
+
- 未解决的问题
|
|
38
|
+
- 用户的关键偏好
|
|
39
|
+
|
|
40
|
+
### 4. 继续执行
|
|
41
|
+
|
|
42
|
+
从 `inProgressStep` 指定的步骤继续。如果 `inProgressStep` 为空但从 `completedSteps` 可推断进度,则从下一步开始。
|
|
43
|
+
|
|
44
|
+
### 5. 更新进度
|
|
45
|
+
|
|
46
|
+
- `resumeCount` +1
|
|
47
|
+
- 刷新 `lastActiveAt`
|
|
48
|
+
- 开始执行后更新 `inProgressStep`
|
|
49
|
+
|
|
50
|
+
## 注意事项
|
|
51
|
+
|
|
52
|
+
- 不要重新问已完成步骤中已经确认的问题
|
|
53
|
+
- 除非用户主动要求,不要从头开始
|
|
54
|
+
- 如果 progress.json 损坏,告知用户并建议运行 `sillyspec progress validate`
|
|
55
|
+
- quick 任务不影响主流程进度
|