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.
Files changed (120) hide show
  1. package/README.md +248 -57
  2. package/dist/adapters/next-only/skills.recommend.json +1 -0
  3. package/dist/adapters/node-api/skills.recommend.json +1 -0
  4. package/dist/cli.js +163 -5
  5. package/dist/cli.js.map +1 -1
  6. package/dist/generator.d.ts.map +1 -1
  7. package/dist/generator.js +255 -44
  8. package/dist/generator.js.map +1 -1
  9. package/dist/questions.d.ts +11 -1
  10. package/dist/questions.d.ts.map +1 -1
  11. package/dist/questions.js +103 -16
  12. package/dist/questions.js.map +1 -1
  13. package/dist/templates/claude-md/CLAUDE.zh-CN.md +51 -46
  14. package/dist/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
  15. package/dist/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
  16. package/dist/templates/commands/gstack/cso.md.ejs +213 -0
  17. package/dist/templates/commands/gstack/office-hours.md.ejs +109 -0
  18. package/dist/templates/commands/gstack/review.md.ejs +192 -0
  19. package/dist/templates/commands/gstack/ship.md.ejs +256 -0
  20. package/dist/templates/commands/opsx/apply.md.ejs +106 -0
  21. package/dist/templates/commands/opsx/archive.md.ejs +88 -0
  22. package/dist/templates/commands/opsx/explore.md.ejs +84 -0
  23. package/dist/templates/commands/opsx/propose.md.ejs +185 -0
  24. package/dist/templates/commands/superpowers/brainstorm.md.ejs +240 -0
  25. package/dist/templates/commands/superpowers/tdd.md.ejs +230 -0
  26. package/dist/templates/commands/superpowers/verify.md.ejs +211 -0
  27. package/dist/templates/commands/workflow/plan.md.ejs +219 -0
  28. package/dist/templates/hooks/check-deps.mjs +66 -65
  29. package/dist/templates/memory/.gitkeep +0 -0
  30. package/dist/templates/memory/MEMORY.md.ejs +88 -0
  31. package/dist/templates/memory/dev-notes.md.ejs +61 -0
  32. package/dist/templates/memory/troubleshooting.md.ejs +30 -0
  33. package/dist/templates/rules/agents.md +49 -49
  34. package/dist/templates/rules/coding-style.md +156 -117
  35. package/dist/templates/rules/development-workflow.md +103 -50
  36. package/dist/templates/rules/git-workflow.md +103 -47
  37. package/dist/templates/rules/hooks.md +159 -0
  38. package/dist/templates/rules/hooks.md.ejs +159 -0
  39. package/dist/templates/rules/memory.md +106 -0
  40. package/dist/templates/rules/memory.md.ejs +106 -0
  41. package/dist/templates/rules/patterns.md +117 -48
  42. package/dist/templates/rules/performance.md +108 -0
  43. package/dist/templates/rules/performance.md.ejs +108 -0
  44. package/dist/templates/rules/security.md +52 -37
  45. package/dist/templates/rules/testing.md +83 -30
  46. package/dist/templates/settings/settings.template.json +18 -2
  47. package/dist/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
  48. package/dist/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
  49. package/dist/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
  50. package/dist/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
  51. package/dist/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
  52. package/dist/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
  53. package/dist/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
  54. package/dist/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
  55. package/dist/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
  56. package/dist/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
  57. package/dist/templates/skills/skill-manifest.json +59 -0
  58. package/dist/templates/skills/skills-lock.template.json +12 -0
  59. package/dist/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
  60. package/dist/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
  61. package/dist/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
  62. package/dist/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
  63. package/dist/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
  64. package/dist/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
  65. package/dist/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
  66. package/dist/utils.d.ts +40 -0
  67. package/dist/utils.d.ts.map +1 -0
  68. package/dist/utils.js +110 -0
  69. package/dist/utils.js.map +1 -0
  70. package/package.json +2 -2
  71. package/templates/claude-md/CLAUDE.zh-CN.md +51 -46
  72. package/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
  73. package/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
  74. package/templates/commands/gstack/cso.md.ejs +213 -0
  75. package/templates/commands/gstack/office-hours.md.ejs +109 -0
  76. package/templates/commands/gstack/review.md.ejs +192 -0
  77. package/templates/commands/gstack/ship.md.ejs +256 -0
  78. package/templates/commands/opsx/apply.md.ejs +106 -0
  79. package/templates/commands/opsx/archive.md.ejs +88 -0
  80. package/templates/commands/opsx/explore.md.ejs +84 -0
  81. package/templates/commands/opsx/propose.md.ejs +185 -0
  82. package/templates/commands/superpowers/brainstorm.md.ejs +240 -0
  83. package/templates/commands/superpowers/tdd.md.ejs +230 -0
  84. package/templates/commands/superpowers/verify.md.ejs +211 -0
  85. package/templates/commands/workflow/plan.md.ejs +219 -0
  86. package/templates/hooks/check-deps.mjs +66 -65
  87. package/templates/memory/.gitkeep +0 -0
  88. package/templates/memory/MEMORY.md.ejs +88 -0
  89. package/templates/memory/dev-notes.md.ejs +61 -0
  90. package/templates/memory/troubleshooting.md.ejs +30 -0
  91. package/templates/rules/agents.md +49 -49
  92. package/templates/rules/coding-style.md +156 -117
  93. package/templates/rules/development-workflow.md +103 -50
  94. package/templates/rules/git-workflow.md +103 -47
  95. package/templates/rules/hooks.md +159 -0
  96. package/templates/rules/memory.md +106 -0
  97. package/templates/rules/patterns.md +117 -48
  98. package/templates/rules/performance.md +108 -0
  99. package/templates/rules/security.md +52 -37
  100. package/templates/rules/testing.md +83 -30
  101. package/templates/settings/settings.template.json +18 -2
  102. package/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
  103. package/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
  104. package/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
  105. package/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
  106. package/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
  107. package/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
  108. package/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
  109. package/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
  110. package/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
  111. package/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
  112. package/templates/skills/skill-manifest.json +59 -0
  113. package/templates/skills/skills-lock.template.json +12 -0
  114. package/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
  115. package/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
  116. package/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
  117. package/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
  118. package/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
  119. package/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
  120. package/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
