@ai-hero/sandcastle 0.4.8 → 0.5.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/README.md +125 -61
- package/dist/AgentProvider.d.ts +9 -0
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +14 -2
- package/dist/AgentProvider.js.map +1 -1
- package/dist/ErrorHandler.d.ts.map +1 -1
- package/dist/ErrorHandler.js +2 -0
- package/dist/ErrorHandler.js.map +1 -1
- package/dist/Orchestrator.d.ts +13 -1
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +52 -7
- package/dist/Orchestrator.js.map +1 -1
- package/dist/PodmanLifecycle.d.ts +10 -0
- package/dist/PodmanLifecycle.d.ts.map +1 -1
- package/dist/PodmanLifecycle.js +22 -0
- package/dist/PodmanLifecycle.js.map +1 -1
- package/dist/SandboxFactory.d.ts +6 -2
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +41 -21
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/SandboxLifecycle.d.ts +23 -5
- package/dist/SandboxLifecycle.d.ts.map +1 -1
- package/dist/SandboxLifecycle.js +59 -13
- package/dist/SandboxLifecycle.js.map +1 -1
- package/dist/SandboxProvider.d.ts +4 -0
- package/dist/SandboxProvider.d.ts.map +1 -1
- package/dist/SandboxProvider.js.map +1 -1
- package/dist/SessionStore.d.ts +50 -0
- package/dist/SessionStore.d.ts.map +1 -0
- package/dist/SessionStore.js +120 -0
- package/dist/SessionStore.js.map +1 -0
- package/dist/createSandbox.d.ts +7 -15
- package/dist/createSandbox.d.ts.map +1 -1
- package/dist/createSandbox.js +40 -16
- package/dist/createSandbox.js.map +1 -1
- package/dist/createWorktree.d.ts +9 -9
- package/dist/createWorktree.d.ts.map +1 -1
- package/dist/createWorktree.js +6 -2
- package/dist/createWorktree.js.map +1 -1
- package/dist/errors.d.ts +10 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +9 -1
- package/dist/interactive.js.map +1 -1
- package/dist/run.d.ts +9 -9
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +18 -1
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +20 -0
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/podman.d.ts.map +1 -1
- package/dist/sandboxes/podman.js +26 -0
- package/dist/sandboxes/podman.js.map +1 -1
- package/dist/sandboxes/test-bind-mount.d.ts +17 -0
- package/dist/sandboxes/test-bind-mount.d.ts.map +1 -0
- package/dist/sandboxes/test-bind-mount.js +91 -0
- package/dist/sandboxes/test-bind-mount.js.map +1 -0
- package/dist/templates/parallel-planner/main.mts +1 -1
- package/dist/templates/parallel-planner-with-review/main.mts +1 -1
- package/dist/templates/sequential-reviewer/main.mts +1 -1
- package/dist/templates/simple-loop/main.mts +7 -5
- package/package.json +1 -1
package/dist/Orchestrator.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
1
2
|
import { Deferred, Effect } from "effect";
|
|
2
3
|
import { Display } from "./Display.js";
|
|
3
4
|
import { preprocessPrompt } from "./PromptPreprocessor.js";
|
|
4
|
-
import { AgentError, AgentIdleTimeoutError } from "./errors.js";
|
|
5
|
+
import { AgentError, AgentIdleTimeoutError, SessionCaptureError, } from "./errors.js";
|
|
5
6
|
import { SandboxFactory } from "./SandboxFactory.js";
|
|
6
7
|
import { withSandboxLifecycle } from "./SandboxLifecycle.js";
|
|
7
8
|
import { TextDeltaBuffer } from "./TextDeltaBuffer.js";
|
|
9
|
+
import { hostSessionStore, sandboxSessionStore, transferSession, } from "./SessionStore.js";
|
|
8
10
|
const IDLE_WARNING_INTERVAL_MS = 60_000;
|
|
9
|
-
const invokeAgent = (sandbox, sandboxRepoDir, prompt, provider, idleTimeoutMs, onText, onToolCall, onIdleWarning, idleWarningIntervalMs = IDLE_WARNING_INTERVAL_MS) => Effect.gen(function* () {
|
|
11
|
+
const invokeAgent = (sandbox, sandboxRepoDir, prompt, provider, idleTimeoutMs, onText, onToolCall, onIdleWarning, idleWarningIntervalMs = IDLE_WARNING_INTERVAL_MS, resumeSession) => Effect.gen(function* () {
|
|
10
12
|
let resultText = "";
|
|
13
|
+
let sessionId;
|
|
11
14
|
// Deferred that will be failed when the idle timer fires
|
|
12
15
|
const timeoutSignal = yield* Deferred.make();
|
|
13
16
|
let timeoutHandle = null;
|
|
@@ -40,6 +43,7 @@ const invokeAgent = (sandbox, sandboxRepoDir, prompt, provider, idleTimeoutMs, o
|
|
|
40
43
|
const execResult = yield* sandbox.exec(provider.buildPrintCommand({
|
|
41
44
|
prompt,
|
|
42
45
|
dangerouslySkipPermissions: true,
|
|
46
|
+
resumeSession,
|
|
43
47
|
}), {
|
|
44
48
|
onLine: (line) => {
|
|
45
49
|
resetIdleTimer();
|
|
@@ -53,6 +57,9 @@ const invokeAgent = (sandbox, sandboxRepoDir, prompt, provider, idleTimeoutMs, o
|
|
|
53
57
|
else if (parsed.type === "tool_call") {
|
|
54
58
|
onToolCall(parsed.name, parsed.args);
|
|
55
59
|
}
|
|
60
|
+
else if (parsed.type === "session_id") {
|
|
61
|
+
sessionId = parsed.sessionId;
|
|
62
|
+
}
|
|
56
63
|
}
|
|
57
64
|
},
|
|
58
65
|
cwd: sandboxRepoDir,
|
|
@@ -62,7 +69,7 @@ const invokeAgent = (sandbox, sandboxRepoDir, prompt, provider, idleTimeoutMs, o
|
|
|
62
69
|
message: `${provider.name} exited with code ${execResult.exitCode}:\n${execResult.stderr}`,
|
|
63
70
|
}));
|
|
64
71
|
}
|
|
65
|
-
return { result: resultText || execResult.stdout };
|
|
72
|
+
return { result: resultText || execResult.stdout, sessionId };
|
|
66
73
|
}).pipe(Effect.ensuring(Effect.sync(() => {
|
|
67
74
|
if (timeoutHandle !== null) {
|
|
68
75
|
clearTimeout(timeoutHandle);
|
|
@@ -95,12 +102,13 @@ export const orchestrate = (options) => {
|
|
|
95
102
|
}
|
|
96
103
|
const label = (msg) => options.name ? `[${options.name}] ${msg}` : msg;
|
|
97
104
|
const allCommits = [];
|
|
105
|
+
const allIterations = [];
|
|
98
106
|
let allStdout = "";
|
|
99
107
|
let resolvedBranch = "";
|
|
100
108
|
let iterationPreservedPath;
|
|
101
109
|
for (let i = 1; i <= iterations; i++) {
|
|
102
110
|
yield* display.status(label(`Iteration ${i}/${iterations}`), "info");
|
|
103
|
-
const sandboxResult = yield* factory.withSandbox(({ hostWorktreePath, sandboxRepoPath, applyToHost }) => withSandboxLifecycle({
|
|
111
|
+
const sandboxResult = yield* factory.withSandbox(({ hostWorktreePath, sandboxRepoPath, applyToHost, bindMountHandle }) => withSandboxLifecycle({
|
|
104
112
|
hostRepoDir,
|
|
105
113
|
sandboxRepoDir: sandboxRepoPath,
|
|
106
114
|
hooks,
|
|
@@ -108,6 +116,22 @@ export const orchestrate = (options) => {
|
|
|
108
116
|
hostWorktreePath,
|
|
109
117
|
applyToHost,
|
|
110
118
|
}, (ctx) => Effect.gen(function* () {
|
|
119
|
+
// Shared sandbox session infrastructure for resume + capture
|
|
120
|
+
const sandboxProjectsDir = join("/home/agent", ".claude", "projects");
|
|
121
|
+
// Resume session: transfer JSONL from host to sandbox before iteration 1
|
|
122
|
+
const iterationResumeSession = i === 1 ? options.resumeSession : undefined;
|
|
123
|
+
if (iterationResumeSession && bindMountHandle) {
|
|
124
|
+
yield* display.status(label("Resuming session"), "info");
|
|
125
|
+
const sbStore = sandboxSessionStore(ctx.sandboxRepoDir, bindMountHandle, sandboxProjectsDir);
|
|
126
|
+
const hStore = hostSessionStore(hostRepoDir, options._hostProjectsDir);
|
|
127
|
+
yield* Effect.tryPromise({
|
|
128
|
+
try: () => transferSession(hStore, sbStore, iterationResumeSession),
|
|
129
|
+
catch: (e) => new SessionCaptureError({
|
|
130
|
+
message: `Session resume failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
131
|
+
sessionId: iterationResumeSession,
|
|
132
|
+
}),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
111
135
|
// Preprocess prompt (run !`command` expressions inside sandbox)
|
|
112
136
|
const fullPrompt = yield* preprocessPrompt(prompt, ctx.sandbox, ctx.sandboxRepoDir);
|
|
113
137
|
yield* display.status(label("Agent started"), "success");
|
|
@@ -129,15 +153,32 @@ export const orchestrate = (options) => {
|
|
|
129
153
|
: `Agent idle for ${minutes} minutes`;
|
|
130
154
|
Effect.runPromise(display.status(label(msg), "warn"));
|
|
131
155
|
};
|
|
132
|
-
const { result: agentOutput } = yield* invokeAgent(ctx.sandbox, ctx.sandboxRepoDir, fullPrompt, provider, idleTimeoutMs, onText, onToolCall, onIdleWarning, options._idleWarningIntervalMs);
|
|
156
|
+
const { result: agentOutput, sessionId } = yield* invokeAgent(ctx.sandbox, ctx.sandboxRepoDir, fullPrompt, provider, idleTimeoutMs, onText, onToolCall, onIdleWarning, options._idleWarningIntervalMs, iterationResumeSession);
|
|
133
157
|
// Flush any remaining buffered text deltas
|
|
134
158
|
textBuffer.dispose();
|
|
135
159
|
yield* display.status(label("Agent stopped"), "info");
|
|
160
|
+
// Capture session while sandbox is still alive
|
|
161
|
+
let sessionFilePath;
|
|
162
|
+
if (provider.captureSessions && sessionId && bindMountHandle) {
|
|
163
|
+
yield* display.status(label("Capturing session"), "info");
|
|
164
|
+
const sbStore = sandboxSessionStore(ctx.sandboxRepoDir, bindMountHandle, sandboxProjectsDir);
|
|
165
|
+
const hStore = hostSessionStore(hostRepoDir, options._hostProjectsDir);
|
|
166
|
+
yield* Effect.tryPromise({
|
|
167
|
+
try: () => transferSession(sbStore, hStore, sessionId),
|
|
168
|
+
catch: (e) => new SessionCaptureError({
|
|
169
|
+
message: `Session capture failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
170
|
+
sessionId,
|
|
171
|
+
}),
|
|
172
|
+
});
|
|
173
|
+
sessionFilePath = hStore.sessionFilePath(sessionId);
|
|
174
|
+
}
|
|
136
175
|
// Check completion signal
|
|
137
176
|
const matchedSignal = completionSignals.find((sig) => agentOutput.includes(sig));
|
|
138
177
|
return {
|
|
139
178
|
completionSignal: matchedSignal,
|
|
140
179
|
stdout: agentOutput,
|
|
180
|
+
sessionId,
|
|
181
|
+
sessionFilePath,
|
|
141
182
|
};
|
|
142
183
|
})));
|
|
143
184
|
const lifecycleResult = sandboxResult.value;
|
|
@@ -145,10 +186,14 @@ export const orchestrate = (options) => {
|
|
|
145
186
|
allCommits.push(...lifecycleResult.commits);
|
|
146
187
|
allStdout += lifecycleResult.result.stdout;
|
|
147
188
|
resolvedBranch = lifecycleResult.branch;
|
|
189
|
+
allIterations.push({
|
|
190
|
+
sessionId: lifecycleResult.result.sessionId,
|
|
191
|
+
sessionFilePath: lifecycleResult.result.sessionFilePath,
|
|
192
|
+
});
|
|
148
193
|
if (lifecycleResult.result.completionSignal !== undefined) {
|
|
149
194
|
yield* display.status(label(`Agent signaled completion after ${i} iteration(s).`), "success");
|
|
150
195
|
return {
|
|
151
|
-
|
|
196
|
+
iterations: allIterations,
|
|
152
197
|
completionSignal: lifecycleResult.result.completionSignal,
|
|
153
198
|
stdout: allStdout,
|
|
154
199
|
commits: allCommits,
|
|
@@ -159,7 +204,7 @@ export const orchestrate = (options) => {
|
|
|
159
204
|
}
|
|
160
205
|
yield* display.status(label(`Reached max iterations (${iterations}).`), "info");
|
|
161
206
|
return {
|
|
162
|
-
|
|
207
|
+
iterations: allIterations,
|
|
163
208
|
completionSignal: undefined,
|
|
164
209
|
stdout: allStdout,
|
|
165
210
|
commits: allCommits,
|
package/dist/Orchestrator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Orchestrator.js","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"Orchestrator.js","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,16 @@ import { PodmanError } from "./errors.js";
|
|
|
10
10
|
export declare const buildImage: (imageName: string, containerfileDir: string, options?: {
|
|
11
11
|
readonly containerfile?: string | undefined;
|
|
12
12
|
} | undefined) => Effect.Effect<void, PodmanError, never>;
|
|
13
|
+
/**
|
|
14
|
+
* Fix ownership of a directory inside the container.
|
|
15
|
+
* Runs as root so the target owner can write to the path.
|
|
16
|
+
*
|
|
17
|
+
* Non-fatal: if chown fails (e.g. read-only mount), a warning is logged
|
|
18
|
+
* but the error is not propagated. Matches Docker provider semantics.
|
|
19
|
+
*
|
|
20
|
+
* @param owner - chown-compatible owner spec, e.g. "1000:1000"
|
|
21
|
+
*/
|
|
22
|
+
export declare const chownInContainer: (containerName: string, owner: string, path: string) => Effect.Effect<void, never, never>;
|
|
13
23
|
/**
|
|
14
24
|
* Remove a Podman image.
|
|
15
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PodmanLifecycle.d.ts","sourceRoot":"","sources":["../src/PodmanLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB1C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU;;yDAkBnB,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,WAAW,gEAKpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"PodmanLifecycle.d.ts","sourceRoot":"","sources":["../src/PodmanLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB1C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU;;yDAkBnB,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,2FAuB1B,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,WAAW,gEAKpB,CAAC"}
|
package/dist/PodmanLifecycle.js
CHANGED
|
@@ -36,6 +36,28 @@ export const buildImage = (imageName, containerfileDir, options) => Effect.gen(f
|
|
|
36
36
|
yield* podmanExec(["build", "-t", imageName, resolve(containerfileDir)]);
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
|
+
/**
|
|
40
|
+
* Fix ownership of a directory inside the container.
|
|
41
|
+
* Runs as root so the target owner can write to the path.
|
|
42
|
+
*
|
|
43
|
+
* Non-fatal: if chown fails (e.g. read-only mount), a warning is logged
|
|
44
|
+
* but the error is not propagated. Matches Docker provider semantics.
|
|
45
|
+
*
|
|
46
|
+
* @param owner - chown-compatible owner spec, e.g. "1000:1000"
|
|
47
|
+
*/
|
|
48
|
+
export const chownInContainer = (containerName, owner, path) => Effect.asVoid(podmanExec([
|
|
49
|
+
"exec",
|
|
50
|
+
"-u",
|
|
51
|
+
"root",
|
|
52
|
+
containerName,
|
|
53
|
+
"chown",
|
|
54
|
+
"-R",
|
|
55
|
+
owner,
|
|
56
|
+
path,
|
|
57
|
+
])).pipe(Effect.catchAll((error) => {
|
|
58
|
+
console.warn(`chown -R ${owner} ${path} in container ${containerName} failed (non-fatal): ${error.message}`);
|
|
59
|
+
return Effect.void;
|
|
60
|
+
}));
|
|
39
61
|
/**
|
|
40
62
|
* Remove a Podman image.
|
|
41
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PodmanLifecycle.js","sourceRoot":"","sources":["../src/PodmanLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,IAAc,EAAsC,EAAE,CACxE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;IACtB,QAAQ,CACN,QAAQ,EACR,IAAI,EACJ,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAC/B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,WAAW,CAAC;gBACd,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;aAC5E,CAAC,CACH,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAiB,EACjB,gBAAwB,EACxB,OAA6C,EACX,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,UAAU,CAAC;YAChB,OAAO;YACP,IAAI;YACJ,SAAS;YACT,IAAI;YACJ,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;YAC9B,OAAO,CAAC,GAAG,EAAE;SACd,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAiB,EACiB,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"PodmanLifecycle.js","sourceRoot":"","sources":["../src/PodmanLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,IAAc,EAAsC,EAAE,CACxE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;IACtB,QAAQ,CACN,QAAQ,EACR,IAAI,EACJ,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAC/B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CACJ,MAAM,CAAC,IAAI,CACT,IAAI,WAAW,CAAC;gBACd,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;aAC5E,CAAC,CACH,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAiB,EACjB,gBAAwB,EACxB,OAA6C,EACX,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,UAAU,CAAC;YAChB,OAAO;YACP,IAAI;YACJ,SAAS;YACT,IAAI;YACJ,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;YAC9B,OAAO,CAAC,GAAG,EAAE;SACd,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,aAAqB,EACrB,KAAa,EACb,IAAY,EACS,EAAE,CACvB,MAAM,CAAC,MAAM,CACX,UAAU,CAAC;IACT,MAAM;IACN,IAAI;IACJ,MAAM;IACN,aAAa;IACb,OAAO;IACP,IAAI;IACJ,KAAK;IACL,IAAI;CACL,CAAC,CACH,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;IACxB,OAAO,CAAC,IAAI,CACV,YAAY,KAAK,IAAI,IAAI,iBAAiB,aAAa,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAC/F,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC,CACH,CAAC;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAiB,EACiB,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
package/dist/SandboxFactory.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { PlatformError } from "@effect/platform/Error";
|
|
|
4
4
|
import { CopyError, ExecError, SyncError, type SandboxError } from "./errors.js";
|
|
5
5
|
import { Display } from "./Display.js";
|
|
6
6
|
import type { SandboxProvider, BranchStrategy, BindMountSandboxHandle, IsolatedSandboxHandle, NoSandboxHandle } from "./SandboxProvider.js";
|
|
7
|
+
import { type SandboxHooks } from "./SandboxLifecycle.js";
|
|
7
8
|
export interface ExecResult {
|
|
8
9
|
readonly stdout: string;
|
|
9
10
|
readonly stderr: string;
|
|
@@ -25,8 +26,7 @@ export declare class Sandbox extends Sandbox_base {
|
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* Wrap a Promise-based sandbox handle into an Effect-based SandboxService layer.
|
|
28
|
-
*
|
|
29
|
-
* isolated handles (copyIn/copyFileOut delegated to the handle).
|
|
29
|
+
* Delegates copyIn/copyFileOut to the handle when available.
|
|
30
30
|
*/
|
|
31
31
|
export declare const makeSandboxLayerFromHandle: (handle: BindMountSandboxHandle | IsolatedSandboxHandle | NoSandboxHandle) => Layer.Layer<Sandbox, never, never>;
|
|
32
32
|
/** The mount point inside the sandbox where the project worktree is bound. */
|
|
@@ -39,6 +39,8 @@ export interface SandboxInfo {
|
|
|
39
39
|
/** Sync changes from the sandbox to the host worktree.
|
|
40
40
|
* For isolated providers, runs syncOut. For bind-mount providers, this is a no-op. */
|
|
41
41
|
readonly applyToHost: () => Effect.Effect<void, SyncError>;
|
|
42
|
+
/** The bind-mount sandbox handle, available when the provider is a bind-mount provider. Used for session capture. */
|
|
43
|
+
readonly bindMountHandle?: BindMountSandboxHandle;
|
|
42
44
|
}
|
|
43
45
|
export interface WithSandboxResult<A> {
|
|
44
46
|
readonly value: A;
|
|
@@ -63,6 +65,8 @@ declare const SandboxConfig_base: Context.TagClass<SandboxConfig, "SandboxConfig
|
|
|
63
65
|
readonly branchStrategy: BranchStrategy;
|
|
64
66
|
/** When false, reuse an existing worktree instead of failing on collision. Default: true. */
|
|
65
67
|
readonly throwOnDuplicateWorktree?: boolean | undefined;
|
|
68
|
+
/** Lifecycle hooks grouped by execution location (host or sandbox). */
|
|
69
|
+
readonly hooks?: SandboxHooks | undefined;
|
|
66
70
|
}>;
|
|
67
71
|
export declare class SandboxConfig extends SandboxConfig_base {
|
|
68
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxFactory.d.ts","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAGL,SAAS,EACT,SAAS,EACT,SAAS,EAGT,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEd,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EAChB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"SandboxFactory.d.ts","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAGL,SAAS,EACT,SAAS,EACT,SAAS,EAGT,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEd,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIxE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KACxE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE1C,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEpC,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,CACpB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CACrC;;AAED,qBAAa,OAAQ,SAAQ,YAG1B;CAAG;AAmCN;;;GAGG;AACH,eAAO,MAAM,0BAA0B,kHAkCnC,CAAC;AAEL,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,qFAAqF;IACrF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;2FACuF;IACvF,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,qHAAqH;IACrH,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAC;CACnD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,6GAA6G;IAC7G,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;;2BAK0B,CAAC,EAAE,CAAC,EAAE,CAAC;;AAHlC,qBAAa,cAAe,SAAQ,mBAWjC;CAAG;;;;IAOF,2FAA2F;;IAE3F,gGAAgG;;IAEhG,sEAAsE;;IAEtE,6EAA6E;;IAE7E,6FAA6F;;IAE7F,uEAAuE;;;AAf3E,qBAAa,aAAc,SAAQ,kBAkBhC;CAAG;AAqEN,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,wFAwBzB,CAAC;AAUL,eAAO,MAAM,4BAA4B;;CA6QxC,CAAC"}
|
package/dist/SandboxFactory.js
CHANGED
|
@@ -5,14 +5,35 @@ import { AgentError, AgentIdleTimeoutError, CopyError, ExecError, WorktreeError,
|
|
|
5
5
|
import * as WorktreeManager from "./WorktreeManager.js";
|
|
6
6
|
import { copyToWorktree } from "./CopyToWorktree.js";
|
|
7
7
|
import { Display } from "./Display.js";
|
|
8
|
+
import { runHostHooks } from "./SandboxLifecycle.js";
|
|
8
9
|
import { startSandbox } from "./startSandbox.js";
|
|
9
10
|
import { syncOut } from "./syncOut.js";
|
|
10
11
|
export class Sandbox extends Context.Tag("Sandbox")() {
|
|
11
12
|
}
|
|
13
|
+
const getCopyIn = (handle) => {
|
|
14
|
+
if ("copyIn" in handle) {
|
|
15
|
+
return (hostPath, sandboxPath) => Effect.tryPromise({
|
|
16
|
+
try: () => handle.copyIn(hostPath, sandboxPath),
|
|
17
|
+
catch: (e) => new CopyError({
|
|
18
|
+
message: `copyIn failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if ("copyFileIn" in handle) {
|
|
23
|
+
return (hostPath, sandboxPath) => Effect.tryPromise({
|
|
24
|
+
try: () => handle.copyFileIn(hostPath, sandboxPath),
|
|
25
|
+
catch: (e) => new CopyError({
|
|
26
|
+
message: `copyFileIn failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return () => Effect.fail(new CopyError({
|
|
31
|
+
message: "copyIn is not supported for this sandbox provider",
|
|
32
|
+
}));
|
|
33
|
+
};
|
|
12
34
|
/**
|
|
13
35
|
* Wrap a Promise-based sandbox handle into an Effect-based SandboxService layer.
|
|
14
|
-
*
|
|
15
|
-
* isolated handles (copyIn/copyFileOut delegated to the handle).
|
|
36
|
+
* Delegates copyIn/copyFileOut to the handle when available.
|
|
16
37
|
*/
|
|
17
38
|
export const makeSandboxLayerFromHandle = (handle) => Layer.succeed(Sandbox, {
|
|
18
39
|
exec: (command, options) => Effect.tryPromise({
|
|
@@ -22,16 +43,7 @@ export const makeSandboxLayerFromHandle = (handle) => Layer.succeed(Sandbox, {
|
|
|
22
43
|
message: `exec failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
23
44
|
}),
|
|
24
45
|
}),
|
|
25
|
-
copyIn:
|
|
26
|
-
? (hostPath, sandboxPath) => Effect.tryPromise({
|
|
27
|
-
try: () => handle.copyIn(hostPath, sandboxPath),
|
|
28
|
-
catch: (e) => new CopyError({
|
|
29
|
-
message: `copyIn failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
30
|
-
}),
|
|
31
|
-
})
|
|
32
|
-
: () => Effect.fail(new CopyError({
|
|
33
|
-
message: "copyIn is not supported for bind-mount sandbox providers",
|
|
34
|
-
})),
|
|
46
|
+
copyIn: getCopyIn(handle),
|
|
35
47
|
copyFileOut: "copyFileOut" in handle
|
|
36
48
|
? (sandboxPath, hostPath) => Effect.tryPromise({
|
|
37
49
|
try: () => handle.copyFileOut(sandboxPath, hostPath),
|
|
@@ -40,7 +52,7 @@ export const makeSandboxLayerFromHandle = (handle) => Layer.succeed(Sandbox, {
|
|
|
40
52
|
}),
|
|
41
53
|
})
|
|
42
54
|
: () => Effect.fail(new CopyError({
|
|
43
|
-
message: "copyFileOut is not supported for
|
|
55
|
+
message: "copyFileOut is not supported for this sandbox provider",
|
|
44
56
|
})),
|
|
45
57
|
});
|
|
46
58
|
/** The mount point inside the sandbox where the project worktree is bound. */
|
|
@@ -124,7 +136,7 @@ export const resolveGitMounts = (gitPath) => Effect.gen(function* () {
|
|
|
124
136
|
});
|
|
125
137
|
export const WorktreeDockerSandboxFactory = {
|
|
126
138
|
layer: Layer.effect(SandboxFactory, Effect.gen(function* () {
|
|
127
|
-
const { env, hostRepoDir, copyToWorktree: copyPaths, name, sandboxProvider, branchStrategy, throwOnDuplicateWorktree, } = yield* SandboxConfig;
|
|
139
|
+
const { env, hostRepoDir, copyToWorktree: copyPaths, name, sandboxProvider, branchStrategy, throwOnDuplicateWorktree, hooks, } = yield* SandboxConfig;
|
|
128
140
|
const isHeadMode = branchStrategy.type === "head";
|
|
129
141
|
const branch = branchStrategy.type === "branch" ? branchStrategy.branch : undefined;
|
|
130
142
|
const fileSystem = yield* FileSystem.FileSystem;
|
|
@@ -144,8 +156,10 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
144
156
|
if (sandboxProvider.tag === "isolated") {
|
|
145
157
|
let preservedPath;
|
|
146
158
|
return Effect.acquireUseRelease(
|
|
147
|
-
// Acquire: prune stale worktrees, create worktree, then start sandbox
|
|
148
|
-
pruneAndCreate().pipe(Effect.
|
|
159
|
+
// Acquire: prune stale worktrees, create worktree, run host hooks, then start sandbox
|
|
160
|
+
pruneAndCreate().pipe(Effect.tap((worktreeInfo) => hooks?.host?.onWorktreeReady?.length
|
|
161
|
+
? runHostHooks(hooks.host.onWorktreeReady, worktreeInfo.path)
|
|
162
|
+
: Effect.void), Effect.flatMap((worktreeInfo) => startSandbox({
|
|
149
163
|
provider: sandboxProvider,
|
|
150
164
|
hostRepoDir: worktreeInfo.path,
|
|
151
165
|
env,
|
|
@@ -176,7 +190,9 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
176
190
|
if (isHeadMode) {
|
|
177
191
|
// Head mode: bind-mount host directory directly, no worktree
|
|
178
192
|
const gitPath = join(hostRepoDir, ".git");
|
|
179
|
-
return
|
|
193
|
+
return (hooks?.host?.onWorktreeReady?.length
|
|
194
|
+
? runHostHooks(hooks.host.onWorktreeReady, hostRepoDir)
|
|
195
|
+
: Effect.void).pipe(Effect.andThen(resolveGitMounts(gitPath)), Effect.provideService(FileSystem.FileSystem, fileSystem), Effect.mapError((e) => new WorktreeError({
|
|
180
196
|
message: `Failed to resolve git mounts: ${e}`,
|
|
181
197
|
})), Effect.flatMap((gitMounts) => Effect.acquireUseRelease(startSandbox({
|
|
182
198
|
provider: sandboxProvider,
|
|
@@ -187,10 +203,11 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
187
203
|
repoDir: SANDBOX_REPO_DIR,
|
|
188
204
|
}),
|
|
189
205
|
// Use
|
|
190
|
-
({ sandboxLayer, worktreePath }) => makeEffect({
|
|
206
|
+
({ sandboxLayer, worktreePath, handle }) => makeEffect({
|
|
191
207
|
hostWorktreePath: hostRepoDir,
|
|
192
208
|
sandboxRepoPath: worktreePath,
|
|
193
209
|
applyToHost: () => Effect.void,
|
|
210
|
+
bindMountHandle: handle,
|
|
194
211
|
}).pipe(Effect.provide(sandboxLayer)),
|
|
195
212
|
// Release
|
|
196
213
|
({ handle }) => Effect.tryPromise({
|
|
@@ -206,10 +223,12 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
206
223
|
// so we can attach the path to recognized error types before they propagate.
|
|
207
224
|
let preservedWorktreePath;
|
|
208
225
|
return Effect.acquireUseRelease(
|
|
209
|
-
// Acquire: prune stale worktrees (best-effort), create worktree, then start sandbox
|
|
226
|
+
// Acquire: prune stale worktrees (best-effort), create worktree, run host hooks, then start sandbox
|
|
210
227
|
pruneAndCreate().pipe(Effect.flatMap((worktreeInfo) => (copyPaths && copyPaths.length > 0
|
|
211
228
|
? display.spinner("Copying to worktree", copyToWorktree(copyPaths, hostRepoDir, worktreeInfo.path))
|
|
212
|
-
: Effect.succeed(undefined)).pipe(Effect.map(() => worktreeInfo))), Effect.
|
|
229
|
+
: Effect.succeed(undefined)).pipe(Effect.map(() => worktreeInfo))), Effect.tap((worktreeInfo) => hooks?.host?.onWorktreeReady?.length
|
|
230
|
+
? runHostHooks(hooks.host.onWorktreeReady, worktreeInfo.path)
|
|
231
|
+
: Effect.void), Effect.flatMap((worktreeInfo) => {
|
|
213
232
|
const gitPath = join(hostRepoDir, ".git");
|
|
214
233
|
return resolveGitMounts(gitPath).pipe(Effect.provideService(FileSystem.FileSystem, fileSystem), Effect.mapError((e) => new WorktreeError({
|
|
215
234
|
message: `Failed to resolve git mounts: ${e}`,
|
|
@@ -231,10 +250,11 @@ export const WorktreeDockerSandboxFactory = {
|
|
|
231
250
|
})))));
|
|
232
251
|
})),
|
|
233
252
|
// Use
|
|
234
|
-
({ worktreeInfo, sandboxLayer, worktreePath }) => makeEffect({
|
|
253
|
+
({ worktreeInfo, sandboxLayer, worktreePath, handle }) => makeEffect({
|
|
235
254
|
hostWorktreePath: worktreeInfo.path,
|
|
236
255
|
sandboxRepoPath: worktreePath,
|
|
237
256
|
applyToHost: () => Effect.void,
|
|
257
|
+
bindMountHandle: handle,
|
|
238
258
|
}).pipe(Effect.provide(sandboxLayer)),
|
|
239
259
|
// Release: close provider handle, then remove/preserve worktree based on dirty state.
|
|
240
260
|
({ worktreeInfo, handle }, exit) => Effect.tryPromise({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxFactory.js","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SandboxFactory.js","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,31 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { Display } from "./Display.js";
|
|
3
|
-
import { SyncError, type SandboxError } from "./errors.js";
|
|
3
|
+
import { ExecError, HookTimeoutError, SyncError, type SandboxError } from "./errors.js";
|
|
4
4
|
import { Sandbox, type SandboxService } from "./SandboxFactory.js";
|
|
5
5
|
export type SandboxHooks = {
|
|
6
|
-
readonly
|
|
7
|
-
readonly
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
readonly host?: {
|
|
7
|
+
readonly onWorktreeReady?: ReadonlyArray<{
|
|
8
|
+
readonly command: string;
|
|
9
|
+
}>;
|
|
10
|
+
readonly onSandboxReady?: ReadonlyArray<{
|
|
11
|
+
readonly command: string;
|
|
12
|
+
}>;
|
|
13
|
+
};
|
|
14
|
+
readonly sandbox?: {
|
|
15
|
+
readonly onSandboxReady?: ReadonlyArray<{
|
|
16
|
+
readonly command: string;
|
|
17
|
+
readonly sudo?: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
10
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Runs an array of host-side hook commands sequentially.
|
|
23
|
+
* Each command runs on the host with the given cwd.
|
|
24
|
+
* Fails fast on non-zero exit.
|
|
25
|
+
*/
|
|
26
|
+
export declare const runHostHooks: (hooks: readonly {
|
|
27
|
+
readonly command: string;
|
|
28
|
+
}[], cwd: string) => Effect.Effect<void, ExecError | HookTimeoutError, never>;
|
|
11
29
|
export interface SandboxLifecycleOptions {
|
|
12
30
|
readonly hostRepoDir: string;
|
|
13
31
|
readonly sandboxRepoDir: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxLifecycle.d.ts","sourceRoot":"","sources":["../src/SandboxLifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"SandboxLifecycle.d.ts","sourceRoot":"","sources":["../src/SandboxLifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAEL,SAAS,EAET,gBAAgB,EAEhB,SAAS,EAET,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EAEP,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AA0C7B,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;YACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;SAC1B,CAAC,CAAC;QACH,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;YACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;SAC1B,CAAC,CAAC;KACJ,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;YACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;SACzB,CAAC,CAAC;KACJ,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY;;6EAyBrB,CAAC;AAEL,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;yFACqF;IACrF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;oFAEgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,kMAoSlC,CAAC"}
|
package/dist/SandboxLifecycle.js
CHANGED
|
@@ -20,6 +20,26 @@ const execOkWithGitTimeout = (sandbox, command, options) => execOk(sandbox, comm
|
|
|
20
20
|
command,
|
|
21
21
|
})));
|
|
22
22
|
const execAsync = promisify(exec);
|
|
23
|
+
/**
|
|
24
|
+
* Runs an array of host-side hook commands sequentially.
|
|
25
|
+
* Each command runs on the host with the given cwd.
|
|
26
|
+
* Fails fast on non-zero exit.
|
|
27
|
+
*/
|
|
28
|
+
export const runHostHooks = (hooks, cwd) => Effect.gen(function* () {
|
|
29
|
+
for (const hook of hooks) {
|
|
30
|
+
yield* Effect.tryPromise({
|
|
31
|
+
try: () => execAsync(hook.command, { cwd }),
|
|
32
|
+
catch: (err) => new ExecError({
|
|
33
|
+
command: hook.command,
|
|
34
|
+
message: `Host hook failed: ${hook.command}\n${err instanceof Error ? err.message : String(err)}`,
|
|
35
|
+
}),
|
|
36
|
+
}).pipe(withTimeout(HOOK_TIMEOUT_MS, () => new HookTimeoutError({
|
|
37
|
+
message: `Host hook '${hook.command}' timed out after ${HOOK_TIMEOUT_MS}ms`,
|
|
38
|
+
timeoutMs: HOOK_TIMEOUT_MS,
|
|
39
|
+
command: hook.command,
|
|
40
|
+
})));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
23
43
|
export const withSandboxLifecycle = (options, work) => Effect.gen(function* () {
|
|
24
44
|
const sandbox = yield* Sandbox;
|
|
25
45
|
const display = yield* Display;
|
|
@@ -43,6 +63,9 @@ export const withSandboxLifecycle = (options, work) => Effect.gen(function* () {
|
|
|
43
63
|
]);
|
|
44
64
|
return [nameResult, emailResult];
|
|
45
65
|
});
|
|
66
|
+
// For host-side operations, use hostWorktreePath (the real path on the host)
|
|
67
|
+
// instead of sandboxRepoDir (which may be a sandbox path like /home/agent/workspace).
|
|
68
|
+
const hostSideWorktreePath = hostWorktreePath ?? sandboxRepoDir;
|
|
46
69
|
// Setup: onSandboxReady hooks
|
|
47
70
|
let resolvedBranch = "";
|
|
48
71
|
yield* display.taskLog("Setting up sandbox", (message) => Effect.gen(function* () {
|
|
@@ -60,25 +83,48 @@ export const withSandboxLifecycle = (options, work) => Effect.gen(function* () {
|
|
|
60
83
|
}
|
|
61
84
|
// Repo is bind-mounted — discover branch directly
|
|
62
85
|
resolvedBranch = (yield* execOkWithGitTimeout(sandbox, "git rev-parse --abbrev-ref HEAD", { cwd: sandboxRepoDir })).stdout.trim();
|
|
63
|
-
|
|
64
|
-
|
|
86
|
+
// Run sandbox.onSandboxReady and host.onSandboxReady in parallel
|
|
87
|
+
const sandboxHooks = hooks?.sandbox?.onSandboxReady;
|
|
88
|
+
const hostOnSandboxReady = hooks?.host?.onSandboxReady;
|
|
89
|
+
if (sandboxHooks?.length) {
|
|
90
|
+
for (const hook of sandboxHooks) {
|
|
65
91
|
message(hook.command);
|
|
66
92
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
93
|
+
}
|
|
94
|
+
if (hostOnSandboxReady?.length) {
|
|
95
|
+
for (const hook of hostOnSandboxReady) {
|
|
96
|
+
message(`[host] ${hook.command}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const sandboxHookEffects = (sandboxHooks ?? []).map((hook) => execOk(sandbox, hook.command, {
|
|
100
|
+
cwd: sandboxRepoDir,
|
|
101
|
+
sudo: hook.sudo,
|
|
102
|
+
}).pipe(withTimeout(HOOK_TIMEOUT_MS, () => new HookTimeoutError({
|
|
103
|
+
message: `Hook '${hook.command}' timed out after ${HOOK_TIMEOUT_MS}ms`,
|
|
104
|
+
timeoutMs: HOOK_TIMEOUT_MS,
|
|
105
|
+
command: hook.command,
|
|
106
|
+
}))));
|
|
107
|
+
const hostHookEffects = (hostOnSandboxReady ?? []).map((hook) => Effect.tryPromise({
|
|
108
|
+
try: () => execAsync(hook.command, {
|
|
109
|
+
cwd: hostSideWorktreePath,
|
|
110
|
+
}),
|
|
111
|
+
catch: (err) => new ExecError({
|
|
73
112
|
command: hook.command,
|
|
74
|
-
|
|
113
|
+
message: `Host hook failed: ${hook.command}\n${err instanceof Error ? err.message : String(err)}`,
|
|
114
|
+
}),
|
|
115
|
+
}).pipe(withTimeout(HOOK_TIMEOUT_MS, () => new HookTimeoutError({
|
|
116
|
+
message: `Host hook '${hook.command}' timed out after ${HOOK_TIMEOUT_MS}ms`,
|
|
117
|
+
timeoutMs: HOOK_TIMEOUT_MS,
|
|
118
|
+
command: hook.command,
|
|
119
|
+
}))));
|
|
120
|
+
const allOnSandboxReady = [...sandboxHookEffects, ...hostHookEffects];
|
|
121
|
+
if (allOnSandboxReady.length > 0) {
|
|
122
|
+
yield* Effect.all(allOnSandboxReady, {
|
|
123
|
+
concurrency: "unbounded",
|
|
124
|
+
});
|
|
75
125
|
}
|
|
76
126
|
}));
|
|
77
127
|
const targetBranch = branch ?? resolvedBranch;
|
|
78
|
-
// For host-side git operations in worktree mode, use hostWorktreePath
|
|
79
|
-
// (the real path on the host) instead of sandboxRepoDir (which may be a sandbox path
|
|
80
|
-
// like /home/agent/workspace that doesn't exist on the host).
|
|
81
|
-
const hostSideWorktreePath = hostWorktreePath ?? sandboxRepoDir;
|
|
82
128
|
// Record base HEAD from the host worktree (not the sandbox).
|
|
83
129
|
// For bind-mount providers, these are the same. For isolated providers,
|
|
84
130
|
// the host-side SHA is the correct baseline for git rev-list after applyToHost
|