sillyspec 2.4.4 → 2.5.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 (34) hide show
  1. package/.claude/commands/sillyspec/archive.md +14 -56
  2. package/.claude/commands/sillyspec/brainstorm.md +81 -483
  3. package/.claude/commands/sillyspec/continue.md +20 -30
  4. package/.claude/commands/sillyspec/execute.md +54 -173
  5. package/.claude/commands/sillyspec/explore.md +15 -68
  6. package/.claude/commands/sillyspec/export.md +10 -39
  7. package/.claude/commands/sillyspec/init.md +20 -127
  8. package/.claude/commands/sillyspec/plan.md +36 -187
  9. package/.claude/commands/sillyspec/propose.md +36 -186
  10. package/.claude/commands/sillyspec/quick.md +13 -48
  11. package/.claude/commands/sillyspec/resume.md +22 -79
  12. package/.claude/commands/sillyspec/scan.md +100 -511
  13. package/.claude/commands/sillyspec/status.md +16 -96
  14. package/.claude/commands/sillyspec/verify.md +22 -86
  15. package/.claude/commands/sillyspec/workspace.md +22 -95
  16. package/.sillyspec/config.yaml +13 -0
  17. package/package.json +7 -2
  18. package/src/index.js +2 -2
  19. package/src/init.js +232 -63
  20. package/templates/archive.md +14 -56
  21. package/templates/brainstorm.md +81 -483
  22. package/templates/continue.md +20 -30
  23. package/templates/execute.md +54 -173
  24. package/templates/explore.md +15 -68
  25. package/templates/export.md +10 -39
  26. package/templates/init.md +20 -127
  27. package/templates/plan.md +36 -187
  28. package/templates/propose.md +36 -186
  29. package/templates/quick.md +13 -48
  30. package/templates/resume.md +22 -79
  31. package/templates/scan.md +100 -511
  32. package/templates/status.md +16 -96
  33. package/templates/verify.md +22 -86
  34. package/templates/workspace.md +22 -95
@@ -1,117 +1,37 @@
1
- ---
1
+ ## 交互规范
2
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
+
4
+ ## 核心约束(必须遵守)
5
+ - ❌ 修改任何文件(只读)
2
6
 
3
- 你现在是 SillySpec 的状态检查器。
7
+ ---
4
8
 
5
9
  ## 流程
6
10
 
7
- ### 0: 检查工作区模式
11
+ ### Step 1: 检查工作区模式
8
12
 
9
13
  ```bash
10
14
  cat .sillyspec/config.yaml 2>/dev/null
11
15
  ```
12
16
 
