@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.
Files changed (104) hide show
  1. package/README.md +152 -27
  2. package/dist/CopyToWorktree.d.ts +9 -0
  3. package/dist/CopyToWorktree.d.ts.map +1 -0
  4. package/dist/{CopyToWorkspace.js → CopyToWorktree.js} +9 -3
  5. package/dist/CopyToWorktree.js.map +1 -0
  6. package/dist/DockerLifecycle.d.ts +2 -0
  7. package/dist/DockerLifecycle.d.ts.map +1 -1
  8. package/dist/DockerLifecycle.js +7 -0
  9. package/dist/DockerLifecycle.js.map +1 -1
  10. package/dist/ErrorHandler.d.ts.map +1 -1
  11. package/dist/ErrorHandler.js +20 -2
  12. package/dist/ErrorHandler.js.map +1 -1
  13. package/dist/InitService.d.ts +6 -1
  14. package/dist/InitService.d.ts.map +1 -1
  15. package/dist/InitService.js +90 -56
  16. package/dist/InitService.js.map +1 -1
  17. package/dist/MountConfig.d.ts +13 -2
  18. package/dist/MountConfig.d.ts.map +1 -1
  19. package/dist/Orchestrator.d.ts +1 -1
  20. package/dist/Orchestrator.d.ts.map +1 -1
  21. package/dist/Orchestrator.js +6 -7
  22. package/dist/Orchestrator.js.map +1 -1
  23. package/dist/PromptPreprocessor.d.ts +2 -2
  24. package/dist/PromptPreprocessor.d.ts.map +1 -1
  25. package/dist/PromptPreprocessor.js +7 -2
  26. package/dist/PromptPreprocessor.js.map +1 -1
  27. package/dist/SandboxFactory.d.ts +7 -9
  28. package/dist/SandboxFactory.d.ts.map +1 -1
  29. package/dist/SandboxFactory.js +21 -23
  30. package/dist/SandboxFactory.js.map +1 -1
  31. package/dist/SandboxLifecycle.d.ts.map +1 -1
  32. package/dist/SandboxLifecycle.js +33 -9
  33. package/dist/SandboxLifecycle.js.map +1 -1
  34. package/dist/SandboxProvider.d.ts +7 -7
  35. package/dist/SandboxProvider.d.ts.map +1 -1
  36. package/dist/WorktreeManager.d.ts +3 -3
  37. package/dist/WorktreeManager.d.ts.map +1 -1
  38. package/dist/WorktreeManager.js +14 -3
  39. package/dist/WorktreeManager.js.map +1 -1
  40. package/dist/createSandbox.d.ts +24 -1
  41. package/dist/createSandbox.d.ts.map +1 -1
  42. package/dist/createSandbox.js +227 -131
  43. package/dist/createSandbox.js.map +1 -1
  44. package/dist/createWorktree.d.ts +121 -0
  45. package/dist/createWorktree.d.ts.map +1 -0
  46. package/dist/createWorktree.js +314 -0
  47. package/dist/createWorktree.js.map +1 -0
  48. package/dist/errors.d.ts +101 -6
  49. package/dist/errors.d.ts.map +1 -1
  50. package/dist/errors.js +38 -3
  51. package/dist/errors.js.map +1 -1
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +1 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/interactive.d.ts +2 -2
  57. package/dist/interactive.d.ts.map +1 -1
  58. package/dist/interactive.js +59 -48
  59. package/dist/interactive.js.map +1 -1
  60. package/dist/run.d.ts +1 -1
  61. package/dist/run.d.ts.map +1 -1
  62. package/dist/run.js +5 -5
  63. package/dist/run.js.map +1 -1
  64. package/dist/sandboxes/daytona.js +4 -4
  65. package/dist/sandboxes/daytona.js.map +1 -1
  66. package/dist/sandboxes/docker.d.ts +9 -0
  67. package/dist/sandboxes/docker.d.ts.map +1 -1
  68. package/dist/sandboxes/docker.js +15 -5
  69. package/dist/sandboxes/docker.js.map +1 -1
  70. package/dist/sandboxes/no-sandbox.js +4 -4
  71. package/dist/sandboxes/no-sandbox.js.map +1 -1
  72. package/dist/sandboxes/podman.d.ts +9 -0
  73. package/dist/sandboxes/podman.d.ts.map +1 -1
  74. package/dist/sandboxes/podman.js +21 -5
  75. package/dist/sandboxes/podman.js.map +1 -1
  76. package/dist/sandboxes/test-isolated.js +5 -5
  77. package/dist/sandboxes/test-isolated.js.map +1 -1
  78. package/dist/sandboxes/vercel.js +7 -7
  79. package/dist/sandboxes/vercel.js.map +1 -1
  80. package/dist/startSandbox.d.ts +7 -6
  81. package/dist/startSandbox.d.ts.map +1 -1
  82. package/dist/startSandbox.js +38 -19
  83. package/dist/startSandbox.js.map +1 -1
  84. package/dist/syncIn.js +7 -7
  85. package/dist/syncIn.js.map +1 -1
  86. package/dist/syncOut.js +6 -6
  87. package/dist/syncOut.js.map +1 -1
  88. package/dist/templates/parallel-planner/implement-prompt.md +2 -2
  89. package/dist/templates/parallel-planner/main.mts +2 -6
  90. package/dist/templates/parallel-planner/merge-prompt.md +5 -1
  91. package/dist/templates/parallel-planner-with-review/implement-prompt.md +2 -2
  92. package/dist/templates/parallel-planner-with-review/main.mts +28 -62
  93. package/dist/templates/parallel-planner-with-review/merge-prompt.md +5 -1
  94. package/dist/templates/sequential-reviewer/main.mts +3 -3
  95. package/dist/templates/simple-loop/main.mts +2 -2
  96. package/package.json +1 -1
  97. package/dist/CopyToWorkspace.d.ts +0 -8
  98. package/dist/CopyToWorkspace.d.ts.map +0 -1
  99. package/dist/CopyToWorkspace.js.map +0 -1
  100. package/dist/templates/blank/.env.example +0 -5
  101. package/dist/templates/parallel-planner/.env.example +0 -5
  102. package/dist/templates/parallel-planner-with-review/.env.example +0 -5
  103. package/dist/templates/sequential-reviewer/.env.example +0 -5
  104. package/dist/templates/simple-loop/.env.example +0 -5
@@ -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, SANDBOX_WORKSPACE_DIR, resolveGitMounts, } from "./SandboxFactory.js";
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 { copyToWorkspace } from "./CopyToWorkspace.js";
17
+ import { copyToWorktree } from "./CopyToWorktree.js";
18
18
  /**
19
- * Eagerly creates a git worktree on the provided explicit branch and starts
20
- * a sandbox with the worktree bind-mounted. Returns a Sandbox handle that
21
- * can be reused across multiple `run()` calls.
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
- export const createSandbox = async (options) => {
24
- const hostRepoDir = options._test?.hostRepoDir ?? process.cwd();
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
- sandboxWorkspacePath: sandboxRepoDir,
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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"}