@ai-hero/sandcastle 0.5.7 → 0.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -3
- package/dist/AgentProvider.d.ts +2 -0
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +4 -1
- package/dist/AgentProvider.js.map +1 -1
- package/dist/DockerLifecycle.d.ts +16 -1
- package/dist/DockerLifecycle.d.ts.map +1 -1
- package/dist/DockerLifecycle.js +12 -2
- package/dist/DockerLifecycle.js.map +1 -1
- package/dist/EnvResolver.d.ts.map +1 -1
- package/dist/EnvResolver.js +18 -3
- package/dist/EnvResolver.js.map +1 -1
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +37 -21
- package/dist/InitService.js.map +1 -1
- package/dist/Output.d.ts +80 -0
- package/dist/Output.d.ts.map +1 -0
- package/dist/Output.js +68 -0
- package/dist/Output.js.map +1 -0
- package/dist/SessionPaths.d.ts.map +1 -1
- package/dist/SessionPaths.js +4 -2
- package/dist/SessionPaths.js.map +1 -1
- package/dist/SessionStore.d.ts.map +1 -1
- package/dist/SessionStore.js +8 -5
- package/dist/SessionStore.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -1
- package/dist/cli.js.map +1 -1
- package/dist/createSandbox.d.ts.map +1 -1
- package/dist/createSandbox.js +13 -2
- package/dist/createSandbox.js.map +1 -1
- package/dist/extractStructuredOutput.d.ts +21 -0
- package/dist/extractStructuredOutput.d.ts.map +1 -0
- package/dist/extractStructuredOutput.js +97 -0
- package/dist/extractStructuredOutput.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mountUtils.d.ts +42 -0
- package/dist/mountUtils.d.ts.map +1 -1
- package/dist/mountUtils.js +58 -2
- package/dist/mountUtils.js.map +1 -1
- package/dist/run.d.ts +30 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +27 -3
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/docker.d.ts +22 -0
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +71 -9
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/podman.d.ts +2 -1
- package/dist/sandboxes/podman.d.ts.map +1 -1
- package/dist/sandboxes/podman.js +28 -8
- package/dist/sandboxes/podman.js.map +1 -1
- package/dist/startSandbox.js +4 -2
- package/dist/startSandbox.js.map +1 -1
- package/dist/templates/parallel-planner/plan-prompt.md +2 -0
- package/dist/templates/parallel-planner-with-review/plan-prompt.md +2 -0
- package/dist/templates/sequential-reviewer/implement-prompt.md +1 -1
- package/dist/templates/sequential-reviewer/main.mts +54 -49
- package/dist/templates/simple-loop/main.mts +1 -1
- package/dist/templates/simple-loop/prompt.md +1 -1
- package/dist/templates/simple-loop/template.json +1 -1
- package/dist/testSetup.js +1 -1
- package/dist/testSetup.js.map +1 -1
- package/package.json +1 -1
package/dist/mountUtils.d.ts
CHANGED
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
* validation, image naming, and Windows path normalization.
|
|
6
6
|
*/
|
|
7
7
|
import type { MountConfig } from "./MountConfig.js";
|
|
8
|
+
/**
|
|
9
|
+
* SELinux volume label suffix applied to bind mounts.
|
|
10
|
+
*
|
|
11
|
+
* - `"z"` — shared label. No-op on non-SELinux systems.
|
|
12
|
+
* - `"Z"` — private label; only this container can access the mount.
|
|
13
|
+
* - `false` — disable labeling entirely.
|
|
14
|
+
*/
|
|
15
|
+
export type SelinuxLabel = "z" | "Z" | false;
|
|
8
16
|
/**
|
|
9
17
|
* Deterministic mount point inside the sandbox for the parent repo's .git
|
|
10
18
|
* directory when the workspace is a git worktree. See ADR-0006.
|
|
@@ -101,4 +109,38 @@ export declare const patchGitMountsForWindows: (gitMounts: {
|
|
|
101
109
|
hostPath: string;
|
|
102
110
|
sandboxPath: string;
|
|
103
111
|
}[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Format a bind mount into a `-v` style string for container runtimes.
|
|
114
|
+
*
|
|
115
|
+
* Produces: `hostPath:sandboxPath[:ro][,z|Z]`
|
|
116
|
+
*
|
|
117
|
+
* Used by both Podman and Docker providers.
|
|
118
|
+
*/
|
|
119
|
+
export declare const formatVolumeMount: (mount: {
|
|
120
|
+
hostPath: string;
|
|
121
|
+
sandboxPath: string;
|
|
122
|
+
readonly?: boolean | undefined;
|
|
123
|
+
}, selinuxLabel: SelinuxLabel | undefined) => string;
|
|
124
|
+
/**
|
|
125
|
+
* Detect file-target mounts whose sandbox-side parent directory may not
|
|
126
|
+
* exist in the container image, and return the parent dirs that need to
|
|
127
|
+
* be created at container start.
|
|
128
|
+
*
|
|
129
|
+
* Validates at config time: if a file mount's sandbox parent is outside
|
|
130
|
+
* `sandboxHomedir`, throws with a clear error and remediation guidance.
|
|
131
|
+
*
|
|
132
|
+
* For file mounts whose parent is under `sandboxHomedir` (but not equal
|
|
133
|
+
* to it — `/home/agent` always exists), returns the unique set of parent
|
|
134
|
+
* directories that must be `mkdir -p` + `chown`'d before the agent runs.
|
|
135
|
+
*
|
|
136
|
+
* @param mounts - Resolved mounts (hostPath already validated to exist).
|
|
137
|
+
* @param sandboxHomedir - The agent's home directory in the sandbox (e.g. `/home/agent`).
|
|
138
|
+
* @param statFn - Injectable stat function for testing (defaults to `statSync`).
|
|
139
|
+
*/
|
|
140
|
+
export declare const processFileMountParents: (mounts: readonly {
|
|
141
|
+
hostPath: string;
|
|
142
|
+
sandboxPath: string;
|
|
143
|
+
}[], sandboxHomedir: string, statFn?: (path: string) => {
|
|
144
|
+
isFile(): boolean;
|
|
145
|
+
}) => string[];
|
|
104
146
|
//# sourceMappingURL=mountUtils.d.ts.map
|
package/dist/mountUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mountUtils.d.ts","sourceRoot":"","sources":["../src/mountUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,6BAQ5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,yDAKvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,8BAG3B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,sEAiB9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;GAqB1B,CAAC;AAEL;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,GAC1B,CAAC;;;2FAuCF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;CAS3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,wBAAwB;;;;;;IAwFpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"mountUtils.d.ts","sourceRoot":"","sources":["../src/mountUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,6BAQ5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,yDAKvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,8BAG3B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,sEAiB9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;GAqB1B,CAAC;AAEL;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,GAC1B,CAAC;;;2FAuCF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;CAS3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,wBAAwB;;;;;;IAwFpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;oDAU7B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB;;;;;cAmCnC,CAAC"}
|
package/dist/mountUtils.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Handles host/sandbox path resolution, tilde expansion, user mount
|
|
5
5
|
* validation, image naming, and Windows path normalization.
|
|
6
6
|
*/
|
|
7
|
-
import { existsSync } from "node:fs";
|
|
7
|
+
import { existsSync, statSync } from "node:fs";
|
|
8
8
|
import { tmpdir, homedir } from "node:os";
|
|
9
|
-
import { isAbsolute, resolve, join } from "node:path";
|
|
9
|
+
import { isAbsolute, resolve, join, dirname } from "node:path";
|
|
10
10
|
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
11
11
|
import { SANDBOX_REPO_DIR } from "./SandboxFactory.js";
|
|
12
12
|
/**
|
|
@@ -242,4 +242,60 @@ export const patchGitMountsForWindows = async (gitMounts, worktreeHostPath, sand
|
|
|
242
242
|
}
|
|
243
243
|
return correctedMounts;
|
|
244
244
|
};
|
|
245
|
+
/**
|
|
246
|
+
* Format a bind mount into a `-v` style string for container runtimes.
|
|
247
|
+
*
|
|
248
|
+
* Produces: `hostPath:sandboxPath[:ro][,z|Z]`
|
|
249
|
+
*
|
|
250
|
+
* Used by both Podman and Docker providers.
|
|
251
|
+
*/
|
|
252
|
+
export const formatVolumeMount = (mount, selinuxLabel) => {
|
|
253
|
+
const base = `${mount.hostPath}:${mount.sandboxPath}`;
|
|
254
|
+
const options = [mount.readonly ? "ro" : undefined, selinuxLabel || undefined]
|
|
255
|
+
.filter((option) => option !== undefined)
|
|
256
|
+
.join(",");
|
|
257
|
+
return options ? `${base}:${options}` : base;
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Detect file-target mounts whose sandbox-side parent directory may not
|
|
261
|
+
* exist in the container image, and return the parent dirs that need to
|
|
262
|
+
* be created at container start.
|
|
263
|
+
*
|
|
264
|
+
* Validates at config time: if a file mount's sandbox parent is outside
|
|
265
|
+
* `sandboxHomedir`, throws with a clear error and remediation guidance.
|
|
266
|
+
*
|
|
267
|
+
* For file mounts whose parent is under `sandboxHomedir` (but not equal
|
|
268
|
+
* to it — `/home/agent` always exists), returns the unique set of parent
|
|
269
|
+
* directories that must be `mkdir -p` + `chown`'d before the agent runs.
|
|
270
|
+
*
|
|
271
|
+
* @param mounts - Resolved mounts (hostPath already validated to exist).
|
|
272
|
+
* @param sandboxHomedir - The agent's home directory in the sandbox (e.g. `/home/agent`).
|
|
273
|
+
* @param statFn - Injectable stat function for testing (defaults to `statSync`).
|
|
274
|
+
*/
|
|
275
|
+
export const processFileMountParents = (mounts, sandboxHomedir, statFn = statSync) => {
|
|
276
|
+
const parentDirs = new Set();
|
|
277
|
+
for (const mount of mounts) {
|
|
278
|
+
let isFile;
|
|
279
|
+
try {
|
|
280
|
+
isFile = statFn(mount.hostPath).isFile();
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
if (!isFile)
|
|
286
|
+
continue;
|
|
287
|
+
const parentDir = dirname(mount.sandboxPath);
|
|
288
|
+
// Parent IS sandboxHomedir — it always exists in the image
|
|
289
|
+
if (parentDir === sandboxHomedir)
|
|
290
|
+
continue;
|
|
291
|
+
// Parent is outside sandboxHomedir — fail at config time
|
|
292
|
+
if (!parentDir.startsWith(sandboxHomedir + "/")) {
|
|
293
|
+
throw new Error(`Cannot mount file to '${mount.sandboxPath}': ` +
|
|
294
|
+
`parent directory '${parentDir}' is outside the sandbox home directory ('${sandboxHomedir}'). ` +
|
|
295
|
+
`Mount the parent directory instead, or rebuild the image with '${parentDir}' pre-created.`);
|
|
296
|
+
}
|
|
297
|
+
parentDirs.add(parentDir);
|
|
298
|
+
}
|
|
299
|
+
return [...parentDirs];
|
|
300
|
+
};
|
|
245
301
|
//# sourceMappingURL=mountUtils.js.map
|
package/dist/mountUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mountUtils.js","sourceRoot":"","sources":["../src/mountUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mountUtils.js","sourceRoot":"","sources":["../src/mountUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { SandboxProvider, BranchStrategy } from "./SandboxProvider.js";
|
|
|
5
5
|
import { type AgentStreamEvent } from "./AgentStreamEmitter.js";
|
|
6
6
|
import type { SandboxHooks } from "./SandboxLifecycle.js";
|
|
7
7
|
import { type PromptArgs } from "./PromptArgumentSubstitution.js";
|
|
8
|
+
import type { OutputDefinition, OutputObjectDefinition, OutputStringDefinition } from "./Output.js";
|
|
8
9
|
/** Default maximum number of iterations for a run. */
|
|
9
10
|
export declare const DEFAULT_MAX_ITERATIONS = 1;
|
|
10
11
|
/** Replace characters that are invalid or problematic in file paths with dashes. */
|
|
@@ -153,6 +154,21 @@ export interface RunOptions {
|
|
|
153
154
|
readonly signal?: AbortSignal;
|
|
154
155
|
/** Override default timeouts for built-in lifecycle steps. Unset keys keep their defaults. */
|
|
155
156
|
readonly timeouts?: Timeouts;
|
|
157
|
+
/**
|
|
158
|
+
* Structured output definition. When provided, the agent's stdout is
|
|
159
|
+
* scanned for the configured XML tag after the iteration completes, and the
|
|
160
|
+
* result is parsed/validated and returned on `RunResult.output`.
|
|
161
|
+
*
|
|
162
|
+
* Use `Output.object({ tag, schema })` for JSON+schema or
|
|
163
|
+
* `Output.string({ tag })` for raw string extraction.
|
|
164
|
+
*
|
|
165
|
+
* Constraints:
|
|
166
|
+
* - `maxIterations` must be `1` (the default).
|
|
167
|
+
* - The resolved prompt must contain the configured opening tag literal.
|
|
168
|
+
*
|
|
169
|
+
* See ADR 0010 for design rationale.
|
|
170
|
+
*/
|
|
171
|
+
readonly output?: OutputDefinition;
|
|
156
172
|
}
|
|
157
173
|
export type { IterationResult, IterationUsage } from "./Orchestrator.js";
|
|
158
174
|
export interface RunResult {
|
|
@@ -173,5 +189,18 @@ export interface RunResult {
|
|
|
173
189
|
/** Host path to the preserved worktree, set when the run succeeded but the worktree had uncommitted changes. */
|
|
174
190
|
readonly preservedWorktreePath?: string;
|
|
175
191
|
}
|
|
176
|
-
|
|
192
|
+
/** Overload: with `Output.object`, returns `RunResult` with typed `output: T`. */
|
|
193
|
+
export declare function run<T>(options: RunOptions & {
|
|
194
|
+
output: OutputObjectDefinition<T>;
|
|
195
|
+
}): Promise<RunResult & {
|
|
196
|
+
output: T;
|
|
197
|
+
}>;
|
|
198
|
+
/** Overload: with `Output.string`, returns `RunResult` with `output: string`. */
|
|
199
|
+
export declare function run(options: RunOptions & {
|
|
200
|
+
output: OutputStringDefinition;
|
|
201
|
+
}): Promise<RunResult & {
|
|
202
|
+
output: string;
|
|
203
|
+
}>;
|
|
204
|
+
/** Overload: without `output`, returns the standard `RunResult`. */
|
|
205
|
+
export declare function run(options: RunOptions): Promise<RunResult>;
|
|
177
206
|
//# sourceMappingURL=run.d.ts.map
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI5E,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,OAAO,EACL,KAAK,UAAU,EAKhB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/run.js
CHANGED
|
@@ -16,6 +16,7 @@ import { hostSessionStore } from "./SessionStore.js";
|
|
|
16
16
|
import { defaultSessionPathsLayer } from "./SessionPaths.js";
|
|
17
17
|
import { generateTempBranchName, getCurrentBranch } from "./WorktreeManager.js";
|
|
18
18
|
import { substitutePromptArgs, validateNoArgsWithInlinePrompt, validateNoBuiltInArgOverride, BUILT_IN_PROMPT_ARG_KEYS, } from "./PromptArgumentSubstitution.js";
|
|
19
|
+
import { extractStructuredOutput } from "./extractStructuredOutput.js";
|
|
19
20
|
/** Default maximum number of iterations for a run. */
|
|
20
21
|
export const DEFAULT_MAX_ITERATIONS = 1;
|
|
21
22
|
/** Replace characters that are invalid or problematic in file paths with dashes. */
|
|
@@ -99,7 +100,7 @@ export const formatContextWindowSize = (usage) => {
|
|
|
99
100
|
export const buildContextWindowLines = (iterations) => iterations
|
|
100
101
|
.filter((it) => it.usage !== undefined)
|
|
101
102
|
.map((it) => `Context window: ${formatContextWindowSize(it.usage)}`);
|
|
102
|
-
export
|
|
103
|
+
export async function run(options) {
|
|
103
104
|
// If signal is already aborted, reject immediately without any setup
|
|
104
105
|
options.signal?.throwIfAborted();
|
|
105
106
|
const { prompt, promptFile, maxIterations = DEFAULT_MAX_ITERATIONS, hooks, agent: provider, } = options;
|
|
@@ -125,6 +126,11 @@ export const run = async (options) => {
|
|
|
125
126
|
throw new Error("resumeSession cannot be combined with maxIterations > 1. " +
|
|
126
127
|
"Resume applies to iteration 1 only; multi-iteration resume semantics are not supported.");
|
|
127
128
|
}
|
|
129
|
+
// Validate: output requires maxIterations === 1
|
|
130
|
+
if (options.output && maxIterations !== 1) {
|
|
131
|
+
throw new Error("output requires maxIterations to be 1. " +
|
|
132
|
+
"Structured output is only supported for single-iteration runs.");
|
|
133
|
+
}
|
|
128
134
|
// Extract explicit branch when in branch mode
|
|
129
135
|
const branch = branchStrategy.type === "branch" ? branchStrategy.branch : undefined;
|
|
130
136
|
const hostRepoDir = await Effect.runPromise(resolveCwd(options.cwd).pipe(Effect.provide(NodeContext.layer)));
|
|
@@ -140,6 +146,14 @@ export const run = async (options) => {
|
|
|
140
146
|
const resolved = await Effect.runPromise(resolvePrompt({ prompt, promptFile }).pipe(Effect.provide(NodeContext.layer)));
|
|
141
147
|
const rawPrompt = resolved.text;
|
|
142
148
|
const isInlinePrompt = resolved.source === "inline";
|
|
149
|
+
// Validate: output tag must appear in the resolved prompt
|
|
150
|
+
if (options.output) {
|
|
151
|
+
const openTag = `<${options.output.tag}>`;
|
|
152
|
+
if (!rawPrompt.includes(openTag)) {
|
|
153
|
+
throw new Error(`output tag <${options.output.tag}> not found in the resolved prompt. ` +
|
|
154
|
+
"The caller must instruct the agent to emit the configured tag.");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
143
157
|
const agentName = provider.name;
|
|
144
158
|
// Resolve env vars and merge with provider env
|
|
145
159
|
const resolvedEnv = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
|
|
@@ -261,9 +275,19 @@ export const run = async (options) => {
|
|
|
261
275
|
options.signal?.throwIfAborted();
|
|
262
276
|
throw error;
|
|
263
277
|
}
|
|
264
|
-
|
|
278
|
+
const baseResult = {
|
|
265
279
|
...result,
|
|
266
280
|
logFilePath: resolvedLogging.type === "file" ? resolvedLogging.path : undefined,
|
|
267
281
|
};
|
|
268
|
-
|
|
282
|
+
// Extract structured output after the iteration completes (separate pass from completion signal)
|
|
283
|
+
if (options.output) {
|
|
284
|
+
const output = await extractStructuredOutput(baseResult.stdout, options.output, {
|
|
285
|
+
commits: baseResult.commits,
|
|
286
|
+
branch: baseResult.branch,
|
|
287
|
+
preservedWorktreePath: baseResult.preservedWorktreePath,
|
|
288
|
+
});
|
|
289
|
+
return { ...baseResult, output };
|
|
290
|
+
}
|
|
291
|
+
return baseResult;
|
|
292
|
+
}
|
|
269
293
|
//# sourceMappingURL=run.js.map
|
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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"}
|
|
@@ -7,10 +7,32 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type SandboxProvider } from "../SandboxProvider.js";
|
|
9
9
|
import type { MountConfig } from "../MountConfig.js";
|
|
10
|
+
import type { SelinuxLabel } from "../mountUtils.js";
|
|
10
11
|
import { defaultImageName } from "../mountUtils.js";
|
|
11
12
|
export interface DockerOptions {
|
|
12
13
|
/** Docker image name (default: derived from repo directory name). */
|
|
13
14
|
readonly imageName?: string;
|
|
15
|
+
/**
|
|
16
|
+
* The UID of the `agent` user inside the container image (default: host UID via `process.getuid()`, or 1000).
|
|
17
|
+
*
|
|
18
|
+
* Must match the UID baked into the image at build time. Used as the `--user` flag value
|
|
19
|
+
* and checked against the image's configured UID in the pre-flight diagnostic.
|
|
20
|
+
*/
|
|
21
|
+
readonly containerUid?: number;
|
|
22
|
+
/**
|
|
23
|
+
* The GID of the `agent` user inside the container image (default: host GID via `process.getgid()`, or 1000).
|
|
24
|
+
*
|
|
25
|
+
* Must match the GID baked into the image at build time. Used as the `--user` flag value.
|
|
26
|
+
*/
|
|
27
|
+
readonly containerGid?: number;
|
|
28
|
+
/**
|
|
29
|
+
* SELinux volume label suffix applied to bind mounts.
|
|
30
|
+
*
|
|
31
|
+
* - `"z"` — shared label (default). No-op on non-SELinux systems.
|
|
32
|
+
* - `"Z"` — private label; only this container can access the mount.
|
|
33
|
+
* - `false` — disable labeling entirely.
|
|
34
|
+
*/
|
|
35
|
+
readonly selinuxLabel?: SelinuxLabel;
|
|
14
36
|
/**
|
|
15
37
|
* Additional host directories to bind-mount into the sandbox.
|
|
16
38
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAEL,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAEL,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAGjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;;;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;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,0DA8PlB,CAAC;AAGF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/sandboxes/docker.js
CHANGED
|
@@ -11,7 +11,7 @@ import { createInterface } from "node:readline";
|
|
|
11
11
|
import { Effect } from "effect";
|
|
12
12
|
import { startContainer, removeContainer } from "../DockerLifecycle.js";
|
|
13
13
|
import { createBindMountSandboxProvider, } from "../SandboxProvider.js";
|
|
14
|
-
import { defaultImageName, resolveUserMounts } from "../mountUtils.js";
|
|
14
|
+
import { defaultImageName, resolveUserMounts, processFileMountParents, } from "../mountUtils.js";
|
|
15
15
|
/**
|
|
16
16
|
* Create a Docker sandbox provider.
|
|
17
17
|
*
|
|
@@ -20,10 +20,14 @@ import { defaultImageName, resolveUserMounts } from "../mountUtils.js";
|
|
|
20
20
|
*/
|
|
21
21
|
export const docker = (options) => {
|
|
22
22
|
const configuredImageName = options?.imageName;
|
|
23
|
+
const selinuxLabel = options?.selinuxLabel ?? "z";
|
|
23
24
|
const sandboxHomedir = "/home/agent";
|
|
24
25
|
const userMounts = options?.mounts
|
|
25
26
|
? resolveUserMounts(options.mounts, sandboxHomedir)
|
|
26
27
|
: [];
|
|
28
|
+
// Validate file mounts and collect parent dirs to create at container start.
|
|
29
|
+
// Throws at construction time if any file mount parent is outside sandboxHomedir.
|
|
30
|
+
const parentDirsToCreate = processFileMountParents(userMounts, sandboxHomedir);
|
|
27
31
|
return createBindMountSandboxProvider({
|
|
28
32
|
name: "docker",
|
|
29
33
|
env: options?.env,
|
|
@@ -31,16 +35,19 @@ export const docker = (options) => {
|
|
|
31
35
|
create: async (createOptions) => {
|
|
32
36
|
const containerName = `sandcastle-${randomUUID()}`;
|
|
33
37
|
const worktreePath = createOptions.mounts.find((m) => m.hostPath === createOptions.worktreePath)?.sandboxPath ?? "/home/agent/workspace";
|
|
34
|
-
// Build volume mount
|
|
38
|
+
// Build volume mount list (internal mounts + user-provided mounts)
|
|
35
39
|
const allMounts = [...createOptions.mounts, ...userMounts];
|
|
36
|
-
const volumeMounts = allMounts.map((m) => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
const volumeMounts = allMounts.map((m) => ({
|
|
41
|
+
hostPath: m.hostPath,
|
|
42
|
+
sandboxPath: m.sandboxPath,
|
|
43
|
+
readonly: m.readonly,
|
|
44
|
+
}));
|
|
40
45
|
// Resolve image name
|
|
41
46
|
const imageName = configuredImageName ?? defaultImageName(createOptions.hostRepoPath);
|
|
42
|
-
const
|
|
43
|
-
const
|
|
47
|
+
const containerUid = options?.containerUid ?? process.getuid?.() ?? 1000;
|
|
48
|
+
const containerGid = options?.containerGid ?? process.getgid?.() ?? 1000;
|
|
49
|
+
// Pre-flight: verify image exists and UID matches
|
|
50
|
+
await checkImageUid(imageName, containerUid);
|
|
44
51
|
// Start container
|
|
45
52
|
await Effect.runPromise(startContainer(containerName, imageName, {
|
|
46
53
|
...createOptions.env,
|
|
@@ -48,9 +55,34 @@ export const docker = (options) => {
|
|
|
48
55
|
}, {
|
|
49
56
|
volumeMounts,
|
|
50
57
|
workdir: worktreePath,
|
|
51
|
-
user: `${
|
|
58
|
+
user: `${containerUid}:${containerGid}`,
|
|
52
59
|
network: options?.network,
|
|
60
|
+
selinuxLabel,
|
|
53
61
|
}));
|
|
62
|
+
// Create parent directories for file mounts and chown to the container user
|
|
63
|
+
for (const dir of parentDirsToCreate) {
|
|
64
|
+
await new Promise((resolve, reject) => {
|
|
65
|
+
execFile("docker", [
|
|
66
|
+
"exec",
|
|
67
|
+
"--user",
|
|
68
|
+
"0:0",
|
|
69
|
+
containerName,
|
|
70
|
+
"sh",
|
|
71
|
+
"-c",
|
|
72
|
+
`mkdir -p "$1" && chown "$2" "$1"`,
|
|
73
|
+
"sh",
|
|
74
|
+
dir,
|
|
75
|
+
`${containerUid}:${containerGid}`,
|
|
76
|
+
], (error) => {
|
|
77
|
+
if (error) {
|
|
78
|
+
reject(new Error(`Failed to create parent directory '${dir}' in container: ${error.message}`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
resolve();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
54
86
|
// Set up signal handlers for cleanup
|
|
55
87
|
const onExit = () => {
|
|
56
88
|
try {
|
|
@@ -179,4 +211,34 @@ export const docker = (options) => {
|
|
|
179
211
|
};
|
|
180
212
|
// Re-export for backwards compatibility
|
|
181
213
|
export { defaultImageName };
|
|
214
|
+
const checkImageUid = (imageName, expectedUid) => new Promise((resolve, reject) => {
|
|
215
|
+
execFile("docker", ["image", "inspect", imageName, "--format", "{{.Config.User}}"], (error, stdout) => {
|
|
216
|
+
if (error) {
|
|
217
|
+
reject(new Error(`Image '${imageName}' not found locally. Build it first with 'sandcastle docker build-image'.`));
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const imageUser = (stdout ?? "").toString().trim();
|
|
221
|
+
if (!imageUser) {
|
|
222
|
+
// No USER directive in image — skip check
|
|
223
|
+
resolve();
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const uidPart = imageUser.split(":")[0];
|
|
227
|
+
const imageUid = parseInt(uidPart, 10);
|
|
228
|
+
if (isNaN(imageUid)) {
|
|
229
|
+
// Non-numeric user (e.g. "agent") — can't compare, skip check
|
|
230
|
+
resolve();
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (imageUid !== expectedUid) {
|
|
234
|
+
reject(new Error(`UID mismatch: image '${imageName}' was built with UID ${imageUid}, ` +
|
|
235
|
+
`but the expected UID is ${expectedUid}. ` +
|
|
236
|
+
`Rebuild the image with 'sandcastle docker build-image', ` +
|
|
237
|
+
`or pass containerUid: ${imageUid} to docker() to match the image.`));
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
resolve();
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
182
244
|
//# sourceMappingURL=docker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,KAAK,GAEN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,8BAA8B,GAM/B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type SandboxProvider } from "../SandboxProvider.js";
|
|
9
9
|
import type { MountConfig } from "../MountConfig.js";
|
|
10
|
+
import type { SelinuxLabel } from "../mountUtils.js";
|
|
10
11
|
import { defaultImageName } from "../mountUtils.js";
|
|
11
12
|
export interface PodmanOptions {
|
|
12
13
|
/** Podman image name (default: derived from repo directory name). */
|
|
@@ -18,7 +19,7 @@ export interface PodmanOptions {
|
|
|
18
19
|
* - `"Z"` — private label; only this container can access the mount.
|
|
19
20
|
* - `false` — disable labeling entirely.
|
|
20
21
|
*/
|
|
21
|
-
readonly selinuxLabel?:
|
|
22
|
+
readonly selinuxLabel?: SelinuxLabel;
|
|
22
23
|
/**
|
|
23
24
|
* User namespace mode for rootless Podman.
|
|
24
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"podman.d.ts","sourceRoot":"","sources":["../../src/sandboxes/podman.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EAEL,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"podman.d.ts","sourceRoot":"","sources":["../../src/sandboxes/podman.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EAEL,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAIjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;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;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,0DAuSlB,CAAC;AAGF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/sandboxes/podman.js
CHANGED
|
@@ -9,7 +9,7 @@ import { execFile, execFileSync, spawn, } from "node:child_process";
|
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
10
10
|
import { createInterface } from "node:readline";
|
|
11
11
|
import { createBindMountSandboxProvider, } from "../SandboxProvider.js";
|
|
12
|
-
import { defaultImageName, resolveUserMounts } from "../mountUtils.js";
|
|
12
|
+
import { defaultImageName, resolveUserMounts, formatVolumeMount, processFileMountParents, } from "../mountUtils.js";
|
|
13
13
|
/**
|
|
14
14
|
* Create a Podman sandbox provider.
|
|
15
15
|
*
|
|
@@ -28,6 +28,9 @@ export const podman = (options) => {
|
|
|
28
28
|
const userMounts = options?.mounts
|
|
29
29
|
? resolveUserMounts(options.mounts, sandboxHomedir)
|
|
30
30
|
: [];
|
|
31
|
+
// Validate file mounts and collect parent dirs to create at container start.
|
|
32
|
+
// Throws at construction time if any file mount parent is outside sandboxHomedir.
|
|
33
|
+
const parentDirsToCreate = processFileMountParents(userMounts, sandboxHomedir);
|
|
31
34
|
return createBindMountSandboxProvider({
|
|
32
35
|
name: "podman",
|
|
33
36
|
env: options?.env,
|
|
@@ -89,6 +92,30 @@ export const podman = (options) => {
|
|
|
89
92
|
}
|
|
90
93
|
});
|
|
91
94
|
});
|
|
95
|
+
// Create parent directories for file mounts and chown to the container user
|
|
96
|
+
for (const dir of parentDirsToCreate) {
|
|
97
|
+
await new Promise((resolve, reject) => {
|
|
98
|
+
execFile("podman", [
|
|
99
|
+
"exec",
|
|
100
|
+
"--user",
|
|
101
|
+
"0:0",
|
|
102
|
+
containerName,
|
|
103
|
+
"sh",
|
|
104
|
+
"-c",
|
|
105
|
+
`mkdir -p "$1" && chown "$2" "$1"`,
|
|
106
|
+
"sh",
|
|
107
|
+
dir,
|
|
108
|
+
`${containerUid}:${containerGid}`,
|
|
109
|
+
], (error) => {
|
|
110
|
+
if (error) {
|
|
111
|
+
reject(new Error(`Failed to create parent directory '${dir}' in container: ${error.message}`));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
resolve();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
92
119
|
// Set up signal handlers for cleanup
|
|
93
120
|
const onExit = () => {
|
|
94
121
|
try {
|
|
@@ -258,11 +285,4 @@ const checkPodmanMachine = () => new Promise((resolve, reject) => {
|
|
|
258
285
|
}
|
|
259
286
|
});
|
|
260
287
|
});
|
|
261
|
-
const formatVolumeMount = (mount, selinuxLabel) => {
|
|
262
|
-
const base = `${mount.hostPath}:${mount.sandboxPath}`;
|
|
263
|
-
const options = [mount.readonly ? "ro" : undefined, selinuxLabel || undefined]
|
|
264
|
-
.filter((option) => option !== undefined)
|
|
265
|
-
.join(",");
|
|
266
|
-
return options ? `${base}:${options}` : base;
|
|
267
|
-
};
|
|
268
288
|
//# sourceMappingURL=podman.js.map
|