experimental-ash 0.3.0-alpha.1 → 0.3.0-alpha.2
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/dist/src/execution/sandboxes/bindings/local.js +6 -5
- package/dist/src/execution/sandboxes/bindings/local.js.map +1 -1
- package/dist/src/execution/sandboxes/bindings/vercel.d.ts.map +1 -1
- package/dist/src/execution/sandboxes/bindings/vercel.js +55 -20
- package/dist/src/execution/sandboxes/bindings/vercel.js.map +1 -1
- package/dist/src/execution/sandboxes/glob-tool.d.ts +7 -2
- package/dist/src/execution/sandboxes/glob-tool.d.ts.map +1 -1
- package/dist/src/execution/sandboxes/glob-tool.js +113 -22
- package/dist/src/execution/sandboxes/glob-tool.js.map +1 -1
- package/dist/src/execution/sandboxes/grep-tool.d.ts +10 -4
- package/dist/src/execution/sandboxes/grep-tool.d.ts.map +1 -1
- package/dist/src/execution/sandboxes/grep-tool.js +134 -50
- package/dist/src/execution/sandboxes/grep-tool.js.map +1 -1
- package/dist/src/execution/sandboxes/ripgrep-probe.d.ts +10 -0
- package/dist/src/execution/sandboxes/ripgrep-probe.d.ts.map +1 -0
- package/dist/src/execution/sandboxes/ripgrep-probe.js +45 -0
- package/dist/src/execution/sandboxes/ripgrep-probe.js.map +1 -0
- package/dist/src/execution/sandboxes/session.d.ts +9 -0
- package/dist/src/execution/sandboxes/session.d.ts.map +1 -1
- package/dist/src/execution/sandboxes/session.js +1 -0
- package/dist/src/execution/sandboxes/session.js.map +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/public/definitions/sandbox.d.ts +37 -17
- package/dist/src/public/definitions/sandbox.d.ts.map +1 -1
- package/dist/src/public/definitions/sandbox.js.map +1 -1
- package/dist/src/public/sandboxes/index.d.ts +4 -1
- package/dist/src/public/sandboxes/index.d.ts.map +1 -1
- package/dist/src/public/sandboxes/index.js +4 -1
- package/dist/src/public/sandboxes/index.js.map +1 -1
- package/dist/src/runtime/workspace/spec.d.ts.map +1 -1
- package/dist/src/runtime/workspace/spec.js +4 -6
- package/dist/src/runtime/workspace/spec.js.map +1 -1
- package/dist/src/runtime/workspace/types.d.ts +7 -24
- package/dist/src/runtime/workspace/types.d.ts.map +1 -1
- package/dist/src/runtime/workspace/types.js +6 -18
- package/dist/src/runtime/workspace/types.js.map +1 -1
- package/docs/public/sandboxes.md +14 -10
- package/docs/public/workspace.md +8 -14
- package/package.json +1 -1
- package/dist/src/execution/sandboxes/logical-path.d.ts +0 -36
- package/dist/src/execution/sandboxes/logical-path.d.ts.map +0 -1
- package/dist/src/execution/sandboxes/logical-path.js +0 -56
- package/dist/src/execution/sandboxes/logical-path.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { resolveSandboxCacheDirectory } from "../../../internal/application/paths.js";
|
|
4
|
-
import {
|
|
4
|
+
import { WORKSPACE_ROOT } from "../../../runtime/workspace/types.js";
|
|
5
5
|
import { buildSandboxSession } from "../session.js";
|
|
6
6
|
const LOCAL_SANDBOX_SNAPSHOT_VERSION = 1;
|
|
7
7
|
/**
|
|
@@ -127,7 +127,7 @@ async function createBashSandbox(input) {
|
|
|
127
127
|
await ensureLocalSandboxDirectories(filesystem);
|
|
128
128
|
await restoreLocalSandboxDirectories(filesystem, snapshot?.entries ?? []);
|
|
129
129
|
const bash = new Bash({
|
|
130
|
-
cwd:
|
|
130
|
+
cwd: WORKSPACE_ROOT,
|
|
131
131
|
env: snapshot?.env,
|
|
132
132
|
fs: filesystem,
|
|
133
133
|
network: {
|
|
@@ -192,6 +192,7 @@ function createHandle(sandbox, sandboxName) {
|
|
|
192
192
|
}
|
|
193
193
|
function createLocalSessionPrimitives(sandbox) {
|
|
194
194
|
return {
|
|
195
|
+
id: sandbox.sessionKey,
|
|
195
196
|
readFileRaw: (path) => sandbox.readFileText(path),
|
|
196
197
|
resolvePath: resolveLocalPath,
|
|
197
198
|
runCommand: (command) => sandbox.executeCommand(command),
|
|
@@ -202,7 +203,7 @@ function resolveLocalPath(path) {
|
|
|
202
203
|
if (path.startsWith("/")) {
|
|
203
204
|
return path;
|
|
204
205
|
}
|
|
205
|
-
return `${
|
|
206
|
+
return `${WORKSPACE_ROOT}/${path}`;
|
|
206
207
|
}
|
|
207
208
|
function resolveTemplateSnapshotPath(cacheDirectory, templateKey) {
|
|
208
209
|
return join(cacheDirectory, "local", "templates", `${templateKey}.json`);
|
|
@@ -221,7 +222,7 @@ function createInitialFiles(snapshot) {
|
|
|
221
222
|
return files;
|
|
222
223
|
}
|
|
223
224
|
async function ensureLocalSandboxDirectories(filesystem) {
|
|
224
|
-
await filesystem.mkdir(
|
|
225
|
+
await filesystem.mkdir(WORKSPACE_ROOT, {
|
|
225
226
|
recursive: true,
|
|
226
227
|
});
|
|
227
228
|
}
|
|
@@ -231,7 +232,7 @@ async function restoreLocalSandboxDirectories(filesystem, entries) {
|
|
|
231
232
|
.map((entry) => entry.path)
|
|
232
233
|
.sort((left, right) => left.localeCompare(right));
|
|
233
234
|
for (const directoryPath of directoryPaths) {
|
|
234
|
-
if (directoryPath ===
|
|
235
|
+
if (directoryPath === WORKSPACE_ROOT) {
|
|
235
236
|
continue;
|
|
236
237
|
}
|
|
237
238
|
await filesystem.mkdir(directoryPath, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../../src/execution/sandboxes/bindings/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../../src/execution/sandboxes/bindings/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../../../src/execution/sandboxes/bindings/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,gBAAgB,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../../../src/execution/sandboxes/bindings/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,gBAAgB,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhE,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAC;AAErB,KAAK,mBAAmB,GAAG,OAAO,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAC5C,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,0BAA0B,CAAC;IACpD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,GAAE,+BAAoC,GAC1C,cAAc,CA4DhB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WORKSPACE_ROOT } from "../../../runtime/workspace/types.js";
|
|
2
2
|
import { buildSandboxSession } from "../session.js";
|
|
3
3
|
/**
|
|
4
4
|
* Creates the Vercel-backed sandbox backend.
|
|
@@ -35,7 +35,7 @@ export function createVercelSandboxBackend(input = {}) {
|
|
|
35
35
|
catch (error) {
|
|
36
36
|
throw new Error(`Failed to create sandbox session "${createInput.sessionKey}": ${errorMessage(error)}`, { cause: error });
|
|
37
37
|
}
|
|
38
|
-
await ensureSandboxWorkingDirectory(sandbox);
|
|
38
|
+
await ensureSandboxWorkingDirectory(sandbox, createOptions);
|
|
39
39
|
return createHandle(sandbox, createInput.sandboxName, createInput.sessionKey);
|
|
40
40
|
},
|
|
41
41
|
async prewarm(prewarmInput) {
|
|
@@ -75,8 +75,8 @@ async function ensureTemplate(input) {
|
|
|
75
75
|
templateKey: input.templateKey,
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
|
-
await ensureSandboxWorkingDirectory(sandbox);
|
|
79
|
-
const templateSession = buildSandboxSession(createVercelSessionPrimitives(sandbox));
|
|
78
|
+
await ensureSandboxWorkingDirectory(sandbox, input.createOptions);
|
|
79
|
+
const templateSession = buildSandboxSession(createVercelSessionPrimitives(sandbox, input.templateKey));
|
|
80
80
|
if (input.bootstrap !== undefined) {
|
|
81
81
|
await input.bootstrap(templateSession);
|
|
82
82
|
}
|
|
@@ -120,7 +120,7 @@ async function ensureSession(input) {
|
|
|
120
120
|
}
|
|
121
121
|
function createHandle(sandbox, sandboxName, sessionKey) {
|
|
122
122
|
return {
|
|
123
|
-
session: buildSandboxSession(createVercelSessionPrimitives(sandbox)),
|
|
123
|
+
session: buildSandboxSession(createVercelSessionPrimitives(sandbox, sessionKey)),
|
|
124
124
|
async captureState() {
|
|
125
125
|
return {
|
|
126
126
|
backendName: "vercel",
|
|
@@ -132,8 +132,9 @@ function createHandle(sandbox, sandboxName, sessionKey) {
|
|
|
132
132
|
async dispose() { },
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
-
function createVercelSessionPrimitives(sandbox) {
|
|
135
|
+
function createVercelSessionPrimitives(sandbox, id) {
|
|
136
136
|
return {
|
|
137
|
+
id,
|
|
137
138
|
async readFileRaw(resolvedPath) {
|
|
138
139
|
const buffer = await sandbox.readFileToBuffer({ path: resolvedPath });
|
|
139
140
|
if (buffer === null) {
|
|
@@ -141,12 +142,12 @@ function createVercelSessionPrimitives(sandbox) {
|
|
|
141
142
|
}
|
|
142
143
|
return new TextDecoder("utf-8", { fatal: true }).decode(buffer);
|
|
143
144
|
},
|
|
144
|
-
resolvePath:
|
|
145
|
+
resolvePath: resolveVercelSandboxPath,
|
|
145
146
|
async runCommand(command) {
|
|
146
147
|
const result = await sandbox.runCommand({
|
|
147
148
|
args: ["-lc", command],
|
|
148
149
|
cmd: "bash",
|
|
149
|
-
cwd:
|
|
150
|
+
cwd: WORKSPACE_ROOT,
|
|
150
151
|
});
|
|
151
152
|
const [stdout, stderr] = await Promise.all([result.stdout(), result.stderr()]);
|
|
152
153
|
return { exitCode: result.exitCode, stderr, stdout };
|
|
@@ -157,28 +158,62 @@ function createVercelSessionPrimitives(sandbox) {
|
|
|
157
158
|
},
|
|
158
159
|
};
|
|
159
160
|
}
|
|
160
|
-
function
|
|
161
|
-
if (path === WORKSPACE_ROOT) {
|
|
162
|
-
return VERCEL_SANDBOX_CWD;
|
|
163
|
-
}
|
|
164
|
-
if (path.startsWith(`${WORKSPACE_ROOT}/`)) {
|
|
165
|
-
return `${VERCEL_SANDBOX_CWD}${path.slice(WORKSPACE_ROOT.length)}`;
|
|
166
|
-
}
|
|
161
|
+
function resolveVercelSandboxPath(path) {
|
|
167
162
|
if (path.startsWith("/")) {
|
|
168
163
|
return path;
|
|
169
164
|
}
|
|
170
|
-
return `${
|
|
165
|
+
return `${WORKSPACE_ROOT}/${path}`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Prepares a fresh Vercel sandbox for use by the framework.
|
|
169
|
+
*
|
|
170
|
+
* Runs two privileged steps:
|
|
171
|
+
*
|
|
172
|
+
* 1. Creates the workspace directory ({@link WORKSPACE_ROOT}) and
|
|
173
|
+
* hands ownership to `vercel-sandbox` so subsequent non-sudo
|
|
174
|
+
* commands can read and write it without escalation.
|
|
175
|
+
* 2. Installs `rg` (ripgrep) for the `grep` and `glob` framework
|
|
176
|
+
* tools. Amazon Linux 2023 does not ship ripgrep in its core
|
|
177
|
+
* repos but does ship it in SPAL, so we enable SPAL and install
|
|
178
|
+
* ripgrep from there.
|
|
179
|
+
*
|
|
180
|
+
* Skipped entirely when the author has configured a `deny-all`
|
|
181
|
+
* network policy — the `dnf` commands need to reach
|
|
182
|
+
* `cdn.amazonlinux.com`. When skipped, the framework
|
|
183
|
+
* `grep`/`glob` tools transparently fall back to POSIX
|
|
184
|
+
* `grep -rn` / `find`. When attempted, a failure is fatal.
|
|
185
|
+
*/
|
|
186
|
+
async function ensureSandboxWorkingDirectory(sandbox, createOptions) {
|
|
187
|
+
await runSandboxBootstrapStep(sandbox, {
|
|
188
|
+
failureMessage: "Failed to initialize Vercel sandbox workspace.",
|
|
189
|
+
script: `mkdir -p ${WORKSPACE_ROOT} && chown ${SANDBOX_USER}:${SANDBOX_USER} ${WORKSPACE_ROOT}`,
|
|
190
|
+
});
|
|
191
|
+
if (createOptions.networkPolicy === "deny-all") {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
await runSandboxBootstrapStep(sandbox, {
|
|
195
|
+
failureMessage: "Failed to install ripgrep in Vercel sandbox.",
|
|
196
|
+
script: "command -v rg >/dev/null 2>&1 || { dnf install -y spal-release && dnf install -y ripgrep; }",
|
|
197
|
+
});
|
|
171
198
|
}
|
|
172
|
-
async function
|
|
199
|
+
async function runSandboxBootstrapStep(sandbox, input) {
|
|
173
200
|
const result = await sandbox.runCommand({
|
|
174
|
-
args: ["-
|
|
175
|
-
cmd: "
|
|
201
|
+
args: ["-lc", input.script],
|
|
202
|
+
cmd: "bash",
|
|
203
|
+
sudo: true,
|
|
176
204
|
});
|
|
177
205
|
if (result.exitCode !== 0) {
|
|
178
206
|
const stderr = await result.stderr();
|
|
179
|
-
throw new Error(
|
|
207
|
+
throw new Error(`${input.failureMessage} ${stderr}`.trim());
|
|
180
208
|
}
|
|
181
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* The non-root user that Vercel Sandbox executes user code as. Documented
|
|
212
|
+
* in the `@vercel/sandbox` README under "System". Used to hand ownership
|
|
213
|
+
* of the framework-managed workspace directory back to the user after
|
|
214
|
+
* creating it with `sudo`.
|
|
215
|
+
*/
|
|
216
|
+
const SANDBOX_USER = "vercel-sandbox";
|
|
182
217
|
async function getNamedSandbox(sandboxModule, sandboxName) {
|
|
183
218
|
try {
|
|
184
219
|
return await sandboxModule.Sandbox.get({ name: sandboxName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../../src/execution/sandboxes/bindings/vercel.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../../src/execution/sandboxes/bindings/vercel.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,13 @@ export interface GlobResult {
|
|
|
16
16
|
readonly truncated: boolean;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Searches for files matching a glob pattern inside the sandbox
|
|
20
|
-
*
|
|
19
|
+
* Searches for files matching a glob pattern inside the sandbox.
|
|
20
|
+
*
|
|
21
|
+
* Uses `rg --files` when ripgrep is available on the sandbox PATH.
|
|
22
|
+
* When ripgrep is not present — for example, because the author
|
|
23
|
+
* configured a network policy that prevented the framework from
|
|
24
|
+
* installing it during bootstrap — falls back to POSIX `find`, which
|
|
25
|
+
* ships as part of `findutils` in the Amazon Linux 2023 base image.
|
|
21
26
|
*
|
|
22
27
|
* Results are bounded by both the count limit and a byte cap
|
|
23
28
|
* ({@link MAX_OUTPUT_BYTES}) to prevent unbounded output when a workspace
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob-tool.d.ts","sourceRoot":"","sources":["../../../../src/execution/sandboxes/glob-tool.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAMD
|
|
1
|
+
{"version":3,"file":"glob-tool.d.ts","sourceRoot":"","sources":["../../../../src/execution/sandboxes/glob-tool.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CA+E/E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { normalizeModelPath } from "../../runtime/framework-tools/file-state.js";
|
|
2
|
-
import { toLogicalPath } from "./logical-path.js";
|
|
3
2
|
import { requireSandboxSession, validateAbsoluteFilePath } from "./require-sandbox.js";
|
|
3
|
+
import { ripgrepIsAvailable } from "./ripgrep-probe.js";
|
|
4
4
|
import { shellQuote } from "./shell-quote.js";
|
|
5
5
|
import { MAX_OUTPUT_BYTES } from "./truncate-output.js";
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
@@ -13,8 +13,13 @@ const DEFAULT_PATH = "/workspace";
|
|
|
13
13
|
// Executor
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
15
|
/**
|
|
16
|
-
* Searches for files matching a glob pattern inside the sandbox
|
|
17
|
-
*
|
|
16
|
+
* Searches for files matching a glob pattern inside the sandbox.
|
|
17
|
+
*
|
|
18
|
+
* Uses `rg --files` when ripgrep is available on the sandbox PATH.
|
|
19
|
+
* When ripgrep is not present — for example, because the author
|
|
20
|
+
* configured a network policy that prevented the framework from
|
|
21
|
+
* installing it during bootstrap — falls back to POSIX `find`, which
|
|
22
|
+
* ships as part of `findutils` in the Amazon Linux 2023 base image.
|
|
18
23
|
*
|
|
19
24
|
* Results are bounded by both the count limit and a byte cap
|
|
20
25
|
* ({@link MAX_OUTPUT_BYTES}) to prevent unbounded output when a workspace
|
|
@@ -29,34 +34,32 @@ export async function executeGlobOnSandbox(args) {
|
|
|
29
34
|
const normalizedPath = normalizeModelPath(effectivePath);
|
|
30
35
|
const effectiveLimit = Math.min(Math.max(1, args.limit ?? DEFAULT_GLOB_LIMIT), MAX_GLOB_LIMIT);
|
|
31
36
|
const sandbox = await requireSandboxSession();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const resolvedPath = sandbox.resolvePath(normalizedPath);
|
|
36
|
-
// Build ripgrep command to list files matching the glob pattern.
|
|
37
|
-
// `head -n <limit+1>` bounds output so we can detect truncation.
|
|
38
|
-
const command = [
|
|
39
|
-
"rg --files --hidden",
|
|
40
|
-
"--glob '!.git/*'",
|
|
41
|
-
`--glob ${shellQuote(args.pattern)}`,
|
|
42
|
-
`-- ${shellQuote(resolvedPath)}`,
|
|
43
|
-
`| head -n ${effectiveLimit + 1}`,
|
|
44
|
-
].join(" ");
|
|
37
|
+
const command = (await ripgrepIsAvailable(sandbox))
|
|
38
|
+
? buildRipgrepCommand({ normalizedPath, pattern: args.pattern })
|
|
39
|
+
: buildPosixFindCommand({ normalizedPath, pattern: args.pattern });
|
|
45
40
|
const result = await sandbox.runCommand(command);
|
|
41
|
+
// Both ripgrep and POSIX find use conventional exit code semantics:
|
|
42
|
+
// 0 — operation succeeded (results may be empty for find)
|
|
43
|
+
// 1 — ripgrep-specific: no matches found (legitimate empty result)
|
|
44
|
+
// >1 — error occurred
|
|
45
|
+
// Any unexpected exit code (e.g. 127 from bash when the tool is
|
|
46
|
+
// missing) indicates a real failure. Surface these as structured
|
|
47
|
+
// errors rather than silently pretending the search returned zero
|
|
48
|
+
// files.
|
|
49
|
+
if (result.exitCode !== 0 && result.exitCode !== 1) {
|
|
50
|
+
throw buildGlobExecutionError(command, result.exitCode, result.stderr);
|
|
51
|
+
}
|
|
46
52
|
// Parse stdout into file paths.
|
|
47
53
|
const rawLines = result.stdout.split("\n").filter((line) => line.length > 0);
|
|
48
|
-
// Detect truncation: if we got more lines than the limit,
|
|
54
|
+
// Detect truncation: if we got more lines than the limit, the tool had more results.
|
|
49
55
|
const truncatedByCount = rawLines.length > effectiveLimit;
|
|
50
56
|
const boundedLines = truncatedByCount ? rawLines.slice(0, effectiveLimit) : rawLines;
|
|
51
|
-
// Normalize each path
|
|
52
|
-
// Output paths from rg use the resolved backend-native prefix; map them
|
|
53
|
-
// back to the logical prefix so the model always sees `/workspace/...`.
|
|
57
|
+
// Normalize each path and enforce byte cap.
|
|
54
58
|
const paths = [];
|
|
55
59
|
let outputBytes = 0;
|
|
56
60
|
let truncatedByBytes = false;
|
|
57
61
|
for (const line of boundedLines) {
|
|
58
|
-
const
|
|
59
|
-
const normalized = normalizeModelPath(logicalLine);
|
|
62
|
+
const normalized = normalizeModelPath(line);
|
|
60
63
|
const lineBytes = Buffer.byteLength(normalized, "utf8") + 1;
|
|
61
64
|
if (outputBytes + lineBytes > MAX_OUTPUT_BYTES && paths.length > 0) {
|
|
62
65
|
truncatedByBytes = true;
|
|
@@ -87,4 +90,92 @@ export async function executeGlobOnSandbox(args) {
|
|
|
87
90
|
truncated,
|
|
88
91
|
};
|
|
89
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Builds the ripgrep form of the glob command. Preferred whenever
|
|
95
|
+
* `rg` is on PATH.
|
|
96
|
+
*
|
|
97
|
+
* Truncation is enforced in JavaScript rather than via a shell `| head`
|
|
98
|
+
* pipe: piping would mask ripgrep's exit code (the pipeline would adopt
|
|
99
|
+
* `head`'s exit code, which is typically 0), making a missing `rg`
|
|
100
|
+
* binary or a real IO failure indistinguishable from a successful
|
|
101
|
+
* search with no results.
|
|
102
|
+
*/
|
|
103
|
+
function buildRipgrepCommand(input) {
|
|
104
|
+
return [
|
|
105
|
+
"rg --files --hidden",
|
|
106
|
+
"--glob '!.git/*'",
|
|
107
|
+
`--glob ${shellQuote(input.pattern)}`,
|
|
108
|
+
`-- ${shellQuote(input.normalizedPath)}`,
|
|
109
|
+
].join(" ");
|
|
110
|
+
}
|
|
111
|
+
// Builds the POSIX fallback form of the glob command using `find`.
|
|
112
|
+
// Used when ripgrep is not installed in the sandbox — typically
|
|
113
|
+
// because the author configured a network policy that blocked the
|
|
114
|
+
// framework bootstrap from `dnf install`-ing it.
|
|
115
|
+
//
|
|
116
|
+
// Ripgrep-style globstars (two `*` in a row) are translated to POSIX
|
|
117
|
+
// `find -path` patterns. GNU `find`'s single `*` already matches
|
|
118
|
+
// across `/` boundaries, so a globstar collapses to one `*`. When
|
|
119
|
+
// the pattern has no directory component we use `-name` rather than
|
|
120
|
+
// `-path` for efficiency.
|
|
121
|
+
//
|
|
122
|
+
// Limitations compared to ripgrep:
|
|
123
|
+
//
|
|
124
|
+
// - Brace expansion (for example `*.{ts,tsx}`) is not supported.
|
|
125
|
+
// Authors who need brace patterns should allow the framework
|
|
126
|
+
// bootstrap to install ripgrep by lifting the network policy on
|
|
127
|
+
// `cdn.amazonlinux.com`, or run two separate globs.
|
|
128
|
+
// - POSIX find does not read `.gitignore`, so extremely large
|
|
129
|
+
// `node_modules` or `dist` trees will slow this path down. Pass
|
|
130
|
+
// a more specific `path` to narrow the search.
|
|
131
|
+
//
|
|
132
|
+
// `.git` is excluded explicitly with a `-not -path` predicate to
|
|
133
|
+
// match the ripgrep branch's `.git` glob exclusion.
|
|
134
|
+
function buildPosixFindCommand(input) {
|
|
135
|
+
const translatedPattern = translateGlobToFindPattern(input.pattern);
|
|
136
|
+
// If the translated pattern has no slash after translation, it is
|
|
137
|
+
// a basename-only pattern — match against `-name` which is faster
|
|
138
|
+
// and semantically cleaner than `-path`. Otherwise match against
|
|
139
|
+
// the full path with `-path` (note: `-path` requires the full path
|
|
140
|
+
// prefix to match, so we include `*/` to anchor anywhere in the
|
|
141
|
+
// tree).
|
|
142
|
+
const isBasenameOnly = !translatedPattern.includes("/");
|
|
143
|
+
const matchExpression = isBasenameOnly
|
|
144
|
+
? `-name ${shellQuote(translatedPattern)}`
|
|
145
|
+
: `-path ${shellQuote(`*/${translatedPattern}`)}`;
|
|
146
|
+
return [
|
|
147
|
+
`find ${shellQuote(input.normalizedPath)}`,
|
|
148
|
+
"-type f",
|
|
149
|
+
"-not -path '*/.git/*'",
|
|
150
|
+
matchExpression,
|
|
151
|
+
].join(" ");
|
|
152
|
+
}
|
|
153
|
+
// Translates a ripgrep-style glob pattern to a POSIX `find`-compatible
|
|
154
|
+
// pattern.
|
|
155
|
+
//
|
|
156
|
+
// - A globstar (two `*` in a row) matches any number of directory
|
|
157
|
+
// segments. POSIX `find`'s single `*` also crosses `/` boundaries
|
|
158
|
+
// (unlike bash globs), so a globstar collapses to one `*`.
|
|
159
|
+
// - A leading globstar-slash prefix is equivalent to "at any
|
|
160
|
+
// depth". When the rest of the pattern has no directory
|
|
161
|
+
// component we return just the basename, letting the caller use
|
|
162
|
+
// `-name` for efficiency.
|
|
163
|
+
function translateGlobToFindPattern(pattern) {
|
|
164
|
+
// Collapse `**` to `*` since find's `*` already crosses `/`.
|
|
165
|
+
let translated = pattern.replaceAll("**", "*");
|
|
166
|
+
// Strip a leading `*/` so a globstar-prefixed pattern like
|
|
167
|
+
// `**/*.ts` becomes `*.ts` (basename match).
|
|
168
|
+
while (translated.startsWith("*/")) {
|
|
169
|
+
translated = translated.slice(2);
|
|
170
|
+
}
|
|
171
|
+
return translated;
|
|
172
|
+
}
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Error helpers
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
function buildGlobExecutionError(command, exitCode, stderr) {
|
|
177
|
+
const trimmed = stderr.trim();
|
|
178
|
+
const detail = trimmed.length > 0 ? trimmed : "no stderr output";
|
|
179
|
+
return new Error(`glob failed (exit ${exitCode}): ${detail}\nCommand: ${command}`);
|
|
180
|
+
}
|
|
90
181
|
//# sourceMappingURL=glob-tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob-tool.js","sourceRoot":"","sources":["../../../../src/execution/sandboxes/glob-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"glob-tool.js","sourceRoot":"","sources":["../../../../src/execution/sandboxes/glob-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,11 +20,17 @@ export interface GrepResult {
|
|
|
20
20
|
readonly truncated: boolean;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Searches file contents for a pattern inside the sandbox
|
|
24
|
-
* ripgrep. Returns matching lines with file paths and line numbers.
|
|
23
|
+
* Searches file contents for a pattern inside the sandbox.
|
|
25
24
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* Uses ripgrep when it is available on the sandbox PATH. When ripgrep
|
|
26
|
+
* is not present — for example, because the author configured a
|
|
27
|
+
* network policy that prevented the framework from installing it
|
|
28
|
+
* during bootstrap — falls back to POSIX `grep -rn`, which ships in
|
|
29
|
+
* the Amazon Linux 2023 base image (`findutils` / `grep` are always
|
|
30
|
+
* available).
|
|
31
|
+
*
|
|
32
|
+
* Used by the framework `grep` tool and by author tools constructed
|
|
33
|
+
* via `defineGrepTool`.
|
|
28
34
|
*/
|
|
29
35
|
export declare function executeGrepOnSandbox(args: GrepInput): Promise<GrepResult>;
|
|
30
36
|
//# sourceMappingURL=grep-tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep-tool.d.ts","sourceRoot":"","sources":["../../../../src/execution/sandboxes/grep-tool.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAMD
|
|
1
|
+
{"version":3,"file":"grep-tool.d.ts","sourceRoot":"","sources":["../../../../src/execution/sandboxes/grep-tool.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAwD/E"}
|