@devcxl/opencode-cabbage 0.3.1 → 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 (177) hide show
  1. package/README.md +34 -19
  2. package/README.zh.md +34 -19
  3. package/assets/agents/dev-lifecycle.md +60 -41
  4. package/assets/agents/team/architect.md +36 -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 +42 -1
  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 +33 -74
  19. package/assets/skills/flow-release/SKILL.md +31 -51
  20. package/assets/skills/flow-requirements/SKILL.md +47 -45
  21. package/assets/skills/flow-review/SKILL.md +26 -112
  22. package/assets/skills/flow-setup/SKILL.md +40 -43
  23. package/assets/skills/flow-tasks/SKILL.md +30 -139
  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 +16 -17
  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 -66
  121. package/assets/agents/team/frontend.md +0 -63
  122. package/assets/commands/handoff.md +0 -4
  123. package/assets/commands/test.md +0 -4
  124. package/assets/context/CONTEXT.md +0 -40
  125. package/assets/skills/flow-handoff/SKILL.md +0 -76
  126. package/assets/skills/flow-requirements/references/interview-guide.md +0 -35
  127. package/assets/skills/flow-test/SKILL.md +0 -75
  128. package/dist/flowrun/adapter.js.map +0 -1
  129. package/dist/flowrun/audit.d.ts +0 -5
  130. package/dist/flowrun/audit.js +0 -67
  131. package/dist/flowrun/audit.js.map +0 -1
  132. package/dist/flowrun/ci.d.ts +0 -64
  133. package/dist/flowrun/ci.js +0 -184
  134. package/dist/flowrun/ci.js.map +0 -1
  135. package/dist/flowrun/coverage.d.ts +0 -70
  136. package/dist/flowrun/coverage.js +0 -207
  137. package/dist/flowrun/coverage.js.map +0 -1
  138. package/dist/flowrun/digest.js.map +0 -1
  139. package/dist/flowrun/evaluator.js.map +0 -1
  140. package/dist/flowrun/gate.d.ts +0 -28
  141. package/dist/flowrun/gate.js +0 -139
  142. package/dist/flowrun/gate.js.map +0 -1
  143. package/dist/flowrun/github.d.ts +0 -24
  144. package/dist/flowrun/github.js +0 -154
  145. package/dist/flowrun/github.js.map +0 -1
  146. package/dist/flowrun/index.d.ts +0 -14
  147. package/dist/flowrun/index.js +0 -15
  148. package/dist/flowrun/index.js.map +0 -1
  149. package/dist/flowrun/merge.d.ts +0 -57
  150. package/dist/flowrun/merge.js +0 -180
  151. package/dist/flowrun/merge.js.map +0 -1
  152. package/dist/flowrun/migration.d.ts +0 -11
  153. package/dist/flowrun/migration.js +0 -276
  154. package/dist/flowrun/migration.js.map +0 -1
  155. package/dist/flowrun/resilience.d.ts +0 -18
  156. package/dist/flowrun/resilience.js +0 -80
  157. package/dist/flowrun/resilience.js.map +0 -1
  158. package/dist/flowrun/state.js.map +0 -1
  159. package/dist/flowrun/transitions.d.ts +0 -66
  160. package/dist/flowrun/transitions.js +0 -168
  161. package/dist/flowrun/transitions.js.map +0 -1
  162. package/dist/flowrun/types.d.ts +0 -356
  163. package/dist/flowrun/types.js +0 -21
  164. package/dist/flowrun/types.js.map +0 -1
  165. package/dist/flowrun/validator.d.ts +0 -19
  166. package/dist/flowrun/validator.js +0 -209
  167. package/dist/flowrun/validator.js.map +0 -1
  168. package/dist/plugin/broker.d.ts +0 -73
  169. package/dist/plugin/broker.js +0 -140
  170. package/dist/plugin/broker.js.map +0 -1
  171. package/dist/plugin/tdd-tool.d.ts +0 -62
  172. package/dist/plugin/tdd-tool.js +0 -336
  173. package/dist/plugin/tdd-tool.js.map +0 -1
  174. /package/dist/{flowrun → kernel/tdd}/adapter.js +0 -0
  175. /package/dist/{flowrun → kernel/tdd}/digest.js +0 -0
  176. /package/dist/{flowrun → kernel/tdd}/evaluator.js +0 -0
  177. /package/dist/{flowrun → kernel/tdd}/state.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/kernel/worktree.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,8 @@
