sillyspec 3.7.2 → 3.7.3
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/package.json +1 -1
- package/templates/execute.md +60 -0
- package/templates/explore.md +24 -0
- package/templates/plan.md +24 -0
- package/templates/quick.md +8 -1
- package/templates/verify.md +113 -4
package/package.json
CHANGED
package/templates/execute.md
CHANGED
|
@@ -54,6 +54,48 @@ cat .sillyspec/knowledge/INDEX.md 2>/dev/null
|
|
|
54
54
|
|
|
55
55
|
子代理遇到不熟悉的库或 API 时,优先使用已配置的 MCP 工具(Context7 等)或 web search 查最新文档,不要凭记忆猜测用法。
|
|
56
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
|
+
|
|
57
99
|
**MCP 能力检测(主代理执行):**
|
|
58
100
|
```bash
|
|
59
101
|
for cfg in .claude/mcp.json .cursor/mcp.json; do
|
|
@@ -103,6 +145,9 @@ done
|
|
|
103
145
|
## 项目约定
|
|
104
146
|
{CONVENTIONS.md 全文}
|
|
105
147
|
|
|
148
|
+
## 编码规范约束(自动扫描)
|
|
149
|
+
{主代理扫描项目配置文件后生成的规范摘要,见上方「编码规范扫描」步骤}
|
|
150
|
+
|
|
106
151
|
## 项目架构
|
|
107
152
|
{ARCHITECTURE.md 全文}
|
|
108
153
|
|
|
@@ -132,6 +177,7 @@ done
|
|
|
132
177
|
7. **E2E 任务:** 如果任务描述包含"E2E"或"端到端",先 cat 相关功能代码和页面组件,理解交互逻辑。有测试框架则编写测试文件,无框架则编写 `.sillyspec/changes/<变更名>/e2e-steps.md` 结构化测试步骤(每条包含操作和断言)
|
|
133
178
|
8. **暂存:** 完成后在工作目录执行 git add -A(不要 commit,由用户通过 /sillyspec:commit 统一提交)
|
|
134
179
|
9. **不修改计划外的文件**,如必须修改则在报告中说明
|
|
180
|
+
10. **遵守编码规范:** prompt 中「编码规范约束」段的所有规则必须严格遵守。如规范与任务描述冲突,优先遵守规范并报告
|
|
135
181
|
|
|
136
182
|
## 完成后报告(严格按此格式)
|
|
137
183
|
|
|
@@ -166,6 +212,20 @@ done
|
|
|
166
212
|
|
|
167
213
|
## 完成后
|
|
168
214
|
|
|
215
|
+
**任务勾选自检(必须执行):**
|
|
216
|
+
所有任务完成后,主代理必须执行以下检查:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
cat .sillyspec/changes/*/tasks.md 2>/dev/null
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
逐条验证:
|
|
223
|
+
1. **所有返回 DONE/DONE_WITH_CONCERNS 的任务是否已勾选 `- [x]`?**
|
|
224
|
+
2. **勾选的任务是否都记录了精确到秒的时间戳 `[YYYY-MM-DD HH:MM:SS]`?**
|
|
225
|
+
3. **tasks.md 中是否还有未勾选 `- [ ]` 的已完成任务?**
|
|
226
|
+
|
|
227
|
+
发现遗漏 → 立即补勾选 + 补时间戳,不要等用户提醒。
|
|
228
|
+
|
|
169
229
|
**知识库审阅:** 检查是否有待确认的知识条目:
|
|
170
230
|
```bash
|
|
171
231
|
grep -c '^\### \[待确认\]' .sillyspec/knowledge/uncategorized.md 2>/dev/null
|
package/templates/explore.md
CHANGED
|
@@ -29,10 +29,34 @@ $ARGUMENTS
|
|
|
29
29
|
```bash
|
|
30
30
|
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
31
31
|
cat .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
32
|
+
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
33
|
+
cat .sillyspec/knowledge/INDEX.md 2>/dev/null
|
|
32
34
|
```
|
|
33
35
|
|
|
34
36
|
有进行中变更时读取其 design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
|
|
35
37
|
|
|
38
|
+
## MCP 能力(按需使用)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cat .claude/mcp.json .cursor/mcp.json 2>/dev/null
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- 有 Context7 → 探索时查询最新文档,验证技术方案的可行性
|
|
45
|
+
- 有浏览器 MCP → 可浏览相关网站、查竞品实现
|
|
46
|
+
- 有搜索 MCP → 搜索技术方案、最佳实践
|
|
47
|
+
- 无 MCP → 使用 web search
|
|
48
|
+
|
|
49
|
+
## 话题升级提示
|
|
50
|
+
|
|
51
|
+
探索过程中,当对话达到一定深度时(讨论了 5+ 轮、或涉及具体实现方案、或用户表达"试试看"/"能不能做"/"怎么搞"),主动用 AskUserQuestion 提示用户:
|
|
52
|
+
|
|
53
|
+
1. **🧠 头脑风暴** — `/sillyspec:brainstorm` 深度探索需求和方案
|
|
54
|
+
2. **⚡ 快速执行** — `/sillyspec:quick` 直接动手做
|
|
55
|
+
3. **📋 创建规范** — `/sillyspec:propose` 生成结构化规范
|
|
56
|
+
4. **🔍 继续探索** — 还没聊透,继续
|
|
57
|
+
|
|
58
|
+
不需要每次都提示,只在对话**明显转向执行意图**时触发。纯讨论、提问、查资料时不要打断。
|
|
59
|
+
|
|
36
60
|
## 没有必需的结束
|
|
37
61
|
|
|
38
62
|
探索可以创建变更提案、产出文档、继续探索或结束。
|
package/templates/plan.md
CHANGED
|
@@ -123,6 +123,30 @@ cat .claude/mcp.json .cursor/mcp.json 2>/dev/null | grep -i "browser\|chrome\|de
|
|
|
123
123
|
- [ ] 每个 task 有具体文件路径?
|
|
124
124
|
- [ ] 标注了 Wave 和依赖关系?
|
|
125
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。
|
|
126
150
|
|
|
127
151
|
### 7. 完成
|
|
128
152
|
|
package/templates/quick.md
CHANGED
|
@@ -21,12 +21,19 @@ $ARGUMENTS
|
|
|
21
21
|
1. **解析参数:** 检查是否携带 `--change <变更名>`,确定记录方式
|
|
22
22
|
2. **理解任务:** 模糊则问一个问题确认
|
|
23
23
|
3. **加载上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
|
|
24
|
+
3b. **编码规范扫描:** 检测项目中的编码规范配置文件(`.eslintrc*`、`.prettierrc*`、`tsconfig.json`、`.editorconfig`、`tailwind.config.*`、`CONTRIBUTING.md`),提取关键规则生成摘要。写作代码时必须严格遵守这些规则(分号/引号/缩进/命名风格等),如不确定优先遵守规范约束。
|
|
24
25
|
4. **知识库查询(强制步骤):**
|
|
25
26
|
```bash
|
|
26
27
|
cat .sillyspec/knowledge/INDEX.md 2>/dev/null
|
|
27
28
|
```
|
|
28
29
|
根据当前任务描述中的关键词匹配 INDEX.md 条目,命中时 `cat` 对应知识文件,将内容纳入后续开发考量。未命中则跳过。
|
|
29
|
-
**MCP 检测:** `cat .claude/mcp.json .cursor/mcp.json 2>/dev/null
|
|
30
|
+
**MCP 检测:** `cat .claude/mcp.json .cursor/mcp.json 2>/dev/null`,根据检测结果动态利用:
|
|
31
|
+
- 有 Context7 → 查询不熟悉库/API 的最新文档
|
|
32
|
+
- 有浏览器 MCP → 验证页面改动效果
|
|
33
|
+
- 有数据库 MCP → 查询表结构和数据验证(只读)
|
|
34
|
+
- 有搜索 MCP → 搜索最佳实践和解决方案
|
|
35
|
+
- 有其他 MCP → 按任务需要灵活使用
|
|
36
|
+
- 无 MCP → 使用 web search
|
|
30
37
|
5. **先读后写:** 调用已有方法前 `cat` 源文件确认签名,`grep` 确认方法存在
|
|
31
38
|
6. **数据操作安全:** 任何改变现有数据的操作(非 SELECT 的数据库操作)必须暂停并报告给用户确认,不得自动执行。新建表不受此限制
|
|
32
39
|
6. **TDD 执行:**
|
package/templates/verify.md
CHANGED
|
@@ -47,6 +47,7 @@ else
|
|
|
47
47
|
CHANGE_DIR=$(ls -d .sillyspec/changes/*/ 2>/dev/null | grep -v archive | tail -1)
|
|
48
48
|
fi
|
|
49
49
|
cat "$CHANGE_DIR"/{design,tasks}.md 2>/dev/null
|
|
50
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
50
51
|
```
|
|
51
52
|
|
|
52
53
|
锚定确认实际存在的文件。
|
|
@@ -97,9 +98,49 @@ npx vitest run 2>/dev/null || npx jest 2>/dev/null
|
|
|
97
98
|
> ⚠️ 使用 MCP 执行时 AI 判断可能不如测试框架精确。追求可靠性建议安装 Playwright。
|
|
98
99
|
|
|
99
100
|
**自动修复循环(选了策略 1 或 2 时):**
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
|
|
102
|
+
必须按以下流程严格执行,不可跳过:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
ROUND = 1
|
|
106
|
+
MAX_ROUNDS = 策略1时为5,策略2时为50
|
|
107
|
+
|
|
108
|
+
while ROUND <= MAX_ROUNDS:
|
|
109
|
+
1. 运行失败测试,捕获完整输出(错误信息、堆栈、期望值 vs 实际值)
|
|
110
|
+
2. 如果全部通过 → 跳出循环,标记 ✅
|
|
111
|
+
3. 读取 .sillyspec/local.yaml 中当前变更的 fixAttempts
|
|
112
|
+
4. 对每个失败测试:
|
|
113
|
+
a. 如果 fixAttempts >= MAX_ROUNDS → 跳过,标记 ❌ MAX_REACHED
|
|
114
|
+
b. 否则 → 调 /sillyspec:quick 修复,prompt 必须包含:
|
|
115
|
+
- 失败的测试文件路径和测试名
|
|
116
|
+
- 完整错误信息(含期望值 vs 实际值)
|
|
117
|
+
- 相关源文件路径
|
|
118
|
+
- "只修复这个测试失败,不要改其他代码"
|
|
119
|
+
c. 修复后重跑该测试确认是否通过
|
|
120
|
+
d. 通过 → fixAttempts 保持不变;仍失败 → fixAttempts + 1
|
|
121
|
+
5. 写入 .sillyspec/local.yaml 更新 fixAttempts
|
|
122
|
+
6. ROUND++
|
|
123
|
+
7. 如果本轮无任何修复(所有失败都已 MAX_REACHED)→ 跳出循环
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**quick 修复 prompt 模板:**
|
|
127
|
+
```
|
|
128
|
+
/sillyspec:quick "修复测试失败:<测试文件路径>:<测试名>
|
|
129
|
+
|
|
130
|
+
错误信息:
|
|
131
|
+
<完整错误输出,包含期望值和实际值>
|
|
132
|
+
|
|
133
|
+
相关文件:
|
|
134
|
+
<被测源文件路径>
|
|
135
|
+
|
|
136
|
+
只修复这个测试失败,不要改其他代码。修完后运行该测试确认通过。"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**禁止行为:**
|
|
140
|
+
- ❌ 只看错误摘要就修复(必须看完整输出)
|
|
141
|
+
- ❌ 跳过 fixAttempts 计数
|
|
142
|
+
- ❌ 一次 quick 修复多个不相关的失败(逐个修复,每次修复后重跑确认)
|
|
143
|
+
- ❌ 主代理直接修改代码(verify 阶段禁止改代码,必须通过 /sillyspec:quick)
|
|
103
144
|
|
|
104
145
|
**更新测试结果到 `.sillyspec/local.yaml`(按变更名隔离,覆盖写入):**
|
|
105
146
|
```yaml
|
|
@@ -121,7 +162,73 @@ grep -r "TODO\|FIXME\|HACK\|XXX" src/ lib/ app/ --include="*.ts" --include="*.ts
|
|
|
121
162
|
|
|
122
163
|
审查 design.md「文件变更」中列出的文件:安全问题(输入校验、SQL拼接、硬编码敏感信息)、潜在 bug(空值、边界条件)、与 CONVENTIONS.md 一致性。每个问题标 🔴必须 / 🟡建议 / 🔵优化。
|
|
123
164
|
|
|
124
|
-
###
|
|
165
|
+
### 5.5 MCP 基础设施验证
|
|
166
|
+
|
|
167
|
+
检测已配置的 MCP 服务,利用它们做实际验证(不只查文档):
|
|
168
|
+
|
|
169
|
+
**MCP 能力检测:**
|
|
170
|
+
```bash
|
|
171
|
+
cat .claude/mcp.json .cursor/mcp.json 2>/dev/null
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**按检测结果执行对应验证:**
|
|
175
|
+
|
|
176
|
+
**数据库 MCP(postgres/sqlite/mysql/redis):**
|
|
177
|
+
- 对照 design.md 中的数据模型,验证表/集合是否存在
|
|
178
|
+
- 验证字段类型、约束(主键、外键、唯一索引)是否与设计一致
|
|
179
|
+
- 验证新增的 API 是否能正确读写对应数据
|
|
180
|
+
- ⚠️ 只执行 SELECT 查询,禁止任何写操作
|
|
181
|
+
|
|
182
|
+
**浏览器 MCP(chrome-devtools/puppeteer/playwright):**
|
|
183
|
+
- 验证页面能否正常加载(无 404/500 错误)
|
|
184
|
+
- 验证关键 UI 元素是否存在(导航、表单、按钮等)
|
|
185
|
+
- 验证基础交互(点击、提交、跳转)
|
|
186
|
+
|
|
187
|
+
**API MCP:**
|
|
188
|
+
- 验证新增接口是否可达
|
|
189
|
+
- 验证请求/响应格式是否与设计一致
|
|
190
|
+
|
|
191
|
+
**无 MCP → 跳过此步骤,不影响验证结论。**
|
|
192
|
+
|
|
193
|
+
将验证结果纳入验证报告。
|
|
194
|
+
|
|
195
|
+
### 6. Lint / Format 检查
|
|
196
|
+
|
|
197
|
+
自动检测并运行项目配置的 lint/format 工具,验证代码是否符合规范:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# ESLint
|
|
201
|
+
if [ -f .eslintrc -o -f .eslintrc.js -o -f .eslintrc.cjs -o -f .eslintrc.json -o -f .eslintrc.yml ] || grep -q '"eslint"' package.json 2>/dev/null; then
|
|
202
|
+
echo "=== ESLint ==="
|
|
203
|
+
npx eslint . --max-warnings 0 2>&1 | tail -50
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
# Prettier(检查而非修复)
|
|
207
|
+
if [ -f .prettierrc -o -f .prettierrc.js -o -f .prettierrc.json -o -f .prettierrc.yml ] || grep -q '"prettier"' package.json 2>/dev/null; then
|
|
208
|
+
echo "=== Prettier ==="
|
|
209
|
+
npx prettier --check . 2>&1 | tail -30
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
# TypeScript 类型检查
|
|
213
|
+
if [ -f tsconfig.json ]; then
|
|
214
|
+
echo "=== TypeScript ==="
|
|
215
|
+
npx tsc --noEmit 2>&1 | tail -30
|
|
216
|
+
fi
|
|
217
|
+
|
|
218
|
+
# Stylelint
|
|
219
|
+
if [ -f .stylelintrc -o -f .stylelintrc.js -o -f .stylelintrc.json ] || grep -q '"stylelint"' package.json 2>/dev/null; then
|
|
220
|
+
echo "=== Stylelint ==="
|
|
221
|
+
npx stylelint "**/*.{css,scss,less}" 2>&1 | tail -30
|
|
222
|
+
fi
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**处理策略(AskUserQuestion):**
|
|
226
|
+
1. **自动修复** — 对支持 `--fix` 的工具(ESLint、Prettier、Stylelint)自动修复后重跑检查,同一问题最多修复 3 次
|
|
227
|
+
2. **只报告** — 仅列出所有 lint 错误,不修改代码
|
|
228
|
+
|
|
229
|
+
将 lint 结果纳入验证报告(步骤 7)。
|
|
230
|
+
|
|
231
|
+
### 7. 输出验证报告
|
|
125
232
|
|
|
126
233
|
```markdown
|
|
127
234
|
# SillySpec 验证报告
|
|
@@ -130,6 +237,8 @@ grep -r "TODO\|FIXME\|HACK\|XXX" src/ lib/ app/ --include="*.ts" --include="*.ts
|
|
|
130
237
|
## 测试结果:passed N, failed N
|
|
131
238
|
## 技术债务标记
|
|
132
239
|
## 代码审查:🔴 N / 🟡 N / 🔵 N
|
|
240
|
+
## Lint 检查:ESLint ✅/❌ | Prettier ✅/❌ | TypeScript ✅/❌ | Stylelint ✅/❌
|
|
241
|
+
## MCP 基础设施验证:数据库 ✅/❌/跳过 | 页面 ✅/❌/跳过 | API ✅/❌/跳过
|
|
133
242
|
## E2E 测试:passed N / failed N / fixAttempts 详情
|
|
134
243
|
## 结论:✅ PASS / ⚠️ PASS WITH NOTES / ❌ FAIL
|
|
135
244
|
```
|