@ai-hero/sandcastle 0.6.5 → 0.6.6

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 (227) hide show
  1. package/README.md +123 -54
  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-72UVAC7B.js +99 -0
  5. package/dist/chunk-72UVAC7B.js.map +1 -0
  6. package/dist/chunk-BIWNFKGV.js +22 -0
  7. package/dist/chunk-BIWNFKGV.js.map +1 -0
  8. package/dist/chunk-NGBM7T3E.js +76 -0
  9. package/dist/chunk-NGBM7T3E.js.map +1 -0
  10. package/dist/chunk-Q5W3WQVU.js +25569 -0
  11. package/dist/chunk-Q5W3WQVU.js.map +1 -0
  12. package/dist/chunk-UPDEQ2U7.js +362 -0
  13. package/dist/chunk-UPDEQ2U7.js.map +1 -0
  14. package/dist/chunk-Z7O2WNRU.js +26934 -0
  15. package/dist/chunk-Z7O2WNRU.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 +19256 -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/package.json +15 -14
  39. package/dist/AgentProvider.d.ts +0 -134
  40. package/dist/AgentProvider.d.ts.map +0 -1
  41. package/dist/AgentProvider.js +0 -647
  42. package/dist/AgentProvider.js.map +0 -1
  43. package/dist/AgentStreamEmitter.d.ts +0 -36
  44. package/dist/AgentStreamEmitter.d.ts.map +0 -1
  45. package/dist/AgentStreamEmitter.js +0 -21
  46. package/dist/AgentStreamEmitter.js.map +0 -1
  47. package/dist/CopyToWorktree.d.ts +0 -15
  48. package/dist/CopyToWorktree.d.ts.map +0 -1
  49. package/dist/CopyToWorktree.js +0 -60
  50. package/dist/CopyToWorktree.js.map +0 -1
  51. package/dist/Display.d.ts +0 -58
  52. package/dist/Display.d.ts.map +0 -1
  53. package/dist/Display.js +0 -142
  54. package/dist/Display.js.map +0 -1
  55. package/dist/DockerLifecycle.d.ts +0 -54
  56. package/dist/DockerLifecycle.d.ts.map +0 -1
  57. package/dist/DockerLifecycle.js +0 -123
  58. package/dist/DockerLifecycle.js.map +0 -1
  59. package/dist/EnvResolver.d.ts +0 -11
  60. package/dist/EnvResolver.d.ts.map +0 -1
  61. package/dist/EnvResolver.js +0 -63
  62. package/dist/EnvResolver.js.map +0 -1
  63. package/dist/ErrorHandler.d.ts +0 -15
  64. package/dist/ErrorHandler.d.ts.map +0 -1
  65. package/dist/ErrorHandler.js +0 -85
  66. package/dist/ErrorHandler.js.map +0 -1
  67. package/dist/InitService.d.ts +0 -92
  68. package/dist/InitService.d.ts.map +0 -1
  69. package/dist/InitService.js +0 -836
  70. package/dist/InitService.js.map +0 -1
  71. package/dist/MountConfig.d.ts.map +0 -1
  72. package/dist/MountConfig.js +0 -7
  73. package/dist/MountConfig.js.map +0 -1
  74. package/dist/Orchestrator.d.ts +0 -56
  75. package/dist/Orchestrator.d.ts.map +0 -1
  76. package/dist/Orchestrator.js +0 -293
  77. package/dist/Orchestrator.js.map +0 -1
  78. package/dist/Output.d.ts +0 -107
  79. package/dist/Output.d.ts.map +0 -1
  80. package/dist/Output.js +0 -95
  81. package/dist/Output.js.map +0 -1
  82. package/dist/PodmanLifecycle.d.ts +0 -17
  83. package/dist/PodmanLifecycle.d.ts.map +0 -1
  84. package/dist/PodmanLifecycle.js +0 -45
  85. package/dist/PodmanLifecycle.js.map +0 -1
  86. package/dist/PromptArgumentSubstitution.d.ts +0 -32
  87. package/dist/PromptArgumentSubstitution.d.ts.map +0 -1
  88. package/dist/PromptArgumentSubstitution.js +0 -104
  89. package/dist/PromptArgumentSubstitution.js.map +0 -1
  90. package/dist/PromptPreprocessor.d.ts +0 -15
  91. package/dist/PromptPreprocessor.d.ts.map +0 -1
  92. package/dist/PromptPreprocessor.js +0 -55
  93. package/dist/PromptPreprocessor.js.map +0 -1
  94. package/dist/PromptResolver.d.ts +0 -21
  95. package/dist/PromptResolver.d.ts.map +0 -1
  96. package/dist/PromptResolver.js +0 -27
  97. package/dist/PromptResolver.js.map +0 -1
  98. package/dist/RecoveryMessage.d.ts +0 -15
  99. package/dist/RecoveryMessage.d.ts.map +0 -1
  100. package/dist/RecoveryMessage.js +0 -81
  101. package/dist/RecoveryMessage.js.map +0 -1
  102. package/dist/SandboxFactory.d.ts +0 -90
  103. package/dist/SandboxFactory.d.ts.map +0 -1
  104. package/dist/SandboxFactory.js +0 -324
  105. package/dist/SandboxFactory.js.map +0 -1
  106. package/dist/SandboxLifecycle.d.ts +0 -65
  107. package/dist/SandboxLifecycle.d.ts.map +0 -1
  108. package/dist/SandboxLifecycle.js +0 -296
  109. package/dist/SandboxLifecycle.js.map +0 -1
  110. package/dist/SandboxProvider.d.ts.map +0 -1
  111. package/dist/SandboxProvider.js +0 -28
  112. package/dist/SandboxProvider.js.map +0 -1
  113. package/dist/SessionStore.d.ts +0 -110
  114. package/dist/SessionStore.d.ts.map +0 -1
  115. package/dist/SessionStore.js +0 -330
  116. package/dist/SessionStore.js.map +0 -1
  117. package/dist/TextDeltaBuffer.d.ts +0 -24
  118. package/dist/TextDeltaBuffer.d.ts.map +0 -1
  119. package/dist/TextDeltaBuffer.js +0 -68
  120. package/dist/TextDeltaBuffer.js.map +0 -1
  121. package/dist/WorktreeManager.d.ts +0 -79
  122. package/dist/WorktreeManager.d.ts.map +0 -1
  123. package/dist/WorktreeManager.js +0 -283
  124. package/dist/WorktreeManager.js.map +0 -1
  125. package/dist/boundedTail.d.ts +0 -48
  126. package/dist/boundedTail.d.ts.map +0 -1
  127. package/dist/boundedTail.js +0 -64
  128. package/dist/boundedTail.js.map +0 -1
  129. package/dist/cli.d.ts +0 -30
  130. package/dist/cli.d.ts.map +0 -1
  131. package/dist/cli.js +0 -340
  132. package/dist/cli.js.map +0 -1
  133. package/dist/createSandbox.d.ts +0 -154
  134. package/dist/createSandbox.d.ts.map +0 -1
  135. package/dist/createSandbox.js +0 -476
  136. package/dist/createSandbox.js.map +0 -1
  137. package/dist/createWorktree.d.ts +0 -154
  138. package/dist/createWorktree.d.ts.map +0 -1
  139. package/dist/createWorktree.js +0 -391
  140. package/dist/createWorktree.js.map +0 -1
  141. package/dist/errors.d.ts +0 -227
  142. package/dist/errors.d.ts.map +0 -1
  143. package/dist/errors.js +0 -81
  144. package/dist/errors.js.map +0 -1
  145. package/dist/extractStructuredOutput.d.ts +0 -23
  146. package/dist/extractStructuredOutput.d.ts.map +0 -1
  147. package/dist/extractStructuredOutput.js +0 -102
  148. package/dist/extractStructuredOutput.js.map +0 -1
  149. package/dist/index.d.ts.map +0 -1
  150. package/dist/interactive.d.ts +0 -74
  151. package/dist/interactive.d.ts.map +0 -1
  152. package/dist/interactive.js +0 -279
  153. package/dist/interactive.js.map +0 -1
  154. package/dist/main.d.ts.map +0 -1
  155. package/dist/mergeProviderEnv.d.ts +0 -13
  156. package/dist/mergeProviderEnv.d.ts.map +0 -1
  157. package/dist/mergeProviderEnv.js +0 -23
  158. package/dist/mergeProviderEnv.js.map +0 -1
  159. package/dist/mountUtils.d.ts +0 -146
  160. package/dist/mountUtils.d.ts.map +0 -1
  161. package/dist/mountUtils.js +0 -301
  162. package/dist/mountUtils.js.map +0 -1
  163. package/dist/raceAbortSignal.d.ts +0 -18
  164. package/dist/raceAbortSignal.d.ts.map +0 -1
  165. package/dist/raceAbortSignal.js +0 -32
  166. package/dist/raceAbortSignal.js.map +0 -1
  167. package/dist/resolveCwd.d.ts +0 -24
  168. package/dist/resolveCwd.d.ts.map +0 -1
  169. package/dist/resolveCwd.js +0 -32
  170. package/dist/resolveCwd.js.map +0 -1
  171. package/dist/resumePrecheck.d.ts +0 -26
  172. package/dist/resumePrecheck.d.ts.map +0 -1
  173. package/dist/resumePrecheck.js +0 -40
  174. package/dist/resumePrecheck.js.map +0 -1
  175. package/dist/run.d.ts +0 -216
  176. package/dist/run.d.ts.map +0 -1
  177. package/dist/run.js +0 -313
  178. package/dist/run.js.map +0 -1
  179. package/dist/sandboxExec.d.ts +0 -12
  180. package/dist/sandboxExec.d.ts.map +0 -1
  181. package/dist/sandboxExec.js +0 -26
  182. package/dist/sandboxExec.js.map +0 -1
  183. package/dist/sandboxes/daytona.d.ts.map +0 -1
  184. package/dist/sandboxes/docker.d.ts.map +0 -1
  185. package/dist/sandboxes/no-sandbox.d.ts.map +0 -1
  186. package/dist/sandboxes/podman.d.ts.map +0 -1
  187. package/dist/sandboxes/test-bind-mount.d.ts +0 -17
  188. package/dist/sandboxes/test-bind-mount.d.ts.map +0 -1
  189. package/dist/sandboxes/test-bind-mount.js +0 -92
  190. package/dist/sandboxes/test-bind-mount.js.map +0 -1
  191. package/dist/sandboxes/test-isolated.d.ts +0 -17
  192. package/dist/sandboxes/test-isolated.d.ts.map +0 -1
  193. package/dist/sandboxes/test-isolated.js +0 -98
  194. package/dist/sandboxes/test-isolated.js.map +0 -1
  195. package/dist/sandboxes/vercel.d.ts.map +0 -1
  196. package/dist/shutdownRegistry.d.ts +0 -30
  197. package/dist/shutdownRegistry.d.ts.map +0 -1
  198. package/dist/shutdownRegistry.js +0 -73
  199. package/dist/shutdownRegistry.js.map +0 -1
  200. package/dist/startSandbox.d.ts +0 -50
  201. package/dist/startSandbox.d.ts.map +0 -1
  202. package/dist/startSandbox.js +0 -117
  203. package/dist/startSandbox.js.map +0 -1
  204. package/dist/syncIn.d.ts +0 -24
  205. package/dist/syncIn.d.ts.map +0 -1
  206. package/dist/syncIn.js +0 -107
  207. package/dist/syncIn.js.map +0 -1
  208. package/dist/syncOut.d.ts +0 -27
  209. package/dist/syncOut.d.ts.map +0 -1
  210. package/dist/syncOut.js +0 -271
  211. package/dist/syncOut.js.map +0 -1
  212. package/dist/templates.d.ts +0 -2
  213. package/dist/templates.d.ts.map +0 -1
  214. package/dist/templates.js +0 -26
  215. package/dist/templates.js.map +0 -1
  216. package/dist/terminalCleanup.d.ts +0 -30
  217. package/dist/terminalCleanup.d.ts.map +0 -1
  218. package/dist/terminalCleanup.js +0 -37
  219. package/dist/terminalCleanup.js.map +0 -1
  220. package/dist/testSandbox.d.ts +0 -8
  221. package/dist/testSandbox.d.ts.map +0 -1
  222. package/dist/testSandbox.js +0 -109
  223. package/dist/testSandbox.js.map +0 -1
  224. package/dist/testSetup.d.ts +0 -2
  225. package/dist/testSetup.d.ts.map +0 -1
  226. package/dist/testSetup.js +0 -29
  227. package/dist/testSetup.js.map +0 -1
