@zhouhao4221/devflow-skills 0.2.0 → 0.3.1
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/README.md +57 -235
- package/install.js +406 -116
- package/package.json +2 -1
- package/plugins/api/skills/api/SKILL.md +102 -0
- package/plugins/api/skills/api-field-mapper/SKILL.md +95 -0
- package/plugins/api/skills/config/SKILL.md +140 -0
- package/plugins/api/skills/gen/SKILL.md +345 -0
- package/plugins/api/skills/help/SKILL.md +121 -0
- package/plugins/api/skills/import/SKILL.md +95 -0
- package/plugins/api/skills/map/SKILL.md +152 -0
- package/plugins/api/skills/search/SKILL.md +95 -0
- package/plugins/diag/skills/audit/SKILL.md +103 -0
- package/plugins/diag/skills/diag/SKILL.md +41 -0
- package/plugins/diag/skills/diagnose/SKILL.md +167 -0
- package/plugins/diag/skills/init/SKILL.md +142 -0
- package/plugins/diag/skills/stack-analyzer/SKILL.md +150 -0
- package/plugins/pm/skills/ask/SKILL.md +89 -0
- package/plugins/pm/skills/brief/SKILL.md +95 -0
- package/plugins/pm/skills/export/SKILL.md +93 -0
- package/plugins/pm/skills/help/SKILL.md +257 -0
- package/plugins/pm/skills/milestone/SKILL.md +102 -0
- package/plugins/pm/skills/monthly/SKILL.md +111 -0
- package/plugins/pm/skills/plan/SKILL.md +96 -0
- package/plugins/pm/skills/pm/SKILL.md +174 -0
- package/plugins/pm/skills/progress/SKILL.md +113 -0
- package/plugins/pm/skills/report-generator/SKILL.md +104 -0
- package/plugins/pm/skills/risk/SKILL.md +223 -0
- package/plugins/pm/skills/standup/SKILL.md +96 -0
- package/plugins/pm/skills/stats/SKILL.md +158 -0
- package/plugins/pm/skills/weekly/SKILL.md +157 -0
- package/plugins/req/skills/branch/SKILL.md +447 -0
- package/plugins/req/skills/cache/SKILL.md +232 -0
- package/plugins/req/skills/changelog/SKILL.md +187 -0
- package/plugins/req/skills/changelog-generator/SKILL.md +106 -0
- package/plugins/req/skills/code-impact-analyzer/SKILL.md +48 -0
- package/plugins/req/skills/commit/SKILL.md +308 -0
- package/plugins/req/skills/dev/SKILL.md +229 -0
- package/plugins/req/skills/dev-guide/SKILL.md +530 -0
- package/plugins/req/skills/do/SKILL.md +191 -0
- package/plugins/req/skills/done/SKILL.md +95 -0
- package/plugins/req/skills/edit/SKILL.md +187 -0
- package/plugins/req/skills/fix/SKILL.md +300 -0
- package/plugins/req/skills/help/SKILL.md +136 -0
- package/plugins/req/skills/init/SKILL.md +505 -0
- package/plugins/req/skills/issue/SKILL.md +237 -0
- package/plugins/req/skills/issue-guide/SKILL.md +125 -0
- package/plugins/req/skills/migrate/SKILL.md +128 -0
- package/plugins/req/skills/modules/SKILL.md +195 -0
- package/plugins/req/skills/natural-language-dispatcher/SKILL.md +545 -0
- package/plugins/req/skills/new/SKILL.md +172 -0
- package/plugins/req/skills/new-quick/SKILL.md +246 -0
- package/plugins/req/skills/pr/SKILL.md +157 -0
- package/plugins/req/skills/prd/SKILL.md +187 -0
- package/plugins/req/skills/prd-analyzer/SKILL.md +131 -0
- package/plugins/req/skills/prd-edit/SKILL.md +201 -0
- package/plugins/req/skills/projects/SKILL.md +115 -0
- package/plugins/req/skills/quick-fix-guide/SKILL.md +51 -0
- package/plugins/req/skills/release/SKILL.md +300 -0
- package/plugins/req/skills/release-rationale/SKILL.md +213 -0
- package/plugins/req/skills/req/SKILL.md +173 -0
- package/plugins/req/skills/requirement-analyzer/SKILL.md +274 -0
- package/plugins/req/skills/review/SKILL.md +201 -0
- package/plugins/req/skills/review-pr/SKILL.md +699 -0
- package/plugins/req/skills/show/SKILL.md +302 -0
- package/plugins/req/skills/specs/SKILL.md +99 -0
- package/plugins/req/skills/split/SKILL.md +164 -0
- package/plugins/req/skills/status/SKILL.md +184 -0
- package/plugins/req/skills/test/SKILL.md +431 -0
- package/plugins/req/skills/test-guide/SKILL.md +304 -0
- package/plugins/req/skills/test_new/SKILL.md +417 -0
- package/plugins/req/skills/test_regression/SKILL.md +298 -0
- package/plugins/req/skills/update/SKILL.md +131 -0
- package/plugins/req/skills/update-template/SKILL.md +203 -0
- package/plugins/req/skills/upgrade/SKILL.md +178 -0
- package/plugins/req/skills/use/SKILL.md +158 -0
- package/plugins/req/skills/version-bumper/SKILL.md +113 -0
- package/plugins/uat/skills/bug/SKILL.md +153 -0
- package/plugins/uat/skills/init/SKILL.md +88 -0
- package/plugins/uat/skills/new/SKILL.md +131 -0
- package/plugins/uat/skills/report/SKILL.md +48 -0
- package/plugins/uat/skills/run/SKILL.md +78 -0
- package/plugins/uat/skills/uat/SKILL.md +64 -0
- package/plugins/uat/skills/uat-executor/SKILL.md +299 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: changelog
|
|
3
|
+
description: |
|
|
4
|
+
生成版本说明 - 基于 Git 记录生成 Changelog
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 生成版本说明
|
|
8
|
+
|
|
9
|
+
根据 Git 提交记录和已完成需求,生成版本升级说明文档。
|
|
10
|
+
|
|
11
|
+
> 此命令**不受仓库角色限制**,readonly 仓库也可执行。
|
|
12
|
+
> 生成的文件保存在 `docs/changelogs/` 目录,不触发缓存同步。
|
|
13
|
+
|
|
14
|
+
## 命令格式
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/req:changelog <version> [--from=<tag|commit>] [--to=<tag|commit>]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**参数说明:**
|
|
21
|
+
- `<version>`:**必填**,版本号(如 `v1.2.0`、`1.2.0`)
|
|
22
|
+
- `--from`:可选,起始点(tag 或 commit hash),默认为上一个 git tag
|
|
23
|
+
- `--to`:可选,结束点(tag 或 commit hash),默认为 HEAD
|
|
24
|
+
|
|
25
|
+
**示例:**
|
|
26
|
+
- `/req:changelog v1.2.0` — 从上一个 tag 到 HEAD
|
|
27
|
+
- `/req:changelog v1.2.0 --from=v1.1.0` — 从 v1.1.0 到 HEAD
|
|
28
|
+
- `/req:changelog v1.2.0 --from=v1.1.0 --to=v1.2.0` — 指定完整范围
|
|
29
|
+
- `/req:changelog v1.2.0 --from=abc1234` — 从某个 commit 开始
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 执行流程
|
|
34
|
+
|
|
35
|
+
### 1. 参数校验
|
|
36
|
+
|
|
37
|
+
`version` 必填,缺失时打印用法后退出。
|
|
38
|
+
|
|
39
|
+
### 2. 确定 Git 范围
|
|
40
|
+
|
|
41
|
+
> **被 `/req:release` 调用时**:`/req:release` 会显式传入 `--from`,跳过下面的自动检测链,draft 模式对本步无影响。
|
|
42
|
+
> **用户手动调用时**:走下方 draft-aware 回退链。
|
|
43
|
+
|
|
44
|
+
`TO_REF` 默认 HEAD。`FROM_REF` 按以下优先级解析(v3.0.0+ 新增 draft 感知):
|
|
45
|
+
|
|
46
|
+
1. `--from` 参数显式指定 → 直接使用
|
|
47
|
+
2. 查询平台最近一个 Release(含 draft)的 target SHA → 仅当 `repoType` 为 gitea / github 且 API 可达时;打印所用 Release 名称
|
|
48
|
+
3. `git describe` 取最近一个本地 git tag;若同时存在未 publish 的 draft release,打印 ⚠️ 提示(changelog 范围可能与预期不一致,建议显式传 `--from=<draft-target-sha>`)
|
|
49
|
+
4. 仓库首次 commit → 无任何 tag 时的兜底,打印 ⚠️ 警告
|
|
50
|
+
|
|
51
|
+
**为什么要 draft 感知**:v3.0.0 起 `/req:release` 默认 draft,不再本地打 tag。如果用户先跑 `/req:release v1.2.0`(draft 未 publish)→ 后跑 `/req:changelog v1.3.0`,原来的 `git describe` 会返回更早的 tag(比如 `v1.1.0`),导致 v1.3.0 的 changelog 多包含了一整个版本的 commits。新回退链优先读平台 Release(含 draft)的 SHA,或在走 git tag 回退时警告用户。
|
|
52
|
+
|
|
53
|
+
**repoType=other 的行为**:仍走原有 `git describe` 链,无 draft 感知(`other` 类型无 API 可查)。
|
|
54
|
+
|
|
55
|
+
### 3. 读取 Git 提交记录
|
|
56
|
+
|
|
57
|
+
从 `FROM_REF..TO_REF` 范围内(不含 merge commit)提取:短 hash、提交日期、提交消息。
|
|
58
|
+
|
|
59
|
+
### 4. 按提交前缀分类
|
|
60
|
+
|
|
61
|
+
将提交按前缀分类(中文优先,兼容英文):
|
|
62
|
+
|
|
63
|
+
| 中文前缀 | 英文前缀 | 分类 |
|
|
64
|
+
|---------|---------|------|
|
|
65
|
+
| `新功能` | `feat` | 新功能 (Features) |
|
|
66
|
+
| `修复` | `fix` | 问题修复 (Bug Fixes) |
|
|
67
|
+
| `重构` | `refactor` | 重构优化 (Refactoring) |
|
|
68
|
+
| `优化` | `perf` | 性能优化 (Performance) |
|
|
69
|
+
| `文档` | `docs` | 文档更新 (Documentation) |
|
|
70
|
+
| `测试` | `test` | 测试 (Tests) |
|
|
71
|
+
| `构建`/`样式` | `chore`/`ci`/`build`/`style` | 其他变更 (Others) |
|
|
72
|
+
| 无前缀/不识别 | 无前缀/不识别 | 其他变更 (Others) |
|
|
73
|
+
|
|
74
|
+
**分类规则:**
|
|
75
|
+
- 按 `前缀: 描述` 格式解析(中文或英文前缀均可)
|
|
76
|
+
- 无法识别前缀的统一归入「其他变更」
|
|
77
|
+
- 空分类不输出对应章节
|
|
78
|
+
|
|
79
|
+
### 5. 关联已完成需求
|
|
80
|
+
|
|
81
|
+
按 `requirementRole` 确定需求目录(readonly → 全局缓存;primary → 本地,不存在时回退缓存)。从 commit messages 中提取 `REQ-XXX` / `QUICK-XXX` 编号,读取对应需求文档的标题和类型。同时扫描 active/ 目录(需求可能尚未完成但已有 commit)。
|
|
82
|
+
|
|
83
|
+
### 6. 检查目标文件
|
|
84
|
+
|
|
85
|
+
目标路径固定为 `docs/changelogs/<version>.md`,目录不存在时自动创建。文件已存在时询问用户是否覆盖。
|
|
86
|
+
|
|
87
|
+
### 7. 生成版本说明文档
|
|
88
|
+
|
|
89
|
+
使用 Write 工具生成 `$OUTPUT_DIR/<version>.md`,格式如下:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
# <version> 版本说明
|
|
93
|
+
|
|
94
|
+
> 发布日期:YYYY-MM-DD
|
|
95
|
+
> 版本范围:<from-ref>..<to-ref>
|
|
96
|
+
> 提交数量:N
|
|
97
|
+
|
|
98
|
+
## 关联需求
|
|
99
|
+
|
|
100
|
+
| 编号 | 标题 | 类型 |
|
|
101
|
+
|------|------|------|
|
|
102
|
+
| REQ-XXX | 需求标题 | 后端 |
|
|
103
|
+
| QUICK-XXX | 快速修复标题 | 全栈 |
|
|
104
|
+
|
|
105
|
+
## 新功能 (Features)
|
|
106
|
+
|
|
107
|
+
- 描述 (`hash`)
|
|
108
|
+
|
|
109
|
+
## 问题修复 (Bug Fixes)
|
|
110
|
+
|
|
111
|
+
- 描述 (`hash`)
|
|
112
|
+
|
|
113
|
+
## 重构优化 (Refactoring)
|
|
114
|
+
|
|
115
|
+
- 描述 (`hash`)
|
|
116
|
+
|
|
117
|
+
## 性能优化 (Performance)
|
|
118
|
+
|
|
119
|
+
- 描述 (`hash`)
|
|
120
|
+
|
|
121
|
+
## 其他变更
|
|
122
|
+
|
|
123
|
+
- 描述 (`hash`)
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
*由 /req:changelog 自动生成*
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**格式规则:**
|
|
130
|
+
- 没有匹配提交的分类章节**不输出**(不保留空章节)
|
|
131
|
+
- 没有关联需求时**不输出**「关联需求」章节
|
|
132
|
+
- 每条提交包含简短 hash 方便回溯
|
|
133
|
+
- 提交按时间倒序排列(最新在前)
|
|
134
|
+
|
|
135
|
+
### 8. 输出生成报告
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
✅ 版本说明已生成!
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
Changelog:<version>
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
版本信息
|
|
145
|
+
版本号:<version>
|
|
146
|
+
发布日期:YYYY-MM-DD
|
|
147
|
+
版本范围:<from-ref>..<to-ref>
|
|
148
|
+
提交数量:N
|
|
149
|
+
|
|
150
|
+
变更统计
|
|
151
|
+
新功能:X
|
|
152
|
+
问题修复:X
|
|
153
|
+
重构优化:X
|
|
154
|
+
性能优化:X
|
|
155
|
+
其他变更:X
|
|
156
|
+
|
|
157
|
+
关联需求:X 个
|
|
158
|
+
REQ-001 需求标题
|
|
159
|
+
QUICK-003 快速修复标题
|
|
160
|
+
|
|
161
|
+
文件位置
|
|
162
|
+
$OUTPUT_DIR/<version>.md
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
后续操作:
|
|
167
|
+
- 查看文件:cat $OUTPUT_DIR/<version>.md
|
|
168
|
+
- 重新生成:/req:changelog <version> --from=<tag>
|
|
169
|
+
- 创建 git tag:git tag <version>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 边界情况处理
|
|
175
|
+
|
|
176
|
+
| 场景 | 处理方式 |
|
|
177
|
+
|------|---------|
|
|
178
|
+
| 没有 git tag | 从仓库首次提交开始,显示警告 |
|
|
179
|
+
| 范围内无提交 | 终止操作,提示范围无效 |
|
|
180
|
+
| 文件已存在 | 询问用户是否覆盖 |
|
|
181
|
+
| 无关联需求 | 省略「关联需求」章节 |
|
|
182
|
+
| commit 不遵循 conventional commits | 归入「其他变更」 |
|
|
183
|
+
| changelog 目录不存在 | 自动创建 `docs/changelogs/` |
|
|
184
|
+
|
|
185
|
+
## 用户输入
|
|
186
|
+
|
|
187
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: changelog-generator
|
|
3
|
+
description: |
|
|
4
|
+
版本说明生成助手。仅在执行 /req:changelog 命令时触发。
|
|
5
|
+
根据 Git 提交记录自动分类并生成结构化的版本升级说明。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 版本说明生成助手
|
|
9
|
+
|
|
10
|
+
根据 Git 提交记录生成结构化的版本升级说明(Changelog)。
|
|
11
|
+
|
|
12
|
+
## 触发条件
|
|
13
|
+
|
|
14
|
+
仅在执行 `/req:changelog` 命令时触发。
|
|
15
|
+
|
|
16
|
+
## 工作流程
|
|
17
|
+
|
|
18
|
+
### 1. 收集 Git 提交
|
|
19
|
+
|
|
20
|
+
使用 Bash 工具执行 git 命令,获取指定范围内的提交记录:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 获取提交列表(不含 merge commits)
|
|
24
|
+
git log <from>..<to> --pretty=format:"%h|%ai|%s" --no-merges
|
|
25
|
+
|
|
26
|
+
# 获取变更文件统计
|
|
27
|
+
git diff --stat <from>..<to>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2. 解析提交前缀
|
|
31
|
+
|
|
32
|
+
按 `前缀: 描述` 格式解析每条提交消息,同时兼容英文 Conventional Commits 格式:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
输入:新功能: 实现部门渠道关联 (REQ-001)
|
|
36
|
+
解析:type=新功能, message=实现部门渠道关联, req=REQ-001
|
|
37
|
+
|
|
38
|
+
输入:feat: add user login
|
|
39
|
+
解析:type=feat→新功能, message=add user login
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**分类映射(中文优先,兼容英文):**
|
|
43
|
+
|
|
44
|
+
| 中文前缀 | 英文前缀 | 章节标题 | 优先级 |
|
|
45
|
+
|---------|---------|---------|--------|
|
|
46
|
+
| `新功能` | `feat` | 新功能 (Features) | 1 |
|
|
47
|
+
| `修复` | `fix` | 问题修复 (Bug Fixes) | 2 |
|
|
48
|
+
| `重构` | `refactor` | 重构优化 (Refactoring) | 3 |
|
|
49
|
+
| `优化` | `perf` | 性能优化 (Performance) | 4 |
|
|
50
|
+
| `文档` | `docs` | 文档更新 (Documentation) | 5 |
|
|
51
|
+
| `测试` | `test` | 测试 (Tests) | 6 |
|
|
52
|
+
| `构建`/`样式` | `chore`/`ci`/`build`/`style` | 其他变更 (Others) | 7 |
|
|
53
|
+
| 无前缀/不识别 | 无前缀/不识别 | 其他变更 (Others) | 7 |
|
|
54
|
+
|
|
55
|
+
### 3. 提取关联需求编号
|
|
56
|
+
|
|
57
|
+
从 commit messages 中提取需求编号:
|
|
58
|
+
|
|
59
|
+
- 正则:`(REQ-\d+|QUICK-\d+)`
|
|
60
|
+
- 去重后查找对应需求文档
|
|
61
|
+
- 读取需求标题和类型字段
|
|
62
|
+
|
|
63
|
+
### 4. 生成 Changelog 内容
|
|
64
|
+
|
|
65
|
+
**输出格式:**
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
# <version> 版本说明
|
|
69
|
+
|
|
70
|
+
> 发布日期:YYYY-MM-DD
|
|
71
|
+
> 版本范围:<from>..<to>
|
|
72
|
+
> 提交数量:N
|
|
73
|
+
|
|
74
|
+
## 关联需求
|
|
75
|
+
|
|
76
|
+
| 编号 | 标题 | 类型 |
|
|
77
|
+
|------|------|------|
|
|
78
|
+
| REQ-XXX | 需求标题 | 后端 |
|
|
79
|
+
|
|
80
|
+
## 新功能 (Features)
|
|
81
|
+
|
|
82
|
+
- 描述 (`hash`)
|
|
83
|
+
- 描述 (`hash`)
|
|
84
|
+
|
|
85
|
+
## 问题修复 (Bug Fixes)
|
|
86
|
+
|
|
87
|
+
- 描述 (`hash`)
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
*由 /req:changelog 自动生成*
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 5. 格式规则
|
|
94
|
+
|
|
95
|
+
1. **空分类不输出**:没有匹配提交的分类章节直接省略
|
|
96
|
+
2. **无关联需求不输出**:没有 REQ/QUICK 引用时省略「关联需求」章节
|
|
97
|
+
3. **提交倒序排列**:最新的提交在前
|
|
98
|
+
4. **去除前缀**:输出时去掉 `新功能:` 等前缀,仅保留描述内容
|
|
99
|
+
5. **hash 用反引号包裹**:方便区分和查找
|
|
100
|
+
|
|
101
|
+
## 内容优化原则
|
|
102
|
+
|
|
103
|
+
1. **保留原始 commit message**:不修改、不美化提交描述
|
|
104
|
+
2. **去除重复**:同一 scope 下相似描述只保留一条(如 merge 导致的重复)
|
|
105
|
+
3. **Breaking Changes 高亮**:如果 commit 包含 `BREAKING CHANGE` 或 `!`,在对应条目前加 **⚠️ BREAKING**
|
|
106
|
+
4. **Co-authored 提交**:保留主提交消息,忽略 co-author 信息
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-impact-analyzer
|
|
3
|
+
description: |
|
|
4
|
+
代码影响分析器。当需求变更、功能调整、用户提到"影响范围"、"改动评估"、
|
|
5
|
+
"这个改动会影响哪里"、"风险评估"时自动触发。分析变更对现有代码的影响。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 代码影响分析器
|
|
9
|
+
|
|
10
|
+
分析需求变更或代码修改对系统的影响范围。
|
|
11
|
+
|
|
12
|
+
## 分析维度
|
|
13
|
+
|
|
14
|
+
### 1. 直接影响
|
|
15
|
+
- 需要修改的文件列表
|
|
16
|
+
- 代码行数估算(新增/修改/删除)
|
|
17
|
+
|
|
18
|
+
### 2. 间接影响
|
|
19
|
+
- 调用链上下游
|
|
20
|
+
- 被调用方
|
|
21
|
+
- 共享数据影响
|
|
22
|
+
|
|
23
|
+
### 3. 接口兼容性
|
|
24
|
+
- 参数变更(新增/修改/删除)
|
|
25
|
+
- 向后兼容性评估
|
|
26
|
+
- 前端影响
|
|
27
|
+
|
|
28
|
+
### 4. 数据迁移
|
|
29
|
+
- 表结构变更
|
|
30
|
+
- 数据迁移需求
|
|
31
|
+
- 回滚方案
|
|
32
|
+
|
|
33
|
+
### 5. 风险评估
|
|
34
|
+
- 风险等级(低/中/高)
|
|
35
|
+
- 风险点列表
|
|
36
|
+
- 缓解措施
|
|
37
|
+
|
|
38
|
+
### 6. 测试建议
|
|
39
|
+
- 必测项
|
|
40
|
+
- 回归测试范围
|
|
41
|
+
- 性能测试需求
|
|
42
|
+
|
|
43
|
+
## 分析原则
|
|
44
|
+
|
|
45
|
+
1. **全面性**:覆盖所有可能的影响点
|
|
46
|
+
2. **准确性**:基于代码实际调用关系
|
|
47
|
+
3. **可操作性**:给出具体的应对措施
|
|
48
|
+
4. **风险导向**:重点关注高风险变更
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commit
|
|
3
|
+
description: |
|
|
4
|
+
规范提交 - 生成 Conventional Commits 格式的 Git 提交
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 规范提交
|
|
8
|
+
|
|
9
|
+
生成符合 Conventional Commits 规范的 Git 提交,自动关联当前需求编号,便于后续 `/req:changelog` 生成版本说明。
|
|
10
|
+
|
|
11
|
+
> **Audience:** Engineer
|
|
12
|
+
> 此命令**不受仓库角色限制**,readonly 仓库也可执行。
|
|
13
|
+
> 不触发缓存同步。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 绝对禁止:在保护分支上执行 git commit
|
|
18
|
+
|
|
19
|
+
**执行本命令时,第一件事是检查当前分支。如果在保护分支上,绝对不允许执行 git add 或 git commit。必须先切换到功能分支。**
|
|
20
|
+
|
|
21
|
+
保护分支 = `branchStrategy.mainBranch`(如 main/master)或 `branchStrategy.developBranch`(如 develop)。
|
|
22
|
+
|
|
23
|
+
未配置 `branchStrategy` 时,不做分支检查。
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 命令格式
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
/req:commit [消息]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**示例:**
|
|
34
|
+
- `/req:commit` — 交互式选择类型并生成提交
|
|
35
|
+
- `/req:commit 实现部门渠道关联` — 自动分析变更并生成提交
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 执行流程
|
|
40
|
+
|
|
41
|
+
### 1. 分支检查(在任何 git 操作之前)
|
|
42
|
+
|
|
43
|
+
读取 `.claude/settings.local.json` 的 `branchStrategy`,未配置时跳过。获取当前分支名,判断是否等于 `mainBranch` 或 `developBranch`:
|
|
44
|
+
|
|
45
|
+
- **否(feat/*、fix/*、hotfix/* 等)** → 当前分支是安全的,直接跳到步骤 2 正常提交。
|
|
46
|
+
- **是** → 当前在保护分支,**禁止提交**,执行以下操作:
|
|
47
|
+
|
|
48
|
+
**保护分支处理流程:**
|
|
49
|
+
|
|
50
|
+
按优先级推断当前改动关联的需求:
|
|
51
|
+
|
|
52
|
+
**第 1 步:从当前改动的文件推断需求**
|
|
53
|
+
|
|
54
|
+
获取当前已修改的文件列表,与活跃需求(状态为「开发中」或「测试中」)的「文件改动清单」(第十一章 11.3)进行匹配。如果某个需求的改动清单覆盖了当前修改的文件 → 命中该需求。
|
|
55
|
+
|
|
56
|
+
**第 2 步:从当前对话上下文推断**
|
|
57
|
+
|
|
58
|
+
如果第 1 步未命中,检查当前对话中是否提及过具体的需求编号(如用户说过"继续做 REQ-001")。
|
|
59
|
+
|
|
60
|
+
**第 3 步:兜底扫描活跃需求**
|
|
61
|
+
|
|
62
|
+
如果前两步都未命中,才扫描所有活跃需求。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
**推断结果处理:**
|
|
67
|
+
|
|
68
|
+
**命中 1 个需求** → 自动切换/创建分支:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
当前在保护分支 <CURRENT>,不允许直接提交。
|
|
72
|
+
根据当前改动关联到 <REQ-ID>,自动切换分支...
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- 需求有 branch 字段 → `git stash` → `git checkout <branch>` → `git stash pop`
|
|
76
|
+
- 需求无 branch 字段 → `git stash` → `git checkout -b <新分支> <branchFrom>` → `git stash pop` → 更新需求文档 branch 字段
|
|
77
|
+
|
|
78
|
+
**命中多个需求** → 列出让用户选择(**没有跳过选项**):
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
当前在保护分支 <CURRENT>,不允许直接提交。请选择需求:
|
|
82
|
+
|
|
83
|
+
1. REQ-001 用户积分规则管理
|
|
84
|
+
2. REQ-002 订单状态流转
|
|
85
|
+
|
|
86
|
+
请选择:
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
选择后同上切换/创建分支。
|
|
90
|
+
|
|
91
|
+
**未命中任何需求** → **根据 `branchStrategy` 自动生成分支名并切换**:
|
|
92
|
+
|
|
93
|
+
1. 根据 `git diff --cached --stat` / `git diff --name-only` 的改动文件与内容,推断:
|
|
94
|
+
- **变更性质**:
|
|
95
|
+
- 有明确修复语义(修复 bug、错误处理、异常分支等) → 使用 `fixPrefix`(默认 `fix/`)
|
|
96
|
+
- 其他(新功能、重构、优化等) → 使用 `featurePrefix`(默认 `feat/`)
|
|
97
|
+
- **英文 slug**:基于改动主题生成 lowercase kebab-case,≤5 词(如 `order-export-approval`、`dept-channel-filter`)
|
|
98
|
+
|
|
99
|
+
2. 组装分支名:`<prefix><slug>`,若同名分支已存在则追加短 hash 后缀。
|
|
100
|
+
|
|
101
|
+
3. 展示给用户确认,然后执行:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
当前在保护分支 <CURRENT>,未关联到活跃需求。
|
|
105
|
+
根据当前改动自动生成分支:<新分支名>(基于 <branchFrom>)
|
|
106
|
+
|
|
107
|
+
确认使用该分支名?(回车确认 / 输入自定义分支名)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
用户确认后:`git stash` → `git checkout -b <新分支> <branchFrom>` → `git stash pop` → 继续步骤 2。
|
|
111
|
+
|
|
112
|
+
**注意**:未命中需求时不写入需求文档的 branch 字段(因无需求可写)。需求关联的分支命名仍遵循 `<featurePrefix>REQ-XXX-<english-slug>` / `<fixPrefix>QUICK-XXX-<english-slug>` 规则(见「命中 1 个需求」分支)。
|
|
113
|
+
|
|
114
|
+
### 2. 检查工作区状态
|
|
115
|
+
|
|
116
|
+
检查工作区是否有变更及暂存情况。**无变更时:**
|
|
117
|
+
```
|
|
118
|
+
❌ 没有可提交的变更
|
|
119
|
+
|
|
120
|
+
请先暂存文件:
|
|
121
|
+
- git add <file> 暂存指定文件
|
|
122
|
+
- git add -A 暂存所有变更
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**有未暂存变更时:**
|
|
126
|
+
自动将所有变更暂存(`git add -A`),展示暂存结果:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
已暂存所有变更:
|
|
130
|
+
M internal/sys/biz/dept_channel.go
|
|
131
|
+
A internal/sys/model/sys_dept_channel_model.go
|
|
132
|
+
M internal/sys/controller/v1/sys_dept.go
|
|
133
|
+
M internal/sys/router.go
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 3. Code Review 提醒
|
|
137
|
+
|
|
138
|
+
提交前展示代码审查提醒(信息展示,不等待回复):
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
⚠️ 提交前请确认已完成 Code Review
|
|
142
|
+
检查要点:逻辑正确性、安全隐患、错误处理、代码规范、调试代码清理
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 4. 检测当前需求
|
|
146
|
+
|
|
147
|
+
优先从分支名提取 `REQ-XXX` / `QUICK-XXX` 编号;未匹配时回退扫描活跃需求(按 `requirementRole` 决定读本地还是缓存):命中 1 个自动关联,命中多个列出让用户选,未命中则不关联。
|
|
148
|
+
|
|
149
|
+
### 5. 分析变更内容
|
|
150
|
+
|
|
151
|
+
读取 `git diff --cached` 的内容,分析暂存的代码变更:
|
|
152
|
+
|
|
153
|
+
- 变更性质(新增功能、修复问题、重构等)
|
|
154
|
+
- 变更描述(从代码差异中提炼)
|
|
155
|
+
|
|
156
|
+
### 6. 生成提交信息
|
|
157
|
+
|
|
158
|
+
#### 6.1 选择提交类型
|
|
159
|
+
|
|
160
|
+
**auto 模式**:若项目内存在 `.claude/.req-auto` 且 mtime 在 10 分钟内(由上游 `/req:fix --auto` 等命令创建),**跳过交互式选择**,AI 根据 `git diff --cached` 的变更内容自动推断类型(如上游是 `/req:fix` 则固定为"修复")。
|
|
161
|
+
|
|
162
|
+
非 auto 模式下,如果用户未提供消息,交互式选择:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
选择提交类型:
|
|
166
|
+
|
|
167
|
+
1. 新功能 新增功能
|
|
168
|
+
2. 修复 问题修复
|
|
169
|
+
3. 重构 代码重构
|
|
170
|
+
4. 优化 性能优化
|
|
171
|
+
5. 文档 文档更新
|
|
172
|
+
6. 测试 测试相关
|
|
173
|
+
7. 构建 构建/工具/依赖
|
|
174
|
+
8. 样式 代码格式(不影响逻辑)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
如果用户已提供消息,根据变更内容和消息自动推断类型。
|
|
178
|
+
|
|
179
|
+
#### 6.2 组装提交消息
|
|
180
|
+
|
|
181
|
+
**格式:**
|
|
182
|
+
```
|
|
183
|
+
前缀: 描述 (REQ-XXX)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**规则:**
|
|
187
|
+
- `前缀`:必填,中文类型前缀
|
|
188
|
+
- 描述:简洁的中文描述
|
|
189
|
+
- `(REQ-XXX)`:自动追加当前需求编号(如有)
|
|
190
|
+
|
|
191
|
+
**前缀映射:**
|
|
192
|
+
|
|
193
|
+
| 前缀 | 含义 | Changelog 分类 |
|
|
194
|
+
|------|------|---------------|
|
|
195
|
+
| `新功能` | 新增功能 | 新功能 (Features) |
|
|
196
|
+
| `修复` | 问题修复 | 问题修复 (Bug Fixes) |
|
|
197
|
+
| `重构` | 代码重构 | 重构优化 (Refactoring) |
|
|
198
|
+
| `优化` | 性能优化 | 性能优化 (Performance) |
|
|
199
|
+
| `文档` | 文档更新 | 文档更新 (Documentation) |
|
|
200
|
+
| `测试` | 测试相关 | 测试 (Tests) |
|
|
201
|
+
| `构建` | 构建/工具/依赖 | 其他变更 (Others) |
|
|
202
|
+
| `样式` | 代码格式 | 其他变更 (Others) |
|
|
203
|
+
|
|
204
|
+
**Issue 关联:** 按 [_issue.md 的 Issue 读取优先级](./_issue.md#issue-编号的读取优先级) 获取 issue 编号:先查需求文档 `issue` 字段,再查分支名 `-iN` 后缀。检测到 issue 编号时,在 commit message 末尾追加 `closes #N`。
|
|
205
|
+
|
|
206
|
+
**示例:**
|
|
207
|
+
```
|
|
208
|
+
新功能: 实现部门渠道关联 (REQ-001)
|
|
209
|
+
修复: 订单渠道过滤逻辑错误 (REQ-001)
|
|
210
|
+
重构: 部门服务层代码 (QUICK-003)
|
|
211
|
+
新功能: 实现用户积分规则 (REQ-001) closes #12
|
|
212
|
+
优化: 订单查询添加索引 closes #42
|
|
213
|
+
文档: 更新 API 文档
|
|
214
|
+
构建: 升级依赖版本
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### 7. 确认并提交
|
|
218
|
+
|
|
219
|
+
展示完整提交预览:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
提交预览:
|
|
223
|
+
|
|
224
|
+
类型:新功能
|
|
225
|
+
描述:实现部门渠道关联
|
|
226
|
+
关联:REQ-001
|
|
227
|
+
|
|
228
|
+
完整消息:
|
|
229
|
+
新功能: 实现部门渠道关联 (REQ-001)
|
|
230
|
+
|
|
231
|
+
变更文件(4):
|
|
232
|
+
A internal/sys/model/sys_dept_channel_model.go
|
|
233
|
+
A internal/sys/store/sys_dept_channel_store.go
|
|
234
|
+
A internal/sys/biz/dept_channel.go
|
|
235
|
+
M internal/sys/router.go
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
展示预览后直接执行提交(默认直通;仅当项目内存在 `.claude/.req-confirm-commit` marker 时,Hook 才会弹出原生确认对话框——该 marker 由 Claude 按用户自然语言意图维护)。
|
|
240
|
+
|
|
241
|
+
### 8. 提交结果
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
✅ 提交成功!
|
|
245
|
+
|
|
246
|
+
commit abc1234
|
|
247
|
+
新功能: 实现部门渠道关联 (REQ-001)
|
|
248
|
+
|
|
249
|
+
4 files changed, 156 insertions(+), 3 deletions(-)
|
|
250
|
+
|
|
251
|
+
是否创建 PR?
|
|
252
|
+
- /req:pr 创建 PR
|
|
253
|
+
- 继续开发 稍后再说
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Breaking Change 支持
|
|
259
|
+
|
|
260
|
+
如果变更包含破坏性改动,在前缀后添加 `!` 标记:
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
新功能!: 重构部门 API 返回结构 (REQ-005)
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
交互式流程中增加确认:
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
如果变更涉及 API 返回结构变更、数据库 schema 变更等,自动标记为 Breaking Change。
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 多行提交消息
|
|
275
|
+
|
|
276
|
+
对于需要详细说明的提交,支持添加 body:
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
新功能: 实现部门渠道关联 (REQ-001)
|
|
280
|
+
|
|
281
|
+
- 新增 sys_dept_channel 表及 Model/Store 层
|
|
282
|
+
- 实现渠道范围校验逻辑
|
|
283
|
+
- 添加获取可选渠道接口
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
当变更涉及多个文件或逻辑复杂时,自动添加 body 说明。
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 与 Changelog 的对应关系
|
|
291
|
+
|
|
292
|
+
本命令生成的提交消息使用中文前缀,`/req:changelog` 可直接解析:
|
|
293
|
+
|
|
294
|
+
| 提交格式 | Changelog 分类 |
|
|
295
|
+
|---------|---------------|
|
|
296
|
+
| `新功能: 描述 (REQ-XXX)` | 新功能 (Features) |
|
|
297
|
+
| `修复: 描述 (REQ-XXX)` | 问题修复 (Bug Fixes) |
|
|
298
|
+
| `重构: 描述` | 重构优化 (Refactoring) |
|
|
299
|
+
| `优化: 描述` | 性能优化 (Performance) |
|
|
300
|
+
| `文档: 描述` | 文档更新 (Documentation) |
|
|
301
|
+
| `测试: 描述` | 测试 (Tests) |
|
|
302
|
+
| `构建/样式: 描述` | 其他变更 (Others) |
|
|
303
|
+
|
|
304
|
+
**需求编号关联**:commit message 中的 `(REQ-XXX)` / `(QUICK-XXX)` 会被 changelog 自动提取并归入「关联需求」章节。
|
|
305
|
+
|
|
306
|
+
## 用户输入
|
|
307
|
+
|
|
308
|
+
$ARGUMENTS
|