@namzu/sdk 35.0.0 → 36.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/provider/token-budget.d.ts.map +1 -1
  3. package/dist/provider/token-budget.js +56 -8
  4. package/dist/provider/token-budget.js.map +1 -1
  5. package/dist/public-runtime.d.ts +2 -2
  6. package/dist/public-runtime.d.ts.map +1 -1
  7. package/dist/public-runtime.js +1 -1
  8. package/dist/public-runtime.js.map +1 -1
  9. package/dist/runtime/query/executor.d.ts +1 -0
  10. package/dist/runtime/query/executor.d.ts.map +1 -1
  11. package/dist/runtime/query/executor.js +50 -10
  12. package/dist/runtime/query/executor.js.map +1 -1
  13. package/dist/runtime/query/index.d.ts +7 -0
  14. package/dist/runtime/query/index.d.ts.map +1 -1
  15. package/dist/runtime/query/index.js +1 -0
  16. package/dist/runtime/query/index.js.map +1 -1
  17. package/dist/runtime/query/iteration/index.d.ts +3 -3
  18. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  19. package/dist/runtime/query/iteration/index.js +31 -6
  20. package/dist/runtime/query/iteration/index.js.map +1 -1
  21. package/dist/runtime/query/iteration/phases/context.d.ts +2 -0
  22. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  23. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  24. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  25. package/dist/runtime/query/iteration/stream-turn.js +10 -5
  26. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  27. package/dist/runtime/query/prompt.d.ts.map +1 -1
  28. package/dist/runtime/query/prompt.js +14 -4
  29. package/dist/runtime/query/prompt.js.map +1 -1
  30. package/dist/sandbox/file-walk-program.d.ts +3 -0
  31. package/dist/sandbox/file-walk-program.d.ts.map +1 -0
  32. package/dist/sandbox/file-walk-program.js +94 -0
  33. package/dist/sandbox/file-walk-program.js.map +1 -0
  34. package/dist/sandbox/file-walk.d.ts +12 -0
  35. package/dist/sandbox/file-walk.d.ts.map +1 -0
  36. package/dist/sandbox/file-walk.js +429 -0
  37. package/dist/sandbox/file-walk.js.map +1 -0
  38. package/dist/sandbox/index.d.ts +2 -0
  39. package/dist/sandbox/index.d.ts.map +1 -1
  40. package/dist/sandbox/index.js +1 -0
  41. package/dist/sandbox/index.js.map +1 -1
  42. package/dist/sandbox/provider/local.d.ts.map +1 -1
  43. package/dist/sandbox/provider/local.js +9 -0
  44. package/dist/sandbox/provider/local.js.map +1 -1
  45. package/dist/scheduler/completion-inbox.d.ts +3 -2
  46. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  47. package/dist/scheduler/completion-inbox.js +29 -15
  48. package/dist/scheduler/completion-inbox.js.map +1 -1
  49. package/dist/tools/builtins/bash.d.ts.map +1 -1
  50. package/dist/tools/builtins/bash.js +215 -59
  51. package/dist/tools/builtins/bash.js.map +1 -1
  52. package/dist/tools/builtins/glob.d.ts +2 -1
  53. package/dist/tools/builtins/glob.d.ts.map +1 -1
  54. package/dist/tools/builtins/glob.js +95 -103
  55. package/dist/tools/builtins/glob.js.map +1 -1
  56. package/dist/tools/builtins/grep.d.ts.map +1 -1
  57. package/dist/tools/builtins/grep.js +155 -111
  58. package/dist/tools/builtins/grep.js.map +1 -1
  59. package/dist/tools/builtins/ls.js +2 -2
  60. package/dist/tools/builtins/ls.js.map +1 -1
  61. package/dist/types/sandbox/index.d.ts +20 -0
  62. package/dist/types/sandbox/index.d.ts.map +1 -1
  63. package/dist/types/sandbox/index.js.map +1 -1
  64. package/package.json +6 -1
  65. package/src/provider/token-budget.ts +52 -8
  66. package/src/public-runtime.ts +2 -1
  67. package/src/runtime/query/executor.ts +54 -14
  68. package/src/runtime/query/index.ts +8 -0
  69. package/src/runtime/query/iteration/index.ts +29 -9
  70. package/src/runtime/query/iteration/phases/context.ts +2 -0
  71. package/src/runtime/query/iteration/stream-turn.ts +9 -5
  72. package/src/runtime/query/prompt.ts +21 -4
  73. package/src/sandbox/file-walk-program.ts +93 -0
  74. package/src/sandbox/file-walk.ts +463 -0
  75. package/src/sandbox/index.ts +2 -0
  76. package/src/sandbox/provider/local.ts +13 -0
  77. package/src/scheduler/completion-inbox.ts +29 -19
  78. package/src/tools/builtins/bash.ts +230 -58
  79. package/src/tools/builtins/glob.ts +104 -122
  80. package/src/tools/builtins/grep.ts +166 -132
  81. package/src/tools/builtins/ls.ts +2 -2
  82. package/src/types/sandbox/index.ts +21 -0