13
- **如果是工作区模式:**
14
-
15
- 1. 读取 config.yaml 获取子项目列表
16
- 2. 对每个子项目执行 Step 1-5 的检查(在子项目目录下)
17
- 3. 检查共享规范:
18
- ```bash
19
- ls .sillyspec/shared/ 2>/dev/null
20
- ```
21
- 4. 检查工作区概览:
22
- ```bash
23
- ls .sillyspec/workspace/ 2>/dev/null
24
- ```
25
- 5. 输出汇总:
26
-
27
- ```
28
- 🏢 工作区状态
17
+ **工作区模式:** 读取 config.yaml 子项目列表,对每个子项目检查 PROJECT.md、codebase 文档数、进行中变更、归档数。检查共享规范和工作区概览。输出汇总后结束,不执行单项目流程。
29
18
 
30
- 📦 子项目:
19
+ **单项目模式:** 继续 Step 2。
31
20
 
32
- frontend ./frontend
33
- 📋 项目:已初始化
34
- 📂 代码库:已扫描(7 份文档)
35
- 🔄 进行中:1 个变更
36
- - [user-auth] Phase 3 (Execute) — tasks 5/8
37
- ✅ 已归档:3 个变更
21
+ ### Step 2-5: 单项目检查
38
22
 
39
- ⚠️ backend ./backend
40
- 📋 项目:已初始化
41
- 📂 代码库:未扫描
42
- 🔄 进行中:0 个变更
23
+ 1. **项目基础:** PROJECT.md、codebase 文档、REQUIREMENTS.md、ROADMAP.md
24
+ 2. **进行中变更:** 对每个变更检查 proposal/design/requirements/tasks 完成度
25
+ 3. **归档历史:** `ls .sillyspec/changes/archive/ | wc -l`
26
+ 4. **代码库文档:** `ls .sillyspec/codebase/`
43
27
 
44
- 📄 共享规范:2
45
- - api-contract.md
46
- - data-models.md
47
-
48
- 💡 下一步:
49
- - 扫描 backend:/sillyspec:scan backend
50
- - 继续开发:/sillyspec:continue
51
- ```
52
-
53
- 然后结束,不执行下面的单项目流程。
54
-
55
- **如果不是工作区模式:** 继续下面的单项目流程。
56
-
57
- ### 1. 项目基础
58
-
59
- ```bash
60
- cat .sillyspec/PROJECT.md 2>/dev/null || echo "未初始化"
61
- ls .sillyspec/codebase/ 2>/dev/null | head -10
62
- cat .sillyspec/REQUIREMENTS.md 2>/dev/null | head -20
63
- cat .sillyspec/ROADMAP.md 2>/dev/null
64
- ```
65
-
66
- ### 2. 进行中的变更
67
-
68
- ```bash
69
- ls .sillyspec/changes/ 2>/dev/null | grep -v archive
70
- ```
71
-
72
- 对每个进行中的变更,检查文件完成度:
73
- - proposal.md ✅/❌
74
- - design.md ✅/❌
75
- - specs/requirements.md ✅/❌
76
- - tasks.md — X/Y 完成
77
- - 对应计划 .sillyspec/plans/ ✅/❌
78
-
79
- ### 3. 归档历史
80
-
81
- ```bash
82
- ls .sillyspec/changes/archive/ 2>/dev/null | wc -l
83
- ```
84
-
85
- ### 4. 中断状态
86
-
87
- ```bash
88
- cat .sillyspec/HANDOFF.json 2>/dev/null
89
- ```
90
-
91
- ### 5. 代码库文档
92
-
93
- ```bash
94
- ls .sillyspec/codebase/ 2>/dev/null
95
- ```
96
-
97
- ### 6. 输出
28
+ ### Step 6: 输出
98
29
 
99
30
  ```
100
31
  📊 SillySpec 状态
101
-
102
- 📋 项目:xxx(已初始化 / 未初始化)
32
+ 📋 项目:xxx(已初始化/未初始化)
103
33
  📂 代码库:已扫描(7 份文档)/ 未扫描
104
-
105
34
  🔄 进行中:N 个变更
106
- - [change-1] Phase 3 (Execute) — tasks 5/8
107
- - [change-2] Phase 2 (Propose) — 缺少 design.md
108
-
109
35
  ✅ 已归档:N 个变更
110
- 📝 设计文档:N 份
111
- 📝 实现计划:N 份
112
-
113
36
  💡 下一步:/sillyspec:continue
114
37
  ```
115
-
116
- ## 绝对规则
117
- - 不修改任何文件
@@ -1,18 +1,21 @@
1
- 你现在是 SillySpec 的验证器。
1
+ ## 交互规范
2
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
2
3
 
3
- ## 🛑 流程控制(必须先执行)
4
+ ## 核心约束(必须遵守)
5
+ - ❌ 修改任何代码(只做检查和报告)
6
+ - ❌ 跳过状态检查
7
+ - ❌ 自行推进到下一阶段
4
8
 
5
- **在开始任何工作之前,先调用 SillySpec CLI 检查当前状态:**
9
+ ## 状态检查(必须先执行)
6
10
 
7
11
  ```bash
8
12
  sillyspec status --json
9
13
  ```
10
14
 
11
- **根据 CLI 返回的 phase 决定是否允许执行 verify:**
12
- - `phase: "verify"` 可以继续
13
- - 其他 phase → ❌ 不允许跳步,提示用户运行 `sillyspec next` 获取正确步骤
15
+ - `phase: "verify"` 继续
16
+ - 其他 phase → 提示 `sillyspec next`
14
17
 
15
- **不要跳过状态检查。不要自己推断阶段。以 CLI 为准。**
18
+ ---
16
19
 
17
20
  ## 流程
18
21
 
@@ -20,53 +23,28 @@ sillyspec status --json
20
23
 
21
24
  ```bash
22
25
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
23
- cat "$LATEST/proposal.md"
24
- cat "$LATEST/design.md"
25
- cat "$LATEST/tasks.md"
26
- cat "$LATEST/specs/requirements.md" 2>/dev/null
26
+ cat "$LATEST"/{proposal,design,tasks}.md "$LATEST/specs/requirements.md" 2>/dev/null
27
27
  ```