@@ -1,296 +0,0 @@
1
- import { exec } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { Deferred, Duration, Effect, Schedule } from "effect";
4
- import { Display } from "./Display.js";
5
- import { CommitCollectionTimeoutError, ExecError, GitSetupTimeoutError, HookTimeoutError, MergeToHostTimeoutError, SyncError, withTimeout, } from "./errors.js";
6
- import { Sandbox, } from "./SandboxFactory.js";
7
- const GIT_SETUP_TIMEOUT_MS = 10_000;
8
- const HOOK_TIMEOUT_MS = 60_000;
9
- const COMMIT_COLLECTION_TIMEOUT_MS = 30_000;
10
- const MERGE_TO_HOST_TIMEOUT_MS = 30_000;
11
- /** Number of times a transient git setup exec is retried after the first attempt. */
12
- const GIT_SETUP_MAX_RETRIES = 2;
13
- /** Delay between git setup retries — long enough to let a transient exec race clear. */
14
- const GIT_SETUP_RETRY_DELAY_MS = 250;
15
- /**
16
- * Exit codes that indicate the shell could not exec the command rather than the
17
- * command itself failing — symptoms of a transient race under heavy container
18
- * load (e.g. overlayfs not yet ready, or the process being killed). Worth a retry.
19
- * 126: command found but not executable / exec failed. 137: killed (128 + SIGKILL).
20
- */
21
- const TRANSIENT_EXEC_EXIT_CODES = new Set([126, 137]);
22
- const isTransientExecError = (err) => err._tag === "ExecError" &&
23
- err.exitCode !== undefined &&
24
- TRANSIENT_EXEC_EXIT_CODES.has(err.exitCode);
25
- const execOk = (sandbox, command, options) => Effect.flatMap(sandbox.exec(command, options), (result) => result.exitCode !== 0
26
- ? Effect.fail(new ExecError({
27
- command,
28
- exitCode: result.exitCode,
29
- message: `Command failed (exit ${result.exitCode}): ${command}\n${result.stderr}`,
30
- }))
31
- : Effect.succeed(result));
32
- const execOkWithGitTimeout = (sandbox, command, gitSetupTimeoutMs, options) => execOk(sandbox, command, options).pipe(withTimeout(gitSetupTimeoutMs, () => new GitSetupTimeoutError({
33
- message: `Git command timed out after ${gitSetupTimeoutMs}ms: ${command}`,
34
- timeoutMs: gitSetupTimeoutMs,
35
- command,
36
- })),
37
- // Each attempt is bounded by its own timeout (above); retry only transient
38
- // exec races, so a genuine git error or a hung exec still fails fast.
39
- Effect.retry({
40
- while: isTransientExecError,
41
- times: GIT_SETUP_MAX_RETRIES,
42
- schedule: Schedule.spaced(Duration.millis(GIT_SETUP_RETRY_DELAY_MS)),
43
- }));
44
- const execAsync = promisify(exec);
45
- /**
46
- * Runs an array of host-side hook commands sequentially.
47
- * Each command runs on the host with the given cwd.
48
- * Fails fast on non-zero exit.
49
- */
50
- export const runHostHooks = (hooks, cwd, signal) => Effect.gen(function* () {
51
- for (const hook of hooks) {
52
- const timeout = hook.timeoutMs ?? HOOK_TIMEOUT_MS;
53
- yield* Effect.tryPromise({
54
- try: () => execAsync(hook.command, { cwd, signal }),
55
- catch: (err) => new ExecError({
56
- command: hook.command,
57
- message: `Host hook failed: ${hook.command}\n${err instanceof Error ? err.message : String(err)}`,
58
- }),
59
- }).pipe(withTimeout(timeout, () => new HookTimeoutError({
60
- message: `Host hook '${hook.command}' timed out after ${timeout}ms`,
61
- timeoutMs: timeout,
62
- command: hook.command,
63
- })));
64
- }
65
- });
66
- export const withSandboxLifecycle = (options, work) => Effect.gen(function* () {
67
- const sandbox = yield* Sandbox;
68
- const display = yield* Display;
69
- const { hostRepoDir, sandboxRepoDir, hooks, branch, hostWorktreePath } = options;
70
- // Resolve effective timeouts, falling back to the built-in defaults.
71
- const gitSetupTimeoutMs = options.timeouts?.gitSetupMs ?? GIT_SETUP_TIMEOUT_MS;
72
- const commitCollectionTimeoutMs = options.timeouts?.commitCollectionMs ?? COMMIT_COLLECTION_TIMEOUT_MS;
73
- const mergeToHostTimeoutMs = options.timeouts?.mergeToHostMs ?? MERGE_TO_HOST_TIMEOUT_MS;
74
- // Resolve signal: use caller's signal or a never-aborted one so hooks
75
- // can unconditionally reference it without null-checking.
76
- const signal = options.signal ?? new AbortController().signal;
77
- // Without an explicit branch, record host's current branch for cherry-pick
78
- const hostCurrentBranch = !branch
79
- ? yield* Effect.promise(async () => {
80
- const { stdout } = await execAsync("git rev-parse --abbrev-ref HEAD", { cwd: hostRepoDir });
81
- return stdout.trim();
82
- })
83
- : null;
84
- // Read host git identity before entering the sandbox
85
- const [hostGitName, hostGitEmail] = yield* Effect.promise(async () => {
86
- const [nameResult, emailResult] = await Promise.all([
87
- execAsync("git config user.name", { cwd: hostRepoDir })
88
- .then((r) => r.stdout.trim())
89
- .catch(() => ""),
90
- execAsync("git config user.email", { cwd: hostRepoDir })
91
- .then((r) => r.stdout.trim())
92
- .catch(() => ""),
93
- ]);
94
- return [nameResult, emailResult];
95
- });
96
- // For host-side operations, use hostWorktreePath (the real path on the host)
97
- // instead of sandboxRepoDir (which may be a sandbox path like /home/agent/workspace).
98
- const hostSideWorktreePath = hostWorktreePath ?? sandboxRepoDir;
99
- // Setup: onSandboxReady hooks
100
- let resolvedBranch = "";
101
- yield* display.taskLog("Setting up sandbox", (message) => Effect.gen(function* () {
102
- // The bind-mounted worktree may be owned by a different UID (host user
103
- // vs sandbox user). Mark it safe so git doesn't reject it with
104
- // "dubious ownership".
105
- yield* execOkWithGitTimeout(sandbox, `git config --global --add safe.directory "${sandboxRepoDir}"`, gitSetupTimeoutMs);
106
- // Propagate host git identity into the sandbox so commits are attributed
107
- // to the actual developer without requiring manual setup.
108
- if (hostGitName) {
109
- yield* execOkWithGitTimeout(sandbox, `git config --global user.name "${hostGitName.replace(/"/g, '\\"')}"`, gitSetupTimeoutMs);
110
- }
111
- if (hostGitEmail) {
112
- yield* execOkWithGitTimeout(sandbox, `git config --global user.email "${hostGitEmail.replace(/"/g, '\\"')}"`, gitSetupTimeoutMs);
113
- }
114
- // Repo is bind-mounted — discover branch directly
115
- resolvedBranch = (yield* execOkWithGitTimeout(sandbox, "git rev-parse --abbrev-ref HEAD", gitSetupTimeoutMs, { cwd: sandboxRepoDir })).stdout.trim();
116
- // Run sandbox.onSandboxReady and host.onSandboxReady in parallel
117
- const sandboxHooks = hooks?.sandbox?.onSandboxReady;
118
- const hostOnSandboxReady = hooks?.host?.onSandboxReady;
119
- if (sandboxHooks?.length) {
120
- for (const hook of sandboxHooks) {
121
- message(hook.command);
122
- }
123
- }
124
- if (hostOnSandboxReady?.length) {
125
- for (const hook of hostOnSandboxReady) {
126
- message(`[host] ${hook.command}`);
127
- }
128
- }
129
- // Set up abort racing for sandbox hooks (sandbox.exec doesn't
130
- // natively support AbortSignal, so we race via Deferred).
131
- const abortDeferred = yield* Deferred.make();
132
- let abortCleanup = null;
133
- if (signal.aborted) {
134
- yield* Deferred.fail(abortDeferred, new ExecError({
135
- command: "abort",
136
- message: `Aborted: ${signal.reason}`,
137
- }));
138
- }
139
- else {
140
- const onAbort = () => {
141
- Effect.runPromise(Deferred.fail(abortDeferred, new ExecError({
142
- command: "abort",
143
- message: `Aborted: ${signal.reason}`,
144
- }))).catch(() => { });
145
- };
146
- signal.addEventListener("abort", onAbort, { once: true });
147
- abortCleanup = () => signal.removeEventListener("abort", onAbort);
148
- }
149
- const sandboxHookEffects = (sandboxHooks ?? []).map((hook) => {
150
- const timeout = hook.timeoutMs ?? HOOK_TIMEOUT_MS;
151
- return Effect.raceFirst(execOk(sandbox, hook.command, {
152
- cwd: sandboxRepoDir,
153
- sudo: hook.sudo,
154
- }).pipe(withTimeout(timeout, () => new HookTimeoutError({
155
- message: `Hook '${hook.command}' timed out after ${timeout}ms`,
156
- timeoutMs: timeout,
157
- command: hook.command,
158
- }))), Deferred.await(abortDeferred));
159
- });
160
- const hostHookEffects = (hostOnSandboxReady ?? []).map((hook) => {
161
- const timeout = hook.timeoutMs ?? HOOK_TIMEOUT_MS;
162
- return Effect.tryPromise({
163
- try: () => execAsync(hook.command, {
164
- cwd: hostSideWorktreePath,
165
- signal,
166
- }),
167
- catch: (err) => new ExecError({
168
- command: hook.command,
169
- message: `Host hook failed: ${hook.command}\n${err instanceof Error ? err.message : String(err)}`,
170
- }),
171
- }).pipe(withTimeout(timeout, () => new HookTimeoutError({
172
- message: `Host hook '${hook.command}' timed out after ${timeout}ms`,
173
- timeoutMs: timeout,
174
- command: hook.command,
175
- })));
176
- });
177
- const allOnSandboxReady = [...sandboxHookEffects, ...hostHookEffects];
178
- yield* (allOnSandboxReady.length > 0
179
- ? Effect.all(allOnSandboxReady, { concurrency: "unbounded" })
180
- : Effect.void).pipe(Effect.ensuring(Effect.sync(() => abortCleanup?.())));
181
- }));
182
- const targetBranch = branch ?? resolvedBranch;
183
- // Record base HEAD from the host worktree (not the sandbox).
184
- // For bind-mount providers, these are the same. For isolated providers,
185
- // the host-side SHA is the correct baseline for git rev-list after applyToHost
186
- // syncs commits back (syncOut creates new SHAs via format-patch/am).
187
- const baseHead = yield* Effect.promise(async () => {
188
- const { stdout } = await execAsync("git rev-parse HEAD", {
189
- cwd: hostSideWorktreePath,
190
- });
191
- return stdout.trim();
192
- });
193
- // Run the caller's work
194
- const result = yield* work({ sandbox, sandboxRepoDir, baseHead });
195
- // Sync changes from sandbox to host worktree (isolated sandbox only)
196
- if (options.applyToHost) {
197
- const countResult = yield* sandbox.exec(`git rev-list "${baseHead}..HEAD" --count`, { cwd: sandboxRepoDir });
198
- const commitCount = countResult.exitCode === 0
199
- ? parseInt(countResult.stdout.trim(), 10)
200
- : 0;
201
- yield* display.taskLog(commitCount > 0
202
- ? `Syncing ${commitCount} commit${commitCount !== 1 ? "s" : ""} to host`
203
- : "No commits to sync out", () => options.applyToHost());
204
- }
205
- // Collect commits and handle cherry-pick for temp branches
206
- let commits;
207
- let finalBranch;
208
- if (hostCurrentBranch !== null) {
209
- // Temp branch mode: merge temp branch into host branch, then delete temp branch.
210
- // We use merge instead of cherry-pick because cherry-pick breaks when the
211
- // temp branch contains merge commits (e.g. a merge agent merging multiple parallel
212
- // branches). A regular merge handles both the fast-forward case (host branch hasn't
213
- // moved) and the diverged case (host branch has new commits since the worktree started).
214
- // Check if there are any new commits on the temp branch
215
- const hasNewCommits = yield* Effect.promise(async () => {
216
- try {
217
- const { stdout } = await execAsync(`git rev-list "${baseHead}..HEAD" --count`, { cwd: hostSideWorktreePath });
218
- return parseInt(stdout.trim(), 10) > 0;
219
- }
220
- catch {
221
- return false;
222
- }
223
- });
224
- // Detach the worktree from the temp branch so the branch can be deleted
225
- yield* execOk(sandbox, "git checkout --detach", { cwd: sandboxRepoDir });
226
- if (hasNewCommits) {
227
- // Fast-forward host's current branch to the temp branch
228
- yield* display.taskLog(`Merging to ${hostCurrentBranch}`, () => Effect.tryPromise({
229
- try: async () => {
230
- try {
231
- await execAsync(`git merge "${resolvedBranch}"`, {
232
- cwd: hostRepoDir,
233
- });
234
- }
235
- catch {
236
- throw new Error(`Merge of '${resolvedBranch}' onto '${hostCurrentBranch}' failed. ` +
237
- `The temporary branch '${resolvedBranch}' has been preserved. ` +
238
- `To retry: git merge ${resolvedBranch}, ` +
239
- `then clean up: git branch -D ${resolvedBranch}`);
240
- }
241
- },
242
- catch: (e) => new SyncError({
243
- message: String(e instanceof Error ? e.message : e),
244
- }),
245
- }).pipe(withTimeout(mergeToHostTimeoutMs, () => new MergeToHostTimeoutError({
246
- message: `Merge of '${resolvedBranch}' to '${hostCurrentBranch}' timed out after ${mergeToHostTimeoutMs}ms`,
247
- timeoutMs: mergeToHostTimeoutMs,
248
- sourceBranch: resolvedBranch,
249
- targetBranch: hostCurrentBranch,
250
- }))));
251
- }
252
- // Delete the temp branch (now merged into host branch)
253
- yield* Effect.promise(() => execAsync(`git branch -D "${resolvedBranch}"`, {
254
- cwd: hostRepoDir,
255
- }).catch(() => { }));
256
- // Collect the commits now on the host branch
257
- commits = yield* display.taskLog("Collecting commits", () => Effect.promise(async () => {
258
- try {
259
- const { stdout } = await execAsync(`git rev-list "${baseHead}..HEAD" --reverse`, { cwd: hostRepoDir });
260
- const lines = stdout.trim();
261
- if (!lines)
262
- return [];
263
- return lines.split("\n").map((sha) => ({ sha }));
264
- }
265
- catch {
266
- return [];
267
- }
268
- }).pipe(withTimeout(commitCollectionTimeoutMs, () => new CommitCollectionTimeoutError({
269
- message: `Commit collection timed out after ${commitCollectionTimeoutMs}ms`,
270
- timeoutMs: commitCollectionTimeoutMs,
271
- }))));
272
- finalBranch = hostCurrentBranch;
273
- }
274
- else {
275
- // Explicit branch: commits stay on that branch
276
- commits = yield* display.taskLog("Collecting commits", () => Effect.promise(async () => {
277
- try {
278
- const { stdout } = await execAsync(`git rev-list "${baseHead}..refs/heads/${targetBranch}" --reverse`, { cwd: hostRepoDir });
279
- const lines = stdout.trim();
280
- if (!lines)
281
- return [];
282
- return lines.split("\n").map((sha) => ({ sha }));
283
- }
284
- catch {
285
- // Branch doesn't exist on host (no commits were produced)
286
- return [];
287
- }
288
- }).pipe(withTimeout(commitCollectionTimeoutMs, () => new CommitCollectionTimeoutError({
289
- message: `Commit collection timed out after ${commitCollectionTimeoutMs}ms`,
290
- timeoutMs: commitCollectionTimeoutMs,
291
- }))));
292
- finalBranch = targetBranch;
293
- }
294
- return { result, branch: finalBranch, commits };
295
- });
296
- //# sourceMappingURL=SandboxLifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SandboxLifecycle.js","sourceRoot":"","sources":["../src/SandboxLifecycle.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SandboxProvider.d.ts","sourceRoot":"","sources":["../src/SandboxProvider.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Sandbox provider types — the pluggable interface for sandbox runtimes.
3
- *
4
- * Provider authors implement a small Promise-based interface. Sandcastle
5
- * handles worktree creation, git mount resolution, and commit extraction.
6
- */
7
- /**
8
- * Create a bind-mount sandbox provider from a config object.
9
- * The returned provider can be passed to `run()` or `createSandbox()`.
10
- */
11
- export const createBindMountSandboxProvider = (config) => ({
12
- tag: "bind-mount",
13
- name: config.name,
14
- env: config.env ?? {},
15
- sandboxHomedir: config.sandboxHomedir,
16
- create: config.create,
17
- });
18
- /**
19
- * Create an isolated sandbox provider from a config object.
20
- * The returned provider can be passed to `run()` or `createSandbox()`.
21
- */
22
- export const createIsolatedSandboxProvider = (config) => ({
23
- tag: "isolated",
24
- name: config.name,
25
- env: config.env ?? {},
26
- create: config.create,
27
- });
28
- //# sourceMappingURL=SandboxProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SandboxProvider.js","sourceRoot":"","sources":["../src/SandboxProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2SH;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,MAAsC,EACZ,EAAE,CAAC,CAAC;IAC9B,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;IACrB,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,MAAqC,EACZ,EAAE,CAAC,CAAC;IAC7B,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC,CAAC"}
@@ -1,110 +0,0 @@
1
- /**
2
- * SessionStore — keyed collection of agent session JSONLs.
3
- *
4
- * Provides read/write access to agent session files, with host-backed
5
- * (filesystem) and sandbox-backed (via bind-mount handle file-transfer
6
- * primitives) implementations. Per ADR 0012, the per-provider `transfer`
7
- * op (e.g. `transferClaudeSession`, `transferCodexSession`) copies a session
8
- * between stores and applies any format-specific content rewriting — for
9
- * JSONL agents, rewriting `cwd` fields from source cwd to target cwd via the
10
- * shared `rewriteSessionCwd` primitive.
11
- */
12
- import type { BindMountSandboxHandle } from "./SandboxProvider.js";
13
- /**
14
- * Result of locating a session on the host by its unique id, independent of any
15
- * cwd-derived path encoding.
16
- */
17
- export interface HostSessionLookup {
18
- /** Absolute path to the located session file, or `undefined` when no session
19
- * with this id exists anywhere under the searched root. */
20
- readonly path: string | undefined;
21
- /** The host directory that was scanned — surfaced in not-found errors so the
22
- * user knows where Sandcastle looked. */
23
- readonly searchedRoot: string;
24
- }
25
- /** A keyed collection of agent session JSONLs associated with a cwd. */
26
- export interface SessionStore {
27
- /** The working directory this store is associated with. */
28
- readonly cwd: string;
29
- /** Whether a session exists in this store. */
30
- exists(id: string): Promise<boolean>;
31
- /** Absolute path where a session is stored, when the store is file-backed and locatable. */
32
- sessionFilePath(id: string): string | undefined;
33
- /** Read a session's JSONL content by ID. Throws if not found. */
34
- readSession(id: string): Promise<string>;
35
- /** Write a session's JSONL content by ID. Creates or overwrites. */
36
- writeSession(id: string, content: string): Promise<void>;
37
- }
38
- /**
39
- * Encode a cwd into the Claude Code `~/.claude/projects/<encoded>/` layout.
40
- * Replaces path separators with hyphens, matching Claude Code's convention.
41
- */
42
- export declare const encodeProjectPath: (cwd: string) => string;
43
- /**
44
- * Create a host-backed SessionStore that reads/writes session JSONLs on the
45
- * host filesystem using Claude Code's `~/.claude/projects/<encoded>/` layout.
46
- *
47
- * @param cwd - The host repo directory this store is associated with.
48
- * @param projectsDir - Override for the projects directory (default: `~/.claude/projects`).
49
- */
50
- export declare const hostSessionStore: (cwd: string, projectsDir?: string | undefined) => SessionStore;
51
- /**
52
- * Locate a Claude Code session JSONL on the host by its unique id, scanning each
53
- * `~/.claude/projects/<encoded-cwd>/` directory rather than reconstructing the
54
- * cwd encoding. The session id is globally unique, so the first match wins. Used
55
- * by the no-sandbox resume precheck, where the agent wrote the file in place
56
- * under a cwd-derived directory Sandcastle cannot reliably reconstruct.
57
- *
58
- * @param id - The session id (file basename without `.jsonl`).
59
- * @param projectsDir - Override for the projects directory (default: `~/.claude/projects`).
60
- */
61
- export declare const findClaudeSessionOnHost: (id: string, projectsDir?: string | undefined) => Promise<HostSessionLookup>;
62
- /**
63
- * Create a sandbox-backed SessionStore that uses a bind-mount handle's
64
- * `copyFileIn`/`copyFileOut` to transfer session files.
65
- *
66
- * @param cwd - The sandbox-side working directory.
67
- * @param handle - The bind-mount sandbox handle for file transfer.
68
- * @param projectsDir - The sandbox-side path to `~/.claude/projects`.
69
- */
70
- export declare const sandboxSessionStore: (cwd: string, handle: Pick<BindMountSandboxHandle, "copyFileIn" | "copyFileOut" | "exec">, projectsDir: string) => SessionStore;
71
- /**
72
- * claudeCode's `sessionStorage.transfer` (ADR 0012). Copies a Claude Code
73
- * session between stores, rewriting `cwd` fields in the JSONL entries from the
74
- * source store's cwd to the target store's cwd. The rewrite is specific to
75
- * Claude Code's JSONL format, so it lives with the provider rather than in
76
- * central code.
77
- */
78
- export declare const transferClaudeSession: (from: SessionStore, to: SessionStore, id: string) => Promise<void>;
79
- /**
80
- * A file-backed `SessionStore` that can locate a session's on-disk path and
81
- * write content at a specific relative path. Codex sessions are date-nested
82
- * (`YYYY/MM/DD/rollout-*-<id>.jsonl`) rather than cwd-partitioned, so `transfer`
83
- * must preserve the source's relative path on the target. Not part of the
84
- * public API — the codex factory pairs these stores with `transferCodexSession`.
85
- */
86
- export interface LocatableSessionStore extends SessionStore {
87
- locateSession(id: string): Promise<{
88
- path: string;
89
- relativePath: string;
90
- }>;
91
- writeSessionAt(relativePath: string, content: string): Promise<void>;
92
- }
93
- /**
94
- * Locate a Codex session rollout file on the host by its id, reusing the
95
- * date-nested scan. Used by the no-sandbox resume precheck.
96
- *
97
- * @param id - The session id.
98
- * @param sessionsDir - Override for the sessions directory (default: `~/.codex/sessions`).
99
- */
100
- export declare const findCodexSessionOnHost: (id: string, sessionsDir?: string | undefined) => Promise<HostSessionLookup>;
101
- export declare const codexHostSessionStore: (cwd: string, sessionsDir?: string | undefined) => LocatableSessionStore;
102
- export declare const codexSandboxSessionStore: (cwd: string, handle: Pick<BindMountSandboxHandle, "copyFileIn" | "copyFileOut" | "exec">, sessionsDir?: string) => LocatableSessionStore;
103
- /**
104
- * codex's `sessionStorage.transfer` (ADR 0012). Copies a Codex session between
105
- * locatable stores, rewriting the `cwd` in the `session_meta` line and
106
- * preserving the source's relative date-path on the target so Codex's id-scan
107
- * rediscovers the file.
108
- */
109
- export declare const transferCodexSession: (from: LocatableSessionStore, to: LocatableSessionStore, id: string) => Promise<void>;
110
- //# sourceMappingURL=SessionStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SessionStore.d.ts","sourceRoot":"","sources":["../src/SessionStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAMnE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;gEAC4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC;8CAC0C;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,4FAA4F;IAC5F,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAChD,iEAAiE;IACjE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,oEAAoE;IACpE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAeD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,yBAI7B,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,iEAsB5B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,8EAoBnC,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,iIAmD/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,qEAcjC,CAAC;AAMF;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAyCD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,8EAQlC,CAAC;AAEF,eAAO,MAAM,qBAAqB,0EAkDjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,2IA2EpC,CAAC;AA0BF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uFAUhC,CAAC"}