@devcxl/opencode-cabbage 1.1.0 → 1.3.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 (142) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/README.md +53 -25
  3. package/README.zh.md +23 -23
  4. package/assets/agents/dev-lifecycle.md +208 -68
  5. package/assets/agents/team/architect.md +22 -7
  6. package/assets/agents/team/developer.md +13 -6
  7. package/assets/agents/team/goal-verify.md +4 -1
  8. package/assets/agents/team/researcher.md +59 -0
  9. package/assets/agents/team/reviewer.md +34 -18
  10. package/assets/commands/setup.md +1 -1
  11. package/assets/prompts/bootstrap.md +10 -9
  12. package/assets/prompts/stage-contract.md +25 -25
  13. package/assets/skills/flow-code/SKILL.md +23 -25
  14. package/assets/skills/flow-design/SKILL.md +94 -26
  15. package/assets/skills/flow-release/SKILL.md +41 -17
  16. package/assets/skills/flow-requirements/SKILL.md +19 -13
  17. package/assets/skills/flow-research/SKILL.md +77 -0
  18. package/assets/skills/flow-review/SKILL.md +55 -25
  19. package/assets/skills/flow-setup/SKILL.md +27 -24
  20. package/assets/skills/flow-tasks/SKILL.md +178 -35
  21. package/assets/skills/flow-tdd/SKILL.md +68 -40
  22. package/codex-skills/agent-architect/SKILL.md +79 -0
  23. package/codex-skills/agent-dev-lifecycle/SKILL.md +309 -0
  24. package/codex-skills/agent-developer/SKILL.md +51 -0
  25. package/codex-skills/agent-goal-verify/SKILL.md +45 -0
  26. package/codex-skills/agent-researcher/SKILL.md +32 -0
  27. package/codex-skills/agent-reviewer/SKILL.md +109 -0
  28. package/codex-skills/flow-code/SKILL.md +71 -0
  29. package/codex-skills/flow-design/SKILL.md +146 -0
  30. package/codex-skills/flow-release/SKILL.md +90 -0
  31. package/codex-skills/flow-requirements/SKILL.md +90 -0
  32. package/codex-skills/flow-research/SKILL.md +77 -0
  33. package/codex-skills/flow-review/SKILL.md +110 -0
  34. package/codex-skills/flow-setup/SKILL.md +75 -0
  35. package/codex-skills/flow-tasks/SKILL.md +220 -0
  36. package/codex-skills/flow-tdd/SKILL.md +235 -0
  37. package/dist/hooks/session-start.d.ts +1 -0
  38. package/dist/hooks/session-start.js +72 -0
  39. package/dist/hooks/session-start.js.map +1 -0
  40. package/dist/kernel/session-index.d.ts +8 -25
  41. package/dist/kernel/session-index.js +5 -55
  42. package/dist/kernel/session-index.js.map +1 -1
  43. package/dist/plugin/bootstrap.d.ts +0 -1
  44. package/dist/plugin/bootstrap.js +0 -3
  45. package/dist/plugin/bootstrap.js.map +1 -1
  46. package/dist/plugin/goal-store.d.ts +71 -0
  47. package/dist/plugin/goal-store.js +54 -0
  48. package/dist/plugin/goal-store.js.map +1 -0
  49. package/dist/plugin/goal.d.ts +47 -13
  50. package/dist/plugin/goal.js +228 -128
  51. package/dist/plugin/goal.js.map +1 -1
  52. package/dist/plugin/prompt-lint.js +3 -11
  53. package/dist/plugin/prompt-lint.js.map +1 -1
  54. package/dist/plugin/prompts.d.ts +0 -1
  55. package/dist/plugin/prompts.js +0 -4
  56. package/dist/plugin/prompts.js.map +1 -1
  57. package/dist/plugin/server.d.ts +3 -5
  58. package/dist/plugin/server.js +247 -155
  59. package/dist/plugin/server.js.map +1 -1
  60. package/dist/plugin/skills.d.ts +7 -1
  61. package/dist/plugin/skills.js +75 -12
  62. package/dist/plugin/skills.js.map +1 -1
  63. package/dist/plugin.d.ts +0 -1
  64. package/dist/plugin.js +1 -4
  65. package/dist/plugin.js.map +1 -1
  66. package/dist/util/gh.d.ts +0 -11
  67. package/dist/util/gh.js +0 -14
  68. package/dist/util/gh.js.map +1 -1
  69. package/dist/util/paths.d.ts +0 -14
  70. package/dist/util/paths.js +0 -69
  71. package/dist/util/paths.js.map +1 -1
  72. package/hooks/hooks.json +17 -0
  73. package/package.json +12 -4
  74. package/assets/prompts/ADR-FORMAT.md +0 -45
  75. package/assets/prompts/PRD-FORMAT.md +0 -17
  76. package/assets/templates/gitignore +0 -5
  77. package/dist/kernel/caller.d.ts +0 -48
  78. package/dist/kernel/caller.js +0 -88
  79. package/dist/kernel/caller.js.map +0 -1
  80. package/dist/kernel/flow.d.ts +0 -175
  81. package/dist/kernel/flow.js +0 -467
  82. package/dist/kernel/flow.js.map +0 -1
  83. package/dist/kernel/legacy.d.ts +0 -19
  84. package/dist/kernel/legacy.js +0 -34
  85. package/dist/kernel/legacy.js.map +0 -1
  86. package/dist/kernel/records.d.ts +0 -103
  87. package/dist/kernel/records.js +0 -240
  88. package/dist/kernel/records.js.map +0 -1
  89. package/dist/kernel/release.d.ts +0 -106
  90. package/dist/kernel/release.js +0 -241
  91. package/dist/kernel/release.js.map +0 -1
  92. package/dist/kernel/review.d.ts +0 -34
  93. package/dist/kernel/review.js +0 -82
  94. package/dist/kernel/review.js.map +0 -1
  95. package/dist/kernel/setup.d.ts +0 -95
  96. package/dist/kernel/setup.js +0 -401
  97. package/dist/kernel/setup.js.map +0 -1
  98. package/dist/kernel/slug.d.ts +0 -23
  99. package/dist/kernel/slug.js +0 -67
  100. package/dist/kernel/slug.js.map +0 -1
  101. package/dist/kernel/task.d.ts +0 -213
  102. package/dist/kernel/task.js +0 -873
  103. package/dist/kernel/task.js.map +0 -1
  104. package/dist/kernel/tdd/adapter.d.ts +0 -49
  105. package/dist/kernel/tdd/adapter.js +0 -294
  106. package/dist/kernel/tdd/adapter.js.map +0 -1
  107. package/dist/kernel/tdd/digest.d.ts +0 -18
  108. package/dist/kernel/tdd/digest.js +0 -303
  109. package/dist/kernel/tdd/digest.js.map +0 -1
  110. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  111. package/dist/kernel/tdd/evaluator.js +0 -185
  112. package/dist/kernel/tdd/evaluator.js.map +0 -1
  113. package/dist/kernel/tdd/evidence.d.ts +0 -42
  114. package/dist/kernel/tdd/evidence.js +0 -48
  115. package/dist/kernel/tdd/evidence.js.map +0 -1
  116. package/dist/kernel/tdd/state.d.ts +0 -79
  117. package/dist/kernel/tdd/state.js +0 -363
  118. package/dist/kernel/tdd/state.js.map +0 -1
  119. package/dist/kernel/types.d.ts +0 -180
  120. package/dist/kernel/types.js +0 -2
  121. package/dist/kernel/types.js.map +0 -1
  122. package/dist/kernel/worktree.d.ts +0 -45
  123. package/dist/kernel/worktree.js +0 -156
  124. package/dist/kernel/worktree.js.map +0 -1
  125. package/dist/plugin/flow-control.d.ts +0 -91
  126. package/dist/plugin/flow-control.js +0 -287
  127. package/dist/plugin/flow-control.js.map +0 -1
  128. package/dist/plugin/release-control.d.ts +0 -39
  129. package/dist/plugin/release-control.js +0 -343
  130. package/dist/plugin/release-control.js.map +0 -1
  131. package/dist/plugin/setup-control.d.ts +0 -59
  132. package/dist/plugin/setup-control.js +0 -111
  133. package/dist/plugin/setup-control.js.map +0 -1
  134. package/dist/plugin/task-control.d.ts +0 -90
  135. package/dist/plugin/task-control.js +0 -208
  136. package/dist/plugin/task-control.js.map +0 -1
  137. package/dist/plugin/tdd-checkpoint.d.ts +0 -128
  138. package/dist/plugin/tdd-checkpoint.js +0 -664
  139. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  140. package/dist/util/shell.d.ts +0 -1
  141. package/dist/util/shell.js +0 -4
  142. package/dist/util/shell.js.map +0 -1
