sillyspec 3.7.17 → 3.7.18
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/.claude/skills/sillyspec-archive/SKILL.md +4 -70
- package/.claude/skills/sillyspec-quick/SKILL.md +4 -95
- package/.claude/skills/sillyspec-scan/SKILL.md +7 -136
- package/.claude/skills/sillyspec-status/SKILL.md +5 -125
- package/package.json +1 -1
- package/src/progress.js +5 -1
- package/src/run.js +14 -3
- package/src/stages/archive.js +54 -0
- package/src/stages/index.js +13 -2
- package/src/stages/quick.js +93 -0
- package/src/stages/scan.js +141 -0
- package/src/stages/status.js +92 -0
|
@@ -3,75 +3,9 @@ name: sillyspec:archive
|
|
|
3
3
|
description: 归档变更 — 规范沉淀,可追溯
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## 执行
|
|
7
|
+
运行 `sillyspec run archive`,按提示逐步执行。
|
|
8
|
+
每步完成后运行 `sillyspec run archive --done --output "摘要"`。
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
不要用编号列表让用户手动输入数字。
|
|
11
|
-
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
12
|
-
|
|
13
|
-
你现在是 SillySpec 的归档器。
|
|
14
|
-
|
|
15
|
-
## 变更名称
|
|
10
|
+
## 用户指令
|
|
16
11
|
$ARGUMENTS
|
|
17
|
-
|
|
18
|
-
## 流程
|
|
19
|
-
|
|
20
|
-
### 1. 任务完成度检查
|
|
21
|
-
|
|
22
|
-
检查 tasks.md 中所有 checkbox 是否已勾选。如有遗漏 → 询问用户是否继续归档。
|
|
23
|
-
|
|
24
|
-
### 2. 归档
|
|
25
|
-
|
|
26
|
-
### 3. 确认归档
|
|
27
|
-
|
|
28
|
-
在移动文件之前,展示即将归档的内容:
|
|
29
|
-
- 变更目录名
|
|
30
|
-
- 包含的文件列表
|
|
31
|
-
- 生成总结
|
|
32
|
-
|
|
33
|
-
**归档前确认:**
|
|
34
|
-
|
|
35
|
-
请确认是否执行归档:
|
|
36
|
-
1. 确认归档
|
|
37
|
-
2. 取消
|
|
38
|
-
|
|
39
|
-
将 `.sillyspec/changes/<change-name>/` 移动到 `.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`。
|
|
40
|
-
|
|
41
|
-
### 3. 更新 tasks.md
|
|
42
|
-
|
|
43
|
-
确保所有 checkbox 都已勾选。如有遗漏 → 打勾。
|
|
44
|
-
|
|
45
|
-
### 4. 更新路线图(如存在)
|
|
46
|
-
|
|
47
|
-
如果 `.sillyspec/ROADMAP.md` 存在,标记对应 Phase 为已完成。
|
|
48
|
-
|
|
49
|
-
### 5. Git 提交
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
git add .sillyspec/
|
|
53
|
-
git commit -m "docs: archive sillyspec change <change-name>"
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 最后说:
|
|
57
|
-
|
|
58
|
-
> ✅ 变更 `<change-name>` 已归档。
|
|
59
|
-
>
|
|
60
|
-
> 累积规范:
|
|
61
|
-
> - `.sillyspec/changes/archive/` — X 个已归档变更
|
|
62
|
-
> - `.sillyspec/specs/` — X 份设计文档
|
|
63
|
-
> - `.sillyspec/plans/` — X 份实现计划
|
|
64
|
-
>
|
|
65
|
-
> 继续下一个:`/sillyspec:brainstorm "新想法"`
|
|
66
|
-
|
|
67
|
-
### 更新 progress.json
|
|
68
|
-
|
|
69
|
-
archive 完成后,**必须自动更新进度**:
|
|
70
|
-
```bash
|
|
71
|
-
sillyspec progress complete-stage <当前阶段>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
- 清除当前变更信息(归档后不再活跃)
|
|
75
|
-
- 如果是主变更(有 MASTER.md),标记所有阶段为 ✅,然后清除
|
|
76
|
-
- 历史记录追加时间 + 归档完成
|
|
77
|
-
- 下一步改为 `/sillyspec:brainstorm "新想法"` 或留空
|
|
@@ -3,100 +3,9 @@ name: sillyspec:quick
|
|
|
3
3
|
description: 快速任务 — 跳过完整流程,直接做
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
##
|
|
7
|
-
|
|
6
|
+
## 执行
|
|
7
|
+
运行 `sillyspec run quick`,按提示逐步执行。
|
|
8
|
+
每步完成后运行 `sillyspec run quick --done --output "摘要"`。
|
|
8
9
|
|
|
9
|
-
##
|
|
10
|
-
- ❌ 不写测试(底线是仍然要写测试)
|
|
11
|
-
- ❌ 修改无关文件
|
|
12
|
-
- ❌ 跳过测试因为"任务太简单"
|
|
13
|
-
|
|
14
|
-
## 用法
|
|
15
|
-
|
|
16
|
-
- `/sillyspec:quick "修复用户创建接口漏了手机号校验"` — 独立记录到按用户名隔离的 QUICKLOG
|
|
17
|
-
- `/sillyspec:quick --change user-module "修复用户创建接口漏了手机号校验"` — 追加到 user-module 变更的 tasks.md
|
|
18
|
-
|
|
19
|
-
## 任务
|
|
10
|
+
## 用户指令
|
|
20
11
|
$ARGUMENTS
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 流程
|
|
25
|
-
|
|
26
|
-
1. **解析参数:** 检查是否携带 `--change <变更名>`,确定记录方式
|
|
27
|
-
2. **理解任务:** 模糊则问一个问题确认
|
|
28
|
-
3. **加载上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
|
|
29
|
-
4. **知识库查询(强制步骤):**
|
|
30
|
-
```bash
|
|
31
|
-
cat .sillyspec/knowledge/INDEX.md 2>/dev/null
|
|
32
|
-
```
|
|
33
|
-
根据当前任务描述中的关键词匹配 INDEX.md 条目,命中时 `cat` 对应知识文件,将内容纳入后续开发考量。未命中则跳过。
|
|
34
|
-
5. **文档/代码查询(强制步骤):** 如果涉及不熟悉的库/框架/API:
|
|
35
|
-
- 通过 Context7 MCP 查询官方文档
|
|
36
|
-
- 如果文档不足,通过 grep.app MCP 搜索 GitHub 开源代码
|
|
37
|
-
- 将查询结果纳入后续开发考量
|
|
38
|
-
6. **先读后写:** 调用已有方法前 `cat` 源文件确认签名,`grep` 确认方法存在
|
|
39
|
-
7. **TDD 执行:**
|
|
40
|
-
```
|
|
41
|
-
🔴 RED → 先写测试,运行确认失败
|
|
42
|
-
🟢 GREEN → 写最少代码让测试通过
|
|
43
|
-
🔵 REFACTOR → 清理,保持测试通过
|
|
44
|
-
✅ STAGE → git add 暂存(测试文件必须包含在暂存中)
|
|
45
|
-
```
|
|
46
|
-
测试文件必须保留在项目中,不能删除。违反 TDD → 删掉代码从测试重新开始。
|
|
47
|
-
- 纯配置/数据/文档可跳过 TDD
|
|
48
|
-
- 其他情况一律走 TDD
|
|
49
|
-
8. **运行测试:** 先检查 local.yaml 构建命令配置:
|
|
50
|
-
```bash
|
|
51
|
-
cat .sillyspec/local.yaml 2>/dev/null
|
|
52
|
-
```
|
|
53
|
-
如果有则使用 local.yaml 中的命令;否则使用默认命令:
|
|
54
|
-
```bash
|
|
55
|
-
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
|
-
```
|
|
57
|
-
9. **Git 暂存:** `git add -A`。**不要 commit**,由用户通过 `/sillyspec:commit` 统一提交。**工作区模式下,确认当前在正确的子项目目录中执行暂存。**
|
|
58
|
-
10. **记录:**
|
|
59
|
-
- **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选,**记录精确到秒的时间戳**:
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
- [x] [YYYY-MM-DD HH:MM:SS] 任务描述
|
|
63
|
-
```
|
|
64
|
-
- **无 `--change`:** 记录到 `.sillyspec/quicklog/QUICKLOG-<git用户名>.md`(见下方规则)
|
|
65
|
-
11. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
|
|
66
|
-
|
|
67
|
-
12. **记录发现的坑:** 执行过程中如果发现项目特有的规律、陷阱或约定(如"某方法参数顺序容易搞反"、"某表有隐藏软删除字段"),追加到 `.sillyspec/knowledge/uncategorized.md`,格式:
|
|
68
|
-
|
|
69
|
-
```markdown
|
|
70
|
-
### [待确认] {简短标题}
|
|
71
|
-
> 来源:quick / {时间戳}
|
|
72
|
-
|
|
73
|
-
{坑的具体描述}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**工作区模式下:** 只影响当前子项目 → 写入当前子项目 `.sillyspec/knowledge/uncategorized.md`;影响多个子项目 → 写入工作区根目录 `.sillyspec/knowledge/uncategorized.md`。
|
|
77
|
-
|
|
78
|
-
13. **知识库审阅提示:** 如果本次执行向 knowledge/ 写入了新条目,提示用户:
|
|
79
|
-
> 📚 本次 quick 发现了新知识,请审阅:`cat .sillyspec/knowledge/uncategorized.md`
|
|
80
|
-
> 确认后请将 `[待确认]` 改为 `[已确认]`,并可归类到 knowledge/ 下的专题文件中更新 INDEX.md。
|
|
81
|
-
|
|
82
|
-
### QUICKLOG 规则
|
|
83
|
-
|
|
84
|
-
**按 git 用户名隔离,避免多人同时操作冲突:**
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
USER=$(git config user.name 2>/dev/null || echo "default")
|
|
88
|
-
LOG_FILE=".sillyspec/quicklog/QUICKLOG-${USER}.md"
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
文件路径:`$LOG_FILE`
|
|
92
|
-
|
|
93
|
-
**追加记录格式(时间精确到秒):**
|
|
94
|
-
```markdown
|
|
95
|
-
## YYYY-MM-DD HH:MM:SS | fix: 任务描述
|
|
96
|
-
- 文件:`修改的文件列表`
|
|
97
|
-
- 关联归档:`相关的已归档变更名`(如有)
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
**文件轮转:** 追加前检查文件大小,超过 500 行则:
|
|
101
|
-
1. 将当前文件重命名为 `QUICKLOG-${USER}-YYYY-MM-DD.md`
|
|
102
|
-
2. 创建新的空 `QUICKLOG-${USER}.md`
|
|
@@ -1,140 +1,11 @@
|
|
|
1
|
-
## 交互规范
|
|
2
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
3
|
-
|
|
4
|
-
你现在是 SillySpec 代码库扫描器(编排器)。**你不读源码,只编排子代理或串行执行。**
|
|
5
|
-
|
|
6
|
-
## 参数处理
|
|
7
|
-
- 空白 → 交互式引导(逐步询问)
|
|
8
|
-
- `--deep` → 直接深度扫描
|
|
9
|
-
- 其他 → 快速扫描该区域
|
|
10
|
-
|
|
11
|
-
## 流程控制(必须先执行)
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
sillyspec status --json
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
非 `init` phase → 以 CLI 返回为准决定下一步。
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 交互式引导(参数为空时)
|
|
22
|
-
|
|
23
|
-
### 检查工作区 & 已有文档
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q . # 有 .yaml → 工作区模式
|
|
27
|
-
ls docs/*/scan/ 2>/dev/null # 检查已有文档
|
|
28
|
-
wc -l docs/*/scan/*.md 2>/dev/null
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
- 已有 3 份 → 建议升级深度扫描
|
|
32
|
-
- 已有 7 份 → 建议刷新或跳过
|
|
33
|
-
- 工作区 → 逐个扫描 / 选子项目 / 退出
|
|
34
|
-
|
|
35
|
-
### 选择扫描模式、范围、排除目录、确认
|
|
36
|
-
按原流程交互,确认后进入扫描。
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 构建环境探测(主代理执行)
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
cat package.json pom.xml build.gradle go.mod Cargo.toml requirements.txt pyproject.toml Gemfile composer.json 2>/dev/null
|
|
44
|
-
find . -maxdepth 2 -name "*.config.*" -not -path "*/node_modules/*" -not -path "*/.git/*" | head -20 | xargs cat 2>/dev/null
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
结果保存到 `docs/<project>/scan/_env-detect.md`(临时文件,扫描完删除)。
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 深度扫描
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
|
|
55
|
-
mkdir -p docs/${PROJECT}/scan
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 断点续扫
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
|
|
62
|
-
for f in ARCHITECTURE STRUCTURE CONVENTIONS INTEGRATIONS TESTING CONCERNS PROJECT; do
|
|
63
|
-
[ -f "docs/${PROJECT}/scan/${f}.md" ] && echo "✅ ${f}.md" || echo "⬜ ${f}.md"
|
|
64
|
-
done
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
只生成缺失的文档。
|
|
68
|
-
|
|
69
|
-
### 检测子代理可用性
|
|
70
|
-
检查是否有 Task/Spawn 工具。有 → 子代理模式,无 → 串行模式。
|
|
71
|
-
|
|
72
1
|
---
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
#### Agent 1: tech → ARCHITECTURE.md
|
|
77
|
-
扫描技术栈 + 数据库 Schema + 架构模式。参考 `_env-detect.md`。
|
|
78
|
-
用 grep/rg 搜索(`@Entity`、`schema.prisma`、`models.py` 等),**禁止读源码全文**。
|
|
79
|
-
Schema 只记表名+说明+字段数。含 `## 技术栈` `## 架构概览` `## 数据模型(摘要)`。路径用反引号,不编造。
|
|
80
|
-
|
|
81
|
-
#### Agent 2: conventions → CONVENTIONS.md
|
|
82
|
-
扫描框架隐形规则 + 实体继承 + 代码风格。参考 `_env-detect.md`。
|
|
83
|
-
用 grep 搜索拦截器/插件/逻辑删除/基类/审计字段,**禁止读源码全文**。
|
|
84
|
-
根据检测到的语言/框架自行决定搜索什么模式,提取 3-5 个典型示例。
|
|
85
|
-
含 `## 框架隐形规则` `## 实体继承规范` `## 代码风格`。路径用反引号,不编造。
|
|
86
|
-
|
|
87
|
-
#### Agent 3: structure → STRUCTURE.md + INTEGRATIONS.md
|
|
88
|
-
扫描目录结构 + 外部集成。参考 `_env-detect.md`。
|
|
89
|
-
用 find/ls/tree 和 grep,**禁止读源码全文**。
|
|
90
|
-
搜索 API 调用、MQ 配置、缓存、第三方 SDK。STRUCTURE.md 含目录树+模块说明。INTEGRATIONS.md 按类型分组。路径用反引号,不编造。
|
|
91
|
-
|
|
92
|
-
#### Agent 4: quality → TESTING.md + CONCERNS.md + PROJECT.md
|
|
93
|
-
扫描测试现状 + 技术债务 + 项目概览。参考 `_env-detect.md`。
|
|
94
|
-
用 grep 搜索测试文件、TODO/FIXME、过时依赖,**禁止读源码全文**。
|
|
95
|
-
TESTING.md 含测试结构。CONCERNS.md 按严重程度分组。PROJECT.md 含项目信息。路径用反引号,不编造。
|
|
96
|
-
|
|
2
|
+
name: sillyspec:scan
|
|
3
|
+
description: 代码扫描 — 分析项目结构、约定和架构
|
|
97
4
|
---
|
|
98
5
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## 工作区模式
|
|
106
|
-
对每个子项目:cd → 环境探测 → 扫描 → cd 回工作区。
|
|
107
|
-
全部完成后汇总 `.sillyspec/workspace/CODEBASE-OVERVIEW.md`(只读各子项目的 ARCHITECTURE.md + CONVENTIONS.md)。
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## 扫描完成
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
# 路径校验
|
|
115
|
-
PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
|
|
116
|
-
for f in ARCHITECTURE STRUCTURE CONVENTIONS INTEGRATIONS TESTING CONCERNS PROJECT; do
|
|
117
|
-
[ -f "docs/${PROJECT}/scan/${f}.md" ] && echo "✅ ${f}.md"
|
|
118
|
-
done
|
|
119
|
-
|
|
120
|
-
# 验证 CLI
|
|
121
|
-
sillyspec status --json # 应返回 phase: "brainstorm"
|
|
122
|
-
sillyspec next # 推荐给用户
|
|
123
|
-
|
|
124
|
-
# 清理 + 提交
|
|
125
|
-
rm -f docs/${PROJECT}/scan/_env-detect.md
|
|
126
|
-
git add . && git commit -m "chore: sillyspec scan - codebase mapped"
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### 自检门控
|
|
130
|
-
- [ ] ARCHITECTURE.md:技术栈 + Schema 摘要?
|
|
131
|
-
- [ ] CONVENTIONS.md:隐形规则 + 代码风格?
|
|
132
|
-
- [ ] STRUCTURE.md:目录结构?
|
|
133
|
-
- [ ] INTEGRATIONS.md:外部依赖?
|
|
134
|
-
- [ ] TESTING.md:测试现状?
|
|
135
|
-
- [ ] CONCERNS.md:技术债务?
|
|
136
|
-
- [ ] PROJECT.md:项目概览?
|
|
6
|
+
## 执行
|
|
7
|
+
运行 `sillyspec run scan`,按提示逐步执行。
|
|
8
|
+
每步完成后运行 `sillyspec run scan --done --output "摘要"`。
|
|
137
9
|
|
|
138
|
-
##
|
|
139
|
-
|
|
140
|
-
- ✅ 交互模式每步等用户 / 文档只写 `docs/<project>/scan/`
|
|
10
|
+
## 用户指令
|
|
11
|
+
$ARGUMENTS
|
|
@@ -3,129 +3,9 @@ name: sillyspec:status
|
|
|
3
3
|
description: 查看项目进度和状态
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## 流程
|
|
11
|
-
|
|
12
|
-
### 0: 检查工作区模式
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**如果是工作区模式:**
|
|
19
|
-
|
|
20
|
-
1. 读取 projects/*.yaml 获取子项目列表:
|
|
21
|
-
```bash
|
|
22
|
-
for f in .sillyspec/projects/*.yaml; do
|
|
23
|
-
[ -f "$f" ] || continue
|
|
24
|
-
proj_name=$(basename "$f" .yaml)
|
|
25
|
-
proj_path=$(grep '^path:' "$f" | head -1 | sed 's/^path:[[:space:]]*//')
|
|
26
|
-
done
|
|
27
|
-
```
|
|
28
|
-
2. 对每个子项目执行 Step 1-5 的检查(在子项目目录下)
|
|
29
|
-
3. 检查共享规范:
|
|
30
|
-
```bash
|
|
31
|
-
ls .sillyspec/shared/ 2>/dev/null
|
|
32
|
-
```
|
|
33
|
-
4. 检查工作区概览:
|
|
34
|
-
```bash
|
|
35
|
-
ls .sillyspec/workspace/ 2>/dev/null
|
|
36
|
-
```
|
|
37
|
-
5. 输出汇总:
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
🏢 工作区状态
|
|
41
|
-
|
|
42
|
-
📦 子项目:
|
|
43
|
-
|
|
44
|
-
✅ frontend ./frontend
|
|
45
|
-
📋 项目:已初始化
|
|
46
|
-
📂 代码库:已扫描(7 份文档)
|
|
47
|
-
🔄 进行中:1 个变更
|
|
48
|
-
- [user-auth] Phase 3 (Execute) — tasks 5/8
|
|
49
|
-
✅ 已归档:3 个变更
|
|
50
|
-
|
|
51
|
-
⚠️ backend ./backend
|
|
52
|
-
📋 项目:已初始化
|
|
53
|
-
📂 代码库:未扫描
|
|
54
|
-
🔄 进行中:0 个变更
|
|
55
|
-
|
|
56
|
-
📄 共享规范:2 份
|
|
57
|
-
- api-contract.md
|
|
58
|
-
- data-models.md
|
|
59
|
-
|
|
60
|
-
💡 下一步:
|
|
61
|
-
- 扫描 backend:/sillyspec:scan backend
|
|
62
|
-
- 继续开发:/sillyspec:continue
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
然后结束,不执行下面的单项目流程。
|
|
66
|
-
|
|
67
|
-
**如果不是工作区模式:** 继续下面的单项目流程。
|
|
68
|
-
|
|
69
|
-
### 1. 项目基础
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
cat .sillyspec/PROJECT.md 2>/dev/null || echo "未初始化"
|
|
73
|
-
PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
|
|
74
|
-
ls docs/${PROJECT}/scan/ 2>/dev/null | head -10
|
|
75
|
-
cat .sillyspec/REQUIREMENTS.md 2>/dev/null | head -20
|
|
76
|
-
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### 2. 进行中的变更
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
对每个进行中的变更,检查文件完成度:
|
|
86
|
-
- proposal.md ✅/❌
|
|
87
|
-
- design.md ✅/❌
|
|
88
|
-
- specs/requirements.md ✅/❌
|
|
89
|
-
- tasks.md — X/Y 完成
|
|
90
|
-
- 对应计划 .sillyspec/plans/ ✅/❌
|
|
91
|
-
|
|
92
|
-
### 3. 归档历史
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
ls .sillyspec/changes/archive/ 2>/dev/null | wc -l
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### 4. 中断状态
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
cat .sillyspec/HANDOFF.json 2>/dev/null
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### 5. 代码库文档
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
|
|
108
|
-
ls docs/${PROJECT}/scan/ 2>/dev/null
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### 6. 输出
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
📊 SillySpec 状态
|
|
115
|
-
|
|
116
|
-
📋 项目:xxx(已初始化 / 未初始化)
|
|
117
|
-
📂 代码库:已扫描(7 份文档)/ 未扫描
|
|
118
|
-
|
|
119
|
-
🔄 进行中:N 个变更
|
|
120
|
-
- [change-1] Phase 3 (Execute) — tasks 5/8
|
|
121
|
-
- [change-2] Phase 2 (Propose) — 缺少 design.md
|
|
122
|
-
|
|
123
|
-
✅ 已归档:N 个变更
|
|
124
|
-
📝 设计文档:N 份
|
|
125
|
-
📝 实现计划:N 份
|
|
126
|
-
|
|
127
|
-
💡 下一步:/sillyspec:continue
|
|
128
|
-
```
|
|
6
|
+
## 执行
|
|
7
|
+
运行 `sillyspec run status`,按提示逐步执行。
|
|
8
|
+
每步完成后运行 `sillyspec run status --done --output "摘要"`。
|
|
129
9
|
|
|
130
|
-
##
|
|
131
|
-
|
|
10
|
+
## 用户指令
|
|
11
|
+
$ARGUMENTS
|
package/package.json
CHANGED
package/src/progress.js
CHANGED
|
@@ -17,7 +17,7 @@ const PROGRESS_FILE = 'progress.json';
|
|
|
17
17
|
const BACKUP_FILE = 'progress.json.bak';
|
|
18
18
|
|
|
19
19
|
const CURRENT_VERSION = 2;
|
|
20
|
-
const VALID_STAGES = ['brainstorm', 'propose', 'plan', 'execute', 'verify'];
|
|
20
|
+
const VALID_STAGES = ['brainstorm', 'propose', 'plan', 'execute', 'verify', 'scan', 'quick', 'archive', 'status'];
|
|
21
21
|
const VALID_STATUSES = ['pending', 'in-progress', 'completed', 'failed', 'blocked'];
|
|
22
22
|
|
|
23
23
|
const STAGE_LABELS = {
|
|
@@ -26,6 +26,10 @@ const STAGE_LABELS = {
|
|
|
26
26
|
plan: '📐 实现计划',
|
|
27
27
|
execute: '⚡ 波次执行',
|
|
28
28
|
verify: '🔍 验证确认',
|
|
29
|
+
scan: '🔍 代码扫描',
|
|
30
|
+
quick: '⚡ 快速任务',
|
|
31
|
+
archive: '📦 归档变更',
|
|
32
|
+
status: '📊 状态查看',
|
|
29
33
|
};
|
|
30
34
|
|
|
31
35
|
function emptyStage() {
|
package/src/run.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { basename, join } from 'path'
|
|
7
7
|
import { existsSync, readdirSync, mkdirSync, writeFileSync } from 'fs'
|
|
8
8
|
import { ProgressManager } from './progress.js'
|
|
9
|
-
import { stageRegistry, getNextStage } from './stages/index.js'
|
|
9
|
+
import { stageRegistry, getNextStage, auxiliaryStages } from './stages/index.js'
|
|
10
10
|
import { buildExecuteSteps } from './stages/execute.js'
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -76,6 +76,11 @@ function outputStep(stageName, stepIndex, steps, cwd) {
|
|
|
76
76
|
console.log(`---\n`)
|
|
77
77
|
console.log(`## Step ${stepIndex + 1}/${total}: ${step.name}\n`)
|
|
78
78
|
console.log(step.prompt)
|
|
79
|
+
console.log(`\n### ⚠️ 铁律`)
|
|
80
|
+
console.log('- 只做本步骤描述的操作,不得自行扩展或跳过')
|
|
81
|
+
console.log('- 不要回头修改已完成的步骤')
|
|
82
|
+
console.log('- 完成后立即执行 --done 命令,不得跳过')
|
|
83
|
+
console.log('- 生成的文件头部必须包含 author(git 用户名)和 created_at(精确到秒)')
|
|
79
84
|
console.log(`\n### 完成后执行`)
|
|
80
85
|
console.log(`sillyspec run ${stageName} --done --output "你的摘要"`)
|
|
81
86
|
}
|
|
@@ -106,12 +111,18 @@ export function runCommand(args, cwd) {
|
|
|
106
111
|
outputText = flags[outputIdx + 1]
|
|
107
112
|
}
|
|
108
113
|
|
|
114
|
+
const isAuxiliary = auxiliaryStages.includes(stageName)
|
|
115
|
+
|
|
109
116
|
const pm = new ProgressManager()
|
|
110
117
|
let progress = pm.read(cwd)
|
|
111
118
|
|
|
112
119
|
if (!progress) {
|
|
113
|
-
|
|
114
|
-
|
|
120
|
+
// 辅助命令可以在没有 progress.json 时工作(比如 scan)
|
|
121
|
+
if (!isAuxiliary) {
|
|
122
|
+
console.error('❌ 未找到 progress.json,请先运行 sillyspec init')
|
|
123
|
+
process.exit(1)
|
|
124
|
+
}
|
|
125
|
+
progress = pm.init(cwd)
|
|
115
126
|
}
|
|
116
127
|
|
|
117
128
|
// --reset
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export const definition = {
|
|
2
|
+
name: 'archive',
|
|
3
|
+
title: '归档变更',
|
|
4
|
+
description: '规范沉淀,可追溯',
|
|
5
|
+
auxiliary: true,
|
|
6
|
+
steps: [
|
|
7
|
+
{
|
|
8
|
+
name: '任务完成度检查',
|
|
9
|
+
prompt: `检查 tasks.md 中所有 checkbox 是否已勾选。
|
|
10
|
+
|
|
11
|
+
### 操作
|
|
12
|
+
1. 读取 \`.sillyspec/changes/<change-name>/tasks.md\`
|
|
13
|
+
2. 检查所有 checkbox 是否已勾选
|
|
14
|
+
3. 如有遗漏 → 询问用户是否继续归档
|
|
15
|
+
|
|
16
|
+
### 输出
|
|
17
|
+
完成度报告`,
|
|
18
|
+
outputHint: '完成度报告',
|
|
19
|
+
optional: false
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: '确认归档',
|
|
23
|
+
prompt: `展示即将归档的内容,请用户确认。
|
|
24
|
+
|
|
25
|
+
### 操作
|
|
26
|
+
1. 展示:变更目录名、包含的文件列表、生成总结
|
|
27
|
+
2. 请用户确认是否执行归档
|
|
28
|
+
3. 确认后:将 \`.sillyspec/changes/<change-name>/\` 移动到 \`.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/\`
|
|
29
|
+
4. 确保所有 checkbox 都已勾选
|
|
30
|
+
|
|
31
|
+
### 输出
|
|
32
|
+
归档确认`,
|
|
33
|
+
outputHint: '归档确认',
|
|
34
|
+
optional: false
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: '更新路线图和提交',
|
|
38
|
+
prompt: `更新路线图并 Git 提交。
|
|
39
|
+
|
|
40
|
+
### 操作
|
|
41
|
+
1. 如果 \`.sillyspec/ROADMAP.md\` 存在,标记对应 Phase 为已完成
|
|
42
|
+
2. \`git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"\`
|
|
43
|
+
3. 更新 progress.json:
|
|
44
|
+
- 清除当前变更信息(归档后不再活跃)
|
|
45
|
+
- 如果是主变更(有 MASTER.md),标记所有阶段为 ✅,然后清除
|
|
46
|
+
- 历史记录追加时间 + 归档完成
|
|
47
|
+
|
|
48
|
+
### 输出
|
|
49
|
+
归档完成确认 + 累积规范统计`,
|
|
50
|
+
outputHint: '归档完成',
|
|
51
|
+
optional: false
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
package/src/stages/index.js
CHANGED
|
@@ -3,16 +3,24 @@ import { definition as propose } from './propose.js'
|
|
|
3
3
|
import { definition as plan } from './plan.js'
|
|
4
4
|
import { definition as execute } from './execute.js'
|
|
5
5
|
import { definition as verify } from './verify.js'
|
|
6
|
+
import { definition as scan } from './scan.js'
|
|
7
|
+
import { definition as quick } from './quick.js'
|
|
8
|
+
import { definition as archive } from './archive.js'
|
|
9
|
+
import { definition as status } from './status.js'
|
|
6
10
|
|
|
7
11
|
export const stageRegistry = {
|
|
8
12
|
brainstorm,
|
|
9
13
|
propose,
|
|
10
14
|
plan,
|
|
11
15
|
execute,
|
|
12
|
-
verify
|
|
16
|
+
verify,
|
|
17
|
+
scan,
|
|
18
|
+
quick,
|
|
19
|
+
archive,
|
|
20
|
+
status
|
|
13
21
|
}
|
|
14
22
|
|
|
15
|
-
//
|
|
23
|
+
// 流程阶段顺序,用于 getNextStage
|
|
16
24
|
const stageOrder = ['brainstorm', 'propose', 'plan', 'execute', 'verify']
|
|
17
25
|
|
|
18
26
|
export function getNextStage(currentStage) {
|
|
@@ -20,3 +28,6 @@ export function getNextStage(currentStage) {
|
|
|
20
28
|
if (index === -1 || index >= stageOrder.length - 1) return null
|
|
21
29
|
return stageOrder[index + 1]
|
|
22
30
|
}
|
|
31
|
+
|
|
32
|
+
// 辅助命令(不影响流程阶段推进)
|
|
33
|
+
export const auxiliaryStages = ['scan', 'quick', 'archive', 'status']
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export const definition = {
|
|
2
|
+
name: 'quick',
|
|
3
|
+
title: '快速任务',
|
|
4
|
+
description: '跳过完整流程,直接做',
|
|
5
|
+
auxiliary: true,
|
|
6
|
+
steps: [
|
|
7
|
+
{
|
|
8
|
+
name: '解析参数和上下文',
|
|
9
|
+
prompt: `解析任务参数,加载项目上下文。
|
|
10
|
+
|
|
11
|
+
### 操作
|
|
12
|
+
1. 检查是否携带 \`--change <变更名>\`,确定记录方式
|
|
13
|
+
2. 理解任务:模糊则问一个问题确认
|
|
14
|
+
3. 加载上下文:\`cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null\`
|
|
15
|
+
4. 加载扫描文档(如存在):\`cat docs/<project>/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null\`
|
|
16
|
+
|
|
17
|
+
### 输出
|
|
18
|
+
任务理解 + 上下文摘要`,
|
|
19
|
+
outputHint: '任务理解',
|
|
20
|
+
optional: false
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: '知识库和文档查询',
|
|
24
|
+
prompt: `查询知识库和外部文档。
|
|
25
|
+
|
|
26
|
+
### 操作
|
|
27
|
+
1. \`cat .sillyspec/knowledge/INDEX.md 2>/dev/null\` — 根据关键词匹配
|
|
28
|
+
2. 命中时 \`cat\` 对应知识文件
|
|
29
|
+
3. 如果涉及不熟悉的库/框架/API:通过 Context7 查询官方文档
|
|
30
|
+
4. 将查询结果纳入后续开发考量
|
|
31
|
+
|
|
32
|
+
### 输出
|
|
33
|
+
相关知识条目和文档查询结果`,
|
|
34
|
+
outputHint: '知识查询结果',
|
|
35
|
+
optional: true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'TDD 实现',
|
|
39
|
+
prompt: `按 TDD 流程实现任务。
|
|
40
|
+
|
|
41
|
+
### 操作
|
|
42
|
+
1. 先读后写:调用已有方法前 \`cat\` 源文件确认签名,\`grep\` 确认方法存在
|
|
43
|
+
2. 🔴 RED → 先写测试,运行确认失败
|
|
44
|
+
3. 🟢 GREEN → 写最少代码让测试通过
|
|
45
|
+
4. 🔵 REFACTOR → 清理,保持测试通过
|
|
46
|
+
5. ✅ STAGE → git add 暂存(测试文件必须包含)
|
|
47
|
+
|
|
48
|
+
### 纯配置/数据/文档可跳过 TDD,其他一律走 TDD。
|
|
49
|
+
|
|
50
|
+
### 输出
|
|
51
|
+
实现摘要 + 修改文件列表
|
|
52
|
+
|
|
53
|
+
### 铁律
|
|
54
|
+
- ❌ 不写测试(底线是仍然要写测试)
|
|
55
|
+
- ❌ 修改无关文件
|
|
56
|
+
- ❌ 跳过测试因为"任务太简单"`,
|
|
57
|
+
outputHint: '实现摘要',
|
|
58
|
+
optional: false
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: '运行测试',
|
|
62
|
+
prompt: `运行测试确认通过。
|
|
63
|
+
|
|
64
|
+
### 操作
|
|
65
|
+
1. 检查 local.yaml 构建命令配置:\`cat .sillyspec/local.yaml 2>/dev/null\`
|
|
66
|
+
2. 有则使用 local.yaml 中的命令,否则使用默认命令
|
|
67
|
+
3. 默认命令:\`mvn test -pl <模块> -Dtest=<测试类>\` 或 \`./gradlew test --tests <测试类>\` 或 \`pnpm test\` 或 \`npm test\` 或 \`pytest <测试文件>\`
|
|
68
|
+
|
|
69
|
+
### 输出
|
|
70
|
+
测试通过/失败结果`,
|
|
71
|
+
outputHint: '测试结果',
|
|
72
|
+
optional: false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: '暂存和记录',
|
|
76
|
+
prompt: `Git 暂存并记录任务。
|
|
77
|
+
|
|
78
|
+
### 操作
|
|
79
|
+
1. \`git add -A\` — **不要 commit**,由用户通过统一提交
|
|
80
|
+
2. 记录:
|
|
81
|
+
- 有 \`--change\`:在 \`.sillyspec/changes/<变更名>/tasks.md\` 追加 task 并勾选,记录精确到秒的时间戳
|
|
82
|
+
- 无 \`--change\`:记录到 \`.sillyspec/quicklog/QUICKLOG-<git用户名>.md\`(按 git 用户名隔离)
|
|
83
|
+
3. QUICKLOG 轮转:超过 500 行则重命名为 \`QUICKLOG-<USER>-YYYY-MM-DD.md\`
|
|
84
|
+
4. 如果发现项目特有的坑,追加到 \`.sillyspec/knowledge/uncategorized.md\`
|
|
85
|
+
5. 任务比预期复杂 → 建议用完整流程
|
|
86
|
+
|
|
87
|
+
### 输出
|
|
88
|
+
暂存确认 + 记录路径`,
|
|
89
|
+
outputHint: '暂存和记录确认',
|
|
90
|
+
optional: false
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
export const definition = {
|
|
2
|
+
name: 'scan',
|
|
3
|
+
title: '代码扫描',
|
|
4
|
+
description: '分析项目结构、约定和架构',
|
|
5
|
+
auxiliary: true,
|
|
6
|
+
steps: [
|
|
7
|
+
{
|
|
8
|
+
name: '检查工作区和已有文档',
|
|
9
|
+
prompt: `检查工作区模式和已有扫描文档。
|
|
10
|
+
|
|
11
|
+
### 操作
|
|
12
|
+
1. \`ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .\` — 判断是否工作区模式
|
|
13
|
+
2. \`ls docs/*/scan/ 2>/dev/null\` — 检查已有文档
|
|
14
|
+
3. \`wc -l docs/*/scan/*.md 2>/dev/null\` — 文档行数
|
|
15
|
+
4. 已有 3 份 → 建议升级深度扫描;已有 7 份 → 建议刷新或跳过
|
|
16
|
+
5. 工作区模式 → 询问扫描范围(逐个/选子项目/退出)
|
|
17
|
+
|
|
18
|
+
### 输出
|
|
19
|
+
工作区模式判断 + 已有文档状态 + 扫描建议`,
|
|
20
|
+
outputHint: '工作区和文档状态',
|
|
21
|
+
optional: false
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: '构建环境探测',
|
|
25
|
+
prompt: `探测项目的构建环境和依赖。
|
|
26
|
+
|
|
27
|
+
### 操作
|
|
28
|
+
1. \`cat package.json pom.xml build.gradle go.mod Cargo.toml requirements.txt pyproject.toml Gemfile composer.json 2>/dev/null\`
|
|
29
|
+
2. \`find . -maxdepth 2 -name "*.config.*" -not -path "*/node_modules/*" -not -path "*/.git/*" | head -20 | xargs cat 2>/dev/null\`
|
|
30
|
+
3. 结果保存到 \`docs/<project>/scan/_env-detect.md\`(临时文件,扫描完删除)
|
|
31
|
+
|
|
32
|
+
### 输出
|
|
33
|
+
环境探测结果摘要`,
|
|
34
|
+
outputHint: '环境探测摘要',
|
|
35
|
+
optional: false
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: '断点续扫检测',
|
|
39
|
+
prompt: `检测已有扫描文档,只生成缺失的。
|
|
40
|
+
|
|
41
|
+
### 操作
|
|
42
|
+
1. \`PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")\`
|
|
43
|
+
2. 检查 7 份文档是否存在:ARCHITECTURE、STRUCTURE、CONVENTIONS、INTEGRATIONS、TESTING、CONCERNS、PROJECT
|
|
44
|
+
3. 列出已有 ✅ 和缺失 ⬜
|
|
45
|
+
4. 只生成缺失的文档
|
|
46
|
+
|
|
47
|
+
### 输出
|
|
48
|
+
已有/缺失文档列表`,
|
|
49
|
+
outputHint: '断点续扫状态',
|
|
50
|
+
optional: false
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: '深度扫描 — 技术架构',
|
|
54
|
+
prompt: `扫描技术栈 + 数据库 Schema + 架构模式。参考 _env-detect.md。
|
|
55
|
+
|
|
56
|
+
### 操作
|
|
57
|
+
1. 用 grep/rg 搜索(\`@Entity\`、\`schema.prisma\`、\`models.py\` 等),**禁止读源码全文**
|
|
58
|
+
2. Schema 只记表名+说明+字段数
|
|
59
|
+
3. 写入 \`docs/<project>/scan/ARCHITECTURE.md\`
|
|
60
|
+
4. 包含 \`## 技术栈\` \`## 架构概览\` \`## 数据模型(摘要)\`
|
|
61
|
+
|
|
62
|
+
### 输出
|
|
63
|
+
ARCHITECTURE.md 路径
|
|
64
|
+
|
|
65
|
+
### 注意
|
|
66
|
+
- 路径用反引号,不编造`,
|
|
67
|
+
outputHint: 'ARCHITECTURE.md 路径',
|
|
68
|
+
optional: false
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: '深度扫描 — 代码约定',
|
|
72
|
+
prompt: `扫描框架隐形规则 + 实体继承 + 代码风格。参考 _env-detect.md。
|
|
73
|
+
|
|
74
|
+
### 操作
|
|
75
|
+
1. 用 grep 搜索拦截器/插件/逻辑删除/基类/审计字段,**禁止读源码全文**
|
|
76
|
+
2. 根据检测到的语言/框架自行决定搜索什么模式
|
|
77
|
+
3. 提取 3-5 个典型示例
|
|
78
|
+
4. 写入 \`docs/<project>/scan/CONVENTIONS.md\`
|
|
79
|
+
5. 包含 \`## 框架隐形规则\` \`## 实体继承规范\` \`## 代码风格\`
|
|
80
|
+
|
|
81
|
+
### 输出
|
|
82
|
+
CONVENTIONS.md 路径
|
|
83
|
+
|
|
84
|
+
### 注意
|
|
85
|
+
- 路径用反引号,不编造`,
|
|
86
|
+
outputHint: 'CONVENTIONS.md 路径',
|
|
87
|
+
optional: false
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: '深度扫描 — 目录结构和集成',
|
|
91
|
+
prompt: `扫描目录结构 + 外部集成。参考 _env-detect.md。
|
|
92
|
+
|
|
93
|
+
### 操作
|
|
94
|
+
1. 用 find/ls/tree 和 grep,**禁止读源码全文**
|
|
95
|
+
2. 搜索 API 调用、MQ 配置、缓存、第三方 SDK
|
|
96
|
+
3. 写入 \`docs/<project>/scan/STRUCTURE.md\`(目录树+模块说明)
|
|
97
|
+
4. 写入 \`docs/<project>/scan/INTEGRATIONS.md\`(按类型分组)
|
|
98
|
+
|
|
99
|
+
### 输出
|
|
100
|
+
STRUCTURE.md 和 INTEGRATIONS.md 路径
|
|
101
|
+
|
|
102
|
+
### 注意
|
|
103
|
+
- 路径用反引号,不编造`,
|
|
104
|
+
outputHint: 'STRUCTURE.md + INTEGRATIONS.md 路径',
|
|
105
|
+
optional: false
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: '深度扫描 — 测试和债务',
|
|
109
|
+
prompt: `扫描测试现状 + 技术债务 + 项目概览。参考 _env-detect.md。
|
|
110
|
+
|
|
111
|
+
### 操作
|
|
112
|
+
1. 用 grep 搜索测试文件、TODO/FIXME、过时依赖,**禁止读源码全文**
|
|
113
|
+
2. 写入 \`docs/<project>/scan/TESTING.md\`(测试结构)
|
|
114
|
+
3. 写入 \`docs/<project>/scan/CONCERNS.md\`(按严重程度分组)
|
|
115
|
+
4. 写入 \`docs/<project>/scan/PROJECT.md\`(项目信息)
|
|
116
|
+
|
|
117
|
+
### 输出
|
|
118
|
+
TESTING.md、CONCERNS.md、PROJECT.md 路径`,
|
|
119
|
+
outputHint: '三份文档路径',
|
|
120
|
+
optional: false
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: '自检和提交',
|
|
124
|
+
prompt: `验证扫描完整性,清理并提交。
|
|
125
|
+
|
|
126
|
+
### 操作
|
|
127
|
+
1. 检查 7 份文档是否全部生成
|
|
128
|
+
2. 自检门控:ARCHITECTURE(技术栈+Schema摘要)、CONVENTIONS(隐形规则+代码风格)、STRUCTURE(目录结构)、INTEGRATIONS(外部依赖)、TESTING(测试现状)、CONCERNS(技术债务)、PROJECT(项目概览)
|
|
129
|
+
3. 清理:\`rm -f docs/<project>/scan/_env-detect.md\`
|
|
130
|
+
4. \`git add . && git commit -m "chore: sillyspec scan - codebase mapped"\`
|
|
131
|
+
|
|
132
|
+
### 输出
|
|
133
|
+
扫描完整性报告 + commit hash
|
|
134
|
+
|
|
135
|
+
### 注意
|
|
136
|
+
- ❌ 修改代码 / 编造路径 / 读源码全文`,
|
|
137
|
+
outputHint: '自检报告 + commit hash',
|
|
138
|
+
optional: false
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export const definition = {
|
|
2
|
+
name: 'status',
|
|
3
|
+
title: '状态查看',
|
|
4
|
+
description: '查看项目进度和状态',
|
|
5
|
+
auxiliary: true,
|
|
6
|
+
steps: [
|
|
7
|
+
{
|
|
8
|
+
name: '检查工作区模式',
|
|
9
|
+
prompt: `判断是否为工作区模式。
|
|
10
|
+
|
|
11
|
+
### 操作
|
|
12
|
+
1. \`ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .\`
|
|
13
|
+
2. 是 → 工作区模式,对每个子项目执行状态检查
|
|
14
|
+
3. 否 → 单项目模式,继续后续步骤
|
|
15
|
+
|
|
16
|
+
### 工作区模式输出格式:
|
|
17
|
+
\`\`\`
|
|
18
|
+
🏢 工作区状态
|
|
19
|
+
📦 子项目:
|
|
20
|
+
✅ frontend ./frontend
|
|
21
|
+
📋 项目:已初始化
|
|
22
|
+
📂 代码库:已扫描(7 份文档)
|
|
23
|
+
🔄 进行中:1 个变更
|
|
24
|
+
⚠️ backend ./backend
|
|
25
|
+
📂 代码库:未扫描
|
|
26
|
+
📄 共享规范:2 份
|
|
27
|
+
\`\`\`
|
|
28
|
+
|
|
29
|
+
### 输出
|
|
30
|
+
工作区/单项目判断`,
|
|
31
|
+
outputHint: '模式判断',
|
|
32
|
+
optional: false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: '项目基础信息',
|
|
36
|
+
prompt: `收集项目基础信息。
|
|
37
|
+
|
|
38
|
+
### 操作
|
|
39
|
+
1. \`cat .sillyspec/PROJECT.md 2>/dev/null || echo "未初始化"\`
|
|
40
|
+
2. 获取 project 名
|
|
41
|
+
3. \`ls docs/<project>/scan/ 2>/dev/null | head -10\`
|
|
42
|
+
4. \`cat .sillyspec/REQUIREMENTS.md 2>/dev/null | head -20\`
|
|
43
|
+
5. \`cat .sillyspec/ROADMAP.md 2>/dev/null\`
|
|
44
|
+
|
|
45
|
+
### 输出
|
|
46
|
+
项目基础信息摘要`,
|
|
47
|
+
outputHint: '项目基础信息',
|
|
48
|
+
optional: false
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: '变更状态',
|
|
52
|
+
prompt: `检查进行中的变更和归档历史。
|
|
53
|
+
|
|
54
|
+
### 操作
|
|
55
|
+
1. \`ls .sillyspec/changes/ 2>/dev/null | grep -v archive\`
|
|
56
|
+
2. 对每个进行中的变更:检查 proposal.md ✅/❌、design.md ✅/❌、requirements.md ✅/❌、tasks.md — X/Y 完成
|
|
57
|
+
3. \`ls .sillyspec/changes/archive/ 2>/dev/null | wc -l\`
|
|
58
|
+
4. \`cat .sillyspec/HANDOFF.json 2>/dev/null\`
|
|
59
|
+
|
|
60
|
+
### 输出
|
|
61
|
+
变更状态列表`,
|
|
62
|
+
outputHint: '变更状态',
|
|
63
|
+
optional: false
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: '输出状态报告',
|
|
67
|
+
prompt: `生成完整状态报告。
|
|
68
|
+
|
|
69
|
+
### 输出格式:
|
|
70
|
+
\`\`\`
|
|
71
|
+
📊 SillySpec 状态
|
|
72
|
+
|
|
73
|
+
📋 项目:xxx(已初始化 / 未初始化)
|
|
74
|
+
📂 代码库:已扫描(7 份文档)/ 未扫描
|
|
75
|
+
|
|
76
|
+
🔄 进行中:N 个变更
|
|
77
|
+
- [change-1] Phase 3 (Execute) — tasks 5/8
|
|
78
|
+
|
|
79
|
+
✅ 已归档:N 个变更
|
|
80
|
+
📝 设计文档:N 份
|
|
81
|
+
📝 实现计划:N 份
|
|
82
|
+
|
|
83
|
+
💡 下一步:/sillyspec:continue
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
### 注意
|
|
87
|
+
- 不修改任何文件`,
|
|
88
|
+
outputHint: '状态报告',
|
|
89
|
+
optional: false
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|