@devcxl/opencode-cabbage 1.3.0 → 2.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.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +35 -23
- package/README.zh.md +22 -15
- package/assets/agents/dev-lifecycle.md +6 -0
- package/assets/prompts/bootstrap.md +4 -0
- package/assets/skills/flow-change/SKILL.md +109 -0
- package/assets/skills/flow-design/SKILL.md +15 -0
- package/assets/skills/flow-docs/SKILL.md +112 -0
- package/assets/skills/flow-incident/SKILL.md +98 -0
- package/assets/skills/flow-research/SKILL.md +9 -0
- package/assets/skills/flow-setup/SKILL.md +13 -0
- package/codex-skills/agent-dev-lifecycle/SKILL.md +2 -0
- package/codex-skills/flow-change/SKILL.md +109 -0
- package/codex-skills/flow-design/SKILL.md +18 -3
- package/codex-skills/flow-docs/SKILL.md +112 -0
- package/codex-skills/flow-incident/SKILL.md +98 -0
- package/codex-skills/flow-research/SKILL.md +12 -3
- package/codex-skills/flow-setup/SKILL.md +13 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/plugin/agents.d.ts +20 -0
- package/dist/plugin/agents.js +79 -0
- package/dist/plugin/agents.js.map +1 -1
- package/dist/plugin/cabbage-cli.d.ts +28 -0
- package/dist/plugin/cabbage-cli.js +92 -0
- package/dist/plugin/cabbage-cli.js.map +1 -0
- package/dist/plugin/cabbage-tool.d.ts +103 -0
- package/dist/plugin/cabbage-tool.js +169 -0
- package/dist/plugin/cabbage-tool.js.map +1 -0
- package/dist/plugin/commands.d.ts +10 -0
- package/dist/plugin/commands.js +1 -1
- package/dist/plugin/commands.js.map +1 -1
- package/dist/plugin/continuation.d.ts +22 -0
- package/dist/plugin/continuation.js +233 -0
- package/dist/plugin/continuation.js.map +1 -0
- package/dist/plugin/goal-store.d.ts +42 -49
- package/dist/plugin/goal-store.js +35 -32
- package/dist/plugin/goal-store.js.map +1 -1
- package/dist/plugin/goal.d.ts +92 -28
- package/dist/plugin/goal.js +201 -158
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/install-dir.d.ts +13 -0
- package/dist/plugin/install-dir.js +46 -0
- package/dist/plugin/install-dir.js.map +1 -0
- package/dist/plugin/server.d.ts +4 -13
- package/dist/plugin/server.js +278 -423
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/session-abort.d.ts +5 -0
- package/dist/plugin/session-abort.js +26 -0
- package/dist/plugin/session-abort.js.map +1 -0
- package/dist/plugin/skills.d.ts +15 -0
- package/dist/plugin/skills.js +47 -50
- package/dist/plugin/skills.js.map +1 -1
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.js +6 -2
- package/dist/plugin.js.map +1 -1
- package/dist/util/paths.d.ts +0 -6
- package/dist/util/paths.js +0 -15
- package/dist/util/paths.js.map +1 -1
- package/package.json +4 -7
- package/vendor/cabbage/MANIFEST.json +8 -0
- package/vendor/cabbage/cabbage_cli/__init__.py +1 -0
- package/vendor/cabbage/cabbage_cli/__main__.py +2 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/.vitepress/config.ts +78 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/README.md +31 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/package.json +16 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/pnpm-lock.yaml +2504 -0
- package/vendor/cabbage/cabbage_cli/assets/integrations/cabbage.yml +127 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/adr.md +47 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/api-design.md +45 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/change-record.md +21 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/database-design.md +37 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/generic.md +20 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/impact.md +41 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/incident.md +48 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/postmortem.md +43 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/prd.md +71 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/release-plan.md +45 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/rfc.md +44 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/security-review.md +35 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/tasks.md +62 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/tech-spec.md +87 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/test-plan.md +44 -0
- package/vendor/cabbage/cabbage_cli/assets/workflows/change.yaml +11 -0
- package/vendor/cabbage/cabbage_cli/assets/workflows/incident.yaml +4 -0
- package/vendor/cabbage/cabbage_cli/cli.py +283 -0
- package/vendor/cabbage/cabbage_cli/core.py +606 -0
- package/vendor/cabbage/cabbage_cli/scaffold.py +313 -0
package/dist/plugin/goal.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { tool } from "@opencode-ai/plugin/tool";
|
|
2
1
|
import { bindSession, updateFlowSession, removeFlowSession } from "../kernel/session-index.js";
|
|
3
2
|
import { KeyedMutex } from "../kernel/mutex.js";
|
|
4
|
-
import {
|
|
3
|
+
import { clearAborted } from "./session-abort.js";
|
|
5
4
|
/** goal 会话级串行锁:所有读改写统一经 mutateGoal 走该锁,防并发丢失更新 */
|
|
6
5
|
const goalMutex = new KeyedMutex();
|
|
7
6
|
export function createGoal(parentIssueNumber, sessionProfile, tokenBudget) {
|
|
@@ -36,11 +35,20 @@ export function formatGoal(goal) {
|
|
|
36
35
|
`Objective/acceptance: read from Flow Record (Parent Issue #${goal.parentIssueNumber})`,
|
|
37
36
|
].filter(Boolean).join("\n");
|
|
38
37
|
}
|
|
38
|
+
/** 把存储的 profile.model(V1/V2 两种形状)归一为 V2 的 ModelRef;无法识别时返回 null */
|
|
39
|
+
export function normalizeProfileModel(model) {
|
|
40
|
+
if (!model?.providerID)
|
|
41
|
+
return null;
|
|
42
|
+
const id = model.id ?? model.modelID;
|
|
43
|
+
if (!id)
|
|
44
|
+
return null;
|
|
45
|
+
return { providerID: model.providerID, id, ...(model.variant ? { variant: model.variant } : {}) };
|
|
46
|
+
}
|
|
39
47
|
export const MAX_CONTINUATIONS = 50;
|
|
40
48
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
49
|
+
* token 快照 = input + reasoning + cache.read + output。
|
|
50
|
+
* OpenCode 每轮的 cache.read 已含此前所有轮次付费 token,
|
|
51
|
+
* 最新快照即整段成本,无需跨消息求和。reasoning 也计费,护栏方向偏严。
|
|
44
52
|
*/
|
|
45
53
|
export function snapshotTokenTotal(tokens) {
|
|
46
54
|
if (!tokens || typeof tokens !== "object")
|
|
@@ -112,11 +120,33 @@ export async function mutateGoal(store, sessionID, fn) {
|
|
|
112
120
|
return value;
|
|
113
121
|
});
|
|
114
122
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
/**
|
|
124
|
+
* goal 工具的允许名单(与权限规则层一致)。
|
|
125
|
+
* 规则层通过 agent permissions 隐藏/放行工具;此处的检查是工具级兜底,
|
|
126
|
+
* 覆盖规则层未覆盖的 agent(例如后续新注册的 agent)。
|
|
127
|
+
*/
|
|
128
|
+
export const GOAL_ALLOWED_AGENTS = new Set(["dev-lifecycle", "goal-verify"]);
|
|
129
|
+
export const GOAL_TOOL_INPUT_SCHEMA = {
|
|
130
|
+
type: "object",
|
|
131
|
+
properties: {
|
|
132
|
+
op: {
|
|
133
|
+
type: "string",
|
|
134
|
+
enum: ["create", "get", "complete", "resume", "cancel", "pause", "edit"],
|
|
135
|
+
description: "Goal operation",
|
|
136
|
+
},
|
|
137
|
+
parent_issue_number: {
|
|
138
|
+
type: "number",
|
|
139
|
+
description: "Parent GitHub Issue number of the Flow Record (required for create; editable via edit)",
|
|
140
|
+
},
|
|
141
|
+
token_budget: {
|
|
142
|
+
type: "number",
|
|
143
|
+
description: "Optional token budget guardrail; goal auto-pauses when tokensUsed reaches it. Pass 0 via edit to remove the budget",
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
required: ["op"],
|
|
147
|
+
additionalProperties: false,
|
|
148
|
+
};
|
|
149
|
+
export const GOAL_TOOL_DESCRIPTION = `Manage the active goal-mode objective (minimal: parentIssueNumber/status/continuationCount).
|
|
120
150
|
|
|
121
151
|
Use a single op field:
|
|
122
152
|
- create: starts a goal bound to a Flow Record. Requires parent_issue_number.
|
|
@@ -124,186 +154,199 @@ Use a single op field:
|
|
|
124
154
|
- resume: re-activates a paused goal.
|
|
125
155
|
- cancel: discards the current goal.
|
|
126
156
|
- pause: pauses the active goal.
|
|
127
|
-
- complete: marks the goal as completed. Follow the returned instructions
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
157
|
+
- complete: marks the goal as completed. Follow the returned instructions.`;
|
|
158
|
+
/**
|
|
159
|
+
* 构建 goal 工具描述符:{name, description, input(JSON Schema), options, execute}。
|
|
160
|
+
* execute 返回 {content}(V2 Tool.Result 形状);授权在工具内自检(见 GOAL_ALLOWED_AGENTS)。
|
|
161
|
+
*/
|
|
162
|
+
export function buildGoalTool(store, projectDir) {
|
|
163
|
+
return {
|
|
164
|
+
name: "goal",
|
|
165
|
+
description: GOAL_TOOL_DESCRIPTION,
|
|
166
|
+
input: GOAL_TOOL_INPUT_SCHEMA,
|
|
167
|
+
options: { permission: "goal" },
|
|
168
|
+
async execute(args, context) {
|
|
169
|
+
if (!context.agent || !GOAL_ALLOWED_AGENTS.has(context.agent)) {
|
|
170
|
+
return {
|
|
171
|
+
content: `Error: the goal tool is restricted to the cabbage flow agents (dev-lifecycle, goal-verify). Agent "${context.agent ?? "unknown"}" is not authorized.`,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const sessionID = context.sessionID;
|
|
135
175
|
// 只读判断:当前会话是否为子 agent、目标会话(父会话)ID
|
|
136
176
|
const { session } = await store.read(sessionID);
|
|
137
177
|
const isSubAgent = !!session?.parentID;
|
|
138
178
|
const targetSessionID = session?.parentID ?? sessionID;
|
|
139
179
|
if (isSubAgent && ["create", "pause", "resume", "cancel", "edit"].includes(args.op)) {
|
|
140
|
-
return `Error: sub-agents cannot call goal({op:"${args.op}"}). Goal lifecycle operations are restricted to the main session
|
|
180
|
+
return { content: `Error: sub-agents cannot call goal({op:"${args.op}"}). Goal lifecycle operations are restricted to the main session.` };
|
|
141
181
|
}
|
|
142
182
|
if (isSubAgent && args.op === "complete") {
|
|
143
|
-
const agentName =
|
|
183
|
+
const agentName = context.agent;
|
|
144
184
|
if (agentName !== "goal-verify") {
|
|
145
|
-
return `Error: only the goal-verify agent can complete the goal. Agent "${agentName}" is not authorized
|
|
185
|
+
return { content: `Error: only the goal-verify agent can complete the goal. Agent "${agentName}" is not authorized.` };
|
|
146
186
|
}
|
|
147
|
-
return mutateGoal(store, targetSessionID, async (goal) => {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
goal.status = "complete";
|
|
154
|
-
// flow 级持久化:complete-flow 可跨会话识别验证完成(不依赖 index 会话一致性)
|
|
155
|
-
try {
|
|
156
|
-
await updateFlowSession(sessionProjectDir(ctx.directory), goal.parentIssueNumber, { goalComplete: true });
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
// 索引写入失败不阻塞 goal 完成(goal 本身已持久化)
|
|
160
|
-
}
|
|
161
|
-
return { goal, value: `Goal completed and verified: Flow #${goal.parentIssueNumber}` };
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
switch (args.op) {
|
|
165
|
-
case "create":
|
|
166
|
-
return mutateGoal(store, sessionID, async (goal) => {
|
|
167
|
-
if (goal?.status === "active") {
|
|
168
|
-
// 必须返回原 goal(不能返回 null):mutateGoal 在 next===null 且 current 非 null
|
|
169
|
-
// 时会删除现有 goal,错误分支返回 null 等于把活动 goal 取消了
|
|
170
|
-
return { goal, value: `Error: an active goal already exists for Flow #${goal.parentIssueNumber}` };
|
|
171
|
-
}
|
|
172
|
-
const parentIssue = Number(args.parent_issue_number);
|
|
173
|
-
if (!Number.isInteger(parentIssue) || parentIssue <= 0) {
|
|
174
|
-
const got = args.parent_issue_number === undefined ? "" : ` (got: ${args.parent_issue_number})`;
|
|
175
|
-
return { goal, value: `Error: parent_issue_number is required (positive integer)${got}` };
|
|
176
|
-
}
|
|
177
|
-
// 快照创建时的 agent(模型由 message.updated 用户消息事件补充)
|
|
178
|
-
const created = createGoal(parentIssue, { agent: ctx.agent }, typeof args.token_budget === "number" && Number.isFinite(args.token_budget) && args.token_budget > 0
|
|
179
|
-
? Math.floor(args.token_budget)
|
|
180
|
-
: undefined);
|
|
181
|
-
// 记账基线:create 时点的最新完成 assistant 轮快照(快照法排除 goal 前历史消耗)。
|
|
182
|
-
// 拉取失败/无历史 → baseline 0(护栏方向保守:把可见历史计入)。
|
|
183
|
-
try {
|
|
184
|
-
const messages = await store.messages(sessionID, 40);
|
|
185
|
-
let baseline = 0;
|
|
186
|
-
for (const message of messages ?? []) {
|
|
187
|
-
const info = message?.info;
|
|
188
|
-
if (info?.role !== "assistant")
|
|
189
|
-
continue;
|
|
190
|
-
if (!(info.time?.completed && info.time.completed > 0) || info.time.completed > created.createdAt)
|
|
191
|
-
continue;
|
|
192
|
-
baseline = Math.max(baseline, snapshotTokenTotal(info.tokens));
|
|
193
|
-
}
|
|
194
|
-
created.tokensBaseline = baseline;
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
created.tokensBaseline = 0;
|
|
187
|
+
return { content: await mutateGoal(store, targetSessionID, async (goal) => {
|
|
188
|
+
if (!goal)
|
|
189
|
+
return { goal, value: "No goal to complete in the parent session." };
|
|
190
|
+
if (goal.status !== "active") {
|
|
191
|
+
return { goal, value: `Parent session goal is not active (status: ${goal.status}).` };
|
|
198
192
|
}
|
|
199
|
-
|
|
193
|
+
goal.status = "complete";
|
|
194
|
+
// flow 级持久化:complete-flow 可跨会话识别验证完成(不依赖 index 会话一致性)
|
|
200
195
|
try {
|
|
201
|
-
await
|
|
196
|
+
await updateFlowSession(projectDir, goal.parentIssueNumber, { goalComplete: true, status: "completed" });
|
|
202
197
|
}
|
|
203
198
|
catch {
|
|
204
|
-
// 索引写入失败不阻塞 goal
|
|
199
|
+
// 索引写入失败不阻塞 goal 完成(goal 本身已持久化)
|
|
205
200
|
}
|
|
206
|
-
return { goal
|
|
207
|
-
});
|
|
201
|
+
return { goal, value: `Goal completed and verified: Flow #${goal.parentIssueNumber}` };
|
|
202
|
+
}) };
|
|
203
|
+
}
|
|
204
|
+
switch (args.op) {
|
|
205
|
+
case "create":
|
|
206
|
+
return { content: await mutateGoal(store, sessionID, async (goal) => {
|
|
207
|
+
if (goal?.status === "active") {
|
|
208
|
+
// 必须返回原 goal(不能返回 null):mutateGoal 在 next===null 且 current 非 null
|
|
209
|
+
// 时会删除现有 goal,错误分支返回 null 等于把活动 goal 取消了
|
|
210
|
+
return { goal, value: `Error: an active goal already exists for Flow #${goal.parentIssueNumber}` };
|
|
211
|
+
}
|
|
212
|
+
const parentIssue = Number(args.parent_issue_number);
|
|
213
|
+
if (!Number.isInteger(parentIssue) || parentIssue <= 0) {
|
|
214
|
+
const got = args.parent_issue_number === undefined ? "" : ` (got: ${args.parent_issue_number})`;
|
|
215
|
+
return { goal, value: `Error: parent_issue_number is required (positive integer)${got}` };
|
|
216
|
+
}
|
|
217
|
+
// 快照创建时的 agent/模型(模型来自会话当前选择;此后由 selection 事件刷新)
|
|
218
|
+
const sessionModel = session?.model;
|
|
219
|
+
const createdProfile = {
|
|
220
|
+
agent: context.agent,
|
|
221
|
+
...(sessionModel && sessionModel.providerID && sessionModel.id
|
|
222
|
+
? { model: { providerID: sessionModel.providerID, id: sessionModel.id, ...(sessionModel.variant ? { variant: sessionModel.variant } : {}) } }
|
|
223
|
+
: {}),
|
|
224
|
+
};
|
|
225
|
+
const created = createGoal(parentIssue, createdProfile, typeof args.token_budget === "number" && Number.isFinite(args.token_budget) && args.token_budget > 0
|
|
226
|
+
? Math.floor(args.token_budget)
|
|
227
|
+
: undefined);
|
|
228
|
+
// 记账基线:create 时点的会话累计 token 快照(后续 used = 当前累计 − baseline)。
|
|
229
|
+
// 拉取失败 → baseline 0(护栏方向保守:把全部可见消耗计入)。
|
|
230
|
+
try {
|
|
231
|
+
created.tokensBaseline = snapshotTokenTotal(await store.sessionTokens(sessionID));
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
created.tokensBaseline = 0;
|
|
235
|
+
}
|
|
236
|
+
// flow 级绑定:供插件重启后的 autoResume 恢复 active goal
|
|
237
|
+
try {
|
|
238
|
+
await bindSession(projectDir, created.parentIssueNumber, sessionID);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// 索引写入失败不阻塞 goal 创建(goal 本身已持久化在 session metadata)
|
|
242
|
+
}
|
|
243
|
+
return { goal: created, value: `Goal created: Flow #${created.parentIssueNumber}\nStatus: active` };
|
|
244
|
+
}) };
|
|
208
245
|
case "get": {
|
|
209
246
|
const { goal } = await store.read(targetSessionID);
|
|
210
|
-
return goal ? formatGoal(goal) : "No active goal.";
|
|
247
|
+
return { content: goal ? formatGoal(goal) : "No active goal." };
|
|
211
248
|
}
|
|
212
249
|
case "complete": {
|
|
213
250
|
const { goal } = await store.read(sessionID);
|
|
214
251
|
if (!goal)
|
|
215
|
-
return "No active goal.";
|
|
252
|
+
return { content: "No active goal." };
|
|
216
253
|
if (goal.status !== "active")
|
|
217
|
-
return `Goal is not active (status: ${goal.status})
|
|
218
|
-
return `BLOCKED: Call the goal-verify sub-agent via the Task tool. Only the sub-agent can complete verification
|
|
254
|
+
return { content: `Goal is not active (status: ${goal.status}).` };
|
|
255
|
+
return { content: `BLOCKED: Call the goal-verify sub-agent via the Task tool. Only the sub-agent can complete verification.` };
|
|
219
256
|
}
|
|
220
257
|
case "resume":
|
|
221
|
-
return mutateGoal(store, sessionID, async (goal) => {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
258
|
+
return { content: await mutateGoal(store, sessionID, async (goal) => {
|
|
259
|
+
if (!goal)
|
|
260
|
+
return { goal, value: "No goal to resume." };
|
|
261
|
+
if (!canTransitionTo(goal, "active"))
|
|
262
|
+
return { goal, value: `Goal cannot be resumed (status: ${goal.status}).` };
|
|
263
|
+
// 用户显式恢复:清除用户中断标记,避免恢复后被残留标记立即再次暂停
|
|
264
|
+
clearAborted(sessionID);
|
|
265
|
+
goal.status = "active";
|
|
266
|
+
goal.continuationCount = 0;
|
|
267
|
+
// kickoff 信号:resume 后首次 tick 豁免 [BLOCKED:] 检测,防止被旧报告立即再次暂停
|
|
268
|
+
goal.statusReason = "resumed";
|
|
269
|
+
return { goal, value: `Goal resumed: Flow #${goal.parentIssueNumber}\nStatus: active` };
|
|
270
|
+
}) };
|
|
232
271
|
case "pause":
|
|
233
|
-
return mutateGoal(store, sessionID, async (goal) => {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
272
|
+
return { content: await mutateGoal(store, sessionID, async (goal) => {
|
|
273
|
+
if (!goal)
|
|
274
|
+
return { goal, value: "No goal to pause." };
|
|
275
|
+
if (!canTransitionTo(goal, "paused"))
|
|
276
|
+
return { goal, value: `Goal cannot be paused (status: ${goal.status}).` };
|
|
277
|
+
goal.status = "paused";
|
|
278
|
+
return { goal, value: `Goal paused: Flow #${goal.parentIssueNumber}\nStatus: paused` };
|
|
279
|
+
}) };
|
|
241
280
|
case "cancel":
|
|
242
|
-
return mutateGoal(store, sessionID, async (goal) => {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
try {
|
|
247
|
-
await removeFlowSession(sessionProjectDir(ctx.directory), goal.parentIssueNumber);
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
// 索引清理失败不阻塞取消(goal 本身已移除)
|
|
251
|
-
}
|
|
252
|
-
return { goal: null, value: `Goal cancelled: Flow #${goal.parentIssueNumber}` };
|
|
253
|
-
});
|
|
254
|
-
case "edit":
|
|
255
|
-
return mutateGoal(store, sessionID, async (goal) => {
|
|
256
|
-
if (!goal)
|
|
257
|
-
return { goal, value: "No goal to edit." };
|
|
258
|
-
if (goal.status === "complete") {
|
|
259
|
-
return { goal, value: "Error: completed goals are read-only. Remove the goal and create a new one." };
|
|
260
|
-
}
|
|
261
|
-
const budgetGiven = typeof args.token_budget === "number"
|
|
262
|
-
&& Number.isFinite(args.token_budget)
|
|
263
|
-
&& args.token_budget > 0;
|
|
264
|
-
const budgetRemoved = args.token_budget === 0;
|
|
265
|
-
const nextParent = typeof args.parent_issue_number === "number"
|
|
266
|
-
&& Number.isFinite(args.parent_issue_number)
|
|
267
|
-
&& args.parent_issue_number > 0
|
|
268
|
-
? Math.floor(args.parent_issue_number)
|
|
269
|
-
: null;
|
|
270
|
-
if (!budgetGiven && !budgetRemoved && nextParent === null) {
|
|
271
|
-
return { goal, value: "Error: nothing to edit — pass parent_issue_number and/or token_budget" };
|
|
272
|
-
}
|
|
273
|
-
if (budgetGiven)
|
|
274
|
-
goal.tokenBudget = Math.floor(args.token_budget);
|
|
275
|
-
if (budgetRemoved)
|
|
276
|
-
delete goal.tokenBudget;
|
|
277
|
-
if (nextParent !== null && nextParent !== goal.parentIssueNumber) {
|
|
278
|
-
const oldParent = goal.parentIssueNumber;
|
|
279
|
-
goal.parentIssueNumber = nextParent;
|
|
280
|
-
// 换 Flow:旧目标的记账/基线/创建时刻全部重置(新目标从 edit 时点起算)。
|
|
281
|
-
// createdAt 必须更新——否则下一 tick 用旧 createdAt 重新初始化 baseline 时,
|
|
282
|
-
// 会把旧 Flow 期间的消息(completed > 旧 createdAt)计入新 Flow 预算。
|
|
283
|
-
goal.tokensUsed = 0;
|
|
284
|
-
delete goal.tokensBaseline;
|
|
285
|
-
goal.createdAt = Date.now();
|
|
281
|
+
return { content: await mutateGoal(store, sessionID, async (goal) => {
|
|
282
|
+
if (!goal)
|
|
283
|
+
return { goal, value: "No goal to cancel." };
|
|
284
|
+
// 同步清除 session-index entry,避免重启 autoResume 恢复已取消 goal
|
|
286
285
|
try {
|
|
287
|
-
await
|
|
286
|
+
await removeFlowSession(projectDir, goal.parentIssueNumber);
|
|
288
287
|
}
|
|
289
|
-
catch
|
|
290
|
-
//
|
|
291
|
-
console.warn(`[cabbage] goal edit: bindSession #${goal.parentIssueNumber} failed:`, error?.message ?? error);
|
|
288
|
+
catch {
|
|
289
|
+
// 索引清理失败不阻塞取消(goal 本身已移除)
|
|
292
290
|
}
|
|
293
|
-
|
|
294
|
-
|
|
291
|
+
return { goal: null, value: `Goal cancelled: Flow #${goal.parentIssueNumber}` };
|
|
292
|
+
}) };
|
|
293
|
+
case "edit":
|
|
294
|
+
return { content: await mutateGoal(store, sessionID, async (goal) => {
|
|
295
|
+
if (!goal)
|
|
296
|
+
return { goal, value: "No goal to edit." };
|
|
297
|
+
if (goal.status === "complete") {
|
|
298
|
+
return { goal, value: "Error: completed goals are read-only. Remove the goal and create a new one." };
|
|
295
299
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
300
|
+
const budgetGiven = typeof args.token_budget === "number"
|
|
301
|
+
&& Number.isFinite(args.token_budget)
|
|
302
|
+
&& args.token_budget > 0;
|
|
303
|
+
const budgetRemoved = args.token_budget === 0;
|
|
304
|
+
const nextParent = typeof args.parent_issue_number === "number"
|
|
305
|
+
&& Number.isFinite(args.parent_issue_number)
|
|
306
|
+
&& args.parent_issue_number > 0
|
|
307
|
+
? Math.floor(args.parent_issue_number)
|
|
308
|
+
: null;
|
|
309
|
+
if (!budgetGiven && !budgetRemoved && nextParent === null) {
|
|
310
|
+
return { goal, value: "Error: nothing to edit — pass parent_issue_number and/or token_budget" };
|
|
299
311
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
312
|
+
if (budgetGiven)
|
|
313
|
+
goal.tokenBudget = Math.floor(args.token_budget);
|
|
314
|
+
if (budgetRemoved)
|
|
315
|
+
delete goal.tokenBudget;
|
|
316
|
+
if (nextParent !== null && nextParent !== goal.parentIssueNumber) {
|
|
317
|
+
const oldParent = goal.parentIssueNumber;
|
|
318
|
+
goal.parentIssueNumber = nextParent;
|
|
319
|
+
// 换 Flow:旧目标的记账/基线/创建时刻全部重置(新目标从 edit 时点起算)。
|
|
320
|
+
goal.tokensUsed = 0;
|
|
321
|
+
delete goal.tokensBaseline;
|
|
322
|
+
goal.createdAt = Date.now();
|
|
323
|
+
try {
|
|
324
|
+
goal.tokensBaseline = snapshotTokenTotal(await store.sessionTokens(sessionID));
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
goal.tokensBaseline = 0;
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
await bindSession(projectDir, goal.parentIssueNumber, sessionID);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
// 新 Flow 索引绑定失败:新 entry 缺失,重启 autoResume 无法恢复新 goal
|
|
334
|
+
console.warn(`[cabbage] goal edit: bindSession #${goal.parentIssueNumber} failed:`, error?.message ?? error);
|
|
335
|
+
}
|
|
336
|
+
try {
|
|
337
|
+
await removeFlowSession(projectDir, oldParent);
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
// 旧 entry 清理失败:残留 active entry 会在重启时被 autoResume 一致性自愈清理
|
|
341
|
+
console.warn(`[cabbage] goal edit: removeFlowSession #${oldParent} failed:`, error?.message ?? error);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return { goal, value: `Goal updated: Flow #${goal.parentIssueNumber}\nStatus: ${goal.status}` };
|
|
345
|
+
}) };
|
|
303
346
|
default:
|
|
304
|
-
return `Error: unknown operation "${args.op}"
|
|
347
|
+
return { content: `Error: unknown operation "${args.op}"` };
|
|
305
348
|
}
|
|
306
349
|
},
|
|
307
|
-
}
|
|
350
|
+
};
|
|
308
351
|
}
|
|
309
352
|
//# sourceMappingURL=goal.js.map
|
package/dist/plugin/goal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/plugin/goal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/plugin/goal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,kDAAkD;AAClD,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE,CAAA;AA8BlC,MAAM,UAAU,UAAU,CACxB,iBAAyB,EACzB,cAAmC,EACnC,WAAoB;IAEpB,OAAO;QACL,iBAAiB;QACjB,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,CAAC;QACpB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,MAAkB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAA;QAC9C,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAA;QAC9C,KAAK,UAAU,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAA;QAChD,OAAO,CAAC,CAAC,OAAO,KAAK,CAAA;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QACrD,CAAC,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;QACvD,CAAC,CAAC,EAAE,CAAA;IACN,OAAO;QACL,UAAU,IAAI,CAAC,iBAAiB,EAAE;QAClC,WAAW,IAAI,CAAC,MAAM,EAAE;QACxB,kBAAkB,IAAI,CAAC,iBAAiB,EAAE;QAC1C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;QAChE,UAAU;QACV,8DAA8D,IAAI,CAAC,iBAAiB,GAAG;KACxF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,qBAAqB,CACnC,KAA2F;IAE3F,IAAI,CAAC,KAAK,EAAE,UAAU;QAAE,OAAO,IAAI,CAAA;IACnC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAA;IACpC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IACpB,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACnG,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAA;IACnD,MAAM,CAAC,GAAG,MAAgG,CAAA;IAC1G,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAChG,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpG,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAChH,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpH,OAAO,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;AAC/C,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAA;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAA;AAEtD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAA;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAA;AAEhD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,iBAAyB;IAC1D,OAAO;;sCAE6B,iBAAiB;;;GAGpD,iBAAiB;;;;;;;;;;;;;;;;;8BAiBU,CAAA;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAgB,EAChB,SAAiB,EACjB,EAAwG;IAExG,OAAO,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACrE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC;AAoBD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;YACxE,WAAW,EAAE,gBAAgB;SAC9B;QACD,mBAAmB,EAAE;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wFAAwF;SACtG;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oHAAoH;SAClI;KACF;IACD,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,oBAAoB,EAAE,KAAK;CACnB,CAAA;AAEV,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;2EAQsC,CAAA;AAE3E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB,EAAE,UAAkB;IAChE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,qBAAqB;QAClC,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;QAE/B,KAAK,CAAC,OAAO,CAAC,IAAmB,EAAE,OAAwB;YACzD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO;oBACL,OAAO,EAAE,sGAAsG,OAAO,CAAC,KAAK,IAAI,SAAS,sBAAsB;iBAChK,CAAA;YACH,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;YACnC,kCAAkC;YAClC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAA;YACtC,MAAM,eAAe,GAAG,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAA;YAEtD,IAAI,UAAU,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpF,OAAO,EAAE,OAAO,EAAE,2CAA2C,IAAI,CAAC,EAAE,oEAAoE,EAAE,CAAA;YAC5I,CAAC;YAED,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAA;gBAC/B,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;oBAChC,OAAO,EAAE,OAAO,EAAE,mEAAmE,SAAS,sBAAsB,EAAE,CAAA;gBACxH,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;wBACxE,IAAI,CAAC,IAAI;4BAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAA;wBAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;4BAC7B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,8CAA8C,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;wBACvF,CAAC;wBACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;wBACxB,sDAAsD;wBACtD,IAAI,CAAC;4BACH,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;wBAC1G,CAAC;wBAAC,MAAM,CAAC;4BACP,iCAAiC;wBACnC,CAAC;wBACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sCAAsC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAA;oBACxF,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;YAED,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;gBAChB,KAAK,QAAQ;oBACX,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BAClE,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gCAC9B,kEAAkE;gCAClE,yCAAyC;gCACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kDAAkD,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAA;4BACpG,CAAC;4BACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;4BACpD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gCACvD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,mBAAmB,GAAG,CAAA;gCAC/F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,4DAA4D,GAAG,EAAE,EAAE,CAAA;4BAC3F,CAAC;4BACD,iDAAiD;4BACjD,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,CAAA;4BACnC,MAAM,cAAc,GAAG;gCACrB,KAAK,EAAE,OAAO,CAAC,KAAM;gCACrB,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,EAAE;oCAC5D,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oCAC7I,CAAC,CAAC,EAAE,CAAC;6BACR,CAAA;4BACD,MAAM,OAAO,GAAG,UAAU,CACxB,WAAW,EACX,cAAc,EACd,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC;gCAClG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;gCAC/B,CAAC,CAAC,SAAS,CACd,CAAA;4BACD,2DAA2D;4BAC3D,uCAAuC;4BACvC,IAAI,CAAC;gCACH,OAAO,CAAC,cAAc,GAAG,kBAAkB,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;4BACnF,CAAC;4BAAC,MAAM,CAAC;gCACP,OAAO,CAAC,cAAc,GAAG,CAAC,CAAA;4BAC5B,CAAC;4BACD,6CAA6C;4BAC7C,IAAI,CAAC;gCACH,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;4BACrE,CAAC;4BAAC,MAAM,CAAC;gCACP,mDAAmD;4BACrD,CAAC;4BACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,OAAO,CAAC,iBAAiB,kBAAkB,EAAE,CAAA;wBACrG,CAAC,CAAC,EAAE,CAAA;gBAEN,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;oBAClD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAA;gBACjE,CAAC;gBAED,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBAC5C,IAAI,CAAC,IAAI;wBAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;oBAChD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;wBAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;oBAChG,OAAO,EAAE,OAAO,EAAE,0GAA0G,EAAE,CAAA;gBAChI,CAAC;gBAED,KAAK,QAAQ;oBACX,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BAClE,IAAI,CAAC,IAAI;gCAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;4BACvD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;gCAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,mCAAmC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;4BAChH,mCAAmC;4BACnC,YAAY,CAAC,SAAS,CAAC,CAAA;4BACvB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;4BACtB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;4BAC1B,2DAA2D;4BAC3D,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;4BAC7B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,IAAI,CAAC,iBAAiB,kBAAkB,EAAE,CAAA;wBACzF,CAAC,CAAC,EAAE,CAAA;gBAEN,KAAK,OAAO;oBACV,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BAClE,IAAI,CAAC,IAAI;gCAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;4BACtD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;gCAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kCAAkC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;4BAC/G,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;4BACtB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,IAAI,CAAC,iBAAiB,kBAAkB,EAAE,CAAA;wBACxF,CAAC,CAAC,EAAE,CAAA;gBAEN,KAAK,QAAQ;oBACX,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BAClE,IAAI,CAAC,IAAI;gCAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;4BACvD,sDAAsD;4BACtD,IAAI,CAAC;gCACH,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;4BAC7D,CAAC;4BAAC,MAAM,CAAC;gCACP,0BAA0B;4BAC5B,CAAC;4BACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAA;wBACjF,CAAC,CAAC,EAAE,CAAA;gBAEN,KAAK,MAAM;oBACT,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BAClE,IAAI,CAAC,IAAI;gCAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAA;4BACrD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gCAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,6EAA6E,EAAE,CAAA;4BACvG,CAAC;4BACD,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;mCACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;mCAClC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;4BAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,KAAK,CAAC,CAAA;4BAC7C,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ;mCAC1D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC;mCACzC,IAAI,CAAC,mBAAmB,GAAG,CAAC;gCAC/B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;gCACtC,CAAC,CAAC,IAAI,CAAA;4BACR,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gCAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,uEAAuE,EAAE,CAAA;4BACjG,CAAC;4BACD,IAAI,WAAW;gCAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAsB,CAAC,CAAA;4BAC3E,IAAI,aAAa;gCAAE,OAAO,IAAI,CAAC,WAAW,CAAA;4BAC1C,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;gCACjE,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAA;gCACxC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAA;gCACnC,6CAA6C;gCAC7C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;gCACnB,OAAO,IAAI,CAAC,cAAc,CAAA;gCAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gCAC3B,IAAI,CAAC;oCACH,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;gCAChF,CAAC;gCAAC,MAAM,CAAC;oCACP,IAAI,CAAC,cAAc,GAAG,CAAC,CAAA;gCACzB,CAAC;gCACD,IAAI,CAAC;oCACH,MAAM,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;gCAClE,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,oDAAoD;oCACpD,OAAO,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,iBAAiB,UAAU,EAAG,KAAsB,EAAE,OAAO,IAAI,KAAK,CAAC,CAAA;gCAChI,CAAC;gCACD,IAAI,CAAC;oCACH,MAAM,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;gCAChD,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,yDAAyD;oCACzD,OAAO,CAAC,IAAI,CAAC,2CAA2C,SAAS,UAAU,EAAG,KAAsB,EAAE,OAAO,IAAI,KAAK,CAAC,CAAA;gCACzH,CAAC;4BACH,CAAC;4BACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,IAAI,CAAC,iBAAiB,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,CAAA;wBACjG,CAAC,CAAC,EAAE,CAAA;gBAEN;oBACE,OAAO,EAAE,OAAO,EAAE,6BAA6B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;YAC/D,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 安装锁:mkdir 原子性互斥,防多实例并发 rm+cp 踩踏(超时放弃而非死等) */
|
|
2
|
+
export declare function acquireLock(lockPath: string, timeoutMs?: number): Promise<() => Promise<void>>;
|
|
3
|
+
export interface EnsureInstalledOptions {
|
|
4
|
+
sourceDir: string;
|
|
5
|
+
destDir: string;
|
|
6
|
+
/** 判定目标目录已完整可用(目录缺失/不完整时返回 false) */
|
|
7
|
+
isComplete: (destDir: string) => Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 版本化目录安装:完整则跳过;否则在锁内 rm+cp(锁内二次检查防重复重建)。
|
|
11
|
+
* 调用方可依赖返回后 destDir 完整可用。排除 __pycache__/*.pyc(Python 资产复用)。
|
|
12
|
+
*/
|
|
13
|
+
export declare function ensureInstalledDir({ sourceDir, destDir, isComplete }: EnsureInstalledOptions): Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { cp, mkdir, rm } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/** 安装锁:mkdir 原子性互斥,防多实例并发 rm+cp 踩踏(超时放弃而非死等) */
|
|
4
|
+
export async function acquireLock(lockPath, timeoutMs = 10_000) {
|
|
5
|
+
await mkdir(path.dirname(lockPath), { recursive: true });
|
|
6
|
+
const start = Date.now();
|
|
7
|
+
for (;;) {
|
|
8
|
+
try {
|
|
9
|
+
await mkdir(lockPath);
|
|
10
|
+
return async () => {
|
|
11
|
+
await rm(lockPath, { recursive: true, force: true }).catch(() => undefined);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
if (err.code !== "EEXIST")
|
|
16
|
+
throw err;
|
|
17
|
+
if (Date.now() - start > timeoutMs) {
|
|
18
|
+
throw new Error(`[cabbage] timed out waiting for install lock: ${lockPath}`);
|
|
19
|
+
}
|
|
20
|
+
await new Promise(r => setTimeout(r, 100));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 版本化目录安装:完整则跳过;否则在锁内 rm+cp(锁内二次检查防重复重建)。
|
|
26
|
+
* 调用方可依赖返回后 destDir 完整可用。排除 __pycache__/*.pyc(Python 资产复用)。
|
|
27
|
+
*/
|
|
28
|
+
export async function ensureInstalledDir({ sourceDir, destDir, isComplete }) {
|
|
29
|
+
if (await isComplete(destDir))
|
|
30
|
+
return;
|
|
31
|
+
const release = await acquireLock(`${destDir}.lock`);
|
|
32
|
+
try {
|
|
33
|
+
if (await isComplete(destDir))
|
|
34
|
+
return;
|
|
35
|
+
await rm(destDir, { recursive: true, force: true });
|
|
36
|
+
await mkdir(destDir, { recursive: true });
|
|
37
|
+
await cp(sourceDir, destDir, {
|
|
38
|
+
recursive: true,
|
|
39
|
+
filter: (src) => !src.split(path.sep).includes("__pycache__") && !src.endsWith(".pyc"),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await release();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=install-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-dir.js","sourceRoot":"","sources":["../../src/plugin/install-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,SAAS,GAAG,MAAM;IACpE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACxB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrB,OAAO,KAAK,IAAI,EAAE;gBAChB,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAC7E,CAAC,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAA;YAC/D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAA;YAC9E,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAA0B;IACjG,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC;QAAE,OAAM;IACrC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,OAAO,OAAO,CAAC,CAAA;IACpD,IAAI,CAAC;QACH,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC;YAAE,OAAM;QACrC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACzC,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE;YAC3B,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;SACvF,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAA;IACjB,CAAC;AACH,CAAC"}
|
package/dist/plugin/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Plugin } from "@opencode
|
|
2
|
-
import { type GoalStore } from "./goal-store.js";
|
|
1
|
+
import type { Plugin } from "@opencode/plugin";
|
|
3
2
|
import type { ContextBlock } from "../kernel/context.js";
|
|
3
|
+
type Context = Plugin.Context;
|
|
4
4
|
export interface FirstUserInjectionInput {
|
|
5
5
|
hasGoal: boolean;
|
|
6
6
|
isSubAgent: boolean;
|
|
@@ -8,20 +8,11 @@ export interface FirstUserInjectionInput {
|
|
|
8
8
|
bootstrap: string;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 决定系统上下文注入内容:
|
|
12
12
|
* - Primary(goal 激活)→ bootstrap + Project Context 块
|
|
13
13
|
* - 子 agent → 仅 Project Context 块
|
|
14
14
|
* - 其他 → 不注入
|
|
15
15
|
*/
|
|
16
16
|
export declare function buildFirstUserInjection(input: FirstUserInjectionInput): string | null;
|
|
17
|
-
|
|
18
|
-
tools?: Record<string, boolean>;
|
|
19
|
-
}
|
|
20
|
-
interface GoalToolConfig extends AgentToolConfig {
|
|
21
|
-
agent?: Record<string, unknown>;
|
|
22
|
-
}
|
|
23
|
-
export declare function configureGoalTools(config: GoalToolConfig): void;
|
|
24
|
-
export declare function queueContinuation(client: ReturnType<typeof import("@opencode-ai/sdk/v2").createOpencodeClient>, store: GoalStore, sessionID: string, projectDir?: string): Promise<void>;
|
|
25
|
-
export declare function autoResume(client: ReturnType<typeof import("@opencode-ai/sdk/v2").createOpencodeClient>, store: GoalStore, projectDir: string): Promise<void>;
|
|
26
|
-
export declare function createOpencodeCabbage(packageRoot: string): Plugin;
|
|
17
|
+
export declare function setupCabbage(ctx: Context, packageRoot: string): Promise<() => void>;
|
|
27
18
|
export {};
|