create-vibe-workflow 0.1.0 → 0.2.0
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 +248 -57
- package/dist/adapters/next-only/skills.recommend.json +1 -0
- package/dist/adapters/node-api/skills.recommend.json +1 -0
- package/dist/cli.js +163 -5
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +255 -44
- package/dist/generator.js.map +1 -1
- package/dist/questions.d.ts +11 -1
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +103 -16
- package/dist/questions.js.map +1 -1
- package/dist/templates/claude-md/CLAUDE.zh-CN.md +51 -46
- package/dist/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
- package/dist/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
- package/dist/templates/commands/gstack/cso.md.ejs +213 -0
- package/dist/templates/commands/gstack/office-hours.md.ejs +109 -0
- package/dist/templates/commands/gstack/review.md.ejs +192 -0
- package/dist/templates/commands/gstack/ship.md.ejs +256 -0
- package/dist/templates/commands/opsx/apply.md.ejs +106 -0
- package/dist/templates/commands/opsx/archive.md.ejs +88 -0
- package/dist/templates/commands/opsx/explore.md.ejs +84 -0
- package/dist/templates/commands/opsx/propose.md.ejs +185 -0
- package/dist/templates/commands/superpowers/brainstorm.md.ejs +240 -0
- package/dist/templates/commands/superpowers/tdd.md.ejs +230 -0
- package/dist/templates/commands/superpowers/verify.md.ejs +211 -0
- package/dist/templates/commands/workflow/plan.md.ejs +219 -0
- package/dist/templates/hooks/check-deps.mjs +66 -65
- package/dist/templates/memory/.gitkeep +0 -0
- package/dist/templates/memory/MEMORY.md.ejs +88 -0
- package/dist/templates/memory/dev-notes.md.ejs +61 -0
- package/dist/templates/memory/troubleshooting.md.ejs +30 -0
- package/dist/templates/rules/agents.md +49 -49
- package/dist/templates/rules/coding-style.md +156 -117
- package/dist/templates/rules/development-workflow.md +103 -50
- package/dist/templates/rules/git-workflow.md +103 -47
- package/dist/templates/rules/hooks.md +159 -0
- package/dist/templates/rules/hooks.md.ejs +159 -0
- package/dist/templates/rules/memory.md +106 -0
- package/dist/templates/rules/memory.md.ejs +106 -0
- package/dist/templates/rules/patterns.md +117 -48
- package/dist/templates/rules/performance.md +108 -0
- package/dist/templates/rules/performance.md.ejs +108 -0
- package/dist/templates/rules/security.md +52 -37
- package/dist/templates/rules/testing.md +83 -30
- package/dist/templates/settings/settings.template.json +18 -2
- package/dist/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
- package/dist/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
- package/dist/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
- package/dist/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
- package/dist/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
- package/dist/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
- package/dist/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
- package/dist/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
- package/dist/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
- package/dist/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
- package/dist/templates/skills/skill-manifest.json +59 -0
- package/dist/templates/skills/skills-lock.template.json +12 -0
- package/dist/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
- package/dist/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
- package/dist/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
- package/dist/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
- package/dist/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
- package/dist/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
- package/dist/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
- package/dist/utils.d.ts +40 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +110 -0
- package/dist/utils.js.map +1 -0
- package/package.json +2 -2
- package/templates/claude-md/CLAUDE.zh-CN.md +51 -46
- package/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
- package/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
- package/templates/commands/gstack/cso.md.ejs +213 -0
- package/templates/commands/gstack/office-hours.md.ejs +109 -0
- package/templates/commands/gstack/review.md.ejs +192 -0
- package/templates/commands/gstack/ship.md.ejs +256 -0
- package/templates/commands/opsx/apply.md.ejs +106 -0
- package/templates/commands/opsx/archive.md.ejs +88 -0
- package/templates/commands/opsx/explore.md.ejs +84 -0
- package/templates/commands/opsx/propose.md.ejs +185 -0
- package/templates/commands/superpowers/brainstorm.md.ejs +240 -0
- package/templates/commands/superpowers/tdd.md.ejs +230 -0
- package/templates/commands/superpowers/verify.md.ejs +211 -0
- package/templates/commands/workflow/plan.md.ejs +219 -0
- package/templates/hooks/check-deps.mjs +66 -65
- package/templates/memory/.gitkeep +0 -0
- package/templates/memory/MEMORY.md.ejs +88 -0
- package/templates/memory/dev-notes.md.ejs +61 -0
- package/templates/memory/troubleshooting.md.ejs +30 -0
- package/templates/rules/agents.md +49 -49
- package/templates/rules/coding-style.md +156 -117
- package/templates/rules/development-workflow.md +103 -50
- package/templates/rules/git-workflow.md +103 -47
- package/templates/rules/hooks.md +159 -0
- package/templates/rules/memory.md +106 -0
- package/templates/rules/patterns.md +117 -48
- package/templates/rules/performance.md +108 -0
- package/templates/rules/security.md +52 -37
- package/templates/rules/testing.md +83 -30
- package/templates/settings/settings.template.json +18 -2
- package/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
- package/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
- package/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
- package/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
- package/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
- package/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
- package/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
- package/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
- package/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
- package/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
- package/templates/skills/skill-manifest.json +59 -0
- package/templates/skills/skills-lock.template.json +12 -0
- package/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
- package/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
- package/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
- package/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
- package/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
- package/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
- package/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Review"
|
|
3
|
+
description: "Pre-landing PR 代码审查 — 分析 git diff 的结构性问题。源自 gstack /review"
|
|
4
|
+
category: "Quality"
|
|
5
|
+
tags: ["审查", "代码质量", "PR", "gstack"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Review
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
在 PR 合并前对代码变更进行结构化审查。分析 git diff 中的结构性问题、安全风险、性能隐患,并分类定级。
|
|
13
|
+
|
|
14
|
+
## 工作模式
|
|
15
|
+
|
|
16
|
+
<%= USER_LEVEL === 'vibe-coder' ? `
|
|
17
|
+
### 面向非专业编程人员(Vibe Coder)
|
|
18
|
+
|
|
19
|
+
审查就是"找人帮你检查代码有没有问题":
|
|
20
|
+
- 每个问题会用通俗语言解释
|
|
21
|
+
- 同时展示"有问题的代码"和"修改后的代码"——对比看
|
|
22
|
+
- 告诉你问题严重程度:红色的要必须修,黄色的最好修,蓝色的可修可不修
|
|
23
|
+
- 不要觉得被批评——审查是为了保护你的代码质量
|
|
24
|
+
- 如果看不懂某个问题,直接问,我会解释
|
|
25
|
+
` : `
|
|
26
|
+
### 面向专业开发者
|
|
27
|
+
|
|
28
|
+
- 关注结构性问题和业务逻辑正确性
|
|
29
|
+
- 按 CRITICAL / HIGH / MEDIUM / LOW 定级
|
|
30
|
+
- 只阻断 CRITICAL 和 HIGH 级别问题
|
|
31
|
+
- 提供具体的行级反馈
|
|
32
|
+
` %>
|
|
33
|
+
|
|
34
|
+
## 步骤
|
|
35
|
+
|
|
36
|
+
### 步骤 1:获取变更范围
|
|
37
|
+
|
|
38
|
+
确定要审查的 diff:
|
|
39
|
+
|
|
40
|
+
<%= USER_LEVEL === 'vibe-coder' ? `
|
|
41
|
+
### 获取变更内容
|
|
42
|
+
|
|
43
|
+
运行以下命令获取所有变更:
|
|
44
|
+
|
|
45
|
+
\`\`\`bash
|
|
46
|
+
git diff main...HEAD
|
|
47
|
+
\`\`\`
|
|
48
|
+
|
|
49
|
+
(如果用的是 master 分支,把 main 换成 master)
|
|
50
|
+
` : `
|
|
51
|
+
\`\`\`bash
|
|
52
|
+
git diff <base-branch>...HEAD
|
|
53
|
+
\`\`\`
|
|
54
|
+
|
|
55
|
+
自动检测 base branch(master/main),如果检测失败,让用户指定。
|
|
56
|
+
` %>
|
|
57
|
+
|
|
58
|
+
同时获取变更列表:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git diff --name-only <base-branch>...HEAD
|
|
62
|
+
git diff --stat <base-branch>...HEAD
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 步骤 2:结构化分析
|
|
66
|
+
|
|
67
|
+
从以下维度分析每次变更:
|
|
68
|
+
|
|
69
|
+
#### 1. SQL 安全(如有数据库变更)
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
□ 缺少索引:WHERE/ORDER BY/JOIN 列是否已有索引?
|
|
73
|
+
□ N+1 查询:是否有循环中查询数据库?
|
|
74
|
+
□ 迁移风险:数据迁移是否可回滚?
|
|
75
|
+
□ SQL 注入:是否使用了参数化查询?
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### 2. LLM 信任边界违规
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
□ 用户输入直接拼接到 prompt/系统指令中?
|
|
82
|
+
□ 是否有 prompt injection 风险?
|
|
83
|
+
□ LLM 输出是否经过验证再使用?
|
|
84
|
+
□ 敏感数据是否可能通过 prompt 泄露?
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### 3. 条件副作用
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
□ 条件判断中是否有副作用(赋值、API 调用)?
|
|
91
|
+
□ 短路求值是否可能导致意外的跳过?
|
|
92
|
+
□ if/else 分支是否覆盖了所有可能?
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### 4. 错误处理
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
□ 所有可能失败的操作都有 try-catch?
|
|
99
|
+
□ 错误信息是否泄露了敏感信息?
|
|
100
|
+
□ 失败路径是否会导致资源泄漏(连接未关闭、文件句柄未释放)?
|
|
101
|
+
□ 是否有静默吞错误(空的 catch 块)?
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### 5. 安全
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
□ 认证:新的 API 端点是否有权限检查?
|
|
108
|
+
□ 输入验证:用户输入是否经过验证?
|
|
109
|
+
□ 敏感数据:日志中是否记录了密码/token?
|
|
110
|
+
□ XSS/CSRF:前端是否做了输出转义?
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 步骤 3:问题分类定级
|
|
114
|
+
|
|
115
|
+
每个问题按以下标准分类:
|
|
116
|
+
|
|
117
|
+
| 级别 | 含义 | 动作 | 颜色 |
|
|
118
|
+
|------|------|------|------|
|
|
119
|
+
| **CRITICAL** | 必须修复 — 会导致数据丢失/安全漏洞/生产故障 | 阻断合并 | 🔴 |
|
|
120
|
+
| **HIGH** | 强烈建议修复 — 大概率引发 bug | 建议修复 | 🟠 |
|
|
121
|
+
| **MEDIUM** | 值得修复 — 未来可能出问题 | 考虑修复 | 🟡 |
|
|
122
|
+
| **LOW** | 风格偏好 — 不影响功能 | 可忽略 | 🔵 |
|
|
123
|
+
|
|
124
|
+
**问题报告格式:**
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
### [CRITICAL] <问题简述>
|
|
128
|
+
- **文件**: `path/to/file.ts:L42-L48`
|
|
129
|
+
- **问题**: <详细说明>
|
|
130
|
+
- **风险**: 如果不修复会导致...
|
|
131
|
+
- **修复建议**:
|
|
132
|
+
|
|
133
|
+
```diff
|
|
134
|
+
- // 有问题的代码
|
|
135
|
+
+ // 修复后的代码
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### [HIGH] <问题简述>
|
|
141
|
+
- **文件**: `path/to/file.ts:L100`
|
|
142
|
+
- **问题**: <详细说明>
|
|
143
|
+
- **修复建议**: <具体建议>
|
|
144
|
+
---
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 步骤 4:生成审查报告
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
## Review 报告
|
|
151
|
+
|
|
152
|
+
分支:feature/xxx → <base-branch>
|
|
153
|
+
变更文件:N 个 | 新增:+N | 删除:-N
|
|
154
|
+
|
|
155
|
+
### 摘要
|
|
156
|
+
|
|
157
|
+
- CRITICAL:N 个(必须修复)
|
|
158
|
+
- HIGH:N 个(建议修复)
|
|
159
|
+
- MEDIUM:N 个(考虑修复)
|
|
160
|
+
- LOW:N 个(风格偏好)
|
|
161
|
+
|
|
162
|
+
### 详细问题
|
|
163
|
+
|
|
164
|
+
[CRITICAL] ...
|
|
165
|
+
[HIGH] ...
|
|
166
|
+
[MEDIUM] ...
|
|
167
|
+
[LOW] ...
|
|
168
|
+
|
|
169
|
+
### 总体评价
|
|
170
|
+
|
|
171
|
+
<简短评价代码质量,建议接收/条件接收/拒绝>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 步骤 5:重新审查
|
|
175
|
+
|
|
176
|
+
用户修复问题后,再次运行 `/review` 确认所有 CRITICAL/HIGH 问题已修复。重复直到通过。
|
|
177
|
+
|
|
178
|
+
## 阻断规则
|
|
179
|
+
|
|
180
|
+
**以下情况必须标记为 CRITICAL:**
|
|
181
|
+
- 密码/token/密钥硬编码
|
|
182
|
+
- SQL 注入漏洞
|
|
183
|
+
- 认证绕过(无权限检查的 API)
|
|
184
|
+
- 可能导致数据丢失的变更
|
|
185
|
+
- 严重 N+1 查询(循环中查询数据库)
|
|
186
|
+
|
|
187
|
+
## 提示
|
|
188
|
+
|
|
189
|
+
- 保持审查客观、专业。不评价编码风格偏好,除非项目有明确规范
|
|
190
|
+
- 对于误报,在报告中说明"已确认为误报"
|
|
191
|
+
- 如果 diff 很大(>500 行),聚焦在关键逻辑变更上
|
|
192
|
+
- `/ship` 命令会自动调用 `/review`,并在有 CRITICAL 问题时中止
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Ship"
|
|
3
|
+
description: "准备并创建 Pull Request — merge base、测试、审查、版本号、changelog、PR。源自 gstack /ship"
|
|
4
|
+
category: "Release"
|
|
5
|
+
tags: ["发布", "PR", "ship", "gstack"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Ship
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
将当前分支的变更通过 Pull Request 发布。涵盖从合并 base 分支到创建 PR 的完整流程。
|
|
13
|
+
|
|
14
|
+
**这是开发工作流的第 9 步(最终步)**——其他步骤未完成时不应运行此命令。
|
|
15
|
+
|
|
16
|
+
## 工作模式
|
|
17
|
+
|
|
18
|
+
<%= USER_LEVEL === 'vibe-coder' ? `
|
|
19
|
+
### 面向非专业编程人员(Vibe Coder)
|
|
20
|
+
|
|
21
|
+
Ship 就是"把你的代码变化打包提交"的过程:
|
|
22
|
+
- 每一步会解释"现在在做什么"
|
|
23
|
+
- git 操作会翻译成通俗语言
|
|
24
|
+
- 如果出错,会明确告诉你哪里有问题、怎么修
|
|
25
|
+
- 最后会生成一个 PR——就像"提交作业给老师检查"
|
|
26
|
+
- 常见的术语解释:
|
|
27
|
+
- "merge" = "把最新代码合并进来"
|
|
28
|
+
- "branch" = "你的工作副本"
|
|
29
|
+
- "PR" = "请求把你的代码合并到主分支"
|
|
30
|
+
` : `
|
|
31
|
+
### 面向专业开发者
|
|
32
|
+
|
|
33
|
+
- 自动检测 base branch(master/main)
|
|
34
|
+
- 自动处理版本号和 changelog
|
|
35
|
+
- 内部调用 /review 和 /verify
|
|
36
|
+
- 输出符合项目规范的 PR
|
|
37
|
+
` %>
|
|
38
|
+
|
|
39
|
+
## 前提条件
|
|
40
|
+
|
|
41
|
+
在运行 `/ship` 前,确认以下条件已满足:
|
|
42
|
+
|
|
43
|
+
- [ ] 当前分支有未推送的 commit
|
|
44
|
+
- [ ] 所有 P0 任务已完成(检查 `todolist.md`)
|
|
45
|
+
- [ ] 没有未提交的变更(`git status` 干净,或已 stage)
|
|
46
|
+
- [ ] base branch (master/main) 可访问
|
|
47
|
+
|
|
48
|
+
如果条件不满足,向用户报告并等待修复。
|
|
49
|
+
|
|
50
|
+
## 步骤
|
|
51
|
+
|
|
52
|
+
### 步骤 1:检测并合并 base branch
|
|
53
|
+
|
|
54
|
+
自动检测 base branch(master 或 main):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 检测 base branch
|
|
58
|
+
BASE_BRANCH=$(git branch -l master main | head -1 | tr -d '* ')
|
|
59
|
+
echo "Base branch: $BASE_BRANCH"
|
|
60
|
+
|
|
61
|
+
# 获取最新
|
|
62
|
+
git fetch origin $BASE_BRANCH
|
|
63
|
+
|
|
64
|
+
# 合并
|
|
65
|
+
git merge origin/$BASE_BRANCH --no-edit
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**如果合并冲突**:
|
|
69
|
+
<%= USER_LEVEL === 'vibe-coder' ? `
|
|
70
|
+
- 告诉你哪些文件有冲突
|
|
71
|
+
- 这是正常情况——说明你和别人改了同一个文件
|
|
72
|
+
- 帮你解决冲突(保留双方的修改)
|
|
73
|
+
- 解决后继续流程
|
|
74
|
+
` : `
|
|
75
|
+
- 列出冲突文件
|
|
76
|
+
- 提示手动解决或协助解决
|
|
77
|
+
- 解决后继续
|
|
78
|
+
` %>
|
|
79
|
+
|
|
80
|
+
### 步骤 2:运行 /verify
|
|
81
|
+
|
|
82
|
+
自动调用 `/verify` 进行完整性检查:
|
|
83
|
+
|
|
84
|
+
- 编译检查
|
|
85
|
+
- 类型检查
|
|
86
|
+
- Lint 检查
|
|
87
|
+
- 测试套件(全部测试通过 + 覆盖率 ≥ 80%)
|
|
88
|
+
- 安全扫描
|
|
89
|
+
- Diff 审查
|
|
90
|
+
|
|
91
|
+
如果验证失败,**中止流程**:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
❌ Verification 失败!
|
|
95
|
+
|
|
96
|
+
原因:<具体失败阶段和信息>
|
|
97
|
+
|
|
98
|
+
请修复后重新运行 /ship。
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 步骤 3:运行 /review
|
|
102
|
+
|
|
103
|
+
自动调用 `/review` 进行代码审查。
|
|
104
|
+
|
|
105
|
+
如果存在 CRITICAL 问题:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
❌ 代码审查发现 CRITICAL 问题!
|
|
109
|
+
|
|
110
|
+
CRITICAL 问题列表:
|
|
111
|
+
1. <问题 1>
|
|
112
|
+
2. <问题 2>
|
|
113
|
+
|
|
114
|
+
请修复 CRITICAL 问题后重新运行 /ship。
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**HIGH 及以下级别问题**:记录但不阻断。
|
|
118
|
+
|
|
119
|
+
### 步骤 4:版本号(如适用)
|
|
120
|
+
|
|
121
|
+
如果项目根目录存在 `VERSION` 文件,根据 semver 规范自动递增:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 读取当前版本
|
|
125
|
+
VERSION=$(cat VERSION)
|
|
126
|
+
|
|
127
|
+
# 根据 commit 类型决定递增方式
|
|
128
|
+
# feat → minor, fix → patch, breaking → major
|
|
129
|
+
# 更新 VERSION 文件
|
|
130
|
+
echo "<new-version>" > VERSION
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**不自动提交 VERSION 变更**——让用户确认:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
当前版本:v1.2.3
|
|
137
|
+
建议版本:v1.3.0(根据 feat 提交自动推断)
|
|
138
|
+
确认更新?[Y/n]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 步骤 5:更新 CHANGELOG(如适用)
|
|
142
|
+
|
|
143
|
+
如果存在 `CHANGELOG.md` 或 `CHANGELOG.md`,追加变更记录:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
## [1.3.0] - <YYYY-MM-DD>
|
|
147
|
+
|
|
148
|
+
### Added
|
|
149
|
+
- <新功能描述>
|
|
150
|
+
|
|
151
|
+
### Fixed
|
|
152
|
+
- <Bug 修复描述>
|
|
153
|
+
|
|
154
|
+
### Changed
|
|
155
|
+
- <重构/优化描述>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
根据 git log 自动生成变更内容:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git log <base-branch>..HEAD --oneline --no-decorate
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 步骤 6:提交变更
|
|
165
|
+
|
|
166
|
+
如果存在 VERSION 和 CHANGELOG 的修改,提交它们:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
git add VERSION CHANGELOG.md
|
|
170
|
+
git commit -m "chore: bump version to v<新版本>"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 步骤 7:推送并创建 PR
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 获取当前分支名
|
|
177
|
+
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
178
|
+
|
|
179
|
+
# 推送
|
|
180
|
+
git push -u origin $BRANCH
|
|
181
|
+
|
|
182
|
+
# 创建 PR
|
|
183
|
+
gh pr create \
|
|
184
|
+
--title "<70 字符以内的 PR 标题>" \
|
|
185
|
+
--body "<PR 描述>"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**PR 标题格式**:`<type>: <简短描述>`(不超过 70 字符)
|
|
189
|
+
|
|
190
|
+
**PR 描述格式**:
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
## Summary
|
|
194
|
+
|
|
195
|
+
- <1-3 点说明变更内容>
|
|
196
|
+
- <按重要性排序>
|
|
197
|
+
|
|
198
|
+
## Test Plan
|
|
199
|
+
|
|
200
|
+
- [ ] 单元测试通过
|
|
201
|
+
- [ ] 集成测试通过
|
|
202
|
+
- [ ] 手动测试关键路径
|
|
203
|
+
- [ ] 检查无回归
|
|
204
|
+
|
|
205
|
+
Closes #<issue-number>(如有)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
<%= USER_LEVEL === 'vibe-coder' ? `
|
|
209
|
+
### PR 描述示例
|
|
210
|
+
|
|
211
|
+
PR 标题和描述会自动生成。标题简短说明"做了什么",描述里详细列出"改了哪些"和"怎么验证"。
|
|
212
|
+
` : '' %>
|
|
213
|
+
|
|
214
|
+
### 步骤 8:输出摘要
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
## Ship 完成 🚢
|
|
218
|
+
|
|
219
|
+
分支:<branch-name> → <base-branch>
|
|
220
|
+
PR:<PR URL>
|
|
221
|
+
|
|
222
|
+
### 变更统计
|
|
223
|
+
- 文件变更:<N> 个
|
|
224
|
+
- 新增行:+<N>
|
|
225
|
+
- 删除行:-<N>
|
|
226
|
+
|
|
227
|
+
### 提交列表
|
|
228
|
+
1. <commit-hash> <commit-message>
|
|
229
|
+
2. <commit-hash> <commit-message>
|
|
230
|
+
|
|
231
|
+
### 验证结果
|
|
232
|
+
- /verify:✅ 通过
|
|
233
|
+
- /review:✅ 通过
|
|
234
|
+
|
|
235
|
+
### 版本:v<新版本>(如有)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## 错误处理
|
|
239
|
+
|
|
240
|
+
| 错误场景 | 处理方式 |
|
|
241
|
+
|---------|---------|
|
|
242
|
+
| 合并冲突 | 报告冲突文件,协助解决后重试 |
|
|
243
|
+
| 测试失败 | 报告失败项,等待修复后重试 |
|
|
244
|
+
| Verify 失败 | 中止流程,报告失败详情 |
|
|
245
|
+
| Review CRITICAL | 中止流程,要求修复 CRITICAL |
|
|
246
|
+
| Push 失败 | 检查远程权限,重试 |
|
|
247
|
+
| PR 创建失败 | 检查 gh 认证,重试 |
|
|
248
|
+
|
|
249
|
+
## 提示
|
|
250
|
+
|
|
251
|
+
- `/ship` 应该在所有 P0 任务完成后运行
|
|
252
|
+
- 如果当前分支还没有 push 过,会自动处理
|
|
253
|
+
- 如果项目没有 VERSION 文件,跳过版本号步骤
|
|
254
|
+
- 如果项目没有 CHANGELOG,跳过 changelog 步骤
|
|
255
|
+
- 保持 PR 标题简短(< 70 字符)——标题太长会被截断
|
|
256
|
+
- PR 描述包含测试计划——方便 reviewer 验证
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "OPSX: Apply"
|
|
3
|
+
description: "按 OpenSpec 提案的任务清单逐项实现代码变更"
|
|
4
|
+
category: "Workflow"
|
|
5
|
+
tags: ["实现", "开发", "OpenSpec"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# OPSX: Apply
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
按照 `openspec/changes/<change-name>/tasks.md` 中的任务清单,逐项实现代码变更。每个任务完成后标记 `[x]`,直到所有 P0 任务完成。
|
|
13
|
+
|
|
14
|
+
## 前提条件
|
|
15
|
+
|
|
16
|
+
- `openspec/changes/<change-name>/` 下必须有 `tasks.md`
|
|
17
|
+
- 如果不存在,提示用户先运行 `/opsx:propose`
|
|
18
|
+
- 如果存在 `proposal.md` 和 `design.md`,在实现前先阅读它们
|
|
19
|
+
|
|
20
|
+
## 步骤
|
|
21
|
+
|
|
22
|
+
### 步骤 1:选择变更
|
|
23
|
+
|
|
24
|
+
如果用户在命令中指定了变更名称(如 `/opsx:apply add-user-login`),直接使用。
|
|
25
|
+
|
|
26
|
+
否则,列出 `openspec/changes/` 下的所有变更(排除 `archive/`),让用户选择:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
可用的提案:
|
|
30
|
+
1. add-user-login (3/5 任务完成)
|
|
31
|
+
2. fix-order-pagination (0/2 任务完成)
|
|
32
|
+
请选择 (1-2):
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 步骤 2:阅读上下文
|
|
36
|
+
|
|
37
|
+
实现前先阅读:
|
|
38
|
+
1. `tasks.md` — 了解完整任务清单
|
|
39
|
+
2. `design.md` — 了解设计方案
|
|
40
|
+
3. `proposal.md` — 了解业务背景和验收标准
|
|
41
|
+
|
|
42
|
+
如果有共同依赖的上下文(相邻模块代码、现有接口定义等),一并阅读。
|
|
43
|
+
|
|
44
|
+
### 步骤 3:逐项实现任务
|
|
45
|
+
|
|
46
|
+
对 tasks.md 中的每个 **未完成** 的 P0 任务:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
### 正在实现:<任务描述>
|
|
50
|
+
|
|
51
|
+
当前任务:<commit-message>
|
|
52
|
+
涉及文件:<files>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
1. **理解任务**:确保清楚这个任务要改什么
|
|
56
|
+
2. **做出修改**:只做最少修改,完成当前任务
|
|
57
|
+
3. **验证**:确保代码编译通过、相关测试通过
|
|
58
|
+
4. **标记完成**:将 `[ ]` 改为 `[x]`
|
|
59
|
+
5. **文档反写**:如果修改涉及文档(API、schema 等),同步更新
|
|
60
|
+
6. **进入下一个任务**
|
|
61
|
+
|
|
62
|
+
#### 实现原则
|
|
63
|
+
|
|
64
|
+
- **保持聚焦**: 一个任务只做一件事,不做未来优化
|
|
65
|
+
- **最小变更**: 能改一行不改两行,能不改就不改
|
|
66
|
+
- **遵循现有模式**: 和已有代码风格一致,不发明新写法
|
|
67
|
+
- **编译通过**: 每个任务完成后确保 `tsc` / `npm run build` 通过
|
|
68
|
+
- **跳过 TDD**: Apply 模式下不再强制 RED-GREEN-REFACTOR,但需要确保修改的正确性
|
|
69
|
+
|
|
70
|
+
### 步骤 4:暂停条件
|
|
71
|
+
|
|
72
|
+
在以下情况下停止执行,并向用户报告:
|
|
73
|
+
|
|
74
|
+
| 情况 | 动作 |
|
|
75
|
+
|------|------|
|
|
76
|
+
| **任务描述不清晰** | 暂停,向用户确认具体要怎么改 |
|
|
77
|
+
| **设计问题暴露** | 暂停,建议先更新 design.md 再继续 |
|
|
78
|
+
| **遇到编译/测试错误** | 暂停,排查根因,修复后继续 |
|
|
79
|
+
| **依赖的外部条件不满足** | 暂停,告知用户需要的外部依赖 |
|
|
80
|
+
| **用户中途打断** | 暂停,记录当前进度,下次可继续 |
|
|
81
|
+
|
|
82
|
+
### 步骤 5:完成
|
|
83
|
+
|
|
84
|
+
所有 P0 任务标记完成后:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
✅ 变更 <change-name> 的 P0 任务已全部完成!
|
|
88
|
+
|
|
89
|
+
完成情况:
|
|
90
|
+
- [x] 任务 1
|
|
91
|
+
- [x] 任务 2
|
|
92
|
+
- [ ] 任务 3 (P1,后续迭代)
|
|
93
|
+
|
|
94
|
+
P1 待办(共 N 项):
|
|
95
|
+
- 任务 3
|
|
96
|
+
- 任务 4
|
|
97
|
+
|
|
98
|
+
建议运行测试确认无回归。
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 提示
|
|
102
|
+
|
|
103
|
+
- 如果用户是 Vibe Coder,在暂停时用通俗语言解释问题,不要说技术术语
|
|
104
|
+
- 每个任务完成后如果有必要,运行 `npm test` / `npm run build` 确保没有 break
|
|
105
|
+
- 如果编码过程中发现 tasks.md 有遗漏的任务,先暂停并询问用户是否补充
|
|
106
|
+
- 不要一次性修改所有文件再逐一验证,应该做一点验证一点
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "OPSX: Archive"
|
|
3
|
+
description: "将已完成的变更归档到 openspec/changes/archive/ 中"
|
|
4
|
+
category: "Workflow"
|
|
5
|
+
tags: ["归档", "清理", "OpenSpec"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# OPSX: Archive
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
将已完成(或决定暂停)的变更从 `openspec/changes/<change-name>/` 移入 `openspec/changes/archive/YYYY-MM-DD-<name>/`,保持工作区整洁。
|
|
13
|
+
|
|
14
|
+
## 步骤
|
|
15
|
+
|
|
16
|
+
### 步骤 1:选择要归档的变更
|
|
17
|
+
|
|
18
|
+
如果用户在命令中指定了变更名称(如 `/opsx:archive add-user-login`),直接使用。
|
|
19
|
+
|
|
20
|
+
否则,列出 `openspec/changes/` 下所有 **未被归档** 的变更(排除 `archive/` 目录):
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
可归档的变更:
|
|
24
|
+
1. add-user-login ✅ 5/5 任务完成
|
|
25
|
+
2. fix-order-pagination ⚠️ 1/2 任务完成
|
|
26
|
+
3. abandon-idea ⚠️ 0/2 任务完成
|
|
27
|
+
请选择 (1-3):
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 步骤 2:检查制品完整性
|
|
31
|
+
|
|
32
|
+
读取变更目录下的所有文件,检查核心制品是否存在:
|
|
33
|
+
|
|
34
|
+
- `proposal.md` — 是否存在
|
|
35
|
+
- `design.md` — 是否存在(可选)
|
|
36
|
+
- `tasks.md` — 是否存在,P0 任务是否全部完成
|
|
37
|
+
|
|
38
|
+
### 步骤 3:警告未完成任务
|
|
39
|
+
|
|
40
|
+
如果存在未完成的 P0 任务,显示警告但 **不阻止归档**:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
⚠️ 警告:以下 P0 任务尚未完成:
|
|
44
|
+
- 实现用户注册接口
|
|
45
|
+
- 添加注册表单页面
|
|
46
|
+
|
|
47
|
+
确认归档?[y/N]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
如果用户确认(y),继续归档。
|
|
51
|
+
|
|
52
|
+
### 步骤 4:执行归档
|
|
53
|
+
|
|
54
|
+
1. 创建 `openspec/changes/archive/` 目录(如不存在)
|
|
55
|
+
2. 以日期前导命名归档目录:`archive/YYYY-MM-DD-<change-name>/`
|
|
56
|
+
- 示例:`archive/2025-06-15-add-user-login/`
|
|
57
|
+
3. 将整个变更目录移动到归档位置
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
📦 正在归档:add-user-login
|
|
61
|
+
→ openspec/changes/archive/2025-06-15-add-user-login/
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 步骤 5:展示摘要
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
✅ 归档完成!
|
|
68
|
+
|
|
69
|
+
变更:add-user-login
|
|
70
|
+
归档位置:openspec/changes/archive/2025-06-15-add-user-login/
|
|
71
|
+
完成状态:5/5 P0 任务已完成
|
|
72
|
+
归档日期:<%= GENERATED_AT.split('T')[0] %>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
如果存在未完成任务,在后面追加:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
⚠️ 注意:归档时有 1 个 P0 任务未完成。
|
|
79
|
+
如需继续,运行 /opsx:apply 然后输入变更名,AI 会从存档中读取任务清单。
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 提示
|
|
83
|
+
|
|
84
|
+
- 归档是不可逆操作(但可以手动移回),归档前询问确认
|
|
85
|
+
- 即使是未完成的提案也建议归档,而不是直接删除——归档保留了决策记录
|
|
86
|
+
- 对于放弃的提案,可以在归档目录中补充一个 `ABANDONED.md` 说明放弃原因
|
|
87
|
+
- 归档后不需要修改任何代码或文档,只移动文件
|
|
88
|
+
- 如果 archive/ 目录中有同名变更,在名称后追加 `-v2`、`-v3` 等后缀
|