@ai-hero/sandcastle 0.3.0 → 0.4.1

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 (108) hide show
  1. package/README.md +384 -58
  2. package/dist/AgentProvider.d.ts +22 -12
  3. package/dist/AgentProvider.d.ts.map +1 -1
  4. package/dist/AgentProvider.js +46 -47
  5. package/dist/AgentProvider.js.map +1 -1
  6. package/dist/DockerLifecycle.d.ts +5 -1
  7. package/dist/DockerLifecycle.d.ts.map +1 -1
  8. package/dist/DockerLifecycle.js +8 -1
  9. package/dist/DockerLifecycle.js.map +1 -1
  10. package/dist/InitService.d.ts.map +1 -1
  11. package/dist/InitService.js +57 -6
  12. package/dist/InitService.js.map +1 -1
  13. package/dist/MountConfig.d.ts +15 -0
  14. package/dist/MountConfig.d.ts.map +1 -0
  15. package/dist/MountConfig.js +7 -0
  16. package/dist/MountConfig.js.map +1 -0
  17. package/dist/Orchestrator.d.ts +0 -1
  18. package/dist/Orchestrator.d.ts.map +1 -1
  19. package/dist/Orchestrator.js +28 -29
  20. package/dist/Orchestrator.js.map +1 -1
  21. package/dist/SandboxFactory.d.ts +21 -17
  22. package/dist/SandboxFactory.d.ts.map +1 -1
  23. package/dist/SandboxFactory.js +48 -50
  24. package/dist/SandboxFactory.js.map +1 -1
  25. package/dist/SandboxLifecycle.d.ts +1 -1
  26. package/dist/SandboxLifecycle.d.ts.map +1 -1
  27. package/dist/SandboxLifecycle.js +2 -2
  28. package/dist/SandboxLifecycle.js.map +1 -1
  29. package/dist/SandboxProvider.d.ts +50 -13
  30. package/dist/SandboxProvider.d.ts.map +1 -1
  31. package/dist/SandboxProvider.js +2 -0
  32. package/dist/SandboxProvider.js.map +1 -1
  33. package/dist/TextDeltaBuffer.d.ts +24 -0
  34. package/dist/TextDeltaBuffer.d.ts.map +1 -0
  35. package/dist/TextDeltaBuffer.js +68 -0
  36. package/dist/TextDeltaBuffer.js.map +1 -0
  37. package/dist/WorktreeManager.d.ts +2 -0
  38. package/dist/WorktreeManager.d.ts.map +1 -1
  39. package/dist/WorktreeManager.js +3 -0
  40. package/dist/WorktreeManager.js.map +1 -1
  41. package/dist/cli.d.ts.map +1 -1
  42. package/dist/cli.js +11 -6
  43. package/dist/cli.js.map +1 -1
  44. package/dist/createSandbox.d.ts +6 -5
  45. package/dist/createSandbox.d.ts.map +1 -1
  46. package/dist/createSandbox.js +14 -6
  47. package/dist/createSandbox.js.map +1 -1
  48. package/dist/index.d.ts +5 -4
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/mergeProviderEnv.d.ts +13 -0
  53. package/dist/mergeProviderEnv.d.ts.map +1 -0
  54. package/dist/mergeProviderEnv.js +23 -0
  55. package/dist/mergeProviderEnv.js.map +1 -0
  56. package/dist/run.d.ts +7 -18
  57. package/dist/run.d.ts.map +1 -1
  58. package/dist/run.js +35 -22
  59. package/dist/run.js.map +1 -1
  60. package/dist/sandboxes/daytona.d.ts +48 -0
  61. package/dist/sandboxes/daytona.d.ts.map +1 -0
  62. package/dist/sandboxes/daytona.js +125 -0
  63. package/dist/sandboxes/daytona.js.map +1 -0
  64. package/dist/sandboxes/docker.d.ts +10 -0
  65. package/dist/sandboxes/docker.d.ts.map +1 -1
  66. package/dist/sandboxes/docker.js +69 -42
  67. package/dist/sandboxes/docker.js.map +1 -1
  68. package/dist/sandboxes/podman.d.ts +46 -0
  69. package/dist/sandboxes/podman.d.ts.map +1 -0
  70. package/dist/sandboxes/podman.js +195 -0
  71. package/dist/sandboxes/podman.js.map +1 -0
  72. package/dist/sandboxes/test-isolated.d.ts +1 -1
  73. package/dist/sandboxes/test-isolated.d.ts.map +1 -1
  74. package/dist/sandboxes/test-isolated.js +56 -45
  75. package/dist/sandboxes/test-isolated.js.map +1 -1
  76. package/dist/sandboxes/vercel.d.ts +92 -0
  77. package/dist/sandboxes/vercel.d.ts.map +1 -0
  78. package/dist/sandboxes/vercel.js +165 -0
  79. package/dist/sandboxes/vercel.js.map +1 -0
  80. package/dist/syncIn.d.ts +4 -2
  81. package/dist/syncIn.d.ts.map +1 -1
  82. package/dist/syncIn.js +72 -22
  83. package/dist/syncIn.js.map +1 -1
  84. package/dist/syncOut.d.ts +4 -2
  85. package/dist/syncOut.d.ts.map +1 -1
  86. package/dist/syncOut.js +156 -77
  87. package/dist/syncOut.js.map +1 -1
  88. package/dist/templates/blank/.env.example +1 -0
  89. package/dist/templates/parallel-planner/.env.example +1 -0
  90. package/dist/templates/parallel-planner/main.mts +3 -3
  91. package/dist/templates/parallel-planner-with-review/.env.example +5 -0
  92. package/dist/templates/parallel-planner-with-review/CODING_STANDARDS.md +27 -0
  93. package/dist/templates/parallel-planner-with-review/implement-prompt.md +62 -0
  94. package/dist/templates/parallel-planner-with-review/main.mts +249 -0
  95. package/dist/templates/parallel-planner-with-review/merge-prompt.md +22 -0
  96. package/dist/templates/parallel-planner-with-review/plan-prompt.md +33 -0
  97. package/dist/templates/parallel-planner-with-review/review-prompt.md +55 -0
  98. package/dist/templates/parallel-planner-with-review/template.json +4 -0
  99. package/dist/templates/sequential-reviewer/.env.example +1 -0
  100. package/dist/templates/sequential-reviewer/CODING_STANDARDS.md +27 -0
  101. package/dist/templates/sequential-reviewer/implement-prompt.md +34 -45
  102. package/dist/templates/sequential-reviewer/main.mts +2 -2
  103. package/dist/templates/sequential-reviewer/review-prompt.md +1 -1
  104. package/dist/templates/simple-loop/.env.example +1 -0
  105. package/dist/testSandbox.d.ts.map +1 -1
  106. package/dist/testSandbox.js +58 -53
  107. package/dist/testSandbox.js.map +1 -1
  108. package/package.json +25 -1