@@ -0,0 +1,94 @@
1
+ /** Stable guest code: host bundlers must never rewrite a function we serialize. */
2
+ export const FILE_WALK_PROGRAM = String.raw `
3
+ const fs = require('node:fs/promises');
4
+ const path = require('node:path');
5
+ const plan = JSON.parse(process.argv[1]);
6
+ const missing = error => ['ENOENT', 'ENOTDIR'].includes(error.code);
7
+ const write = async value => {
8
+ if (!process.stdout.write(JSON.stringify(value) + '\n')) {
9
+ await new Promise(resolve => process.stdout.once('drain', resolve));
10
+ }
11
+ };
12
+ const visit = count => {
13
+ if (count > plan.maxVisitedEntries) {
14
+ throw Object.assign(new Error('File search stopped after examining ' + plan.maxVisitedEntries + ' entries; narrow its root or pattern.'), {code:'ERR_FILE_WALK_LIMIT'});
15
+ }
16
+ };
17
+ const patterns = plan.patterns.map(set => set.map(part =>
18
+ typeof part === 'object' && part !== null ? new RegExp(part.source, part.flags + 's') : part));
19
+ const canDescend = relative => patterns.some(pattern => {
20
+ const closure = states => {
21
+ for (const index of states) if (pattern[index] === null) states.add(index + 1);
22
+ return states;
23
+ };
24
+ let states = closure(new Set([0]));
25
+ for (const name of relative.split('/')) {
26
+ const next = new Set();
27
+ for (const index of states) {
28
+ const segment = pattern[index];
29
+ if (segment === null) {
30
+ if (plan.includeHidden || !name.startsWith('.')) next.add(index);
31
+ } else if (typeof segment === 'string' ? segment === name : segment?.test(name)) next.add(index + 1);
32
+ }
33
+ states = closure(next);
34
+ if (states.size === 0) return false;
35
+ }
36
+ return [...states].some(index => index < pattern.length);
37
+ });
38
+ async function run() {
39
+ const stack = [];
40
+ let visited = 0;
41
+ let emitted = 0;
42
+ const matchers = plan.expressions.map(({source, flags}) => new RegExp(source, flags + 's'));
43
+ const maxDepth = plan.maxDepth === null ? Infinity : plan.maxDepth;
44
+ const open = async (absolute, relative, depth) => {
45
+ try { stack.push({dir: await fs.opendir(absolute), relative, depth}); }
46
+ catch (error) { if (!missing(error)) throw error; }
47
+ };
48
+ try {
49
+ if (plan.patterns.length === 0) return;
50
+ let canonicalRoot;
51
+ try { canonicalRoot = await fs.realpath(plan.root); }
52
+ catch (error) { if (missing(error)) return; throw error; }
53
+ if (canonicalRoot !== path.resolve(plan.root)) throw new Error('File walk root follows a symbolic link; use its authorized real directory');
54
+ let start = plan.root;
55
+ for (const part of plan.prefix) {
56
+ start = path.join(start, part);
57
+ let info;
58
+ try { info = await fs.lstat(start); }
59
+ catch (error) { if (missing(error)) return; throw error; }
60
+ visit(++visited);
61
+ if (!info.isDirectory()) return;
62
+ }
63
+ if (plan.prefix.length >= maxDepth) return;
64
+ await open(start, plan.prefix.join('/'), plan.prefix.length);
65
+ while (stack.length) {
66
+ const frame = stack[stack.length - 1];
67
+ const entry = await frame.dir.read();
68
+ if (!entry) { stack.pop(); await frame.dir.close(); continue; }
69
+ visit(++visited);
70
+ const relative = frame.relative ? frame.relative + '/' + entry.name : entry.name;
71
+ const absolute = path.join(plan.root, relative);
72
+ const depth = frame.depth + 1;
73
+ if (entry.isDirectory()) {
74
+ if (depth < maxDepth && canDescend(relative)) await open(absolute, relative, depth);
75
+ continue;
76
+ }
77
+ if (!entry.isFile() || !matchers.some(matcher => matcher.test(relative))) continue;
78
+ let info;
79
+ try { info = await fs.lstat(absolute); }
80
+ catch (error) { if (missing(error)) continue; throw error; }
81
+ if (!info.isFile()) continue;
82
+ await write({type:'entry', path:absolute, size:info.size});
83
+ if (++emitted >= plan.maxEntries) return;
84
+ }
85
+ } finally {
86
+ for (const {dir} of stack.reverse()) await dir.close();
87
+ }
88
+ }
89
+ run().then(
90
+ () => write({type:'done'}),
91
+ async error => { await write({type:'error', message:error.message, code:error.code}); process.exitCode = 1; },
92
+ );
93
+ `;
94
+ //# sourceMappingURL=file-walk-program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-walk-program.js","sourceRoot":"","sources":["../../src/sandbox/file-walk-program.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2F1C,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { SandboxExecOptions, SandboxExecResult, SandboxFileEntry, SandboxWalkFilesOptions } from '../types/sandbox/index.js';
2
+ /** Internal host path; the caller first resolves its authorized filesystem root. */
3
+ export declare function walkFilesLocally(rootPath: string, options: SandboxWalkFilesOptions): AsyncGenerator<SandboxFileEntry>;
4
+ /** The existing sandbox execution seam; no separate worker protocol is needed. */
5
+ export type SandboxFileWalkExec = (command: string, argv?: string[], options?: SandboxExecOptions) => Promise<SandboxExecResult>;
6
+ /**
7
+ * Lazy, bounded JSONL enumeration inside the execution boundary owned by exec.
8
+ * The adapter must implement SandboxExecOptions.signal: iterator cleanup waits
9
+ * for cancellation settlement and preserves failures to confirm remote shutdown.
10
+ */
11
+ export declare function walkFilesViaExec(exec: SandboxFileWalkExec, rootPath: string, options: SandboxWalkFilesOptions): AsyncGenerator<SandboxFileEntry>;
12
+ //# sourceMappingURL=file-walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-walk.d.ts","sourceRoot":"","sources":["../../src/sandbox/file-walk.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,MAAM,2BAA2B,CAAA;AAmSlC,oFAAoF;AACpF,wBAAuB,gBAAgB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,GAC9B,cAAc,CAAC,gBAAgB,CAAC,CAGlC;AAED,kFAAkF;AAClF,MAAM,MAAM,mBAAmB,GAAG,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,kBAAkB,KACxB,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE/B;;;;GAIG;AACH,wBAAuB,gBAAgB,CACtC,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,GAC9B,cAAc,CAAC,gBAAgB,CAAC,CA0IlC"}
@@ -0,0 +1,429 @@
1
+ import { isAbsolute, posix } from 'node:path';
2
+ import braceExpansion from 'brace-expansion';
3
+ import { GLOBSTAR, Minimatch } from 'minimatch';
4
+ import { subscribeToAbort } from '../utils/abort.js';
5
+ import { FILE_WALK_PROGRAM } from './file-walk-program.js';
6
+ // brace-expansion 2.1.4 implements these bounds; its older DefinitelyTyped
7
+ // declaration only describes the first argument.
8
+ const expandBraces = braceExpansion;
9
+ function positiveInteger(value, name) {
10
+ if (!Number.isSafeInteger(value) || value <= 0) {
11
+ throw new RangeError(`${name} must be a positive safe integer`);
12
+ }
13
+ return value;
14
+ }
15
+ function planWalk(root, options) {
16
+ if (!isAbsolute(root) && !posix.isAbsolute(root)) {
17
+ throw new Error('File walk root must be an absolute path');
18
+ }
19
+ let pattern = options.pattern ?? '**/*';
20
+ while (pattern.startsWith('./'))
21
+ pattern = pattern.slice(2);
22
+ if (!pattern ||
23
+ pattern.startsWith('/') ||
24
+ /^[a-z]:/i.test(pattern) ||
25
+ pattern.split('/').includes('..')) {
26
+ throw new Error('File walk pattern must be relative to its root and cannot contain ..');
27
+ }
28
+ if (pattern.length > 4096)
29
+ throw new RangeError('File walk pattern exceeds 4096 characters');
30
+ // Expansion cannot lengthen a branch beyond its source. Bound both source
31
+ // length and branch count, then disable the library's separate character cap:
32
+ // that cap can silently truncate before our extra branch proves incompleteness.
33
+ const branches = expandBraces(pattern, { max: 257, maxLength: Number.POSITIVE_INFINITY });
34
+ if (branches.length > 256)
35
+ throw new RangeError('File walk pattern exceeds 256 brace expansions');
36
+ const matchers = branches.map((branch) => {
37
+ if (branch.startsWith('/') || /^[a-z]:/i.test(branch) || branch.split('/').includes('..')) {
38
+ throw new Error('Expanded file walk pattern escapes its root');
39
+ }
40
+ return new Minimatch(branch, {
41
+ nobrace: true,
42
+ nonegate: true,
43
+ nocomment: true,
44
+ dot: options.includeHidden ?? false,
45
+ platform: 'linux',
46
+ });
47
+ });
48
+ const sets = matchers.flatMap((matcher) => matcher.set);
49
+ if (sets.some((set) => set.some((segment) => segment === '..'))) {
50
+ throw new Error('Expanded file walk pattern escapes its root');
51
+ }
52
+ const patternDepth = Math.max(1, ...sets.map((set) => (set.includes(GLOBSTAR) ? Number.POSITIVE_INFINITY : set.length)));
53
+ const maxDepth = Math.min(patternDepth, options.maxDepth === undefined
54
+ ? Number.POSITIVE_INFINITY
55
+ : positiveInteger(options.maxDepth, 'maxDepth'));
56
+ const prefix = [];
57
+ for (let index = 0; sets.length > 0; index += 1) {
58
+ const segment = sets[0]?.[index];
59
+ if (typeof segment !== 'string' ||
60
+ !segment ||
61
+ segment === '.' ||
62
+ sets.some((set) => index >= set.length - 1 || set[index] !== segment))
63
+ break;
64
+ prefix.push(segment);
65
+ }
66
+ const expressions = matchers.flatMap((matcher) => {
67
+ const expression = matcher.makeRe();
68
+ return expression ? [{ source: expression.source, flags: expression.flags }] : [];
69
+ });
70
+ return {
71
+ root,
72
+ prefix,
73
+ expressions,
74
+ maxDepth: Number.isFinite(maxDepth) ? maxDepth : null,
75
+ maxEntries: positiveInteger(options.maxEntries, 'maxEntries'),
76
+ maxVisitedEntries: positiveInteger(options.maxVisitedEntries ?? 20_000, 'maxVisitedEntries'),
77
+ includeHidden: options.includeHidden ?? false,
78
+ patterns: sets.map((set) => set.map((segment) => segment === GLOBSTAR
79
+ ? null
80
+ : typeof segment === 'string'
81
+ ? segment
82
+ : { source: segment.source, flags: segment.flags })),
83
+ };
84
+ }
85
+ /** Whether at least one parsed pattern can match a file below this directory. */
86
+ function directoryMatcher(plan) {
87
+ const patterns = plan.patterns.map((set) => set.map((part) => typeof part === 'object' && part !== null ? new RegExp(part.source, `${part.flags}s`) : part));
88
+ return (relative) => patterns.some((pattern) => {
89
+ const closure = (states) => {
90
+ for (const index of states)
91
+ if (pattern[index] === null)
92
+ states.add(index + 1);
93
+ return states;
94
+ };
95
+ let states = closure(new Set([0]));
96
+ for (const name of relative.split('/')) {
97
+ const next = new Set();
98
+ for (const index of states) {
99
+ const segment = pattern[index];
100
+ if (segment === null) {
101
+ if (plan.includeHidden || !name.startsWith('.'))
102
+ next.add(index);
103
+ }
104
+ else if (typeof segment === 'string' ? segment === name : segment?.test(name))
105
+ next.add(index + 1);
106
+ }
107
+ states = closure(next);
108
+ if (states.size === 0)
109
+ return false;
110
+ }
111
+ return [...states].some((index) => index < pattern.length);
112
+ });
113
+ }
114
+ /** Local traversal uses the same compiled matching/pruning plan as the guest. */
115
+ async function* executeWalk(plan, signal) {
116
+ const fs = await import('node:fs/promises');
117
+ const path = await import('node:path');
118
+ const { EventEmitter } = await import('node:events');
119
+ const open = [];
120
+ let visited = 0;
121
+ let emitted = 0;
122
+ const matchers = plan.expressions.map(({ source, flags }) => new RegExp(source, `${flags}s`));
123
+ const canDescend = directoryMatcher(plan);
124
+ const maxDepth = plan.maxDepth ?? Number.POSITIVE_INFINITY;
125
+ const missing = (error) => ['ENOENT', 'ENOTDIR'].includes(error.code ?? '');
126
+ const close = async (dir) => {
127
+ try {
128
+ await dir.close();
129
+ }
130
+ catch (error) {
131
+ if (error.code !== 'ERR_DIR_CLOSED')
132
+ throw error;
133
+ }
134
+ };
135
+ const check = () => signal?.throwIfAborted();
136
+ async function wait(pending, late) {
137
+ if (!signal)
138
+ return await pending;
139
+ let abandoned = signal.aborted;
140
+ let dispose;
141
+ const observed = pending.then((value) => {
142
+ if (abandoned)
143
+ late?.(value);
144
+ return value;
145
+ });
146
+ try {
147
+ return await Promise.race([
148
+ observed,
149
+ new Promise((_, reject) => {
150
+ const abort = () => {
151
+ abandoned = true;
152
+ reject(signal.reason);
153
+ };
154
+ if (signal.aborted) {
155
+ abort();
156
+ return;
157
+ }
158
+ if (typeof EventEmitter.addAbortListener === 'function') {
159
+ const subscription = EventEmitter.addAbortListener(signal, abort);
160
+ dispose = () => subscription[Symbol.dispose]();
161
+ }
162
+ else {
163
+ signal.addEventListener('abort', abort, { once: true });
164
+ dispose = () => signal.removeEventListener('abort', abort);
165
+ }
166
+ }),
167
+ ]);
168
+ }
169
+ finally {
170
+ dispose?.();
171
+ }
172
+ }
173
+ const noteVisit = () => {
174
+ visited += 1;
175
+ if (visited > plan.maxVisitedEntries) {
176
+ throw Object.assign(new Error(`File search stopped after examining ${plan.maxVisitedEntries} entries; narrow its root or pattern.`), { code: 'ERR_FILE_WALK_LIMIT' });
177
+ }
178
+ };
179
+ try {
180
+ check();
181
+ if (plan.patterns.length === 0)
182
+ return;
183
+ let canonicalRoot;
184
+ try {
185
+ canonicalRoot = await wait(fs.realpath(plan.root));
186
+ }
187
+ catch (error) {
188
+ if (missing(error))
189
+ return;
190
+ throw error;
191
+ }
192
+ if (canonicalRoot !== path.resolve(plan.root))
193
+ throw new Error('File walk root follows a symbolic link; use its authorized real directory');
194
+ let start = plan.root;
195
+ // Never follow a static-prefix symlink to speed up a pattern: traversal
196
+ // and its optimized starting point must have the same link policy.
197
+ for (const part of plan.prefix) {
198
+ check();
199
+ start = path.join(start, part);
200
+ let info;
201
+ try {
202
+ info = await wait(fs.lstat(start));
203
+ }
204
+ catch (error) {
205
+ if (missing(error))
206
+ return;
207
+ throw error;
208
+ }
209
+ noteVisit();
210
+ if (!info.isDirectory())
211
+ return;
212
+ }
213
+ if (plan.prefix.length >= maxDepth)
214
+ return;
215
+ const openDirectory = async (absolute, relative, depth) => {
216
+ check();
217
+ try {
218
+ const dir = await wait(fs.opendir(absolute), (late) => {
219
+ void close(late).catch(() => { });
220
+ });
221
+ open.push({ dir, relative, depth });
222
+ }
223
+ catch (error) {
224
+ if (!missing(error))
225
+ throw error;
226
+ }
227
+ };
228
+ await openDirectory(start, plan.prefix.join('/'), plan.prefix.length);
229
+ while (open.length > 0) {
230
+ check();
231
+ const frame = open[open.length - 1];
232
+ const entry = await wait(frame.dir.read());
233
+ check();
234
+ if (!entry) {
235
+ open.pop();
236
+ await close(frame.dir);
237
+ continue;
238
+ }
239
+ noteVisit();
240
+ const relative = frame.relative ? `${frame.relative}/${entry.name}` : entry.name;
241
+ const absolute = path.join(plan.root, relative);
242
+ const depth = frame.depth + 1;
243
+ if (entry.isDirectory()) {
244
+ if (depth < maxDepth && canDescend(relative))
245
+ await openDirectory(absolute, relative, depth);
246
+ continue;
247
+ }
248
+ if (!entry.isFile() || !matchers.some((matcher) => matcher.test(relative)))
249
+ continue;
250
+ let info;
251
+ try {
252
+ info = await wait(fs.lstat(absolute));
253
+ }
254
+ catch (error) {
255
+ if (missing(error))
256
+ continue;
257
+ throw error;
258
+ }
259
+ check();
260
+ if (!info.isFile())
261
+ continue;
262
+ emitted += 1;
263
+ yield { path: absolute, size: info.size };
264
+ if (emitted >= plan.maxEntries)
265
+ return;
266
+ }
267
+ }
268
+ finally {
269
+ for (const { dir } of open.reverse()) {
270
+ if (signal?.aborted) {
271
+ void close(dir).catch(() => { });
272
+ }
273
+ else
274
+ await close(dir);
275
+ }
276
+ }
277
+ }
278
+ /** Internal host path; the caller first resolves its authorized filesystem root. */
279
+ export async function* walkFilesLocally(rootPath, options) {
280
+ options.signal?.throwIfAborted();
281
+ yield* executeWalk(planWalk(rootPath, options), options.signal);
282
+ }
283
+ /**
284
+ * Lazy, bounded JSONL enumeration inside the execution boundary owned by exec.
285
+ * The adapter must implement SandboxExecOptions.signal: iterator cleanup waits
286
+ * for cancellation settlement and preserves failures to confirm remote shutdown.
287
+ */
288
+ export async function* walkFilesViaExec(exec, rootPath, options) {
289
+ options.signal?.throwIfAborted();
290
+ const plan = planWalk(rootPath, options);
291
+ const controller = new AbortController();
292
+ const dispose = options.signal
293
+ ? subscribeToAbort(options.signal, () => controller.abort(options.signal?.reason))
294
+ : undefined;
295
+ const queue = [];
296
+ let wake;
297
+ let buffered = '';
298
+ let observedOutput = false;
299
+ let settled = false;
300
+ let terminal = false;
301
+ let received = 0;
302
+ let failure;
303
+ const reject = (error) => {
304
+ failure ??= error instanceof Error ? error : new Error(String(error));
305
+ controller.abort(error);
306
+ wake?.();
307
+ };
308
+ const consume = (line) => {
309
+ if (line.length > 65_536)
310
+ throw new Error('File walk record exceeded its output bound');
311
+ const value = JSON.parse(line);
312
+ if (!value || typeof value !== 'object' || terminal)
313
+ throw new Error('Invalid file walk record');
314
+ const record = value;
315
+ if (record.type === 'done') {
316
+ terminal = true;
317
+ return;
318
+ }
319
+ if (record.type === 'error' && typeof record.message === 'string') {
320
+ terminal = true;
321
+ throw Object.assign(new Error(record.message), {
322
+ code: typeof record.code === 'string' ? record.code : undefined,
323
+ });
324
+ }
325
+ if (record.type !== 'entry' ||
326
+ typeof record.path !== 'string' ||
327
+ typeof record.size !== 'number' ||
328
+ !Number.isSafeInteger(record.size) ||
329
+ record.size < 0) {
330
+ throw new Error('Invalid file walk entry');
331
+ }
332
+ const relative = posix.relative(rootPath, record.path);
333
+ if (!posix.isAbsolute(record.path) ||
334
+ relative === '..' ||
335
+ relative.startsWith('../') ||
336
+ posix.isAbsolute(relative)) {
337
+ throw new Error('File walk entry escaped its requested root');
338
+ }
339
+ if (++received > plan.maxEntries)
340
+ throw new Error('File walk exceeded its entry bound');
341
+ queue.push({ path: record.path, size: record.size });
342
+ };
343
+ const ingest = (data) => {
344
+ try {
345
+ let start = 0;
346
+ for (;;) {
347
+ const newline = data.indexOf('\n', start);
348
+ const end = newline < 0 ? data.length : newline;
349
+ if (buffered.length + end - start > 65_536)
350
+ throw new Error('File walk record exceeded its output bound');
351
+ buffered += data.slice(start, end);
352
+ if (newline < 0)
353
+ break;
354
+ consume(buffered);
355
+ buffered = '';
356
+ start = newline + 1;
357
+ }
358
+ }
359
+ catch (error) {
360
+ reject(error);
361
+ }
362
+ wake?.();
363
+ };
364
+ const pending = Promise.resolve()
365
+ .then(() => {
366
+ controller.signal.throwIfAborted();
367
+ return exec('node', ['-e', FILE_WALK_PROGRAM, JSON.stringify(plan)], {
368
+ signal: controller.signal,
369
+ onOutput: ({ stream, data }) => {
370
+ if (stream === 'stdout') {
371
+ observedOutput = true;
372
+ ingest(data);
373
+ }
374
+ },
375
+ });
376
+ })
377
+ .then((result) => {
378
+ if (controller.signal.aborted)
379
+ return;
380
+ if (!observedOutput && result.stdout)
381
+ ingest(result.stdout);
382
+ if (buffered)
383
+ reject(new Error('File walk ended with an incomplete record'));
384
+ if (result.stdoutTruncated || result.stderrTruncated)
385
+ reject(new Error('File walk transport truncated its output'));
386
+ if (result.timedOut || result.exitCode !== 0)
387
+ reject(new Error(result.timedOut
388
+ ? 'File walk timed out'
389
+ : `File walk failed with exit code ${result.exitCode}: ${result.stderr}`));
390
+ if (!terminal && !controller.signal.aborted)
391
+ reject(new Error('File walk ended without its completion record'));
392
+ }, (error) => {
393
+ reject(error);
394
+ })
395
+ .finally(() => {
396
+ settled = true;
397
+ wake?.();
398
+ });
399
+ try {
400
+ for (;;) {
401
+ options.signal?.throwIfAborted();
402
+ const entry = queue.shift();
403
+ if (entry) {
404
+ yield entry;
405
+ continue;
406
+ }
407
+ if (failure)
408
+ throw failure;
409
+ if (settled)
410
+ break;
411
+ await new Promise((resolve) => {
412
+ wake = resolve;
413
+ });
414
+ wake = undefined;
415
+ }
416
+ }
417
+ finally {
418
+ dispose?.();
419
+ if (!settled)
420
+ controller.abort(new Error('File walk consumer stopped'));
421
+ await pending;
422
+ // A rejected cancellation can mean remote work is still alive. Preserve
423
+ // that error so the owning backend can retire the uncertain handle.
424
+ // biome-ignore lint/correctness/noUnsafeFinally: a failed remote cleanup must also reject iterator.return().
425
+ if (failure)
426
+ throw failure;
427
+ }
428
+ }
429
+ //# sourceMappingURL=file-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-walk.js","sourceRoot":"","sources":["../../src/sandbox/file-walk.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,6 @@ export { LocalSandboxProvider } from './provider/local.js';
2
2
  export type { LocalSandboxProviderOptions } from './provider/local.js';
