@ai-hero/sandcastle 0.4.6 → 0.4.8
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 +152 -27
- package/dist/CopyToWorktree.d.ts +9 -0
- package/dist/CopyToWorktree.d.ts.map +1 -0
- package/dist/{CopyToWorkspace.js → CopyToWorktree.js} +9 -3
- package/dist/CopyToWorktree.js.map +1 -0
- package/dist/DockerLifecycle.d.ts +2 -0
- package/dist/DockerLifecycle.d.ts.map +1 -1
- package/dist/DockerLifecycle.js +7 -0
- package/dist/DockerLifecycle.js.map +1 -1
- package/dist/ErrorHandler.d.ts.map +1 -1
- package/dist/ErrorHandler.js +20 -2
- package/dist/ErrorHandler.js.map +1 -1
- package/dist/InitService.d.ts +6 -1
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +90 -56
- package/dist/InitService.js.map +1 -1
- package/dist/MountConfig.d.ts +13 -2
- package/dist/MountConfig.d.ts.map +1 -1
- package/dist/Orchestrator.d.ts +1 -1
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +6 -7
- package/dist/Orchestrator.js.map +1 -1
- package/dist/PromptPreprocessor.d.ts +2 -2
- package/dist/PromptPreprocessor.d.ts.map +1 -1
- package/dist/PromptPreprocessor.js +7 -2
- package/dist/PromptPreprocessor.js.map +1 -1
- package/dist/SandboxFactory.d.ts +7 -9
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +21 -23
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/SandboxLifecycle.d.ts.map +1 -1
- package/dist/SandboxLifecycle.js +33 -9
- package/dist/SandboxLifecycle.js.map +1 -1
- package/dist/SandboxProvider.d.ts +7 -7
- package/dist/SandboxProvider.d.ts.map +1 -1
- package/dist/WorktreeManager.d.ts +3 -3
- package/dist/WorktreeManager.d.ts.map +1 -1
- package/dist/WorktreeManager.js +14 -3
- package/dist/WorktreeManager.js.map +1 -1
- package/dist/createSandbox.d.ts +24 -1
- package/dist/createSandbox.d.ts.map +1 -1
- package/dist/createSandbox.js +227 -131
- package/dist/createSandbox.js.map +1 -1
- package/dist/createWorktree.d.ts +121 -0
- package/dist/createWorktree.d.ts.map +1 -0
- package/dist/createWorktree.js +314 -0
- package/dist/createWorktree.js.map +1 -0
- package/dist/errors.d.ts +101 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +38 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -0
- 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 +2 -2
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +59 -48
- package/dist/interactive.js.map +1 -1
- package/dist/run.d.ts +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +5 -5
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/daytona.js +4 -4
- package/dist/sandboxes/daytona.js.map +1 -1
- package/dist/sandboxes/docker.d.ts +9 -0
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +15 -5
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/no-sandbox.js +4 -4
- package/dist/sandboxes/no-sandbox.js.map +1 -1
- package/dist/sandboxes/podman.d.ts +9 -0
- package/dist/sandboxes/podman.d.ts.map +1 -1
- package/dist/sandboxes/podman.js +21 -5
- package/dist/sandboxes/podman.js.map +1 -1
- package/dist/sandboxes/test-isolated.js +5 -5
- package/dist/sandboxes/test-isolated.js.map +1 -1
- package/dist/sandboxes/vercel.js +7 -7
- package/dist/sandboxes/vercel.js.map +1 -1
- package/dist/startSandbox.d.ts +7 -6
- package/dist/startSandbox.d.ts.map +1 -1
- package/dist/startSandbox.js +38 -19
- package/dist/startSandbox.js.map +1 -1
- package/dist/syncIn.js +7 -7
- package/dist/syncIn.js.map +1 -1
- package/dist/syncOut.js +6 -6
- package/dist/syncOut.js.map +1 -1
- package/dist/templates/parallel-planner/implement-prompt.md +2 -2
- package/dist/templates/parallel-planner/main.mts +2 -6
- package/dist/templates/parallel-planner/merge-prompt.md +5 -1
- package/dist/templates/parallel-planner-with-review/implement-prompt.md +2 -2
- package/dist/templates/parallel-planner-with-review/main.mts +28 -62
- package/dist/templates/parallel-planner-with-review/merge-prompt.md +5 -1
- package/dist/templates/sequential-reviewer/main.mts +3 -3
- package/dist/templates/simple-loop/main.mts +2 -2
- package/package.json +1 -1
- package/dist/CopyToWorkspace.d.ts +0 -8
- package/dist/CopyToWorkspace.d.ts.map +0 -1
- package/dist/CopyToWorkspace.js.map +0 -1
- package/dist/templates/blank/.env.example +0 -5
- package/dist/templates/parallel-planner/.env.example +0 -5
- package/dist/templates/parallel-planner-with-review/.env.example +0 -5
- package/dist/templates/sequential-reviewer/.env.example +0 -5
- package/dist/templates/simple-loop/.env.example +0 -5
package/dist/createSandbox.js
CHANGED
|
@@ -10,132 +10,25 @@ import { resolvePrompt } from "./PromptResolver.js";
|
|
|
10
10
|
import { preprocessPrompt } from "./PromptPreprocessor.js";
|
|
11
11
|
import { buildLogFilename, printFileDisplayStartup } from "./run.js";
|
|
12
12
|
import { withSandboxLifecycle } from "./SandboxLifecycle.js";
|
|
13
|
-
import { Sandbox as SandboxTag, SandboxFactory,
|
|
13
|
+
import { Sandbox as SandboxTag, SandboxFactory, SANDBOX_REPO_DIR, resolveGitMounts, } from "./SandboxFactory.js";
|
|
14
14
|
import { startSandbox } from "./startSandbox.js";
|
|
15
15
|
import { syncOut } from "./syncOut.js";
|
|
16
16
|
import * as WorktreeManager from "./WorktreeManager.js";
|
|
17
|
-
import {
|
|
17
|
+
import { copyToWorktree } from "./CopyToWorktree.js";
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* @internal Builds a Sandbox handle with run() and interactive() methods.
|
|
20
|
+
* The close callback controls teardown behavior — top-level createSandbox()
|
|
21
|
+
* cleans up both container and worktree, while worktree-backed sandboxes
|
|
22
|
+
* only tear down the container.
|
|
22
23
|
*/
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const { branch } = options;
|
|
26
|
-
const isTestMode = !!options._test?.buildSandboxLayer;
|
|
27
|
-
// 1. Prune stale worktrees + create worktree on the explicit branch
|
|
28
|
-
const worktreeInfo = await Effect.runPromise(WorktreeManager.pruneStale(hostRepoDir)
|
|
29
|
-
.pipe(Effect.catchAll(() => Effect.void))
|
|
30
|
-
.pipe(Effect.andThen(WorktreeManager.create(hostRepoDir, {
|
|
31
|
-
branch,
|
|
32
|
-
throwOnDuplicateWorktree: options.throwOnDuplicateWorktree,
|
|
33
|
-
})))
|
|
34
|
-
.pipe(Effect.provide(NodeContext.layer)));
|
|
35
|
-
const worktreePath = worktreeInfo.path;
|
|
36
|
-
// 2. Copy files if requested (bind-mount only; isolated providers handle this in startSandbox)
|
|
37
|
-
if (options.copyToWorkspace &&
|
|
38
|
-
options.copyToWorkspace.length > 0 &&
|
|
39
|
-
options.sandbox.tag !== "isolated") {
|
|
40
|
-
await Effect.runPromise(copyToWorkspace(options.copyToWorkspace, hostRepoDir, worktreePath));
|
|
41
|
-
}
|
|
42
|
-
// 3. Start sandbox via provider or local sandbox layer (test mode)
|
|
43
|
-
let providerHandle;
|
|
44
|
-
let sandboxLayer;
|
|
45
|
-
let sandboxRepoDir;
|
|
46
|
-
const isIsolated = options.sandbox.tag === "isolated";
|
|
47
|
-
if (isTestMode) {
|
|
48
|
-
sandboxLayer = options._test.buildSandboxLayer(worktreePath);
|
|
49
|
-
sandboxRepoDir = worktreePath;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
// Provider mode: delegate to the shared startSandbox helper
|
|
53
|
-
const resolvedEnv = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
|
|
54
|
-
const env = mergeProviderEnv({
|
|
55
|
-
resolvedEnv,
|
|
56
|
-
agentProviderEnv: {},
|
|
57
|
-
sandboxProviderEnv: options.sandbox.env,
|
|
58
|
-
});
|
|
59
|
-
const provider = options.sandbox;
|
|
60
|
-
let startEffect;
|
|
61
|
-
if (provider.tag === "isolated") {
|
|
62
|
-
startEffect = startSandbox({
|
|
63
|
-
provider,
|
|
64
|
-
hostRepoDir: worktreePath,
|
|
65
|
-
env,
|
|
66
|
-
copyPaths: options.copyToWorkspace,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
startEffect = resolveGitMounts(join(hostRepoDir, ".git")).pipe(Effect.provide(NodeFileSystem.layer), Effect.catchAll(() => Effect.succeed([])), Effect.flatMap((gitMounts) => startSandbox({
|
|
71
|
-
provider,
|
|
72
|
-
hostRepoDir,
|
|
73
|
-
env,
|
|
74
|
-
worktreeOrRepoPath: worktreePath,
|
|
75
|
-
gitMounts,
|
|
76
|
-
workspaceDir: SANDBOX_WORKSPACE_DIR,
|
|
77
|
-
})));
|
|
78
|
-
}
|
|
79
|
-
const startResult = await Effect.runPromise(startEffect);
|
|
80
|
-
providerHandle = startResult.handle;
|
|
81
|
-
sandboxLayer = startResult.sandboxLayer;
|
|
82
|
-
sandboxRepoDir = startResult.workspacePath;
|
|
83
|
-
}
|
|
84
|
-
// 4. Run onSandboxReady hooks
|
|
85
|
-
if (options.hooks?.onSandboxReady?.length) {
|
|
86
|
-
await Effect.runPromise(Effect.gen(function* () {
|
|
87
|
-
const sandbox = yield* SandboxTag;
|
|
88
|
-
yield* sandbox.exec(`git config --global --add safe.directory "${sandboxRepoDir}"`);
|
|
89
|
-
yield* Effect.all(options.hooks.onSandboxReady.map((hook) => sandbox.exec(hook.command, {
|
|
90
|
-
cwd: sandboxRepoDir,
|
|
91
|
-
sudo: hook.sudo,
|
|
92
|
-
})), { concurrency: "unbounded" });
|
|
93
|
-
}).pipe(Effect.provide(sandboxLayer)));
|
|
94
|
-
}
|
|
95
|
-
// 5. Build applyToHost callback (once, reused across runs)
|
|
96
|
-
const applyToHost = isIsolated && providerHandle
|
|
97
|
-
? () => syncOut(worktreePath, providerHandle)
|
|
98
|
-
: () => Effect.void;
|
|
99
|
-
// 6. Set up signal handlers
|
|
100
|
-
let closed = false;
|
|
101
|
-
const forceCleanup = () => {
|
|
102
|
-
console.error(`\nWorktree preserved at ${worktreePath}`);
|
|
103
|
-
console.error(` To review: cd ${worktreePath}`);
|
|
104
|
-
console.error(` To clean up: git worktree remove --force ${worktreePath}`);
|
|
105
|
-
};
|
|
106
|
-
const onSignal = () => {
|
|
107
|
-
forceCleanup();
|
|
108
|
-
process.exit(1);
|
|
109
|
-
};
|
|
110
|
-
process.on("SIGINT", onSignal);
|
|
111
|
-
process.on("SIGTERM", onSignal);
|
|
112
|
-
// 7. Build close function
|
|
113
|
-
const doClose = async () => {
|
|
114
|
-
if (closed)
|
|
115
|
-
return { preservedWorktreePath: undefined };
|
|
116
|
-
closed = true;
|
|
117
|
-
// Close provider handle
|
|
118
|
-
if (providerHandle) {
|
|
119
|
-
await providerHandle.close();
|
|
120
|
-
}
|
|
121
|
-
// Check for uncommitted changes
|
|
122
|
-
const isDirty = await Effect.runPromise(WorktreeManager.hasUncommittedChanges(worktreePath).pipe(Effect.catchAll(() => Effect.succeed(false))));
|
|
123
|
-
if (isDirty) {
|
|
124
|
-
return { preservedWorktreePath: worktreePath };
|
|
125
|
-
}
|
|
126
|
-
// Remove worktree
|
|
127
|
-
await Effect.runPromise(WorktreeManager.remove(worktreePath).pipe(Effect.catchAll(() => Effect.void)));
|
|
128
|
-
return { preservedWorktreePath: undefined };
|
|
129
|
-
};
|
|
130
|
-
// 8. Return the Sandbox handle
|
|
24
|
+
const buildSandboxHandle = (ctx, close) => {
|
|
25
|
+
const { branch, worktreePath, hostRepoDir, sandboxRepoDir, sandboxLayer, providerHandle, applyToHost, } = ctx;
|
|
131
26
|
const sandboxHandle = {
|
|
132
27
|
branch,
|
|
133
|
-
worktreePath,
|
|
28
|
+
worktreePath: worktreePath,
|
|
134
29
|
run: async (runOptions) => {
|
|
135
30
|
const { agent: provider, prompt, promptFile, maxIterations = 1, } = runOptions;
|
|
136
|
-
// Resolve prompt
|
|
137
31
|
const rawPrompt = await Effect.runPromise(resolvePrompt({ prompt, promptFile }).pipe(Effect.provide(NodeContext.layer)));
|
|
138
|
-
// Resolve prompt arguments
|
|
139
32
|
const userArgs = runOptions.promptArgs ?? {};
|
|
140
33
|
const currentHostBranch = await Effect.runPromise(WorktreeManager.getCurrentBranch(hostRepoDir));
|
|
141
34
|
const displayRef = Ref.unsafeMake([]);
|
|
@@ -150,7 +43,6 @@ export const createSandbox = async (options) => {
|
|
|
150
43
|
const builtInArgKeysSet = new Set(BUILT_IN_PROMPT_ARG_KEYS);
|
|
151
44
|
return yield* substitutePromptArgs(rawPrompt, effectiveArgs, builtInArgKeysSet);
|
|
152
45
|
}).pipe(Effect.provide(silentDisplayLayer)));
|
|
153
|
-
// Resolve logging
|
|
154
46
|
const resolvedLogging = runOptions.logging ?? {
|
|
155
47
|
type: "file",
|
|
156
48
|
path: join(hostRepoDir, ".sandcastle", "logs", buildLogFilename(branch, undefined, runOptions.name)),
|
|
@@ -165,11 +57,10 @@ export const createSandbox = async (options) => {
|
|
|
165
57
|
return Layer.provide(FileDisplay.layer(resolvedLogging.path), NodeFileSystem.layer);
|
|
166
58
|
})()
|
|
167
59
|
: silentDisplayLayer;
|
|
168
|
-
// Build a SandboxFactory that reuses the existing sandbox
|
|
169
60
|
const reuseFactoryLayer = Layer.succeed(SandboxFactory, {
|
|
170
61
|
withSandbox: (makeEffect) => makeEffect({
|
|
171
62
|
hostWorktreePath: worktreePath,
|
|
172
|
-
|
|
63
|
+
sandboxRepoPath: sandboxRepoDir,
|
|
173
64
|
applyToHost,
|
|
174
65
|
}).pipe(Effect.provide(sandboxLayer), Effect.map((value) => ({
|
|
175
66
|
value,
|
|
@@ -201,20 +92,16 @@ export const createSandbox = async (options) => {
|
|
|
201
92
|
},
|
|
202
93
|
interactive: async (interactiveOptions) => {
|
|
203
94
|
const { agent: provider, prompt, promptFile } = interactiveOptions;
|
|
204
|
-
// Validate buildInteractiveArgs is available
|
|
205
95
|
if (!provider.buildInteractiveArgs) {
|
|
206
96
|
throw new Error(`Agent provider "${provider.name}" does not support buildInteractiveArgs, required for interactive sessions.`);
|
|
207
97
|
}
|
|
208
|
-
// Validate interactiveExec is available on the handle
|
|
209
98
|
if (!providerHandle?.interactiveExec) {
|
|
210
99
|
throw new Error(`Sandbox provider does not support interactiveExec. ` +
|
|
211
100
|
`The provider must implement the optional interactiveExec method to use interactive().`);
|
|
212
101
|
}
|
|
213
102
|
const interactiveExecFn = providerHandle.interactiveExec.bind(providerHandle);
|
|
214
103
|
const lifecycleResult = await Effect.runPromise(Effect.gen(function* () {
|
|
215
|
-
// Resolve prompt
|
|
216
104
|
const rawPrompt = yield* resolvePrompt({ prompt, promptFile });
|
|
217
|
-
// Resolve prompt arguments
|
|
218
105
|
const userArgs = interactiveOptions.promptArgs ?? {};
|
|
219
106
|
const currentHostBranch = yield* WorktreeManager.getCurrentBranch(hostRepoDir);
|
|
220
107
|
yield* validateNoBuiltInArgOverride(userArgs);
|
|
@@ -225,7 +112,6 @@ export const createSandbox = async (options) => {
|
|
|
225
112
|
};
|
|
226
113
|
const builtInArgKeysSet = new Set(BUILT_IN_PROMPT_ARG_KEYS);
|
|
227
114
|
const resolvedPrompt = yield* substitutePromptArgs(rawPrompt, effectiveArgs, builtInArgKeysSet);
|
|
228
|
-
// Run interactive session using withSandboxLifecycle for commit collection
|
|
229
115
|
return yield* withSandboxLifecycle({
|
|
230
116
|
hostRepoDir,
|
|
231
117
|
sandboxRepoDir,
|
|
@@ -233,9 +119,7 @@ export const createSandbox = async (options) => {
|
|
|
233
119
|
hostWorktreePath: worktreePath,
|
|
234
120
|
applyToHost,
|
|
235
121
|
}, (ctx) => Effect.gen(function* () {
|
|
236
|
-
// Preprocess prompt (expand !`command` shell expressions inside sandbox)
|
|
237
122
|
const fullPrompt = yield* preprocessPrompt(resolvedPrompt, ctx.sandbox, ctx.sandboxRepoDir);
|
|
238
|
-
// Build interactive args and run the session
|
|
239
123
|
const interactiveArgs = provider.buildInteractiveArgs({
|
|
240
124
|
prompt: fullPrompt,
|
|
241
125
|
dangerouslySkipPermissions: true,
|
|
@@ -254,15 +138,227 @@ export const createSandbox = async (options) => {
|
|
|
254
138
|
exitCode: lifecycleResult.result,
|
|
255
139
|
};
|
|
256
140
|
},
|
|
257
|
-
close: async () =>
|
|
258
|
-
process.removeListener("SIGINT", onSignal);
|
|
259
|
-
process.removeListener("SIGTERM", onSignal);
|
|
260
|
-
return doClose();
|
|
261
|
-
},
|
|
141
|
+
close: async () => close(),
|
|
262
142
|
[Symbol.asyncDispose]: async () => {
|
|
263
143
|
await sandboxHandle.close();
|
|
264
144
|
},
|
|
265
145
|
};
|
|
266
146
|
return sandboxHandle;
|
|
267
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* @internal Creates a sandbox backed by an existing worktree.
|
|
150
|
+
* Split ownership: close() tears down the container only, leaving the worktree intact.
|
|
151
|
+
* Used by Worktree.createSandbox().
|
|
152
|
+
*/
|
|
153
|
+
export const createSandboxFromWorktree = async (options) => {
|
|
154
|
+
const { branch, worktreePath, hostRepoDir } = options;
|
|
155
|
+
const isTestMode = !!options._test?.buildSandboxLayer;
|
|
156
|
+
// 1. Copy files if requested (bind-mount only)
|
|
157
|
+
if (options.copyToWorktree &&
|
|
158
|
+
options.copyToWorktree.length > 0 &&
|
|
159
|
+
options.sandbox.tag !== "isolated") {
|
|
160
|
+
await Effect.runPromise(copyToWorktree(options.copyToWorktree, hostRepoDir, worktreePath));
|
|
161
|
+
}
|
|
162
|
+
// 2. Start sandbox via provider or local sandbox layer (test mode)
|
|
163
|
+
let providerHandle;
|
|
164
|
+
let sandboxLayer;
|
|
165
|
+
let sandboxRepoDir;
|
|
166
|
+
const isIsolated = options.sandbox.tag === "isolated";
|
|
167
|
+
if (isTestMode) {
|
|
168
|
+
sandboxLayer = options._test.buildSandboxLayer(worktreePath);
|
|
169
|
+
sandboxRepoDir = worktreePath;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const resolvedEnv = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
|
|
173
|
+
const env = mergeProviderEnv({
|
|
174
|
+
resolvedEnv,
|
|
175
|
+
agentProviderEnv: {},
|
|
176
|
+
sandboxProviderEnv: options.sandbox.env,
|
|
177
|
+
});
|
|
178
|
+
const provider = options.sandbox;
|
|
179
|
+
let startEffect;
|
|
180
|
+
if (provider.tag === "isolated") {
|
|
181
|
+
startEffect = startSandbox({
|
|
182
|
+
provider,
|
|
183
|
+
hostRepoDir: worktreePath,
|
|
184
|
+
env,
|
|
185
|
+
copyPaths: options.copyToWorktree,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
startEffect = resolveGitMounts(join(hostRepoDir, ".git")).pipe(Effect.provide(NodeFileSystem.layer), Effect.catchAll(() => Effect.succeed([])), Effect.flatMap((gitMounts) => startSandbox({
|
|
190
|
+
provider,
|
|
191
|
+
hostRepoDir,
|
|
192
|
+
env,
|
|
193
|
+
worktreeOrRepoPath: worktreePath,
|
|
194
|
+
gitMounts,
|
|
195
|
+
repoDir: SANDBOX_REPO_DIR,
|
|
196
|
+
})));
|
|
197
|
+
}
|
|
198
|
+
const startResult = await Effect.runPromise(startEffect);
|
|
199
|
+
providerHandle = startResult.handle;
|
|
200
|
+
sandboxLayer = startResult.sandboxLayer;
|
|
201
|
+
sandboxRepoDir = startResult.worktreePath;
|
|
202
|
+
}
|
|
203
|
+
// 3. Run onSandboxReady hooks
|
|
204
|
+
if (options.hooks?.onSandboxReady?.length) {
|
|
205
|
+
await Effect.runPromise(Effect.gen(function* () {
|
|
206
|
+
const sandbox = yield* SandboxTag;
|
|
207
|
+
yield* sandbox.exec(`git config --global --add safe.directory "${sandboxRepoDir}"`);
|
|
208
|
+
yield* Effect.all(options.hooks.onSandboxReady.map((hook) => sandbox.exec(hook.command, {
|
|
209
|
+
cwd: sandboxRepoDir,
|
|
210
|
+
sudo: hook.sudo,
|
|
211
|
+
})), { concurrency: "unbounded" });
|
|
212
|
+
}).pipe(Effect.provide(sandboxLayer)));
|
|
213
|
+
}
|
|
214
|
+
// 4. Build applyToHost callback
|
|
215
|
+
const applyToHost = isIsolated && providerHandle
|
|
216
|
+
? () => syncOut(worktreePath, providerHandle)
|
|
217
|
+
: () => Effect.void;
|
|
218
|
+
// 5. Build and return sandbox handle — container-only close (worktree owns worktree)
|
|
219
|
+
let closed = false;
|
|
220
|
+
return buildSandboxHandle({
|
|
221
|
+
branch,
|
|
222
|
+
worktreePath,
|
|
223
|
+
hostRepoDir,
|
|
224
|
+
sandboxRepoDir,
|
|
225
|
+
sandboxLayer,
|
|
226
|
+
providerHandle,
|
|
227
|
+
applyToHost,
|
|
228
|
+
}, async () => {
|
|
229
|
+
if (closed)
|
|
230
|
+
return { preservedWorktreePath: undefined };
|
|
231
|
+
closed = true;
|
|
232
|
+
if (providerHandle)
|
|
233
|
+
await providerHandle.close();
|
|
234
|
+
return { preservedWorktreePath: undefined };
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Eagerly creates a git worktree on the provided explicit branch and starts
|
|
239
|
+
* a sandbox with the worktree bind-mounted. Returns a Sandbox handle that
|
|
240
|
+
* can be reused across multiple `run()` calls.
|
|
241
|
+
*/
|
|
242
|
+
export const createSandbox = async (options) => {
|
|
243
|
+
const hostRepoDir = options._test?.hostRepoDir ?? process.cwd();
|
|
244
|
+
const { branch } = options;
|
|
245
|
+
const isTestMode = !!options._test?.buildSandboxLayer;
|
|
246
|
+
// 1. Prune stale worktrees + create worktree on the explicit branch
|
|
247
|
+
const worktreeInfo = await Effect.runPromise(WorktreeManager.pruneStale(hostRepoDir)
|
|
248
|
+
.pipe(Effect.catchAll(() => Effect.void))
|
|
249
|
+
.pipe(Effect.andThen(WorktreeManager.create(hostRepoDir, {
|
|
250
|
+
branch,
|
|
251
|
+
throwOnDuplicateWorktree: options.throwOnDuplicateWorktree,
|
|
252
|
+
})))
|
|
253
|
+
.pipe(Effect.provide(NodeContext.layer)));
|
|
254
|
+
const worktreePath = worktreeInfo.path;
|
|
255
|
+
// 2. Copy files if requested (bind-mount only; isolated providers handle this in startSandbox)
|
|
256
|
+
if (options.copyToWorktree &&
|
|
257
|
+
options.copyToWorktree.length > 0 &&
|
|
258
|
+
options.sandbox.tag !== "isolated") {
|
|
259
|
+
await Effect.runPromise(copyToWorktree(options.copyToWorktree, hostRepoDir, worktreePath));
|
|
260
|
+
}
|
|
261
|
+
// 3. Start sandbox via provider or local sandbox layer (test mode)
|
|
262
|
+
let providerHandle;
|
|
263
|
+
let sandboxLayer;
|
|
264
|
+
let sandboxRepoDir;
|
|
265
|
+
const isIsolated = options.sandbox.tag === "isolated";
|
|
266
|
+
if (isTestMode) {
|
|
267
|
+
sandboxLayer = options._test.buildSandboxLayer(worktreePath);
|
|
268
|
+
sandboxRepoDir = worktreePath;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
// Provider mode: delegate to the shared startSandbox helper
|
|
272
|
+
const resolvedEnv = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
|
|
273
|
+
const env = mergeProviderEnv({
|
|
274
|
+
resolvedEnv,
|
|
275
|
+
agentProviderEnv: {},
|
|
276
|
+
sandboxProviderEnv: options.sandbox.env,
|
|
277
|
+
});
|
|
278
|
+
const provider = options.sandbox;
|
|
279
|
+
let startEffect;
|
|
280
|
+
if (provider.tag === "isolated") {
|
|
281
|
+
startEffect = startSandbox({
|
|
282
|
+
provider,
|
|
283
|
+
hostRepoDir: worktreePath,
|
|
284
|
+
env,
|
|
285
|
+
copyPaths: options.copyToWorktree,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
startEffect = resolveGitMounts(join(hostRepoDir, ".git")).pipe(Effect.provide(NodeFileSystem.layer), Effect.catchAll(() => Effect.succeed([])), Effect.flatMap((gitMounts) => startSandbox({
|
|
290
|
+
provider,
|
|
291
|
+
hostRepoDir,
|
|
292
|
+
env,
|
|
293
|
+
worktreeOrRepoPath: worktreePath,
|
|
294
|
+
gitMounts,
|
|
295
|
+
repoDir: SANDBOX_REPO_DIR,
|
|
296
|
+
})));
|
|
297
|
+
}
|
|
298
|
+
const startResult = await Effect.runPromise(startEffect);
|
|
299
|
+
providerHandle = startResult.handle;
|
|
300
|
+
sandboxLayer = startResult.sandboxLayer;
|
|
301
|
+
sandboxRepoDir = startResult.worktreePath;
|
|
302
|
+
}
|
|
303
|
+
// 4. Run onSandboxReady hooks
|
|
304
|
+
if (options.hooks?.onSandboxReady?.length) {
|
|
305
|
+
await Effect.runPromise(Effect.gen(function* () {
|
|
306
|
+
const sandbox = yield* SandboxTag;
|
|
307
|
+
yield* sandbox.exec(`git config --global --add safe.directory "${sandboxRepoDir}"`);
|
|
308
|
+
yield* Effect.all(options.hooks.onSandboxReady.map((hook) => sandbox.exec(hook.command, {
|
|
309
|
+
cwd: sandboxRepoDir,
|
|
310
|
+
sudo: hook.sudo,
|
|
311
|
+
})), { concurrency: "unbounded" });
|
|
312
|
+
}).pipe(Effect.provide(sandboxLayer)));
|
|
313
|
+
}
|
|
314
|
+
// 5. Build applyToHost callback (once, reused across runs)
|
|
315
|
+
const applyToHost = isIsolated && providerHandle
|
|
316
|
+
? () => syncOut(worktreePath, providerHandle)
|
|
317
|
+
: () => Effect.void;
|
|
318
|
+
// 6. Set up signal handlers
|
|
319
|
+
let closed = false;
|
|
320
|
+
const forceCleanup = () => {
|
|
321
|
+
console.error(`\nWorktree preserved at ${worktreePath}`);
|
|
322
|
+
console.error(` To review: cd ${worktreePath}`);
|
|
323
|
+
console.error(` To clean up: git worktree remove --force ${worktreePath}`);
|
|
324
|
+
};
|
|
325
|
+
const onSignal = () => {
|
|
326
|
+
forceCleanup();
|
|
327
|
+
process.exit(1);
|
|
328
|
+
};
|
|
329
|
+
process.on("SIGINT", onSignal);
|
|
330
|
+
process.on("SIGTERM", onSignal);
|
|
331
|
+
// 7. Build close function
|
|
332
|
+
const doClose = async () => {
|
|
333
|
+
if (closed)
|
|
334
|
+
return { preservedWorktreePath: undefined };
|
|
335
|
+
closed = true;
|
|
336
|
+
// Close provider handle
|
|
337
|
+
if (providerHandle) {
|
|
338
|
+
await providerHandle.close();
|
|
339
|
+
}
|
|
340
|
+
// Check for uncommitted changes
|
|
341
|
+
const isDirty = await Effect.runPromise(WorktreeManager.hasUncommittedChanges(worktreePath).pipe(Effect.catchAll(() => Effect.succeed(false))));
|
|
342
|
+
if (isDirty) {
|
|
343
|
+
return { preservedWorktreePath: worktreePath };
|
|
344
|
+
}
|
|
345
|
+
// Remove worktree
|
|
346
|
+
await Effect.runPromise(WorktreeManager.remove(worktreePath).pipe(Effect.catchAll(() => Effect.void)));
|
|
347
|
+
return { preservedWorktreePath: undefined };
|
|
348
|
+
};
|
|
349
|
+
// 8. Return the Sandbox handle
|
|
350
|
+
return buildSandboxHandle({
|
|
351
|
+
branch,
|
|
352
|
+
worktreePath,
|
|
353
|
+
hostRepoDir,
|
|
354
|
+
sandboxRepoDir,
|
|
355
|
+
sandboxLayer,
|
|
356
|
+
providerHandle,
|
|
357
|
+
applyToHost,
|
|
358
|
+
}, async () => {
|
|
359
|
+
process.removeListener("SIGINT", onSignal);
|
|
360
|
+
process.removeListener("SIGTERM", onSignal);
|
|
361
|
+
return doClose();
|
|
362
|
+
});
|
|
363
|
+
};
|
|
268
364
|
//# sourceMappingURL=createSandbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSandbox.js","sourceRoot":"","sources":["../src/createSandbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createSandbox.js","sourceRoot":"","sources":["../src/createSandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { AgentProvider } from "./AgentProvider.js";
|
|
2
|
+
import { type SandboxHooks } from "./SandboxLifecycle.js";
|
|
3
|
+
import type { AnySandboxProvider, SandboxProvider, MergeToHeadBranchStrategy, NamedBranchStrategy } from "./SandboxProvider.js";
|
|
4
|
+
import type { CloseResult, Sandbox } from "./createSandbox.js";
|
|
5
|
+
import type { InteractiveResult } from "./interactive.js";
|
|
6
|
+
import type { LoggingOption } from "./run.js";
|
|
7
|
+
import { type PromptArgs } from "./PromptArgumentSubstitution.js";
|
|
8
|
+
/** Branch strategies valid for createWorktree — head is excluded. */
|
|
9
|
+
export type WorktreeBranchStrategy = MergeToHeadBranchStrategy | NamedBranchStrategy;
|
|
10
|
+
export interface CreateWorktreeOptions {
|
|
11
|
+
/** Branch strategy — only 'branch' and 'merge-to-head' are allowed. */
|
|
12
|
+
readonly branchStrategy: WorktreeBranchStrategy;
|
|
13
|
+
/** Paths relative to the host repo root to copy into the worktree at creation time. */
|
|
14
|
+
readonly copyToWorktree?: string[];
|
|
15
|
+
/** @internal Test-only overrides. */
|
|
16
|
+
readonly _test?: {
|
|
17
|
+
readonly hostRepoDir?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface WorktreeInteractiveOptions {
|
|
21
|
+
/** Agent provider to use (e.g. claudeCode("claude-opus-4-6")) */
|
|
22
|
+
readonly agent: AgentProvider;
|
|
23
|
+
/** Sandbox provider (e.g. docker(), noSandbox()). Defaults to noSandbox(). */
|
|
24
|
+
readonly sandbox?: AnySandboxProvider;
|
|
25
|
+
/** Inline prompt string (mutually exclusive with promptFile). */
|
|
26
|
+
readonly prompt?: string;
|
|
27
|
+
/** Path to a prompt file (mutually exclusive with prompt). */
|
|
28
|
+
readonly promptFile?: string;
|
|
29
|
+
/** Optional name for the interactive session. */
|
|
30
|
+
readonly name?: string;
|
|
31
|
+
/** Hooks to run during sandbox lifecycle */
|
|
32
|
+
readonly hooks?: SandboxHooks;
|
|
33
|
+
/** Key-value map for {{KEY}} placeholder substitution in prompts */
|
|
34
|
+
readonly promptArgs?: PromptArgs;
|
|
35
|
+
/** Environment variables to inject into the sandbox. */
|
|
36
|
+
readonly env?: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
export interface WorktreeRunOptions {
|
|
39
|
+
/** Agent provider to use (e.g. claudeCode("claude-opus-4-6")) */
|
|
40
|
+
readonly agent: AgentProvider;
|
|
41
|
+
/** Sandbox provider (e.g. docker()). Required — AFK agents should always be sandboxed. */
|
|
42
|
+
readonly sandbox: SandboxProvider;
|
|
43
|
+
/** Inline prompt string (mutually exclusive with promptFile). */
|
|
44
|
+
readonly prompt?: string;
|
|
45
|
+
/** Path to a prompt file (mutually exclusive with prompt). */
|
|
46
|
+
readonly promptFile?: string;
|
|
47
|
+
/** Key-value map for {{KEY}} placeholder substitution in prompts */
|
|
48
|
+
readonly promptArgs?: PromptArgs;
|
|
49
|
+
/** Maximum iterations to run (default: 1). */
|
|
50
|
+
readonly maxIterations?: number;
|
|
51
|
+
/** Substring(s) the agent emits to stop the iteration loop early. */
|
|
52
|
+
readonly completionSignal?: string | string[];
|
|
53
|
+
/** Idle timeout in seconds. Default: 600. */
|
|
54
|
+
readonly idleTimeoutSeconds?: number;
|
|
55
|
+
/** Optional name for the run. */
|
|
56
|
+
readonly name?: string;
|
|
57
|
+
/** Logging mode. */
|
|
58
|
+
readonly logging?: LoggingOption;
|
|
59
|
+
/** Hooks to run during sandbox lifecycle */
|
|
60
|
+
readonly hooks?: SandboxHooks;
|
|
61
|
+
/** Environment variables to inject into the sandbox. */
|
|
62
|
+
readonly env?: Record<string, string>;
|
|
63
|
+
}
|
|
64
|
+
export interface WorktreeRunResult {
|
|
65
|
+
/** Number of iterations the agent completed during this run. */
|
|
66
|
+
readonly iterationsRun: number;
|
|
67
|
+
/** The matched completion signal string, or undefined if none fired. */
|
|
68
|
+
readonly completionSignal?: string;
|
|
69
|
+
/** Combined stdout output from all agent iterations. */
|
|
70
|
+
readonly stdout: string;
|
|
71
|
+
/** List of commits made by the agent during the run. */
|
|
72
|
+
readonly commits: {
|
|
73
|
+
sha: string;
|
|
74
|
+
}[];
|
|
75
|
+
/** The branch name the agent worked on. */
|
|
76
|
+
readonly branch: string;
|
|
77
|
+
/** Path to the log file, if logging was drained to a file. */
|
|
78
|
+
readonly logFilePath?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface WorktreeCreateSandboxOptions {
|
|
81
|
+
/** Sandbox provider (e.g. docker({ imageName: "sandcastle:myrepo" })). */
|
|
82
|
+
readonly sandbox: SandboxProvider;
|
|
83
|
+
/** One-time setup hooks to run when the sandbox is first created. */
|
|
84
|
+
readonly hooks?: {
|
|
85
|
+
readonly onSandboxReady?: ReadonlyArray<{
|
|
86
|
+
command: string;
|
|
87
|
+
sudo?: boolean;
|
|
88
|
+
}>;
|
|
89
|
+
};
|
|
90
|
+
/** Paths relative to the host repo root to copy into the worktree at creation time. */
|
|
91
|
+
readonly copyToWorktree?: string[];
|
|
92
|
+
/** @internal Test-only overrides to bypass the sandbox provider. */
|
|
93
|
+
readonly _test?: {
|
|
94
|
+
readonly buildSandboxLayer?: (sandboxDir: string) => import("effect").Layer.Layer<import("./SandboxFactory.js").Sandbox>;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export interface Worktree {
|
|
98
|
+
/** The branch the worktree is on. */
|
|
99
|
+
readonly branch: string;
|
|
100
|
+
/** Host path to the worktree (worktree). */
|
|
101
|
+
readonly worktreePath: string;
|
|
102
|
+
/** Run an AFK agent in this worktree with a required sandbox. */
|
|
103
|
+
run(options: WorktreeRunOptions): Promise<WorktreeRunResult>;
|
|
104
|
+
/** Run an interactive agent session in this worktree. */
|
|
105
|
+
interactive(options: WorktreeInteractiveOptions): Promise<InteractiveResult>;
|
|
106
|
+
/** Create a long-lived sandbox backed by this worktree's worktree. */
|
|
107
|
+
createSandbox(options: WorktreeCreateSandboxOptions): Promise<Sandbox>;
|
|
108
|
+
/** Clean up the worktree. Preserves worktree if dirty. */
|
|
109
|
+
close(): Promise<CloseResult>;
|
|
110
|
+
/** Auto cleanup via `await using`. */
|
|
111
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Creates a git worktree as an independent, first-class worktree.
|
|
115
|
+
* Returns a Worktree handle with close() and [Symbol.asyncDispose]().
|
|
116
|
+
*
|
|
117
|
+
* Only accepts 'branch' and 'merge-to-head' strategies — 'head' is a
|
|
118
|
+
* compile-time type error since head means no worktree.
|
|
119
|
+
*/
|
|
120
|
+
export declare const createWorktree: (options: CreateWorktreeOptions) => Promise<Worktree>;
|
|
121
|
+
//# sourceMappingURL=createWorktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorktree.d.ts","sourceRoot":"","sources":["../src/createWorktree.ts"],"names":[],"mappings":"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"}
|