@devcxl/opencode-cabbage 1.0.0 → 1.2.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 (126) hide show
  1. package/README.md +19 -25
  2. package/README.zh.md +17 -23
  3. package/assets/agents/dev-lifecycle.md +208 -68
  4. package/assets/agents/team/architect.md +22 -4
  5. package/assets/agents/team/developer.md +13 -6
  6. package/assets/agents/team/goal-verify.md +4 -1
  7. package/assets/agents/team/researcher.md +59 -0
  8. package/assets/agents/team/reviewer.md +34 -18
  9. package/assets/commands/setup.md +1 -1
  10. package/assets/prompts/bootstrap.md +10 -9
  11. package/assets/prompts/stage-contract.md +25 -25
  12. package/assets/skills/flow-code/SKILL.md +23 -25
  13. package/assets/skills/flow-design/SKILL.md +94 -26
  14. package/assets/skills/flow-release/SKILL.md +41 -17
  15. package/assets/skills/flow-requirements/SKILL.md +19 -13
  16. package/assets/skills/flow-research/SKILL.md +77 -0
  17. package/assets/skills/flow-review/SKILL.md +55 -25
  18. package/assets/skills/flow-setup/SKILL.md +27 -24
  19. package/assets/skills/flow-tasks/SKILL.md +178 -35
  20. package/assets/skills/flow-tdd/SKILL.md +68 -40
  21. package/dist/kernel/context.js +12 -1
  22. package/dist/kernel/context.js.map +1 -1
  23. package/dist/kernel/permission.d.ts +1 -1
  24. package/dist/kernel/permission.js +9 -1
  25. package/dist/kernel/permission.js.map +1 -1
  26. package/dist/kernel/profile.js +5 -2
  27. package/dist/kernel/profile.js.map +1 -1
  28. package/dist/kernel/session-index.d.ts +12 -27
  29. package/dist/kernel/session-index.js +46 -80
  30. package/dist/kernel/session-index.js.map +1 -1
  31. package/dist/plugin/bootstrap.d.ts +0 -1
  32. package/dist/plugin/bootstrap.js +0 -3
  33. package/dist/plugin/bootstrap.js.map +1 -1
  34. package/dist/plugin/goal.d.ts +57 -6
  35. package/dist/plugin/goal.js +234 -86
  36. package/dist/plugin/goal.js.map +1 -1
  37. package/dist/plugin/prompt-lint.js +3 -12
  38. package/dist/plugin/prompt-lint.js.map +1 -1
  39. package/dist/plugin/prompts.d.ts +0 -1
  40. package/dist/plugin/prompts.js +0 -4
  41. package/dist/plugin/prompts.js.map +1 -1
  42. package/dist/plugin/server.d.ts +2 -5
  43. package/dist/plugin/server.js +260 -136
  44. package/dist/plugin/server.js.map +1 -1
  45. package/dist/plugin/skills.d.ts +7 -1
  46. package/dist/plugin/skills.js +75 -12
  47. package/dist/plugin/skills.js.map +1 -1
  48. package/dist/plugin.d.ts +0 -1
  49. package/dist/plugin.js +1 -4
  50. package/dist/plugin.js.map +1 -1
  51. package/dist/util/gh.d.ts +3 -9
  52. package/dist/util/gh.js +9 -11
  53. package/dist/util/gh.js.map +1 -1
  54. package/dist/util/paths.d.ts +6 -14
  55. package/dist/util/paths.js +12 -67
  56. package/dist/util/paths.js.map +1 -1
  57. package/package.json +5 -5
  58. package/assets/prompts/ADR-FORMAT.md +0 -45
  59. package/assets/prompts/PRD-FORMAT.md +0 -17
  60. package/assets/templates/gitignore +0 -5
  61. package/dist/kernel/caller.d.ts +0 -48
  62. package/dist/kernel/caller.js +0 -88
  63. package/dist/kernel/caller.js.map +0 -1
  64. package/dist/kernel/flow.d.ts +0 -166
  65. package/dist/kernel/flow.js +0 -387
  66. package/dist/kernel/flow.js.map +0 -1
  67. package/dist/kernel/legacy.d.ts +0 -19
  68. package/dist/kernel/legacy.js +0 -34
  69. package/dist/kernel/legacy.js.map +0 -1
  70. package/dist/kernel/records.d.ts +0 -87
  71. package/dist/kernel/records.js +0 -197
  72. package/dist/kernel/records.js.map +0 -1
  73. package/dist/kernel/release.d.ts +0 -104
  74. package/dist/kernel/release.js +0 -229
  75. package/dist/kernel/release.js.map +0 -1
  76. package/dist/kernel/review.d.ts +0 -34
  77. package/dist/kernel/review.js +0 -81
  78. package/dist/kernel/review.js.map +0 -1
  79. package/dist/kernel/setup.d.ts +0 -70
  80. package/dist/kernel/setup.js +0 -324
  81. package/dist/kernel/setup.js.map +0 -1
  82. package/dist/kernel/slug.d.ts +0 -23
  83. package/dist/kernel/slug.js +0 -67
  84. package/dist/kernel/slug.js.map +0 -1
  85. package/dist/kernel/task.d.ts +0 -208
  86. package/dist/kernel/task.js +0 -788
  87. package/dist/kernel/task.js.map +0 -1
  88. package/dist/kernel/tdd/adapter.d.ts +0 -49
  89. package/dist/kernel/tdd/adapter.js +0 -293
  90. package/dist/kernel/tdd/adapter.js.map +0 -1
  91. package/dist/kernel/tdd/digest.d.ts +0 -17
  92. package/dist/kernel/tdd/digest.js +0 -301
  93. package/dist/kernel/tdd/digest.js.map +0 -1
  94. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  95. package/dist/kernel/tdd/evaluator.js +0 -185
  96. package/dist/kernel/tdd/evaluator.js.map +0 -1
  97. package/dist/kernel/tdd/evidence.d.ts +0 -42
  98. package/dist/kernel/tdd/evidence.js +0 -48
  99. package/dist/kernel/tdd/evidence.js.map +0 -1
  100. package/dist/kernel/tdd/state.d.ts +0 -79
  101. package/dist/kernel/tdd/state.js +0 -363
  102. package/dist/kernel/tdd/state.js.map +0 -1
  103. package/dist/kernel/types.d.ts +0 -180
  104. package/dist/kernel/types.js +0 -2
  105. package/dist/kernel/types.js.map +0 -1
  106. package/dist/kernel/worktree.d.ts +0 -45
  107. package/dist/kernel/worktree.js +0 -127
  108. package/dist/kernel/worktree.js.map +0 -1
  109. package/dist/plugin/flow-control.d.ts +0 -80
  110. package/dist/plugin/flow-control.js +0 -254
  111. package/dist/plugin/flow-control.js.map +0 -1
  112. package/dist/plugin/release-control.d.ts +0 -37
  113. package/dist/plugin/release-control.js +0 -304
  114. package/dist/plugin/release-control.js.map +0 -1
  115. package/dist/plugin/setup-control.d.ts +0 -45
  116. package/dist/plugin/setup-control.js +0 -80
  117. package/dist/plugin/setup-control.js.map +0 -1
  118. package/dist/plugin/task-control.d.ts +0 -90
  119. package/dist/plugin/task-control.js +0 -201
  120. package/dist/plugin/task-control.js.map +0 -1
  121. package/dist/plugin/tdd-checkpoint.d.ts +0 -118
  122. package/dist/plugin/tdd-checkpoint.js +0 -581
  123. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  124. package/dist/util/shell.d.ts +0 -1
  125. package/dist/util/shell.js +0 -4
  126. package/dist/util/shell.js.map +0 -1
