sillyspec 3.7.31 → 3.7.33

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.
@@ -0,0 +1,105 @@
1
+ ---
2
+ description: 智能提交 — 自动收集变更信息,生成 commit message
3
+ argument-hint: "[可选:自定义 commit message]"
4
+ version: "3.7.32"
5
+ ---
6
+
7
+ ## 交互规范
8
+ 当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。
9
+
10
+ ## 用法
11
+ - /sillyspec:commit — 智能提交:自动收集变更信息,生成 commit message
12
+ - /sillyspec:commit "自定义 message" — 使用指定 message 直接提交
13
+
14
+ ## 任务
15
+ $ARGUMENTS
16
+
17
+ ---
18
+
19
+ ## 流程
20
+
21
+ ### 1. 检查是否有未提交的修改
22
+ git diff --quiet 2>/dev/null; UNSTAGED=$?
23
+ git diff --cached --quiet 2>/dev/null; STAGED=$?
24
+
25
+ 两者都为 0(无修改)→ 提示"没有需要提交的修改",结束。
26
+
27
+ ### 2. 暂存所有修改
28
+ git add -A
29
+
30
+ ### 3. 收集变更语义信息
31
+ # 上次 commit 时间
32
+ LAST_COMMIT_TIME=$(git log -1 --format=%ci 2>/dev/null)
33
+
34
+ # 修改的文件列表
35
+ git diff --cached --stat
36
+
37
+ 从以下来源收集语义信息(筛选时间戳 > LAST_COMMIT_TIME 的条目):
38
+
39
+ 来源 A — QUICKLOG(quick 产生的修改):
40
+ USER=$(git config user.name 2>/dev/null || echo "default")
41
+ cat .sillyspec/quicklog/QUICKLOG-${USER}.md 2>/dev/null
42
+ # 同时扫描活跃变更目录下的归属 quicklog
43
+ for dir in .sillyspec/changes/*/quicklog/*.md; do [ -f "$dir" ] && cat "$dir"; done 2>/dev/null
44
+
45
+ 来源 B — tasks.md(execute 产生的修改):
46
+ LATEST=$(ls -d .sillyspec/changes/*/ 2>/dev/null | grep -v archive | tail -1)
47
+ cat "$LATEST/tasks.md" 2>/dev/null
48
+ 筛选时间戳 > LAST_COMMIT_TIME 的已勾选 task。
49
+
50
+ 来源 C — 阶段产出(scan/brainstorm/plan/archive 等):
51
+ 检查 .sillyspec/ 下新增或修改的文件,根据路径识别来源阶段:
52
+ - docs/<project>/scan/*.md → scan 产出
53
+ - changes/<name>/design.md → brainstorm 产出
54
+ - changes/<name>/proposal.md → brainstorm 产出
55
+ - changes/<name>/tasks.md → plan 产出
56
+ - changes/<name>/plan.md → plan 产出
57
+ - changes/archive/ → archive 产出
58
+ - knowledge/*.md → 知识库更新
59
+
60
+ ### 4. 自动生成 commit message
61
+
62
+ 按 conventional commits 格式,根据来源生成 message:
63
+
64
+ | 来源 | type | 示例 |
65
+ |---|---|---|
66
+ | 只有 quick 条目 | fix/refactor | fix: 手机号校验修复(含正则修正) |
67
+ | 只有 execute 条目 | feat | feat(user): 用户模块 task 1~3 |
68
+ | 只有阶段产出 | docs | docs: sillyspec scan 完成 |
69
+ | 混合来源 | 取最主要的 type | body 里列出所有条目 |
70
+ | 无匹配来源 | — | 展示 diff stat,让用户自己写 |
71
+
72
+ **如果 $ARGUMENTS 非空**,直接使用用户指定的 message,跳过自动生成。
73
+
74
+ 多条 quick 合并规则:
75
+ - 2 条以内 → 逐条列出
76
+ - 3 条以上 → 摘要 + body 详情
77
+
78
+ ### 5. 展示确认
79
+
80
+ 用 AskUserQuestion 展示:
81
+ 📝 建议的 commit message:
82
+ fix: 手机号校验修复(含正则修正)
83
+
84
+ 📁 修改文件(N 个):
85
+ src/UserService.java (+15 -3)
86
+ src/PhoneValidator.java (+28 -0)
87
+
88
+ 选择:确认提交 / 编辑 message / 取消
89
+
90
+ 用户选择编辑 → 让用户输入新 message → 再次确认。
91
+
92
+ ### 6. 执行提交
93
+ git commit -m "{确认后的 message}"
94
+
95
+ 提交成功后展示 commit hash + 文件数 + 行数统计。
96
+
97
+ ## 多项目
98
+ 检查修改的文件分别属于哪个子项目:
99
+ - 修改集中在一个子项目 → 在该子项目目录中 commit
100
+ - 修改跨多个子项目 → 用 AskUserQuestion 让用户选择:分开提交(每个子项目一个 commit)/ 合并提交
101
+
102
+ ## 绝对规则
103
+ - ❌ 不要自动提交,必须展示 message 让用户确认
104
+ - ❌ 不要丢弃用户的修改
105
+ - ✅ $ARGUMENTS 非空时可跳过确认直接提交
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "3.7.31",
3
+ "version": "3.7.33",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "icon": "logo.jpg",
6
6
  "homepage": "https://sillyspec.ppdmq.top/",
package/src/init.js CHANGED
@@ -204,28 +204,6 @@ async function doInstall(projectDir, tools, subprojects = []) {
204
204
  } else {
205
205
  console.log(chalk.yellow(' ⚠ 未找到 skills 目录,跳过 Claude Code skills 同步'));
206
206
  }
207
-
208
- // 工作区配置
209
- const configPath = join(projectDir, '.sillyspec', 'config.yaml');
210
- if (!existsSync(configPath)) {
211
- let projectsYaml = '';
212
- if (subprojects.length > 0) {
213
- projectsYaml = subprojects.map(p =>
214
- ` ${p.name}:\n path: ${p.path}\n role: ${p.role || p.name}${p.repo ? `\n repo: ${p.repo}` : ''}`
215
- ).join('\n');
216
- }
217
-
218
- writeFileSync(configPath,
219
- `# SillySpec 工作区配置
220
- # 修改此文件后运行 /sillyspec:workspace 更新
221
-
222
- projects:
223
- ${projectsYaml || ' # 运行 /sillyspec:workspace add 添加子项目'}
224
-
225
- shared: []
226
- `
227
- );
228
- }
229
207
  }
230
208
 
231
209
  // ── 安装完成总结 ──
@@ -5,14 +5,14 @@ export const definition = {
5
5
  auxiliary: true,
6
6
  steps: [
7
7
  {
8
- name: '解析参数和上下文',
8
+ name: '理解任务',
9
9
  prompt: `解析任务参数,加载项目上下文。
10
10
 
11
11
  ### 操作
12
12
  1. 检查是否携带 \`--change <变更名>\`,确定记录方式
13
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\`
14
+ 3. 加载上下文:\`cat docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
15
+ 4. 如有需要,查询知识库:\`cat .sillyspec/knowledge/INDEX.md 2>/dev/null\`
16
16
 
17
17
  ### 输出
18
18
  任务理解 + 上下文摘要`,
@@ -20,57 +20,24 @@ export const definition = {
20
20
  optional: false
21
21
  },
22
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 流程实现任务。
23
+ name: '实现并验证',
24
+ prompt: `实现任务。
40
25
 
41
26
  ### 操作
42
27
  1. 先读后写:调用已有方法前 \`cat\` 源文件确认签名,\`grep\` 确认方法存在
43
- 2. 🔴 RED → 先写测试,运行确认失败
44
- 3. 🟢 GREEN → 写最少代码让测试通过
45
- 4. 🔵 REFACTOR → 清理,保持测试通过
46
- 5. ✅ STAGE → git add 暂存(测试文件必须包含)
47
-
48
- ### 纯配置/数据/文档可跳过 TDD,其他一律走 TDD。
28
+ 2. 写代码完成任务
29
+ 3. 如涉及逻辑变更,建议写单元测试验证(不强制,纯配置/文档/小改动可跳过)
30
+ 4. **不要编译!** 除非用户明确要求或改动量很大
49
31
 
50
32
  ### 输出
51
33
  实现摘要 + 修改文件列表
52
34
 
53
35
  ### 铁律
54
- - ❌ 不写测试(底线是仍然要写测试)
55
- - 修改无关文件
56
- - ❌ 跳过测试因为"任务太简单"`,
36
+ - 不要修改无关文件
37
+ - 不要编造不存在的 CLI 子命令`,
57
38
  outputHint: '实现摘要',
58
39
  optional: false
59
40
  },
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
41
  {
75
42
  name: '暂存和记录',
76
43
  prompt: `Git 暂存并记录任务。
@@ -1,7 +0,0 @@
1
- # SillySpec 工作区配置
2
- # 修改此文件后运行 /sillyspec:workspace 更新
3
-
4
- projects:
5
- # 运行 /sillyspec:workspace add 添加子项目
6
-
7
- shared: []
package/fix-input.js DELETED
@@ -1,15 +0,0 @@
1
- const fs = require('fs');
2
- const p = 'src/run.js';
3
- let c = fs.readFileSync(p, 'utf8');
4
-
5
- const old = `- 输出:${outputText}\n\``;
6
- const rep = `${inputText ? `- 输入:${inputText}\n` : ''}- 输出:${outputText}\n\``;
7
-
8
- const count = c.split(old).length - 1;
9
- console.log(`Found ${count} occurrences`);
10
-
11
- if (count > 0) {
12
- c = c.replaceAll(old, rep);
13
- fs.writeFileSync(p, c);
14
- console.log('Replaced');
15
- }