@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,22 +1,31 @@
1
1
  import path from "node:path";
2
+ import { readFileSync } from "node:fs";
2
3
  import { initPrompts } from "./prompts.js";
3
4
  import { initBootstrap, getBootstrapContent } from "./bootstrap.js";
4
5
  import { loadCommands } from "./commands.js";
5
6
  import { setupSkillsDir } from "./skills.js";
6
7
  import { loadAgents } from "./agents.js";
7
8
  import { createAgentShellEnv } from "./shell.js";
8
- import { createGoalClient, createGoalTool, readGoal, writeGoal, MAX_CONTINUATIONS, continuationPrompt, formatGoal } from "./goal.js";
9
- import { readIndex, updateFlowSession } from "../kernel/session-index.js";
10
- import { createSetupControlTool } from "./setup-control.js";
11
- import { createFlowControlTool } from "./flow-control.js";
12
- import { createTaskControlTool } from "./task-control.js";
13
- import { createTddCheckpointTool } from "./tdd-checkpoint.js";
14
- import { createReleaseControlTool } from "./release-control.js";
9
+ import { createGoalTool, mutateGoal, MAX_CONTINUATIONS, continuationPrompt, formatGoal, isBlockedReport, isDoneReport, snapshotTokenTotal, budgetReached } from "./goal.js";
10
+ import { createGoalClient, createMetadataGoalStore } from "./goal-store.js";
11
+ import { readIndex, updateFlowSession, removeFlowSession } from "../kernel/session-index.js";
15
12
  import { getContextBlock, formatContextBlock, CONTEXT_MARKER } from "../kernel/context.js";
16
13
  import { readProjectProfile } from "../kernel/profile.js";
17
14
  const abortedSessions = new Set();
18
- const errorRetryCount = new Map();
15
+ const continuationInFlight = new Set();
19
16
  const COMPACTION_THRESHOLD = 20;
17
+ /** autoResume 跳过窗口:索引 30s 内更新过的 flow 不恢复(可能刚续接过,立即恢复会双发) */
18
+ const AUTO_RESUME_SKIP_WINDOW_MS = 30_000;
19
+ /** 从插件包根读取版本号(skills 安装目录按版本隔离) */
20
+ function readPluginVersion(packageRoot) {
21
+ try {
22
+ const pkg = JSON.parse(readFileSync(path.join(packageRoot, "package.json"), "utf8"));
23
+ return typeof pkg.version === "string" && pkg.version !== "" ? pkg.version : "0.0.0";
24
+ }
25
+ catch {
26
+ return "0.0.0";
27
+ }
28
+ }
20
29
  /**
21
30
  * 决定首条 user 消息注入内容:
22
31
  * - Primary(goal 激活)→ bootstrap + Project Context 块
@@ -43,96 +52,229 @@ export function configureGoalTools(config) {
43
52
  }
44
53
  }
45
54
  /**
46
- * config 层第二道门(spec §2.2):按 caller 矩阵把 5 个生命周期工具
47
- * 对每个 agent 置 true/false。agent 名 → 角色映射与 caller.ts ROLE_BY_AGENT 一致。
55
+ * 子会话活动闸:后台 subagent 运行时父会话保持 idle(结果稍后注入父会话)。
56
+ * 此时续接会压过子代理结果注入,必须跳过本次续接,等子代理结束后父会话的
57
+ * 下一次 busy→idle 循环再触发。查询失败视为 unknown → 保守跳过(不续接)。
48
58
  */