package/dist/run.js CHANGED
@@ -5,8 +5,9 @@ import { Effect, Layer } from "effect";
5
5
  import { ClackDisplay, Display, FileDisplay, } from "./Display.js";
6
6
  import { orchestrate } from "./Orchestrator.js";
7
7
  import { resolvePrompt } from "./PromptResolver.js";
8
- import { WorktreeDockerSandboxFactory, WorktreeSandboxConfig, SANDBOX_WORKSPACE_DIR, } from "./SandboxFactory.js";
8
+ import { WorktreeDockerSandboxFactory, SandboxConfig, SANDBOX_WORKSPACE_DIR, } from "./SandboxFactory.js";
9
9
  import { resolveEnv } from "./EnvResolver.js";
10
+ import { mergeProviderEnv } from "./mergeProviderEnv.js";
10
11
  import { generateTempBranchName, getCurrentBranch } from "./WorktreeManager.js";
11
12
  import { substitutePromptArgs, validateNoBuiltInArgOverride, BUILT_IN_PROMPT_ARG_KEYS, } from "./PromptArgumentSubstitution.js";
12
13
  /** Default maximum number of iterations for a run. */
@@ -72,36 +73,47 @@ export const buildCompletionMessage = (completionSignal, iterationsRun) => {
72
73
  };
