@mickorz/opencode-agentic-workflow 0.3.2 → 0.4.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/dist/plugin/checkpoint-override.d.ts +28 -0
- package/dist/plugin/checkpoint-override.js +49 -0
- package/dist/plugin/checkpoint-override.js.map +1 -0
- package/dist/plugin/index.js +25 -2
- package/dist/plugin/index.js.map +1 -1
- package/dist/quality/checkpoint.d.ts +4 -2
- package/dist/quality/checkpoint.js +5 -1
- package/dist/quality/checkpoint.js.map +1 -1
- package/dist/workspace/in-place.d.ts +26 -0
- package/dist/workspace/in-place.js +48 -0
- package/dist/workspace/in-place.js.map +1 -0
- package/dist/workspace/index.d.ts +1 -0
- package/dist/workspace/index.js +1 -0
- package/dist/workspace/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* checkpoint 覆盖(P3 Blocker 修复:守护进程单例投毒)
|
|
3
|
+
*
|
|
4
|
+
* 背景:插件在 init 时把 checkpoint gate 绑成 module 单例;OpenCode 的
|
|
5
|
+
* 长驻 server 进程可能附着旧插件实例,新项目的 opencode.json 配置
|
|
6
|
+
* (checkpoint.mode 等)被完全无视——实测 auto-approve 被静默替换成
|
|
7
|
+
* 交互门(5 分钟超时假失败)+ 观测数据写进别的项目。
|
|
8
|
+
*
|
|
9
|
+
* 修复策略:**运行时显式 > 环境隐式**。workflow 工具新增保留参数
|
|
10
|
+
* `checkpointMode`,调用时显式覆盖本次运行的审批门,结束恢复原绑定。
|
|
11
|
+
* 对守护进程宿主天然免疫(参数随调用走,不依赖 init 快照)。
|
|
12
|
+
*
|
|
13
|
+
* 范围收敛(v0.4.0):只支持策略门(auto-approve / auto-reject)——
|
|
14
|
+
* interactive 门需要 RPC 域 + bind() 注册,按调用创建会累积 RPC
|
|
15
|
+
* 注册且无 unbind 通道,保持「仅限插件配置」。
|
|
16
|
+
*
|
|
17
|
+
* 已知限制:全局 gate 仍是单例,两个并发调用携带不同覆盖值时存在
|
|
18
|
+
* 竞态(restore 交叠)。per-run gate 线程化是后续 L 范围工作;
|
|
19
|
+
* 单会话 `opencode run` / TUI 串行场景不受影响。
|
|
20
|
+
*/
|
|
21
|
+
/** 可作为调用级覆盖的审批模式(策略门子集) */
|
|
22
|
+
export type CheckpointModeOverride = "auto-approve" | "auto-reject";
|
|
23
|
+
export declare function parseCheckpointModeOverride(value: unknown): CheckpointModeOverride | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* 为**本次**调用绑定覆盖门;返回恢复函数(无覆盖时返回 undefined)。
|
|
26
|
+
* 必须在 finally 中调用恢复函数,防止覆盖泄漏到后续调用。
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyCheckpointModeOverride(mode: CheckpointModeOverride | undefined): (() => void) | undefined;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* checkpoint 覆盖(P3 Blocker 修复:守护进程单例投毒)
|
|
3
|
+
*
|
|
4
|
+
* 背景:插件在 init 时把 checkpoint gate 绑成 module 单例;OpenCode 的
|
|
5
|
+
* 长驻 server 进程可能附着旧插件实例,新项目的 opencode.json 配置
|
|
6
|
+
* (checkpoint.mode 等)被完全无视——实测 auto-approve 被静默替换成
|
|
7
|
+
* 交互门(5 分钟超时假失败)+ 观测数据写进别的项目。
|
|
8
|
+
*
|
|
9
|
+
* 修复策略:**运行时显式 > 环境隐式**。workflow 工具新增保留参数
|
|
10
|
+
* `checkpointMode`,调用时显式覆盖本次运行的审批门,结束恢复原绑定。
|
|
11
|
+
* 对守护进程宿主天然免疫(参数随调用走,不依赖 init 快照)。
|
|
12
|
+
*
|
|
13
|
+
* 范围收敛(v0.4.0):只支持策略门(auto-approve / auto-reject)——
|
|
14
|
+
* interactive 门需要 RPC 域 + bind() 注册,按调用创建会累积 RPC
|
|
15
|
+
* 注册且无 unbind 通道,保持「仅限插件配置」。
|
|
16
|
+
*
|
|
17
|
+
* 已知限制:全局 gate 仍是单例,两个并发调用携带不同覆盖值时存在
|
|
18
|
+
* 竞态(restore 交叠)。per-run gate 线程化是后续 L 范围工作;
|
|
19
|
+
* 单会话 `opencode run` / TUI 串行场景不受影响。
|
|
20
|
+
*/
|
|
21
|
+
import { getCheckpointGate, setCheckpointGate } from "../quality/checkpoint.js";
|
|
22
|
+
import { PolicyCheckpointGate } from "./policy-checkpoint-gate.js";
|
|
23
|
+
export function parseCheckpointModeOverride(value) {
|
|
24
|
+
if (value === undefined || value === null || value === "")
|
|
25
|
+
return undefined;
|
|
26
|
+
if (value === "auto-approve" || value === "auto-reject")
|
|
27
|
+
return value;
|
|
28
|
+
if (value === "interactive") {
|
|
29
|
+
console.log("[agentic-workflow] checkpointMode=interactive is not available as an " +
|
|
30
|
+
"invocation override (requires TUI plugin config); ignoring");
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
console.log(`[agentic-workflow] invalid checkpointMode override ignored: ${String(value)}`);
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 为**本次**调用绑定覆盖门;返回恢复函数(无覆盖时返回 undefined)。
|
|
38
|
+
* 必须在 finally 中调用恢复函数,防止覆盖泄漏到后续调用。
|
|
39
|
+
*/
|
|
40
|
+
export function applyCheckpointModeOverride(mode) {
|
|
41
|
+
if (!mode)
|
|
42
|
+
return undefined;
|
|
43
|
+
const previous = getCheckpointGate();
|
|
44
|
+
setCheckpointGate(new PolicyCheckpointGate(mode));
|
|
45
|
+
console.log(`[agentic-workflow] checkpoint gate override for this invocation: ${mode} ` +
|
|
46
|
+
"(explicit per-call control; init-time config may differ)");
|
|
47
|
+
return () => setCheckpointGate(previous);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=checkpoint-override.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-override.js","sourceRoot":"","sources":["../../src/plugin/checkpoint-override.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKlE,MAAM,UAAU,2BAA2B,CACzC,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IAC3E,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,KAAK,CAAA;IACrE,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,uEAAuE;YACrE,4DAA4D,CAC/D,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CACT,+DAA+D,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/E,CAAA;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAwC;IAExC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,iBAAiB,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CACT,oEAAoE,IAAI,GAAG;QACzE,0DAA0D,CAC7D,CAAA;IACD,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAC1C,CAAC"}
|
package/dist/plugin/index.js
CHANGED
|
@@ -34,8 +34,9 @@ import { reliableWorkflow } from "../workflows/reliable.js";
|
|
|
34
34
|
import { smokeWorkflow } from "../workflows/smoke.js";
|
|
35
35
|
import { artifactWorkflow } from "../workflows/artifact.js";
|
|
36
36
|
import { featureDevelopmentWorkflow } from "../workflows/feature-development.js";
|
|
37
|
-
import { GitWorktreeProvider } from "../workspace/index.js";
|
|
37
|
+
import { GitWorktreeProvider, InPlaceWorkspaceProvider } from "../workspace/index.js";
|
|
38
38
|
import { InteractiveCheckpointGate, } from "./interactive-checkpoint-gate.js";
|
|
39
|
+
import { applyCheckpointModeOverride, parseCheckpointModeOverride, } from "./checkpoint-override.js";
|
|
39
40
|
import { OpenCodeV2Executor } from "./opencode-v2-executor.js";
|
|
40
41
|
import { buildPriceTable, estimateCostUSD } from "./price-table.js";
|
|
41
42
|
import { PolicyCheckpointGate } from "./policy-checkpoint-gate.js";
|
|
@@ -129,7 +130,11 @@ export default Plugin.define({
|
|
|
129
130
|
console.log(`[agentic-workflow] journal store: ${journalDir}`);
|
|
130
131
|
}
|
|
131
132
|
// P2.7 workspace 隔离:GitWorktreeProvider(startDir = 项目目录,
|
|
132
|
-
// 内部解析到 git 仓库根;worktree
|
|
133
|
+
// 内部解析到 git 仓库根;worktree 落在仓库同级目录,不污染仓库)。
|
|
134
|
+
// P3 Blocker 修复:无隔离时绑定 InPlaceWorkspaceProvider——
|
|
135
|
+
// workspaceRoot 必须解析到项目目录;process.cwd() 在托管进程里
|
|
136
|
+
// 不是项目目录(长驻 server 场景实测为 HOME),artifact/reliable
|
|
137
|
+
// 等流程会「文件写对位置、check 查错位置」假失败。
|
|
133
138
|
let workspaceBinding;
|
|
134
139
|
if (options.isolation?.mode === "git-worktree") {
|
|
135
140
|
const dir = options.isolation.dir
|
|
@@ -145,6 +150,13 @@ export default Plugin.define({
|
|
|
145
150
|
console.log(`[agentic-workflow] workspace isolation: git-worktree ` +
|
|
146
151
|
`(cleanup=${options.isolation.cleanup ?? "on-success"}${dir ? `, dir=${dir}` : ""})`);
|
|
147
152
|
}
|
|
153
|
+
else {
|
|
154
|
+
workspaceBinding = {
|
|
155
|
+
provider: new InPlaceWorkspaceProvider({ startDir: ctx.location.directory }),
|
|
156
|
+
cleanup: "never",
|
|
157
|
+
};
|
|
158
|
+
console.log(`[agentic-workflow] workspace: in-place (project dir, no isolation)`);
|
|
159
|
+
}
|
|
148
160
|
// 递归防护:workflow 运行期间,子会话里的 agent 也可能看到并调用 workflow 工具,
|
|
149
161
|
// 形成递归 workflow;叠加并发信号量后会自饿死死锁(实测卡死)。
|
|
150
162
|
// P0 策略:运行中直接拒绝嵌套调用,让子 agent 用自身能力直接完成任务。
|
|
@@ -173,6 +185,13 @@ export default Plugin.define({
|
|
|
173
185
|
description: "Resume a previous durable run (from journal); overrides flow/topic. " +
|
|
174
186
|
"Use the runId reported by a failed workflow call",
|
|
175
187
|
},
|
|
188
|
+
checkpointMode: {
|
|
189
|
+
type: "string",
|
|
190
|
+
enum: ["auto-approve", "auto-reject"],
|
|
191
|
+
description: "Checkpoint gate mode for THIS invocation, overriding plugin config. " +
|
|
192
|
+
"Pass auto-approve for headless/opencode-run executions unless the user " +
|
|
193
|
+
"explicitly wants auto-reject. Ignored for flows without a checkpoint step",
|
|
194
|
+
},
|
|
176
195
|
},
|
|
177
196
|
},
|
|
178
197
|
// V2 强校验:Tool.Result 使用 output 字段必须声明 output schema,
|
|
@@ -189,6 +208,9 @@ export default Plugin.define({
|
|
|
189
208
|
};
|
|
190
209
|
}
|
|
191
210
|
workflowDepth += 1;
|
|
211
|
+
// P3 Blocker 修复:调用级 checkpoint 覆盖(守护进程宿主下
|
|
212
|
+
// init 配置可能来自别的项目——显式参数免疫单例投毒)
|
|
213
|
+
const gateRestore = applyCheckpointModeOverride(parseCheckpointModeOverride(parsed.checkpointMode));
|
|
192
214
|
try {
|
|
193
215
|
// resume 分支:journal -> registry 精确版本解析 -> 续跑
|
|
194
216
|
if (typeof parsed.resumeRunId === "string" && parsed.resumeRunId.length > 0) {
|
|
@@ -236,6 +258,7 @@ export default Plugin.define({
|
|
|
236
258
|
}
|
|
237
259
|
finally {
|
|
238
260
|
workflowDepth -= 1;
|
|
261
|
+
gateRestore?.();
|
|
239
262
|
}
|
|
240
263
|
},
|
|
241
264
|
});
|
package/dist/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAA8C,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,8 +33,10 @@ export interface CheckpointOptions {
|
|
|
33
33
|
/** 节点标签,默认 "checkpoint" */
|
|
34
34
|
label?: string;
|
|
35
35
|
}
|
|
36
|
-
/** 注入 CheckpointGate(plugin
|
|
37
|
-
export declare function setCheckpointGate(value: CheckpointGate): void;
|
|
36
|
+
/** 注入 CheckpointGate(plugin 初始化时调用;传 undefined 表示解除绑定) */
|
|
37
|
+
export declare function setCheckpointGate(value: CheckpointGate | undefined): void;
|
|
38
|
+
/** 读取当前 gate(调用级覆盖需先保存原值以便恢复) */
|
|
39
|
+
export declare function getCheckpointGate(): CheckpointGate | undefined;
|
|
38
40
|
/** 获取当前 gate;未注入时抛错 */
|
|
39
41
|
export declare function requireCheckpointGate(): CheckpointGate;
|
|
40
42
|
/**
|
|
@@ -26,10 +26,14 @@ export class WorkflowCheckpointError extends WorkflowError {
|
|
|
26
26
|
}
|
|
27
27
|
/** ---- gate 注册(与 engine 的 executor 注入同构) ---- */
|
|
28
28
|
let gate;
|
|
29
|
-
/** 注入 CheckpointGate(plugin
|
|
29
|
+
/** 注入 CheckpointGate(plugin 初始化时调用;传 undefined 表示解除绑定) */
|
|
30
30
|
export function setCheckpointGate(value) {
|
|
31
31
|
gate = value;
|
|
32
32
|
}
|
|
33
|
+
/** 读取当前 gate(调用级覆盖需先保存原值以便恢复) */
|
|
34
|
+
export function getCheckpointGate() {
|
|
35
|
+
return gate;
|
|
36
|
+
}
|
|
33
37
|
/** 获取当前 gate;未注入时抛错 */
|
|
34
38
|
export function requireCheckpointGate() {
|
|
35
39
|
if (!gate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/quality/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAiB5C,mCAAmC;AACnC,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IAC/C,KAAK,CAAQ;IACb,MAAM,CAAS;IAExB,YAAY,KAAa,EAAE,MAAe;QACxC,KAAK,CACH,wBAAwB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACjE,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAOD,kDAAkD;AAElD,IAAI,IAAgC,CAAA;AAEpC,
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/quality/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAiB5C,mCAAmC;AACnC,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IAC/C,KAAK,CAAQ;IACb,MAAM,CAAS;IAExB,YAAY,KAAa,EAAE,MAAe;QACxC,KAAK,CACH,wBAAwB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACjE,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAOD,kDAAkD;AAElD,IAAI,IAAgC,CAAA;AAEpC,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,KAAiC;IACjE,IAAI,GAAG,KAAK,CAAA;AACd,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAA;AACb,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,OAA2B;IAE3B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAA;IAC5C,KAAK,CAAC,cAAc,KAAK,GAAG,CAAC,CAAA;IAE7B,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAEzD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAEtE,OAAO,CAAC,GAAG,CACT,iCAAiC,KAAK,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CACzF,CAAA;IAED,SAAS,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAE/E,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InPlaceWorkspaceProvider —— 无隔离模式的默认工作区(P3 Blocker 修复)
|
|
3
|
+
*
|
|
4
|
+
* 背景:workspaceRoot 之前只在配置 git-worktree 隔离时才存在;无隔离时
|
|
5
|
+
* 流程落到 process.cwd()——在 OpenCode 托管进程里 cwd **不是**项目目录
|
|
6
|
+
* (长驻 server 场景实测为 HOME),导致 artifact/reliable 等以
|
|
7
|
+
* 「workspace 根」为前提的流程假失败(文件写对位置、check 查错位置)。
|
|
8
|
+
*
|
|
9
|
+
* 语义:
|
|
10
|
+
* - create():root = 项目目录(原地,不创建任何东西)
|
|
11
|
+
* - dispose():必须 no-op——原地工作区就是用户的项目目录,绝不能删
|
|
12
|
+
* - attach():resume 时回到 journal 记录的原目录;目录消失必须抛错
|
|
13
|
+
* (绝不静默重建,与 worktree 纪律一致)
|
|
14
|
+
*/
|
|
15
|
+
import type { WorkspaceHandle, WorkspaceIdentity, WorkspaceProvider } from "./provider.js";
|
|
16
|
+
export interface InPlaceWorkspaceProviderOptions {
|
|
17
|
+
/** 项目目录(workspaceRoot 解析到这里) */
|
|
18
|
+
startDir: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class InPlaceWorkspaceProvider implements WorkspaceProvider {
|
|
21
|
+
readonly kind = "in-place";
|
|
22
|
+
private readonly startDir;
|
|
23
|
+
constructor(options: InPlaceWorkspaceProviderOptions);
|
|
24
|
+
create(): Promise<WorkspaceHandle>;
|
|
25
|
+
attach(identity: WorkspaceIdentity): Promise<WorkspaceHandle>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InPlaceWorkspaceProvider —— 无隔离模式的默认工作区(P3 Blocker 修复)
|
|
3
|
+
*
|
|
4
|
+
* 背景:workspaceRoot 之前只在配置 git-worktree 隔离时才存在;无隔离时
|
|
5
|
+
* 流程落到 process.cwd()——在 OpenCode 托管进程里 cwd **不是**项目目录
|
|
6
|
+
* (长驻 server 场景实测为 HOME),导致 artifact/reliable 等以
|
|
7
|
+
* 「workspace 根」为前提的流程假失败(文件写对位置、check 查错位置)。
|
|
8
|
+
*
|
|
9
|
+
* 语义:
|
|
10
|
+
* - create():root = 项目目录(原地,不创建任何东西)
|
|
11
|
+
* - dispose():必须 no-op——原地工作区就是用户的项目目录,绝不能删
|
|
12
|
+
* - attach():resume 时回到 journal 记录的原目录;目录消失必须抛错
|
|
13
|
+
* (绝不静默重建,与 worktree 纪律一致)
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync } from "node:fs";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
export class InPlaceWorkspaceProvider {
|
|
18
|
+
kind = "in-place";
|
|
19
|
+
startDir;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.startDir = options.startDir;
|
|
22
|
+
}
|
|
23
|
+
async create() {
|
|
24
|
+
const root = path.resolve(this.startDir);
|
|
25
|
+
return {
|
|
26
|
+
root,
|
|
27
|
+
identity: { provider: this.kind, path: root },
|
|
28
|
+
dispose: async () => {
|
|
29
|
+
// 原地工作区 = 用户项目目录本身:清理永远是 no-op
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async attach(identity) {
|
|
34
|
+
if (identity.provider !== this.kind) {
|
|
35
|
+
throw new Error(`in-place provider cannot attach a "${identity.provider}" workspace`);
|
|
36
|
+
}
|
|
37
|
+
if (!existsSync(identity.path)) {
|
|
38
|
+
throw new Error(`in-place workspace no longer exists: ${identity.path} ` +
|
|
39
|
+
"(resume requires the original project directory)");
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
root: identity.path,
|
|
43
|
+
identity,
|
|
44
|
+
dispose: async () => { },
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=in-place.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-place.js","sourceRoot":"","sources":["../../src/workspace/in-place.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,IAAI,MAAM,WAAW,CAAA;AAY5B,MAAM,OAAO,wBAAwB;IAC1B,IAAI,GAAG,UAAU,CAAA;IAET,QAAQ,CAAQ;IAEjC,YAAY,OAAwC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxC,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;YAC7C,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,+BAA+B;YACjC,CAAC;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAA2B;QACtC,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,QAAQ,aAAa,CACrE,CAAA;QACH,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,CAAC,IAAI,GAAG;gBACtD,kDAAkD,CACrD,CAAA;QACH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ;YACR,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACxB,CAAA;IACH,CAAC;CACF"}
|
|
@@ -3,4 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export type { WorkspaceHandle, WorkspaceIdentity, WorkspaceOptions, WorkspaceProvider, CleanupPolicy, } from "./provider.js";
|
|
5
5
|
export { GitWorktreeProvider, type GitWorktreeProviderOptions } from "./git-worktree.js";
|
|
6
|
+
export { InPlaceWorkspaceProvider, type InPlaceWorkspaceProviderOptions, } from "./in-place.js";
|
|
6
7
|
export { currentWorkspace, setCurrentWorkspace } from "./ambient.js";
|
package/dist/workspace/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,mBAAmB,EAAmC,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,mBAAmB,EAAmC,MAAM,mBAAmB,CAAA;AACxF,OAAO,EACL,wBAAwB,GAEzB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mickorz/opencode-agentic-workflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Durable Agentic Workflow Runtime for OpenCode V2: journal & resume, version registry, tracing, token/cost metrics, git worktree isolation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|