@ai-hero/sandcastle 0.5.1 → 0.5.4
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 +93 -62
- package/dist/AgentProvider.d.ts +17 -1
- package/dist/AgentProvider.d.ts.map +1 -1
- package/dist/AgentProvider.js +75 -6
- package/dist/AgentProvider.js.map +1 -1
- package/dist/AgentStreamEmitter.d.ts +36 -0
- package/dist/AgentStreamEmitter.d.ts.map +1 -0
- package/dist/AgentStreamEmitter.js +21 -0
- package/dist/AgentStreamEmitter.js.map +1 -0
- package/dist/Display.js +1 -1
- package/dist/Display.js.map +1 -1
- package/dist/DockerLifecycle.d.ts +0 -10
- package/dist/DockerLifecycle.d.ts.map +1 -1
- package/dist/DockerLifecycle.js +0 -22
- package/dist/DockerLifecycle.js.map +1 -1
- package/dist/InitService.d.ts.map +1 -1
- package/dist/InitService.js +3 -1
- package/dist/InitService.js.map +1 -1
- package/dist/MountConfig.d.ts +1 -2
- package/dist/MountConfig.d.ts.map +1 -1
- package/dist/Orchestrator.d.ts +10 -3
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +79 -12
- package/dist/Orchestrator.js.map +1 -1
- package/dist/PodmanLifecycle.d.ts +0 -10
- package/dist/PodmanLifecycle.d.ts.map +1 -1
- package/dist/PodmanLifecycle.js +0 -22
- package/dist/PodmanLifecycle.js.map +1 -1
- package/dist/PromptArgumentSubstitution.d.ts +6 -0
- package/dist/PromptArgumentSubstitution.d.ts.map +1 -1
- package/dist/PromptArgumentSubstitution.js +32 -6
- package/dist/PromptArgumentSubstitution.js.map +1 -1
- package/dist/PromptPreprocessor.d.ts +8 -0
- package/dist/PromptPreprocessor.d.ts.map +1 -1
- package/dist/PromptPreprocessor.js +13 -9
- package/dist/PromptPreprocessor.js.map +1 -1
- package/dist/PromptResolver.d.ts +13 -1
- package/dist/PromptResolver.d.ts.map +1 -1
- package/dist/PromptResolver.js +3 -2
- package/dist/PromptResolver.js.map +1 -1
- package/dist/SandboxFactory.d.ts +5 -5
- package/dist/SandboxFactory.d.ts.map +1 -1
- package/dist/SandboxFactory.js +20 -10
- package/dist/SandboxFactory.js.map +1 -1
- package/dist/SandboxLifecycle.d.ts +4 -1
- package/dist/SandboxLifecycle.d.ts.map +1 -1
- package/dist/SandboxLifecycle.js +40 -12
- package/dist/SandboxLifecycle.js.map +1 -1
- package/dist/SandboxProvider.d.ts +30 -0
- package/dist/SandboxProvider.d.ts.map +1 -1
- package/dist/SandboxProvider.js +1 -0
- package/dist/SandboxProvider.js.map +1 -1
- package/dist/SessionStore.d.ts +1 -1
- package/dist/SessionStore.d.ts.map +1 -1
- package/dist/SessionStore.js +3 -0
- package/dist/SessionStore.js.map +1 -1
- package/dist/WorktreeManager.d.ts +6 -3
- package/dist/WorktreeManager.d.ts.map +1 -1
- package/dist/WorktreeManager.js +47 -5
- package/dist/WorktreeManager.js.map +1 -1
- package/dist/createSandbox.d.ts +23 -2
- package/dist/createSandbox.d.ts.map +1 -1
- package/dist/createSandbox.js +114 -50
- package/dist/createSandbox.js.map +1 -1
- package/dist/createWorktree.d.ts +23 -0
- package/dist/createWorktree.d.ts.map +1 -1
- package/dist/createWorktree.js +83 -24
- package/dist/createWorktree.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +11 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +32 -13
- package/dist/interactive.js.map +1 -1
- package/dist/mountUtils.d.ts +104 -0
- package/dist/mountUtils.d.ts.map +1 -0
- package/dist/mountUtils.js +245 -0
- package/dist/mountUtils.js.map +1 -0
- package/dist/raceAbortSignal.d.ts +18 -0
- package/dist/raceAbortSignal.d.ts.map +1 -0
- package/dist/raceAbortSignal.js +32 -0
- package/dist/raceAbortSignal.js.map +1 -0
- package/dist/run.d.ts +34 -4
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +63 -18
- package/dist/run.js.map +1 -1
- package/dist/sandboxes/docker.d.ts +2 -6
- package/dist/sandboxes/docker.d.ts.map +1 -1
- package/dist/sandboxes/docker.js +44 -78
- package/dist/sandboxes/docker.js.map +1 -1
- package/dist/sandboxes/no-sandbox.d.ts.map +1 -1
- package/dist/sandboxes/no-sandbox.js +9 -1
- package/dist/sandboxes/no-sandbox.js.map +1 -1
- package/dist/sandboxes/podman.d.ts +19 -8
- package/dist/sandboxes/podman.d.ts.map +1 -1
- package/dist/sandboxes/podman.js +49 -87
- package/dist/sandboxes/podman.js.map +1 -1
- package/dist/startSandbox.d.ts.map +1 -1
- package/dist/startSandbox.js +8 -3
- package/dist/startSandbox.js.map +1 -1
- package/dist/templates/parallel-planner/implement-prompt.md +1 -1
- package/dist/templates/parallel-planner-with-review/implement-prompt.md +1 -1
- package/dist/templates/parallel-planner-with-review/main.mts +8 -1
- package/dist/templates/parallel-planner-with-review/review-prompt.md +2 -2
- package/dist/templates/sequential-reviewer/review-prompt.md +2 -2
- package/dist/testSandbox.d.ts.map +1 -1
- package/dist/testSandbox.js +38 -48
- package/dist/testSandbox.js.map +1 -1
- package/dist/testSetup.d.ts +2 -0
- package/dist/testSetup.d.ts.map +1 -0
- package/dist/testSetup.js +29 -0
- package/dist/testSetup.js.map +1 -0
- package/package.json +1 -1
package/dist/run.js
CHANGED
|
@@ -5,16 +5,17 @@ import { styleText } from "node:util";
|
|
|
5
5
|
import { Effect, Layer } from "effect";
|
|
6
6
|
import { resolveCwd } from "./resolveCwd.js";
|
|
7
7
|
import { ClackDisplay, Display, FileDisplay, } from "./Display.js";
|
|
8
|
-
import { orchestrate } from "./Orchestrator.js";
|
|
8
|
+
import { orchestrate, } from "./Orchestrator.js";
|
|
9
9
|
import { resolvePrompt } from "./PromptResolver.js";
|
|
10
10
|
import { WorktreeDockerSandboxFactory, SandboxConfig, } from "./SandboxFactory.js";
|
|
11
11
|
import { resolveEnv } from "./EnvResolver.js";
|
|
12
12
|
import { formatErrorMessage } from "./ErrorHandler.js";
|
|
13
|
+
import { callbackAgentStreamEmitterLayer, noopAgentStreamEmitterLayer, } from "./AgentStreamEmitter.js";
|
|
13
14
|
import { mergeProviderEnv } from "./mergeProviderEnv.js";
|
|
14
15
|
import { hostSessionStore } from "./SessionStore.js";
|
|
15
16
|
import { defaultSessionPathsLayer } from "./SessionPaths.js";
|
|
16
17
|
import { generateTempBranchName, getCurrentBranch } from "./WorktreeManager.js";
|
|
17
|
-
import { substitutePromptArgs, validateNoBuiltInArgOverride, BUILT_IN_PROMPT_ARG_KEYS, } from "./PromptArgumentSubstitution.js";
|
|
18
|
+
import { substitutePromptArgs, validateNoArgsWithInlinePrompt, validateNoBuiltInArgOverride, BUILT_IN_PROMPT_ARG_KEYS, } from "./PromptArgumentSubstitution.js";
|
|
18
19
|
/** Default maximum number of iterations for a run. */
|
|
19
20
|
export const DEFAULT_MAX_ITERATIONS = 1;
|
|
20
21
|
/** Replace characters that are invalid or problematic in file paths with dashes. */
|
|
@@ -79,7 +80,28 @@ export const buildCompletionMessage = (completionSignal, iterationsRun) => {
|
|
|
79
80
|
severity: "warn",
|
|
80
81
|
};
|
|
81
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* Format the context window size from an iteration's usage data.
|
|
85
|
+
* Returns a string like "103k" representing the total input-side tokens
|
|
86
|
+
* (inputTokens + cacheCreationInputTokens + cacheReadInputTokens)
|
|
87
|
+
* rounded up to the nearest 1000.
|
|
88
|
+
*/
|
|
89
|
+
export const formatContextWindowSize = (usage) => {
|
|
90
|
+
const total = usage.inputTokens +
|
|
91
|
+
usage.cacheCreationInputTokens +
|
|
92
|
+
usage.cacheReadInputTokens;
|
|
93
|
+
return `${Math.ceil(total / 1000)}k`;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Build "Context window: NNNk" lines for iterations that have usage data.
|
|
97
|
+
* Returns an empty array when no iterations carry usage.
|
|
98
|
+
*/
|
|
99
|
+
export const buildContextWindowLines = (iterations) => iterations
|
|
100
|
+
.filter((it) => it.usage !== undefined)
|
|
101
|
+
.map((it) => `Context window: ${formatContextWindowSize(it.usage)}`);
|
|
82
102
|
export const run = async (options) => {
|
|
103
|
+
// If signal is already aborted, reject immediately without any setup
|
|
104
|
+
options.signal?.throwIfAborted();
|
|
83
105
|
const { prompt, promptFile, maxIterations = DEFAULT_MAX_ITERATIONS, hooks, agent: provider, } = options;
|
|
84
106
|
// Derive branch strategy: explicit option > default based on provider tag
|
|
85
107
|
const branchStrategy = options.branchStrategy ??
|
|
@@ -115,7 +137,9 @@ export const run = async (options) => {
|
|
|
115
137
|
}
|
|
116
138
|
}
|
|
117
139
|
// Resolve prompt
|
|
118
|
-
const
|
|
140
|
+
const resolved = await Effect.runPromise(resolvePrompt({ prompt, promptFile }).pipe(Effect.provide(NodeContext.layer)));
|
|
141
|
+
const rawPrompt = resolved.text;
|
|
142
|
+
const isInlinePrompt = resolved.source === "inline";
|
|
119
143
|
const agentName = provider.name;
|
|
120
144
|
// Resolve env vars and merge with provider env
|
|
121
145
|
const resolvedEnv = await Effect.runPromise(resolveEnv(hostRepoDir).pipe(Effect.provide(NodeContext.layer)));
|
|
@@ -158,10 +182,13 @@ export const run = async (options) => {
|
|
|
158
182
|
name: options.name,
|
|
159
183
|
sandboxProvider: options.sandbox,
|
|
160
184
|
branchStrategy,
|
|
161
|
-
throwOnDuplicateWorktree: options.throwOnDuplicateWorktree,
|
|
162
185
|
hooks,
|
|
186
|
+
signal: options.signal,
|
|
163
187
|
}), NodeFileSystem.layer, displayLayer));
|
|
164
|
-
const
|
|
188
|
+
const agentStreamEmitterLayer = resolvedLogging.type === "file" && resolvedLogging.onAgentStreamEvent
|
|
189
|
+
? callbackAgentStreamEmitterLayer(resolvedLogging.onAgentStreamEvent)
|
|
190
|
+
: noopAgentStreamEmitterLayer;
|
|
191
|
+
const runLayer = Layer.mergeAll(factoryLayer, displayLayer, defaultSessionPathsLayer, agentStreamEmitterLayer);
|
|
165
192
|
const baseEffect = Effect.gen(function* () {
|
|
166
193
|
const d = yield* Display;
|
|
167
194
|
yield* d.intro(options.name ?? "sandcastle");
|
|
@@ -173,19 +200,24 @@ export const run = async (options) => {
|
|
|
173
200
|
branch: resolvedBranch,
|
|
174
201
|
});
|
|
175
202
|
yield* d.summary("Sandcastle Run", rows);
|
|
176
|
-
// Validate that the user has not provided built-in prompt argument keys
|
|
177
203
|
const userArgs = options.promptArgs ?? {};
|
|
178
|
-
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
204
|
+
// Inline prompts pass through to the agent literally — no substitution,
|
|
205
|
+
// no built-in arg injection. Guard against silently ignoring promptArgs.
|
|
206
|
+
let resolvedPrompt;
|
|
207
|
+
if (isInlinePrompt) {
|
|
208
|
+
yield* validateNoArgsWithInlinePrompt(userArgs);
|
|
209
|
+
resolvedPrompt = rawPrompt;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
yield* validateNoBuiltInArgOverride(userArgs);
|
|
213
|
+
const effectiveArgs = {
|
|
214
|
+
SOURCE_BRANCH: resolvedBranch,
|
|
215
|
+
TARGET_BRANCH: currentHostBranch,
|
|
216
|
+
...userArgs,
|
|
217
|
+
};
|
|
218
|
+
const builtInArgKeysSet = new Set(BUILT_IN_PROMPT_ARG_KEYS);
|
|
219
|
+
resolvedPrompt = yield* substitutePromptArgs(rawPrompt, effectiveArgs, builtInArgKeysSet);
|
|
220
|
+
}
|
|
189
221
|
// In head mode, pass the host branch so SandboxLifecycle skips the merge step.
|
|
190
222
|
// In merge-to-head mode, branch is undefined (triggers merge). In branch mode, it's the explicit branch.
|
|
191
223
|
const orchestrateBranch = effectiveBranchType === "head" ? currentHostBranch : branch;
|
|
@@ -200,9 +232,14 @@ export const run = async (options) => {
|
|
|
200
232
|
idleTimeoutSeconds: options.idleTimeoutSeconds,
|
|
201
233
|
name: options.name,
|
|
202
234
|
resumeSession: options.resumeSession,
|
|
235
|
+
signal: options.signal,
|
|
236
|
+
skipPromptExpansion: isInlinePrompt,
|
|
203
237
|
});
|
|
204
238
|
const completion = buildCompletionMessage(orchestrateResult.completionSignal, orchestrateResult.iterations.length);
|
|
205
239
|
yield* d.status(completion.message, completion.severity);
|
|
240
|
+
for (const line of buildContextWindowLines(orchestrateResult.iterations)) {
|
|
241
|
+
yield* d.text(line);
|
|
242
|
+
}
|
|
206
243
|
return orchestrateResult;
|
|
207
244
|
});
|
|
208
245
|
// In file-logging mode, write errors to the log before they propagate.
|
|
@@ -214,7 +251,15 @@ export const run = async (options) => {
|
|
|
214
251
|
yield* d.status(formatErrorMessage(error), "error");
|
|
215
252
|
})))
|
|
216
253
|
: baseEffect;
|
|
217
|
-
|
|
254
|
+
let result;
|
|
255
|
+
try {
|
|
256
|
+
result = await Effect.runPromise(withErrorLog.pipe(Effect.provide(runLayer)));
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
// If the signal was aborted, surface its reason verbatim (no wrapping)
|
|
260
|
+
options.signal?.throwIfAborted();
|
|
261
|
+
throw error;
|
|
262
|
+
}
|
|
218
263
|
return {
|
|
219
264
|
...result,
|
|
220
265
|
logFilePath: resolvedLogging.type === "file" ? resolvedLogging.path : undefined,
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EACL,YAAY,EACZ,OAAO,EACP,WAAW,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EACL,YAAY,EACZ,OAAO,EACP,WAAW,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,GAIZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,4BAA4B,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAEL,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AAEzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,oFAAoF;AACpF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAc,EAAU,EAAE,CAClE,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAavC;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAkC,EAC5B,EAAE;IACR,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC;IAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzD,MAAM,cAAc,GAClB,WAAW,KAAK,OAAO,CAAC,GAAG,EAAE;QAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;QAC/C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,WAAW,UAAU,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,cAAc,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,cAAsB,EACtB,YAAqB,EACrB,IAAa,EACL,EAAE;IACV,MAAM,SAAS,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI;QACrB,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,GAAG,yBAAyB,CAAC,YAAY,CAAC,IAAI,SAAS,GAAG,UAAU,MAAM,CAAC;IACpF,CAAC;IACD,OAAO,GAAG,SAAS,GAAG,UAAU,MAAM,CAAC;AACzC,CAAC,CAAC;AAUF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAA8B,EACN,EAAE,CAAC,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS;IACxC,OAAO,EAAE,OAAO,CAAC,WAAW;IAC5B,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/C,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,gBAAoC,EACpC,aAAqB,EACsC,EAAE;IAC7D,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,sCAAsC,aAAa,gBAAgB;YAC5E,QAAQ,EAAE,SAAS;SACpB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,yBAAyB,aAAa,0CAA0C;QACzF,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAqB,EAAU,EAAE;IACvE,MAAM,KAAK,GACT,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,wBAAwB;QAC9B,KAAK,CAAC,oBAAoB,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACvC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAqD,EAC3C,EAAE,CACZ,UAAU;KACP,MAAM,CAAC,CAAC,EAAE,EAAmC,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;KACvE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,uBAAuB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAsGzE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,OAAmB,EAAsB,EAAE;IACnE,qEAAqE;IACrE,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAEjC,MAAM,EACJ,MAAM,EACN,UAAU,EACV,aAAa,GAAG,sBAAsB,EACtC,KAAK,EACL,KAAK,EAAE,QAAQ,GAChB,GAAG,OAAO,CAAC;IAEZ,0EAA0E;IAC1E,MAAM,cAAc,GAClB,OAAO,CAAC,cAAc;QACtB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,UAAU;YACjC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE;YAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxB,MAAM,mBAAmB,GAAG,cAAc,CAAC,IAAI,CAAC;IAEhD,mEAAmE;IACnE,IAAI,mBAAmB,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,IACE,mBAAmB,KAAK,MAAM;QAC9B,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EACjC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC3D,mEAAmE,CACtE,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,IAAI,OAAO,CAAC,aAAa,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,2DAA2D;YACzD,yFAAyF,CAC5F,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,MAAM,MAAM,GACV,cAAc,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,UAAU,CACzC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAChE,CAAC;IAEF,sDAAsD;IACtD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,CAAC,aAAa,yCAAyC,WAAW,EAAE,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CACtC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAClC,CACF,CAAC;IACF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;IAChC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;IAEpD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEhC,+CAA+C;IAC/C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,UAAU,CACzC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAChE,CAAC;IACF,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,WAAW;QACX,gBAAgB,EAAE,QAAQ,CAAC,GAAG;QAC9B,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;KACxC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,gFAAgF;IAChF,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,UAAU,CAC/C,gBAAgB,CAAC,WAAW,CAAC,CAC9B,CAAC;IAEF,gEAAgE;IAChE,sEAAsE;IACtE,MAAM,cAAc,GAClB,mBAAmB,KAAK,MAAM;QAC5B,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,CAAC,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvD,2EAA2E;IAC3E,gFAAgF;IAChF,MAAM,YAAY,GAChB,mBAAmB,KAAK,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1E,yBAAyB;IACzB,MAAM,eAAe,GAAkB,OAAO,CAAC,OAAO,IAAI;QACxD,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI,CACR,WAAW,EACX,aAAa,EACb,MAAM,EACN,gBAAgB,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAC7D;KACF,CAAC;IACF,MAAM,YAAY,GAChB,eAAe,CAAC,IAAI,KAAK,MAAM;QAC7B,CAAC,CAAC,CAAC,GAAG,EAAE;YACJ,uBAAuB,CAAC;gBACtB,OAAO,EAAE,eAAe,CAAC,IAAI;gBAC7B,SAAS,EAAE,OAAO,CAAC,IAAI;gBACvB,MAAM,EAAE,cAAc;gBACtB,WAAW;aACZ,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,OAAO,CAClB,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EACvC,cAAc,CAAC,KAAK,CACrB,CAAC;QACJ,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;IAEzB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAChC,4BAA4B,CAAC,KAAK,EAClC,KAAK,CAAC,QAAQ,CACZ,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;QAC3B,GAAG;QACH,WAAW;QACX,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,eAAe,EAAE,OAAO,CAAC,OAAO;QAChC,cAAc;QACd,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,EACF,cAAc,CAAC,KAAK,EACpB,YAAY,CACb,CACF,CAAC;IAEF,MAAM,uBAAuB,GAC3B,eAAe,CAAC,IAAI,KAAK,MAAM,IAAI,eAAe,CAAC,kBAAkB;QACnE,CAAC,CAAC,+BAA+B,CAAC,eAAe,CAAC,kBAAkB,CAAC;QACrE,CAAC,CAAC,2BAA2B,CAAC;IAElC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAC7B,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACxB,uBAAuB,CACxB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;QACzB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS;YACT,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YACjC,aAAa;YACb,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAE1C,wEAAwE;QACxE,yEAAyE;QACzE,IAAI,cAAsB,CAAC;QAC3B,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,CAAC,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;YAChD,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG;gBACpB,aAAa,EAAE,cAAc;gBAC7B,aAAa,EAAE,iBAAiB;gBAChC,GAAG,QAAQ;aACZ,CAAC;YACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS,wBAAwB,CAAC,CAAC;YACpE,cAAc,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAC1C,SAAS,EACT,aAAa,EACb,iBAAiB,CAClB,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,yGAAyG;QACzG,MAAM,iBAAiB,GACrB,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC;QAE9D,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;YAC3C,WAAW;YACX,UAAU,EAAE,aAAa;YACzB,KAAK;YACL,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,iBAAiB;YACzB,QAAQ;YACR,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,mBAAmB,EAAE,cAAc;SACpC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,sBAAsB,CACvC,iBAAiB,CAAC,gBAAgB,EAClC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CACpC,CAAC;QACF,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,gFAAgF;IAChF,6DAA6D;IAC7D,MAAM,YAAY,GAChB,eAAe,CAAC,IAAI,KAAK,MAAM;QAC7B,CAAC,CAAC,UAAU,CAAC,IAAI,CACb,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CACb,kBAAkB,CAAC,KAAqB,CAAC,EACzC,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CACH,CACF;QACH,CAAC,CAAC,UAAU,CAAC;IAEjB,IAAI,MAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAC9B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAC5C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,uEAAuE;QACvE,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,WAAW,EACT,eAAe,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACrE,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type SandboxProvider } from "../SandboxProvider.js";
|
|
9
9
|
import type { MountConfig } from "../MountConfig.js";
|
|
10
|
+
import { defaultImageName } from "../mountUtils.js";
|
|
10
11
|
export interface DockerOptions {
|
|
11
12
|
/** Docker image name (default: derived from repo directory name). */
|
|
12
13
|
readonly imageName?: string;
|
|
@@ -36,10 +37,5 @@ export interface DockerOptions {
|
|
|
36
37
|
* for the worktree and git directories.
|
|
37
38
|
*/
|
|
38
39
|
export declare const docker: (options?: DockerOptions | undefined) => SandboxProvider;
|
|
39
|
-
|
|
40
|
-
* Derive the default Docker image name from the repo directory.
|
|
41
|
-
* Returns `sandcastle:<dir-name>` where dir-name is the last path segment,
|
|
42
|
-
* lowercased and sanitized for Docker image tag rules.
|
|
43
|
-
*/
|
|
44
|
-
export declare const defaultImageName: (repoDir: string) => string;
|
|
40
|
+
export { defaultImageName };
|
|
45
41
|
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
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,EAAqB,MAAM,kBAAkB,CAAC;AAEvE,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;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,0DAkNlB,CAAC;AAGF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/sandboxes/docker.js
CHANGED
|
@@ -9,12 +9,9 @@ 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 { Effect } from "effect";
|
|
12
|
-
import { startContainer, removeContainer
|
|
12
|
+
import { startContainer, removeContainer } from "../DockerLifecycle.js";
|
|
13
13
|
import { createBindMountSandboxProvider, } from "../SandboxProvider.js";
|
|
14
|
-
import {
|
|
15
|
-
import { homedir } from "node:os";
|
|
16
|
-
import { isAbsolute, resolve } from "node:path";
|
|
17
|
-
import { SANDBOX_REPO_DIR } from "../SandboxFactory.js";
|
|
14
|
+
import { defaultImageName, resolveUserMounts } from "../mountUtils.js";
|
|
18
15
|
/**
|
|
19
16
|
* Create a Docker sandbox provider.
|
|
20
17
|
*
|
|
@@ -23,10 +20,14 @@ import { SANDBOX_REPO_DIR } from "../SandboxFactory.js";
|
|
|
23
20
|
*/
|
|
24
21
|
export const docker = (options) => {
|
|
25
22
|
const configuredImageName = options?.imageName;
|
|
26
|
-
const
|
|
23
|
+
const sandboxHomedir = "/home/agent";
|
|
24
|
+
const userMounts = options?.mounts
|
|
25
|
+
? resolveUserMounts(options.mounts, sandboxHomedir)
|
|
26
|
+
: [];
|
|
27
27
|
return createBindMountSandboxProvider({
|
|
28
28
|
name: "docker",
|
|
29
29
|
env: options?.env,
|
|
30
|
+
sandboxHomedir,
|
|
30
31
|
create: async (createOptions) => {
|
|
31
32
|
const containerName = `sandcastle-${randomUUID()}`;
|
|
32
33
|
const worktreePath = createOptions.mounts.find((m) => m.hostPath === createOptions.worktreePath)?.sandboxPath ?? "/home/agent/workspace";
|
|
@@ -49,7 +50,7 @@ export const docker = (options) => {
|
|
|
49
50
|
workdir: worktreePath,
|
|
50
51
|
user: `${hostUid}:${hostGid}`,
|
|
51
52
|
network: options?.network,
|
|
52
|
-
})
|
|
53
|
+
}));
|
|
53
54
|
// Set up signal handlers for cleanup
|
|
54
55
|
const onExit = () => {
|
|
55
56
|
try {
|
|
@@ -73,49 +74,50 @@ export const docker = (options) => {
|
|
|
73
74
|
exec: (command, opts) => {
|
|
74
75
|
const effectiveCommand = opts?.sudo ? `sudo ${command}` : command;
|
|
75
76
|
const args = ["exec"];
|
|
77
|
+
if (opts?.stdin !== undefined)
|
|
78
|
+
args.push("-i");
|
|
76
79
|
if (opts?.cwd)
|
|
77
80
|
args.push("-w", opts.cwd);
|
|
78
81
|
args.push(containerName, "sh", "-c", effectiveCommand);
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const proc = spawn("docker", args, {
|
|
84
|
+
stdio: [
|
|
85
|
+
opts?.stdin !== undefined ? "pipe" : "ignore",
|
|
86
|
+
"pipe",
|
|
87
|
+
"pipe",
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
if (opts?.stdin !== undefined) {
|
|
91
|
+
proc.stdin.write(opts.stdin);
|
|
92
|
+
proc.stdin.end();
|
|
93
|
+
}
|
|
94
|
+
const stdoutChunks = [];
|
|
95
|
+
const stderrChunks = [];
|
|
96
|
+
if (opts?.onLine) {
|
|
97
|
+
const onLine = opts.onLine;
|
|
87
98
|
const rl = createInterface({ input: proc.stdout });
|
|
88
99
|
rl.on("line", (line) => {
|
|
89
100
|
stdoutChunks.push(line);
|
|
90
101
|
onLine(line);
|
|
91
102
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
reject(new Error(`docker exec failed: ${error.message}`));
|
|
97
|
-
});
|
|
98
|
-
proc.on("close", (code) => {
|
|
99
|
-
resolve({
|
|
100
|
-
stdout: stdoutChunks.join("\n"),
|
|
101
|
-
stderr: stderrChunks.join(""),
|
|
102
|
-
exitCode: code ?? 0,
|
|
103
|
-
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
proc.stdout.on("data", (chunk) => {
|
|
106
|
+
stdoutChunks.push(chunk.toString());
|
|
104
107
|
});
|
|
108
|
+
}
|
|
109
|
+
proc.stderr.on("data", (chunk) => {
|
|
110
|
+
stderrChunks.push(chunk.toString());
|
|
105
111
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
stderr: stderr.toString(),
|
|
116
|
-
exitCode: typeof error?.code === "number" ? error.code : 0,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
112
|
+
proc.on("error", (error) => {
|
|
113
|
+
reject(new Error(`docker exec failed: ${error.message}`));
|
|
114
|
+
});
|
|
115
|
+
proc.on("close", (code) => {
|
|
116
|
+
resolve({
|
|
117
|
+
stdout: stdoutChunks.join(opts?.onLine ? "\n" : ""),
|
|
118
|
+
stderr: stderrChunks.join(""),
|
|
119
|
+
exitCode: code ?? 0,
|
|
120
|
+
});
|
|
119
121
|
});
|
|
120
122
|
});
|
|
121
123
|
},
|
|
@@ -175,42 +177,6 @@ export const docker = (options) => {
|
|
|
175
177
|
},
|
|
176
178
|
});
|
|
177
179
|
};
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
* Returns `sandcastle:<dir-name>` where dir-name is the last path segment,
|
|
181
|
-
* lowercased and sanitized for Docker image tag rules.
|
|
182
|
-
*/
|
|
183
|
-
export const defaultImageName = (repoDir) => {
|
|
184
|
-
const dirName = repoDir.replace(/\/+$/, "").split("/").pop() ?? "local";
|
|
185
|
-
const sanitized = dirName.toLowerCase().replace(/[^a-z0-9_.-]/g, "-");
|
|
186
|
-
return `sandcastle:${sanitized}`;
|
|
187
|
-
};
|
|
188
|
-
const expandTilde = (p) => {
|
|
189
|
-
if (p === "~")
|
|
190
|
-
return homedir();
|
|
191
|
-
if (p.startsWith("~/"))
|
|
192
|
-
return homedir() + p.slice(1);
|
|
193
|
-
return p;
|
|
194
|
-
};
|
|
195
|
-
const resolveHostPath = (hostPath) => {
|
|
196
|
-
const expanded = expandTilde(hostPath);
|
|
197
|
-
return isAbsolute(expanded) ? expanded : resolve(process.cwd(), expanded);
|
|
198
|
-
};
|
|
199
|
-
const resolveSandboxPath = (sandboxPath) => isAbsolute(sandboxPath)
|
|
200
|
-
? sandboxPath
|
|
201
|
-
: resolve(SANDBOX_REPO_DIR, sandboxPath);
|
|
202
|
-
const resolveUserMounts = (mounts) => mounts.map((m) => {
|
|
203
|
-
const resolvedHostPath = resolveHostPath(m.hostPath);
|
|
204
|
-
if (!existsSync(resolvedHostPath)) {
|
|
205
|
-
throw new Error(`Mount hostPath does not exist: ${m.hostPath}` +
|
|
206
|
-
(m.hostPath !== resolvedHostPath
|
|
207
|
-
? ` (resolved to ${resolvedHostPath})`
|
|
208
|
-
: ""));
|
|
209
|
-
}
|
|
210
|
-
return {
|
|
211
|
-
hostPath: resolvedHostPath,
|
|
212
|
-
sandboxPath: resolveSandboxPath(m.sandboxPath),
|
|
213
|
-
...(m.readonly ? { readonly: true } : {}),
|
|
214
|
-
};
|
|
215
|
-
});
|
|
180
|
+
// Re-export for backwards compatibility
|
|
181
|
+
export { defaultImageName };
|
|
216
182
|
//# 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,
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandboxes/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-sandbox.d.ts","sourceRoot":"","sources":["../../src/sandboxes/no-sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,+
|
|
1
|
+
{"version":3,"file":"no-sandbox.d.ts","sourceRoot":"","sources":["../../src/sandboxes/no-sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,+DAqGpB,CAAC"}
|
|
@@ -34,8 +34,16 @@ export const noSandbox = (options) => ({
|
|
|
34
34
|
const proc = spawn("sh", ["-c", command], {
|
|
35
35
|
cwd,
|
|
36
36
|
env: processEnv,
|
|
37
|
-
stdio: [
|
|
37
|
+
stdio: [
|
|
38
|
+
opts?.stdin !== undefined ? "pipe" : "ignore",
|
|
39
|
+
"pipe",
|
|
40
|
+
"pipe",
|
|
41
|
+
],
|
|
38
42
|
});
|
|
43
|
+
if (opts?.stdin !== undefined) {
|
|
44
|
+
proc.stdin.write(opts.stdin);
|
|
45
|
+
proc.stdin.end();
|
|
46
|
+
}
|
|
39
47
|
const stdoutChunks = [];
|
|
40
48
|
const stderrChunks = [];
|
|
41
49
|
if (opts?.onLine) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-sandbox.js","sourceRoot":"","sources":["../../src/sandboxes/no-sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAahD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAA0B,EAAqB,EAAE,CAAC,CAAC;IAC3E,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;IACvB,MAAM,EAAE,KAAK,EAAE,aAAa,EAA4B,EAAE;QACxD,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;QAChD,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC;QAE5D,MAAM,MAAM,GAAoB;YAC9B,YAAY;YAEZ,IAAI,EAAE,CACJ,OAAe,EACf,
|
|
1
|
+
{"version":3,"file":"no-sandbox.js","sourceRoot":"","sources":["../../src/sandboxes/no-sandbox.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 { defaultImageName } from "../mountUtils.js";
|
|
10
11
|
export interface PodmanOptions {
|
|
11
12
|
/** Podman image name (default: derived from repo directory name). */
|
|
12
13
|
readonly imageName?: string;
|
|
@@ -21,11 +22,26 @@ export interface PodmanOptions {
|
|
|
21
22
|
/**
|
|
22
23
|
* User namespace mode for rootless Podman.
|
|
23
24
|
*
|
|
24
|
-
* - `"keep-id"` (default) — maps host UID
|
|
25
|
-
* so bind-mounted
|
|
25
|
+
* - `"keep-id"` (default) — maps host UID to `containerUid` inside the
|
|
26
|
+
* container via `--userns=keep-id:uid=N,gid=N`, so both bind-mounted
|
|
27
|
+
* files and image-built files have correct ownership without chown.
|
|
26
28
|
* - `false` — disable; use for rootful Podman setups.
|
|
27
29
|
*/
|
|
28
30
|
readonly userns?: "keep-id" | false;
|
|
31
|
+
/**
|
|
32
|
+
* The UID of the `agent` user inside the container image (default: 1000).
|
|
33
|
+
*
|
|
34
|
+
* Must match the UID set in the Containerfile. Used with `--userns=keep-id`
|
|
35
|
+
* to map the host user to this UID inside the container.
|
|
36
|
+
*/
|
|
37
|
+
readonly containerUid?: number;
|
|
38
|
+
/**
|
|
39
|
+
* The GID of the `agent` user inside the container image (default: 1000).
|
|
40
|
+
*
|
|
41
|
+
* Must match the GID set in the Containerfile. Used with `--userns=keep-id`
|
|
42
|
+
* to map the host group to this GID inside the container.
|
|
43
|
+
*/
|
|
44
|
+
readonly containerGid?: number;
|
|
29
45
|
/**
|
|
30
46
|
* Additional host directories to bind-mount into the sandbox.
|
|
31
47
|
*
|
|
@@ -54,10 +70,5 @@ export interface PodmanOptions {
|
|
|
54
70
|
* is running before container creation.
|
|
55
71
|
*/
|
|
56
72
|
export declare const podman: (options?: PodmanOptions | undefined) => SandboxProvider;
|
|
57
|
-
|
|
58
|
-
* Derive the default Podman image name from the repo directory.
|
|
59
|
-
* Returns `sandcastle:<dir-name>` where dir-name is the last path segment,
|
|
60
|
-
* lowercased and sanitized for image tag rules.
|
|
61
|
-
*/
|
|
62
|
-
export declare const defaultImageName: (repoDir: string) => string;
|
|
73
|
+
export { defaultImageName };
|
|
63
74
|
//# sourceMappingURL=podman.d.ts.map
|
|
@@ -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;
|
|
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,EAAqB,MAAM,kBAAkB,CAAC;AAEvE,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;;;;;;;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,0DAiQlB,CAAC;AAGF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|