@@ -1,22 +1,30 @@
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 { createGoalClient, createGoalTool, readGoal, mutateGoal, MAX_CONTINUATIONS, continuationPrompt, formatGoal, isBlockedReport, isDoneReport, snapshotTokenTotal, budgetReached } from "./goal.js";
10
+ import { readIndex, updateFlowSession, removeFlowSession } from "../kernel/session-index.js";
15
11
  import { getContextBlock, formatContextBlock, CONTEXT_MARKER } from "../kernel/context.js";
16
12
  import { readProjectProfile } from "../kernel/profile.js";
17
13
  const abortedSessions = new Set();
18
- const errorRetryCount = new Map();
14
+ const continuationInFlight = new Set();
19
15
  const COMPACTION_THRESHOLD = 20;
16
+ /** autoResume 跳过窗口:索引 30s 内更新过的 flow 不恢复(可能刚续接过,立即恢复会双发) */
17
+ const AUTO_RESUME_SKIP_WINDOW_MS = 30_000;
18
+ /** 从插件包根读取版本号(skills 安装目录按版本隔离) */
19
+ function readPluginVersion(packageRoot) {
20
+ try {
21
+ const pkg = JSON.parse(readFileSync(path.join(packageRoot, "package.json"), "utf8"));
22
+ return typeof pkg.version === "string" && pkg.version !== "" ? pkg.version : "0.0.0";
23
+ }
24
+ catch {
25
+ return "0.0.0";
26
+ }
27
+ }
20
28
  /**
21
29
  * 决定首条 user 消息注入内容:
22
30
  * - Primary(goal 激活)→ bootstrap + Project Context 块
@@ -43,94 +51,230 @@ export function configureGoalTools(config) {
43
51
  }
44
52
  }
45
53
  /**
46
- * config 层第二道门(spec §2.2):按 caller 矩阵把 5 个生命周期工具
47
- * 对每个 agent 置 true/false。agent 名 → 角色映射与 caller.ts ROLE_BY_AGENT 一致。
54
+ * 子会话活动闸:后台 subagent 运行时父会话保持 idle(结果稍后注入父会话)。
55
+ * 此时续接会压过子代理结果注入,必须跳过本次续接,等子代理结束后父会话的
56
+ * 下一次 busy→idle 循环再触发。查询失败视为 unknown → 保守跳过(不续接)。
48
57
  */
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 });
58
+ async function hasWorkingChildren(client, sessionID) {
59
+ try {
60
+ const childrenResult = await client.session.children({ sessionID });
61
+ const children = Array.isArray(childrenResult?.data) ? childrenResult.data : [];
62
+ if (children.length === 0)
63
+ return false;
64
+ const statusResult = await client.session.status();
65
+ const statuses = statusResult?.data;
66
+ if (!statuses || typeof statuses !== "object")
67
+ return true;
68
+ return children.some((child) => {
69
+ const status = child?.id ? statuses[child.id] : null;
70
+ return status?.type === "busy" || status?.type === "retry";
71
+ });
87
72
  }
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;
73
+ catch (error) {
74
+ // 查询失败 → 保守跳过(fail-closed);告警使长期故障可观测(否则续接会静默永久停止)
75
+ console.warn(`[cabbage] child-session check failed for ${sessionID}:`, error?.message ?? error);
76
+ return true;
95
77
  }
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" });
78
+ }
79
+ export async function queueContinuation(client, sessionID, projectDir) {
80
+ if (continuationInFlight.has(sessionID))
101
81
  return;
102
- }
103
- goal.continuationCount++;
104
- await writeGoal(client, sessionID, goal);
105
- if (projectDir)
106
- await updateFlowSession(projectDir, goal.parentIssueNumber, { continuationCount: goal.continuationCount });
82
+ continuationInFlight.add(sessionID);
107
83
  try {
108
- if (goal.continuationCount > 0 && goal.continuationCount % COMPACTION_THRESHOLD === 0) {
84
+ const decision = await mutateGoal(client, sessionID, async (goal) => {
85
+ // 读改写与 message.updated 同锁串行,杜绝续接计数/状态被并发覆盖
86
+ if (!goal || goal.status !== "active")
87
+ return { goal, value: null };
88
+ if (projectDir) {
89
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: goal.status, continuationCount: goal.continuationCount });
90
+ }
91
+ if (abortedSessions.has(sessionID)) {
92
+ abortedSessions.delete(sessionID);
93
+ goal.status = "paused";
94
+ if (projectDir)
95
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
96
+ return { goal, value: null };
97
+ }
98
+ if (goal.continuationCount >= MAX_CONTINUATIONS) {
99
+ goal.status = "paused";
100
+ if (projectDir)
101
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
102
+ return { goal, value: null };
103
+ }
104
+ // 子会话活动闸:后台 subagent 仍 busy/retry 时跳过续接(父会话 idle 不代表任务静默)
105
+ if (await hasWorkingChildren(client, sessionID)) {
106
+ return { goal, value: null };
107
+ }
108
+ // 尾部静默检查:idle 事件可能竞态了后续消息/未落盘的回复。
109
+ // 最后一条是 user 消息、或最后 assistant 未完成(无 completed 时间)→
110
+ // 会话正在或即将忙碌,等下一次 idle 事件重新触发;无 assistant 消息则无 provider/model 可续。
111
+ const messagesResult = await client.session.messages({ sessionID, limit: 40 });
112
+ const messages = Array.isArray(messagesResult?.data) ? messagesResult.data : null;
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(client, 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
- await client.session.promptAsync({
120
- sessionID,
121
- parts: [{ type: "text", text: contextText + continuationPrompt(goal.parentIssueNumber), synthetic: true }],
122
- });
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(client, 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
+ }
123
249
  }
124
250
  catch (err) {
125
251
  console.error("[cabbage] continuation failed:", err);
126
252
  }
253
+ finally {
254
+ continuationInFlight.delete(sessionID);
255
+ }
127
256
  }
128
- async function autoResume(client, projectDir) {
257
+ export async function autoResume(client, projectDir) {
129
258
  const index = await readIndex(projectDir);
130
259
  for (const [parentIssueNumber, entry] of Object.entries(index.flows)) {
131
260
  if (entry.status !== "active")
132
261
  continue;
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
+ }
133
270
  const { goal } = await readGoal(client, 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
+ }
134
278
  if (!goal || goal.status !== "active") {
135
279
  await updateFlowSession(projectDir, Number(parentIssueNumber), { status: "paused" });
136
280
  continue;
@@ -143,6 +287,7 @@ async function autoResume(client, projectDir) {
143
287
  text: `[auto-resume] Plugin restarted. Resuming previous goal:\n\n${formatGoal(goal)}\n\nContinue working.`,
144
288
  synthetic: true,
145
289
  }],
290
+ ...(goal.sessionProfile ? { agent: goal.sessionProfile.agent, model: goal.sessionProfile.model } : {}),
146
291
  });
147
292
  }
