sillyspec 3.7.32 → 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.
- package/.claude/skills/sillyspec-commit/SKILL.md +105 -0
- package/package.json +1 -1
- package/src/init.js +0 -22
- package/.sillyspec/config.yaml +0 -7
|
@@ -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
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
|
// ── 安装完成总结 ──
|