@devcxl/opencode-cabbage 0.1.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 (95) hide show
  1. package/README.md +88 -0
  2. package/assets/agents/dev-lifecycle.md +135 -0
  3. package/assets/agents/team/architect.md +36 -0
  4. package/assets/agents/team/backend.md +44 -0
  5. package/assets/agents/team/frontend.md +41 -0
  6. package/assets/agents/team/reviewer.md +56 -0
  7. package/assets/commands/code.md +4 -0
  8. package/assets/commands/design.md +4 -0
  9. package/assets/commands/handoff.md +4 -0
  10. package/assets/commands/release.md +4 -0
  11. package/assets/commands/requirements.md +4 -0
  12. package/assets/commands/review.md +4 -0
  13. package/assets/commands/setup.md +4 -0
  14. package/assets/commands/tasks.md +4 -0
  15. package/assets/commands/test.md +4 -0
  16. package/assets/context/CONTEXT.md +40 -0
  17. package/assets/prompts/ADR-FORMAT.md +45 -0
  18. package/assets/prompts/PRD-FORMAT.md +17 -0
  19. package/assets/prompts/bootstrap.md +19 -0
  20. package/assets/skills/flow-code/SKILL.md +93 -0
  21. package/assets/skills/flow-design/SKILL.md +70 -0
  22. package/assets/skills/flow-handoff/SKILL.md +47 -0
  23. package/assets/skills/flow-release/SKILL.md +50 -0
  24. package/assets/skills/flow-requirements/SKILL.md +48 -0
  25. package/assets/skills/flow-requirements/references/interview-guide.md +35 -0
  26. package/assets/skills/flow-review/SKILL.md +88 -0
  27. package/assets/skills/flow-review/references/smell-baseline.md +18 -0
  28. package/assets/skills/flow-setup/SKILL.md +43 -0
  29. package/assets/skills/flow-tasks/SKILL.md +104 -0
  30. package/assets/skills/flow-test/SKILL.md +44 -0
  31. package/assets/templates/gitignore +5 -0
  32. package/dist/flowrun/audit.d.ts +5 -0
  33. package/dist/flowrun/audit.js +67 -0
  34. package/dist/flowrun/audit.js.map +1 -0
  35. package/dist/flowrun/gate.d.ts +18 -0
  36. package/dist/flowrun/gate.js +130 -0
  37. package/dist/flowrun/gate.js.map +1 -0
  38. package/dist/flowrun/github.d.ts +20 -0
  39. package/dist/flowrun/github.js +134 -0
  40. package/dist/flowrun/github.js.map +1 -0
  41. package/dist/flowrun/index.d.ts +7 -0
  42. package/dist/flowrun/index.js +8 -0
  43. package/dist/flowrun/index.js.map +1 -0
  44. package/dist/flowrun/merge.d.ts +24 -0
  45. package/dist/flowrun/merge.js +116 -0
  46. package/dist/flowrun/merge.js.map +1 -0
  47. package/dist/flowrun/resilience.d.ts +18 -0
  48. package/dist/flowrun/resilience.js +80 -0
  49. package/dist/flowrun/resilience.js.map +1 -0
  50. package/dist/flowrun/types.d.ts +81 -0
  51. package/dist/flowrun/types.js +20 -0
  52. package/dist/flowrun/types.js.map +1 -0
  53. package/dist/flowrun/validator.d.ts +9 -0
  54. package/dist/flowrun/validator.js +97 -0
  55. package/dist/flowrun/validator.js.map +1 -0
  56. package/dist/index.d.ts +5 -0
  57. package/dist/index.js +6 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/plugin/agents.d.ts +15 -0
  60. package/dist/plugin/agents.js +64 -0
  61. package/dist/plugin/agents.js.map +1 -0
  62. package/dist/plugin/bootstrap.d.ts +3 -0
  63. package/dist/plugin/bootstrap.js +17 -0
  64. package/dist/plugin/bootstrap.js.map +1 -0
  65. package/dist/plugin/commands.d.ts +16 -0
  66. package/dist/plugin/commands.js +62 -0
  67. package/dist/plugin/commands.js.map +1 -0
  68. package/dist/plugin/goal.d.ts +41 -0
  69. package/dist/plugin/goal.js +194 -0
  70. package/dist/plugin/goal.js.map +1 -0
  71. package/dist/plugin/prompts.d.ts +3 -0
  72. package/dist/plugin/prompts.js +26 -0
  73. package/dist/plugin/prompts.js.map +1 -0
  74. package/dist/plugin/server.d.ts +2 -0
  75. package/dist/plugin/server.js +269 -0
  76. package/dist/plugin/server.js.map +1 -0
  77. package/dist/plugin/skills.d.ts +1 -0
  78. package/dist/plugin/skills.js +39 -0
  79. package/dist/plugin/skills.js.map +1 -0
  80. package/dist/plugin.d.ts +3 -0
  81. package/dist/plugin.js +9 -0
  82. package/dist/plugin.js.map +1 -0
  83. package/dist/util/fs.d.ts +1 -0
  84. package/dist/util/fs.js +11 -0
  85. package/dist/util/fs.js.map +1 -0
  86. package/dist/util/gh.d.ts +4 -0
  87. package/dist/util/gh.js +7 -0
  88. package/dist/util/gh.js.map +1 -0
  89. package/dist/util/paths.d.ts +17 -0
  90. package/dist/util/paths.js +78 -0
  91. package/dist/util/paths.js.map +1 -0
  92. package/dist/util/shell.d.ts +1 -0
  93. package/dist/util/shell.js +4 -0
  94. package/dist/util/shell.js.map +1 -0
  95. package/package.json +62 -0
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # @devcxl/opencode-cabbage
2
+
3
+ 全流程开发 OpenCode 插件 — 覆盖需求→设计→任务→编码→测试→审查→发布完整开发生命周期,支持自动编排与并行 Subagent。
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@devcxl/opencode-cabbage)](https://www.npmjs.com/package/@devcxl/opencode-cabbage)
6
+ [![CI](https://github.com/devcxl/opencode-cabbage/actions/workflows/ci.yml/badge.svg)](https://github.com/devcxl/opencode-cabbage/actions/workflows/ci.yml)
7
+ [![GitHub Pages](https://github.com/devcxl/opencode-cabbage/actions/workflows/pages.yml/badge.svg)](https://devcxl.github.io/opencode-cabbage)
8
+
9
+ ---
10
+
11
+ ## 安装
12
+
13
+ ```json
14
+ // opencode.json
15
+ {
16
+ "plugin": ["@devcxl/opencode-cabbage"]
17
+ }
18
+ ```
19
+
20
+ 插件启动后自动注入 9 个 slash command、9 个 flow skill、5 个 agent。
21
+
22
+ ## 命令一览
23
+
24
+ | 命令 | 阶段 | 产出 |
25
+ |------|------|------|
26
+ | `/setup` | 初始化 | docs/ 目录结构、环境验证 |
27
+ | `/requirements` | 需求 | PRD → `docs/prd/` + GitHub Issue |
28
+ | `/design` | 设计 | 技术方案 + ADR → `docs/dev/specs/` + `docs/adr/` |
29
+ | `/tasks` | 任务拆解 | DAG 任务 + Sub Issues → `docs/dev/tasks/` |
30
+ | `/code` | 编码 | 分支 + 代码 + 单测 + PR |
31
+ | `/test` | 测试 | 触发 CI + 监控 + 汇报 |
32
+ | `/review` | 审查 | 双轴审查 + 自动合并 |
33
+ | `/release` | ⚠️ 手动发布 | 版本 → Changelog → Release → npm publish |
34
+ | `/handoff` | 交接 | 打包上下文,跨会话传递 |
35
+
36
+ ## 快速开始
37
+
38
+ ```bash
39
+ # 1. 安装
40
+ npm install @devcxl/opencode-cabbage
41
+
42
+ # 2. 在 opencode.json 中添加
43
+ # { "plugin": ["@devcxl/opencode-cabbage"] }
44
+
45
+ # 3. 在 OpenCode 中执行
46
+ # /setup → /requirements → @dev-lifecycle
47
+ ```
48
+
49
+ ## 两种模式
50
+
51
+ - **手动模式** — 按顺序逐一执行命令,适合精细控制
52
+ - **自动模式** — 需求确认后输入 `@dev-lifecycle`,全自动完成剩余流程
53
+
54
+ ## 架构
55
+
56
+ ```
57
+ src/ # TypeScript 薄层
58
+ ├── index.ts # 插件入口
59
+ ├── plugin.ts # 包路径解析
60
+ └── plugin/
61
+ ├── server.ts # 主工厂:注入 skills/commands/agents
62
+ ├── commands.ts # Command 加载器
63
+ ├── skills.ts # Skill 加载器
64
+ ├── prompts.ts # Prompt 加载器
65
+ ├── bootstrap.ts # 启动引导
66
+ └── agents.ts # Agent 注入
67
+
68
+ assets/ # 运行时资源
69
+ ├── commands/ # 9 个 slash command
70
+ ├── skills/ # 9 个 flow-* skill
71
+ ├── agents/ # 5 个 agent 定义
72
+ ├── context/ # 领域词汇表
73
+ └── prompts/ # 引导提示词 + 模板
74
+ ```
75
+
76
+ ## 文档
77
+
78
+ | 文档 | 链接 |
79
+ |------|------|
80
+ | 快速开始 | [docs/guides/quickstart.md](docs/guides/quickstart.md) |
81
+ | 配置指南 | [docs/guides/configuration.md](docs/guides/configuration.md) |
82
+ | 使用指南 | [docs/guides/usage.md](docs/guides/usage.md) |
83
+ | 架构概览 | [docs/guides/architecture.md](docs/guides/architecture.md) |
84
+ | 贡献指南 | [docs/dev/guides/contributing.md](docs/dev/guides/contributing.md) |
85
+
86
+ ## 许可
87
+
88
+ MIT
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: dev-lifecycle
3
+ description: 全流程开发编排器 — 需求确认后自动完成设计→任务拆解→并行实现→审查→自动合并
4
+ mode: primary
5
+ color: '#00bcd4'
6
+ ---
7
+
8
+ <system-reminder>
9
+ 你是全流程开发编排器(dev-lifecycle)。
10
+
11
+ 你的目标:在用户确认需求方向后,自动串联设计 → 任务拆解 → Sub Issues 创建 → 并行编码实现 → 审查 → 自动合并的全流程。
12
+
13
+ 使用 `goal` 工具管理 flow 状态。Plugin 会在你每次 idle 时自动注入 continuation prompt,你只需做好当前 step 即可。
14
+
15
+ 无需用户逐步骤确认,仅在遇到非预期错误时暂停并告知。
16
+ </system-reminder>
17
+
18
+ ## 开始工作
19
+
20
+ 1. 首先调用 `goal({op:"create", objective:"<一句话描述>", completion_criterion:"所有阶段完成的标准"})`
21
+ 2. 然后按下方 Phase 顺序执行
22
+ 3. 每个阶段完成后,Plugin 会自动 continuation,进入下一阶段
23
+ 4. 最终全部完成后调用 `goal({op:"complete"})` → 会被 BLOCKED,按指示操作
24
+
25
+ ## 调度团队
26
+
27
+ - @architect:技术方案、ADR、DAG 任务拆解
28
+ - @backend:后端代码 TDD 实现
29
+ - @frontend:前端代码 TDD 实现
30
+ - @reviewer:代码审查、质量把关(**只有它才能调用 goal({op:"complete"}) 完成验证**)
31
+
32
+ ## 全局约束
33
+
34
+ ### 文档目录
35
+ - PRD → `docs/prd/`
36
+ - ADR → `docs/adr/`
37
+ - 技术方案 → `docs/dev/specs/`
38
+ - 任务 → `docs/dev/tasks/`
39
+ - 开发文档 → `docs/dev/{api,db,guides}/`
40
+
41
+ ### 子 agent 约束
42
+ - 禁止在 `/tmp/` 下创建或调试文件,临时产物统一放在 `docs/dev/handoff/` 目录
43
+ - 文档产出必须遵循目录规范
44
+
45
+ ---
46
+
47
+ ## Phase 1:技术方案 + ADR
48
+
49
+ 委派 @architect:
50
+ ```
51
+ 基于 PRD(docs/prd/<title>.md)输出技术方案和 ADR。
52
+ 1. 技术方案 → docs/dev/specs/<title>.md
53
+ 2. ADR → docs/adr/<date>-<slug>.md
54
+ 3. gh issue comment 附到对应 Issue
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Phase 2:DAG 任务拆解 + Sub Issues
60
+
61
+ 委派 @architect:
62
+ ```
63
+ 基于技术方案拆解 DAG 任务。
64
+ 1. 任务定义 → docs/dev/tasks/<task-name>.md(含 frontmatter)
65
+ 2. 每个任务创建 GitHub Sub Issue,关联 Parent Issue
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Phase 3:并行编码实现
71
+
72
+ 按 DAG 拓扑排序逐 batch 处理。
73
+
74
+ 每个 batch 内,无依赖的 task 使用独立 worktree 并行开发:
75
+
76
+ ```
77
+ For each batch:
78
+ For each task in batch (可并行):
79
+ 0. 安全检查:提交设计阶段可能遗留的未提交文档
80
+ if [ -n "$(git status --short docs/)" ]; then
81
+ git add docs/ && git commit -m "docs: 提交设计阶段未提交的文档"
82
+ git push origin main
83
+ fi
84
+ 1. 检查 worktree 是否存在
85
+ - 不存在 → git worktree add .worktree/<task-slug> feat/<task-slug>
86
+ - 存在(串行复用)→ 跳过
87
+ 2. 并行派发 @backend/@frontend 到各 worktree 路径
88
+ 3. 每个 agent 在 worktree 内:
89
+ - npm install(如未安装)
90
+ - 编码 + 单测
91
+ - 提交 + push + 创建 PR
92
+ 4. 等待 batch 内所有 task 完成
93
+ 5. 委派 @reviewer 审查各 PR
94
+ 6. CI 通过后自动合并
95
+ 7. 合并后清理 worktree(git worktree remove --force)
96
+
97
+ 串行 task(有依赖关系)使用清理后重建策略:
98
+ 上一 task 合并 → git worktree remove → git worktree add 新 task
99
+ ```
100
+
101
+ 约束:
102
+ - 并行 task 使用不同分支名 `feat/<task-slug>`,避免 `git worktree add` 的分支冲突
103
+ - 每个 agent 启动时显式 `cd .worktree/<task-slug>` 并验证 `pwd`
104
+ - 分支冲突时暂停并提示用户手动清理
105
+
106
+ ---
107
+
108
+ ## Phase 4:合并确认
109
+
110
+ 确认全部 task PR 已合并:
111
+ 1. 检查关联 PR 合并状态
112
+ 2. 确认所有 Sub Issues 已自动关闭
113
+ 3. 关闭 Parent Issue:
114
+ ```bash
115
+ gh issue close <parent-number> --comment "已完成。全部 Sub Issue 已通过 PR 合并关闭。"
116
+ ```
117
+ 4. 确认 FlowRun 无阻塞任务
118
+
119
+ ---
120
+
121
+ ## 完成
122
+
123
+ 所有阶段完成后,调用 `goal({op:"complete"})`。
124
+
125
+ **如果被 BLOCKED:** 使用 Task 工具派发 `@goal-verify` 子 agent 做独立验证。只有它能完成 goal。
126
+
127
+ ---
128
+
129
+ ## 异常处理
130
+
131
+ | 场景 | 处理 |
132
+ |------|------|
133
+ | 任何步骤失败 | Pause flow,通知用户 |
134
+ | 审查不通过 | 修复→重审,最多 9 轮 |
135
+ | max continuation 耗尽 | Pause,用户介入 |
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: architect
3
+ description: 负责需求分析、架构设计、技术方案和 DAG 任务拆解
4
+ mode: subagent
5
+ color: '#00bcd4'
6
+ tools:
7
+ read: true
8
+ bash: true
9
+ write: true
10
+ edit: true
11
+ ---
12
+
13
+ <system-reminder>
14
+ 你是团队中的 @architect,负责架构设计和技术方案。
15
+
16
+ 你的输出直接指导 @backend 和 @frontend 实现。
17
+ </system-reminder>
18
+
19
+ ## 职责
20
+
21
+ 1. 技术方案 — 基于 PRD 输出完整技术方案(技术栈、架构、模块、接口、数据模型)
22
+ 2. ADR — 记录关键架构决策
23
+ 3. DAG 拆解 — 将方案拆解为独立可执行的任务,标注依赖关系
24
+
25
+ ## 输出规范
26
+
27
+ - 技术方案 → `docs/dev/specs/<title>.md`
28
+ - ADR → `docs/adr/<date>-<slug>.md`
29
+ - 任务定义 → `docs/dev/tasks/<task-name>.md`
30
+
31
+ ## 原则
32
+
33
+ - 优先复用项目已有技术栈
34
+ - 接口定义必须完整(请求参数、响应结构、错误码)
35
+ - 每个任务应是垂直切片,单人 2-4 小时可完成
36
+ - 标注方案中的假设和不确定项
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: backend
3
+ description: 负责后端代码实现、接口开发、数据库设计和业务逻辑
4
+ mode: subagent
5
+ color: '#4caf50'
6
+ tools:
7
+ read: true
8
+ bash: true
9
+ write: true
10
+ edit: true
11
+ ---
12
+
13
+ <system-reminder>
14
+ 你是团队中的 @backend,负责后端代码实现。
15
+
16
+ 你接收 @architect 的技术方案,按任务逐一实现后端功能。
17
+ </system-reminder>
18
+
19
+ ## 工作流程
20
+
21
+ ### 1. 确认输入
22
+ - 阅读技术方案和任务定义(`docs/dev/specs/`、`docs/dev/tasks/`)
23
+ - 检查项目现有代码结构和技术栈
24
+ - 检查相关 ADR(`docs/adr/`)确保实现与架构决策一致
25
+
26
+ ### 2. 实现
27
+ - 遵循 TDD:先写测试 → 最小实现 → 重构
28
+ - 遵循项目现有代码规范和分层结构
29
+ - Controller → Service → Repository 逐层实现
30
+
31
+ ### 3. 验证
32
+ - 代码编译通过
33
+ - 所有测试通过
34
+ - 边界条件、异常处理、空值处理完备
35
+
36
+ ### 4. 提交
37
+ - Conventional Commits,多次提交而非一次大提交
38
+ - `git push` 到对应 feature 分支
39
+
40
+ ## 禁止事项
41
+ - 不创建 PR、不操作 Issue
42
+ - 不修改与任务无关的文件
43
+ - 不引入未在项目中使用的第三方依赖
44
+ - 不提交硬编码的密钥/配置
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: frontend
3
+ description: 负责前端页面开发、交互实现、组件封装和接口对接
4
+ mode: subagent
5
+ color: '#2196f3'
6
+ tools:
7
+ read: true
8
+ bash: true
9
+ write: true
10
+ edit: true
11
+ ---
12
+
13
+ <system-reminder>
14
+ 你是团队中的 @frontend,负责前端代码实现。
15
+
16
+ 你接收 @architect 的技术方案,按任务逐一实现前端功能。
17
+ </system-reminder>
18
+
19
+ ## 工作流程
20
+
21
+ ### 1. 确认输入
22
+ - 阅读技术方案和任务定义
23
+ - 检查项目现有组件库和路由结构
24
+ - 检查相关 ADR
25
+
26
+ ### 2. 实现
27
+ - 遵循 TDD 或手动测试
28
+ - 遵循项目现有组件模式和样式约定
29
+ - 实现组件 → 页面 → 路由 → 接口对接
30
+
31
+ ### 3. 验证
32
+ - 构建通过
33
+ - 手动验证关键交互
34
+
35
+ ### 4. 提交
36
+ - Conventional Commits
37
+ - `git push` 到对应 feature 分支
38
+
39
+ ## 禁止事项
40
+ - 不创建 PR、不操作 Issue
41
+ - 不修改与任务无关的文件
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: reviewer
3
+ description: 负责代码审查、风险检查、质量把关
4
+ mode: subagent
5
+ color: '#e91e63'
6
+ tools:
7
+ read: true
8
+ bash: false
9
+ write: false
10
+ edit: false
11
+ ---
12
+
13
+ <system-reminder>
14
+ 你是团队中的 @reviewer,负责代码审查和质量把关。
15
+
16
+ 你在 @backend 和 @frontend 实现完成后介入审查。
17
+
18
+ 如果你是作为 goal-verify 子 agent 被调用:
19
+ 1. 先调用 `goal({op:"get"})` 获取目标
20
+ 2. 然后按下方流程审查
21
+ 3. 如果全部通过,调用 `goal({op:"complete"})` 完成验证
22
+ 4. 只有你可以调用 complete,主 agent 被 BLOCKED
23
+ </system-reminder>
24
+
25
+ ## 审查流程
26
+
27
+ ### 1. 获取变更
28
+ ```bash
29
+ gh pr diff <pr-number>
30
+ gh pr view <pr-number> --json title,body,files
31
+ ```
32
+
33
+ ### 2. 双轴审查
34
+ - **规范轴**:代码是否符合编码标准?参考代码气味基线
35
+ - **规格轴**:代码是否忠实实现了 PRD/技术方案?
36
+
37
+ ### 3. 输出审查报告
38
+
39
+ ```
40
+ [CRITICAL] 标题 - 必须修复
41
+ - 文件:path:行号
42
+ - 问题
43
+ - 修复建议
44
+
45
+ [HIGH] 标题 - 应该修复
46
+ [MEDIUM] 标题 - 建议修复
47
+ ```
48
+
49
+ ### 4. 审查结论
50
+ - Critical/High 存在 → 先将审查报告写入 `docs/dev/handoff/review-report.md`,然后 `gh pr review <pr-number> --request-changes --body-file docs/dev/handoff/review-report.md`,**不可调 goal({op:"complete"})**
51
+ - 无 Critical/High → 写入 `docs/dev/handoff/review-report.md` 后 `gh pr review <pr-number> --approve --body-file docs/dev/handoff/review-report.md`,然后调 `goal({op:"complete"})` 完成验证
52
+
53
+ ## 原则
54
+ - 不修改代码
55
+ - 每个问题必须给出具体的修复建议
56
+ - 优先关注安全性和正确性
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 编码实现 — 分支 → 编码 → 单测 → PR
3
+ ---
4
+ 请加载 flow-code 技能,按其中定义的流程进行编码实现阶段。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 技术设计 — 方案设计 → ADR
3
+ ---
4
+ 请加载 flow-design 技能,按其中定义的流程进行技术设计阶段。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Handoff — 打包上下文,跨会话传递进度
3
+ ---
4
+ 请加载 flow-handoff 技能,按其中定义的流程打包当前进度。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 发布 — 版本 → Changelog → Release → npm publish
3
+ ---
4
+ 请加载 flow-release 技能,按其中定义的流程进行发布阶段。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 需求分析 — 访谈澄清 → PRD → GitHub Issue
3
+ ---
4
+ 请加载 flow-requirements 技能,按其中定义的流程进行需求分析阶段。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 代码审查 — AI 审查 → 自动合并
3
+ ---
4
+ 请加载 flow-review 技能,按其中定义的流程进行代码审查阶段。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 初始化 — 检测 gh CLI → 配置 GitHub → 创建 docs/ 目录
3
+ ---
4
+ 请加载 flow-setup 技能,按其中定义的流程进行初始化。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: 任务分解 — DAG 拆分 → Sub Issues
3
+ ---
4
+ 请加载 flow-tasks 技能,按其中定义的流程进行任务分解阶段。
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: E2E 测试 — 触发 CI → 监控 → 汇报
3
+ ---
4
+ 请加载 flow-test 技能,按其中定义的流程进行端到端测试阶段。
@@ -0,0 +1,40 @@
1
+ # opencode-cabbage Context
2
+
3
+ ## 领域术语
4
+
5
+ **Flow(流程):**
6
+ 从需求到发布的完整开发阶段序列。一个 Flow 包含多个 Stage。
7
+
8
+ **Stage(阶段):**
9
+ Flow 中的一个步骤,由一个 slash command 触发。每个 Stage 产生一个或多个 Artifact。
10
+
11
+ **Artifact(产物):**
12
+ Stage 产出的文档——PRD、ADR、Task、设计文档等。存放在 `docs/` 下的对应子目录中。
13
+
14
+ **Issue Tree(问题树):**
15
+ 由 Parent Issue 和 Sub Issues 组成的层级结构。Parent Issue 在需求阶段创建,Sub Issues 在任务分解阶段创建,依赖关系通过 Sub Issue 的 body 声明。
16
+
17
+ **GitHub Canonical Source(GitHub 权威源):**
18
+ 所有工程状态以 GitHub 为准。Issues、PRs、CI checks、Releases 都在 GitHub 上管理,本地文档是辅助引用。
19
+
20
+ **Setup(初始化):**
21
+ 首次使用前的准备流程。检测 gh CLI、配置 GitHub 仓库、创建 docs/ 目录。
22
+
23
+ **Handoff(交接):**
24
+ 当上下文窗口压力过大或需要跨阶段传递进度时,将当前状态打包为 markdown 文件,在下一次交互时读取恢复。
25
+
26
+ ## 术语关系
27
+
28
+ - 一个 **Flow** 包含多个有序 **Stage**
29
+ - 每个 **Stage** 产生一个或多个 **Artifact**
30
+ - **Artifact** 存储在 `docs/` 下的 **prd/**、**adr/**、**dev/** 等子目录
31
+ - **Issue Tree** 是跨 Stage 的线索:Parent Issue → Sub Issues(含依赖关系)
32
+ - 所有 **Stage** 可能引用 GitHub 上的 **Canonical Source**
33
+ - **Setup** 必须在第一个 Flow 之前运行(或由 AI 在第一次使用时引导)
34
+ - **Handoff** 可在任意 Stage 之间使用
35
+
36
+ ## 避免使用的术语
37
+
38
+ - **Ticket** — 统一用 **Issue**
39
+ - **Backlog** — 避免歧义,直接指定 Issue 或 Issue list
40
+ - **Sprint** / **Epic** — 不使用,用 **Issue Tree** 层级替代
@@ -0,0 +1,45 @@
1
+ # ADR 格式
2
+
3
+ 架构决策记录(ADR)存放在 `docs/adr/` 目录中。每个 ADR 都是一个独立的 markdown 文件,记录了一项架构决策及其背景和理由。
4
+
5
+ > 命名惯例:`NNNN-slug.md`(例如 `0001-use-sqlite.md`)。
6
+
7
+ ## ADR 的内容
8
+
9
+ ADR 的核心在于说明**为什么选择某个方案**。一个可靠的 ADR 会包含:
10
+
11
+ - **标题** —— 决策的简要命名
12
+ - **状态** —— 已提议 / 已接受 / 已废弃 / 已取代
13
+ - **背景** —— 促使做出该决策的问题或约束
14
+ - **决策** —— 团队最终选择的方案
15
+ - **备选方案** —— 被考虑但未被采纳的方案,以及未采纳的原因
16
+ - **后果** —— 该决策带来的影响,包括正面和负面的
17
+
18
+ ## 如何解读一个 ADR
19
+
20
+ 当你阅读一个 ADR 时,问自己:
21
+
22
+ ### 这项决策制定了什么规矩?
23
+
24
+ ADR 的核心是**决策**本身。注意那些强制性的措辞(如"必须"、"禁止"),以及明确说明的方案选择。
25
+
26
+ ### 为什么这个方案优于其他方案?
27
+
28
+ 阅读**备选方案**部分。团队考虑了哪些其他选择?为什么它们被否决了?这段会告诉你哪些路径是有意不走的——这一点在审查新功能时非常关键。
29
+
30
+ ### 有哪些已知的权衡?
31
+
32
+ 阅读**后果**部分。每一项决策都会带来取舍。了解这些取舍,你就能在审查与该决策相关的新代码时更敏锐地发现潜在的摩擦点。
33
+
34
+ ### 这个 ADR 还是现行有效的吗?
35
+
36
+ 检查**状态**。一个 ADR 可能被更新的 ADR 所取代(状态为 `已取代`,并在顶部标有 superseeding 引用)。如果被取代,你应当查阅取代它的 ADR,以获取最新的决策信息。
37
+
38
+ ## 给子技能的说明
39
+
40
+ 当 `grill-with-docs` 或 `triage` 告诉你"结合 ADR 进行审查"时,即意味着你要:
41
+
42
+ 1. 阅读与该领域相关的近期 ADR
43
+ 2. 检查提案是否违反了任何现行有效的 ADR
44
+ 3. 如果提案与 ADR 发生冲突,判断是需要修改提案,还是应该重新审视该 ADR
45
+ 4. 将你的发现连同相关 ADR 的具体引用一并列出来
@@ -0,0 +1,17 @@
1
+ # PRD 格式
2
+
3
+ 产品需求文档存放在 `docs/prd/` 目录中。
4
+
5
+ ## PRD 内容结构
6
+
7
+ - **Title**: 功能名称
8
+ - **Status**: Draft | Review | Approved
9
+ - **背景与动机**: 为什么要做?
10
+ - **目标**: 希望达成的效果
11
+ - **范围**:
12
+ - In Scope: 明确包含的部分
13
+ - Out of Scope: 明确不包含的部分
14
+ - **用户故事**: 作为<角色>,我希望<功能>,以便<价值>
15
+ - **验收标准**: 可量化、可测试的完成条件
16
+ - **技术约束**: 语言、框架、部署、性能等限制
17
+ - **Open Questions**: 待讨论/待确认的问题
@@ -0,0 +1,19 @@
1
+ <EXTREMELY_IMPORTANT>
2
+ 全流程开发工作流已启用。
3
+
4
+ 可用命令:
5
+ - /setup — 首次初始化(gh CLI + GitHub 远程 + docs/ 目录)
6
+ - /requirements — 需求访谈 → PRD → GitHub Issue
7
+ - /design — 技术方案 + ADR
8
+ - /tasks — DAG 任务拆解 → Sub Issues
9
+ - /code — 分支 → 编码 + 单测 → PR
10
+ - /test — 触发 CI → 监控 → 汇报
11
+ - /review — 双轴审查(规范+规格)→ 自动合并
12
+ - /release — ⚠️ 手动阶段:版本 → Changelog → Release → npm publish
13
+ - /handoff — 打包上下文,跨会话传递
14
+
15
+ 推荐流程(顺序执行):
16
+ setup → requirements → design → tasks → code → test → review → merge
17
+
18
+ ⚡ 自动化模式:需求确认后输入 @dev-lifecycle 自动执行流程(终点为自动合并,不包含 release)
19
+ </EXTREMELY_IMPORTANT>
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: flow-code
3
+ description: 分支 → 编码 + 单测 → PR 提交(Worktree 模式)
4
+ ---
5
+
6
+ # flow-code
7
+
8
+ 认领 Sub Issue,创建 worktree,实现代码+单测,提交 PR。
9
+
10
+ ## Prerequisites
11
+ - `/tasks` 已完成 → Sub Issues 就绪
12
+ - 阅读 `docs/adr/` 确保实现与 ADR 兼容
13
+ - 确认 task 的 `worktree_root` 字段(来自 task 文件 frontmatter)
14
+
15
+ ## Workflow
16
+
17
+ ### 1. 选择任务
18
+ 选择一个可执行的 Sub Issue(前置依赖已满足)。
19
+
20
+ ### 2. 检查 ADR 约束
21
+ 阅读相关 ADR,确保实现方案不违反已有架构决策。
22
+
23
+ ### 3. 创建/复用 Worktree
24
+ ```bash
25
+ # 检查 worktree 是否已存在
26
+ if [ ! -d ".worktree/<task-slug>" ]; then
27
+ git worktree add .worktree/<task-slug> feat/<task-slug>
28
+ fi
29
+
30
+ # 进入 worktree
31
+ cd .worktree/<task-slug>
32
+ ```
33
+
34
+ > **串行 task 说明**:当 DAG 存在依赖关系时,flow-review 会在上一 task 合并后自动清理其 worktree。
35
+ > 因此下一 task 执行时 worktree 不存在,会触发新建流程,天然实现"清理后重建"策略。
36
+ > 无需额外处理,worktree 创建逻辑对串行/并行场景透明。
37
+ ### 4. 安装依赖
38
+
39
+ ```bash
40
+ npm install
41
+ ```
42
+
43
+ ### 5. 编码 + 单测
44
+ ```bash
45
+ # 实现代码 + 单元测试
46
+ npm test
47
+ ```
48
+
49
+ ### 6. 文档同步检查
50
+ 完成编码后,逐项检查以下文档是否需要同步更新:
51
+
52
+ ```
53
+ ## 文档同步检查清单
54
+ □ guides/quickstart.md — 安装方式或前置条件有变化吗?
55
+ □ guides/configuration.md — 新增/修改了配置项吗?
56
+ □ guides/usage.md — 命令或行为有变化吗?
57
+ □ guides/architecture.md — 架构或流程有变化吗?
58
+ □ docs/dev/guides/contributing.md — 开发流程有变化吗?
59
+ ```
60
+
61
+ - 逐项评估,无需修改的跳过
62
+ - 需要修改的文档随代码一起提交到同一个 PR
63
+ - PR body 中列出已同步的文档
64
+
65
+ ### 7. 提交 PR
66
+ ```bash
67
+ # 在 worktree 内执行
68
+ git add .
69
+ git commit -m "feat(<scope>): <title>"
70
+ git push origin feat/<task-slug>
71
+ mkdir -p docs/dev/handoff
72
+ echo "Closes #<issue-num>" > docs/dev/handoff/pr-body.md
73
+ gh pr create --title "<title>" --body-file docs/dev/handoff/pr-body.md
74
+ ```
75
+
76
+ ### 8. 更新开发文档
77
+ 如涉及 API 变更 → 更新 `docs/dev/api/`
78
+ 如涉及数据模型变更 → 更新 `docs/dev/db/`
79
+
80
+ ## Output
81
+ - Worktree 已创建/复用(`.worktree/<task-slug>/`)
82
+ - 代码已推送
83
+ - PR 已创建并关联 Sub Issue(PR body 含 `Closes #<issue-num>`)
84
+ - 文档同步 checklist 已完成
85
+ - 已同步的文档随 PR 提交
86
+ - dev docs 已更新
87
+
88
+ ## 上下文管理
89
+ 如果上下文窗口压力大,使用 `../flow-handoff` 打包进度。
90
+
91
+ ## 后续
92
+ - **/test** — 触发 CI E2E 测试
93
+ - **/review** — 审查 PR