@devcxl/opencode-cabbage 0.3.2 → 1.0.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 (176) hide show
  1. package/README.md +34 -19
  2. package/README.zh.md +34 -19
  3. package/assets/agents/dev-lifecycle.md +60 -49
  4. package/assets/agents/team/architect.md +5 -1
  5. package/assets/agents/team/developer.md +89 -0
  6. package/assets/agents/team/goal-verify.md +5 -1
  7. package/assets/agents/team/reviewer.md +6 -0
  8. package/assets/commands/code.md +3 -2
  9. package/assets/commands/design.md +3 -2
  10. package/assets/commands/release.md +3 -2
  11. package/assets/commands/requirements.md +3 -2
  12. package/assets/commands/review.md +3 -2
  13. package/assets/commands/setup.md +3 -2
  14. package/assets/commands/tasks.md +2 -1
  15. package/assets/prompts/bootstrap.md +9 -8
  16. package/assets/prompts/stage-contract.md +55 -0
  17. package/assets/skills/flow-code/SKILL.md +38 -140
  18. package/assets/skills/flow-design/SKILL.md +28 -79
  19. package/assets/skills/flow-release/SKILL.md +31 -51
  20. package/assets/skills/flow-requirements/SKILL.md +31 -196
  21. package/assets/skills/flow-review/SKILL.md +26 -123
  22. package/assets/skills/flow-setup/SKILL.md +40 -43
  23. package/assets/skills/flow-tasks/SKILL.md +23 -153
  24. package/assets/skills/flow-tdd/SKILL.md +30 -31
  25. package/dist/kernel/caller.d.ts +48 -0
  26. package/dist/kernel/caller.js +88 -0
  27. package/dist/kernel/caller.js.map +1 -0
  28. package/dist/kernel/context.d.ts +27 -0
  29. package/dist/kernel/context.js +73 -0
  30. package/dist/kernel/context.js.map +1 -0
  31. package/dist/kernel/flow.d.ts +166 -0
  32. package/dist/kernel/flow.js +387 -0
  33. package/dist/kernel/flow.js.map +1 -0
  34. package/dist/kernel/legacy.d.ts +19 -0
  35. package/dist/kernel/legacy.js +34 -0
  36. package/dist/kernel/legacy.js.map +1 -0
  37. package/dist/kernel/mutex.d.ts +8 -0
  38. package/dist/kernel/mutex.js +23 -0
  39. package/dist/kernel/mutex.js.map +1 -0
  40. package/dist/kernel/permission.d.ts +21 -0
  41. package/dist/kernel/permission.js +37 -0
  42. package/dist/kernel/permission.js.map +1 -0
  43. package/dist/kernel/profile.d.ts +35 -0
  44. package/dist/kernel/profile.js +144 -0
  45. package/dist/kernel/profile.js.map +1 -0
  46. package/dist/kernel/records.d.ts +87 -0
  47. package/dist/kernel/records.js +197 -0
  48. package/dist/kernel/records.js.map +1 -0
  49. package/dist/kernel/release.d.ts +104 -0
  50. package/dist/kernel/release.js +229 -0
  51. package/dist/kernel/release.js.map +1 -0
  52. package/dist/kernel/review.d.ts +34 -0
  53. package/dist/kernel/review.js +81 -0
  54. package/dist/kernel/review.js.map +1 -0
  55. package/dist/kernel/session-index.d.ts +43 -0
  56. package/dist/kernel/session-index.js +120 -0
  57. package/dist/kernel/session-index.js.map +1 -0
  58. package/dist/kernel/setup.d.ts +70 -0
  59. package/dist/kernel/setup.js +324 -0
  60. package/dist/kernel/setup.js.map +1 -0
  61. package/dist/kernel/slug.d.ts +23 -0
  62. package/dist/kernel/slug.js +67 -0
  63. package/dist/kernel/slug.js.map +1 -0
  64. package/dist/kernel/task.d.ts +208 -0
  65. package/dist/kernel/task.js +788 -0
  66. package/dist/kernel/task.js.map +1 -0
  67. package/dist/{flowrun → kernel/tdd}/adapter.d.ts +1 -1
  68. package/dist/kernel/tdd/adapter.js.map +1 -0
  69. package/dist/{flowrun → kernel/tdd}/digest.d.ts +1 -1
  70. package/dist/kernel/tdd/digest.js.map +1 -0
  71. package/dist/{flowrun → kernel/tdd}/evaluator.d.ts +1 -1
  72. package/dist/kernel/tdd/evaluator.js.map +1 -0
  73. package/dist/kernel/tdd/evidence.d.ts +42 -0
  74. package/dist/kernel/tdd/evidence.js +48 -0
  75. package/dist/kernel/tdd/evidence.js.map +1 -0
  76. package/dist/{flowrun → kernel/tdd}/state.d.ts +1 -1
  77. package/dist/kernel/tdd/state.js.map +1 -0
  78. package/dist/kernel/types.d.ts +180 -0
  79. package/dist/kernel/types.js +2 -0
  80. package/dist/kernel/types.js.map +1 -0
  81. package/dist/kernel/worktree.d.ts +45 -0
  82. package/dist/kernel/worktree.js +127 -0
  83. package/dist/kernel/worktree.js.map +1 -0
  84. package/dist/plugin/agents.d.ts +5 -17
  85. package/dist/plugin/agents.js +0 -23
  86. package/dist/plugin/agents.js.map +1 -1
  87. package/dist/plugin/flow-control.d.ts +80 -0
  88. package/dist/plugin/flow-control.js +254 -0
  89. package/dist/plugin/flow-control.js.map +1 -0
  90. package/dist/plugin/goal.d.ts +7 -46
  91. package/dist/plugin/goal.js +32 -116
  92. package/dist/plugin/goal.js.map +1 -1
  93. package/dist/plugin/prompt-lint.js +78 -5
  94. package/dist/plugin/prompt-lint.js.map +1 -1
  95. package/dist/plugin/release-control.d.ts +37 -0
  96. package/dist/plugin/release-control.js +304 -0
  97. package/dist/plugin/release-control.js.map +1 -0
  98. package/dist/plugin/server.d.ts +19 -0
  99. package/dist/plugin/server.js +147 -302
  100. package/dist/plugin/server.js.map +1 -1
  101. package/dist/plugin/setup-control.d.ts +45 -0
  102. package/dist/plugin/setup-control.js +80 -0
  103. package/dist/plugin/setup-control.js.map +1 -0
  104. package/dist/plugin/shell.d.ts +7 -34
  105. package/dist/plugin/shell.js +12 -137
  106. package/dist/plugin/shell.js.map +1 -1
  107. package/dist/plugin/skills.d.ts +1 -1
  108. package/dist/plugin/skills.js +1 -7
  109. package/dist/plugin/skills.js.map +1 -1
  110. package/dist/plugin/task-control.d.ts +90 -0
  111. package/dist/plugin/task-control.js +201 -0
  112. package/dist/plugin/task-control.js.map +1 -0
  113. package/dist/plugin/tdd-checkpoint.d.ts +118 -0
  114. package/dist/plugin/tdd-checkpoint.js +581 -0
  115. package/dist/plugin/tdd-checkpoint.js.map +1 -0
  116. package/dist/util/paths.d.ts +0 -2
  117. package/dist/util/paths.js +1 -7
  118. package/dist/util/paths.js.map +1 -1
  119. package/package.json +1 -1
  120. package/assets/agents/team/backend.md +0 -100
  121. package/assets/agents/team/frontend.md +0 -98
  122. package/assets/commands/handoff.md +0 -4
  123. package/assets/commands/test.md +0 -4
  124. package/assets/context/CONTEXT.md +0 -41
  125. package/assets/skills/flow-handoff/SKILL.md +0 -76
  126. package/assets/skills/flow-test/SKILL.md +0 -75
  127. package/dist/flowrun/adapter.js.map +0 -1
  128. package/dist/flowrun/audit.d.ts +0 -5
  129. package/dist/flowrun/audit.js +0 -67
  130. package/dist/flowrun/audit.js.map +0 -1
  131. package/dist/flowrun/ci.d.ts +0 -64
  132. package/dist/flowrun/ci.js +0 -184
  133. package/dist/flowrun/ci.js.map +0 -1
  134. package/dist/flowrun/coverage.d.ts +0 -70
  135. package/dist/flowrun/coverage.js +0 -207
  136. package/dist/flowrun/coverage.js.map +0 -1
  137. package/dist/flowrun/digest.js.map +0 -1
  138. package/dist/flowrun/evaluator.js.map +0 -1
  139. package/dist/flowrun/gate.d.ts +0 -28
  140. package/dist/flowrun/gate.js +0 -139
  141. package/dist/flowrun/gate.js.map +0 -1
  142. package/dist/flowrun/github.d.ts +0 -24
  143. package/dist/flowrun/github.js +0 -154
  144. package/dist/flowrun/github.js.map +0 -1
  145. package/dist/flowrun/index.d.ts +0 -14
  146. package/dist/flowrun/index.js +0 -15
  147. package/dist/flowrun/index.js.map +0 -1
  148. package/dist/flowrun/merge.d.ts +0 -57
  149. package/dist/flowrun/merge.js +0 -180
  150. package/dist/flowrun/merge.js.map +0 -1
  151. package/dist/flowrun/migration.d.ts +0 -11
  152. package/dist/flowrun/migration.js +0 -276
  153. package/dist/flowrun/migration.js.map +0 -1
  154. package/dist/flowrun/resilience.d.ts +0 -18
  155. package/dist/flowrun/resilience.js +0 -80
  156. package/dist/flowrun/resilience.js.map +0 -1
  157. package/dist/flowrun/state.js.map +0 -1
  158. package/dist/flowrun/transitions.d.ts +0 -66
  159. package/dist/flowrun/transitions.js +0 -168
  160. package/dist/flowrun/transitions.js.map +0 -1
  161. package/dist/flowrun/types.d.ts +0 -356
  162. package/dist/flowrun/types.js +0 -21
  163. package/dist/flowrun/types.js.map +0 -1
  164. package/dist/flowrun/validator.d.ts +0 -19
  165. package/dist/flowrun/validator.js +0 -209
  166. package/dist/flowrun/validator.js.map +0 -1
  167. package/dist/plugin/broker.d.ts +0 -73
  168. package/dist/plugin/broker.js +0 -140
  169. package/dist/plugin/broker.js.map +0 -1
  170. package/dist/plugin/tdd-tool.d.ts +0 -62
  171. package/dist/plugin/tdd-tool.js +0 -336
  172. package/dist/plugin/tdd-tool.js.map +0 -1
  173. /package/dist/{flowrun → kernel/tdd}/adapter.js +0 -0
  174. /package/dist/{flowrun → kernel/tdd}/digest.js +0 -0
  175. /package/dist/{flowrun → kernel/tdd}/evaluator.js +0 -0
  176. /package/dist/{flowrun → kernel/tdd}/state.js +0 -0
