@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.
Files changed (83) hide show
  1. package/README.md +57 -235
  2. package/install.js +406 -116
  3. package/package.json +2 -1
  4. package/plugins/api/skills/api/SKILL.md +102 -0
  5. package/plugins/api/skills/api-field-mapper/SKILL.md +95 -0
  6. package/plugins/api/skills/config/SKILL.md +140 -0
  7. package/plugins/api/skills/gen/SKILL.md +345 -0
  8. package/plugins/api/skills/help/SKILL.md +121 -0
  9. package/plugins/api/skills/import/SKILL.md +95 -0
  10. package/plugins/api/skills/map/SKILL.md +152 -0
  11. package/plugins/api/skills/search/SKILL.md +95 -0
  12. package/plugins/diag/skills/audit/SKILL.md +103 -0
  13. package/plugins/diag/skills/diag/SKILL.md +41 -0
  14. package/plugins/diag/skills/diagnose/SKILL.md +167 -0
  15. package/plugins/diag/skills/init/SKILL.md +142 -0
  16. package/plugins/diag/skills/stack-analyzer/SKILL.md +150 -0
  17. package/plugins/pm/skills/ask/SKILL.md +89 -0
  18. package/plugins/pm/skills/brief/SKILL.md +95 -0
  19. package/plugins/pm/skills/export/SKILL.md +93 -0
  20. package/plugins/pm/skills/help/SKILL.md +257 -0
  21. package/plugins/pm/skills/milestone/SKILL.md +102 -0
  22. package/plugins/pm/skills/monthly/SKILL.md +111 -0
  23. package/plugins/pm/skills/plan/SKILL.md +96 -0
  24. package/plugins/pm/skills/pm/SKILL.md +174 -0
  25. package/plugins/pm/skills/progress/SKILL.md +113 -0
  26. package/plugins/pm/skills/report-generator/SKILL.md +104 -0
  27. package/plugins/pm/skills/risk/SKILL.md +223 -0
  28. package/plugins/pm/skills/standup/SKILL.md +96 -0
  29. package/plugins/pm/skills/stats/SKILL.md +158 -0
  30. package/plugins/pm/skills/weekly/SKILL.md +157 -0
  31. package/plugins/req/skills/branch/SKILL.md +447 -0
  32. package/plugins/req/skills/cache/SKILL.md +232 -0
  33. package/plugins/req/skills/changelog/SKILL.md +187 -0
  34. package/plugins/req/skills/changelog-generator/SKILL.md +106 -0
  35. package/plugins/req/skills/code-impact-analyzer/SKILL.md +48 -0
  36. package/plugins/req/skills/commit/SKILL.md +308 -0
  37. package/plugins/req/skills/dev/SKILL.md +229 -0
  38. package/plugins/req/skills/dev-guide/SKILL.md +530 -0
  39. package/plugins/req/skills/do/SKILL.md +191 -0
  40. package/plugins/req/skills/done/SKILL.md +95 -0
  41. package/plugins/req/skills/edit/SKILL.md +187 -0
  42. package/plugins/req/skills/fix/SKILL.md +300 -0
  43. package/plugins/req/skills/help/SKILL.md +136 -0
  44. package/plugins/req/skills/init/SKILL.md +505 -0
  45. package/plugins/req/skills/issue/SKILL.md +237 -0
  46. package/plugins/req/skills/issue-guide/SKILL.md +125 -0
  47. package/plugins/req/skills/migrate/SKILL.md +128 -0
  48. package/plugins/req/skills/modules/SKILL.md +195 -0
  49. package/plugins/req/skills/natural-language-dispatcher/SKILL.md +545 -0
  50. package/plugins/req/skills/new/SKILL.md +172 -0
  51. package/plugins/req/skills/new-quick/SKILL.md +246 -0
  52. package/plugins/req/skills/pr/SKILL.md +157 -0
  53. package/plugins/req/skills/prd/SKILL.md +187 -0
  54. package/plugins/req/skills/prd-analyzer/SKILL.md +131 -0
  55. package/plugins/req/skills/prd-edit/SKILL.md +201 -0
  56. package/plugins/req/skills/projects/SKILL.md +115 -0
  57. package/plugins/req/skills/quick-fix-guide/SKILL.md +51 -0
  58. package/plugins/req/skills/release/SKILL.md +300 -0
  59. package/plugins/req/skills/release-rationale/SKILL.md +213 -0
  60. package/plugins/req/skills/req/SKILL.md +173 -0
  61. package/plugins/req/skills/requirement-analyzer/SKILL.md +274 -0
  62. package/plugins/req/skills/review/SKILL.md +201 -0
  63. package/plugins/req/skills/review-pr/SKILL.md +699 -0
  64. package/plugins/req/skills/show/SKILL.md +302 -0
  65. package/plugins/req/skills/specs/SKILL.md +99 -0
  66. package/plugins/req/skills/split/SKILL.md +164 -0
  67. package/plugins/req/skills/status/SKILL.md +184 -0
  68. package/plugins/req/skills/test/SKILL.md +431 -0
  69. package/plugins/req/skills/test-guide/SKILL.md +304 -0
  70. package/plugins/req/skills/test_new/SKILL.md +417 -0
  71. package/plugins/req/skills/test_regression/SKILL.md +298 -0
  72. package/plugins/req/skills/update/SKILL.md +131 -0
  73. package/plugins/req/skills/update-template/SKILL.md +203 -0
  74. package/plugins/req/skills/upgrade/SKILL.md +178 -0
  75. package/plugins/req/skills/use/SKILL.md +158 -0
  76. package/plugins/req/skills/version-bumper/SKILL.md +113 -0
  77. package/plugins/uat/skills/bug/SKILL.md +153 -0
  78. package/plugins/uat/skills/init/SKILL.md +88 -0
  79. package/plugins/uat/skills/new/SKILL.md +131 -0
  80. package/plugins/uat/skills/report/SKILL.md +48 -0
  81. package/plugins/uat/skills/run/SKILL.md +78 -0
  82. package/plugins/uat/skills/uat/SKILL.md +64 -0
  83. package/plugins/uat/skills/uat-executor/SKILL.md +299 -0