49
- export function configureLifecycleTools(config) {
50
- const lifecycleTools = ["setup_control", "flow_control", "task_control", "tdd_checkpoint", "release_control"];
51
- const agentRole = (name) => {
52
- switch (name) {
53
- case "dev-lifecycle": return "primary";
54
- case "developer": return "developer";
55
- case "architect": return "architect";
56
- case "reviewer": return "reviewer";
57
- case "goal-verify": return "goal-verify";
58
- default: return "reviewer";
59
- }
60
- };
61
- const canUseTool = (role, tool) => {
62
- if (role === "goal-verify")
63
- return tool === "flow_control";
64
- switch (tool) {
65
- case "tdd_checkpoint": return role === "primary" || role === "developer";
66
- default: return role === "primary";
67
- }
68
- };
69
- for (const [agentName, agent] of Object.entries(config.agent ?? {})) {
70
- if (!agent || typeof agent !== "object" || Array.isArray(agent))
71
- continue;
72
- const agentConfig = agent;
73
- const role = agentRole(agentName);
74
- const toolFlags = {};
75
- for (const toolName of lifecycleTools) {
76
- toolFlags[toolName] = canUseTool(role, toolName);
77
- }
78
- agentConfig.tools = { ...agentConfig.tools, ...toolFlags };
79
- }
80
- }
81
- async function queueContinuation(client, sessionID, projectDir) {
82
- const { goal } = await readGoal(client, sessionID);
83
- if (!goal || goal.status !== "active")
84
- return;
85
- if (projectDir) {
86
- await updateFlowSession(projectDir, goal.parentIssueNumber, { status: goal.status, continuationCount: goal.continuationCount });
59
+ async function hasWorkingChildren(client, sessionID) {
60
+ try {
61
+ const childrenResult = await client.session.children({ sessionID });
62
+ const children = Array.isArray(childrenResult?.data) ? childrenResult.data : [];
63
+ if (children.length === 0)
64
+ return false;
65
+ const statusResult = await client.session.status();
66
+ const statuses = statusResult?.data;
67
+ if (!statuses || typeof statuses !== "object")
68
+ return true;
69
+ return children.some((child) => {
70
+ const status = child?.id ? statuses[child.id] : null;
71
+ return status?.type === "busy" || status?.type === "retry";
72
+ });
87
73
  }
88
- if (abortedSessions.has(sessionID)) {
89
- abortedSessions.delete(sessionID);
90
- goal.status = "paused";
91
- await writeGoal(client, sessionID, goal);
92
- if (projectDir)
93
- await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
94
- return;
74
+ catch (error) {
75
+ // 查询失败 → 保守跳过(fail-closed);告警使长期故障可观测(否则续接会静默永久停止)
76
+ console.warn(`[cabbage] child-session check failed for ${sessionID}:`, error?.message ?? error);
77
+ return true;
95
78
  }
96
- if (goal.continuationCount >= MAX_CONTINUATIONS) {
97
- goal.status = "paused";
98
- await writeGoal(client, sessionID, goal);
99
- if (projectDir)
100
- await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
79
+ }
80
+ export async function queueContinuation(client, store, sessionID, projectDir) {
81
+ if (continuationInFlight.has(sessionID))
101
82
  return;
102
- }
103
- goal.continuationCount++;
104
- await writeGoal(client, sessionID, goal);
105
- if (projectDir)
106
- await updateFlowSession(projectDir, goal.parentIssueNumber, { continuationCount: goal.continuationCount });
83
+ continuationInFlight.add(sessionID);
107
84
  try {
108
- if (goal.continuationCount > 0 && goal.continuationCount % COMPACTION_THRESHOLD === 0) {
85
+ const decision = await mutateGoal(store, sessionID, async (goal) => {
86
+ // 读改写与 message.updated 同锁串行,杜绝续接计数/状态被并发覆盖
87
+ if (!goal || goal.status !== "active")
88
+ return { goal, value: null };
89
+ if (projectDir) {
90
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: goal.status, continuationCount: goal.continuationCount });
91
+ }
92
+ if (abortedSessions.has(sessionID)) {
93
+ abortedSessions.delete(sessionID);
94
+ goal.status = "paused";
95
+ if (projectDir)
96
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
97
+ return { goal, value: null };
98
+ }
99
+ if (goal.continuationCount >= MAX_CONTINUATIONS) {
100
+ goal.status = "paused";
101
+ if (projectDir)
102
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
103
+ return { goal, value: null };
104
+ }
105
+ // 子会话活动闸:后台 subagent 仍 busy/retry 时跳过续接(父会话 idle 不代表任务静默)
106
+ if (await hasWorkingChildren(client, sessionID)) {
107
+ return { goal, value: null };
108
+ }
109
+ // 尾部静默检查:idle 事件可能竞态了后续消息/未落盘的回复。
110
+ // 最后一条是 user 消息、或最后 assistant 未完成(无 completed 时间)→
111
+ // 会话正在或即将忙碌,等下一次 idle 事件重新触发;无 assistant 消息则无 provider/model 可续。
112
+ const messages = await store.messages(sessionID, 40);
113
+ if (!messages)
114
+ return { goal, value: null };
115
+ const lastMessageInfo = messages.length > 0 ? messages[messages.length - 1]?.info : null;
116
+ if (lastMessageInfo?.role === "user")
117
+ return { goal, value: null };
118
+ let lastAssistantMessage = null;
119
+ for (let i = messages.length - 1; i >= 0; i -= 1) {
120
+ const message = messages[i];
121
+ if (message?.info?.role === "assistant") {
122
+ lastAssistantMessage = message;
123
+ break;
124
+ }
125
+ }
126
+ const lastAssistantInfo = lastAssistantMessage?.info ?? null;
127
+ const assistantCompleted = typeof lastAssistantInfo?.time === "object"
128
+ && lastAssistantInfo.time !== null
129
+ && lastAssistantInfo.time.completed
130
+ && lastAssistantInfo.time.completed > 0;
131
+ if (!lastAssistantInfo)
132
+ return { goal, value: null };
133
+ if (!assistantCompleted && !lastAssistantInfo.error)
134
+ return { goal, value: null };
135
+ if (!lastAssistantInfo.id)
136
+ return { goal, value: null };
137
+ // [BLOCKED:] 阻塞报告 / [DONE:] 完成报告:agent 明确信号 → 暂停 goal 请用户/验证介入
138
+ // (防空转烧 token;完成报告后应由 dev-lifecycle 派 goal-verify 做最终独立验证)。
139
+ // resume 后首次 tick 豁免(statusReason='resumed' 被消费清除),
140
+ // 否则 resume 会立即被上一轮旧报告再次暂停成死路。
141
+ const assistantText = (lastAssistantMessage?.parts ?? [])
142
+ .filter((part) => part?.type === "text" && typeof part.text === "string")
143
+ .map((part) => part.text)
144
+ .join("\n");
145
+ const agentSignaled = isBlockedReport(assistantText) || isDoneReport(assistantText);
146
+ if (agentSignaled) {
147
+ if (goal.statusReason === "resumed") {
148
+ goal.statusReason = "";
149
+ }
150
+ else {
151
+ goal.status = "paused";
152
+ goal.statusReason = isBlockedReport(assistantText) ? "blocked report" : "done report";
153
+ if (projectDir)
154
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
155
+ return { goal, value: null };
156
+ }
157
+ }
158
+ else if (goal.statusReason === "resumed") {
159
+ // 豁免消费:resume 后的首次 tick 无论是否命中信号都清除 kickoff 标记。
160
+ // 若不消费,首 tick 正常推进后 statusReason 残留,后续真实信号会被误豁免一次。
161
+ goal.statusReason = "";
162
+ }
163
+ // Token 记账(快照法):最新完成 assistant 轮的 input+cache.read+output 即整段成本
164
+ // (OpenCode 每轮 cache.read 已含此前所有付费 token)。goal 相对化:首次 tick
165
+ // 用创建时刻前最后完成的 assistant 轮初始化 baseline;单调不减,context 收缩不回退。
166
+ // compaction 不做分段(预算为护栏非账单)。
167
+ let tokensBaseline = goal.tokensBaseline ?? 0;
168
+ if (!(tokensBaseline > 0) && typeof goal.createdAt === "number") {
169
+ for (const message of messages) {
170
+ const info = message?.info;
171
+ if (info?.role !== "assistant")
172
+ continue;
173
+ const completed = info.time?.completed;
174
+ if (!(completed && completed > 0) || completed > goal.createdAt)
175
+ continue;
176
+ tokensBaseline = Math.max(tokensBaseline, snapshotTokenTotal(info.tokens));
177
+ }
178
+ }
179
+ const tokensUsed = Math.max(goal.tokensUsed ?? 0, Math.max(0, snapshotTokenTotal(lastAssistantInfo.tokens) - tokensBaseline));
180
+ goal.tokensBaseline = tokensBaseline;
181
+ goal.tokensUsed = tokensUsed;
182
+ // token 预算护栏:达限即暂停(用户需提高预算后 resume,护栏优先)
183
+ if (budgetReached(goal)) {
184
+ goal.status = "paused";
185
+ goal.statusReason = "token budget reached";
186
+ if (projectDir)
187
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
188
+ return { goal, value: null };
189
+ }
190
+ // 先写计数后发 prompt:崩溃窗口只会"少发一次续接"(等下次 idle 重试),
191
+ // 不会"prompt 已发但计数未落盘"导致重启 autoResume 双发。
192
+ goal.continuationCount++;
193
+ if (projectDir)
194
+ await updateFlowSession(projectDir, goal.parentIssueNumber, {
195
+ continuationCount: goal.continuationCount,
196
+ lastContinuedAt: Date.now(),
197
+ });
198
+ return { goal, value: { proceed: true, goal } };
199
+ });
200
+ if (!decision?.proceed || !decision.goal)
201
+ return;
202
+ // abort 二次检查:idle 与 abort 事件并发时,避免对已 abort 的会话发出续接
203
+ if (abortedSessions.has(sessionID)) {
204
+ abortedSessions.delete(sessionID);
205
+ await mutateGoal(store, sessionID, async (goal) => {
206
+ if (!goal)
207
+ return { goal, value: null };
208
+ goal.status = "paused";
209
+ goal.continuationCount = Math.max(0, goal.continuationCount - 1);
210
+ if (projectDir)
211
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
212
+ return { goal, value: null };
213
+ }).catch(() => undefined);
214
+ return;
215
+ }
216
+ // 每 20 次续接主动 compact 会话历史(压缩失败不阻塞续接)
217
+ if (decision.goal.continuationCount > 0 && decision.goal.continuationCount % COMPACTION_THRESHOLD === 0) {
109
218
  try {
110
219
  await client.session.promptAsync({
111
220
  sessionID,
112
221
  parts: [{ type: "text", text: "[compact] The session history is growing long. Summarize completed work and continue.", synthetic: true }],
113
222
  });
114
223
  }
115
- catch { }
224
+ catch (err) {
225
+ console.warn("[cabbage] compaction prompt failed:", err);
226
+ }
116
227
  }
117
228
  const contextBlock = projectDir ? await getContextBlock(projectDir) : null;
118
229
  const contextText = contextBlock ? `${formatContextBlock(contextBlock)}\n\n` : "";
119
- // 显式传回用户最后使用的 agent/模型,防止 idle 续接回落/切换默认 agent(如 build)
120
- await client.session.promptAsync({
121
- sessionID,
122
- parts: [{ type: "text", text: contextText + continuationPrompt(goal.parentIssueNumber), synthetic: true }],
123
- ...(goal.sessionProfile ? { agent: goal.sessionProfile.agent, model: goal.sessionProfile.model } : {}),
124
- });
230
+ try {
231
+ await client.session.promptAsync({
232
+ sessionID,
233
+ parts: [{ type: "text", text: contextText + continuationPrompt(decision.goal.parentIssueNumber), synthetic: true }],
234
+ ...(decision.goal.sessionProfile ? { agent: decision.goal.sessionProfile.agent, model: decision.goal.sessionProfile.model } : {}),
235
+ });
236
+ }
237
+ catch (err) {
238
+ // 发送失败 → 回滚计数(尽力;回滚失败只会少一次续接,方向安全)
239
+ console.error("[cabbage] continuation prompt failed, rolling back counter:", err);
240
+ await mutateGoal(store, sessionID, async (goal) => {
241
+ if (!goal)
242
+ return { goal, value: null };
243
+ goal.continuationCount = Math.max(0, goal.continuationCount - 1);
244
+ if (projectDir)
245
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { continuationCount: goal.continuationCount });
246
+ return { goal, value: null };
247
+ }).catch(() => undefined);
248
+ }
125
249
  }
126
250
  catch (err) {
127
251
  console.error("[cabbage] continuation failed:", err);
128
252
  }
253
+ finally {
254
+ continuationInFlight.delete(sessionID);
255
+ }
129
256
  }
130
- async function autoResume(client, projectDir) {
257
+ export async function autoResume(client, store, projectDir) {
131
258
  const index = await readIndex(projectDir);
132
259
  for (const [parentIssueNumber, entry] of Object.entries(index.flows)) {
133
260
  if (entry.status !== "active")
134
261
  continue;
135
- const { goal } = await readGoal(client, entry.sessionID);
262
+ // 重启双发防护:仅跳过"最近实际续接过"的 flow(lastContinuedAt 在发送续接时写入)。
263
+ // 不用 updatedAt——它被 queueContinuation 开头的索引心跳无条件刷新,反映"最近 idle",
264
+ // 崩溃前频繁 idle 的 flow 会被误跳过且无再武装(静默卡住)。
265
+ // 无 lastContinuedAt 的旧 entry 不跳过(兼容升级前索引)。跳过时告警保证可观测。
266
+ if (entry.lastContinuedAt && Date.now() - entry.lastContinuedAt < AUTO_RESUME_SKIP_WINDOW_MS) {
267
+ console.warn(`[cabbage] auto-resume: skip #${parentIssueNumber} (continued ${Math.round((Date.now() - entry.lastContinuedAt) / 1000)}s ago; next idle event re-arms)`);
268
+ continue;
269
+ }
270
+ const { goal } = await store.read(entry.sessionID);
271
+ // 索引一致性自愈:entry 指向的 goal 已是别的 Flow(edit 换 Flow 后旧 entry 残留/rebind 失败)→
272
+ // 删除陈旧 entry,防止每次重启对同一会话重复续接
273
+ if (goal && goal.parentIssueNumber !== Number(parentIssueNumber)) {
274
+ console.warn(`[cabbage] auto-resume: index #${parentIssueNumber} points to goal of Flow #${goal.parentIssueNumber}; removing stale entry`);
275
+ await removeFlowSession(projectDir, Number(parentIssueNumber));
276
+ continue;
277
+ }
136
278
  if (!goal || goal.status !== "active") {
137
279
  await updateFlowSession(projectDir, Number(parentIssueNumber), { status: "paused" });
138
280
  continue;
@@ -153,19 +295,6 @@ async function autoResume(client, projectDir) {
153
295
  }
154
296
  }
155
297
  }
156
- function getRetryKey(sessionID, phase) {
157
- return `${sessionID}:${phase}`;
158
- }
159
- function shouldEscalate(sessionID, phase) {
160
- const key = getRetryKey(sessionID, phase);
161
- const count = errorRetryCount.get(key) ?? 0;
162
- errorRetryCount.set(key, count + 1);
163
- if (count < 3)
164
- return "retry";
165
- if (count < 5)
166
- return "skip";
167
- return "pause";
168
- }
169
298
  const ABORTED_SESSION_CLEANUP_INTERVAL = 1000 * 60 * 30;
170
299
  let abortedCleanupTimer = null;
171
300
  function startPeriodicCleanup() {
@@ -173,7 +302,6 @@ function startPeriodicCleanup() {
173
302
  clearInterval(abortedCleanupTimer);
174
303
  abortedCleanupTimer = setInterval(() => {
175
304
  abortedSessions.clear();
176
- errorRetryCount.clear();
177
305
  }, ABORTED_SESSION_CLEANUP_INTERVAL);
178
306
  }
179
307
  export function createOpencodeCabbage(packageRoot) {
@@ -181,32 +309,22 @@ export function createOpencodeCabbage(packageRoot) {
181
309
  const sourceSkillsDir = path.join(packageRoot, "assets", "skills");
182
310
  const promptsDir = path.join(packageRoot, "assets", "prompts");
183
311
  const commandsDir = path.join(packageRoot, "assets", "commands");
184
- const skillsDir = await setupSkillsDir(sourceSkillsDir, promptsDir);
312
+ const skillsDir = await setupSkillsDir(sourceSkillsDir, promptsDir, readPluginVersion(packageRoot));
185
313
  const projectDir = ctx.worktree || ctx.directory;
186
314
  const v1Client = ctx.client._client;
187
315
  const goalClient = createGoalClient(ctx.serverUrl, v1Client);
188
- const goalTool = createGoalTool(goalClient);
189
- const sessionClient = goalClient;
190
- const flowControlTool = createFlowControlTool({ projectDir, sessionClient });
191
- const taskControlTool = createTaskControlTool({ projectDir, sessionClient });
192
- const setupControlTool = createSetupControlTool({ projectDir, sessionClient });
193
- const tddCheckpointTool = createTddCheckpointTool({ projectDir, sessionClient });
194
- const releaseControlTool = createReleaseControlTool({ projectDir, sessionClient });
316
+ const goalStore = createMetadataGoalStore(goalClient);
317
+ const goalTool = createGoalTool(goalStore, projectDir);
195
318
  const agentsDir = path.join(packageRoot, "assets", "agents");
196
319
  await initPrompts(packageRoot, projectDir);
197
320
  await initBootstrap();
198
321
  startPeriodicCleanup();
199
- void autoResume(goalClient, projectDir).catch(err => {
322
+ void autoResume(goalClient, goalStore, projectDir).catch(err => {
200
323
  console.error("[cabbage] auto-resume failed:", err);
201
324
  });
202
325
  return {
203
326
  tool: {
204
327
  goal: goalTool,
205
- flow_control: flowControlTool,
206
- task_control: taskControlTool,
207
- setup_control: setupControlTool,
208
- tdd_checkpoint: tddCheckpointTool,
209
- release_control: releaseControlTool,
210
328
  },
211
329
  config: async (rawConfig) => {
212
330
  const config = rawConfig;
@@ -268,7 +386,6 @@ export function createOpencodeCabbage(packageRoot) {
268
386
  };
269
387
  }
270
388
  configureGoalTools(config);
271
- configureLifecycleTools(config);
272
389
  },
273
390
  "experimental.chat.messages.transform": async (_input, output) => {
274
391
  if (!output.messages.length)
@@ -279,7 +396,7 @@ export function createOpencodeCabbage(packageRoot) {
279
396
  if (firstUser.parts.some(p => p.type === "text" && (p.text.includes("EXTREMELY_IMPORTANT") || p.text.includes(CONTEXT_MARKER))))
280
397
  return;
281
398
  const sessionID = output.messages[0].info.sessionID;
282
- const { goal, session } = await readGoal(goalClient, sessionID);
399
+ const { goal, session } = await goalStore.read(sessionID);
283
400
  const contextBlock = await getContextBlock(projectDir);
284
401
  const injection = buildFirstUserInjection({
285
402
  hasGoal: goal?.status === "active",
@@ -298,88 +415,63 @@ export function createOpencodeCabbage(packageRoot) {
298
415
  const sessionID = evt.properties.sessionID;
299
416
  if (errorName === "MessageAbortedError" && sessionID) {
300
417
  abortedSessions.add(sessionID);
418
+ // abort 立即持久化 pause:不依赖内存标记。
419
+ // 否则 30 分钟清理窗口内无 idle 事件、或插件重启时标记丢失,
420
+ // 用户主动中断的 goal 会被下次 idle/autoResume 自动续接(继续烧 token)。
421
+ void mutateGoal(goalStore, sessionID, async (goal) => {
422
+ if (!goal || goal.status !== "active")
423
+ return { goal, value: undefined };
424
+ goal.status = "paused";
425
+ goal.statusReason = "aborted by user";
426
+ if (projectDir)
427
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
428
+ return { goal, value: undefined };
429
+ }).catch((err) => {
430
+ console.warn("[cabbage] abort pause failed:", err?.message ?? err);
431
+ });
301
432
  }
302
433
  }
303
434
  if (evt.type === "session.status" && evt.properties?.status?.type === "idle") {
304
435
  const sessionID = evt.properties.sessionID;
305
436
  if (sessionID) {
306
437
  try {
307
- const result = await goalClient.session.get({ sessionID });
308
- if (result?.data?.parentID)
438
+ const { session } = await goalStore.read(sessionID);
439
+ if (session?.parentID)
309
440
  return;
310
441
  }
311
442
  catch (err) {
312
443
  console.error("[cabbage] session lookup failed:", err);
313
444
  return;
314
445
  }
315
- void queueContinuation(goalClient, sessionID, projectDir).catch(err => {
446
+ await queueContinuation(goalClient, goalStore, sessionID, projectDir).catch(err => {
316
447
  console.error("[cabbage] continuation failed:", err);
317
448
  });
318
449
  }
319
450
  }
320
- if (evt.type === "session.status" && evt.properties?.status?.type === "error") {
321
- const sessionID = evt.properties.sessionID;
322
- if (sessionID && !abortedSessions.has(sessionID)) {
323
- const phase = evt.properties?.phase ?? "unknown";
324
- const action = shouldEscalate(sessionID, phase);
325
- const { goal } = await readGoal(goalClient, sessionID);
326
- if (action === "retry" && goal) {
327
- try {
328
- await goalClient.session.promptAsync({
329
- sessionID,
330
- parts: [{
331
- type: "text",
332
- text: `[auto-retry] Previous attempt failed. Try a different approach.\n\n${formatGoal(goal)}`,
333
- synthetic: true,
334
- }],
335
- ...(goal.sessionProfile ? { agent: goal.sessionProfile.agent, model: goal.sessionProfile.model } : {}),
336
- });
337
- }
338
- catch (err) {
339
- console.error("[cabbage] auto-retry prompt failed:", err);
340
- }
341
- }
342
- else if (action === "skip" && goal) {
343
- try {
344
- await goalClient.session.promptAsync({
345
- sessionID,
346
- parts: [{
347
- type: "text",
348
- text: `[skip] Skipping failed step. Continue with remaining work.\n\n${formatGoal(goal)}`,
349
- synthetic: true,
350
- }],
351
- ...(goal.sessionProfile ? { agent: goal.sessionProfile.agent, model: goal.sessionProfile.model } : {}),
352
- });
353
- }
354
- catch (err) {
355
- console.error("[cabbage] auto-skip prompt failed:", err);
356
- }
357
- }
358
- }
359
- }
360
451
  if (evt.type === "message.updated" && evt.properties?.info?.role === "user") {
361
452
  const sessionID = evt.properties.sessionID;
362
- if (sessionID) {
453
+ if (sessionID && !continuationInFlight.has(sessionID)) {
363
454
  abortedSessions.delete(sessionID);
364
- const { goal, session } = await readGoal(goalClient, sessionID);
365
- if (goal) {
455
+ const info = evt.properties.info;
456
+ await mutateGoal(goalStore, sessionID, async (goal) => {
457
+ if (!goal)
458
+ return { goal, value: undefined };
366
459
  goal.continuationCount = 0;
367
460
  // 刷新用户最后使用的 agent/模型快照(用户在 TUI 切换 agent/模型后发消息)
368
- const info = evt.properties.info;
369
461
  if (info?.agent) {
370
462
  goal.sessionProfile = {
371
463
  agent: info.agent,
372
464
  model: info.model?.providerID ? { providerID: info.model.providerID, modelID: info.model.modelID } : goal.sessionProfile?.model,
373
465
  };
374
466
  }
375
- await writeGoal(goalClient, sessionID, goal, session ?? undefined);
376
- }
467
+ return { goal, value: undefined };
468
+ });
377
469
  }
378
470
  }
379
471
  if (evt.type === "session.updated") {
380
472
  const sessionID = evt.properties?.sessionID;
381
473
  if (sessionID) {
382
- const { goal } = await readGoal(goalClient, sessionID);
474
+ const { goal } = await goalStore.read(sessionID);
383
475
  if (goal?.status === "complete") {
384
476
  await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "completed" });
385
477
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/plugin/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/plugin/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1,7 @@
1
- export declare function setupSkillsDir(sourceSkillsDir: string, promptsDir?: string): Promise<string>;
1
+ /**
2
+ * 安装目录结构完整(目录列表与源一致)→ 跳过全量重建;否则重建。
3
+ * - 目录带插件版本号(skills@<version>):升级插件后自动重装新版本内容,
4
+ * 且同一机器上不同版本插件共存时互不覆盖(P2-4 多版本踩踏修复)。
5
+ * - 重建在锁内执行(mkdir 原子锁 + 锁内二次检查),防多实例并发 rm+cp 竞态。
6
+ */
7
+ export declare function setupSkillsDir(sourceSkillsDir: string, promptsDir?: string, version?: string): Promise<string>;