@@ -44,12 +44,6 @@ export function devDbDir(projectDir) {
44
44
  export function devGuidesDir(projectDir) {
45
45
  return path.join(docsRoot(projectDir), "dev", "guides");
46
46
  }
47
- export function devHandoffDir(projectDir) {
48
- return path.join(docsRoot(projectDir), "dev", "handoff");
49
- }
50
- export function outOfScopePath(projectDir) {
51
- return path.join(docsRoot(projectDir), "dev", "out-of-scope.md");
52
- }
53
47
  export function prdPath(projectDir, name) {
54
48
  return path.join(prdDir(projectDir), `${slugify(name)}.md`);
55
49
  }
@@ -63,7 +57,7 @@ export function taskPath(projectDir, taskName) {
63
57
  export function pluginTemplateDir(projectDir) {
64
58
  return path.join(projectDir, ".opencode", PLUGIN_ID, "templates");
65
59
  }
66
- const DOCS_SUBDIRS = ["prd", "adr", "dev/specs", "dev/tasks", "dev/api", "dev/db", "dev/guides", "dev/handoff"];
60
+ const DOCS_SUBDIRS = ["prd", "adr", "dev/specs", "dev/tasks", "dev/api", "dev/db", "dev/guides"];
67
61
  export async function ensureDocsStructure(projectDir) {
68
62
  const created = [];
69
63
  for (const sub of DOCS_SUBDIRS) {
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devcxl/opencode-cabbage",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "description": "OpenCode 全流程开发插件 — 需求→设计→任务→编码→测试→审查→自动合并,支持自动编排与并行 Subagent",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,100 +0,0 @@
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
- capabilities:
12
- create_pr: false
13
- merge_pr: false
14
- modify_files: true
15
- run_tests: true
16
- push_branch: true
17
- approve_review: false
18
- complete_goal: false
19
- permission:
20
- bash:
21
- "*": "deny"
22
- "npm *": "allow"
23
- "git *": "allow"
24
- edit:
25
- "*": "deny"
26
- ".worktree/**": "allow"
27
- "src/**": "allow"
28
- "test/**": "allow"
29
- "assets/**": "allow"
30
- ---
31
-
32
- <system-reminder>
33
- 你是团队中的 @backend,负责后端代码实现。
34
-
35
- 你接收 @architect 的技术方案,按任务逐一实现后端功能。
36
-
37
- **TDD 约束**:编码前加载 `flow-tdd` skill,遵循 RED→GREEN→final-regression→final-verification 流程。
38
- self-report 每个 cycle 的状态,不跳过任何阶段。
39
-
40
- ## 工程原则(铁律)
41
-
42
- 以下原则贯穿实现全链路,你编写的每一行代码必须满足这些原则。
43
-
44
- ### KISS(Keep It Simple, Stupid)
45
- 选择能工作的最简单实现。如果代码让你犹豫"是不是过度设计"——那就是。
46
-
47
- ### YAGNI(You Ain't Gonna Need It)
48
- 只实现当前 task 明确要求的功能。不做"将来可能需要"的扩展点、
49
- 不预留"以后会用到"的抽象、不添加"万一需要"的参数。
50
-
51
- ### DRY(Don't Repeat Yourself)
52
- 相同逻辑出现 3 次以上才抽象。2 次以内的重复是可以接受的,
53
- 过早抽象比适度重复更有害。
54
-
55
- ### SRP(Single Responsibility Principle)
56
- 每个函数只有一个修改的理由。一个函数做一件事,≤ 20 行。
57
-
58
- ### 最小变更原则
59
- 只改 task 相关的文件。不重构无关代码、不修改无关注释、
60
- 不引入 task 未要求的依赖。
61
-
62
- ### 审查自检(commit 前)
63
- 1. "这个函数是否只有一个职责?" — 如果否,拆分
64
- 2. "这个抽象是否至少有 2 个调用方?" — 如果否,内联
65
- 3. "这段逻辑是否出现过 3 次以上?" — 如果否,不提取
66
- 4. "是否有只为了'将来可能'而写的代码?" — 如果是,删除
67
-
68
- ### 禁止事项
69
- - 禁止添加"万一将来需要"的代码
70
- - 禁止为单一用例创建抽象层
71
- - 禁止使用前 3 次重复就提取公共逻辑
72
- - 如果方案让你犹豫"是不是过度设计"——那就是
73
- </system-reminder>
74
-
75
- ## 工作流程
76
-
77
- ### 1. 确认输入
78
- - 阅读技术方案和任务定义(`docs/dev/specs/`、`docs/dev/tasks/`)
79
- - 检查项目现有代码结构和技术栈
80
- - 检查相关 ADR(`docs/adr/`)确保实现与架构决策一致
81
-
82
- ### 2. 实现
83
- - 遵循 TDD:先写测试 → 最小实现 → 重构
84
- - 遵循项目现有代码规范和分层结构
85
- - Controller → Service → Repository 逐层实现
86
-
87
- ### 3. 验证
88
- - 代码编译通过
89
- - 所有测试通过
90
- - 边界条件、异常处理、空值处理完备
91
-
92
- ### 4. 提交
93
- - Conventional Commits,多次提交而非一次大提交
94
- - `git push` 到对应 feature 分支
95
-
96
- ## 禁止事项
97
- - 不创建 PR、不操作 Issue
98
- - 不修改与任务无关的文件
99
- - 不引入未在项目中使用的第三方依赖
100
- - 不提交硬编码的密钥/配置
@@ -1,98 +0,0 @@
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
- capabilities:
12
- create_pr: false
13
- merge_pr: false
14
- modify_files: true
15
- run_tests: true
16
- push_branch: true
17
- approve_review: false
18
- complete_goal: false
19
- permission:
20
- bash:
21
- "*": "deny"
22
- "npm *": "allow"
23
- "git *": "allow"
24
- edit:
25
- "*": "deny"
26
- ".worktree/**": "allow"
27
- "src/**": "allow"
28
- "test/**": "allow"
29
- "assets/**": "allow"
30
- ---
31
-
32
- <system-reminder>
33
- 你是团队中的 @frontend,负责前端代码实现。
34
-
35
- 你接收 @architect 的技术方案,按任务逐一实现前端功能。
36
-
37
- **TDD 约束**:编码前加载 `flow-tdd` skill,遵循 RED→GREEN→final-regression→final-verification 流程。
38
- self-report 每个 cycle 的状态,不跳过任何阶段。
39
-
40
- ## 工程原则(铁律)
41
-
42
- 以下原则贯穿实现全链路,你编写的每一行代码必须满足这些原则。
43
-
44
- ### KISS(Keep It Simple, Stupid)
45
- 选择能工作的最简单实现。如果代码让你犹豫"是不是过度设计"——那就是。
46
-
47
- ### YAGNI(You Ain't Gonna Need It)
48
- 只实现当前 task 明确要求的功能。不做"将来可能需要"的扩展点、
49
- 不预留"以后会用到"的抽象、不添加"万一需要"的参数。
50
-
51
- ### DRY(Don't Repeat Yourself)
52
- 相同逻辑出现 3 次以上才抽象。2 次以内的重复是可以接受的,
53
- 过早抽象比适度重复更有害。
54
-
55
- ### SRP(Single Responsibility Principle)
56
- 每个组件/函数只有一个修改的理由。一个组件做一件事,≤ 200 行。
57
- 一个函数 ≤ 20 行。
58
-
59
- ### 最小变更原则
60
- 只改 task 相关的文件。不重构无关代码、不修改无关注释、
61
- 不引入 task 未要求的依赖。
62
-
63
- ### 审查自检(commit 前)
64
- 1. "这个组件是否只有一个职责?" — 如果否,拆分
65
- 2. "这个抽象是否至少有 2 个使用方?" — 如果否,内联
66
- 3. "这段逻辑是否出现过 3 次以上?" — 如果否,不提取
67
- 4. "是否有只为了'将来可能'而写的代码?" — 如果是,删除
68
-
69
- ### 禁止事项
70
- - 禁止添加"万一将来需要"的代码
71
- - 禁止为单一用例创建抽象层
72
- - 禁止使用前 3 次重复就提取公共逻辑
73
- - 如果方案让你犹豫"是不是过度设计"——那就是
74
- </system-reminder>
75
-
76
- ## 工作流程
77
-
78
- ### 1. 确认输入
79
- - 阅读技术方案和任务定义
80
- - 检查项目现有组件库和路由结构
81
- - 检查相关 ADR
82
-
83
- ### 2. 实现
84
- - 遵循 TDD 或手动测试
85
- - 遵循项目现有组件模式和样式约定
86
- - 实现组件 → 页面 → 路由 → 接口对接
87
-
88
- ### 3. 验证
89
- - 构建通过
90
- - 手动验证关键交互
91
-
92
- ### 4. 提交
93
- - Conventional Commits
94
- - `git push` 到对应 feature 分支
95
-
96
- ## 禁止事项
97
- - 不创建 PR、不操作 Issue
98
- - 不修改与任务无关的文件
@@ -1,4 +0,0 @@
1
- ---
2
- description: Handoff — 打包上下文,跨会话传递进度
3
- ---
4
- 请加载 flow-handoff 技能,按其中定义的流程打包当前进度。
@@ -1,4 +0,0 @@
1
- ---
2
- description: E2E 测试 — 触发 CI → 监控 → 汇报
3
- ---
4
- 请加载 flow-test 技能,按其中定义的流程进行端到端测试阶段。
@@ -1,41 +0,0 @@
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** — Decision Map 中的待决策项(Grilling / Research / Prototype),不是 GitHub Issue。
39
- 仅在需求澄清阶段使用,PRD 生成后销毁。与 Issue 有本质区别:Ticket 是临时待定问题,Issue 是持久化工作项。
40
- - **Backlog** — 避免歧义,直接指定 Issue 或 Issue list
41
- - **Sprint** / **Epic** — 不使用,用 **Issue Tree** 层级替代
@@ -1,76 +0,0 @@
1
- ---
2
- name: flow-handoff
3
- description: 打包上下文,跨会话传递进度
4
- ---
5
-
6
- # flow-handoff
7
-
8
- 当上下文窗口压力过大或需要跨会话传递进度时使用。
9
-
10
- ## 何时使用
11
- - 上下文窗口接近极限(约 80k+ tokens)
12
- - 需要切换到另一个任务再回来
13
- - 当前阶段等待外部输入无法继续
14
-
15
- ## Workflow
16
-
17
- ### 1. 打包当前状态
18
- 创建 handoff 文档,记录:
19
-
20
- ```markdown
21
- # Handoff: <流程/阶段名>
22
-
23
- ## 上下文
24
- - 项目: <项目名>
25
- - 当前阶段: <stage>
26
- - 已完成的工作: <列表>
27
- - 未完成的决策: <列表>
28
-
29
- ## 关键产出
30
- - <已产出的文件/Issue/PR 列表>
31
-
32
- ## 下一步
33
- 1. <下一步行动>
34
- 2. <需要用户输入的问题>
35
-
36
- ## 待办
37
- - [ ] <待完成任务>
38
- ```
39
-
40
- ### 2. 保存 Handoff 文件
41
- 保存到 `docs/dev/handoff-<YYYY-MM-DD>.md`。
42
-
43
- ### 3. 指示用户
44
- 告知用户:在下次会话中可以直接引用该 handoff 文件以恢复上下文。
45
-
46
- ## Output
47
- - `docs/dev/handoff-<date>.md`
48
-
49
- ## Contract
50
-
51
- ### Trigger
52
- 由 `/handoff` 命令触发。上下文窗口接近极限或需跨会话传递进度时使用。
53
-
54
- ### Inputs
55
- - 当前 Goal 状态(来源:Goal metadata)
56
-
57
- ### Preconditions
58
- - 存在 Active Goal
59
-
60
- ### Procedure
61
- 1. 打包当前流程状态(阶段、任务、进度)
62
- 2. 列出已完成和待完成项
63
- 3. 确定下一步骤
64
- 4. 保存到 handoff 文件
65
-
66
- ### Outputs
67
- - `docs/dev/handoff-<date>.md` — 交接文件
68
-
69
- ### Failure
70
- - 无 Goal → 仅输出当前会话摘要
71
-
72
- ### Idempotency
73
- - 同一天多次执行 → 覆盖前一次 handoff
74
-
75
- ### Prohibited Actions
76
- - 不修改代码或文档
@@ -1,75 +0,0 @@
1
- ---
2
- name: flow-test
3
- description: 触发 CI → 监控 → 测试结果汇报
4
- ---
5
-
6
- # flow-test
7
-
8
- 触发 CI 运行 E2E 测试,监控结果并汇报。
9
-
10
- ## Prerequisites
11
- - PR 已创建
12
-
13
- ## Workflow
14
-
15
- ### 1. 确认 CI 配置
16
- 检查 `.github/workflows/`。如缺失,引导用户创建:
17
-
18
- ```yaml
19
- name: E2E
20
- on: [pull_request]
21
- jobs:
22
- test:
23
- runs-on: ubuntu-latest
24
- steps:
25
- - uses: actions/checkout@v4
26
- - run: npm ci
27
- - run: npm run test:e2e
28
- ```
29
-
30
- ### 2. 触发并监控
31
- ```bash
32
- gh pr checks <pr-number> --watch
33
- ```
34
-
35
- ### 3. 结果汇报
36
- - **全部通过** ✅ → 继续
37
- - **失败** ❌ → 分析原因,建议修复
38
- - **超时/异常** ⚠️ → 检查 CI 配置
39
-
40
- ## Output
41
- - CI 结果汇报给用户
42
-
43
- ## 后续
44
- - **/review** — 审查 PR
45
-
46
- ## Contract
47
-
48
- ### Trigger
49
- 由 `/test` 命令触发。在已创建的 PR 上运行 CI 测试。
50
-
51
- ### Inputs
52
- - PR 编号(来源:`/code` 产出)
53
-
54
- ### Preconditions
55
- - `/code` 已完成 → PR 已创建
56
-
57
- ### Procedure
58
- 1. 检查 CI 配置是否存在
59
- 2. 触发 CI 运行
60
- 3. 监控运行状态
61
- 4. 汇报结果
62
-
63
- ### Outputs
64
- - CI 运行结果摘要
65
-
66
- ### Failure
67
- - CI 失败 → 分析日志并建议修复
68
- - 无 CI 配置 → 引导用户创建 .github/workflows/ci.yml
69
-
70
- ### Idempotency
71
- - 重复触发同一 PR → 覆盖前一次运行
72
-
73
- ### Prohibited Actions
74
- - 不修改 CI 配置
75
- - 不触发非当前 PR 的 CI
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/flowrun/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { FlowRun, FlowStage, TaskState } from "./types.js";
2
- export declare function postAuditComment(issueNumber: number, body: string): Promise<boolean>;
3
- export declare function postPRComment(prNumber: number, body: string): Promise<boolean>;
4
- export declare function buildStageAudit(flowRun: FlowRun, stage: FlowStage): string;
5
- export declare function buildMergeAudit(task: TaskState): string;
@@ -1,67 +0,0 @@
1
- import { gh } from "../util/gh.js";
2
- import { escapeShellArg } from "../util/shell.js";
3
- export async function postAuditComment(issueNumber, body) {
4
- try {
5
- const escaped = escapeShellArg(body);
6
- await gh(`issue comment ${issueNumber} --body '${escaped}'`);
7
- return true;
8
- }
9
- catch {
10
- return false;
11
- }
12
- }
13
- export async function postPRComment(prNumber, body) {
14
- try {
15
- const escaped = escapeShellArg(body);
16
- await gh(`pr comment ${prNumber} --body '${escaped}'`);
17
- return true;
18
- }
19
- catch {
20
- return false;
21
- }
22
- }
23
- export function buildStageAudit(flowRun, stage) {
24
- const s = flowRun.stages[stage];
25
- if (!s)
26
- return `Stage "${stage}" not found`;
27
- const lines = [
28
- `### Stage: ${stage}`,
29
- `Status: ${s.status}`,
30
- `Completed: ${s.completedAt ?? "not yet"}`,
31
- ];
32
- if (s.checks.length > 0) {
33
- lines.push("", "**Checks:**");
34
- for (const check of s.checks) {
35
- lines.push(`- ${check.name}: ${check.status}`);
36
- for (const ev of check.evidence) {
37
- lines.push(` - \`${ev.command}\` → exit ${ev.exitCode}: ${ev.summary}`);
38
- }
39
- }
40
- }
41
- return lines.join("\n");
42
- }
43
- export function buildMergeAudit(task) {
44
- const lines = [
45
- `### Task: ${task.id}`,
46
- `PR: #${task.prNumber}`,
47
- `Status: ${task.status}`,
48
- "",
49
- "**Merge Checkpoints:**",
50
- ];
51
- if (task.prCheckpoints) {
52
- const cp = task.prCheckpoints;
53
- const gates = {
54
- localChecks: cp.localChecks.status,
55
- ciChecks: cp.ciChecks.status,
56
- reviewerApproval: cp.reviewerApproval.status,
57
- goalVerification: cp.goalVerification.status,
58
- branchProtection: cp.branchProtection.status,
59
- mergeResult: cp.mergeResult.status,
60
- };
61
- for (const [name, status] of Object.entries(gates)) {
62
- lines.push(`- ${name}: ${status}`);
63
- }
64
- }
65
- return lines.join("\n");
66
- }
67
- //# sourceMappingURL=audit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/flowrun/audit.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- import type { RepositoryQualityPolicy, TaskCommand, CoveragePolicy } from "./types.js";
2
- /** 从 gh pr view --json statusCheckRollup 获取的 PR 检查结果 */
3
- export interface PRCheckResult {
4
- context: string;
5
- state: "EXPECTED" | "ERROR" | "FAILURE" | "PENDING" | "SUCCESS";
6
- app: {
7
- id: number;
8
- name: string;
9
- } | null;
10
- }
11
- /** checkRequiredChecks 的返回结果 */
12
- export interface CICheckResult {
13
- allPassed: boolean;
14
- missingContexts: string[];
15
- failedContexts: string[];
16
- pendingContexts: string[];
17
- untrustedSources: Array<{
18
- context: string;
19
- expectedAppId: number;
20
- actualAppId: number | null;
21
- }>;
22
- }
23
- /** validateRequiredWorkflow 的返回结果 */
24
- export interface RequiredWorkflowValidation {
25
- valid: boolean;
26
- errors: string[];
27
- }
28
- /**
29
- * 验证 PR 的状态检查是否满足 RepositoryQualityPolicy 中定义的 required checks。
30
- *
31
- * 规则:
32
- * - mode 为 "off" 时不校验,直接返回 allPassed: true
33
- * - mode 为 "required" 时:
34
- * 1. 每个 requiredChecks 中的 context 必须在 PR checks 中存在
35
- * 2. 状态必须为 SUCCESS
36
- * 3. 发布该 check 的 GitHub App ID 必须与配置的 appId 匹配
37
- * (appId 为 0 时不校验来源)
38
- */
39
- export declare function checkRequiredChecks(policy: RepositoryQualityPolicy, prChecks: PRCheckResult[]): CICheckResult;
40
- /**
41
- * 验证 RepositoryQualityPolicy 的 requiredChecks 配置有效性。
42
- *
43
- * 规则:
44
- * - mode 为 "off" 时跳过所有校验
45
- * - mode 为 "required" 时:
46
- * 1. requiredChecks 不能为空
47
- * 2. 每个 entry 必须有 workflowPath、workflowRef
48
- * 3. 不允许重复的 context
49
- */
50
- export declare function validateRequiredWorkflow(policy: RepositoryQualityPolicy): RequiredWorkflowValidation;
51
- /**
52
- * checkBranchProtection 委托给 merge.ts 中已有的实现。
53
- * 这里作为 re-export wrapper,保持 CI 模块的 API 统一性。
54
- */
55
- export { checkBranchProtection } from "./merge.js";
56
- /**
57
- * 计算质量契约摘要(Quality Contract Digest)。
58
- *
59
- * 绑定 testCommands + verifyCommands + coveragePolicy,
60
- * 使用 JCS (JSON Canonicalization Scheme) + SHA-256 生成确定性摘要。
61
- *
62
- * 用于在 PR checkpoint 中记录期望的契约版本,确保 CI 执行时契约未被修改。
63
- */
64
- export declare function computeQualityContractDigest(testCommands: TaskCommand[], verifyCommands: TaskCommand[], coveragePolicy: CoveragePolicy | null): string;