@ai-hero/sandcastle 0.6.5 → 0.7.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.
Files changed (229) hide show
  1. package/README.md +137 -62
  2. package/dist/{MountConfig.d.ts → MountConfig-CmXclHA5.d.ts} +3 -2
  3. package/dist/{SandboxProvider.d.ts → SandboxProvider-EkSMuBp8.d.ts} +25 -39
  4. package/dist/chunk-52CIJF45.js +25569 -0
  5. package/dist/chunk-52CIJF45.js.map +1 -0
  6. package/dist/chunk-5VM5QZ26.js +26988 -0
  7. package/dist/chunk-5VM5QZ26.js.map +1 -0
  8. package/dist/chunk-72UVAC7B.js +99 -0
  9. package/dist/chunk-72UVAC7B.js.map +1 -0
  10. package/dist/chunk-BIWNFKGV.js +22 -0
  11. package/dist/chunk-BIWNFKGV.js.map +1 -0
  12. package/dist/chunk-NGBM7T3E.js +76 -0
  13. package/dist/chunk-NGBM7T3E.js.map +1 -0
  14. package/dist/chunk-NSFQW6ML.js +362 -0
  15. package/dist/chunk-NSFQW6ML.js.map +1 -0
  16. package/dist/index.d.ts +920 -22
  17. package/dist/index.js +3212 -9
  18. package/dist/index.js.map +1 -1
  19. package/dist/main.d.ts +0 -2
  20. package/dist/main.js +19349 -13
  21. package/dist/main.js.map +1 -1
  22. package/dist/mountUtils-CCA-bbpK.d.ts +25 -0
  23. package/dist/sandboxes/daytona.d.ts +8 -5
  24. package/dist/sandboxes/daytona.js +118 -124
  25. package/dist/sandboxes/daytona.js.map +1 -1
  26. package/dist/sandboxes/docker.d.ts +10 -8
  27. package/dist/sandboxes/docker.js +8 -255
  28. package/dist/sandboxes/docker.js.map +1 -1
  29. package/dist/sandboxes/no-sandbox.d.ts +7 -4
  30. package/dist/sandboxes/no-sandbox.js +6 -114
  31. package/dist/sandboxes/no-sandbox.js.map +1 -1
  32. package/dist/sandboxes/podman.d.ts +10 -8
  33. package/dist/sandboxes/podman.js +287 -297
  34. package/dist/sandboxes/podman.js.map +1 -1
  35. package/dist/sandboxes/vercel.d.ts +7 -4
  36. package/dist/sandboxes/vercel.js +144 -165
  37. package/dist/sandboxes/vercel.js.map +1 -1
  38. package/dist/templates/sequential-reviewer/implement-prompt.md +2 -2
  39. package/dist/templates/simple-loop/prompt.md +2 -2
  40. package/package.json +15 -14
  41. package/dist/AgentProvider.d.ts +0 -134
  42. package/dist/AgentProvider.d.ts.map +0 -1
  43. package/dist/AgentProvider.js +0 -647
  44. package/dist/AgentProvider.js.map +0 -1
  45. package/dist/AgentStreamEmitter.d.ts +0 -36
  46. package/dist/AgentStreamEmitter.d.ts.map +0 -1
  47. package/dist/AgentStreamEmitter.js +0 -21
  48. package/dist/AgentStreamEmitter.js.map +0 -1
  49. package/dist/CopyToWorktree.d.ts +0 -15
  50. package/dist/CopyToWorktree.d.ts.map +0 -1
  51. package/dist/CopyToWorktree.js +0 -60
  52. package/dist/CopyToWorktree.js.map +0 -1
  53. package/dist/Display.d.ts +0 -58
  54. package/dist/Display.d.ts.map +0 -1
  55. package/dist/Display.js +0 -142
  56. package/dist/Display.js.map +0 -1
  57. package/dist/DockerLifecycle.d.ts +0 -54
  58. package/dist/DockerLifecycle.d.ts.map +0 -1
  59. package/dist/DockerLifecycle.js +0 -123
  60. package/dist/DockerLifecycle.js.map +0 -1
  61. package/dist/EnvResolver.d.ts +0 -11
  62. package/dist/EnvResolver.d.ts.map +0 -1
  63. package/dist/EnvResolver.js +0 -63
  64. package/dist/EnvResolver.js.map +0 -1
  65. package/dist/ErrorHandler.d.ts +0 -15
  66. package/dist/ErrorHandler.d.ts.map +0 -1
  67. package/dist/ErrorHandler.js +0 -85
  68. package/dist/ErrorHandler.js.map +0 -1
  69. package/dist/InitService.d.ts +0 -92
  70. package/dist/InitService.d.ts.map +0 -1
  71. package/dist/InitService.js +0 -836
  72. package/dist/InitService.js.map +0 -1
  73. package/dist/MountConfig.d.ts.map +0 -1
  74. package/dist/MountConfig.js +0 -7
  75. package/dist/MountConfig.js.map +0 -1
  76. package/dist/Orchestrator.d.ts +0 -56
  77. package/dist/Orchestrator.d.ts.map +0 -1
  78. package/dist/Orchestrator.js +0 -293
  79. package/dist/Orchestrator.js.map +0 -1
  80. package/dist/Output.d.ts +0 -107
  81. package/dist/Output.d.ts.map +0 -1
  82. package/dist/Output.js +0 -95
  83. package/dist/Output.js.map +0 -1
  84. package/dist/PodmanLifecycle.d.ts +0 -17
  85. package/dist/PodmanLifecycle.d.ts.map +0 -1
  86. package/dist/PodmanLifecycle.js +0 -45
  87. package/dist/PodmanLifecycle.js.map +0 -1
  88. package/dist/PromptArgumentSubstitution.d.ts +0 -32
  89. package/dist/PromptArgumentSubstitution.d.ts.map +0 -1
  90. package/dist/PromptArgumentSubstitution.js +0 -104
  91. package/dist/PromptArgumentSubstitution.js.map +0 -1
  92. package/dist/PromptPreprocessor.d.ts +0 -15
  93. package/dist/PromptPreprocessor.d.ts.map +0 -1
  94. package/dist/PromptPreprocessor.js +0 -55
  95. package/dist/PromptPreprocessor.js.map +0 -1
  96. package/dist/PromptResolver.d.ts +0 -21
  97. package/dist/PromptResolver.d.ts.map +0 -1
  98. package/dist/PromptResolver.js +0 -27
  99. package/dist/PromptResolver.js.map +0 -1
  100. package/dist/RecoveryMessage.d.ts +0 -15
  101. package/dist/RecoveryMessage.d.ts.map +0 -1
  102. package/dist/RecoveryMessage.js +0 -81
  103. package/dist/RecoveryMessage.js.map +0 -1
  104. package/dist/SandboxFactory.d.ts +0 -90
  105. package/dist/SandboxFactory.d.ts.map +0 -1
  106. package/dist/SandboxFactory.js +0 -324
  107. package/dist/SandboxFactory.js.map +0 -1
  108. package/dist/SandboxLifecycle.d.ts +0 -65
  109. package/dist/SandboxLifecycle.d.ts.map +0 -1
  110. package/dist/SandboxLifecycle.js +0 -296
  111. package/dist/SandboxLifecycle.js.map +0 -1
  112. package/dist/SandboxProvider.d.ts.map +0 -1
  113. package/dist/SandboxProvider.js +0 -28
  114. package/dist/SandboxProvider.js.map +0 -1
  115. package/dist/SessionStore.d.ts +0 -110
  116. package/dist/SessionStore.d.ts.map +0 -1
  117. package/dist/SessionStore.js +0 -330
  118. package/dist/SessionStore.js.map +0 -1
  119. package/dist/TextDeltaBuffer.d.ts +0 -24
  120. package/dist/TextDeltaBuffer.d.ts.map +0 -1
  121. package/dist/TextDeltaBuffer.js +0 -68
  122. package/dist/TextDeltaBuffer.js.map +0 -1
  123. package/dist/WorktreeManager.d.ts +0 -79
  124. package/dist/WorktreeManager.d.ts.map +0 -1
  125. package/dist/WorktreeManager.js +0 -283
  126. package/dist/WorktreeManager.js.map +0 -1
  127. package/dist/boundedTail.d.ts +0 -48
  128. package/dist/boundedTail.d.ts.map +0 -1
  129. package/dist/boundedTail.js +0 -64
  130. package/dist/boundedTail.js.map +0 -1
  131. package/dist/cli.d.ts +0 -30
  132. package/dist/cli.d.ts.map +0 -1
  133. package/dist/cli.js +0 -340
  134. package/dist/cli.js.map +0 -1
  135. package/dist/createSandbox.d.ts +0 -154
  136. package/dist/createSandbox.d.ts.map +0 -1
  137. package/dist/createSandbox.js +0 -476
  138. package/dist/createSandbox.js.map +0 -1
  139. package/dist/createWorktree.d.ts +0 -154
  140. package/dist/createWorktree.d.ts.map +0 -1
  141. package/dist/createWorktree.js +0 -391
  142. package/dist/createWorktree.js.map +0 -1
  143. package/dist/errors.d.ts +0 -227
  144. package/dist/errors.d.ts.map +0 -1
  145. package/dist/errors.js +0 -81
  146. package/dist/errors.js.map +0 -1
  147. package/dist/extractStructuredOutput.d.ts +0 -23
  148. package/dist/extractStructuredOutput.d.ts.map +0 -1
  149. package/dist/extractStructuredOutput.js +0 -102
  150. package/dist/extractStructuredOutput.js.map +0 -1
  151. package/dist/index.d.ts.map +0 -1
  152. package/dist/interactive.d.ts +0 -74
  153. package/dist/interactive.d.ts.map +0 -1
  154. package/dist/interactive.js +0 -279
  155. package/dist/interactive.js.map +0 -1
  156. package/dist/main.d.ts.map +0 -1
  157. package/dist/mergeProviderEnv.d.ts +0 -13
  158. package/dist/mergeProviderEnv.d.ts.map +0 -1
  159. package/dist/mergeProviderEnv.js +0 -23
  160. package/dist/mergeProviderEnv.js.map +0 -1
  161. package/dist/mountUtils.d.ts +0 -146
  162. package/dist/mountUtils.d.ts.map +0 -1
  163. package/dist/mountUtils.js +0 -301
  164. package/dist/mountUtils.js.map +0 -1
  165. package/dist/raceAbortSignal.d.ts +0 -18
  166. package/dist/raceAbortSignal.d.ts.map +0 -1
  167. package/dist/raceAbortSignal.js +0 -32
  168. package/dist/raceAbortSignal.js.map +0 -1
  169. package/dist/resolveCwd.d.ts +0 -24
  170. package/dist/resolveCwd.d.ts.map +0 -1
  171. package/dist/resolveCwd.js +0 -32
  172. package/dist/resolveCwd.js.map +0 -1
  173. package/dist/resumePrecheck.d.ts +0 -26
  174. package/dist/resumePrecheck.d.ts.map +0 -1
  175. package/dist/resumePrecheck.js +0 -40
  176. package/dist/resumePrecheck.js.map +0 -1
  177. package/dist/run.d.ts +0 -216
  178. package/dist/run.d.ts.map +0 -1
  179. package/dist/run.js +0 -313
  180. package/dist/run.js.map +0 -1
  181. package/dist/sandboxExec.d.ts +0 -12
  182. package/dist/sandboxExec.d.ts.map +0 -1
  183. package/dist/sandboxExec.js +0 -26
  184. package/dist/sandboxExec.js.map +0 -1
  185. package/dist/sandboxes/daytona.d.ts.map +0 -1
  186. package/dist/sandboxes/docker.d.ts.map +0 -1
  187. package/dist/sandboxes/no-sandbox.d.ts.map +0 -1
  188. package/dist/sandboxes/podman.d.ts.map +0 -1
  189. package/dist/sandboxes/test-bind-mount.d.ts +0 -17
  190. package/dist/sandboxes/test-bind-mount.d.ts.map +0 -1
  191. package/dist/sandboxes/test-bind-mount.js +0 -92
  192. package/dist/sandboxes/test-bind-mount.js.map +0 -1
  193. package/dist/sandboxes/test-isolated.d.ts +0 -17
  194. package/dist/sandboxes/test-isolated.d.ts.map +0 -1
  195. package/dist/sandboxes/test-isolated.js +0 -98
  196. package/dist/sandboxes/test-isolated.js.map +0 -1
  197. package/dist/sandboxes/vercel.d.ts.map +0 -1
  198. package/dist/shutdownRegistry.d.ts +0 -30
  199. package/dist/shutdownRegistry.d.ts.map +0 -1
  200. package/dist/shutdownRegistry.js +0 -73
  201. package/dist/shutdownRegistry.js.map +0 -1
  202. package/dist/startSandbox.d.ts +0 -50
  203. package/dist/startSandbox.d.ts.map +0 -1
  204. package/dist/startSandbox.js +0 -117
  205. package/dist/startSandbox.js.map +0 -1
  206. package/dist/syncIn.d.ts +0 -24
  207. package/dist/syncIn.d.ts.map +0 -1
  208. package/dist/syncIn.js +0 -107
  209. package/dist/syncIn.js.map +0 -1
  210. package/dist/syncOut.d.ts +0 -27
  211. package/dist/syncOut.d.ts.map +0 -1
  212. package/dist/syncOut.js +0 -271
  213. package/dist/syncOut.js.map +0 -1
  214. package/dist/templates.d.ts +0 -2
  215. package/dist/templates.d.ts.map +0 -1
  216. package/dist/templates.js +0 -26
  217. package/dist/templates.js.map +0 -1
  218. package/dist/terminalCleanup.d.ts +0 -30
  219. package/dist/terminalCleanup.d.ts.map +0 -1
  220. package/dist/terminalCleanup.js +0 -37
  221. package/dist/terminalCleanup.js.map +0 -1
  222. package/dist/testSandbox.d.ts +0 -8
  223. package/dist/testSandbox.d.ts.map +0 -1
  224. package/dist/testSandbox.js +0 -109
  225. package/dist/testSandbox.js.map +0 -1
  226. package/dist/testSetup.d.ts +0 -2
  227. package/dist/testSetup.d.ts.map +0 -1
  228. package/dist/testSetup.js +0 -29
  229. package/dist/testSetup.js.map +0 -1