1
- export interface AgentTools {
2
- read?: boolean;
3
- bash?: boolean;
4
- write?: boolean;
5
- edit?: boolean;
6
- }
7
- export interface AgentCapabilities {
8
- create_pr: boolean;
9
- merge_pr: boolean;
10
- modify_files: boolean;
11
- run_tests: boolean;
12
- push_branch: boolean;
13
- approve_review: boolean;
14
- complete_goal: boolean;
15
- }
1
+ /**
2
+ * Agent frontmatter 的 permission 解析。
3
+ * 值可为字符串(如 "deny"、"npm test|git push")或嵌套规则对象
4
+ * (OpenCode 语义:pattern → action,如 bash: { "*": "deny", "npm *": "allow" })。
5
+ */
16
6
  export interface AgentPermission {
17
7
  [key: string]: string | Record<string, string> | undefined;
18
8
  }
@@ -21,8 +11,6 @@ export interface AgentEntry {
21
11
  description?: string;
22
12
  mode?: "subagent" | "primary" | "all";
23
13
  color?: string;
24
- tools?: AgentTools;
25
- capabilities?: AgentCapabilities;
26
14
  permission?: AgentPermission;
27
15
  prompt: string;
28
16
  }
@@ -20,27 +20,6 @@ function parseAgentFile(filePath) {
20
20
  const name = String(parsed.name ?? "");
21
21
  if (!name)
22
22
  return null;
23
- const toolsRaw = parsed.tools;
24
- const tools = toolsRaw && typeof toolsRaw === "object" && !Array.isArray(toolsRaw)
25
- ? {
26
- read: Boolean(toolsRaw.read),
27
- bash: Boolean(toolsRaw.bash),
28
- write: Boolean(toolsRaw.write),
29
- edit: Boolean(toolsRaw.edit),
30
- }
31
- : undefined;
32
- const capabilitiesRaw = parsed.capabilities;
33
- const capabilities = capabilitiesRaw && typeof capabilitiesRaw === "object" && !Array.isArray(capabilitiesRaw)
34
- ? {
35
- create_pr: Boolean(capabilitiesRaw.create_pr),
36
- merge_pr: Boolean(capabilitiesRaw.merge_pr),
37
- modify_files: Boolean(capabilitiesRaw.modify_files),
38
- run_tests: Boolean(capabilitiesRaw.run_tests),
39
- push_branch: Boolean(capabilitiesRaw.push_branch),
40
- approve_review: Boolean(capabilitiesRaw.approve_review),
41
- complete_goal: Boolean(capabilitiesRaw.complete_goal),
42
- }
43
- : undefined;
44
23
  const permissionRaw = parsed.permission;
45
24
  const permission = permissionRaw && typeof permissionRaw === "object" && !Array.isArray(permissionRaw)
46
25
  ? Object.fromEntries(Object.entries(permissionRaw)
@@ -64,8 +43,6 @@ function parseAgentFile(filePath) {
64
43
  description: parsed.description,
65
44
  mode: parsed.mode,
66
45
  color: parsed.color,
67
- tools,
68
- capabilities,
69
46
  permission,
70
47
  prompt: body,
71
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/plugin/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/plugin/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { type FlowStage } from "../kernel/flow.js";
2
+ /** session client 最小可见面:get(caller 判定 + goal 读取)+ update(goal 写入) */
3
+ export interface FlowControlSessionClient {
4
+ session: {
5
+ get(input: {
6
+ sessionID: string;
7
+ }): Promise<{
8
+ data?: {
9
+ parentID?: string | null;
10
+ metadata?: Record<string, unknown>;
11
+ };
12
+ }>;
13
+ update(input: {
14
+ sessionID: string;
15
+ metadata: Record<string, unknown>;
16
+ }): Promise<unknown>;
17
+ };
18
+ }
19
+ /** flow_control 工具依赖 */
20
+ export interface FlowControlDeps {
21
+ projectDir: string;
22
+ sessionClient: FlowControlSessionClient;
23
+ }
24
+ export type FlowControlResponse = {
25
+ ok: boolean;
26
+ flow?: {
27
+ parentIssueNumber: number;
28
+ slug?: string;
29
+ };
30
+ status?: unknown;
31
+ stage?: FlowStage;
32
+ completedStages?: FlowStage[];
33
+ prNumber?: number;
34
+ worktreePath?: string;
35
+ branch?: string;
36
+ oldSessionID?: string | null;
37
+ error?: {
38
+ code: string;
39
+ message: string;
40
+ };
41
+ };
42
+ /**
43
+ * flow_control 工具工厂(spec §2.3)。
44
+ * caller 门禁:primary(除 complete-flow 外);complete-flow 仅 goal-verify。
45
+ */
46
+ export declare function createFlowControlTool(deps: FlowControlDeps): {
47
+ description: string;
48
+ args: {
49
+ op: import("zod").ZodEnum<{
50
+ status: "status";
51
+ "complete-flow": "complete-flow";
52
+ "planning-pr": "planning-pr";
53
+ "stage-start": "stage-start";
54
+ "stage-complete": "stage-complete";
55
+ "create-flow": "create-flow";
56
+ "planning-start": "planning-start";
57
+ "cancel-flow": "cancel-flow";
58
+ takeover: "takeover";
59
+ }>;
60
+ title: import("zod").ZodOptional<import("zod").ZodString>;
61
+ parent_issue_number: import("zod").ZodOptional<import("zod").ZodNumber>;
62
+ stage: import("zod").ZodOptional<import("zod").ZodEnum<{
63
+ tasks: "tasks";
64
+ code: "code";
65
+ requirements: "requirements";
66
+ design: "design";
67
+ review: "review";
68
+ }>>;
69
+ user_confirmed: import("zod").ZodOptional<import("zod").ZodBoolean>;
70
+ };
71
+ execute(args: {
72
+ op: "status" | "complete-flow" | "planning-pr" | "stage-start" | "stage-complete" | "create-flow" | "planning-start" | "cancel-flow" | "takeover";
73
+ title?: string | undefined;
74
+ parent_issue_number?: number | undefined;
75
+ stage?: "tasks" | "code" | "requirements" | "design" | "review" | undefined;
76
+ user_confirmed?: boolean | undefined;
77
+ }, context: import("@opencode-ai/plugin/tool").ToolContext): Promise<import("@opencode-ai/plugin/tool").ToolResult>;
78
+ };
79
+ /** 独立注册辅助:把 flow_control 挂到工具注册表(后续接线批次使用) */
80
+ export declare function registerFlowControl(registry: Record<string, unknown>, deps: FlowControlDeps): void;
@@ -0,0 +1,254 @@
1
+ /**
2
+ * flow_control 工具(spec §2.3):Flow Record 生命周期(替代旧 FlowRun 状态机)。
3
+ * 九 op:create-flow / status / planning-start / planning-pr / stage-start / stage-complete /
4
+ * complete-flow / cancel-flow / takeover。
5
+ * caller:primary 全量(除 complete-flow);complete-flow 仅 goal-verify。
6
+ * server.ts 接线由后续批次统一处理(本批不注册,避免文件冲突)。
7
+ */
8
+ import { tool } from "@opencode-ai/plugin/tool";
9
+ import { requireToolCaller, CALLER_NOT_AUTHORIZED } from "../kernel/caller.js";
10
+ import { FLOW_STAGES, createFlow, readFlowStatus, planningStart, planningPr, applyStageOp, completeFlow, cancelFlow, takeoverFlow, } from "../kernel/flow.js";
11
+ import { readIndex, getFlowSession } from "../kernel/session-index.js";
12
+ import { detectLegacyFlowRun } from "../kernel/legacy.js";
13
+ import { flowGh } from "../kernel/flow.js";
14
+ /**
15
+ * flow_control 工具工厂(spec §2.3)。
16
+ * caller 门禁:primary(除 complete-flow 外);complete-flow 仅 goal-verify。
17
+ */
18
+ export function createFlowControlTool(deps) {
19
+ return tool({
20
+ description: `Control the Flow Record lifecycle (a Flow = one GitHub Parent Issue).
21
+
22
+ Operations:
23
+ - create-flow: Validate the functional title, derive the slug, create a Draft Parent Issue (body contains goal/acceptance/stage checklist, label cabbage:flow), bind the session, and write the minimal goal. When parent_issue_number is given, bind an existing issue instead (legacy FlowRun detection + double-session check).
24
+ - status: Aggregate the Flow Record body, subtasks (issue list --parent), and related PR checks into one report.
25
+ - planning-start: Create the planning worktree .worktree/planning-<slug> for the architect.
26
+ - planning-pr: Commit/push the planning worktree changes and open the Planning PR (Planning Baseline).
27
+ - stage-start / stage-complete: Enforce stage gates (requirements baseline confirmed once; design must complete before tasks; high-risk flows pause between design and tasks) and update the Parent Issue checklist + cabbage:stage:* label.
28
+ - complete-flow: goal-verify only. After independent verification, close the Parent Issue.
29
+ - cancel-flow: Controlled cancellation (requires user_confirmed).
30
+ - takeover: Take over a flow bound to another active session (requires user_confirmed; old session goal is paused).
31
+
32
+ Caller: primary for all ops except complete-flow (goal-verify only).`,
33
+ args: {
34
+ op: tool.schema
35
+ .enum(["create-flow", "status", "planning-start", "planning-pr", "stage-start", "stage-complete", "complete-flow", "cancel-flow", "takeover"])
36
+ .describe("Flow control operation"),
37
+ title: tool.schema.string().optional().describe("Functional title (kebab-case slug) for create-flow"),
38
+ parent_issue_number: tool.schema.number().optional().describe("Parent GitHub Issue number of the Flow Record"),
39
+ stage: tool.schema
40
+ .enum(["requirements", "design", "tasks", "code", "review"])
41
+ .optional()
42
+ .describe("Stage name (for stage-start/stage-complete)"),
43
+ user_confirmed: tool.schema.boolean().optional().describe("User confirmation (required for cancel-flow/takeover and high-risk gates)"),
44
+ },
45
+ async execute(args, ctx) {
46
+ const op = args.op;
47
+ // caller 门禁(矩阵单一来源,§2.2):complete-flow 仅 goal-verify;status 另开放 architect;其余仅 primary
48
+ const denied = await requireToolCaller(ctx, "flow_control", op, deps.sessionClient);
49
+ if (denied)
50
+ return errorResponse(CALLER_NOT_AUTHORIZED, denied);
51
+ try {
52
+ switch (op) {
53
+ case "create-flow":
54
+ return handleCreateFlow(deps, args, ctx.sessionID);
55
+ case "status":
56
+ return handleStatus(deps, args);
57
+ case "planning-start":
58
+ return handlePlanningStart(deps, args);
59
+ case "planning-pr":
60
+ return handlePlanningPr(deps, args);
61
+ case "stage-start":
62
+ case "stage-complete":
63
+ return handleStage(deps, args, op);
64
+ case "complete-flow":
65
+ return handleCompleteFlow(deps, args, ctx);
66
+ case "cancel-flow":
67
+ return handleCancelFlow(deps, args);
68
+ case "takeover":
69
+ return handleTakeover(deps, args, ctx.sessionID);
70
+ default:
71
+ return errorResponse("UNKNOWN_OP", `Unknown op: "${op}"`);
72
+ }
73
+ }
74
+ catch (err) {
75
+ return errorResponse("INTERNAL_ERROR", String(err));
76
+ }
77
+ },
78
+ });
79
+ }
80
+ /** 独立注册辅助:把 flow_control 挂到工具注册表(后续接线批次使用) */
81
+ export function registerFlowControl(registry, deps) {
82
+ registry.flow_control = createFlowControlTool(deps);
83
+ }
84
+ // ─── op handlers ───
85
+ async function handleCreateFlow(deps, args, sessionID) {
86
+ const parent = args.parent_issue_number !== undefined ? Number(args.parent_issue_number) : undefined;
87
+ const title = args.title ?? "";
88
+ if (parent === undefined && title.trim() === "") {
89
+ return errorResponse("POLICY_INVALID", "title is required for create-flow (or pass parent_issue_number to bind an existing issue)");
90
+ }
91
+ const result = await createFlow({
92
+ projectDir: deps.projectDir,
93
+ title,
94
+ sessionID,
95
+ parentIssueNumber: parent,
96
+ });
97
+ if (!result.ok) {
98
+ return errorResponse(result.code, result.message);
99
+ }
100
+ const goalWritten = await writeMinimalGoal(deps.sessionClient, sessionID, result.ref.parentIssueNumber);
101
+ if (!goalWritten) {
102
+ return errorResponse("GOAL_WRITE_FAILED", "flow created but failed to write the minimal goal to the session");
103
+ }
104
+ return okResponse({ flow: result.ref });
105
+ }
106
+ async function handleStatus(deps, args) {
107
+ const n = requireParentIssueNumber(args);
108
+ if (typeof n === "string")
109
+ return n;
110
+ const legacy = await detectLegacyFlowRun(n, flowGh);
111
+ if (legacy.legacy)
112
+ return legacyDetectedResponse(legacy);
113
+ const result = await readFlowStatus(n);
114
+ if (!result.ok) {
115
+ return errorResponse(result.code, result.message);
116
+ }
117
+ return okResponse({ status: result.status });
118
+ }
119
+ async function handlePlanningStart(deps, args) {
120
+ const n = requireParentIssueNumber(args);
121
+ if (typeof n === "string")
122
+ return n;
123
+ const result = await planningStart(deps.projectDir, n);
124
+ if (!result.ok) {
125
+ return errorResponse(result.code, result.message);
126
+ }
127
+ return okResponse({ worktreePath: result.worktreePath, branch: result.branch });
128
+ }
129
+ async function handlePlanningPr(deps, args) {
130
+ const n = requireParentIssueNumber(args);
131
+ if (typeof n === "string")
132
+ return n;
133
+ const result = await planningPr(deps.projectDir, n);
134
+ if (!result.ok) {
135
+ return errorResponse(result.code, result.message);
136
+ }
137
+ return okResponse({ prNumber: result.prNumber, worktreePath: result.worktreePath, branch: result.branch });
138
+ }
139
+ async function handleStage(deps, args, op) {
140
+ const n = requireParentIssueNumber(args);
141
+ if (typeof n === "string")
142
+ return n;
143
+ const stage = args.stage;
144
+ if (!stage || !FLOW_STAGES.includes(stage)) {
145
+ return errorResponse("POLICY_INVALID", "stage is required for stage ops: requirements|design|tasks|code|review");
146
+ }
147
+ const result = await applyStageOp(deps.projectDir, n, op, stage, args.user_confirmed === true);
148
+ if (!result.ok) {
149
+ return errorResponse(result.code, result.message);
150
+ }
151
+ return okResponse({ stage: result.stage, completedStages: result.completedStages });
152
+ }
153
+ async function handleCompleteFlow(deps, args, ctx) {
154
+ const n = requireParentIssueNumber(args);
155
+ if (typeof n === "string")
156
+ return n;
157
+ // 独立 goal-verify 验证通过:绑定 session(或本会话)的 goal 必须已是 complete
158
+ const index = await readIndex(deps.projectDir);
159
+ const entry = getFlowSession(index, n);
160
+ const targetSessionID = entry?.sessionID ?? ctx.sessionID;
161
+ const goalStatus = await readGoalStatus(deps.sessionClient, targetSessionID);
162
+ if (goalStatus !== "complete") {
163
+ return errorResponse("GOAL_NOT_COMPLETE", "complete-flow requires the goal to be verified complete first (goal({op:'complete'}) by goal-verify)");
164
+ }
165
+ const result = await completeFlow(deps.projectDir, n);
166
+ if (!result.ok) {
167
+ return errorResponse(result.code, result.message);
168
+ }
169
+ return okResponse({ flow: { parentIssueNumber: result.parentIssueNumber } });
170
+ }
171
+ async function handleCancelFlow(deps, args) {
172
+ const n = requireParentIssueNumber(args);
173
+ if (typeof n === "string")
174
+ return n;
175
+ const result = await cancelFlow(deps.projectDir, n, args.user_confirmed === true);
176
+ if (!result.ok) {
177
+ return errorResponse(result.code, result.message);
178
+ }
179
+ return okResponse({ flow: { parentIssueNumber: result.parentIssueNumber } });
180
+ }
181
+ async function handleTakeover(deps, args, sessionID) {
182
+ const n = requireParentIssueNumber(args);
183
+ if (typeof n === "string")
184
+ return n;
185
+ const result = await takeoverFlow(deps.projectDir, n, sessionID, args.user_confirmed === true);
186
+ if (!result.ok) {
187
+ return errorResponse(result.code, result.message);
188
+ }
189
+ if (result.oldSessionID && result.oldSessionID !== sessionID) {
190
+ await pauseOldSessionGoal(deps.sessionClient, result.oldSessionID);
191
+ }
192
+ return okResponse({ flow: { parentIssueNumber: result.parentIssueNumber }, oldSessionID: result.oldSessionID });
193
+ }
194
+ // ─── helpers ───
195
+ function requireParentIssueNumber(args) {
196
+ const n = Number(args.parent_issue_number);
197
+ if (!Number.isInteger(n) || n <= 0) {
198
+ return errorResponse("POLICY_INVALID", "parent_issue_number is required");
199
+ }
200
+ return n;
201
+ }
202
+ /** 写最小 goal(§10.2):{parentIssueNumber, status:"active", continuationCount:0} */
203
+ async function writeMinimalGoal(client, sessionID, parentIssueNumber) {
204
+ try {
205
+ const { data } = await client.session.get({ sessionID });
206
+ const existing = data?.metadata ?? {};
207
+ await client.session.update({
208
+ sessionID,
209
+ metadata: { ...existing, goal: { parentIssueNumber, status: "active", continuationCount: 0 } },
210
+ });
211
+ return true;
212
+ }
213
+ catch {
214
+ return false;
215
+ }
216
+ }
217
+ /** 读指定 session 的 goal 状态;无 goal 返回 null */
218
+ async function readGoalStatus(client, sessionID) {
219
+ try {
220
+ const { data } = await client.session.get({ sessionID });
221
+ const goal = data?.metadata?.goal;
222
+ return goal?.status ?? null;
223
+ }
224
+ catch {
225
+ return null;
226
+ }
227
+ }
228
+ /** takeover 后把旧 session 的 goal 置 paused(§10.3) */
229
+ async function pauseOldSessionGoal(client, sessionID) {
230
+ try {
231
+ const { data } = await client.session.get({ sessionID });
232
+ const metadata = data?.metadata;
233
+ const goal = metadata?.goal;
234
+ if (!goal)
235
+ return;
236
+ await client.session.update({ sessionID, metadata: { ...metadata, goal: { ...goal, status: "paused" } } });
237
+ }
238
+ catch {
239
+ // 旧 session goal 置 paused 失败不阻断 takeover
240
+ }
241
+ }
242
+ function legacyDetectedResponse(legacy) {
243
+ const detail = legacy.flowRunId ? ` (flowRunId: ${legacy.flowRunId})` : "";
244
+ return errorResponse("LEGACY_FLOW_DETECTED", `This issue is a legacy-architecture FlowRun${detail}; complete it with the old plugin version (0.x). New versions do not auto-migrate.`);
245
+ }
246
+ function okResponse(overrides = {}) {
247
+ const resp = { ok: true, ...overrides };
248
+ return JSON.stringify(resp, null, 2);
249
+ }
250
+ function errorResponse(code, message) {
251
+ const resp = { ok: false, error: { code, message } };
252
+ return JSON.stringify(resp, null, 2);
253
+ }
254
+ //# sourceMappingURL=flow-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-control.js","sourceRoot":"","sources":["../../src/plugin/flow-control.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import type { ToolContext, ToolResult } from "@opencode-ai/plugin";
2
2
  import { createOpencodeClient } from "@opencode-ai/sdk/v2";
3
3
  import type { Session } from "@opencode-ai/sdk/v2";
4
- import type { GoalFlowRunRef } from "../flowrun/types.js";
5
4
  export type GoalStatus = "active" | "paused" | "complete";
5
+ /** 最小化 goal(§10.2):目标与验收条件从 Flow Record(Parent Issue body)读取 */
6
6
  export interface GoalData {
7
- objective: string;
8
- completionCriterion: string;
7
+ parentIssueNumber: number;
9
8
  status: GoalStatus;
10
9
  continuationCount: number;
11
10
  }
11
+ export declare function createGoal(parentIssueNumber: number): GoalData;
12
12
  export declare function canTransitionTo(goal: GoalData, target: GoalStatus): boolean;
13
13
  export declare function formatGoal(goal: GoalData): string;
14
14
  export declare const MAX_CONTINUATIONS = 50;
15
- export declare function continuationPrompt(objective: string, completionCriterion: string): string;
15
+ export declare function continuationPrompt(parentIssueNumber: number): string;
16
16
  export declare function verifyAgentPrompt(): string;
17
17
  export declare function createGoalClient(serverUrl: URL, v1Client: any): import("@opencode-ai/sdk/v2").OpencodeClient;
18
18
  export declare function readGoal(client: ReturnType<typeof createOpencodeClient>, sessionID: string): Promise<{
@@ -20,44 +20,7 @@ export declare function readGoal(client: ReturnType<typeof createOpencodeClient>
20
20
  session: Session | null;
21
21
  }>;
22
22
  export declare function writeGoal(client: ReturnType<typeof createOpencodeClient>, sessionID: string, goal: GoalData | null, existingSession?: Session | null): Promise<void>;
23
- /**
24
- * 读取 session metadata 中的 GoalFlowRunRef。
25
- * 返回 null 表示尚未绑定。
26
- */
27
- export declare function readFlowRunRef(client: ReturnType<typeof createOpencodeClient>, sessionID: string): Promise<GoalFlowRunRef | null>;
28
- /**
29
- * Goal → FlowRun 绑定结果。
30
- */
31
- export type BindFlowRunResult = {
32
- ok: true;
33
- } | {
34
- ok: false;
35
- code: "GOAL_FLOW_CONFLICT";
36
- message: string;
37
- };
38
- /**
39
- * 原子绑定 Goal → FlowRun。
40
- *
41
- * 规则:
42
- * - 未绑定 → 写入 flowRunRef,返回 ok
43
- * - 已绑定同一 FlowRun(repo + parentIssueNumber + flowRunId 相同)→ 幂等,返回 ok
44
- * - 已绑定不同 FlowRun → 返回 GOAL_FLOW_CONFLICT
45
- */
46
- export declare function bindFlowRunRef(client: ReturnType<typeof createOpencodeClient>, sessionID: string, ref: GoalFlowRunRef): Promise<BindFlowRunResult>;
47
- /**
48
- * 解析 GoalFlowRunRef 的显示名称。
49
- */
50
- export declare function formatFlowRunRef(ref: GoalFlowRunRef): string;
51
- /**
52
- * 验证 FlowRun 终态 — 检查是否满足 Goal complete 的前提条件。
53
- *
54
- * 返回 null 表示允许完成;
55
- * 返回错误信息字符串表示阻止完成。
56
- *
57
- * @param flowRunStatus FlowRun 当前状态,null 表示无绑定的 FlowRun
58
- */
59
- export declare function checkFlowRunBlockers(flowRunStatus: string | null): string | null;
60
- export declare function createGoalTool(client: ReturnType<typeof createOpencodeClient>, onBeforeComplete?: (parentSessionID: string) => Promise<string | null>): {
23
+ export declare function createGoalTool(client: ReturnType<typeof createOpencodeClient>): {
61
24
  description: string;
62
25
  args: {
63
26
  op: import("zod").ZodEnum<{
@@ -68,12 +31,10 @@ export declare function createGoalTool(client: ReturnType<typeof createOpencodeC
68
31
  cancel: "cancel";
69
32
  pause: "pause";
70
33
  }>;
71
- objective: import("zod").ZodString;
72
- completion_criterion: import("zod").ZodString;
34
+ parent_issue_number: import("zod").ZodNumber;
73
35
  };
74
36
  execute(args: {
75
37
  op: "complete" | "create" | "get" | "resume" | "cancel" | "pause";
76
- objective: string;
77
- completion_criterion: string;
38
+ parent_issue_number: number;
78
39
  }, context: ToolContext): Promise<ToolResult>;
79
40
  };