@@ -0,0 +1,298 @@
1
+ ---
2
+ name: test_regression
3
+ description: |
4
+ 回归测试 - 运行已有自动化测试用例
5
+ ---
6
+
7
+ > **重要**:本命令的测试文件位置、运行命令、代码示例均从项目 CLAUDE.md 的「测试规范」章节读取,不内置任何项目细节。
8
+
9
+ # 回归测试
10
+
11
+ 运行项目中已存在的自动化测试用例,验证功能正确性。
12
+
13
+ > 存储路径和缓存同步规则见 [_storage.md](./_storage.md)
14
+
15
+ ## 命令格式
16
+
17
+ ```
18
+ /req:test_regression [选项]
19
+ ```
20
+
21
+ ### 选项
22
+
23
+ | 选项 | 说明 | 示例 |
24
+ |-----|------|------|
25
+ | `--all` | 全量回归(默认) | `/req:test_regression --all` |
26
+ | `--changed` | 仅测试变更相关 | `/req:test_regression --changed` |
27
+ | `--module=<name>` | 指定模块 | `/req:test_regression --module=user` |
28
+ | `--failed` | 仅运行上次失败的 | `/req:test_regression --failed` |
29
+ | `--type=<ut\|api\|e2e>` | 指定测试类型 | `/req:test_regression --type=ut` |
30
+ | `--verbose` | 显示详细输出 | `/req:test_regression --verbose` |
31
+ | `--coverage` | 生成覆盖率报告 | `/req:test_regression --coverage` |
32
+ | `--skip-env` | 跳过环境检查(仅 UT) | `/req:test_regression --type=ut --skip-env` |
33
+
34
+ ---
35
+
36
+ ## 测试环境要求
37
+
38
+ 不同类型的测试需要不同的环境(具体服务和启动命令参考 CLAUDE.md):
39
+
40
+ | 测试类型 | 依赖服务 | 后端服务 | 前端服务 |
41
+ |---------|---------|---------|---------|
42
+ | UT | 否 | 否 | 否 |
43
+ | API | 是 | 是 | 否 |
44
+ | E2E | 是 | 是 | 是 |
45
+
46
+ ---
47
+
48
+ ## 执行流程
49
+
50
+ ### 0. 环境准备(API/E2E 需要)
51
+
52
+ 如果测试类型包含 API 或 E2E,先检查并启动测试环境:
53
+
54
+ ```
55
+ 检查测试环境...
56
+
57
+ 依赖服务状态:
58
+ <依赖服务 1> ❌ 未启动
59
+ <依赖服务 2> ❌ 未启动
60
+
61
+ 按 CLAUDE.md 测试环境配置启动服务...
62
+ <CLAUDE.md中定义的测试环境启动命令>
63
+
64
+ 等待服务就绪...
65
+ <依赖服务 1> ✅ 就绪
66
+ <依赖服务 2> ✅ 就绪
67
+
68
+ 启动后端服务...
69
+ <CLAUDE.md中定义的后端启动命令>
70
+
71
+ 等待后端服务...
72
+ <后端服务> ✅ 就绪
73
+
74
+ 启动前端服务(E2E 需要)...
75
+ <CLAUDE.md中定义的前端启动命令>
76
+
77
+ 等待前端服务...
78
+ <前端服务> ✅ 就绪
79
+
80
+ ✅ 测试环境准备完成
81
+ ```
82
+
83
+ ### 1. 检测项目类型
84
+
85
+ 从 CLAUDE.md 读取项目技术栈和测试框架配置:
86
+
87
+ ```
88
+ 检测项目类型...
89
+
90
+ 项目类型:<CLAUDE.md中定义的技术栈>
91
+ 测试框架:
92
+ 单元测试:<CLAUDE.md中定义的UT框架>
93
+ API 测试:<CLAUDE.md中定义的API测试框架>
94
+ E2E 测试:<CLAUDE.md中定义的E2E框架>
95
+
96
+ 测试目录:
97
+ <CLAUDE.md中定义的UT目录> (N 个文件)
98
+ <CLAUDE.md中定义的API测试目录> (N 个文件)
99
+ <CLAUDE.md中定义的E2E测试目录> (N 个文件)
100
+ ```
101
+
102
+ ### 2. 确定测试范围
103
+
104
+ 根据选项确定要执行的测试:
105
+
106
+ #### 全量模式 (--all)
107
+ 执行所有测试文件
108
+
109
+ #### 变更模式 (--changed)
110
+ ```
111
+ 检测变更文件...
112
+
113
+ 变更文件:
114
+ <source-file-1>
115
+ <source-file-2>
116
+ <source-file-3>
117
+
118
+ 关联测试:
119
+ <test-file-1>
120
+ <test-file-2>
121
+ <test-file-3>
122
+ ```
123
+
124
+ #### 失败重试模式 (--failed)
125
+ 从上次测试结果中读取失败用例
126
+
127
+ ### 3. 执行测试
128
+
129
+ 按类型依次执行:
130
+
131
+ ```
132
+ 执行回归测试...
133
+
134
+
135
+ 单元测试 (<CLAUDE.md中的UT运行命令>)
136
+
137
+
138
+ <test-file-1>
139
+ <TestCase_1> ✅ PASS
140
+ <TestCase_2> ✅ PASS
141
+ <TestCase_3> ✅ PASS
142
+ <TestCase_4> ✅ PASS
143
+
144
+ <test-file-2>
145
+ <TestCase_5> ✅ PASS
146
+ <TestCase_6> ❌ FAIL
147
+ Expected: <预期值>
148
+ Actual: <实际值>
149
+ <TestCase_7> ✅ PASS
150
+
151
+ 单元测试结果:N/N 通过
152
+
153
+
154
+ API 测试 (<CLAUDE.md中的API测试运行命令>)
155
+
156
+
157
+ <api-test-file-1>
158
+ <HTTP_METHOD> <endpoint-1> ✅ PASS
159
+ <HTTP_METHOD> <endpoint-2> ✅ PASS
160
+ <HTTP_METHOD> <endpoint-3> ❌ FAIL
161
+ Expected: 200
162
+ Actual: 500 (Internal Server Error)
163
+
164
+ API 测试结果:N/N 通过
165
+ ```
166
+
167
+ ### 4. 生成测试报告
168
+
169
+ ```
170
+
171
+ 回归测试报告
172
+
173
+
174
+ 测试时间:<timestamp>
175
+ 测试范围:<全量回归 | 变更相关 | 失败重试>
176
+ 总耗时:<duration>
177
+
178
+
179
+ 类型 总数 通过 失败 通过率
180
+
181
+ 单元测试 N N N XX.X%
182
+ API 测试 N N N XX.X%
183
+ E2E 测试 N N N XX.X%
184
+
185
+ 合计 N N N XX.X%
186
+
187
+
188
+ ❌ 失败用例(N 个):
189
+
190
+ 1. <失败用例名>
191
+ 文件:<test-file>:<line>
192
+ 原因:<失败原因描述>
193
+
194
+ 2. <失败用例名>
195
+ 文件:<test-file>:<line>
196
+ 原因:<失败原因描述>
197
+
198
+ 下一步操作:
199
+ - 修复后重新测试:/req:test_regression --failed
200
+ - 查看失败详情:/req:test_regression --verbose
201
+ - 忽略失败继续:/req:test --force
202
+ ```
203
+
204
+ ### 5. 覆盖率报告(--coverage)
205
+
206
+ ```
207
+ 代码覆盖率报告
208
+
209
+
210
+ 模块/目录 覆盖率 状态
211
+
212
+ <module-1> XX.X% ✅ 达标
213
+ <module-2> XX.X% ⚠️ 接近
214
+ <module-3> XX.X% ❌ 不足
215
+ <module-4> XX.X% ✅ 达标
216
+
217
+ 总计 XX.X% <状态>
218
+
219
+
220
+ 目标覆盖率:<CLAUDE.md中定义的覆盖率目标>
221
+ 建议补充测试:<覆盖率不足的模块>
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 测试框架配置
227
+
228
+ 所有测试运行命令、目录结构、框架配置均从项目 CLAUDE.md 的「测试规范」章节读取,包括:
229
+
230
+ ### 单元测试 (UT)
231
+
232
+ ```bash
233
+ # 运行所有单元测试
234
+ <CLAUDE.md中的UT运行命令>
235
+
236
+ # 带覆盖率
237
+ <CLAUDE.md中的UT覆盖率命令>
238
+
239
+ # 指定模块
240
+ <CLAUDE.md中的UT运行命令> <module-path>
241
+
242
+ # 仅失败重试
243
+ <CLAUDE.md中的UT运行命令> <failed-test-filter>
244
+ ```
245
+
246
+ ### API 测试
247
+
248
+ ```bash
249
+ # 前提:确保测试环境已启动(参考 CLAUDE.md 测试环境配置)
250
+
251
+ # 运行 API 测试
252
+ <CLAUDE.md中的API测试运行命令>
253
+
254
+ # 带详细输出
255
+ <CLAUDE.md中的API测试运行命令> --verbose
256
+
257
+ # 指定接口
258
+ <CLAUDE.md中的API测试运行命令> <test-filter>
259
+ ```
260
+
261
+ ### E2E 测试
262
+
263
+ ```bash
264
+ # 前提:确保测试环境已启动(参考 CLAUDE.md 测试环境配置,包括前端服务)
265
+
266
+ # 运行所有 E2E 测试
267
+ <CLAUDE.md中的E2E运行命令>
268
+
269
+ # 带 UI 调试
270
+ <CLAUDE.md中的E2E运行命令> --ui
271
+
272
+ # 仅失败重试
273
+ <CLAUDE.md中的E2E运行命令> --last-failed
274
+
275
+ # 指定测试文件
276
+ <CLAUDE.md中的E2E运行命令> <test-file>
277
+ ```
278
+
279
+ ---
280
+
281
+ ## 与 CI/CD 集成
282
+
283
+ 回归测试结果可输出为 CI 友好格式:
284
+
285
+ ```bash
286
+ /req:test_regression --ci --output=junit.xml
287
+ ```
288
+
289
+ 生成的报告可用于:
290
+ - GitHub Actions
291
+ - GitLab CI
292
+ - Jenkins
293
+
294
+ ---
295
+
296
+ ## 用户输入
297
+
298
+ $ARGUMENTS
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: update
3
+ description: |
4
+ 热更新插件 - 拉取最新命令文件和技能,所有项目立即生效
5
+ ---
6
+
7
+ # 热更新 req 插件
8
+
9
+ 拉取最新版本,所有使用该插件的项目立即生效(无需重装)。
10
+
11
+ `--check`:只检查是否有更新,不执行拉取。
12
+
13
+ ## 执行流程
14
+
15
+ ### 1. 定位插件目录
16
+
17
+ **优先级**:本地目录源 > Claude 缓存克隆目录
18
+
19
+ ```bash
20
+ # 1a. 查找 directory 类型源(本地开发安装)
21
+ SOURCE_PATH=$(jq -r '
22
+ .extraKnownMarketplaces | to_entries[] |
23
+ select(.value.source.source == "directory") |
24
+ .value.source.path
25
+ ' ~/.claude/settings.json .claude/settings.local.json 2>/dev/null | head -1)
26
+
27
+ # 1b. 查找 Claude 缓存的克隆目录(GitHub/远程源安装)
28
+ if [ -z "$SOURCE_PATH" ]; then
29
+ # Claude Code 将远程 marketplace 克隆到 ~/.claude/plugins/marketplaces/<name>/
30
+ # 从 settings 取 marketplace 名称,映射到缓存目录
31
+ MARKETPLACE_NAME=$(jq -r '
32
+ .extraKnownMarketplaces | to_entries[] |
33
+ select(.value.source.source != "directory") |
34
+ .key
35
+ ' ~/.claude/settings.json .claude/settings.local.json 2>/dev/null | head -1)
36
+
37
+ if [ -n "$MARKETPLACE_NAME" ]; then
38
+ CACHE_PATH="$HOME/.claude/plugins/marketplaces/$MARKETPLACE_NAME"
39
+ if [ -d "$CACHE_PATH/.git" ]; then
40
+ SOURCE_PATH="$CACHE_PATH"
41
+ fi
42
+ fi
43
+ fi
44
+ ```
45
+
46
+ 找不到时输出:
47
+ ```
48
+ ❌ 无法定位插件目录。
49
+ 请检查 ~/.claude/settings.json 中的 extraKnownMarketplaces 配置。
50
+ ```
51
+
52
+ 退出。
53
+
54
+ ### 2. 检查远程更新
55
+
56
+ ```bash
57
+ git -C "$SOURCE_PATH" fetch origin --quiet
58
+
59
+ LOCAL=$(git -C "$SOURCE_PATH" rev-parse HEAD)
60
+ REMOTE=$(git -C "$SOURCE_PATH" rev-parse "@{u}" 2>/dev/null)
61
+ CURRENT_VER=$(jq -r '.version // "unknown"' "$SOURCE_PATH/plugins/req/.claude-plugin/plugin.json" 2>/dev/null)
62
+ ```
63
+
64
+ 已是最新时:
65
+ ```
66
+ ✅ 已是最新版本(v<CURRENT_VER>)
67
+ 源目录:<SOURCE_PATH>
68
+ ```
69
+
70
+ 有更新时打印待拉取的提交列表:
71
+ ```
72
+ 发现更新(当前 v<CURRENT_VER>):
73
+ <git log HEAD..@{u} --oneline --no-merges 的输出>
74
+ ```
75
+
76
+ **`--check` 模式**:到此退出,不执行拉取。
77
+
78
+ ### 3. 执行拉取
79
+
80
+ ```bash
81
+ git -C "$SOURCE_PATH" pull --ff-only origin
82
+ NEW_VER=$(jq -r '.version // "unknown"' "$SOURCE_PATH/plugins/req/.claude-plugin/plugin.json" 2>/dev/null)
83
+ ```
84
+
85
+ 成功:
86
+ ```
87
+ ✅ 插件已更新至 v<NEW_VER>
88
+ 源目录:<SOURCE_PATH>
89
+ 所有使用此插件的项目立即生效,无需重启。
90
+ ```
91
+
92
+ 失败(本地有分歧提交):
93
+ ```
94
+ ❌ 拉取失败:源目录存在本地修改或分歧提交。
95
+ 请手动处理:cd <SOURCE_PATH> && git status
96
+ ```
97
+
98
+ ### 4. 检查项目 prompt 文件
99
+
100
+ **触发条件**:当前目录存在 `docs/prompt/`(说明项目已创建架构文档)。`--check` 模式同样执行此步骤。
101
+
102
+ 读取 `$SOURCE_PATH/plugins/req/schemas/prompt-schema.md`,对 schema 中每个文件逐项检查:
103
+
104
+ 1. 文件是否存在
105
+ 2. 文件存在时,必需关键词是否在标题或正文中出现
106
+
107
+ 按结果分级输出:
108
+
109
+ ```
110
+ Prompt 文件检查(schema v<VERSION>):
111
+
112
+ docs/prompt/architecture.md
113
+ ✅ 技术栈 ✅ 分层 ✅ 目录 ❌ 命名规范(必需,/req:dev 依赖)
114
+ ⚠️ 错误处理(推荐,/req:dev 可能生成不一致的错误返回)
115
+
116
+ docs/prompt/testing.md
117
+ ⚠️ 文件不存在(可选,/req:test 将使用内置默认值)
118
+
119
+ 建议:补充 1 个必需章节,详见 plugins/req/schemas/prompt-schema.md
120
+ ```
121
+
122
+ 全部覆盖时:
123
+ ```
124
+ ✅ Prompt 文件结构完整
125
+ ```
126
+
127
+ `docs/prompt/` 不存在时跳过,不输出任何内容(项目尚未初始化架构文档,属正常状态)。
128
+
129
+ ## 用户输入
130
+
131
+ $ARGUMENTS
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: update-template
3
+ description: |
4
+ 更新模板 - 将插件最新模板同步到项目本地
5
+ ---
6
+
7
+ # 更新模板文件
8
+
9
+ 将插件 `templates/` 目录下的最新模板同步到项目本地 `docs/requirements/`,覆盖旧版本。
10
+
11
+ > 存储路径规则见 [_storage.md](./_storage.md)
12
+
13
+ ## 命令格式
14
+
15
+ ```
16
+ /req:update-template [模板名称] [--force]
17
+ ```
18
+
19
+ **示例:**
20
+ - `/req:update-template` - 交互选择要更新的模板
21
+ - `/req:update-template requirement` - 更新需求模板
22
+ - `/req:update-template all` - 更新所有模板
23
+ - `/req:update-template requirement --force` - 强制覆盖,跳过对比确认
24
+
25
+ ---
26
+
27
+ ## 可更新的模板
28
+
29
+ | 模板名称 | 插件源文件(相对插件根目录) | 项目目标文件 |
30
+ |---------|--------------------------|------------|
31
+ | `requirement` | `templates/requirement-template.md` | `docs/requirements/templates/requirement-template.md` |
32
+ | `quick` | `templates/quick-template.md` | `docs/requirements/templates/quick-template.md` |
33
+ | `module` | `templates/module-template.md` | `docs/requirements/templates/module-template.md` |
34
+ | `prd` | `templates/prd-template.md` | `docs/requirements/templates/prd-template.md` |
35
+ | `release-prompt` | `templates/release-prompt-template.md` | `docs/prompt/release.md` |
36
+ | `all` | 以上全部 | 以上全部 |
37
+
38
+ ---
39
+
40
+ ## 执行流程
41
+
42
+ ### 1. 定位插件根目录
43
+
44
+ 本命令文件位于插件的 `commands/` 目录下。通过本文件自身路径向上一级即可得到插件根目录:
45
+
46
+ ```
47
+ 本文件路径: <插件根目录>/commands/update-template.md
48
+ 插件根目录: 本文件所在目录的父目录
49
+ 模板目录: <插件根目录>/templates/
50
+ ```
51
+
52
+ **定位方式**:读取 `.claude/settings.local.json` 中的 `extraKnownMarketplaces` 配置,或通过当前项目的 `.claude/settings.local.json` 找到插件注册信息。如果找不到,使用以下回退策略:
53
+
54
+ ```
55
+ 1. 读取 ~/.claude/settings.json 的 extraKnownMarketplaces 字段
56
+ 2. 找到 name 包含 "req" 的插件条目
57
+ 3. 提取 source.path 作为插件根目录
58
+ 4. 若以上均失败,提示用户手动指定插件路径
59
+ ```
60
+
61
+ **重要**:必须先确认插件根目录存在 `templates/` 子目录,且目标模板文件存在,再继续后续步骤。
62
+
63
+ ### 2. 前置检查
64
+
65
+ ```bash
66
+ # 检查本地存储目录是否存在
67
+ LOCAL_ROOT=docs/requirements
68
+ if [ ! -d "$LOCAL_ROOT" ]; then
69
+ echo "本地需求目录不存在,请先执行 /req:init <project-name>"
70
+ exit 1
71
+ fi
72
+
73
+ # 检查仓库角色
74
+ ROLE=$(cat .claude/settings.local.json 2>/dev/null | jq -r '.requirementRole // "primary"')
75
+ if [ "$ROLE" = "readonly" ]; then
76
+ echo "只读仓库不支持更新模板"
77
+ exit 1
78
+ fi
79
+ ```
80
+
81
+ ### 3. 选择模板
82
+
83
+ 如果未指定模板名称,交互选择:
84
+
85
+ ```
86
+ 请选择要更新的模板:
87
+
88
+ 1. requirement - 需求模板 (requirement-template.md)
89
+ 2. quick - 快速修复模板 (quick-template.md)
90
+ 3. module - 模块模板 (module-template.md)
91
+ 4. prd - PRD 模板 (prd-template.md)
92
+ a. all - 更新全部模板
93
+
94
+ 请输入编号或名称:
95
+ ```
96
+
97
+ ### 4. 读取插件模板并对比
98
+
99
+ 对每个待更新的模板:
100
+
101
+ 1. **读取插件源模板**:使用 Read 工具读取 `<插件根目录>/templates/<模板文件>`
102
+ 2. **读取项目本地模板**:使用 Read 工具读取 `docs/requirements/<目标文件>`(如存在)
103
+ 3. **对比内容**
104
+
105
+ **情况 A:本地文件不存在**
106
+ ```
107
+ 模板 requirement:
108
+ 插件版本: <插件根目录>/templates/requirement-template.md
109
+ 本地文件: 不存在(将新建)
110
+ ```
111
+
112
+ **情况 B:内容相同**
113
+ ```
114
+ 模板 requirement: 已是最新,无需更新
115
+ ```
116
+
117
+ **情况 C:内容不同**
118
+
119
+ 展示主要差异摘要(不展示完整 diff,而是结构化对比):
120
+
121
+ ```
122
+ 模板 requirement:
123
+ 插件版本: <插件根目录>/templates/requirement-template.md
124
+ 本地文件: docs/requirements/templates/requirement-template.md
125
+
126
+ 差异摘要:
127
+ - 插件版本新增章节: "十三、非功能需求"
128
+ - 插件版本修改章节: "五、接口需求"(表格结构调整)
129
+ - 本地独有内容: "五、数据模型" 中有自定义字段
130
+
131
+ 更新将覆盖本地文件,本地自定义内容将丢失
132
+ ```
133
+
134
+ **--force 模式**:跳过对比确认,直接覆盖。
135
+
136
+ ### 5. 执行更新
137
+
138
+ 使用 Write 工具将插件模板内容写入项目本地文件:
139
+
140
+ | 模板名称 | 读取(Read) | 写入(Write) |
141
+ |---------|-------------|-------------|
142
+ | `requirement` | `<插件根目录>/templates/requirement-template.md` | `docs/requirements/templates/requirement-template.md` |
143
+ | `quick` | `<插件根目录>/templates/quick-template.md` | `docs/requirements/templates/quick-template.md` |
144
+ | `module` | `<插件根目录>/templates/module-template.md` | `docs/requirements/templates/module-template.md` |
145
+ | `prd` | `<插件根目录>/templates/prd-template.md` | `docs/requirements/templates/prd-template.md` |
146
+
147
+ **注意**:PRD 模板更新时保留原始模板变量(`{{PROJECT_NAME}}`、`{{DATE}}`),不做变量替换。已有的 `PRD.md` 是项目文档,不会被覆盖。PRD 模板更新到 `prd-template.md`,仅影响后续新建项目时使用。
148
+
149
+ ### 6. 同步到全局缓存
150
+
151
+ 更新后自动同步模板到全局缓存:
152
+
153
+ ```bash
154
+ PROJECT=$(cat .claude/settings.local.json 2>/dev/null | jq -r '.requirementProject // empty')
155
+ if [ -n "$PROJECT" ]; then
156
+ CACHE_ROOT=~/.claude-requirements/projects/$PROJECT
157
+ mkdir -p $CACHE_ROOT/templates
158
+ cp $LOCAL_ROOT/templates/*.md $CACHE_ROOT/templates/ 2>/dev/null
159
+ fi
160
+ ```
161
+
162
+ ### 7. 输出结果
163
+
164
+ **单个模板更新:**
165
+ ```
166
+ 已更新模板: requirement
167
+ 源文件: <插件根目录>/templates/requirement-template.md
168
+ 目标: docs/requirements/templates/requirement-template.md
169
+ 缓存同步: 已完成
170
+
171
+ 新创建的需求将使用更新后的模板。已有需求文档不受影响。
172
+ ```
173
+
174
+ **批量更新(all):**
175
+ ```
176
+ 模板更新结果:
177
+
178
+ requirement 已更新
179
+ quick 已更新
180
+ module 已是最新
181
+ prd 已更新
182
+
183
+ 共更新 3 个模板,1 个无需更新。
184
+ 新创建的需求将使用更新后的模板。已有需求文档不受影响。
185
+ ```
186
+
187
+ ---
188
+
189
+ ## 错误处理
190
+
191
+ | 错误场景 | 处理方式 |
192
+ |---------|---------|
193
+ | 插件根目录无法定位 | 提示:无法定位插件目录,请检查 `~/.claude/settings.json` 中的 `extraKnownMarketplaces` 配置 |
194
+ | 插件 templates/ 目录不存在 | 提示:插件模板目录不存在,插件安装可能不完整 |
195
+ | 本地需求目录不存在 | 提示先执行 `/req:init` |
196
+ | 只读仓库 | 提示只读仓库不支持更新模板 |
197
+ | 用户取消 | 提示已取消,不做任何修改 |
198
+
199
+ ---
200
+
201
+ ## 用户输入
202
+
203
+ $ARGUMENTS