28
28
 
29
- ### 1.5 锚定确认(必须完成)
30
-
31
- 读取相关规范文件。对于存在的文件,确认理解;对于不存在的文件,标注跳过:
32
-
33
- ```
34
- 已读取并理解:
35
- - [x] proposal.md — 变更动机和范围(如果存在)
36
- - [x] design.md — 技术方案和文件变更(如果存在)
37
- - [x] tasks.md — 实现清单(如果存在)
38
- - [x] specs/requirements.md — 需求和场景(如果存在)
39
-
40
- 所有可用上下文已加载,开始验证。
41
- ```
42
-
43
- **文件不存在不是错误**。只确认实际存在的文件。不准跳过此步骤。
29
+ 锚定确认实际存在的文件。
44
30
 
45
31
  ### 2. 逐项检查 tasks.md
46
32
 
47
- 对每个 checkbox 报告状态:
48
- - ✅ 已完成 / ❌ 未完成 / ⚠️ 部分完成
33
+ 对每个 checkbox 报告:✅ 已完成 / ❌ 未完成 / ⚠️ 部分完成
49
34
 
50
35
  ### 3. 对照 design.md
51
36
 
52
- - 架构决策是否遵循?
53
- - 文件变更清单是否一致?
54
- - 数据模型是否符合?
55
- - API 设计是否符合?
37
+ 架构决策?文件变更一致性?数据模型?API 设计?
56
38
 
57
- ### 4. 运行完整测试套件(fresh run)
39
+ ### 4. 运行测试套件
58
40
 
59
41
  ```bash
60
- # 根据项目技术栈运行
61
42
  pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null || go test ./... 2>/dev/null
62
43
  ```
63
44
 
64
- 记录通过/失败数量。如有失败,分析原因。
65
-
66
45
  ### 5. 代码质量扫描
67
46
 
68
47
  ```bash
69
- # 搜索技术债务标记
70
48
  grep -r "TODO\|FIXME\|HACK\|XXX" src/ lib/ app/ --include="*.ts" --include="*.tsx" --include="*.py" --include="*.js" 2>/dev/null | head -20
71
49
  ```
72
50
 
@@ -74,63 +52,21 @@ grep -r "TODO\|FIXME\|HACK\|XXX" src/ lib/ app/ --include="*.ts" --include="*.ts
74
52
 
75
53
  ```markdown
76
54
  # SillySpec 验证报告
77
-
78
- ## 任务完成度
79
- - [x] Task 1: xxx ✅
80
- - [x] Task 2: xxx ✅
81
- - [ ] Task 3: xxx ❌ 未实现
82
- 完成度:2/3
83
-
55
+ ## 任务完成度:X/Y
84
56
  ## 设计一致性
85
- - 架构决策遵循
86
- - ⚠️ API 返回格式与 design.md 略有差异(缺少 error 字段)
87
-
88
- ## 测试结果
89
- - passed: 42, failed: 3
90
-
57
+ ## 测试结果:passed N, failed N
91
58
  ## 技术债务标记
92
- - src/auth/login.ts:15 // TODO: add rate limiting
93
- - src/auth/login.ts:45 // FIXME: token expiry
94
-
95
- ## 结论
96
- ⚠️ PASS WITH NOTES
59
+ ## 结论:✅ PASS / ⚠️ PASS WITH NOTES / ❌ FAIL
97
60
  ```
98
61
 
99
- ## 脚本校验(硬验证)
100
-
101
- 在输出验证报告之前,运行综合校验脚本:
102
-
103
- ```bash
104
- bash scripts/validate-all.sh
105
- ```
106
-
107
- 将脚本输出纳入验证报告中的"设计一致性"部分。
108
-
109
- ### 7. 最后说:
110
-
111
- **用 CLI 验证并获取下一步:**
112
-
113
62
  ```bash
114
- sillyspec status --json
63
+ bash scripts/validate-all.sh 2>/dev/null
115
64
  ```
116
65
 
117
- 展示结果给用户,然后:
66
+ ### 7. 完成
118
67
 
119
68
  ```bash
120
- sillyspec next
69
+ sillyspec status --json && sillyspec next
121
70
  ```
122
71
 