@@ -1,324 +0,0 @@
1
- import { Context, Effect, Exit, Layer } from "effect";
2
- import { FileSystem } from "@effect/platform";
3
- import { join, resolve } from "node:path";
4
- import { AgentError, AgentIdleTimeoutError, CopyError, ExecError, WorktreeError, } from "./errors.js";
5
- import * as WorktreeManager from "./WorktreeManager.js";
6
- import { copyToWorktree } from "./CopyToWorktree.js";
7
- import { Display } from "./Display.js";
8
- import { runHostHooks } from "./SandboxLifecycle.js";
9
- import { startSandbox } from "./startSandbox.js";
10
- import { syncOut } from "./syncOut.js";
11
- import { patchGitMountsForWindows } from "./mountUtils.js";
12
- export class Sandbox extends Context.Tag("Sandbox")() {
13
- }
14
- const getCopyIn = (handle) => {
15
- if ("copyIn" in handle) {
16
- return (hostPath, sandboxPath) => Effect.tryPromise({
17
- try: () => handle.copyIn(hostPath, sandboxPath),
18
- catch: (e) => new CopyError({
19
- message: `copyIn failed: ${e instanceof Error ? e.message : String(e)}`,
20
- }),
21
- });
22
- }
23
- if ("copyFileIn" in handle) {
24
- return (hostPath, sandboxPath) => Effect.tryPromise({
25
- try: () => handle.copyFileIn(hostPath, sandboxPath),
26
- catch: (e) => new CopyError({
27
- message: `copyFileIn failed: ${e instanceof Error ? e.message : String(e)}`,
28
- }),
29
- });
30
- }
31
- return () => Effect.fail(new CopyError({
32
- message: "copyIn is not supported for this sandbox provider",
33
- }));
34
- };
35
- /**
36
- * Wrap a Promise-based sandbox handle into an Effect-based SandboxService layer.
37
- * Delegates copyIn/copyFileOut to the handle when available.
38
- */
39
- export const makeSandboxLayerFromHandle = (handle) => Layer.succeed(Sandbox, {
40
- exec: (command, options) => Effect.tryPromise({
41
- try: () => handle.exec(command, options),
42
- catch: (e) => new ExecError({
43
- command,
44
- message: `exec failed: ${e instanceof Error ? e.message : String(e)}`,
45
- }),
46
- }),
47
- copyIn: getCopyIn(handle),
48
- copyFileOut: "copyFileOut" in handle
49
- ? (sandboxPath, hostPath) => Effect.tryPromise({
50
- try: () => handle.copyFileOut(sandboxPath, hostPath),
51
- catch: (e) => new CopyError({
52
- message: `copyFileOut failed: ${e instanceof Error ? e.message : String(e)}`,
53
- }),
54
- })
55
- : () => Effect.fail(new CopyError({
56
- message: "copyFileOut is not supported for this sandbox provider",
57
- })),
58
- });
59
- /** The mount point inside the sandbox where the project worktree is bound. */
60
- export const SANDBOX_REPO_DIR = "/home/agent/workspace";
61
- export class SandboxFactory extends Context.Tag("SandboxFactory")() {
62
- }
63
- export class SandboxConfig extends Context.Tag("SandboxConfig")() {
64
- }
65
- /**
66
- * Print a message to stderr about a preserved worktree, with review and cleanup instructions.
67
- */
68
- const printWorktreePreservedMessage = (worktreePath, reason) => {
69
- console.error(`\n${reason}`);
70
- console.error(` To review: cd ${worktreePath}`);
71
- console.error(` To clean up: git worktree remove --force ${worktreePath}`);
72
- };
73
- /**
74
- * Check for uncommitted changes and either preserve or remove the worktree.
75
- * Returns the preserved path if preserved, undefined if removed.
76
- */
77
- const cleanupWorktree = (worktreePath, exit) => WorktreeManager.hasUncommittedChanges(worktreePath).pipe(Effect.catchAll(() => Effect.succeed(false)), Effect.flatMap((isDirty) => {
78
- if (isDirty) {
79
- printWorktreePreservedMessage(worktreePath, Exit.isSuccess(exit)
80
- ? `Run succeeded but worktree has uncommitted changes at ${worktreePath}`
81
- : `Worktree preserved at ${worktreePath}`);
82
- return Effect.succeed(worktreePath);
83
- }
84
- if (!Exit.isSuccess(exit)) {
85
- console.error(`\nWorktree removed (no uncommitted changes)`);
86
- }
87
- return WorktreeManager.remove(worktreePath).pipe(Effect.map(() => undefined));
88
- }));
89
- /**
90
- * Attach the preserved worktree path to AgentIdleTimeoutError and AgentError so
91
- * programmatic callers can build on top of the preserved worktree.
92
- */
93
- const attachPreservedPath = (path, e) => {
94
- if (path !== undefined) {
95
- if (e instanceof AgentIdleTimeoutError) {
96
- return new AgentIdleTimeoutError({
97
- message: e.message,
98
- timeoutMs: e.timeoutMs,
99
- preservedWorktreePath: path,
100
- });
101
- }
102
- if (e instanceof AgentError) {
103
- return new AgentError({
104
- message: e.message,
105
- preservedWorktreePath: path,
106
- });
107
- }
108
- }
109
- return e;
110
- };
111
- /**
112
- * Resolves the git-related mounts needed for the sandbox.
113
- * Handles both normal repos (where .git is a directory) and worktrees
114
- * (where .git is a file pointing to the parent repo's .git/worktrees/<name>).
115
- */
116
- export const resolveGitMounts = (gitPath) => Effect.gen(function* () {
117
- const fs = yield* FileSystem.FileSystem;
118
- const stat = yield* fs.stat(gitPath);
119
- if (stat.type === "Directory") {
120
- return [{ hostPath: gitPath, sandboxPath: gitPath }];
121
- }
122
- // Worktree: .git is a file with "gitdir: <path>"
123
- const content = (yield* fs.readFileString(gitPath)).trim();
124
- const match = content.match(/^gitdir:\s*(.+)$/);
125
- if (!match) {
126
- // Unrecognized format — fall back to mounting the file as-is
127
- return [{ hostPath: gitPath, sandboxPath: gitPath }];
128
- }
129
- const gitdirPath = match[1];
130
- // gitdirPath is like /path/to/repo/.git/worktrees/<name>
131
- // Mount both the .git file and the parent .git directory
132
- const parentGitDir = resolve(gitdirPath, "..", "..");
133
- return [
134
- { hostPath: gitPath, sandboxPath: gitPath },
135
- { hostPath: parentGitDir, sandboxPath: parentGitDir },
136
- ];
137
- });
138
- export const WorktreeDockerSandboxFactory = {
139
- layer: Layer.effect(SandboxFactory, Effect.gen(function* () {
140
- const { env, hostRepoDir, copyToWorktree: copyPaths, name, sandboxProvider, branchStrategy, hooks, signal, timeouts, } = yield* SandboxConfig;
141
- const isHeadMode = branchStrategy.type === "head";
142
- const branch = branchStrategy.type === "branch" ? branchStrategy.branch : undefined;
143
- const baseBranch = branchStrategy.type === "branch"
144
- ? branchStrategy.baseBranch
145
- : undefined;
146
- const fileSystem = yield* FileSystem.FileSystem;
147
- const display = yield* Display;
148
- /** Prune stale worktrees (best-effort), then create a fresh one. */
149
- const pruneAndCreate = () => WorktreeManager.pruneStale(hostRepoDir).pipe(Effect.catchAll((e) => Effect.sync(() => {
150
- console.error("[sandcastle] Warning: failed to prune stale worktrees:", e.message);
151
- })), Effect.andThen(branch
152
- ? WorktreeManager.create(hostRepoDir, { branch, baseBranch })
153
- : WorktreeManager.create(hostRepoDir, { name })), Effect.provideService(FileSystem.FileSystem, fileSystem));
154
- return {
155
- withSandbox: (makeEffect) => {
156
- // No-sandbox providers: run directly on the host, no container or mounts.
157
- if (sandboxProvider.tag === "none") {
158
- let preservedPath;
159
- // Head mode: use hostRepoDir directly, no worktree.
160
- if (isHeadMode) {
161
- return (hooks?.host?.onWorktreeReady?.length
162
- ? runHostHooks(hooks.host.onWorktreeReady, hostRepoDir, signal)
163
- : Effect.void).pipe(Effect.andThen(Effect.acquireUseRelease(startSandbox({
164
- provider: sandboxProvider,
165
- hostRepoDir,
166
- env,
167
- worktreeOrRepoPath: hostRepoDir,
168
- }), ({ sandboxLayer, worktreePath, handle }) => makeEffect({
169
- hostWorktreePath: hostRepoDir,
170
- sandboxRepoPath: worktreePath,
171
- }).pipe(Effect.provide(sandboxLayer)), ({ handle }) => Effect.tryPromise({
172
- try: () => handle.close(),
173
- catch: () => undefined,
174
- }).pipe(Effect.orDie)).pipe(Effect.map((value) => ({
175
- value,
176
- preservedWorktreePath: undefined,
177
- })))));
178
- }
179
- // Worktree mode (merge-to-head or explicit branch).
180
- // Nested so the worktree is always cleaned up (outer release) even
181
- // when copying, hooks, or sandbox start fail. The provider handle is
182
- // closed by the inner release, which only runs once it exists.
183
- return Effect.acquireUseRelease(pruneAndCreate(), (worktreeInfo) => (copyPaths && copyPaths.length > 0
184
- ? display.spinner("Copying to worktree", copyToWorktree(copyPaths, hostRepoDir, worktreeInfo.path, timeouts?.copyToWorktreeMs))
185
- : Effect.succeed(undefined)).pipe(Effect.andThen(hooks?.host?.onWorktreeReady?.length
186
- ? runHostHooks(hooks.host.onWorktreeReady, worktreeInfo.path, signal)
187
- : Effect.void), Effect.andThen(Effect.acquireUseRelease(startSandbox({
188
- provider: sandboxProvider,
189
- hostRepoDir,
190
- env,
191
- worktreeOrRepoPath: worktreeInfo.path,
192
- }), ({ sandboxLayer, worktreePath }) => makeEffect({
193
- hostWorktreePath: worktreeInfo.path,
194
- sandboxRepoPath: worktreePath,
195
- }).pipe(Effect.provide(sandboxLayer)), ({ handle }) => Effect.tryPromise({
196
- try: () => handle.close(),
197
- catch: () => undefined,
198
- }).pipe(Effect.orDie)))), (worktreeInfo, exit) => cleanupWorktree(worktreeInfo.path, exit).pipe(Effect.tap((p) => {
199
- preservedPath = p;
200
- }), Effect.asVoid, Effect.orDie)).pipe(Effect.map((value) => ({
201
- value,
202
- preservedWorktreePath: preservedPath,
203
- })), Effect.mapError((e) => attachPreservedPath(preservedPath, e)));
204
- }
205
- // Isolated providers: create worktree, sync via git bundle
206
- if (sandboxProvider.tag === "isolated") {
207
- let preservedPath;
208
- // Nested so the worktree is always cleaned up (outer release) even
209
- // when hooks or sandbox start fail. The provider handle is closed by
210
- // the inner release, which only runs once it exists.
211
- return Effect.acquireUseRelease(pruneAndCreate(), (worktreeInfo) => (hooks?.host?.onWorktreeReady?.length
212
- ? runHostHooks(hooks.host.onWorktreeReady, worktreeInfo.path, signal)
213
- : Effect.void).pipe(Effect.andThen(Effect.acquireUseRelease(startSandbox({
214
- provider: sandboxProvider,
215
- hostRepoDir: worktreeInfo.path,
216
- env,
217
- copyPaths,
218
- }), ({ sandboxLayer, worktreePath, handle }) => makeEffect({
219
- hostWorktreePath: worktreeInfo.path,
220
- sandboxRepoPath: worktreePath,
221
- applyToHost: () => syncOut(worktreeInfo.path, handle),
222
- }).pipe(Effect.provide(sandboxLayer)), ({ handle }) => Effect.tryPromise({
223
- try: () => handle.close(),
224
- catch: () => undefined,
225
- }).pipe(Effect.orDie)))), (worktreeInfo, exit) => cleanupWorktree(worktreeInfo.path, exit).pipe(Effect.tap((p) => {
226
- preservedPath = p;
227
- }), Effect.asVoid, Effect.orDie)).pipe(Effect.map((value) => ({
228
- value,
229
- preservedWorktreePath: preservedPath,
230
- })), Effect.mapError((e) => attachPreservedPath(preservedPath, e)));
231
- }
232
- if (isHeadMode) {
233
- // Head mode: bind-mount host directory directly, no worktree
234
- const gitPath = join(hostRepoDir, ".git");
235
- return (hooks?.host?.onWorktreeReady?.length
236
- ? runHostHooks(hooks.host.onWorktreeReady, hostRepoDir, signal)
237
- : Effect.void).pipe(Effect.andThen(resolveGitMounts(gitPath)), Effect.provideService(FileSystem.FileSystem, fileSystem), Effect.mapError((e) => new WorktreeError({
238
- message: `Failed to resolve git mounts: ${e}`,
239
- })), Effect.flatMap((gitMounts) =>
240
- // Patch git mounts for Windows worktree compatibility (ADR-0006)
241
- Effect.tryPromise({
242
- try: () => patchGitMountsForWindows(gitMounts, hostRepoDir, SANDBOX_REPO_DIR),
243
- catch: (e) => new WorktreeError({
244
- message: `Failed to patch git mounts: ${e instanceof Error ? e.message : String(e)}`,
245
- }),
246
- })), Effect.flatMap((gitMounts) => Effect.acquireUseRelease(startSandbox({
247
- provider: sandboxProvider,
248
- hostRepoDir,
249
- env,
250
- worktreeOrRepoPath: hostRepoDir,
251
- gitMounts,
252
- repoDir: SANDBOX_REPO_DIR,
253
- }),
254
- // Use
255
- ({ sandboxLayer, worktreePath, handle }) => makeEffect({
256
- hostWorktreePath: hostRepoDir,
257
- sandboxRepoPath: worktreePath,
258
- bindMountHandle: handle,
259
- }).pipe(Effect.provide(sandboxLayer)),
260
- // Release
261
- ({ handle }) => Effect.tryPromise({
262
- try: () => handle.close(),
263
- catch: () => undefined,
264
- }).pipe(Effect.orDie)).pipe(Effect.map((value) => ({
265
- value,
266
- preservedWorktreePath: undefined,
267
- })))));
268
- }
269
- // Worktree mode (merge-to-head or explicit branch)
270
- // Populated by the release phase when a worktree is preserved on failure,
271
- // so we can attach the path to recognized error types before they propagate.
272
- let preservedWorktreePath;
273
- // Worktree creation and sandbox start are nested so the worktree is
274
- // always cleaned up (outer release) even when a later step — copying,
275
- // hooks, or sandbox start — fails. The provider handle is closed by the
276
- // inner release, which only runs once the handle exists.
277
- return Effect.acquireUseRelease(
278
- // Acquire: prune stale worktrees (best-effort), then create the worktree.
279
- pruneAndCreate(),
280
- // Use: copy files, run host hooks, resolve+patch git mounts, then start
281
- // the sandbox under a nested acquireUseRelease.
282
- (worktreeInfo) => (copyPaths && copyPaths.length > 0
283
- ? display.spinner("Copying to worktree", copyToWorktree(copyPaths, hostRepoDir, worktreeInfo.path, timeouts?.copyToWorktreeMs))
284
- : Effect.succeed(undefined)).pipe(Effect.andThen(hooks?.host?.onWorktreeReady?.length
285
- ? runHostHooks(hooks.host.onWorktreeReady, worktreeInfo.path, signal)
286
- : Effect.void), Effect.andThen(resolveGitMounts(join(hostRepoDir, ".git")).pipe(Effect.provideService(FileSystem.FileSystem, fileSystem), Effect.mapError((e) => new WorktreeError({
287
- message: `Failed to resolve git mounts: ${e}`,
288
- })))),
289
- // Patch git mounts for Windows worktree compatibility (ADR-0006)
290
- Effect.flatMap((gitMounts) => Effect.tryPromise({
291
- try: () => patchGitMountsForWindows(gitMounts, worktreeInfo.path, SANDBOX_REPO_DIR),
292
- catch: (e) => new WorktreeError({
293
- message: `Failed to patch git mounts: ${e instanceof Error ? e.message : String(e)}`,
294
- }),
295
- })), Effect.flatMap((gitMounts) => Effect.acquireUseRelease(
296
- // sandboxProvider is guaranteed bind-mount here
297
- // (isolated providers return early above)
298
- startSandbox({
299
- provider: sandboxProvider,
300
- hostRepoDir,
301
- env,
302
- worktreeOrRepoPath: worktreeInfo.path,
303
- gitMounts,
304
- repoDir: SANDBOX_REPO_DIR,
305
- }), ({ sandboxLayer, worktreePath, handle }) => makeEffect({
306
- hostWorktreePath: worktreeInfo.path,
307
- sandboxRepoPath: worktreePath,
308
- bindMountHandle: handle,
309
- }).pipe(Effect.provide(sandboxLayer)), ({ handle }) => Effect.tryPromise({
310
- try: () => handle.close(),
311
- catch: () => undefined,
312
- }).pipe(Effect.orDie)))),
313
- // Release: remove or preserve the worktree based on dirty state.
314
- (worktreeInfo, exit) => cleanupWorktree(worktreeInfo.path, exit).pipe(Effect.tap((p) => {
315
- preservedWorktreePath = p;
316
- }), Effect.asVoid, Effect.orDie)).pipe(Effect.map((value) => ({
317
- value,
318
- preservedWorktreePath,
319
- })), Effect.mapError((e) => attachPreservedPath(preservedWorktreePath, e)));
320
- },
321
- };
322
- })),
323
- };
324
- //# sourceMappingURL=SandboxFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SandboxFactory.js","sourceRoot":"","sources":["../src/SandboxFactory.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { Effect } from "effect";
2
- import { Display } from "./Display.js";
3
- import { ExecError, HookTimeoutError, SyncError, type SandboxError } from "./errors.js";
4
- import { Sandbox, type SandboxService } from "./SandboxFactory.js";
5
- import type { Timeouts } from "./run.js";
6
- export type SandboxHooks = {
7
- readonly host?: {
8
- readonly onWorktreeReady?: ReadonlyArray<{
9
- readonly command: string;
10
- readonly timeoutMs?: number;
11
- }>;
12
- readonly onSandboxReady?: ReadonlyArray<{
13
- readonly command: string;
14
- readonly timeoutMs?: number;
15
- }>;
16
- };
17
- readonly sandbox?: {
18
- readonly onSandboxReady?: ReadonlyArray<{
19
- readonly command: string;
20
- readonly sudo?: boolean;
21
- readonly timeoutMs?: number;
22
- }>;
23
- };
24
- };
25
- /**
26
- * Runs an array of host-side hook commands sequentially.
27
- * Each command runs on the host with the given cwd.
28
- * Fails fast on non-zero exit.
29
- */
30
- export declare const runHostHooks: (hooks: readonly {
31
- readonly command: string;
32
- readonly timeoutMs?: number | undefined;
33
- }[], cwd: string, signal?: AbortSignal | undefined) => Effect.Effect<void, ExecError | HookTimeoutError, never>;
34
- export interface SandboxLifecycleOptions {
35
- readonly hostRepoDir: string;
36
- readonly sandboxRepoDir: string;
37
- readonly hooks?: SandboxHooks;
38
- readonly branch?: string;
39
- /** Host-side path to the worktree directory. Required when sandboxRepoDir
40
- * is a sandbox path that doesn't exist on the host (e.g. /home/agent/workspace). */
41
- readonly hostWorktreePath?: string;
42
- /** Called after agent work completes but before host-side git operations (merge, commit collection).
43
- * For isolated providers, this syncs changes from the sandbox to the host worktree.
44
- * For bind-mount providers, this is a no-op (filesystem is already shared). */
45
- readonly applyToHost?: () => Effect.Effect<void, SyncError>;
46
- /** AbortSignal passed through to lifecycle hooks so they can cooperatively cancel.
47
- * When omitted, hooks receive a never-aborted signal. */
48
- readonly signal?: AbortSignal;
49
- /** Override default timeouts for built-in lifecycle steps. Unset keys keep their defaults. */
50
- readonly timeouts?: Timeouts;
51
- }
52
- export interface SandboxContext {
53
- readonly sandbox: SandboxService;
54
- readonly sandboxRepoDir: string;
55
- readonly baseHead: string;
56
- }
57
- export interface SandboxLifecycleResult<A> {
58
- readonly result: A;
59
- readonly branch: string;
60
- readonly commits: {
61
- sha: string;
62
- }[];
63
- }
64
- export declare const withSandboxLifecycle: <A>(options: SandboxLifecycleOptions, work: (ctx: SandboxContext) => Effect.Effect<A, SandboxError, Display | Sandbox>) => Effect.Effect<SandboxLifecycleResult<A>, SandboxError, Display | Sandbox>;
65
- //# sourceMappingURL=SandboxLifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SandboxLifecycle.d.ts","sourceRoot":"","sources":["../src/SandboxLifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,MAAM,EAAY,MAAM,QAAQ,CAAC;AAC9D,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;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAqEzC,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;YACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;SAC7B,CAAC,CAAC;QACH,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;YACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;SAC7B,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;YACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;SAC7B,CAAC,CAAC;KACJ,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;+GA8BrB,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;IAC5D;8DAC0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAC9B;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,kMAsWlC,CAAC"}