73
74
  export const run = async (options) => {
74
75
  const { prompt, promptFile, maxIterations = DEFAULT_MAX_ITERATIONS, hooks, agent: provider, } = options;
75
- // Resolve worktree mode: default to temp-branch when omitted
76
- const worktreeMode = options.worktree ?? {
77
- mode: "temp-branch",
78
- };
79
- // Validate: copyToSandbox is incompatible with mode: 'none'
80
- if (worktreeMode.mode === "none" &&
76
+ // Derive branch strategy: explicit option > default based on provider tag
77
+ const branchStrategy = options.branchStrategy ??
78
+ (options.sandbox.tag === "isolated"
79
+ ? { type: "merge-to-head" }
80
+ : { type: "head" });
81
+ const effectiveBranchType = branchStrategy.type;
82
+ // Validate: head strategy is not supported with isolated providers
83
+ if (effectiveBranchType === "head" && options.sandbox.tag === "isolated") {
84
+ throw new Error("head branch strategy is not supported with isolated providers");
85
+ }
86
+ // Validate: copyToSandbox is incompatible with head strategy
87
+ if (effectiveBranchType === "head" &&
81
88
  options.copyToSandbox &&
82
89
  options.copyToSandbox.length > 0) {
83
- throw new Error("copyToSandbox is not supported with worktree mode 'none'. " +
84
- "In mode 'none' the host working directory is bind-mounted directly.");
90
+ throw new Error("copyToSandbox is not supported with head branch strategy. " +
91
+ "In head mode the host working directory is bind-mounted directly.");
85
92
  }
86
- // Extract explicit branch when in branch mode, undefined for temp-branch/none mode
87
- const branch = worktreeMode.mode === "branch" ? worktreeMode.branch : undefined;
93
+ // Extract explicit branch when in branch mode
94
+ const branch = branchStrategy.type === "branch" ? branchStrategy.branch : undefined;
88
95
  const hostRepoDir = process.cwd();
89
96
  // Resolve prompt
90
97
  const rawPrompt = await Effect.runPromise(resolvePrompt({ prompt, promptFile }).pipe(Effect.provide(NodeContext.layer)));
91
98
  const agentName = provider.name;
92
- // Resolve env vars
93
- const env = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
99
+ // Resolve env vars and merge with provider env
100
+ const resolvedEnv = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
101
+ const env = mergeProviderEnv({
102
+ resolvedEnv,
103
+ agentProviderEnv: provider.env,
104
+ sandboxProviderEnv: options.sandbox.env,
105
+ });
94
106
  // Always capture the host's current branch for the TARGET_BRANCH built-in
95
107
  // prompt argument. When using a temp branch, it also prefixes the log filename.
96
108
  const currentHostBranch = await Effect.runPromise(getCurrentBranch(hostRepoDir));
97
- // When in temp-branch mode, generate a temporary branch name.
98
- // In none mode, use the host's current branch directly (no worktree).
99
- const resolvedBranch = worktreeMode.mode === "none"
109
+ // When in merge-to-head mode, generate a temporary branch name.
110
+ // In head mode, use the host's current branch directly (no worktree).
111
+ const resolvedBranch = effectiveBranchType === "head"
100
112
  ? currentHostBranch
101
113
  : (branch ?? generateTempBranchName(options.name));
102
114
  // When using a temp branch, prefix the log filename with the target branch
103
115
  // (the host's current branch) so developers can tell which branch was targeted.
104
- const targetBranch = worktreeMode.mode === "temp-branch" ? currentHostBranch : undefined;
116
+ const targetBranch = effectiveBranchType === "merge-to-head" ? currentHostBranch : undefined;
105
117
  // Resolve logging option
106
118
  const resolvedLogging = options.logging ?? {
107
119
  type: "file",
@@ -117,13 +129,14 @@ export const run = async (options) => {
117
129
  return Layer.provide(FileDisplay.layer(resolvedLogging.path), NodeFileSystem.layer);
118
130
  })()
119
131
  : ClackDisplay.layer;
120
- const factoryLayer = Layer.provide(WorktreeDockerSandboxFactory.layer, Layer.mergeAll(Layer.succeed(WorktreeSandboxConfig, {
132
+ const factoryLayer = Layer.provide(WorktreeDockerSandboxFactory.layer, Layer.mergeAll(Layer.succeed(SandboxConfig, {
121
133
  env,
122
134
  hostRepoDir,
123
- worktree: worktreeMode,
124
135
  copyToSandbox: options.copyToSandbox,
125
136
  name: options.name,
126
137
  sandboxProvider: options.sandbox,
138
+ branchStrategy,
139
+ throwOnDuplicateWorktree: options.throwOnDuplicateWorktree,
127
140
  }), NodeFileSystem.layer, displayLayer));
128
141
  const runLayer = Layer.merge(factoryLayer, displayLayer);
129
142
  const result = await Effect.runPromise(Effect.gen(function* () {
@@ -150,9 +163,9 @@ export const run = async (options) => {
150
163
  };
151
164
  const builtInArgKeysSet = new Set(BUILT_IN_PROMPT_ARG_KEYS);
152
165
  const resolvedPrompt = yield* substitutePromptArgs(rawPrompt, effectiveArgs, builtInArgKeysSet);
153
- // In none mode, pass the host branch so SandboxLifecycle skips the merge step.
154
- // In temp-branch mode, branch is undefined (triggers merge). In branch mode, it's the explicit branch.
155
- const orchestrateBranch = worktreeMode.mode === "none" ? currentHostBranch : branch;
166
+ // In head mode, pass the host branch so SandboxLifecycle skips the merge step.
167
+ // In merge-to-head mode, branch is undefined (triggers merge). In branch mode, it's the explicit branch.
168
+ const orchestrateBranch = effectiveBranchType === "head" ? currentHostBranch : branch;
156
169
  const orchestrateResult = yield* orchestrate({
157
170
  hostRepoDir,
158
171
  sandboxRepoDir: SANDBOX_WORKSPACE_DIR,
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Daytona isolated sandbox provider.
3
+ *
4
+ * Creates ephemeral Daytona sandboxes via `@daytona/sdk`.
5
+ * Requires `@daytona/sdk` as a peer dependency.
6
+ */
7
+ import { type IsolatedSandboxProvider } from "../SandboxProvider.js";
8
+ import type { CreateSandboxFromImageParams, CreateSandboxFromSnapshotParams } from "@daytona/sdk";
9
+ /** Options for the Daytona sandbox provider. */
10
+ export interface DaytonaOptions {
11
+ /**
12
+ * Daytona API key for authentication.
13
+ * Falls back to the `DAYTONA_API_KEY` environment variable if not provided.
14
+ */
15
+ readonly apiKey?: string;
16
+ /**
17
+ * Daytona API URL.
18
+ * Falls back to the `DAYTONA_API_URL` environment variable if not provided.
19
+ */
20
+ readonly apiUrl?: string;
21
+ /**
22
+ * Target environment for sandboxes.
23
+ * Falls back to the `DAYTONA_TARGET` environment variable if not provided.
24
+ */
25
+ readonly target?: string;
26
+ /**
27
+ * Options passed through to the Daytona SDK when creating a sandbox.
28
+ * Supports both image-based and snapshot-based creation.
29
+ */
30
+ readonly create?: CreateSandboxFromImageParams | CreateSandboxFromSnapshotParams;
31
+ /** Environment variables injected by this provider. Merged at launch time with env resolver and agent provider env. */
32
+ readonly env?: Record<string, string>;
33
+ }
34
+ /**
35
+ * Create a Daytona isolated sandbox provider.
36
+ *
37
+ * Sandboxes are ephemeral — each `create()` call spins up a new Daytona
38
+ * sandbox and `close()` destroys it.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * import { daytona } from "@ai-hero/sandcastle/sandboxes/daytona";
43
+ *
44
+ * const provider = daytona({ apiKey: "dyt_my_key" });
45
+ * ```
46
+ */
47
+ export declare const daytona: (options?: DaytonaOptions | undefined) => IsolatedSandboxProvider;
48
+ //# sourceMappingURL=daytona.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona.d.ts","sourceRoot":"","sources":["../../src/sandboxes/daytona.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAGV,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,cAAc,CAAC;AAEtB,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EACZ,4BAA4B,GAC5B,+BAA+B,CAAC;IAEpC,uHAAuH;IACvH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,OAAO,mEAyIhB,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Daytona isolated sandbox provider.
3
+ *
4
+ * Creates ephemeral Daytona sandboxes via `@daytona/sdk`.
5
+ * Requires `@daytona/sdk` as a peer dependency.
6
+ */
7
+ import { readdir, stat } from "node:fs/promises";
8
+ import { join, relative } from "node:path";
9
+ import { createIsolatedSandboxProvider, } from "../SandboxProvider.js";
10
+ /**
11
+ * Create a Daytona isolated sandbox provider.
12
+ *
13
+ * Sandboxes are ephemeral — each `create()` call spins up a new Daytona
14
+ * sandbox and `close()` destroys it.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { daytona } from "@ai-hero/sandcastle/sandboxes/daytona";
19
+ *
20
+ * const provider = daytona({ apiKey: "dyt_my_key" });
21
+ * ```
22
+ */
23
+ export const daytona = (options) => createIsolatedSandboxProvider({
24
+ name: "daytona",
25
+ env: options?.env,
26
+ create: async () => {
27
+ const { Daytona } = (await import("@daytona/sdk"));
28
+ const config = {};
29
+ if (options?.apiKey)
30
+ config.apiKey = options.apiKey;
31
+ if (options?.apiUrl)
32
+ config.apiUrl = options.apiUrl;
33
+ if (options?.target)
34
+ config.target = options.target;
35
+ const client = new Daytona(config);
36
+ const sandbox = await client.create(options?.create);
37
+ const workspacePath = (await sandbox.getWorkDir()) ??
38
+ (await sandbox.getUserHomeDir()) ??
39
+ "/home/daytona";
40
+ return {
41
+ workspacePath,
42
+ exec: async (command, opts) => {
43
+ if (opts?.onLine) {
44
+ const onLine = opts.onLine;
45
+ const sessionId = `sandcastle-${crypto.randomUUID()}`;
46
+ await sandbox.process.createSession(sessionId);
47
+ try {
48
+ const execResponse = await sandbox.process.executeSessionCommand(sessionId, {
49
+ command: `cd ${opts?.cwd ?? workspacePath} && ${command}`,
50
+ async: true,
51
+ });
52
+ const cmdId = execResponse.cmdId;
53
+ const stdoutLines = [];
54
+ const stderrChunks = [];
55
+ let partial = "";
56
+ await sandbox.process.getSessionCommandLogs(sessionId, cmdId, (chunk) => {
57
+ const text = partial + chunk;
58
+ const lines = text.split("\n");
59
+ partial = lines.pop() ?? "";
60
+ for (const line of lines) {
61
+ stdoutLines.push(line);
62
+ onLine(line);
63
+ }
64
+ }, (chunk) => {
65
+ stderrChunks.push(chunk);
66
+ });
67
+ if (partial) {
68
+ stdoutLines.push(partial);
69
+ onLine(partial);
70
+ }
71
+ const cmdInfo = await sandbox.process.getSessionCommand(sessionId, cmdId);
72
+ return {
73
+ stdout: stdoutLines.join("\n"),
74
+ stderr: stderrChunks.join(""),
75
+ exitCode: cmdInfo.exitCode ?? 0,
76
+ };
77
+ }
78
+ finally {
79
+ await sandbox.process.deleteSession(sessionId).catch(() => { });
80
+ }
81
+ }
82
+ const response = await sandbox.process.executeCommand(command, opts?.cwd ?? workspacePath);
83
+ return {
84
+ stdout: response.result,
85
+ stderr: "",
86
+ exitCode: response.exitCode,
87
+ };
88
+ },
89
+ copyIn: async (hostPath, sandboxPath) => {
90
+ const info = await stat(hostPath);
91
+ if (info.isDirectory()) {
92
+ const walk = async (dir) => {
93
+ const entries = await readdir(dir, { withFileTypes: true });
94
+ const files = [];
95
+ for (const entry of entries) {
96
+ const full = join(dir, entry.name);
97
+ if (entry.isDirectory()) {
98
+ files.push(...(await walk(full)));
99
+ }
100
+ else {
101
+ files.push(full);
102
+ }
103
+ }
104
+ return files;
105
+ };
106
+ const files = await walk(hostPath);
107
+ for (const file of files) {
108
+ const rel = relative(hostPath, file);
109
+ await sandbox.fs.uploadFile(file, join(sandboxPath, rel));
110
+ }
111
+ }
112
+ else {
113
+ await sandbox.fs.uploadFile(hostPath, sandboxPath);
114
+ }
115
+ },
116
+ copyFileOut: async (sandboxPath, hostPath) => {
117
+ await sandbox.fs.downloadFile(sandboxPath, hostPath);
118
+ },
119
+ close: async () => {
120
+ await client.delete(sandbox);
121
+ },
122
+ };
123
+ },
124
+ });
125
+ //# sourceMappingURL=daytona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona.js","sourceRoot":"","sources":["../../src/sandboxes/daytona.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,19 @@
6
6
  * await run({ agent: claudeCode("claude-opus-4-6"), sandbox: docker() });
7
7
  */
8
8
  import { type SandboxProvider } from "../SandboxProvider.js";
9
+ import type { MountConfig } from "../MountConfig.js";
9
10
  export interface DockerOptions {
10
11
  /** Docker image name (default: derived from repo directory name). */
11
12
  readonly imageName?: string;
13
+ /**
14
+ * Additional host directories to bind-mount into the sandbox.
15
+ *
16
+ * Each entry specifies a `hostPath` (tilde-expanded) and `sandboxPath`.
17
+ * If `hostPath` does not exist, sandbox creation fails with a clear error.
18
+ */
19
+ readonly mounts?: readonly MountConfig[];
20
+ /** Environment variables injected by this provider. Merged at launch time with env resolver and agent provider env. */
21
+ readonly env?: Record<string, string>;
12
22
  }
13
23
  /**
14
24
  * Create a Docker sandbox provider.
@@ -1 +1 @@
1
- {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,0DAuJlB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,6BAI5B,CAAC"}
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,uHAAuH;IACvH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,0DAsJlB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,6BAI5B,CAAC"}
@@ -11,6 +11,8 @@ import { createInterface } from "node:readline";
11
11
  import { Effect } from "effect";
12
12
  import { startContainer, removeContainer, chownInContainer, } from "../DockerLifecycle.js";
13
13
  import { createBindMountSandboxProvider, } from "../SandboxProvider.js";
14
+ import { existsSync } from "node:fs";
15
+ import { homedir } from "node:os";
14
16
  /**
15
17
  * Create a Docker sandbox provider.
16
18
  *
@@ -19,13 +21,16 @@ import { createBindMountSandboxProvider, } from "../SandboxProvider.js";
19
21
  */
20
22
  export const docker = (options) => {
21
23
  const configuredImageName = options?.imageName;
24
+ const userMounts = options?.mounts ? resolveUserMounts(options.mounts) : [];
22
25
  return createBindMountSandboxProvider({
23
26
  name: "docker",
27
+ env: options?.env,
24
28
  create: async (createOptions) => {
25
29
  const containerName = `sandcastle-${randomUUID()}`;
26
30
  const workspacePath = createOptions.mounts.find((m) => m.hostPath === createOptions.worktreePath)?.sandboxPath ?? "/home/agent/workspace";
27
- // Build volume mount strings
28
- const volumeMounts = createOptions.mounts.map((m) => {
31
+ // Build volume mount strings (internal mounts + user-provided mounts)
32
+ const allMounts = [...createOptions.mounts, ...userMounts];
33
+ const volumeMounts = allMounts.map((m) => {
29
34
  const base = `${m.hostPath}:${m.sandboxPath}`;
30
35
  return m.readonly ? `${base}:ro` : base;
31
36
  });
@@ -62,53 +67,54 @@ export const docker = (options) => {
62
67
  process.on("SIGTERM", onSignal);
63
68
  const handle = {
64
69
  workspacePath,
65
- exec: (command, opts) => new Promise((resolve, reject) => {
70
+ exec: (command, opts) => {
66
71
  const args = ["exec"];
67
72
  if (opts?.cwd)
68
73
  args.push("-w", opts.cwd);
69
74
  args.push(containerName, "sh", "-c", command);
70
- execFile("docker", args, { maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
71
- if (error && error.code === undefined) {
72
- reject(new Error(`docker exec failed: ${error.message}`));
73
- }
74
- else {
75
- resolve({
76
- stdout: stdout.toString(),
77
- stderr: stderr.toString(),
78
- exitCode: typeof error?.code === "number" ? error.code : 0,
75
+ if (opts?.onLine) {
76
+ const onLine = opts.onLine;
77
+ return new Promise((resolve, reject) => {
78
+ const proc = spawn("docker", args, {
79
+ stdio: ["ignore", "pipe", "pipe"],
79
80
  });
80
- }
81
- });
82
- }),
83
- execStreaming: (command, onLine, opts) => new Promise((resolve, reject) => {
84
- const args = ["exec"];
85
- if (opts?.cwd)
86
- args.push("-w", opts.cwd);
87
- args.push(containerName, "sh", "-c", command);
88
- const proc = spawn("docker", args, {
89
- stdio: ["ignore", "pipe", "pipe"],
90
- });
91
- const stdoutChunks = [];
92
- const stderrChunks = [];
93
- const rl = createInterface({ input: proc.stdout });
94
- rl.on("line", (line) => {
95
- stdoutChunks.push(line);
96
- onLine(line);
97
- });
98
- proc.stderr.on("data", (chunk) => {
99
- stderrChunks.push(chunk.toString());
100
- });
101
- proc.on("error", (error) => {
102
- reject(new Error(`docker exec streaming failed: ${error.message}`));
103
- });
104
- proc.on("close", (code) => {
105
- resolve({
106
- stdout: stdoutChunks.join("\n"),
107
- stderr: stderrChunks.join(""),
108
- exitCode: code ?? 0,
81
+ const stdoutChunks = [];
82
+ const stderrChunks = [];
83
+ const rl = createInterface({ input: proc.stdout });
84
+ rl.on("line", (line) => {
85
+ stdoutChunks.push(line);
86
+ onLine(line);
87
+ });
88
+ proc.stderr.on("data", (chunk) => {
89
+ stderrChunks.push(chunk.toString());
90
+ });
91
+ proc.on("error", (error) => {
92
+ reject(new Error(`docker exec failed: ${error.message}`));
93
+ });
94
+ proc.on("close", (code) => {
95
+ resolve({
96
+ stdout: stdoutChunks.join("\n"),
97
+ stderr: stderrChunks.join(""),
98
+ exitCode: code ?? 0,
99
+ });
100
+ });
101
+ });
102
+ }
103
+ return new Promise((resolve, reject) => {
104
+ execFile("docker", args, { maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
105
+ if (error && error.code === undefined) {
106
+ reject(new Error(`docker exec failed: ${error.message}`));
107
+ }
108
+ else {
109
+ resolve({
110
+ stdout: stdout.toString(),
111
+ stderr: stderr.toString(),
112
+ exitCode: typeof error?.code === "number" ? error.code : 0,
113
+ });
114
+ }
109
115
  });
110
116
  });
111
- }),
117
+ },
112
118
  close: async () => {
113
119
  process.removeListener("exit", onExit);
114
120
  process.removeListener("SIGINT", onSignal);
@@ -130,4 +136,25 @@ export const defaultImageName = (repoDir) => {
130
136
  const sanitized = dirName.toLowerCase().replace(/[^a-z0-9_.-]/g, "-");
131
137
  return `sandcastle:${sanitized}`;
132
138
  };
139
+ const expandTilde = (p) => {
140
+ if (p === "~")
141
+ return homedir();
142
+ if (p.startsWith("~/"))
143
+ return homedir() + p.slice(1);
144
+ return p;
145
+ };
146
+ const resolveUserMounts = (mounts) => mounts.map((m) => {
147
+ const resolvedHostPath = expandTilde(m.hostPath);
148
+ if (!existsSync(resolvedHostPath)) {
149
+ throw new Error(`Mount hostPath does not exist: ${m.hostPath}` +
150
+ (m.hostPath !== resolvedHostPath
151
+ ? ` (resolved to ${resolvedHostPath})`
152
+ : ""));
153
+ }
154
+ return {
155
+ hostPath: resolvedHostPath,
156
+ sandboxPath: m.sandboxPath,
157
+ ...(m.readonly ? { readonly: true } : {}),
158
+ };
159
+ });
133
160
  //# sourceMappingURL=docker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Podman sandbox provider — creates Podman containers with bind-mounts.
3
+ *
4
+ * Usage:
5
+ * import { podman } from "sandcastle/sandboxes/podman";
6
+ * await run({ agent: claudeCode("claude-opus-4-6"), sandbox: podman() });
7
+ */
8
+ import { type SandboxProvider } from "../SandboxProvider.js";
9
+ import type { MountConfig } from "../MountConfig.js";
10
+ export interface PodmanOptions {
11
+ /** Podman image name (default: derived from repo directory name). */
12
+ readonly imageName?: string;
13
+ /**
14
+ * SELinux volume label suffix applied to bind mounts.
15
+ *
16
+ * - `"z"` — shared label (default). No-op on non-SELinux systems.
17
+ * - `"Z"` — private label; only this container can access the mount.
18
+ * - `false` — disable labeling entirely.
19
+ */
20
+ readonly selinuxLabel?: "z" | "Z" | false;
21
+ /**
22
+ * Additional host directories to bind-mount into the sandbox.
23
+ *
24
+ * Each entry specifies a `hostPath` (tilde-expanded) and `sandboxPath`.
25
+ * If `hostPath` does not exist, sandbox creation fails with a clear error.
26
+ */
27
+ readonly mounts?: readonly MountConfig[];
28
+ /** Environment variables injected by this provider. Merged at launch time with env resolver and agent provider env. */
29
+ readonly env?: Record<string, string>;
30
+ }
31
+ /**
32
+ * Create a Podman sandbox provider.
33
+ *
34
+ * The returned provider creates Podman containers with bind-mounts
35
+ * for the worktree and git directories. Calls the `podman` binary
36
+ * on PATH directly — no Podman Machine detection or special
37
+ * macOS/Windows handling.
38
+ */
39
+ export declare const podman: (options?: PodmanOptions | undefined) => SandboxProvider;
40
+ /**
41
+ * Derive the default Podman image name from the repo directory.
42
+ * Returns `sandcastle:<dir-name>` where dir-name is the last path segment,
43
+ * lowercased and sanitized for image tag rules.
44
+ */
45
+ export declare const defaultImageName: (repoDir: string) => string;
46
+ //# sourceMappingURL=podman.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"podman.d.ts","sourceRoot":"","sources":["../../src/sandboxes/podman.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,uHAAuH;IACvH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,0DA4KlB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,6BAI5B,CAAC"}