@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,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: new
|
|
3
|
+
description: |
|
|
4
|
+
创建新需求 - 基于模板创建需求文档
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 创建新需求
|
|
8
|
+
|
|
9
|
+
基于模板创建新的需求文档,引导用户完成需求分析。
|
|
10
|
+
|
|
11
|
+
> **Audience:** Product Manager
|
|
12
|
+
> 存储路径规则见 [_storage.md](./_storage.md)
|
|
13
|
+
|
|
14
|
+
## 命令格式
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/req:new [需求标题] [--type=类型] [--module=模块名] [--from-issue=#编号]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**示例:**
|
|
21
|
+
- `/req:new 用户积分系统` - 交互选择类型和模块
|
|
22
|
+
- `/req:new 用户积分-后端 --type=后端 --module=用户模块`
|
|
23
|
+
- `/req:new 订单优惠券 --type=全栈 --module=订单模块,支付模块`
|
|
24
|
+
- `/req:new --from-issue=#123` - 从 GitHub/Gitea issue 创建,标题/正文作为讨论起点
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 执行流程
|
|
29
|
+
|
|
30
|
+
### 0. (可选)从 issue 导入
|
|
31
|
+
|
|
32
|
+
若命令带 `--from-issue=#N`,按 [_issue.md 的 Issue 拉取规范](./_issue.md#issue-拉取规范) 拉取 issue。
|
|
33
|
+
|
|
34
|
+
拉取成功后:
|
|
35
|
+
- **默认标题**:issue 标题(用户未传标题时直接采用,传了则以用户标题为准)
|
|
36
|
+
- **issue 字段**:记录 `#N`,稍后写入文档元信息
|
|
37
|
+
- **讨论上下文**:将 issue 正文作为「问题与现状」的初始输入,跳过阶段一的第一个主题追问,直接展示解析结果让用户确认或补充
|
|
38
|
+
|
|
39
|
+
### 1. 生成编号
|
|
40
|
+
扫描 active/ 和 completed/ 目录,最大编号 +1 → `REQ-XXX`
|
|
41
|
+
|
|
42
|
+
### 2. 收集信息
|
|
43
|
+
|
|
44
|
+
交互收集(未通过参数指定时):
|
|
45
|
+
- **标题**(必填)
|
|
46
|
+
- **类型**:后端 / 前端 / 全栈
|
|
47
|
+
- **模块**(必填):从已有模块选择或创建新模块
|
|
48
|
+
- **关联需求**:如果是后端,询问是否关联前端需求
|
|
49
|
+
- **优先级**:P1/P2/P3,默认 P2
|
|
50
|
+
|
|
51
|
+
#### 模块选择流程(强制)
|
|
52
|
+
|
|
53
|
+
正式需求**必须关联模块**,流程如下:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
1. 扫描 docs/requirements/modules/ 获取现有模块列表
|
|
57
|
+
2. 展示选项:
|
|
58
|
+
|
|
59
|
+
请选择所属模块:
|
|
60
|
+
|
|
61
|
+
1. 用户模块
|
|
62
|
+
2. 订单模块
|
|
63
|
+
3. 支付模块
|
|
64
|
+
|
|
65
|
+
n. 创建新模块
|
|
66
|
+
|
|
67
|
+
3. 用户选择:
|
|
68
|
+
- 选择现有模块 → 继续下一步
|
|
69
|
+
- 选择"创建新模块" → 输入模块名 → 创建模块文档 → 继续
|
|
70
|
+
4. 支持多模块:用逗号分隔(如 --module=用户模块,订单模块)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**注意**:不允许跳过模块选择,这确保所有正式需求都能按模块检索。
|
|
74
|
+
|
|
75
|
+
### 3. 读取模板
|
|
76
|
+
|
|
77
|
+
**必须先读取模板文件**,确定文档结构:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
优先级:
|
|
81
|
+
1. 本地模板:docs/requirements/templates/requirement-template.md
|
|
82
|
+
2. 插件模板:<plugin-path>/templates/requirement-template.md
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**两个路径都不存在时,终止操作**:
|
|
86
|
+
```
|
|
87
|
+
❌ 未找到需求模板文件
|
|
88
|
+
|
|
89
|
+
请执行 /req:update-template requirement 恢复模板
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
读取后解析模板的完整章节结构,后续创建文档**必须严格保留模板中的所有章节、层级和格式**。
|
|
93
|
+
|
|
94
|
+
### 4. 创建文档
|
|
95
|
+
|
|
96
|
+
1. **严格按模板结构**创建文档,保留所有章节标题和占位内容
|
|
97
|
+
2. 填充元信息(编号、类型、模块、状态=草稿、日期)
|
|
98
|
+
3. 若从 issue 导入 → 元信息 `issue` 字段填 `#N`;否则填 `-`
|
|
99
|
+
4. 写入 `docs/requirements/active/REQ-XXX-标题.md`
|
|
100
|
+
5. 同步到全局缓存(如已绑定项目)
|
|
101
|
+
|
|
102
|
+
**格式约束(强制):**
|
|
103
|
+
- 章节标题、编号、层级必须与模板完全一致
|
|
104
|
+
- 不得新增、删除、合并或重命名模板中的章节
|
|
105
|
+
- 未填写的章节保留模板中的占位文本,不得删除
|
|
106
|
+
- 表格结构(列名、列数)必须与模板一致
|
|
107
|
+
|
|
108
|
+
### 5. 引导需求分析
|
|
109
|
+
|
|
110
|
+
分两阶段完善需求文档的**需求定义章节**(一~六、九):
|
|
111
|
+
|
|
112
|
+
**阶段一:AI 多轮讨论收集**
|
|
113
|
+
|
|
114
|
+
通过多轮对话收集需求信息(详见 requirement-analyzer 技能),围绕以下主题展开:
|
|
115
|
+
|
|
116
|
+
1. **问题与现状** → 收集背景、客户场景
|
|
117
|
+
2. **期望结果** → 收集目标、价值
|
|
118
|
+
3. **操作流程** → 收集使用场景(角色、步骤、异常)
|
|
119
|
+
4. **约束与风险** → 收集非功能约束、外部依赖、风险项
|
|
120
|
+
|
|
121
|
+
每轮只问一个主题,用户用自然语言回答,AI 追问模糊点。**不限制讨论轮数**,可以反复深入、补充、修正,直到用户明确确认(如"可以了"、"没问题"、"开始生成")后才进入阶段二。
|
|
122
|
+
|
|
123
|
+
**阶段二:AI 一次性生成文档**
|
|
124
|
+
|
|
125
|
+
基于收集的信息,AI 推导生成所有需求定义章节:
|
|
126
|
+
1. **一、需求描述**(结构化用户回答 → 背景、目标、客户场景、价值、范围与边界、干系人)
|
|
127
|
+
2. **二、功能清单**(从使用场景中提取原子功能点)
|
|
128
|
+
3. **三、业务规则**(从场景提炼规则,含非功能约束)
|
|
129
|
+
4. **四、使用场景**(结构化用户描述的操作流程)
|
|
130
|
+
5. **五、接口需求**(需要什么接口能力,不定义技术细节)
|
|
131
|
+
6. **六、测试要点**(6.1 技术测试 + 6.2 验收标准)
|
|
132
|
+
7. **十、关联信息**(外部依赖、假设、风险项、关联需求)
|
|
133
|
+
|
|
134
|
+
**不在创建阶段填写的章节:**
|
|
135
|
+
- **七、图示**(可选,有需要时由用户或 AI 补充 Mermaid 图)
|
|
136
|
+
- **十一、实现方案**(含数据模型、文件改动清单、实现步骤)→ 在 `/req:dev` 阶段由 AI 分析代码后自动生成
|
|
137
|
+
|
|
138
|
+
**AI 生成时必须遵循模板格式**:填充内容到模板对应章节中,不得改变章节结构。
|
|
139
|
+
|
|
140
|
+
### 6. 更新 PRD 索引
|
|
141
|
+
|
|
142
|
+
在 `docs/requirements/PRD.md` 的「需求追踪」章节追加新需求记录:
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
| REQ-XXX | 需求标题 | 模块名 | 草稿 | YYYY-MM-DD | - |
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
若 PRD.md 不存在或无「需求追踪」章节,跳过此步骤。
|
|
149
|
+
|
|
150
|
+
### 7. 更新关联
|
|
151
|
+
|
|
152
|
+
- 更新模块文档的「相关需求」
|
|
153
|
+
- 更新 INDEX.md 索引
|
|
154
|
+
|
|
155
|
+
### 8. 输出结果
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
✅ 需求文档已创建
|
|
159
|
+
路径:docs/requirements/active/REQ-XXX-标题.md
|
|
160
|
+
模块:用户模块
|
|
161
|
+
状态:草稿
|
|
162
|
+
|
|
163
|
+
下一步:
|
|
164
|
+
- /req:edit REQ-XXX - 继续完善
|
|
165
|
+
- /req:review REQ-XXX - 提交评审
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 用户输入
|
|
171
|
+
|
|
172
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: new-quick
|
|
3
|
+
description: |
|
|
4
|
+
快速修复 - 创建小bug修复或小功能的快速需求
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 快速修复需求
|
|
8
|
+
|
|
9
|
+
> **Audience:** Engineer
|
|
10
|
+
|
|
11
|
+
用于小bug修复或小功能开发,简化流程:方案确认即可开发。
|
|
12
|
+
|
|
13
|
+
## 命令格式
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/req:new-quick [标题]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 简化生命周期
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
草稿 → ✅ 方案确认 → 开发中 → 已完成
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
(跳过:评审、测试阶段)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 执行流程
|
|
32
|
+
|
|
33
|
+
### 0. 解析存储路径
|
|
34
|
+
|
|
35
|
+
本地主存储为 `docs/requirements/active/` 和 `docs/requirements/completed/`,确保目录存在。读取 `settings.local.json` 的 `requirementProject`;有绑定则同时准备缓存路径 `~/.claude-requirements/projects/$PROJECT/`。
|
|
36
|
+
|
|
37
|
+
### 1. 生成需求编号
|
|
38
|
+
|
|
39
|
+
格式:`QUICK-XXX`(三位数字,如 QUICK-001)
|
|
40
|
+
|
|
41
|
+
扫描本地 active/completed 和缓存 active/completed 中所有 QUICK-XXX 文件,取两边最大编号中的较大值,加 1 生成新编号。
|
|
42
|
+
|
|
43
|
+
### 1.5 (可选)从 issue 导入
|
|
44
|
+
|
|
45
|
+
若命令带 `--from-issue=#N`,按 [_issue.md 的 Issue 拉取规范](./_issue.md#issue-拉取规范) 拉取 issue:
|
|
46
|
+
- issue 标题作为默认标题
|
|
47
|
+
- issue 正文作为「问题/需求描述」的初始输入
|
|
48
|
+
- 元信息 `issue` 字段填 `#N`(否则填 `-`)
|
|
49
|
+
|
|
50
|
+
`repoType` 为 `other` 或未配置时提示并退出。
|
|
51
|
+
|
|
52
|
+
### 2. 收集基本信息
|
|
53
|
+
|
|
54
|
+
如果未提供标题,询问用户:
|
|
55
|
+
|
|
56
|
+
**需要收集的信息:**
|
|
57
|
+
- 问题/需求描述(必填)
|
|
58
|
+
- 类型:bug修复 / 小功能 / 优化(默认:bug修复)
|
|
59
|
+
- 优先级(P1/P2/P3,默认 P2)
|
|
60
|
+
- **模块**:自动设为「快速修复」(无需用户选择)
|
|
61
|
+
|
|
62
|
+
### 3. 读取模板
|
|
63
|
+
|
|
64
|
+
**必须先读取快速修复模板**,确定文档结构:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
优先级:
|
|
68
|
+
1. 本地模板:docs/requirements/templates/quick-template.md
|
|
69
|
+
2. 插件模板:<plugin-path>/templates/quick-template.md
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**两个路径都不存在时,终止操作**:
|
|
73
|
+
```
|
|
74
|
+
❌ 未找到快速修复模板文件
|
|
75
|
+
|
|
76
|
+
请执行 /req:update-template quick 恢复模板
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
读取后解析模板的完整章节结构,后续创建文档**必须严格保留模板中的所有章节、层级和格式**。
|
|
80
|
+
|
|
81
|
+
### 4. 创建简化文档
|
|
82
|
+
|
|
83
|
+
**步骤 4.1:严格按模板结构创建**
|
|
84
|
+
|
|
85
|
+
使用快速需求模板创建文件:`$LOCAL_ACTIVE/QUICK-XXX-标题.md`
|
|
86
|
+
|
|
87
|
+
**格式约束(强制):**
|
|
88
|
+
- 章节标题、层级必须与模板完全一致
|
|
89
|
+
- 不得新增、删除、合并或重命名模板中的章节
|
|
90
|
+
- 未填写的章节保留模板中的占位文本,不得删除
|
|
91
|
+
- 表格结构(列名、列数)必须与模板一致
|
|
92
|
+
|
|
93
|
+
**初始化内容:**
|
|
94
|
+
- 填充元信息(编号、标题、类型、状态=草稿、日期)
|
|
95
|
+
- **模块字段设为「快速修复」**
|
|
96
|
+
- `issue` 字段:从 issue 导入时填 `#N`,否则填 `-`
|
|
97
|
+
- 生命周期勾选「草稿」
|
|
98
|
+
|
|
99
|
+
**步骤 4.2:同步到全局缓存**
|
|
100
|
+
|
|
101
|
+
若已绑定项目,将新建文档同步复制到 `$CACHE_ACTIVE/`。
|
|
102
|
+
|
|
103
|
+
### 5. 快速分析并生成方案
|
|
104
|
+
|
|
105
|
+
AI 分析问题/需求,生成实现方案:
|
|
106
|
+
|
|
107
|
+
#### 4.1 问题分析(如果是bug)
|
|
108
|
+
- 分析错误信息/现象
|
|
109
|
+
- 定位问题根因
|
|
110
|
+
- 确定影响范围
|
|
111
|
+
|
|
112
|
+
#### 4.2 代码定位
|
|
113
|
+
- 搜索相关代码
|
|
114
|
+
- 确定涉及的文件
|
|
115
|
+
- 理解现有实现
|
|
116
|
+
|
|
117
|
+
#### 4.3 生成实现方案
|
|
118
|
+
- 具体的改动说明
|
|
119
|
+
- 涉及文件清单
|
|
120
|
+
- 预估改动量(小/中)
|
|
121
|
+
|
|
122
|
+
### 6. 方案确认
|
|
123
|
+
|
|
124
|
+
显示方案摘要,等待用户确认:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
快速需求:QUICK-001 修复xxx问题
|
|
128
|
+
|
|
129
|
+
类型:bug修复
|
|
130
|
+
优先级:P2
|
|
131
|
+
|
|
132
|
+
问题分析:
|
|
133
|
+
[问题根因分析]
|
|
134
|
+
|
|
135
|
+
实现方案:
|
|
136
|
+
[具体实现方案]
|
|
137
|
+
|
|
138
|
+
涉及文件:
|
|
139
|
+
- internal/xxx/biz/xxx.go(修改)
|
|
140
|
+
- internal/xxx/store/xxx.go(修改)
|
|
141
|
+
|
|
142
|
+
改动量:小(约 20 行)
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 7. 方案确认检查
|
|
147
|
+
|
|
148
|
+
在确认前检查:
|
|
149
|
+
- [ ] 改动范围可控(建议 <5 个文件)
|
|
150
|
+
- [ ] 不涉及数据库结构变更
|
|
151
|
+
- [ ] 不影响其他核心功能
|
|
152
|
+
- [ ] 可快速验证
|
|
153
|
+
|
|
154
|
+
**如果任一不满足**,建议用户升级为正式需求:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
⚠️ 此改动可能超出快速修复范围:
|
|
158
|
+
- 涉及 8 个文件
|
|
159
|
+
- 需要修改数据库表结构
|
|
160
|
+
|
|
161
|
+
建议使用正式需求流程:/req:new [标题]
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 8. 确认后进入开发
|
|
166
|
+
|
|
167
|
+
用户确认后:
|
|
168
|
+
|
|
169
|
+
1. 更新状态为「方案确认」→「开发中」
|
|
170
|
+
2. 更新需求文档(先本地,后缓存)
|
|
171
|
+
3. 使用 TodoWrite 生成开发任务
|
|
172
|
+
4. 按照 dev-guide 技能引导开发
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
✅ 方案已确认,开始开发
|
|
176
|
+
|
|
177
|
+
开发任务:
|
|
178
|
+
1. [ ] 修改 internal/xxx/biz/xxx.go
|
|
179
|
+
2. [ ] 修改 internal/xxx/store/xxx.go
|
|
180
|
+
3. [ ] 自测验证
|
|
181
|
+
|
|
182
|
+
开始执行第一个任务...
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 9. 开发完成
|
|
186
|
+
|
|
187
|
+
完成所有改动后:
|
|
188
|
+
|
|
189
|
+
1. 更新状态为「已完成」
|
|
190
|
+
2. 移动文档到 completed 目录
|
|
191
|
+
3. 同步缓存
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
快速修复完成!
|
|
195
|
+
|
|
196
|
+
QUICK-001 修复xxx问题
|
|
197
|
+
状态:已完成
|
|
198
|
+
改动文件:2 个
|
|
199
|
+
耗时:约 15 分钟
|
|
200
|
+
|
|
201
|
+
文档归档:docs/requirements/completed/QUICK-001-修复xxx问题.md
|
|
202
|
+
|
|
203
|
+
下一步(可选):
|
|
204
|
+
- 代码审查:/code-reviewer
|
|
205
|
+
- 提交代码:git add . && git commit
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 适用场景
|
|
211
|
+
|
|
212
|
+
### 适合快速修复的情况
|
|
213
|
+
|
|
214
|
+
- 简单的 bug 修复(逻辑错误、空指针等)
|
|
215
|
+
- 小功能增强(新增字段、调整参数等)
|
|
216
|
+
- 代码优化(性能优化、代码整理等)
|
|
217
|
+
- UI 微调(文案修改、样式调整等)
|
|
218
|
+
|
|
219
|
+
### 不适合快速修复的情况
|
|
220
|
+
|
|
221
|
+
建议使用 `/req:new` 创建正式需求:
|
|
222
|
+
|
|
223
|
+
- 涉及数据库表结构变更
|
|
224
|
+
- 涉及多个模块的联动修改
|
|
225
|
+
- 需要新增 API 接口
|
|
226
|
+
- 影响核心业务流程
|
|
227
|
+
- 需要多人协作或评审
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 与正式需求的区别
|
|
232
|
+
|
|
233
|
+
| 对比项 | 快速修复 (QUICK) | 正式需求 (REQ) |
|
|
234
|
+
|-------|-----------------|---------------|
|
|
235
|
+
| 编号格式 | QUICK-XXX | REQ-XXX |
|
|
236
|
+
| 生命周期 | 4 阶段 | 6 阶段 |
|
|
237
|
+
| 评审环节 | 无 | 有 |
|
|
238
|
+
| 测试环节 | 自测 | 完整测试 |
|
|
239
|
+
| 文档详细度 | 简化 | 完整 |
|
|
240
|
+
| 适用场景 | 小改动 | 中大型需求 |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 用户输入
|
|
245
|
+
|
|
246
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr
|
|
3
|
+
description: |
|
|
4
|
+
创建 PR - 根据仓库类型自动创建 Pull Request
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 创建 Pull Request
|
|
8
|
+
|
|
9
|
+
根据分支策略中的仓库类型,自动推送分支并创建 PR。
|
|
10
|
+
|
|
11
|
+
> **Audience:** Engineer
|
|
12
|
+
> 不受仓库角色限制,readonly 也可执行。不触发缓存同步。
|
|
13
|
+
>
|
|
14
|
+
> **CLI 优先级**:GitHub 走 `gh pr create`;Gitea 按 [`_gitea_cli.md`](./_gitea_cli.md) 检测,可用 `tea` 时走 `tea pulls create --base <target> --head <branch> --title ... --description ...`,否则回退本文 curl 示例。
|
|
15
|
+
|
|
16
|
+
## 命令格式
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
/req:pr [REQ-XXX] [--title=自定义标题] [--base=目标分支]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- 省略编号时根据当前分支名匹配需求
|
|
23
|
+
- `--title`、`--base` 覆盖自动值
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 执行流程
|
|
28
|
+
|
|
29
|
+
### 1. 识别需求和分支
|
|
30
|
+
|
|
31
|
+
- 指定编号 → 读取该需求的 `branch` 字段,按逗号拆分得到分支列表
|
|
32
|
+
- 未指定 → `git branch --show-current`,从分支名提取 `REQ-XXX` / `QUICK-XXX`
|
|
33
|
+
- 两者都失败 → 提示 `请指定需求编号:/req:pr REQ-XXX` 退出
|
|
34
|
+
|
|
35
|
+
**多分支处理**:`branch` 字段含多个分支时,为**每个分支各创建一个 PR**,依次执行步骤 2–8:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
此需求有 2 个开发分支,将分别创建 PR:
|
|
39
|
+
[1/2] feat/REQ-025-backend → main
|
|
40
|
+
[2/2] feat/REQ-025-frontend → main
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
若只需对当前分支创建 PR,直接运行(不传编号),命令自动匹配当前分支。
|
|
44
|
+
|
|
45
|
+
### 2. 前置检查
|
|
46
|
+
|
|
47
|
+
`git status --porcelain` 有未提交改动时,自动串联执行 `/req:commit` 流程(分支检查 + 生成提交信息 + 提交),成功后继续。
|
|
48
|
+
|
|
49
|
+
### 3. 读取策略配置 + 推导合并目标
|
|
50
|
+
|
|
51
|
+
读取 `.claude/settings.local.json.branchStrategy`:
|
|
52
|
+
- `model`(`git-flow` / `github-flow` / `trunk-based`,缺省 `github-flow`)
|
|
53
|
+
- `mainBranch`(缺省 `main`)
|
|
54
|
+
- `developBranch`(缺省 `develop`,git-flow 专用)
|
|
55
|
+
- `mergeTarget`(兜底值,缺省 `main`)
|
|
56
|
+
- `repoType`(缺省 `other`)
|
|
57
|
+
- `giteaUrl`、`giteaToken`(仅 gitea 需要)
|
|
58
|
+
- `deleteBranchAfterMerge`(缺省 `true`)
|
|
59
|
+
- `reviewers`(数组,缺省 `[]`;非空则自动设置审核人,无需确认)
|
|
60
|
+
|
|
61
|
+
无 `branchStrategy` → 按 `other` 处理,`reviewers` 视为空。
|
|
62
|
+
|
|
63
|
+
**合并目标推导**(`--base` 可覆盖最终结果):
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
branch = 当前分支名
|
|
67
|
+
|
|
68
|
+
if model == "git-flow":
|
|
69
|
+
if branch 以 "hotfix/" 开头:
|
|
70
|
+
targets = [mainBranch, developBranch] # 步骤 7 双 PR
|
|
71
|
+
elif branch 以 "release/" 或 "chore/release-" 开头:
|
|
72
|
+
targets = [mainBranch] # release 合入主线
|
|
73
|
+
else: # feat/ fix/ 等功能分支
|
|
74
|
+
targets = [developBranch] # 功能合入 develop
|
|
75
|
+
elif model in ("github-flow", "trunk-based"):
|
|
76
|
+
targets = [mainBranch]
|
|
77
|
+
else:
|
|
78
|
+
targets = [mergeTarget] # 兜底
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`--base` 存在时直接覆盖 `targets = [args.base]`,跳过上述推导。
|
|
82
|
+
|
|
83
|
+
### 4. 生成 PR 标题和 Body
|
|
84
|
+
|
|
85
|
+
**标题**(`--title` 覆盖):
|
|
86
|
+
- REQ-XXX → `feat(REQ-XXX): <标题>`
|
|
87
|
+
- QUICK-XXX → `fix(QUICK-XXX): <标题>`
|
|
88
|
+
- hotfix 分支 → `hotfix: <描述>`
|
|
89
|
+
|
|
90
|
+
**Body**(Markdown):
|
|
91
|
+
```
|
|
92
|
+
## 需求
|
|
93
|
+
- 编号 / 标题 / 状态(从需求文档 YAML 元信息读取)
|
|
94
|
+
|
|
95
|
+
## 功能清单
|
|
96
|
+
(从需求文档「二、功能清单」提取)
|
|
97
|
+
|
|
98
|
+
## 变更文件
|
|
99
|
+
(从「十一、实现方案.文件改动清单」提取;无则跳过)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 5. 推送分支
|
|
103
|
+
|
|
104
|
+
推送当前分支到 origin 并设置上游追踪。
|
|
105
|
+
|
|
106
|
+
### 6. 按 repoType 创建 PR
|
|
107
|
+
|
|
108
|
+
#### gitea
|
|
109
|
+
|
|
110
|
+
1. 解析 `git remote get-url origin` 得到 `OWNER/REPO`(SSH/HTTPS 均支持)
|
|
111
|
+
2. `giteaToken` 缺失 → 提示配置方式,给出手动 compare 链接退出
|
|
112
|
+
3. 先查 `GET /api/v1/repos/{OWNER}/{REPO}/pulls?state=open&head={OWNER}:{branch}&base={target}` 是否已有 PR;有 → 输出现有 PR 链接,跳到步骤 8
|
|
113
|
+
4. 无 → `POST /api/v1/repos/{OWNER}/{REPO}/pulls`,参数 `title/body/head/base`
|
|
114
|
+
5. **设置审核人**(`reviewers` 非空时,**不询问**直接执行):
|
|
115
|
+
- `POST /api/v1/repos/{OWNER}/{REPO}/pulls/{N}/requested_reviewers`,body `{"reviewers": [...]}`
|
|
116
|
+
- tea CLI 无对应子命令,统一走 curl
|
|
117
|
+
- 单个失败(用户名不存在 / 权限不足)不阻塞主流程,输出 ⚠️ 提示后继续
|
|
118
|
+
|
|
119
|
+
成功输出:
|
|
120
|
+
```
|
|
121
|
+
✅ PR 已创建
|
|
122
|
+
<url>
|
|
123
|
+
已请求审核:@user1, @user2 ← reviewers 非空时输出
|
|
124
|
+
/req:review-pr review / merge,或 /req:done 归档
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### github
|
|
128
|
+
|
|
129
|
+
检查 `command -v gh`。可用 → `gh pr create --title "..." --body "..." --base <target>`,`reviewers` 非空时追加 `--reviewer <逗号分隔列表>`(**不询问**直接执行)。不可用 → 提示命令 + 浏览器 compare 链接。
|
|
130
|
+
|
|
131
|
+
#### other
|
|
132
|
+
|
|
133
|
+
不创建 PR,输出:
|
|
134
|
+
```
|
|
135
|
+
分支已推送:<branch> → <target>
|
|
136
|
+
合并命令:git checkout <target> && git merge <branch>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 7. 多目标处理
|
|
140
|
+
|
|
141
|
+
`targets` 包含多个分支时(当前仅 git-flow hotfix 场景),对每个 target 各执行一次步骤 6,输出对应 PR 链接 / 命令。
|
|
142
|
+
|
|
143
|
+
### 8. 分支清理提示
|
|
144
|
+
|
|
145
|
+
**auto 模式跳过**:若项目内存在 `.claude/.req-auto` 且 mtime 在 10 分钟内(由 `/req:fix --auto` 等上游命令创建),直接跳过本步骤,不询问也不切分支——PR 刚创建还没合并,此时删本地分支不合理,合并后用 `/req:review-pr merge` 自然处理。
|
|
146
|
+
|
|
147
|
+
非 auto 模式下,`deleteBranchAfterMerge != false` 时询问:
|
|
148
|
+
```
|
|
149
|
+
是否切回 <target> 并删除本地分支 <branch>?
|
|
150
|
+
```
|
|
151
|
+
确认 → 切回 target 并删除本地分支(用 `-d` 而非 `-D`,未合并时会被 git 拒绝)。当前已在目标分支则跳过切换。远程分支不删。
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 用户输入
|
|
156
|
+
|
|
157
|
+
$ARGUMENTS
|