123
- CLI 返回的命令推荐给用户。**不要自己编建议。**
124
-
125
- ### 8. 更新 STATE.md
126
-
127
- verify 完成后,**必须自动更新** `.sillyspec/STATE.md`:
128
-
129
- - 当前阶段改为 `verify ✅` 或 `verify ⚠️`
130
- - 下一步改为 `/sillyspec:archive`(PASS 时)或 `修复后重新 /sillyspec:verify`
131
- - 如果是子阶段,更新阶段进度;如果全部阶段完成,下一步改为 `/sillyspec:archive`
132
- - 历史记录追加时间 + 验证结果
133
-
134
- ## 绝对规则
135
- - 不修改任何代码
136
- - 只做检查和报告
72
+ 更新 `.sillyspec/STATE.md`:阶段改为 `verify ✅` 或 `verify ⚠️`。
@@ -1,130 +1,57 @@
1
1
  ## 交互规范
2
-
3
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
4
3
 
5
- 不要用编号列表让用户手动输入数字。
6
- 如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
7
-
8
- ---
9
-
10
- 你现在是 SillySpec 的工作区管理器。
4
+ ## 核心约束(必须遵守)
5
+ - 修改子项目目录下的任何文件
6
+ - ❌ 写非法 YAML
7
+ - ❌ 使用绝对路径(必须是相对路径)
11
8
 
12
9
  ## 用户指令
13
10
  $ARGUMENTS
14
11
 
15
- ## 核心流程
12
+ ---
13
+
14
+ ## 流程
16
15
 
17
- ### Step 1: 检查工作区配置
16
+ ### Step 1: 检查配置
18
17
 
19
18
  ```bash
20
19
  cat .sillyspec/config.yaml 2>/dev/null
21
20
  ```
22
21
 
23
- 如果不存在这是一个尚未配置工作区的项目。询问用户:
24
- 1. 初始化工作区
25
- 2. 跳过
22
+ 不存在询问是否初始化工作区。
26
23
 
27
24
  ### Step 2: 解析指令
28
25
 
29
- 根据 `$ARGUMENTS` 或默认行为:
30
-
31
- - **无参数 / `status`**显示工作区状态
32
- - **`add`**添加子项目
33
- - **`remove`** → 移除子项目
34
- - **`info`** → 显示某个子项目详情
35
- - 无参数且 config.yaml 不存在 → 初始化工作区
26
+ - 无参数 / `status` → 显示状态
27
+ - `add` → 添加子项目
28
+ - `remove`移除子项目
29
+ - `info <name>` 子项目详情
36
30
 
37
- ### Step 3: 执行对应操作
31
+ ### Step 3: 执行操作
38
32
 
39
- #### 3a. 初始化工作区(config.yaml 不存在时)
33
+ **初始化工作区:** 询问名称 → 逐个添加子项目(名称、路径、角色描述,验证路径存在)→ 共享规范 → 生成 config.yaml + `.sillyspec/shared/`
40
34
 
41
- 1. 询问工作区名称(默认用当前目录名)
42
- 2. 逐个添加子项目:
43
- - 询问子项目名称(如 `frontend`、`backend`)
44
- - 询问子项目路径(相对于工作区根目录,如 `./frontend`)
45
- - 询问子项目角色描述(如 `前端 - Vue3 + TypeScript`)
46
- - 验证路径存在
47
- 添加完后询问:
48
- > 1. 继续添加子项目
49
- > 2. 完成,配置共享规范
50
- 3. 询问共享规范文件
51
- 4. 生成 `.sillyspec/config.yaml`
52
- 5. 创建 `.sillyspec/shared/` 目录
35
+ **添加/移除子项目:** 更新 config.yaml,Git 提交。
53
36
 
54
- #### 3b. 添加子项目(`add`)
37
+ **状态显示:** 读取每个子项目的 `.sillyspec/` 内容(PROJECT.md、codebase 文档数、进行中变更),输出格式:
55
38
 