148
293
  catch (err) {
@@ -150,19 +295,6 @@ async function autoResume(client, projectDir) {
150
295
  }
151
296
  }
152
297
  }
153
- function getRetryKey(sessionID, phase) {
154
- return `${sessionID}:${phase}`;
155
- }
156
- function shouldEscalate(sessionID, phase) {
157
- const key = getRetryKey(sessionID, phase);
158
- const count = errorRetryCount.get(key) ?? 0;
159
- errorRetryCount.set(key, count + 1);
160
- if (count < 3)
161
- return "retry";
162
- if (count < 5)
163
- return "skip";
164
- return "pause";
165
- }
166
298
  const ABORTED_SESSION_CLEANUP_INTERVAL = 1000 * 60 * 30;
167
299
  let abortedCleanupTimer = null;
168
300
  function startPeriodicCleanup() {
@@ -170,7 +302,6 @@ function startPeriodicCleanup() {
170
302
  clearInterval(abortedCleanupTimer);
171
303
  abortedCleanupTimer = setInterval(() => {
172
304
  abortedSessions.clear();
173
- errorRetryCount.clear();
174
305
  }, ABORTED_SESSION_CLEANUP_INTERVAL);
175
306
  }
176
307
  export function createOpencodeCabbage(packageRoot) {
@@ -178,30 +309,21 @@ export function createOpencodeCabbage(packageRoot) {
178
309
  const sourceSkillsDir = path.join(packageRoot, "assets", "skills");
179
310
  const promptsDir = path.join(packageRoot, "assets", "prompts");
180
311
  const commandsDir = path.join(packageRoot, "assets", "commands");
181
- const skillsDir = await setupSkillsDir(sourceSkillsDir, promptsDir);
312
+ const skillsDir = await setupSkillsDir(sourceSkillsDir, promptsDir, readPluginVersion(packageRoot));
182
313
  const projectDir = ctx.worktree || ctx.directory;
183
314
  const v1Client = ctx.client._client;
184
315
  const goalClient = createGoalClient(ctx.serverUrl, v1Client);
185
- const goalTool = createGoalTool(goalClient);
186
- const sessionClient = goalClient;
187
- const flowControlTool = createFlowControlTool({ projectDir, sessionClient });
188
- const taskControlTool = createTaskControlTool({ projectDir, sessionClient });
189
- const setupControlTool = createSetupControlTool({ projectDir, sessionClient });
190
- const tddCheckpointTool = createTddCheckpointTool({ projectDir, sessionClient });
191
- const releaseControlTool = createReleaseControlTool({ projectDir, sessionClient });
316
+ const goalTool = createGoalTool(goalClient, projectDir);
192
317
  const agentsDir = path.join(packageRoot, "assets", "agents");
193
318
  await initPrompts(packageRoot, projectDir);
194
319
  await initBootstrap();
195
320
  startPeriodicCleanup();
196
- autoResume(goalClient, projectDir);
321
+ void autoResume(goalClient, projectDir).catch(err => {
322
+ console.error("[cabbage] auto-resume failed:", err);
323
+ });
197
324
  return {
198
325
  tool: {
199
326
  goal: goalTool,
200
- flow_control: flowControlTool,
201
- task_control: taskControlTool,
202
- setup_control: setupControlTool,
203
- tdd_checkpoint: tddCheckpointTool,
204
- release_control: releaseControlTool,
205
327
  },
206
328
  config: async (rawConfig) => {
207
329
  const config = rawConfig;
@@ -263,7 +385,6 @@ export function createOpencodeCabbage(packageRoot) {
263
385
  };
264
386
  }
265
387
  configureGoalTools(config);
266
- configureLifecycleTools(config);
267
388
  },
268
389
  "experimental.chat.messages.transform": async (_input, output) => {
269
390
  if (!output.messages.length)
@@ -293,54 +414,57 @@ export function createOpencodeCabbage(packageRoot) {
293
414
  const sessionID = evt.properties.sessionID;
294
415
  if (errorName === "MessageAbortedError" && sessionID) {
295
416
  abortedSessions.add(sessionID);
417
+ // abort 立即持久化 pause:不依赖内存标记。
418
+ // 否则 30 分钟清理窗口内无 idle 事件、或插件重启时标记丢失,
419
+ // 用户主动中断的 goal 会被下次 idle/autoResume 自动续接(继续烧 token)。
420
+ void mutateGoal(goalClient, sessionID, async (goal) => {
421
+ if (!goal || goal.status !== "active")
422
+ return { goal, value: undefined };
423
+ goal.status = "paused";
424
+ goal.statusReason = "aborted by user";
425
+ if (projectDir)
426
+ await updateFlowSession(projectDir, goal.parentIssueNumber, { status: "paused" });
427
+ return { goal, value: undefined };
428
+ }).catch((err) => {
429
+ console.warn("[cabbage] abort pause failed:", err?.message ?? err);
430
+ });
296
431
  }
297
432
  }
298
433
  if (evt.type === "session.status" && evt.properties?.status?.type === "idle") {
299
434
  const sessionID = evt.properties.sessionID;
300
435
  if (sessionID) {
301
- const result = await goalClient.session.get({ sessionID });
302
- if (result?.data?.parentID)
303
- return;
304
- void queueContinuation(goalClient, sessionID, projectDir);
305
- }
306
- }
307
- if (evt.type === "session.status" && evt.properties?.status?.type === "error") {
308
- const sessionID = evt.properties.sessionID;
309
- if (sessionID && !abortedSessions.has(sessionID)) {
310
- const phase = evt.properties?.phase ?? "unknown";
311
- const action = shouldEscalate(sessionID, phase);
312
- const { goal } = await readGoal(goalClient, sessionID);
313
- if (action === "retry" && goal) {
314
- await goalClient.session.promptAsync({
315
- sessionID,
316
- parts: [{
317
- type: "text",
318
- text: `[auto-retry] Previous attempt failed. Try a different approach.\n\n${formatGoal(goal)}`,
319
- synthetic: true,
320
- }],
321
- });
436
+ try {
437
+ const result = await goalClient.session.get({ sessionID });
438
+ if (result?.data?.parentID)
439
+ return;
322
440
  }
323
- else if (action === "skip" && goal) {
324
- await goalClient.session.promptAsync({
325
- sessionID,
326
- parts: [{
327
- type: "text",
328
- text: `[skip] Skipping failed step. Continue with remaining work.\n\n${formatGoal(goal)}`,
329
- synthetic: true,
330
- }],
331
- });
441
+ catch (err) {
442
+ console.error("[cabbage] session lookup failed:", err);
443
+ return;
332
444
  }
445
+ await queueContinuation(goalClient, sessionID, projectDir).catch(err => {
446
+ console.error("[cabbage] continuation failed:", err);
447
+ });
333
448
  }
334
449
  }
335
450
  if (evt.type === "message.updated" && evt.properties?.info?.role === "user") {
336
451
  const sessionID = evt.properties.sessionID;
337
- if (sessionID) {
452
+ if (sessionID && !continuationInFlight.has(sessionID)) {
338
453
  abortedSessions.delete(sessionID);
339
- const { goal, session } = await readGoal(goalClient, sessionID);
340
- if (goal) {
454
+ const info = evt.properties.info;
455
+ await mutateGoal(goalClient, sessionID, async (goal) => {
456
+ if (!goal)
457
+ return { goal, value: undefined };
341
458
  goal.continuationCount = 0;
342
- await writeGoal(goalClient, sessionID, goal, session ?? undefined);
343
- }
459
+ // 刷新用户最后使用的 agent/模型快照(用户在 TUI 切换 agent/模型后发消息)
460
+ if (info?.agent) {
461
+ goal.sessionProfile = {
462
+ agent: info.agent,
463
+ model: info.model?.providerID ? { providerID: info.model.providerID, modelID: info.model.modelID } : goal.sessionProfile?.model,
464
+ };
465
+ }
466
+ return { goal, value: undefined };
467
+ });
344
468
  }
345
469
  }
346
470
  if (evt.type === "session.updated") {
@@ -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>;