@@ -1,343 +0,0 @@
1
- import { exec } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { readFile, writeFile } from "node:fs/promises";
4
- import { join, resolve, sep } from "node:path";
5
- import { tool } from "@opencode-ai/plugin/tool";
6
- import { resolveProjectDir } from "../util/paths.js";
7
- import { gh as ghCli, parsePrUrlNumber } from "../util/gh.js";
8
- import { escapeShellArg } from "../util/shell.js";
9
- import { readProjectProfile } from "../kernel/profile.js";
10
- import { requireCaller } from "../kernel/caller.js";
11
- import { classifyChanges, buildTag, buildReleaseNotes, parseVersion, parseVersionFileSpec, proposeVersion, readVersionFromJson, updateVersionInJson, latestTag, listCommitsSinceTag, validateTagImmutability, validateTagName, } from "../kernel/release.js";
12
- let releaseGhExecutor = null;
13
- let releaseGitExecutor = null;
14
- export function setReleaseControlGhExecutor(fn) {
15
- releaseGhExecutor = fn;
16
- }
17
- export function setReleaseControlGitExecutor(fn) {
18
- releaseGitExecutor = fn;
19
- }
20
- const execAsync = promisify(exec);
21
- async function runGh(args) {
22
- if (releaseGhExecutor)
23
- return releaseGhExecutor(args);
24
- return ghCli(args);
25
- }
26
- async function runGit(cwd, args) {
27
- if (releaseGitExecutor)
28
- return releaseGitExecutor(args, cwd);
29
- return execAsync(`git ${args}`, { cwd });
30
- }
31
- function releaseBranch(version) {
32
- return `release/v${version}`;
33
- }
34
- /** 聚合上一 tag 后 main 的变更并分类;无 tag 时返回空变更集 */
35
- async function collectChanges() {
36
- const tag = await latestTag(runGh);
37
- if (!tag)
38
- return { tag: null, changes: [] };
39
- const commits = await listCommitsSinceTag(tag, "main", runGh);
40
- return { tag, changes: classifyChanges(commits) };
41
- }
42
- /** version file path 是否落在 projectDir 内(防 Profile 配置路径穿越) */
43
- function versionFilePath(profile, projectDir) {
44
- const spec = parseVersionFileSpec(profile.versionFile ?? "");
45
- if (!spec)
46
- return null;
47
- const abs = resolve(projectDir, spec.path);
48
- const root = resolve(projectDir);
49
- if (!abs.startsWith(root + sep) && abs !== root) {
50
- return null;
51
- }
52
- return abs;
53
- }
54
- async function readCurrentVersion(profile, projectDir) {
55
- const spec = parseVersionFileSpec(profile.versionFile ?? "");
56
- if (!spec)
57
- return null;
58
- try {
59
- const raw = await readFile(join(projectDir, spec.path), "utf8");
60
- return readVersionFromJson(raw, spec.key);
61
- }
62
- catch {
63
- return null;
64
- }
65
- }
66
- async function writeVersionFile(profile, projectDir, version) {
67
- const spec = parseVersionFileSpec(profile.versionFile ?? "");
68
- if (!spec)
69
- return "Error: Profile version file 配置无效(期望 `path[ $.key]`,如 `package.json $.version`)";
70
- try {
71
- const path = versionFilePath(profile, projectDir);
72
- if (path === null)
73
- return "Error: version file 路径越界(必须位于项目目录内)";
74
- const raw = await readFile(path, "utf8");
75
- await writeFile(path, updateVersionInJson(raw, spec.key, version));
76
- return null;
77
- }
78
- catch (err) {
79
- return `Error: 无法更新版本文件:${String(err)}`;
80
- }
81
- }
82
- // ─── 工具 ───
83
- /**
84
- * release_control — 版本提议 / Release PR / 合并打 tag / release workflow 监控。
85
- * 技术栈无关:版本读写规则与 tag 格式全部来自 Profile(§9.1),不硬编码 npm。
86
- */
87
- export function createReleaseControlTool(deps) {
88
- return tool({
89
- description: `Control the release lifecycle (R9, tech-stack agnostic).
90
-
91
- Ops:
92
- - propose-version: aggregate all changes on main since the last tag, classify them
93
- (feature/fix/maintenance/docs + breaking), and propose a SemVer bump.
94
- Unclassified changes block the proposal until classified. Returns the proposed
95
- version and its tag.
96
- - open-release-pr: create the release branch, bump the version file (per Profile
97
- version write rule), generate Release Notes, push, and open a Release PR.
98
- - merge-release-pr: after CI passes and human approval, merge the Release PR,
99
- verify the merge SHA, and push the tag (tags are immutable, never re-pointed).
100
- - monitor: poll the project GitHub Actions release workflow run until success;
101
- a failed run is rerun once.`,
102
- args: {
103
- op: tool.schema.enum(["propose-version", "open-release-pr", "merge-release-pr", "monitor"])
104
- .describe("Release control operation"),
105
- proposed_version: tool.schema.string().describe("Proposed semantic version (x.y.z), required for open-release-pr / merge-release-pr"),
106
- merge_sha: tool.schema
107
- .string()
108
- .optional()
109
- .describe("Full 40-character merge commit SHA (--match-head-commit 要求完整 SHA,7 位短 SHA 会报 flag needs an argument)"),
110
- release_notes: tool.schema.string().describe("Optional override for the Release Notes body"),
111
- user_confirmed: tool.schema.boolean().describe("Human approval — required for merge-release-pr (release is a manual flow)"),
112
- },
113
- async execute(args, ctx) {
114
- try {
115
- const op = args.op;
116
- // caller 门禁:release 为人工流程,仅 primary 可调用(§2.2/§2.3),fail-closed
117
- const denied = await requireCaller({ agent: ctx.agent, sessionID: ctx.sessionID }, ["primary"], op, deps.sessionClient);
118
- if (denied)
119
- return `Error: ${denied}`;
120
- // 会话级项目目录优先(workspace root 异常会话下插件级 projectDir 可能是 `/`)
121
- const projectDir = resolveProjectDir(ctx.directory, deps.projectDir);
122
- const profile = await readProjectProfile(projectDir);
123
- switch (op) {
124
- case "propose-version":
125
- return proposeVersionOp(profile, projectDir);
126
- case "open-release-pr":
127
- return openReleasePrOp(profile, args, projectDir);
128
- case "merge-release-pr":
129
- return mergeReleasePrOp(profile, args);
130
- case "monitor":
131
- return monitorOp(profile);
132
- default:
133
- return `Error: unknown operation "${op}"`;
134
- }
135
- }
136
- catch (err) {
137
- return `Error: INTERNAL_ERROR — ${String(err)}`;
138
- }
139
- },
140
- });
141
- }
142
- async function proposeVersionOp(profile, projectDir) {
143
- if (!profile.versionFile) {
144
- return "Error: Profile 缺少 version file 配置(先运行 /setup 确认 Release Profile)";
145
- }
146
- const current = await readCurrentVersion(profile, projectDir);
147
- if (current === null) {
148
- return `Error: 无法从版本文件(${profile.versionFile})读取当前版本`;
149
- }
150
- const { tag, changes } = await collectChanges();
151
- if (!tag) {
152
- return "Error: 仓库尚无 tag,无法聚合上一 tag 后的变更;请先人工创建基线 tag";
153
- }
154
- const unclassified = changes.filter(c => c.category === "unclassified");
155
- if (unclassified.length > 0) {
156
- const list = unclassified.map(c => `${c.sha.slice(0, 7)} ${c.title}`).join("\n");
157
- return `Error: ${unclassified.length} 个未分类变更,版本提议前必须分类(propose-version 不产出版本号):\n${list}`;
158
- }
159
- const result = proposeVersion(current, changes);
160
- if (!result.ok) {
161
- return `Error: ${result.message}`;
162
- }
163
- const tagFormat = profile.tagFormat ?? "v{version}";
164
- const nextTag = buildTag(result.proposed, tagFormat);
165
- const summary = changes
166
- .filter(c => c.category !== "unclassified")
167
- .reduce((acc, c) => {
168
- acc[c.category] = (acc[c.category] ?? 0) + 1;
169
- return acc;
170
- }, {});
171
- return [
172
- `Version proposal: ${current} → ${result.proposed} (${result.type} bump)`,
173
- `Tag: ${nextTag}`,
174
- `Changes since ${tag}: ${changes.length} (${Object.entries(summary).map(([k, v]) => `${k}: ${v}`).join(", ")})`,
175
- "",
176
- buildReleaseNotes(result.proposed, changes),
177
- ].join("\n");
178
- }
179
- async function openReleasePrOp(profile, args, projectDir) {
180
- const version = String(args.proposed_version ?? "");
181
- const parsed = parseVersion(version);
182
- if (!parsed) {
183
- return "Error: proposed_version 必填且必须为 x.y.z(先调用 propose-version 获取提议版本)";
184
- }
185
- if (!profile.versionFile) {
186
- return "Error: Profile 缺少 version file 配置(先运行 /setup 确认 Release Profile)";
187
- }
188
- const tagFormat = profile.tagFormat ?? "v{version}";
189
- const tag = buildTag(version, tagFormat);
190
- if (!validateTagName(tag)) {
191
- return `Error: tag 名含非法字符(${tag}),拒绝继续(可能由 Profile tag format 引起)`;
192
- }
193
- const branch = releaseBranch(version);
194
- const mainSha = (await runGh(`api repos/{owner}/{repo}/commits/main --jq .sha`)).stdout.trim();
195
- const immutability = await validateTagImmutability(tag, mainSha, runGh);
196
- if (!immutability.ok) {
197
- return `Error: ${immutability.message}`;
198
- }
199
- try {
200
- await runGit(projectDir, "fetch origin");
201
- await runGit(projectDir, `checkout -b '${escapeShellArg(branch)}' origin/main`);
202
- }
203
- catch (err) {
204
- return `Error: 创建 release branch 失败:${String(err)}`;
205
- }
206
- const writeError = await writeVersionFile(profile, projectDir, version);
207
- if (writeError)
208
- return writeError;
209
- try {
210
- const spec = parseVersionFileSpec(profile.versionFile ?? "");
211
- if (spec === null || versionFilePath(profile, projectDir) === null) {
212
- return "Error: version file 配置无效";
213
- }
214
- await runGit(projectDir, `add '${escapeShellArg(spec.path)}'`);
215
- await runGit(projectDir, `commit -m 'release: ${escapeShellArg(tag)}'`);
216
- }
217
- catch (err) {
218
- return `Error: 提交版本更新失败:${String(err)}`;
219
- }
220
- let notes = String(args.release_notes ?? "");
221
- if (notes === "") {
222
- const { changes } = await collectChanges();
223
- notes = buildReleaseNotes(version, changes);
224
- }
225
- try {
226
- await runGit(projectDir, `push -u origin '${escapeShellArg(branch)}'`);
227
- }
228
- catch (err) {
229
- return `Error: push release branch 失败:${String(err)}`;
230
- }
231
- try {
232
- const { stdout } = await runGh(`pr create --base main --head '${escapeShellArg(branch)}' --title 'release: ${escapeShellArg(tag)}' --body '${escapeShellArg(notes)}'`);
233
- // gh pr create 不支持 --json:解析 stdout 中的 PR URL
234
- const prNumber = parsePrUrlNumber(stdout);
235
- if (prNumber === null) {
236
- return `Error: 创建 Release PR 失败:无法解析 PR 编号(${stdout.trim()})`;
237
- }
238
- return `Release PR created: #${prNumber} (branch ${branch}, tag ${tag})`;
239
- }
240
- catch (err) {
241
- return `Error: 创建 Release PR 失败:${String(err)}`;
242
- }
243
- }
244
- async function mergeReleasePrOp(profile, args) {
245
- const version = String(args.proposed_version ?? "");
246
- if (!parseVersion(version)) {
247
- return "Error: proposed_version 必填且必须为 x.y.z";
248
- }
249
- // 人工批准门禁:release 为人工流程(R9),必须显式 user_confirmed
250
- if (args.user_confirmed !== true) {
251
- return "Error: merge-release-pr 需要人工批准(user_confirmed: true)。请先审查 Release PR 与版本提议后再确认。";
252
- }
253
- const branch = releaseBranch(version);
254
- const prNumber = (await runGh(`pr list --head '${escapeShellArg(branch)}' --json number --jq '.[0].number'`)).stdout.trim();
255
- if (!prNumber || prNumber === "null") {
256
- return "Error: 未找到对应 Release PR(branch: " + branch + ")";
257
- }
258
- // CI 校验:读取 statusCheckRollup;进行中项显式标记 IN_PROGRESS,不得放行
259
- const rollup = (await runGh(`pr view ${prNumber} --json statusCheckRollup --jq '[.statusCheckRollup[]? | if .conclusion == null then "IN_PROGRESS" else .conclusion end] | unique'`)).stdout.trim();
260
- let conclusions;
261
- try {
262
- conclusions = JSON.parse(rollup);
263
- }
264
- catch {
265
- return `Error: 无法解析 PR #${prNumber} 的 CI checks 状态`;
266
- }
267
- if (conclusions.length === 0) {
268
- return `Error: PR #${prNumber} 没有任何 CI checks 报告,无法自动合并(需要 CI 或人工介入)`;
269
- }
270
- if (conclusions.includes("IN_PROGRESS")) {
271
- return `Error: PR #${prNumber} 的 CI checks 尚未全部完成,请等待完成后再重试`;
272
- }
273
- if (conclusions.includes("FAILURE") || conclusions.includes("CANCELLED") || conclusions.includes("ACTION_REQUIRED")) {
274
- return `Error: PR #${prNumber} 的 CI checks 存在失败项(${conclusions.join(", ")}),无法合并`;
275
- }
276
- if (!conclusions.every(c => c === "SUCCESS" || c === "NEUTRAL" || c === "SKIPPED")) {
277
- return `Error: PR #${prNumber} 的 CI checks 存在未知结论(${conclusions.join(", ")}),无法合并`;
278
- }
279
- try {
280
- await runGh(`pr merge ${prNumber} --squash --delete-branch`);
281
- }
282
- catch (err) {
283
- return `Error: 合并 Release PR 失败:${String(err)}`;
284
- }
285
- const mergeSha = (await runGh(`pr view ${prNumber} --json mergeCommit --jq '.mergeCommit.oid'`)).stdout.trim();
286
- if (!mergeSha || mergeSha === "null") {
287
- return "Error: 无法读取 merge commit SHA";
288
- }
289
- const tagFormat = profile.tagFormat ?? "v{version}";
290
- const tag = buildTag(version, tagFormat);
291
- if (!validateTagName(tag)) {
292
- return `Error: tag 名含非法字符(${tag}),拒绝打 tag`;
293
- }
294
- if (!/^[0-9a-f]{40}$/i.test(mergeSha)) {
295
- return "Error: merge commit SHA 非法(应为 40 位 hex)";
296
- }
297
- const immutability = await validateTagImmutability(tag, mergeSha, runGh);
298
- if (!immutability.ok) {
299
- return `Error: ${immutability.message}`;
300
- }
301
- try {
302
- await runGh(`api repos/{owner}/{repo}/git/refs -f ref=refs/tags/'${escapeShellArg(tag)}' -f sha='${escapeShellArg(mergeSha)}'`);
303
- }
304
- catch (err) {
305
- return `Error: 打 tag 失败(可能已存在):${String(err)}`;
306
- }
307
- return `Merged #${prNumber} and tagged ${tag} @ ${mergeSha.slice(0, 7)}`;
308
- }
309
- async function monitorOp(profile) {
310
- const workflow = profile.releaseWorkflowPath;
311
- if (!workflow) {
312
- return "Error: Profile 缺少 release workflow 配置(release-ready 未满足,先运行 /setup)";
313
- }
314
- const { stdout } = await runGh(`run list --workflow '${escapeShellArg(workflow)}' --limit 1 --json databaseId,status,conclusion,headBranch --jq '.[0]'`);
315
- const runJson = stdout.trim();
316
- if (!runJson || runJson === "null") {
317
- return "No release workflow runs found yet.";
318
- }
319
- let run;
320
- try {
321
- run = JSON.parse(runJson);
322
- }
323
- catch {
324
- return "Error: 无法解析 release workflow run 状态(gh 输出异常)";
325
- }
326
- if (run.status !== "completed") {
327
- return `Release workflow run #${run.databaseId} is ${run.status} (branch ${run.headBranch}) — not finished, check again later`;
328
- }
329
- if (run.conclusion === "success") {
330
- return `Release workflow run #${run.databaseId} succeeded — release complete`;
331
- }
332
- if (run.conclusion === "failure") {
333
- try {
334
- await runGh(`run rerun ${run.databaseId}`);
335
- return `Release workflow run #${run.databaseId} failed — rerun triggered, check again later`;
336
- }
337
- catch (err) {
338
- return `Release workflow run #${run.databaseId} failed and rerun failed: ${String(err)}`;
339
- }
340
- }
341
- return `Release workflow run #${run.databaseId} ${run.conclusion} — needs human intervention (Corrective Flow + new version)`;
342
- }
343
- //# sourceMappingURL=release-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-control.js","sourceRoot":"","sources":["../../src/plugin/release-control.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import { type CallerSessionClient } from "../kernel/caller.js";
2
- import { type SetupProbeReport } from "../kernel/setup.js";
3
- /** setup_control 工具依赖:项目目录 + caller 判定所需的 session client */
4
- export interface SetupControlDeps {
5
- projectDir: string;
6
- sessionClient: CallerSessionClient;
7
- }
8
- export type SetupControlResponse = {
9
- ok: boolean;
10
- readiness?: SetupProbeReport;
11
- profileConfirmed?: boolean;
12
- created?: string[];
13
- updated?: string[];
14
- existing?: string[];
15
- prNumber?: number | null;
16
- initialized?: boolean;
17
- committed?: boolean;
18
- remoteCreated?: boolean;
19
- error?: {
20
- code: string;
21
- message: string;
22
- };
23
- };
24
- /**
25
- * setup_control 工具工厂(spec §2.3)。
26
- * 三 op:probe(readiness 报告) / generate-workflows(缺失时生成草案 + Setup PR) / confirm-profile(Profile 写回 AGENTS.md)。
27
- * caller:primary。server.ts 接线由后续批次统一处理(本批不注册,避免文件冲突)。
28
- */
29
- export declare function createSetupControlTool(deps: SetupControlDeps): {
30
- description: string;
31
- args: {
32
- op: import("zod").ZodEnum<{
33
- probe: "probe";
34
- "generate-workflows": "generate-workflows";
35
- "confirm-profile": "confirm-profile";
36
- "init-repo": "init-repo";
37
- }>;
38
- pr_title: import("zod").ZodOptional<import("zod").ZodString>;
39
- test_command: import("zod").ZodOptional<import("zod").ZodString>;
40
- profile_overrides: import("zod").ZodOptional<import("zod").ZodString>;
41
- create_remote: import("zod").ZodOptional<import("zod").ZodBoolean>;
42
- remote_name: import("zod").ZodOptional<import("zod").ZodString>;
43
- private: import("zod").ZodOptional<import("zod").ZodBoolean>;
44
- };
45
- execute(args: {
46
- op: "probe" | "generate-workflows" | "confirm-profile" | "init-repo";
47
- pr_title?: string | undefined;
48
- test_command?: string | undefined;
49
- profile_overrides?: string | undefined;
50
- create_remote?: boolean | undefined;
51
- remote_name?: string | undefined;
52
- private?: boolean | undefined;
53
- }, context: import("@opencode-ai/plugin/tool").ToolContext): Promise<import("@opencode-ai/plugin/tool").ToolResult>;
54
- };
55
- /**
56
- * 独立注册辅助:把 setup_control 挂到工具注册表。
57
- * 供后续批次(批 8-11 或最终接线)在 server.ts 统一接线时调用。
58
- */
59
- export declare function registerSetupControl(registry: Record<string, unknown>, deps: SetupControlDeps): void;
@@ -1,111 +0,0 @@
1
- import { tool } from "@opencode-ai/plugin/tool";
2
- import { requireCaller, CALLER_NOT_AUTHORIZED } from "../kernel/caller.js";
3
- import { resolveProjectDir } from "../util/paths.js";
4
- import { probe, generateWorkflows, confirmProjectProfile, initRepo, } from "../kernel/setup.js";
5
- const DEFAULT_PR_TITLE = "chore: add CI/release workflow drafts";
6
- /**
7
- * setup_control 工具工厂(spec §2.3)。
8
- * 三 op:probe(readiness 报告) / generate-workflows(缺失时生成草案 + Setup PR) / confirm-profile(Profile 写回 AGENTS.md)。
9
- * caller:primary。server.ts 接线由后续批次统一处理(本批不注册,避免文件冲突)。
10
- */
11
- export function createSetupControlTool(deps) {
12
- return tool({
13
- description: `Detect project setup readiness, generate missing CI/release workflow drafts, and confirm the project profile.
14
-
15
- Operations:
16
- - probe: Detect git/gh availability, AGENTS.md Profile, CI/release workflows, and branch protection. Returns a readiness report (development-ready / release-ready).
17
- - generate-workflows: Generate missing CI/release workflow drafts under .github/workflows/ (tech-stack agnostic), then create a chore/setup-workflows branch, commit, push, and open a Setup PR for manual merge.
18
- - confirm-profile: After user confirmation, write the Project Profile block (from profile_overrides) back to the root AGENTS.md.
19
-
20
- Caller: primary.`,
21
- args: {
22
- op: tool.schema.enum(["probe", "generate-workflows", "confirm-profile", "init-repo"]).describe("Setup operation"),
23
- pr_title: tool.schema.string().optional().describe("PR title for generate-workflows"),
24
- test_command: tool.schema
25
- .string()
26
- .optional()
27
- .describe("Test command to inject into the generated ci.yml (falls back to the confirmed Profile testCommand; keeps <test-command> placeholder when both are absent)"),
28
- profile_overrides: tool.schema.string().optional().describe("JSON of user-confirmed profile fields for confirm-profile"),
29
- create_remote: tool.schema.boolean().optional().describe("Create a GitHub remote (gh repo create --source . --push) for init-repo"),
30
- remote_name: tool.schema.string().optional().describe("Remote repository name for init-repo (defaults to the directory name)"),
31
- private: tool.schema.boolean().optional().describe("Create the remote repository as private for init-repo"),
32
- },
33
- async execute(args, ctx) {
34
- const op = args.op;
35
- const denied = await requireCaller(ctx, ["primary"], op, deps.sessionClient);
36
- if (denied)
37
- return errorResponse(CALLER_NOT_AUTHORIZED, denied);
38
- // 会话级项目目录优先(workspace root 异常会话下插件级 projectDir 可能是 `/`)
39
- const projectDir = resolveProjectDir(ctx.directory, deps.projectDir);
40
- try {
41
- switch (op) {
42
- case "probe": {
43
- const readiness = await probe(projectDir);
44
- return okResponse({ readiness });
45
- }
46
- case "generate-workflows": {
47
- const prTitle = args.pr_title ?? DEFAULT_PR_TITLE;
48
- const testCommand = args.test_command;
49
- const result = await generateWorkflows(projectDir, { prTitle, testCommand });
50
- if (!result.ok) {
51
- return errorResponse("SETUP_FAILED", result.error ?? "failed to generate workflows");
52
- }
53
- return okResponse({
54
- created: result.created,
55
- updated: result.updated,
56
- existing: result.existing,
57
- prNumber: result.prNumber,
58
- });
59
- }
60
- case "confirm-profile": {
61
- const overrides = args.profile_overrides;
62
- if (!overrides) {
63
- return errorResponse("POLICY_INVALID", "profile_overrides is required for confirm-profile");
64
- }
65
- const result = await confirmProjectProfile(projectDir, overrides);
66
- if (!result.ok) {
67
- return errorResponse(result.code ?? "POLICY_INVALID", result.message ?? "failed to confirm profile");
68
- }
69
- return okResponse({ profileConfirmed: true });
70
- }
71
- case "init-repo": {
72
- const result = await initRepo(projectDir, {
73
- createRemote: args.create_remote === true,
74
- remoteName: args.remote_name,
75
- private: args.private === true,
76
- });
77
- if (!result.ok) {
78
- return errorResponse("SETUP_FAILED", result.error ?? "failed to initialize repository");
79
- }
80
- return okResponse({
81
- initialized: result.initialized,
82
- committed: result.committed,
83
- remoteCreated: result.remoteCreated,
84
- });
85
- }
86
- default:
87
- return errorResponse("UNKNOWN_OP", `Unknown op: "${op}"`);
88
- }
89
- }
90
- catch (err) {
91
- return errorResponse("INTERNAL_ERROR", String(err));
92
- }
93
- },
94
- });
95
- }
96
- /**
97
- * 独立注册辅助:把 setup_control 挂到工具注册表。
98
- * 供后续批次(批 8-11 或最终接线)在 server.ts 统一接线时调用。
99
- */
100
- export function registerSetupControl(registry, deps) {
101
- registry.setup_control = createSetupControlTool(deps);
102
- }
103
- function okResponse(overrides = {}) {
104
- const resp = { ok: true, ...overrides };
105
- return JSON.stringify(resp, null, 2);
106
- }
107
- function errorResponse(code, message) {
108
- const resp = { ok: false, error: { code, message } };
109
- return JSON.stringify(resp, null, 2);
110
- }
111
- //# sourceMappingURL=setup-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-control.js","sourceRoot":"","sources":["../../src/plugin/setup-control.ts"],"names":[],"mappings":"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"}
@@ -1,90 +0,0 @@
1
- /** task_control 工具依赖 */
2
- export interface TaskControlDeps {
3
- projectDir: string;
4
- sessionClient: {
5
- session: {
6
- get(input: {
7
- sessionID: string;
8
- }): Promise<{
9
- data?: {
10
- parentID?: string | null;
11
- };
12
- }>;
13
- };
14
- };
15
- }
16
- export type TaskControlResponse = {
17
- ok: boolean;
18
- task?: {
19
- parentIssueNumber?: number;
20
- taskId?: string;
21
- issueNumber?: number;
22
- };
23
- issueNumber?: number;
24
- branch?: string;
25
- worktreePath?: string;
26
- policy?: unknown;
27
- baseline?: unknown;
28
- prNumber?: number;
29
- evidenceRevision?: number;
30
- verdict?: string;
31
- risk?: string;
32
- warning?: string;
33
- reason?: string;
34
- report?: unknown;
35
- missing?: string[];
36
- error?: {
37
- code: string;
38
- message: string;
39
- };
40
- };
41
- /**
42
- * task_control 工具工厂(spec §2.3)。
43
- * caller 门禁:primary 全量;developer 拒绝(无门禁绕过面)。
44
- */
45
- export declare function createTaskControlTool(deps: TaskControlDeps): {
46
- description: string;
47
- args: {
48
- op: import("zod").ZodEnum<{
49
- "create-task": "create-task";
50
- "start-task": "start-task";
51
- "submit-task": "submit-task";
52
- "submit-review": "submit-review";
53
- "merge-task": "merge-task";
54
- "cancel-task": "cancel-task";
55
- "destroy-worktree": "destroy-worktree";
56
- "status-task": "status-task";
57
- }>;
58
- title: import("zod").ZodOptional<import("zod").ZodString>;
59
- parent_issue_number: import("zod").ZodOptional<import("zod").ZodNumber>;
60
- task_id: import("zod").ZodOptional<import("zod").ZodString>;
61
- acceptance_criteria: import("zod").ZodOptional<import("zod").ZodString>;
62
- depends_on: import("zod").ZodOptional<import("zod").ZodString>;
63
- pr_number: import("zod").ZodOptional<import("zod").ZodNumber>;
64
- risk: import("zod").ZodOptional<import("zod").ZodEnum<{
65
- high: "high";
66
- low: "low";
67
- }>>;
68
- verdict: import("zod").ZodOptional<import("zod").ZodEnum<{
69
- approve: "approve";
70
- "request-changes": "request-changes";
71
- }>>;
72
- comment: import("zod").ZodOptional<import("zod").ZodString>;
73
- user_confirmed: import("zod").ZodOptional<import("zod").ZodBoolean>;
74
- };
75
- execute(args: {
76
- op: "create-task" | "start-task" | "submit-task" | "submit-review" | "merge-task" | "cancel-task" | "destroy-worktree" | "status-task";
77
- title?: string | undefined;
78
- parent_issue_number?: number | undefined;
79
- task_id?: string | undefined;
80
- acceptance_criteria?: string | undefined;
81
- depends_on?: string | undefined;
82
- pr_number?: number | undefined;
83
- risk?: "high" | "low" | undefined;
84
- verdict?: "approve" | "request-changes" | undefined;
85
- comment?: string | undefined;
86
- user_confirmed?: boolean | undefined;
87
- }, context: import("@opencode-ai/plugin/tool").ToolContext): Promise<import("@opencode-ai/plugin/tool").ToolResult>;
88
- };
89
- /** 独立注册辅助:把 task_control 挂到工具注册表(后续接线批次使用) */
90
- export declare function registerTaskControl(registry: Record<string, unknown>, deps: TaskControlDeps): void;