56
- 1. 询问名称、路径、角色
57
- 2. 验证路径存在
58
- 3. 更新 `.sillyspec/config.yaml` 中的 `projects` 字段
59
- 4. Git 提交
60
-
61
- #### 3c. 移除子项目(`remove`)
62
-
63
- 1. 显示当前所有子项目列表
64
- 2. 询问要移除哪个:
65
- > 1. (列出子项目名称)
66
- > 2. 取消
67
- 3. 从 config.yaml 中删除对应条目
68
- 4. Git 提交
69
-
70
- #### 3d. 工作区状态(`status`,默认)
71
-
72
- 读取 config.yaml,对每个子项目检查:
73
-
74
- ```bash
75
- # 对每个子项目
76
- cd <子项目路径>
77
- ls .sillyspec/ 2>/dev/null
78
- cat .sillyspec/PROJECT.md 2>/dev/null
79
- ls .sillyspec/codebase/ 2>/dev/null | wc -l
80
39
  ```
81
-
82
- 输出格式:
83
-
84
- ```
85
- 🏢 工作区:<workspace-name>
86
-
40
+ 🏢 工作区:<name>
87
41
  📦 子项目(N 个):
88
- ✅ frontend ./frontend 前端 - Vue3 + TypeScript 已扫描(7 份文档)
89
- ⚠️ backend ./backend 后端 - Node.js 已初始化(未扫描)
90
- ❌ miniprogram ./miniprogram 小程序 - Taro 未初始化
91
-
42
+ ✅ frontend ./frontend 前端 - Vue3+TS 已扫描(7 份文档)
43
+ ⚠️ backend ./backend 后端 - Node.js 已初始化(未扫描)
92
44
  📄 共享规范:2 份
93
- - api-contract.md
94
- - data-models.md
95
-
96
- 💡 操作:
97
- /sillyspec:workspace add — 添加子项目
98
- /sillyspec:workspace remove — 移除子项目
99
- /sillyspec:init — 初始化子项目
100
- /sillyspec:scan — 扫描子项目
45
+ 💡 操作:/sillyspec:workspace add | /sillyspec:init | /sillyspec:scan
101
46
  ```
102
47
 
103
- #### 3e. 子项目详情(`info <name>`)
104
-
105
- 显示指定子项目的详细信息,包括 PROJECT.md、REQUIREMENTS.md 内容摘要、代码库文档列表。
106
-
107
- ### Step 4: config.yaml 格式
108
-
109
- 保持标准格式:
48
+ ### config.yaml 格式
110
49
 
111
50
  ```yaml
112
51
  projects:
113
52
  <name>:
114
53
  path: <relative-path>
115
54
  role: <description>
116
-
117
55
  shared:
118
56
  - <filename.md>
119
57
  ```
120
-
121
- ### 最后说:
122
-
123
- > 工作区已更新。
124
- > 下一步:对子项目运行 `/sillyspec:init` 或 `/sillyspec:scan`。
125
-
126
- ## 绝对规则
127
- - 不修改子项目目录下的任何文件
128
- - config.yaml 必须是合法 YAML
129
- - 子项目路径必须是相对于工作区根目录的相对路径
130
- - 路径必须验证存在性
@@ -0,0 +1,13 @@
1
+ # SillySpec 工作区配置
2
+ # 修改此文件后运行 /sillyspec:workspace 更新
3
+
4
+ projects: {}
5
+ # 示例:
6
+ # frontend:
7
+ # path: ./frontend
8
+ # role: 前端 - Vue3 + TypeScript
9
+ # backend:
10
+ # path: ./backend
11
+ # role: 后端 - Node.js + PostgreSQL
12
+
13
+ shared: []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "2.4.4",
3
+ "version": "2.5.0",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,5 +16,10 @@
16
16
  "cursor",
17
17
  "spec-driven"
18
18
  ],
19
- "license": "MIT"
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "@inquirer/prompts": "^7.10.1",
22
+ "chalk": "^5.6.2",
23
+ "ora": "^9.3.0"
24
+ }
20
25
  }
package/src/index.js CHANGED
@@ -498,7 +498,7 @@ SillySpec CLI — 流程状态机
498
498
  `);
499
499
  }
500
500
 
501
- function main() {
501
+ async function main() {
502
502
  const args = process.argv.slice(2);
503
503
 
504
504
  if (args.length === 0 || args[0] === 'help' || args[0] === '--help' || args[0] === '-h') {
@@ -548,7 +548,7 @@ function main() {
548
548
  cmdCheck(dir, { json });
549
549
  break;
550
550
  case 'init':
551
- cmdInit(dir, { tool, workspace });
551
+ await cmdInit(dir, { tool, workspace });
552
552
  break;
553
553
  default:
554
554
  console.error(`❌ 未知命令: ${command}`);