3
3
  export { SandboxProviderFactory } from './factory.js';
4
4
  export { assertIsolation, describeIsolation, isolationOf, missingIsolation } from './isolation.js';
5
+ export { walkFilesViaExec } from './file-walk.js';
6
+ export type { SandboxFileWalkExec } from './file-walk.js';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,YAAY,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,YAAY,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export { LocalSandboxProvider } from './provider/local.js';
2
2
  export { SandboxProviderFactory } from './factory.js';
3
3
  export { assertIsolation, describeIsolation, isolationOf, missingIsolation } from './isolation.js';
4
+ export { walkFilesViaExec } from './file-walk.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/sandbox/provider/local.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACX,OAAO,EACP,mBAAmB,EAGnB,kBAAkB,EAIlB,uBAAuB,EACvB,eAAe,EAGf,MAAM,8BAA8B,CAAA;AAGrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAOnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAgB/C,UAAU,qBAAqB;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAOpF;AAiFD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAIZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAI;gBAEY,QAAQ,EAAE,MAAM;IAE7C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,4CAA4C;IAC5C,IAAI,SAAS,IAAI,OAAO,CAEvB;CACD;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,mEAAmE;IACnE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,yFAAyF;IACzF,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC9B;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;CACnB,CAmDA;AA0DD;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC7B,WAAW,EAAE,MAAM,EACnB,qBAAqB,GAAE,SAAS,MAAM,EAAO,GAC3C,MAAM,EAAE,CA8DV;AAwmBD,MAAM,WAAW,2BAA2B;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAA;IAC9D;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAC9B;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC3D,QAAQ,CAAC,EAAE,WAAU;IACrB,QAAQ,CAAC,IAAI,mBAAkB;IAC/B,QAAQ,CAAC,cAAc,8CAA8C;IACrE,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IAExC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;gBAEvC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC;IAkC5D,MAAM,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAkE5D"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/sandbox/provider/local.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACX,OAAO,EACP,mBAAmB,EAGnB,kBAAkB,EAIlB,uBAAuB,EACvB,eAAe,EAIf,MAAM,8BAA8B,CAAA;AAGrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAQnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAgB/C,UAAU,qBAAqB;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAOpF;AAiFD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAIZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAI;gBAEY,QAAQ,EAAE,MAAM;IAE7C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,4CAA4C;IAC5C,IAAI,SAAS,IAAI,OAAO,CAEvB;CACD;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,mEAAmE;IACnE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,yFAAyF;IACzF,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC9B;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;CACnB,CAmDA;AA0DD;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC7B,WAAW,EAAE,MAAM,EACnB,qBAAqB,GAAE,SAAS,MAAM,EAAO,GAC3C,MAAM,EAAE,CA8DV;AAmnBD,MAAM,WAAW,2BAA2B;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAA;IAC9D;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAC9B;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC3D,QAAQ,CAAC,EAAE,WAAU;IACrB,QAAQ,CAAC,IAAI,mBAAkB;IAC/B,QAAQ,CAAC,cAAc,8CAA8C;IACrE,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IAExC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;gBAEvC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC;IAkC5D,MAAM,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAkE5D"}
@@ -14,6 +14,7 @@ import { resolveWithinAny, resolveWithinAnyReal } from '../../tools/paths.js';
14
14
  import { subscribeToAbort } from '../../utils/abort.js';
15
15
  import { generateSandboxId } from '../../utils/id.js';
16
16
  import { WINDOWS_CORE_ENV_KEYS, applyEnvironmentOverrides, pickEnvironmentEntries, } from '../../utils/process-environment.js';
17
+ import { walkFilesLocally } from '../file-walk.js';
17
18
  import { assertIsolation, describeIsolation } from '../isolation.js';
18
19
  // ---------------------------------------------------------------------------
19
20
  // Platform detection
@@ -592,6 +593,14 @@ class LocalSandbox {
592
593
  }
593
594
  return entries;
594
595
  }
596
+ async *walkFiles(rootPath, options) {
597
+ if (this._status === 'destroyed')
598
+ throw new Error(`Sandbox ${this.id} is destroyed`);
599
+ options.signal?.throwIfAborted();
600
+ const resolved = await resolveWithinAnyReal(this.roots, rootPath);
601
+ options.signal?.throwIfAborted();
602
+ yield* walkFilesLocally(resolved, options);
603
+ }
595
604
  async destroy(_options) {
596
605
  if (this._status === 'destroyed') {
597
606
  return;