@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,545 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: natural-language-dispatcher
|
|
3
|
+
description: |
|
|
4
|
+
自然语言需求调度器。当用户用自然语言描述下列意图时自动触发并映射到对应命令:
|
|
5
|
+
- 需求文档:新增/新建/创建需求、修改/编辑/变更需求(带编号)
|
|
6
|
+
- 修复与开发:修 bug、修复报错、优化/重构/升级/统一代码、快速修复、小功能
|
|
7
|
+
- 状态流转:开发/测试/评审通过/评审驳回/完成/归档需求(必须带编号)
|
|
8
|
+
- 版本 PR:规范提交、创建 PR、审查 PR、合并 PR、拉 PR 评论
|
|
9
|
+
- Issue 操作:提/建/开 issue、评论讨论、关闭/重开/查看/列出 issue
|
|
10
|
+
- URL 识别:识别 issue/PR 链接并映射到对应命令(如 owner/repo/issues/169、
|
|
11
|
+
owner/repo/pulls/158、https://github.com/owner/repo/pull/1)
|
|
12
|
+
- 确认偏好:开启/关闭/查询 git commit 前的原生确认弹框(直接维护 marker + memory,不走命令)
|
|
13
|
+
示例:"新增需求 用户积分管理"、"修改025需求"、"修个登录超时的 bug"、
|
|
14
|
+
"优化订单查询性能"、"开始开发025"、"025 评审通过"、"完成 025"、"创建 PR"、"审查 PR"、
|
|
15
|
+
"提个 issue 登录超时"、"给 #42 回复 已修复"、"关闭 issue 42"、
|
|
16
|
+
"修 pipexerp/diciai/issues/169"、"审查 pipexerp/diciai/pulls/158"、
|
|
17
|
+
"开启提交确认"、"不用确认了"。
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# 自然语言需求调度器
|
|
21
|
+
|
|
22
|
+
当用户用自然语言描述需求/开发操作时,解析意图并执行对应的命令流程。
|
|
23
|
+
|
|
24
|
+
> 本技能主要做**意图识别与命令映射**,不自行实现命令逻辑——解析完成后读取 `commands/<command>.md` 按原命令流程执行。唯一例外是 §七「确认偏好开关」,该偏好不对应任何 `/req:*` 命令,由本技能直接执行文件动作并更新 memory。
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 编号解析规则
|
|
29
|
+
|
|
30
|
+
所有意图共用以下编号解析:
|
|
31
|
+
|
|
32
|
+
| 输入 | 解析结果 |
|
|
33
|
+
|------|---------|
|
|
34
|
+
| `REQ-025` / `REQ025` | REQ-025 |
|
|
35
|
+
| `QUICK-003` / `QUICK003` | QUICK-003 |
|
|
36
|
+
| 纯数字 `025` / `25` / `3` | REQ-XXX(默认正式需求,数字补零到 3 位) |
|
|
37
|
+
| `#42` 或 `issue 42` | issue 编号 `#42`,映射为 `--from-issue=#42` |
|
|
38
|
+
|
|
39
|
+
**歧义处理**:纯数字默认识别为 REQ。若当前分支暗示 QUICK(如 `fix/QUICK-XXX-...`),优先用 QUICK。无法确定时询问用户确认。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 一、需求文档操作
|
|
44
|
+
|
|
45
|
+
### 1.1 新增需求 → `/req:new`
|
|
46
|
+
|
|
47
|
+
**触发**:消息中包含"新增需求"、"新建需求"、"创建需求"(**不要求**需求编号,编号由系统自动生成)。
|
|
48
|
+
|
|
49
|
+
**参数提取**:
|
|
50
|
+
|
|
51
|
+
| 字段 | 示例 |
|
|
52
|
+
|------|------|
|
|
53
|
+
| 标题 | "新增需求 用户积分管理" → 标题="用户积分管理" |
|
|
54
|
+
| 类型 | "新增后端需求" → `--type=后端` |
|
|
55
|
+
| 模块 | "用户模块的需求" → `--module=用户模块` |
|
|
56
|
+
| issue | "从 #42 创建需求" → `--from-issue=#42` |
|
|
57
|
+
|
|
58
|
+
**示例**:
|
|
59
|
+
- "新增需求 用户积分管理" → `/req:new 用户积分管理`
|
|
60
|
+
- "新建一个后端需求,做订单导出" → `/req:new 订单导出 --type=后端`
|
|
61
|
+
- "从 #12 创建需求" → `/req:new --from-issue=#12`
|
|
62
|
+
|
|
63
|
+
### 1.2 修改需求 → `/req:edit`
|
|
64
|
+
|
|
65
|
+
**触发**(同时满足):
|
|
66
|
+
1. 关键词:"修改需求"、"编辑需求"、"变更需求"
|
|
67
|
+
2. 需求编号:`REQ-XXX` 或纯数字
|
|
68
|
+
|
|
69
|
+
仅说"修改需求"但不带编号时**不触发**。
|
|
70
|
+
|
|
71
|
+
**示例**:
|
|
72
|
+
- "修改025需求,增加导出功能" → `/req:edit REQ-025`(编辑意图="增加导出功能")
|
|
73
|
+
- "变更需求 REQ-003,调整业务规则" → `/req:edit REQ-003`(编辑意图="调整业务规则")
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 二、修复与开发意图(无文档)
|
|
78
|
+
|
|
79
|
+
### 2.1 修 bug → `/req:fix`
|
|
80
|
+
|
|
81
|
+
**触发**(同时满足):
|
|
82
|
+
1. 动词:"修"、"修复"、"修一下"、"修个"
|
|
83
|
+
2. 问题词:"bug"、"问题"、"报错"、"异常"、"错误"
|
|
84
|
+
3. **有具体问题描述**(不是单纯讨论)
|
|
85
|
+
|
|
86
|
+
**示例**:
|
|
87
|
+
- "修个登录超时的 bug" → `/req:fix 登录超时`
|
|
88
|
+
- "修复订单分页数据重复" → `/req:fix 订单分页数据重复`
|
|
89
|
+
- "修一下 Excel 导出中文乱码" → `/req:fix Excel 导出中文乱码`
|
|
90
|
+
- "修 #42 这个 bug" / "修复 issue #42" → `/req:fix --from-issue=#42`
|
|
91
|
+
|
|
92
|
+
**`--auto` 非交互模式触发词**(用户希望一键跑完,跳过方案确认并自动提交 + 发 PR):
|
|
93
|
+
|
|
94
|
+
- "一键修"、"一键修复"、"直接修"、"自动修"、"自动修复"
|
|
95
|
+
- "修完直接发 PR"、"改完自动提交"、"修好就发 PR"
|
|
96
|
+
- "不用确认"、"别问我"、"自动来"、"跑完再说"
|
|
97
|
+
- 显式带 "--auto"
|
|
98
|
+
|
|
99
|
+
**示例**:
|
|
100
|
+
- "一键修复登录超时" → `/req:fix 登录超时 --auto`
|
|
101
|
+
- "直接修 Excel 导出乱码并发 PR" → `/req:fix Excel 导出乱码 --auto`
|
|
102
|
+
- "自动修 #42" → `/req:fix --from-issue=#42 --auto`
|
|
103
|
+
- "修下登录超时,不用确认" → `/req:fix 登录超时 --auto`
|
|
104
|
+
|
|
105
|
+
**识别到 `--auto` 意图时,回复必须明确说明能力边界**(让用户知道还会有什么弹框):
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
🧠 识别:/req:fix <问题> --auto
|
|
109
|
+
|
|
110
|
+
⚙️ --auto 会自动跳过:
|
|
111
|
+
✓ 修复方案确认
|
|
112
|
+
✓ git commit 前的原生确认弹框(默认就不存在;若已开启提交确认,通过 .claude/.req-auto marker 放行)
|
|
113
|
+
✓ /req:commit 的类型交互式选择(AI 推断为"修复")
|
|
114
|
+
✓ --from-issue 时的关闭 issue 询问
|
|
115
|
+
✓ /req:pr 创建后的分支清理询问
|
|
116
|
+
✓ 手工串联 commit → push → PR
|
|
117
|
+
|
|
118
|
+
🔒 无法跳过(Claude Code harness 层,需你本地设置):
|
|
119
|
+
- 首次调用 Bash/Write/Edit 的工具权限确认
|
|
120
|
+
- Plan Mode approval(若你开了 Plan Mode)
|
|
121
|
+
|
|
122
|
+
🛑 不会跳过(安全红线):
|
|
123
|
+
- 保护分支(main/master/develop)上的提交 —— 必须切分支
|
|
124
|
+
- AI 对代码的实际分析与修改(核心执行,非确认)
|
|
125
|
+
|
|
126
|
+
开始执行?
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
若用户话里明确说了"完全不用问我"、"一切自动"这类**强确认**语气,可以省略最后那句"开始执行?",直接开干。
|
|
130
|
+
|
|
131
|
+
**不触发**:
|
|
132
|
+
- "这个 bug 怎么修"(提问)
|
|
133
|
+
- "这个 bug 得修"(讨论,无具体描述)
|
|
134
|
+
|
|
135
|
+
### 2.2 优化/重构/升级/规范 → `/req:do`
|
|
136
|
+
|
|
137
|
+
**触发**(同时满足):
|
|
138
|
+
1. 动词:**"优化"、"重构"、"升级"、"统一"、"整理"、"抽取"、"迁移"**(祈使语气)
|
|
139
|
+
2. 动词后带**具体对象**(名词短语)
|
|
140
|
+
|
|
141
|
+
**示例**:
|
|
142
|
+
- "优化订单查询性能" → `/req:do 优化订单查询性能`
|
|
143
|
+
- "重构用户服务层" → `/req:do 重构用户服务层`
|
|
144
|
+
- "升级 Go 到 1.23" → `/req:do 升级 Go 到 1.23`
|
|
145
|
+
- "统一错误码格式" → `/req:do 统一错误码格式`
|
|
146
|
+
- "做一下 #42" / "处理 issue #42" → `/req:do --from-issue=#42`
|
|
147
|
+
|
|
148
|
+
**不触发**:
|
|
149
|
+
- "这段代码可以优化"(讨论性)
|
|
150
|
+
- "是不是该重构了"(问句)
|
|
151
|
+
- "优化一下"(无对象)
|
|
152
|
+
|
|
153
|
+
### 2.3 快速修复/小功能(需文档)→ `/req:new-quick`
|
|
154
|
+
|
|
155
|
+
**触发**:
|
|
156
|
+
- "快速修复"、"快速改一下"、"快速改"、"小改动"、"小功能"、"快速需求"
|
|
157
|
+
|
|
158
|
+
与 `/req:fix` 的区别:`/req:fix` 无文档,`/req:new-quick` 会创建 QUICK 文档。用户语气偏向"要有记录"时选此项。
|
|
159
|
+
|
|
160
|
+
**示例**:
|
|
161
|
+
- "快速改一下分页默认值" → `/req:new-quick 分页默认值`
|
|
162
|
+
- "小功能:导出按钮加权限控制" → `/req:new-quick 导出按钮加权限控制`
|
|
163
|
+
- "快速修复,从 #42" → `/req:new-quick --from-issue=#42`
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 三、需求状态流转(必须带编号)
|
|
168
|
+
|
|
169
|
+
**共同触发条件**:动作关键词 **+** 需求编号(REQ-XXX / QUICK-XXX / 纯数字),缺编号不触发。
|
|
170
|
+
|
|
171
|
+
### 3.1 开发 → `/req:dev`
|
|
172
|
+
|
|
173
|
+
**触发**:"开发"、"开始开发"、"进入开发" + 编号
|
|
174
|
+
|
|
175
|
+
**示例**:
|
|
176
|
+
- "开始开发025" → `/req:dev REQ-025`
|
|
177
|
+
- "开发 QUICK-003" → `/req:dev QUICK-003`
|
|
178
|
+
|
|
179
|
+
### 3.2 测试 → `/req:test`
|
|
180
|
+
|
|
181
|
+
**触发**:"测试"、"开始测试"、"进入测试"、"做测试" + 编号
|
|
182
|
+
|
|
183
|
+
**示例**:
|
|
184
|
+
- "025 开始测试" → `/req:test REQ-025`
|
|
185
|
+
- "测试 REQ-003" → `/req:test REQ-003`
|
|
186
|
+
|
|
187
|
+
### 3.3 评审 → `/req:review`
|
|
188
|
+
|
|
189
|
+
**触发**:"评审通过"、"通过评审"、"评审驳回"、"驳回评审" + 编号
|
|
190
|
+
|
|
191
|
+
| 自然语言 | 映射 |
|
|
192
|
+
|---------|------|
|
|
193
|
+
| "025 评审通过" / "通过评审 025" | `/req:review pass` |
|
|
194
|
+
| "025 评审驳回" / "驳回 025" | `/req:review reject` |
|
|
195
|
+
|
|
196
|
+
### 3.4 完成归档 → `/req:done`
|
|
197
|
+
|
|
198
|
+
**触发**:"完成"、"归档"、"做完了"、"搞完了" + 编号
|
|
199
|
+
|
|
200
|
+
**示例**:
|
|
201
|
+
- "完成025" → `/req:done REQ-025`
|
|
202
|
+
- "025 做完了" → `/req:done REQ-025`
|
|
203
|
+
- "归档 QUICK-003" → `/req:done QUICK-003`
|
|
204
|
+
|
|
205
|
+
> `/req:done` 本身要求 y/n 确认,由原命令保证。
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 四、版本与 PR 操作
|
|
210
|
+
|
|
211
|
+
### 4.1 规范提交 → `/req:commit`
|
|
212
|
+
|
|
213
|
+
**触发**:
|
|
214
|
+
- "规范提交"、"提交代码"、"提 commit"、"写 commit"
|
|
215
|
+
- 或"提交" + 修饰语("这次修改"、"本次改动")
|
|
216
|
+
|
|
217
|
+
**示例**:
|
|
218
|
+
- "规范提交" → `/req:commit`
|
|
219
|
+
- "提交这次改动" → `/req:commit`
|
|
220
|
+
|
|
221
|
+
**不触发**:
|
|
222
|
+
- 孤立的"提交"字眼(如"提交到仓库"可能指 push)
|
|
223
|
+
|
|
224
|
+
### 4.2 创建 PR → `/req:pr`
|
|
225
|
+
|
|
226
|
+
**触发**:"创建 PR"、"提 PR"、"发 PR"、"开 PR"
|
|
227
|
+
|
|
228
|
+
**示例**:
|
|
229
|
+
- "创建 PR" → `/req:pr`
|
|
230
|
+
- "提 PR 025" → `/req:pr REQ-025`
|
|
231
|
+
|
|
232
|
+
### 4.3 审查/合并 PR → `/req:review-pr`
|
|
233
|
+
|
|
234
|
+
| 自然语言 | 映射 |
|
|
235
|
+
|---------|------|
|
|
236
|
+
| "审 PR"、"审查 PR"、"review PR"、"代码审查 PR" | `/req:review-pr review` |
|
|
237
|
+
| "合并 PR"、"merge PR"、"PR 合并了" | `/req:review-pr merge` |
|
|
238
|
+
| "拉 PR 评论"、"应用 PR 评论"、"处理 PR 反馈" | `/req:review-pr fetch-comments` |
|
|
239
|
+
|
|
240
|
+
**`--auto` 非交互模式触发词**(`review` 子命令专用,跳过上传评论前的确认):
|
|
241
|
+
|
|
242
|
+
- "自动审查"、"一键审查"、"审查并提交"、"审完直接评论"、"审完自动提评论"
|
|
243
|
+
- "不用确认"、"别问我"、"跑完再说"
|
|
244
|
+
- 显式带 "--auto"
|
|
245
|
+
|
|
246
|
+
**示例**:
|
|
247
|
+
- "一键审查 PR" → `/req:review-pr review --auto`
|
|
248
|
+
- "自动审查 owner/repo/pulls/158" → `/req:review-pr review --auto`(先切分支)
|
|
249
|
+
- "审 PR,别问我" → `/req:review-pr review --auto`
|
|
250
|
+
|
|
251
|
+
识别到 `--auto` 时回复须说明能力边界(详见 `commands/review-pr.md` 步骤 5.3)。
|
|
252
|
+
|
|
253
|
+
> `/req:review-pr merge` 和 `/req:review-pr fetch-comments` 自身的交互点不走 `--auto`:
|
|
254
|
+
> - `merge` 合并后的分支清理询问由 `branchStrategy.deleteBranchAfterMerge` 配置控制
|
|
255
|
+
> - `fetch-comments` 的"是否应用修改"询问保留,避免 AI 误改代码
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 五、Issue 操作
|
|
260
|
+
|
|
261
|
+
**目的**:用户用自然语言创建 / 编辑 / 关闭 / 评论 issue 时,自动映射到 `/req:issue` 子命令。
|
|
262
|
+
|
|
263
|
+
### 编号解析
|
|
264
|
+
|
|
265
|
+
issue 编号支持 `#42` / `42` / `issue 42` / `issue #42` 四种写法,都归一为 `42`。
|
|
266
|
+
|
|
267
|
+
### 5.1 创建 issue → `/req:issue new`
|
|
268
|
+
|
|
269
|
+
**触发**(同时满足):
|
|
270
|
+
1. 动词:"提"、"建"、"开"、"新建"、"创建"、"报"
|
|
271
|
+
2. 对象:**"issue"** 或 **"bug"**(带"报"字时)
|
|
272
|
+
|
|
273
|
+
**示例**:
|
|
274
|
+
- "提个 issue: 登录超时" → `/req:issue new 登录超时`
|
|
275
|
+
- "新建 issue 导出 Excel 乱码" → `/req:issue new 导出 Excel 乱码`
|
|
276
|
+
- "开 issue 积分排行榜排序异常" → `/req:issue new 积分排行榜排序异常`
|
|
277
|
+
- "报个 bug:订单分页数据重复" → `/req:issue new 订单分页数据重复`
|
|
278
|
+
- "给 REQ-001 建 issue 讨论实现方案" → `/req:issue new 讨论实现方案 --req=REQ-001`
|
|
279
|
+
|
|
280
|
+
**不触发**:
|
|
281
|
+
- "这个 bug 提给谁?"(提问)
|
|
282
|
+
- "怎么提 issue"(询问用法,走 `/req:help`)
|
|
283
|
+
|
|
284
|
+
### 5.2 评论 / 讨论 → `/req:issue comment`
|
|
285
|
+
|
|
286
|
+
**触发**(同时满足):
|
|
287
|
+
1. 动词:"评论"、"回复"、"回帖"、"留言"、"追评"、"补一句"
|
|
288
|
+
2. issue 编号
|
|
289
|
+
|
|
290
|
+
**示例**:
|
|
291
|
+
- "给 #42 回复 已修复" → `/req:issue comment 42 已修复`
|
|
292
|
+
- "在 issue 170 评论:已定位到 auth.ts" → `/req:issue comment 170 已定位到 auth.ts`
|
|
293
|
+
- "#42 追评:测试环境验证通过" → `/req:issue comment 42 测试环境验证通过`
|
|
294
|
+
- "看下 #42 的讨论" / "列出 #42 的评论" → `/req:issue comment 42 --list`
|
|
295
|
+
|
|
296
|
+
### 5.3 关闭 → `/req:issue close`
|
|
297
|
+
|
|
298
|
+
**触发**:
|
|
299
|
+
- "关闭 issue 42" / "close #42" / "把 issue 42 关了"
|
|
300
|
+
- "关闭 issue 42 并留言 xxx" → `/req:issue close 42 --comment=xxx`
|
|
301
|
+
|
|
302
|
+
**不触发**:
|
|
303
|
+
- "关闭需求 REQ-042"(走 `/req:done`,不是 issue)
|
|
304
|
+
|
|
305
|
+
### 5.4 重开 → `/req:issue reopen`
|
|
306
|
+
|
|
307
|
+
**触发**:"重开 issue 42" / "reopen #42" / "把 issue 42 打开"
|
|
308
|
+
|
|
309
|
+
### 5.5 查看详情 → `/req:issue show`
|
|
310
|
+
|
|
311
|
+
**触发**:
|
|
312
|
+
- "看下 issue 42" / "issue 42 详情" / "展示 #42"
|
|
313
|
+
- "issue 42 有哪些评论" → `/req:issue show 42`(show 会包含评论列表)
|
|
314
|
+
|
|
315
|
+
### 5.6 列表 → `/req:issue list`
|
|
316
|
+
|
|
317
|
+
**触发**:
|
|
318
|
+
- "列出 issue" / "列表 issue" / "open 的 issue" → `/req:issue list --state=open`
|
|
319
|
+
- "已关闭 issue" → `/req:issue list --state=closed`
|
|
320
|
+
- "我的 issue" / "分给我的 issue" → `/req:issue list --assignee=@me`
|
|
321
|
+
- "紧急 issue" / "bug issue" → `/req:issue list --labels=<匹配词>`
|
|
322
|
+
|
|
323
|
+
### 5.7 编辑 → `/req:issue edit`
|
|
324
|
+
|
|
325
|
+
**触发**:
|
|
326
|
+
- "给 issue 42 加标签 bug" → `/req:issue edit 42 --add-labels=bug`
|
|
327
|
+
- "改 issue 42 标题为 xxx" → `/req:issue edit 42 --title=xxx`
|
|
328
|
+
- "把 issue 42 指派给 @haiqing" → `/req:issue edit 42 --assignees=haiqing`
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## 六、Git 平台 URL 识别
|
|
333
|
+
|
|
334
|
+
**目的**:用户直接粘贴 issue / PR 链接时,自动识别类型并映射到对应命令。
|
|
335
|
+
|
|
336
|
+
### 6.1 识别模式
|
|
337
|
+
|
|
338
|
+
统一正则(支持带协议头和纯路径两种形式):
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
(?:https?://[^/\s]+/)?([^/\s]+)/([^/\s]+)/(issues|pull|pulls)/(\d+)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**捕获分组**:域名(可选)、`owner`、`repo`、类型(`issues` / `pull` / `pulls`)、编号 `N`。
|
|
345
|
+
|
|
346
|
+
**支持的 URL 形式**:
|
|
347
|
+
|
|
348
|
+
| 形式 | 示例 |
|
|
349
|
+
|------|------|
|
|
350
|
+
| 完整 URL | `https://github.com/pipexerp/diciai/pull/158` |
|
|
351
|
+
| 完整 URL(Gitea) | `https://git.example.com/pipexerp/diciai/pulls/158` |
|
|
352
|
+
| 纯路径 | `pipexerp/diciai/issues/169` |
|
|
353
|
+
| 纯路径 | `pipexerp/diciai/pulls/158` |
|
|
354
|
+
|
|
355
|
+
`pull` 和 `pulls` 都识别为 PR(GitHub 用单数,Gitea 用复数)。
|
|
356
|
+
|
|
357
|
+
### 6.2 仓库匹配检查
|
|
358
|
+
|
|
359
|
+
解析出 `owner/repo` 后,与当前仓库对比:
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
git remote get-url origin
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
从 remote URL 提取 `owner/repo`,与 URL 中的 `owner/repo` 比较:
|
|
366
|
+
- **匹配**:继续按意图映射
|
|
367
|
+
- **不匹配**:提示并退出,不自动跨仓库执行:
|
|
368
|
+
```
|
|
369
|
+
⚠️ URL 指向的仓库 pipexerp/diciai 与当前仓库 xxx/yyy 不同
|
|
370
|
+
💡 请切换到对应仓库目录后再执行
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### 6.3 Issue URL → 创建/修复/查看类命令
|
|
374
|
+
|
|
375
|
+
**URL 形式**:`.../issues/<N>`
|
|
376
|
+
|
|
377
|
+
#### 单独粘贴 URL(无动词)
|
|
378
|
+
|
|
379
|
+
展示选项让用户选择:
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
🔗 识别到 issue #169(pipexerp/diciai)
|
|
383
|
+
请选择操作:
|
|
384
|
+
1. 修 bug → /req:fix --from-issue=#169
|
|
385
|
+
2. 创建正式需求 → /req:new --from-issue=#169
|
|
386
|
+
3. 创建快速修复 → /req:new-quick --from-issue=#169
|
|
387
|
+
4. 智能开发 → /req:do --from-issue=#169
|
|
388
|
+
5. 查看 issue 详情 → /req:issue show 169
|
|
389
|
+
6. 评论该 issue → /req:issue comment 169 <文本>
|
|
390
|
+
7. 关闭该 issue → /req:issue close 169
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
#### URL + 动词(直接映射)
|
|
394
|
+
|
|
395
|
+
| 用户消息 | 映射 |
|
|
396
|
+
|---------|------|
|
|
397
|
+
| "修复 .../issues/169" / "修 .../issues/169 的 bug" | `/req:fix --from-issue=#169` |
|
|
398
|
+
| "创建需求 .../issues/169" / "从 .../issues/169 新建需求" | `/req:new --from-issue=#169` |
|
|
399
|
+
| "快速修复 .../issues/169" | `/req:new-quick --from-issue=#169` |
|
|
400
|
+
| "处理 .../issues/169" / "做一下 .../issues/169" | `/req:do --from-issue=#169` |
|
|
401
|
+
| "看下 .../issues/169" / "展示 .../issues/169" | `/req:issue show 169` |
|
|
402
|
+
| "评论 .../issues/169 xxx" / "回复 .../issues/169 xxx" | `/req:issue comment 169 xxx` |
|
|
403
|
+
| "关闭 .../issues/169" / "close .../issues/169" | `/req:issue close 169` |
|
|
404
|
+
| "重开 .../issues/169" / "reopen .../issues/169" | `/req:issue reopen 169` |
|
|
405
|
+
|
|
406
|
+
### 6.4 PR URL → 审查/合并类命令
|
|
407
|
+
|
|
408
|
+
**URL 形式**:`.../pull/<N>` 或 `.../pulls/<N>`
|
|
409
|
+
|
|
410
|
+
#### 分支匹配检查(必须先做)
|
|
411
|
+
|
|
412
|
+
`/req:review-pr` 通过**当前分支**匹配关联的 PR。识别到 PR URL 后,先验证:
|
|
413
|
+
|
|
414
|
+
```bash
|
|
415
|
+
# 获取当前分支对应的 PR 编号
|
|
416
|
+
gh pr view --json number 2>/dev/null # GitHub
|
|
417
|
+
# 或通过 Gitea API 按 head branch 查询(参考 _issue.md 的 Issue 拉取规范)
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
- **当前分支的 PR 编号 = URL 中的编号** → 可直接执行对应子命令
|
|
421
|
+
- **不匹配** → 提示切换分支:
|
|
422
|
+
```
|
|
423
|
+
⚠️ PR #158 对应的分支不是当前分支
|
|
424
|
+
当前分支:main
|
|
425
|
+
PR 分支:feat/REQ-001-user-points
|
|
426
|
+
💡 请先切换:git checkout feat/REQ-001-user-points
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
#### 单独粘贴 PR URL(无动词)
|
|
430
|
+
|
|
431
|
+
分支匹配后展示选项:
|
|
432
|
+
|
|
433
|
+
```
|
|
434
|
+
🔗 识别到 PR #158(pipexerp/diciai)
|
|
435
|
+
请选择操作:
|
|
436
|
+
1. 查看状态 → /req:review-pr
|
|
437
|
+
2. AI 审查代码 → /req:review-pr review
|
|
438
|
+
3. 拉评论应用到代码 → /req:review-pr fetch-comments
|
|
439
|
+
4. 合并 PR → /req:review-pr merge
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
#### PR URL + 动词(直接映射)
|
|
443
|
+
|
|
444
|
+
| 用户消息 | 映射 |
|
|
445
|
+
|---------|------|
|
|
446
|
+
| "看下 .../pulls/158"、"状态 .../pulls/158" | `/req:review-pr` |
|
|
447
|
+
| "审查 .../pulls/158"、"review .../pulls/158"、"审 .../pulls/158" | `/req:review-pr review` |
|
|
448
|
+
| "拉评论 .../pulls/158"、"应用评论 .../pulls/158" | `/req:review-pr fetch-comments` |
|
|
449
|
+
| "合并 .../pulls/158"、"merge .../pulls/158" | `/req:review-pr merge` |
|
|
450
|
+
|
|
451
|
+
### 6.5 处理优先级
|
|
452
|
+
|
|
453
|
+
同一条消息中**多种信号共存**时的优先级:
|
|
454
|
+
|
|
455
|
+
1. **动词 + URL**(最明确)→ 直接按动词映射(§6.3 / §6.4 的第二子节)
|
|
456
|
+
2. **仅 URL**(需用户选择)→ 展示选项列表
|
|
457
|
+
3. **动词 + 需求编号**(无 URL)→ 走 §一~§五 的原有规则
|
|
458
|
+
|
|
459
|
+
例:"修 pipexerp/diciai/issues/169" → 动词"修" + Issue URL → `/req:fix --from-issue=#169`,不再询问其它选项。
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## 七、确认偏好开关(直接动作,非命令映射)
|
|
464
|
+
|
|
465
|
+
用户可用自然语言开/关 Bash 原生确认弹框(git commit / mv / rm 需求文件)。本项由 Claude 直接执行文件动作并写入 memory,不走 `/req:*` 命令。
|
|
466
|
+
|
|
467
|
+
**触发词**:
|
|
468
|
+
|
|
469
|
+
| 意图 | 关键词 |
|
|
470
|
+
|------|-------|
|
|
471
|
+
| 开启 | "开启提交确认"、"commit 前帮我确认"、"以后 commit 要弹框"、"提交前问我一下" |
|
|
472
|
+
| 关闭 | "关闭提交确认"、"不用确认了"、"别再弹框"、"不要提交确认" |
|
|
473
|
+
| 查询 | "现在弹确认吗"、"提交确认开着吗"、"查看确认状态" |
|
|
474
|
+
|
|
475
|
+
**执行动作**:
|
|
476
|
+
|
|
477
|
+
- 开启 → `mkdir -p .claude && touch .claude/.req-confirm-commit`;在 auto-memory 中写入/更新一条 feedback 记录"该用户偏好 git commit 拦截已开启"。
|
|
478
|
+
- 关闭 → `rm -f .claude/.req-confirm-commit`;在 memory 中把对应偏好改为"关闭"或删除该条。
|
|
479
|
+
- 查询 → 直接检查 `.claude/.req-confirm-commit` 是否存在,告知当前状态,不修改任何文件。
|
|
480
|
+
|
|
481
|
+
**边界**:
|
|
482
|
+
|
|
483
|
+
- 只影响 Bash 侧 Hook,不拦截 Write/Edit
|
|
484
|
+
- 仅当 req 插件已安装时有效;downstream 项目的 `req` hook 会读取该 marker
|
|
485
|
+
- marker 已加入 `.gitignore`,每台机器独立
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## 不触发的情况(反例合集)
|
|
490
|
+
|
|
491
|
+
以下情况**不应触发**本技能,避免误匹配:
|
|
492
|
+
|
|
493
|
+
### 查询/展示类(走 `/req:show`、`/req:status`,本技能不处理)
|
|
494
|
+
- "看一下025需求"
|
|
495
|
+
- "025 什么状态"
|
|
496
|
+
- "展示025详情"
|
|
497
|
+
|
|
498
|
+
### 讨论/提问性语句
|
|
499
|
+
- "这段代码可以优化"
|
|
500
|
+
- "是不是该重构了"
|
|
501
|
+
- "这个 bug 怎么修"
|
|
502
|
+
- "这个需求太大了"
|
|
503
|
+
- "怎么新增需求"(询问用法)
|
|
504
|
+
|
|
505
|
+
### 关键词缺失必要信息
|
|
506
|
+
- "修改需求"但无编号
|
|
507
|
+
- "优化一下"但无具体对象
|
|
508
|
+
- "完成"但无编号
|
|
509
|
+
- "开发中"(形容状态,非动作)
|
|
510
|
+
|
|
511
|
+
### 插件/工具本身的维护
|
|
512
|
+
- "修改需求模板"
|
|
513
|
+
- "优化这个技能" / "调整 dispatcher"
|
|
514
|
+
- 涉及 `templates/`、`skills/`、`commands/` 文件的修改
|
|
515
|
+
|
|
516
|
+
### URL 相关的反例
|
|
517
|
+
- 链接指向其他仓库(与 `git remote` 不匹配)→ 提示后退出,不自动执行
|
|
518
|
+
- 链接指向 `/commits/`、`/blob/`、`/tree/`、`/compare/`、`/releases/` 等非 issue/PR 路径 → 不处理
|
|
519
|
+
- 纯域名或仓库首页(如 `github.com/owner/repo`)→ 不处理
|
|
520
|
+
- 讨论 URL 本身(如"这条链接怎么打开")→ 不处理
|
|
521
|
+
|
|
522
|
+
### 已明确用斜杠命令
|
|
523
|
+
- 用户消息以 `/req:`、`/pm:`、`/api:` 开头时,不介入,由原命令系统处理
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## 执行流程
|
|
528
|
+
|
|
529
|
+
解析完成后:
|
|
530
|
+
|
|
531
|
+
1. **确认意图**(一行说明即可,不长篇展开):
|
|
532
|
+
```
|
|
533
|
+
🧠 识别:/req:fix 登录超时后 token 未清除
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
2. **读取对应命令定义**:读取 `commands/<command>.md`,按原命令流程执行
|
|
537
|
+
|
|
538
|
+
3. **传入解析出的参数**:标题、编号、类型、模块、issue、编辑意图等
|
|
539
|
+
|
|
540
|
+
4. **后续流程与原 `/req:<command>` 完全一致**:包括命令自身的确认机制、Hook 拦截、状态更新规则
|
|
541
|
+
|
|
542
|
+
**特殊规则**:
|
|
543
|
+
- 同一条消息包含**多个意图**时:按对话顺序逐个询问,不并行执行
|
|
544
|
+
- 解析结果**有歧义**时:先向用户展示推断,确认后再执行
|
|
545
|
+
- 命令本身需要用户输入(如章节选择、方案确认)时:进入对应命令后按其原有交互继续
|