@@ -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` 等后缀
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: "OPSX: Explore"
3
+ description: "以探索模式分析问题、研究代码、比较方案,不修改任何代码"
4
+ category: "Workflow"
5
+ tags: ["探索", "分析", "研究", "OpenSpec"]
6
+ ---
7
+
8
+ # OPSX: Explore
9
+
10
+ ## 职责
11
+
12
+ 这是一个 **探索姿态**,不是固定工作流。当用户对某个问题还没有清晰想法时,用这个命令自由探索。**禁止修改任何代码或文件**。
13
+
14
+ ## 你可以做
15
+
16
+ - ✅ **阅读代码**:理解现有实现、接口定义、模块结构
17
+ - ✅ **搜索查询**:用 Grep / Glob 查找相关代码
18
+ - ✅ **分析问题**:定位 Bug 根因、性能瓶颈、设计缺陷
19
+ - ✅ **画图说明**:用 ASCII 图表(流程图、架构图、时序图)帮助理解
20
+ - ✅ **提问澄清**:向用户询问更多细节
21
+ - ✅ **方案对比**:列出多个方案的优劣,辅助决策
22
+ - ✅ **技术调研**:分析某个库 / API / 模式的适用性
23
+ - ✅ **风险评估**:识别实现某个功能可能的风险点
24
+ - ✅ **阅读文档**:查看项目的文档、设计文档、PRD 等
25
+
26
+ ## 你不能做
27
+
28
+ - ❌ **修改任何代码文件**
29
+ - ❌ **创建新文件**
30
+ - ❌ **运行修改文件的命令**(如代码生成器 scaffold)
31
+ - ❌ **标记任务为完成**
32
+ - ❌ **做出设计决策**(只能提供分析供用户决策)
33
+
34
+ ## 常见场景
35
+
36
+ ### 场景 1:模糊的想法
37
+
38
+ 用户说"我想要一个登录功能",但不确定具体要什么。你可以:
39
+ 1. 检查项目是否有已有的认证方案
40
+ 2. 分析常见的登录方案(邮箱密码 / OAuth / 手机号)
41
+ 3. 列出每种方案的优劣
42
+ 4. 询问用户的具体需求
43
+
44
+ ### 场景 2:问题调查
45
+
46
+ 用户说"列表页面很慢"。你可以:
47
+ 1. 查看列表页面代码
48
+ 2. 分析数据查询、渲染逻辑
49
+ 3. 查找潜在性能瓶颈
50
+ 4. 给出优化建议(不实现)
51
+
52
+ ### 场景 3:方案比较
53
+
54
+ 用户说"用 Prisma 还是 Drizzle?"。你可以:
55
+ 1. 阅读项目现有数据库代码
56
+ 2. 对比两个 ORM 的特性和项目适配度
57
+ 3. 给出推荐和理由
58
+ 4. 让用户决策
59
+
60
+ ### 场景 4:代码理解
61
+
62
+ 用户说"这个模块怎么工作的?"你可以:
63
+ 1. 阅读模块代码
64
+ 2. 绘制数据流图
65
+ 3. 解释关键逻辑
66
+
67
+ ## 结束方式
68
+
69
+ 探索没有强制产出,可以自然结束:
70
+
71
+ | 情况 | 做法 |
72
+ |------|------|
73
+ | 用户明确了想法 | 建议下一步运行 `/opsx:propose` |
74
+ | 用户要做决策 | 提供分析摘要,让用户决策 |
75
+ | 用户没有进一步问题 | 询问"还有什么需要探索的吗?" |
76
+ | 用户决定实现 | 建议 `/opsx:propose` → `/opsx:apply` |
77
+
78
+ ## 提示
79
+
80
+ - 探索时不预设结论,保持开放心态
81
+ - 多问"为什么",帮用户理清真实需求
82
+ - 画 ASCII 图表非常有价值,比文字描述高效得多
83
+ - 如果发现明显的问题(如安全漏洞),可以指出但 **不要修复**
84
+ - 探索过程中如果用户提出"能不能帮我改一下",提醒用户切换到 apply 模式
@@ -0,0 +1,185 @@
1
+ ---
2
+ name: "OPSX: Propose"
3
+ description: "将需求想法转化为结构化规格文档(提案 + 设计 + 任务拆解),项目根目录下的 openspec/changes/ 中"
4
+ category: "Workflow"
5
+ tags: ["需求", "规划", "规格", "OpenSpec"]
6
+ ---
7
+
8
+ # OPSX: Propose
9
+
10
+ ## 职责
11
+
12
+ 将用户的一个需求想法(自然语言描述)转化为可执行的结构化规格文档。产出三个文件到 `openspec/changes/<change-name>/` 目录:
13
+
14
+ | 文件 | 内容 |
15
+ |------|------|
16
+ | `proposal.md` | 做什么 & 为什么做、范围界定、P0/P1 优先级划分 |
17
+ | `design.md` | 怎么做、架构方案、关键决策 |
18
+ | `tasks.md` | 可检查的任务清单(每个任务 = 一个独立 commit) |
19
+
20
+ ## 工作模式
21
+
22
+ <%= USER_LEVEL === 'vibe-coder' ? `
23
+ ### 面向非专业编程人员(Vibe Coder)
24
+
25
+ 用户可能没有技术背景。你的任务是:
26
+ - **引导式提问**:用自然语言追问,帮用户理清需求
27
+ - **翻译成技术语言**:把用户的"我想要一个登录页面"翻译为功能规格
28
+ - **不做假设**:不清楚的地方用 AskUserQuestion 确认
29
+ - **给出选项**:设计方案时给 2-3 个选项,说明各自优劣
30
+ ` : `
31
+ ### 面向专业开发者
32
+
33
+ - 可以直接讨论技术方案、架构选型
34
+ - 关注实现效率和技术合理性
35
+ - 可以复用项目已有的模式和约定
36
+ ` %>
37
+
38
+ ## 步骤
39
+
40
+ ### 步骤 1:理解需求
41
+
42
+ - 接收用户自然语言描述的需求
43
+ - 如果描述模糊,用 **AskUserQuestion** 追问澄清:
44
+ - "这个功能解决谁的什么问题?"
45
+ - "你觉得什么样的输出算做完了?"
46
+ - "有没有类似的参考?"
47
+ - 提炼出核心目标和验收标准(1-3 条)
48
+
49
+ ### 步骤 2:确定变更名称
50
+
51
+ - 从需求描述中提取关键词,推导 kebab-case 的变更名称
52
+ - 示例:"添加用户登录功能" → `add-user-login`
53
+ - 示例:"修复订单列表分页问题" → `fix-order-pagination`
54
+ - 如不确定,向用户确认名称
55
+
56
+ ### 步骤 3:创建目录结构
57
+
58
+ 创建 `openspec/changes/<change-name>/` 目录,包含三个文件:
59
+ - `proposal.md`
60
+ - `design.md`
61
+ - `tasks.md`
62
+
63
+ > 如果 `openspec/` 目录不存在,先创建它并添加 `.gitkeep`。
64
+
65
+ ### 步骤 4:编写 proposal.md
66
+
67
+ **做什么 & 为什么做**
68
+ ```
69
+ # 提案:<变更名称>
70
+
71
+ ## 概述
72
+ 用 1-3 句话说明要做什么,为什么做。
73
+
74
+ ## 用户故事
75
+ 作为 <角色>,
76
+ 我想要 <功能/能力>,
77
+ 以便 <业务价值>。
78
+
79
+ ## 验收标准
80
+ - [ ] P0: ...
81
+ - [ ] P0: ...
82
+ - [ ] P1: ...
83
+
84
+ ## 范围界定
85
+
86
+ ### 在范围内
87
+ - 功能 A
88
+ - 功能 B
89
+
90
+ ### 不在范围内(明确排除)
91
+ - 功能 X(后续迭代)
92
+ - 功能 Y(不相关)
93
+
94
+ ## 优先级
95
+
96
+ ### P0(本次必须完成)
97
+ - ...
98
+
99
+ ### P1(设计时考虑,本次不实现)
100
+ - ...
101
+ ```
102
+
103
+ - P0 是必须完成的核心功能,P1 是后续迭代
104
+ - 验收标准要可检查(能用 yes/no 回答)
105
+
106
+ ### 步骤 5:编写 design.md
107
+
108
+ **怎么做**
109
+ ```
110
+ # 设计:<变更名称>
111
+
112
+ ## 架构方案
113
+ <描述整体方案,含组件/模块交互>
114
+
115
+ ## 关键决策
116
+
117
+ ### 决策 1:<标题>
118
+ - **选项**: A / B / C
119
+ - **选择**: A
120
+ - **理由**: ...
121
+ - **影响**: ...
122
+
123
+ ## 数据流
124
+ <数据如何流转,核心流程>
125
+
126
+ ## 接口/API(如适用)
127
+ <接口定义、参数、返回值>
128
+
129
+ ## 影响分析
130
+ <会影响哪些已有模块,是否需要迁移>
131
+ ```
132
+
133
+ - 保持简洁,重点在关键决策和数据流
134
+ - 不需要过度设计,够下一个步骤的任务拆解用即可
135
+
136
+ ### 步骤 6:编写 tasks.md
137
+
138
+ **任务清单**
139
+ ```
140
+ # 任务:<变更名称>
141
+
142
+ ## P0 任务(本次实现)
143
+
144
+ - [ ] `<commit-message>` — <描述>(~<估算行数> 行)
145
+ 涉及文件:<file1>, <file2>
146
+
147
+ ## P1 任务(后续迭代)
148
+
149
+ - [ ] `<commit-message>` — <描述>
150
+ ```
151
+
152
+ - 每个任务对应一个独立 commit
153
+ - 每个任务 50-300 行变更
154
+ - 按照实现顺序排列(依赖前置)
155
+ - 对每个任务标注涉及的文件(方便 AI 定位上下文)
156
+
157
+ ### 步骤 7:展示摘要
158
+
159
+ 生成完成后,用简洁格式向用户展示摘要:
160
+
161
+ ```
162
+ ## 摘要
163
+
164
+ 变更:<change-name>
165
+
166
+ ### 做什么
167
+ <一句话说明>
168
+
169
+ ### P0 任务
170
+ 1. ...
171
+ 2. ...
172
+
173
+ ### P1(后续)
174
+ - ...
175
+ - ...
176
+
177
+ 已生成:openspec/changes/<change-name>/
178
+ ```
179
+
180
+ ## 提示
181
+
182
+ - 如果项目已有其他 `openspec/changes/` 中的提案,先阅读它们以保持一致风格
183
+ - 如果项目有既定的架构约定(如 NestJS 模块结构),在 design.md 中遵循
184
+ - Proposal.md 保持业务语言,design.md 可以进入技术细节
185
+ - 不确定的技术方案,**先研究再决定**,而不是猜测