@namzu/sandbox 14.0.0 → 15.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.
- package/CHANGELOG.md +838 -0
- package/README.md +310 -14
- package/dist/backends/aci-standby-pool/index.d.ts.map +1 -1
- package/dist/backends/aci-standby-pool/index.js +13 -1
- package/dist/backends/aci-standby-pool/index.js.map +1 -1
- package/dist/backends/docker/index.d.ts.map +1 -1
- package/dist/backends/docker/index.js +19 -1
- package/dist/backends/docker/index.js.map +1 -1
- package/dist/backends/firecracker/index.d.ts.map +1 -1
- package/dist/backends/firecracker/index.js +12 -2
- package/dist/backends/firecracker/index.js.map +1 -1
- package/dist/backends/firecracker/protocol.d.ts +459 -8
- package/dist/backends/firecracker/protocol.d.ts.map +1 -1
- package/dist/backends/firecracker/protocol.js +136 -0
- package/dist/backends/firecracker/protocol.js.map +1 -1
- package/dist/backends/firecracker/transport.d.ts +539 -6
- package/dist/backends/firecracker/transport.d.ts.map +1 -1
- package/dist/backends/firecracker/transport.js +1171 -24
- package/dist/backends/firecracker/transport.js.map +1 -1
- package/dist/backends/kubernetes/egress-policy.d.ts +1088 -11
- package/dist/backends/kubernetes/egress-policy.d.ts.map +1 -1
- package/dist/backends/kubernetes/egress-policy.js +2173 -29
- package/dist/backends/kubernetes/egress-policy.js.map +1 -1
- package/dist/backends/kubernetes/identity.d.ts +193 -0
- package/dist/backends/kubernetes/identity.d.ts.map +1 -0
- package/dist/backends/kubernetes/identity.js +147 -0
- package/dist/backends/kubernetes/identity.js.map +1 -0
- package/dist/backends/kubernetes/index.d.ts +678 -33
- package/dist/backends/kubernetes/index.d.ts.map +1 -1
- package/dist/backends/kubernetes/index.js +1180 -95
- package/dist/backends/kubernetes/index.js.map +1 -1
- package/dist/backends/kubernetes/ingress-policy.d.ts +375 -0
- package/dist/backends/kubernetes/ingress-policy.d.ts.map +1 -0
- package/dist/backends/kubernetes/ingress-policy.js +1050 -0
- package/dist/backends/kubernetes/ingress-policy.js.map +1 -0
- package/dist/backends/kubernetes/k8s-client.d.ts +213 -4
- package/dist/backends/kubernetes/k8s-client.d.ts.map +1 -1
- package/dist/backends/kubernetes/k8s-client.js +359 -52
- package/dist/backends/kubernetes/k8s-client.js.map +1 -1
- package/dist/backends/kubernetes/lease.d.ts +40 -14
- package/dist/backends/kubernetes/lease.d.ts.map +1 -1
- package/dist/backends/kubernetes/lease.js +68 -18
- package/dist/backends/kubernetes/lease.js.map +1 -1
- package/dist/backends/kubernetes/objects.d.ts +423 -3
- package/dist/backends/kubernetes/objects.d.ts.map +1 -1
- package/dist/backends/kubernetes/objects.js +364 -2
- package/dist/backends/kubernetes/objects.js.map +1 -1
- package/dist/backends/kubernetes/per-sandbox-policy.d.ts +219 -0
- package/dist/backends/kubernetes/per-sandbox-policy.d.ts.map +1 -0
- package/dist/backends/kubernetes/per-sandbox-policy.js +407 -0
- package/dist/backends/kubernetes/per-sandbox-policy.js.map +1 -0
- package/dist/backends/kubernetes/rbac.d.ts +153 -0
- package/dist/backends/kubernetes/rbac.d.ts.map +1 -0
- package/dist/backends/kubernetes/rbac.js +177 -0
- package/dist/backends/kubernetes/rbac.js.map +1 -0
- package/dist/backends/kubernetes/sandbox.d.ts +81 -14
- package/dist/backends/kubernetes/sandbox.d.ts.map +1 -1
- package/dist/backends/kubernetes/sandbox.js +149 -15
- package/dist/backends/kubernetes/sandbox.js.map +1 -1
- package/dist/backends/kubernetes/transport.d.ts +935 -9
- package/dist/backends/kubernetes/transport.d.ts.map +1 -1
- package/dist/backends/kubernetes/transport.js +1958 -62
- package/dist/backends/kubernetes/transport.js.map +1 -1
- package/dist/backends/kubernetes/workspace.d.ts +1149 -18
- package/dist/backends/kubernetes/workspace.d.ts.map +1 -1
- package/dist/backends/kubernetes/workspace.js +2825 -186
- package/dist/backends/kubernetes/workspace.js.map +1 -1
- package/dist/backends/remote-execution-controller.d.ts +14 -0
- package/dist/backends/remote-execution-controller.d.ts.map +1 -1
- package/dist/backends/remote-execution-controller.js.map +1 -1
- package/dist/index.d.ts +231 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +247 -5
- package/dist/index.js.map +1 -1
- package/dist/testing/sandbox-conformance.d.ts +39 -5
- package/dist/testing/sandbox-conformance.d.ts.map +1 -1
- package/dist/testing/sandbox-conformance.js +436 -5
- package/dist/testing/sandbox-conformance.js.map +1 -1
- package/package.json +3 -3
- package/src/backends/aci-standby-pool/index.ts +16 -1
- package/src/backends/docker/index.ts +22 -1
- package/src/backends/firecracker/index.ts +14 -2
- package/src/backends/firecracker/protocol.ts +514 -6
- package/src/backends/firecracker/transport.ts +1492 -40
- package/src/backends/kubernetes/egress-policy.ts +3064 -53
- package/src/backends/kubernetes/identity.ts +261 -0
- package/src/backends/kubernetes/index.ts +1785 -127
- package/src/backends/kubernetes/ingress-policy.ts +1344 -0
- package/src/backends/kubernetes/k8s-client.ts +444 -54
- package/src/backends/kubernetes/lease.ts +75 -19
- package/src/backends/kubernetes/objects.ts +626 -6
- package/src/backends/kubernetes/per-sandbox-policy.ts +542 -0
- package/src/backends/kubernetes/rbac.ts +192 -0
- package/src/backends/kubernetes/sandbox.ts +218 -20
- package/src/backends/kubernetes/transport.ts +2733 -124
- package/src/backends/kubernetes/workspace.ts +4476 -222
- package/src/backends/remote-execution-controller.ts +14 -0
- package/src/index.ts +595 -14
- package/src/testing/sandbox-conformance.ts +540 -5
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
* Contract behaviour only — never a backend-specific object, field or
|
|
29
29
|
* error string. A case never inspects `sandbox.constructor.name`, never
|
|
30
30
|
* matches an error message, and never assumes a particular
|
|
31
|
-
* {@link SandboxEnvironment}. `openTerminal
|
|
32
|
-
* OPTIONAL on {@link Sandbox} by the SDK's own contract — a
|
|
33
|
-
* cannot honour one must omit it rather than accept and ignore
|
|
34
|
-
* factory whose sandbox omits
|
|
31
|
+
* {@link SandboxEnvironment}. `openTerminal`, `openTcpConnection` and
|
|
32
|
+
* `walkFiles` are OPTIONAL on {@link Sandbox} by the SDK's own contract — a
|
|
33
|
+
* backend that cannot honour one must omit it rather than accept and ignore
|
|
34
|
+
* it — so a factory whose sandbox omits any of them skips that section rather
|
|
35
35
|
* than failing it. Every other section runs against every sandbox.
|
|
36
36
|
*
|
|
37
37
|
* ## Where it runs today
|
|
@@ -60,13 +60,30 @@
|
|
|
60
60
|
* })
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
|
+
import { createHash } from 'node:crypto';
|
|
63
64
|
/**
|
|
64
65
|
* The contract revision these assertions express. Carried on the describe
|
|
65
66
|
* label so a failure is legible on sight as "the sandbox contract", the
|
|
66
67
|
* same convention `PROVIDER_DRIVER_CONTRACT_VERSION` uses — raised only
|
|
67
68
|
* when a case is ADDED or TIGHTENED, never on a rewording.
|
|
69
|
+
*
|
|
70
|
+
* 3 is the `walkFiles`, concurrent-`exec` and `exec`-timeout sections, none
|
|
71
|
+
* of which needs a guest feature that did not already exist.
|
|
72
|
+
*
|
|
73
|
+
* **The ranged and streamed read cases deliberately did NOT raise it
|
|
74
|
+
* further.** Raising it for them would assert that every backend this suite
|
|
75
|
+
* runs against implements them, and one does not: the Firecracker tier's
|
|
76
|
+
* guest lives in a golden rootfs image that is NOT built from this
|
|
77
|
+
* repository — nothing here builds one, `packages/sandbox/package.json#files`
|
|
78
|
+
* does not even ship `agent/`, and `README.md` documents the image as
|
|
79
|
+
* something the operator builds and canaries on their own schedule. A
|
|
80
|
+
* deployment therefore runs whatever agent its last image build baked in,
|
|
81
|
+
* and a contract version that claimed otherwise would be a claim about
|
|
82
|
+
* images this repository cannot see. Those two cases are gated on
|
|
83
|
+
* {@link SandboxConformanceOptions.supportsRangedAndStreamedReads}
|
|
84
|
+
* instead, and skip by name when a backend does not declare them.
|
|
68
85
|
*/
|
|
69
|
-
export const SANDBOX_CONTRACT_VERSION =
|
|
86
|
+
export const SANDBOX_CONTRACT_VERSION = 3;
|
|
70
87
|
/** Assert `call()` rejects. The contract cares that admission was refused, never the message. */
|
|
71
88
|
async function expectRejects(expect, call) {
|
|
72
89
|
let rejected = false;
|
|
@@ -92,6 +109,34 @@ async function expectResolves(expect, call) {
|
|
|
92
109
|
function sleep(ms) {
|
|
93
110
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
94
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* `size` bytes of deterministic pseudo-random content (xorshift32 from a
|
|
114
|
+
* fixed seed).
|
|
115
|
+
*
|
|
116
|
+
* Pseudo-random rather than a repeated byte because the large-body case
|
|
117
|
+
* below is about whether every byte survived in the right ORDER: a body of
|
|
118
|
+
* one repeated value passes a length check and a content check even if the
|
|
119
|
+
* transport shipped its pieces out of order, duplicated one, or dropped
|
|
120
|
+
* one and padded. Deterministic rather than `randomBytes` so a failure is
|
|
121
|
+
* reproducible from the size alone.
|
|
122
|
+
*/
|
|
123
|
+
function deterministicBytes(size) {
|
|
124
|
+
const out = Buffer.allocUnsafe(size);
|
|
125
|
+
let x = 0x9e3779b9;
|
|
126
|
+
for (let i = 0; i < size; i += 1) {
|
|
127
|
+
x ^= x << 13;
|
|
128
|
+
x >>>= 0;
|
|
129
|
+
x ^= x >> 17;
|
|
130
|
+
x ^= x << 5;
|
|
131
|
+
x >>>= 0;
|
|
132
|
+
out[i] = x & 0xff;
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
/** `sha256` of a buffer, hex — a byte-exact comparison that prints short. */
|
|
137
|
+
function digest(buffer) {
|
|
138
|
+
return createHash('sha256').update(buffer).digest('hex');
|
|
139
|
+
}
|
|
95
140
|
/** What {@link nodeGuestListener} has its script print once it is bound. */
|
|
96
141
|
const NODE_LISTENER_MARKER = 'namzu-conformance-listening:';
|
|
97
142
|
/**
|
|
@@ -193,6 +238,7 @@ export function defineSandboxConformance(options) {
|
|
|
193
238
|
const label = options.label ?? 'sandbox';
|
|
194
239
|
const guestCanRunNode = options.guestCanRunNode ?? true;
|
|
195
240
|
const guestListenerCommand = options.guestListenerCommand ?? nodeGuestListener;
|
|
241
|
+
const supportsRangedAndStreamedReads = options.supportsRangedAndStreamedReads ?? false;
|
|
196
242
|
/**
|
|
197
243
|
* Run `body` against a sandbox built for this case alone.
|
|
198
244
|
*
|
|
@@ -213,6 +259,19 @@ export function defineSandboxConformance(options) {
|
|
|
213
259
|
await handle.dispose?.();
|
|
214
260
|
}
|
|
215
261
|
};
|
|
262
|
+
/**
|
|
263
|
+
* A case that needs {@link SandboxConformanceOptions.supportsRangedAndStreamedReads}.
|
|
264
|
+
*
|
|
265
|
+
* The skip is deliberately visible: the reason is in the case's TITLE and
|
|
266
|
+
* the case still runs and is counted in the runner's totals, which is what
|
|
267
|
+
* {@link SANDBOX_CONTRACT_VERSION}'s note asks for. What it does not do is
|
|
268
|
+
* build a sandbox to skip inside — `withSandbox` is applied only on the
|
|
269
|
+
* branch that uses one, so a backend without the capability pays nothing
|
|
270
|
+
* per skipped case.
|
|
271
|
+
*/
|
|
272
|
+
const rangedReadCase = (title, body) => supportsRangedAndStreamedReads
|
|
273
|
+
? [title, withSandbox(body)]
|
|
274
|
+
: [`${title} (skipped: supportsRangedAndStreamedReads is false)`, async () => { }];
|
|
216
275
|
describe(`${label} — sandbox contract v${SANDBOX_CONTRACT_VERSION}`, () => {
|
|
217
276
|
describe('exec', () => {
|
|
218
277
|
it('reports the exit code and streams stdout/stderr as the command runs', withSandbox(async (sandbox) => {
|
|
@@ -307,6 +366,99 @@ export function defineSandboxConformance(options) {
|
|
|
307
366
|
// in the string this failure prints.
|
|
308
367
|
expect(read.toString('base64')).toBe(payload.toString('base64'));
|
|
309
368
|
}));
|
|
369
|
+
/**
|
|
370
|
+
* A body too large to cross the wire in ONE message.
|
|
371
|
+
*
|
|
372
|
+
* 7 MiB is chosen against a real number rather than a round one:
|
|
373
|
+
* a `write-file` body travels base64-encoded inside the request
|
|
374
|
+
* envelope, so 7 MiB of content is ~9.3 MiB of frame — past the
|
|
375
|
+
* 8 MiB ceiling the guest agent enforces on an unauthenticated
|
|
376
|
+
* connection's first frame, which on a transport that dials
|
|
377
|
+
* fresh per call is EVERY frame. That ceiling used to make this
|
|
378
|
+
* case a documented refusal on the kubernetes backend while the
|
|
379
|
+
* host-local backends served it without noticing, which is
|
|
380
|
+
* exactly the shape of divergence a contract suite exists to
|
|
381
|
+
* catch: `Sandbox.writeFile` promises to write a file, and a
|
|
382
|
+
* caller seeding a repository archive into a workspace cannot
|
|
383
|
+
* be told that the promise holds below a number nothing in the
|
|
384
|
+
* interface names.
|
|
385
|
+
*
|
|
386
|
+
* Compared by digest, not by content: a mismatch here belongs in
|
|
387
|
+
* the failure message as a short string, and 7 MiB of base64
|
|
388
|
+
* does not.
|
|
389
|
+
*/
|
|
390
|
+
it('round-trips a body larger than one wire frame', withSandbox(async (sandbox) => {
|
|
391
|
+
const payload = deterministicBytes(7 * 1024 * 1024);
|
|
392
|
+
await sandbox.writeFile('conformance-large/archive.bin', payload);
|
|
393
|
+
const read = await sandbox.readFile('conformance-large/archive.bin');
|
|
394
|
+
expect(read.length).toBe(payload.length);
|
|
395
|
+
expect(digest(read)).toBe(digest(payload));
|
|
396
|
+
}));
|
|
397
|
+
/**
|
|
398
|
+
* A read ABOVE the ceiling the case above sits below.
|
|
399
|
+
*
|
|
400
|
+
* 7 MiB is chosen for what the WRITE costs — 9.3 MiB of base64
|
|
401
|
+
* envelope, past the guest's 8 MiB pre-auth frame limit — and a
|
|
402
|
+
* reply frame is not measured against that limit at all, so that
|
|
403
|
+
* case proves nothing about the read side. 9 MiB is above the
|
|
404
|
+
* number on both sides of the wire, which is the only way to tell
|
|
405
|
+
* a backend that reads a file in bounded pieces from one that
|
|
406
|
+
* hands back a single reply and hopes.
|
|
407
|
+
*
|
|
408
|
+
* Skipped by NAME, and counted in the runner's totals as a case,
|
|
409
|
+
* for a backend that has not declared the capability — see
|
|
410
|
+
* {@link SandboxConformanceOptions.supportsRangedAndStreamedReads}
|
|
411
|
+
* and the note on {@link SANDBOX_CONTRACT_VERSION}.
|
|
412
|
+
*/
|
|
413
|
+
it(...rangedReadCase('reads a file larger than one wire frame back in bounded pieces', async (sandbox) => {
|
|
414
|
+
const payload = deterministicBytes(9 * 1024 * 1024);
|
|
415
|
+
await sandbox.writeFile('conformance-large/wide.bin', payload);
|
|
416
|
+
const whole = await sandbox.readFile('conformance-large/wide.bin');
|
|
417
|
+
expect(whole.length).toBe(payload.length);
|
|
418
|
+
expect(digest(whole)).toBe(digest(payload));
|
|
419
|
+
// A backend declaring the capability must expose the stream
|
|
420
|
+
// too: the whole point is that a caller can read a file it
|
|
421
|
+
// could not hold, and `readFile` hands back one buffer.
|
|
422
|
+
const readFileStream = sandbox.readFileStream;
|
|
423
|
+
if (!readFileStream) {
|
|
424
|
+
throw new Error('supportsRangedAndStreamedReads is true but this sandbox has no readFileStream. ' +
|
|
425
|
+
'A backend that honours offset/length but cannot stream must pass ' +
|
|
426
|
+
'supportsRangedAndStreamedReads: false and state why.');
|
|
427
|
+
}
|
|
428
|
+
const chunks = [];
|
|
429
|
+
for await (const chunk of readFileStream.call(sandbox, 'conformance-large/wide.bin')) {
|
|
430
|
+
chunks.push(Buffer.from(chunk));
|
|
431
|
+
}
|
|
432
|
+
// More than one chunk is what "bounded pieces" means; a
|
|
433
|
+
// backend yielding the whole file once satisfies the
|
|
434
|
+
// signature and none of the promise.
|
|
435
|
+
expect(chunks.length > 1).toBe(true);
|
|
436
|
+
expect(digest(Buffer.concat(chunks))).toBe(digest(payload));
|
|
437
|
+
}));
|
|
438
|
+
/**
|
|
439
|
+
* A slice, and the three things a slice has to get right: the
|
|
440
|
+
* bytes, a range that runs off the end, and the fact that asking
|
|
441
|
+
* for one must not hand back the whole file.
|
|
442
|
+
*/
|
|
443
|
+
it(...rangedReadCase('reads an explicit byte range, and clips it to the end of the file', async (sandbox) => {
|
|
444
|
+
const payload = deterministicBytes(64 * 1024);
|
|
445
|
+
await sandbox.writeFile('conformance-range/slice.bin', payload);
|
|
446
|
+
const middle = await sandbox.readFile('conformance-range/slice.bin', {
|
|
447
|
+
offset: 1_000,
|
|
448
|
+
length: 256,
|
|
449
|
+
});
|
|
450
|
+
expect(middle.length).toBe(256);
|
|
451
|
+
expect(middle.toString('base64')).toBe(payload.subarray(1_000, 1_256).toString('base64'));
|
|
452
|
+
// Past the end returns what exists rather than failing: a
|
|
453
|
+
// caller resuming from a remembered offset cannot be made to
|
|
454
|
+
// know the answer before it asks.
|
|
455
|
+
const straddling = await sandbox.readFile('conformance-range/slice.bin', {
|
|
456
|
+
offset: payload.length - 10,
|
|
457
|
+
length: 500,
|
|
458
|
+
});
|
|
459
|
+
expect(straddling.length).toBe(10);
|
|
460
|
+
expect(straddling.toString('base64')).toBe(payload.subarray(-10).toString('base64'));
|
|
461
|
+
}));
|
|
310
462
|
});
|
|
311
463
|
describe('listFiles', () => {
|
|
312
464
|
it('lists written files as absolute paths with their sizes', withSandbox(async (sandbox) => {
|
|
@@ -460,6 +612,285 @@ export function defineSandboxConformance(options) {
|
|
|
460
612
|
}
|
|
461
613
|
}));
|
|
462
614
|
});
|
|
615
|
+
/**
|
|
616
|
+
* Optional on {@link Sandbox} by the SDK's own contract, and the same
|
|
617
|
+
* documented skip as `openTerminal`: a factory whose sandbox omits
|
|
618
|
+
* `walkFiles` passes every case below vacuously. It is not a small
|
|
619
|
+
* omission to make, though — the SDK's `glob` and `grep` builtins
|
|
620
|
+
* REFUSE a sandbox that has no `walkFiles`, so a host that registers
|
|
621
|
+
* the default builtin set and moves to such a backend loses both
|
|
622
|
+
* tools with no change on its own side.
|
|
623
|
+
*
|
|
624
|
+
* What is asserted here is the contract's own wording: absolute paths,
|
|
625
|
+
* regular files only, symlinks not followed, the bounds honoured by
|
|
626
|
+
* whoever does the walking, and — the one that is easy to get wrong —
|
|
627
|
+
* an exhausted examined-entry budget raising an error carrying
|
|
628
|
+
* `ERR_FILE_WALK_LIMIT` rather than handing back a short list a caller
|
|
629
|
+
* would read as complete.
|
|
630
|
+
*/
|
|
631
|
+
describe('walkFiles', () => {
|
|
632
|
+
/**
|
|
633
|
+
* Every path this walk yielded, sorted.
|
|
634
|
+
*
|
|
635
|
+
* `walkFiles` is called through `.call(sandbox, …)` for the same
|
|
636
|
+
* reason `openTerminal` is above: it may be an ordinary method
|
|
637
|
+
* relying on `this`, and detaching it would drop that binding.
|
|
638
|
+
*/
|
|
639
|
+
const walkPaths = async (sandbox, root, options) => {
|
|
640
|
+
const walk = sandbox.walkFiles;
|
|
641
|
+
if (!walk)
|
|
642
|
+
throw new Error('unreachable: every case guards on walkFiles first');
|
|
643
|
+
const paths = [];
|
|
644
|
+
for await (const entry of walk.call(sandbox, root, options))
|
|
645
|
+
paths.push(entry.path);
|
|
646
|
+
return paths.sort();
|
|
647
|
+
};
|
|
648
|
+
it('yields written files as absolute paths with their sizes, bounded by maxEntries', withSandbox(async (sandbox) => {
|
|
649
|
+
if (!sandbox.walkFiles)
|
|
650
|
+
return;
|
|
651
|
+
await sandbox.writeFile('conformance-walk/a.txt', '1');
|
|
652
|
+
await sandbox.writeFile('conformance-walk/b.txt', '22');
|
|
653
|
+
await sandbox.writeFile('conformance-walk/c.txt', '333');
|
|
654
|
+
const dir = `${sandbox.rootDir}/conformance-walk`;
|
|
655
|
+
const sizes = new Map();
|
|
656
|
+
const walk = sandbox.walkFiles;
|
|
657
|
+
for await (const entry of walk.call(sandbox, dir, { maxEntries: 10 })) {
|
|
658
|
+
sizes.set(entry.path, entry.size);
|
|
659
|
+
}
|
|
660
|
+
expect([...sizes.keys()].sort()).toEqual([`${dir}/a.txt`, `${dir}/b.txt`, `${dir}/c.txt`]);
|
|
661
|
+
expect(sizes.get(`${dir}/c.txt`)).toBe(3);
|
|
662
|
+
// The bound is on what is EMITTED, so a walk asked for two
|
|
663
|
+
// entries yields two and stops — it does not yield three and
|
|
664
|
+
// leave the caller to discard one.
|
|
665
|
+
expect((await walkPaths(sandbox, dir, { maxEntries: 2 })).length).toBe(2);
|
|
666
|
+
}));
|
|
667
|
+
it('bounds the descent with maxDepth, counting direct children as depth 1', withSandbox(async (sandbox) => {
|
|
668
|
+
if (!sandbox.walkFiles)
|
|
669
|
+
return;
|
|
670
|
+
await sandbox.writeFile('conformance-depth/top.txt', 'top');
|
|
671
|
+
await sandbox.writeFile('conformance-depth/one/mid.txt', 'mid');
|
|
672
|
+
await sandbox.writeFile('conformance-depth/one/two/deep.txt', 'deep');
|
|
673
|
+
const dir = `${sandbox.rootDir}/conformance-depth`;
|
|
674
|
+
expect(await walkPaths(sandbox, dir, { maxEntries: 50, maxDepth: 1 })).toEqual([
|
|
675
|
+
`${dir}/top.txt`,
|
|
676
|
+
]);
|
|
677
|
+
expect(await walkPaths(sandbox, dir, { maxEntries: 50, maxDepth: 2 })).toEqual([
|
|
678
|
+
`${dir}/one/mid.txt`,
|
|
679
|
+
`${dir}/top.txt`,
|
|
680
|
+
]);
|
|
681
|
+
}));
|
|
682
|
+
it('keeps hidden names out of a wildcard unless includeHidden is set', withSandbox(async (sandbox) => {
|
|
683
|
+
if (!sandbox.walkFiles)
|
|
684
|
+
return;
|
|
685
|
+
await sandbox.writeFile('conformance-hidden/visible.txt', 'v');
|
|
686
|
+
await sandbox.writeFile('conformance-hidden/.secret.txt', 'h');
|
|
687
|
+
const dir = `${sandbox.rootDir}/conformance-hidden`;
|
|
688
|
+
expect(await walkPaths(sandbox, dir, { maxEntries: 50 })).toEqual([`${dir}/visible.txt`]);
|
|
689
|
+
expect(await walkPaths(sandbox, dir, { maxEntries: 50, includeHidden: true })).toEqual([
|
|
690
|
+
`${dir}/.secret.txt`,
|
|
691
|
+
`${dir}/visible.txt`,
|
|
692
|
+
]);
|
|
693
|
+
}));
|
|
694
|
+
it('reports a root that does not exist as an empty walk rather than failing', withSandbox(async (sandbox) => {
|
|
695
|
+
if (!sandbox.walkFiles)
|
|
696
|
+
return;
|
|
697
|
+
const paths = await walkPaths(sandbox, `${sandbox.rootDir}/conformance-never-walked`, {
|
|
698
|
+
maxEntries: 10,
|
|
699
|
+
});
|
|
700
|
+
expect(paths.length).toBe(0);
|
|
701
|
+
}));
|
|
702
|
+
it('does not follow symbolic links, to a file or to a directory', withSandbox(async (sandbox) => {
|
|
703
|
+
if (!sandbox.walkFiles)
|
|
704
|
+
return;
|
|
705
|
+
await sandbox.writeFile('conformance-links/real/target.txt', 'target');
|
|
706
|
+
const dir = `${sandbox.rootDir}/conformance-links`;
|
|
707
|
+
const linked = await sandbox.exec('/bin/sh', [
|
|
708
|
+
'-c',
|
|
709
|
+
`cd ${dir} && ln -s real/target.txt link-to-file.txt && ln -s real link-to-dir`,
|
|
710
|
+
]);
|
|
711
|
+
// Never a silent skip. A runtime discovery cannot travel
|
|
712
|
+
// through this suite's one skip channel — the case's own
|
|
713
|
+
// title, decided synchronously from the options — so a guest
|
|
714
|
+
// that cannot build the fixture says so out loud instead of
|
|
715
|
+
// passing a case that asserted nothing.
|
|
716
|
+
if (linked.exitCode !== 0) {
|
|
717
|
+
throw new Error(`walkFiles conformance: this case builds its fixture with POSIX \`ln -s\`, and the guest's shell answered ${linked.exitCode}: ${linked.stderr.trim()}. A guest image that cannot make a symbolic link is not held to "symlinks are not followed" by asserting nothing — ship \`ln\`, or raise the gap so the suite grows a declared skip rather than a quiet one.`);
|
|
718
|
+
}
|
|
719
|
+
// The real file, once, under its real path. Following the
|
|
720
|
+
// directory link would have reported it again through
|
|
721
|
+
// `link-to-dir/target.txt`, and the file link again as itself.
|
|
722
|
+
expect(await walkPaths(sandbox, dir, { maxEntries: 50 })).toEqual([
|
|
723
|
+
`${dir}/real/target.txt`,
|
|
724
|
+
]);
|
|
725
|
+
}));
|
|
726
|
+
it('raises ERR_FILE_WALK_LIMIT when the examined-entry budget runs out', withSandbox(async (sandbox) => {
|
|
727
|
+
if (!sandbox.walkFiles)
|
|
728
|
+
return;
|
|
729
|
+
for (let index = 0; index < 12; index += 1) {
|
|
730
|
+
await sandbox.writeFile(`conformance-budget/f${index}.txt`, 'x');
|
|
731
|
+
}
|
|
732
|
+
// An incomplete search is an ERROR carrying a code, never a
|
|
733
|
+
// short list: a caller handed six of twelve files with no
|
|
734
|
+
// signal reads it as "that is all there is".
|
|
735
|
+
let code;
|
|
736
|
+
try {
|
|
737
|
+
await walkPaths(sandbox, `${sandbox.rootDir}/conformance-budget`, {
|
|
738
|
+
maxEntries: 50,
|
|
739
|
+
maxVisitedEntries: 4,
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
catch (error) {
|
|
743
|
+
code = error.code;
|
|
744
|
+
}
|
|
745
|
+
expect(code).toBe('ERR_FILE_WALK_LIMIT');
|
|
746
|
+
}));
|
|
747
|
+
it('refuses a walk once the sandbox has been destroyed', withSandbox(async (sandbox) => {
|
|
748
|
+
if (!sandbox.walkFiles)
|
|
749
|
+
return;
|
|
750
|
+
const root = sandbox.rootDir;
|
|
751
|
+
await sandbox.destroy();
|
|
752
|
+
// Consumed, not merely constructed: an async generator runs
|
|
753
|
+
// nothing until its first `next()`, so a case that built the
|
|
754
|
+
// iterator and stopped would pass against a sandbox that
|
|
755
|
+
// admits the walk happily.
|
|
756
|
+
await expectRejects(expect, () => walkPaths(sandbox, root, { maxEntries: 10 }));
|
|
757
|
+
}));
|
|
758
|
+
});
|
|
759
|
+
/**
|
|
760
|
+
* One sandbox, several commands at once.
|
|
761
|
+
*
|
|
762
|
+
* A supervisor and its sub-agents share a sandbox, so this is the
|
|
763
|
+
* ordinary case rather than an exotic one — and nothing in this suite
|
|
764
|
+
* used to exercise it. A backend that serialises executions behind one
|
|
765
|
+
* connection, or that lets two commands' output frames land in each
|
|
766
|
+
* other's result, passes every other case here.
|
|
767
|
+
*
|
|
768
|
+
* Overlap is proved by the commands themselves rather than by a clock:
|
|
769
|
+
* each appends its own mark to a shared file, waits for every other
|
|
770
|
+
* mark to appear, and then prints the whole file back. If the backend
|
|
771
|
+
* really ran them together every command sees every mark; if it ran
|
|
772
|
+
* them one at a time the first one waits out its ceiling and can only
|
|
773
|
+
* ever see its own.
|
|
774
|
+
*/
|
|
775
|
+
describe('concurrent exec', () => {
|
|
776
|
+
it('runs several commands at once on one sandbox, with no cross-talk between their results', withSandbox(async (sandbox) => {
|
|
777
|
+
const count = 4;
|
|
778
|
+
await sandbox.writeFile('conformance-concurrent/marks', '');
|
|
779
|
+
const marks = `${sandbox.rootDir}/conformance-concurrent/marks`;
|
|
780
|
+
// A rendezvous rather than a sleep: each command appends its
|
|
781
|
+
// own mark and then WAITS for every other mark to appear
|
|
782
|
+
// before it prints. A backend that really runs them together
|
|
783
|
+
// settles as soon as the slowest one has started — no clock
|
|
784
|
+
// to tune, and nothing that gets tighter on a machine or a
|
|
785
|
+
// cluster where four dials cost more than a fixed pause. A
|
|
786
|
+
// backend that serialises them has the first command wait
|
|
787
|
+
// out the ceiling below and still print only its own mark,
|
|
788
|
+
// which is what the assertions catch.
|
|
789
|
+
const everyMark = Array.from({ length: count }, (_unused, index) => index).join(' ');
|
|
790
|
+
const rendezvous = (index) => [
|
|
791
|
+
`printf '[%s]' '${index}' >> "${marks}"`,
|
|
792
|
+
'waited=0',
|
|
793
|
+
// 60 × 0.1 s. Only a backend that has already failed
|
|
794
|
+
// the case ever reaches it.
|
|
795
|
+
'while [ "$waited" -lt 60 ]; do',
|
|
796
|
+
` all=$(cat "${marks}")`,
|
|
797
|
+
' seen=1',
|
|
798
|
+
` for mark in ${everyMark}; do`,
|
|
799
|
+
' case "$all" in *"[$mark]"*) ;; *) seen=0 ;; esac',
|
|
800
|
+
' done',
|
|
801
|
+
' [ "$seen" -eq 1 ] && break',
|
|
802
|
+
' waited=$((waited + 1))',
|
|
803
|
+
' sleep 0.1',
|
|
804
|
+
'done',
|
|
805
|
+
`printf 'own:%s ' '${index}'`,
|
|
806
|
+
`cat "${marks}"`,
|
|
807
|
+
].join('\n');
|
|
808
|
+
const running = Array.from({ length: count }, (_unused, index) => sandbox.exec('/bin/sh', ['-c', rendezvous(index)]));
|
|
809
|
+
// Attached BEFORE the first assertion, and that ordering is
|
|
810
|
+
// load-bearing: an assertion that threw with four commands
|
|
811
|
+
// still in flight would leave four promises nobody is
|
|
812
|
+
// handling, and a backend that then rejects one of them
|
|
813
|
+
// takes the runner down with an unhandled rejection instead
|
|
814
|
+
// of failing this case.
|
|
815
|
+
const settled = Promise.allSettled(running);
|
|
816
|
+
// Every one of them is in flight right now.
|
|
817
|
+
expect(sandbox.status).toBe('busy');
|
|
818
|
+
const results = [];
|
|
819
|
+
for (const outcome of await settled) {
|
|
820
|
+
if (outcome.status === 'rejected') {
|
|
821
|
+
throw outcome.reason instanceof Error
|
|
822
|
+
? outcome.reason
|
|
823
|
+
: new Error(String(outcome.reason));
|
|
824
|
+
}
|
|
825
|
+
results.push(outcome.value);
|
|
826
|
+
}
|
|
827
|
+
for (let index = 0; index < count; index += 1) {
|
|
828
|
+
const result = results[index];
|
|
829
|
+
if (!result)
|
|
830
|
+
throw new Error('unreachable: one result per started command');
|
|
831
|
+
expect(result.exitCode).toBe(0);
|
|
832
|
+
// Its OWN identity, on its own result: a backend that
|
|
833
|
+
// mixed two commands' output frames fails here.
|
|
834
|
+
expect(result.stdout).toMatch(new RegExp(`own:${index} `));
|
|
835
|
+
// And every other command's mark, which only holds if
|
|
836
|
+
// they were all admitted before any of them finished.
|
|
837
|
+
for (let other = 0; other < count; other += 1) {
|
|
838
|
+
expect(result.stdout).toMatch(new RegExp(`\\[${other}\\]`));
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
expect(sandbox.status).toBe('ready');
|
|
842
|
+
}));
|
|
843
|
+
});
|
|
844
|
+
/**
|
|
845
|
+
* `SandboxExecOptions.timeout` and the `timedOut` flag it sets.
|
|
846
|
+
*
|
|
847
|
+
* `SandboxExecResult.timedOut` is REQUIRED on the contract, so every
|
|
848
|
+
* backend answers it on every result — and until now nothing checked
|
|
849
|
+
* that a backend ever sets it to `true`. A backend that accepts
|
|
850
|
+
* `timeout` and ignores it reports a clean, unaborted-looking success
|
|
851
|
+
* after however long the command felt like taking, which is the same
|
|
852
|
+
* defect class the `AbortSignal` case above exists for and reads the
|
|
853
|
+
* same way to a caller: a result that says the work is done.
|
|
854
|
+
*/
|
|
855
|
+
describe('exec timeout', () => {
|
|
856
|
+
it('reports a command that outran its timeout as timedOut, and really terminates it', withSandbox(async (sandbox) => {
|
|
857
|
+
// The same shape as the abort case: the marker file is
|
|
858
|
+
// written a moment after "ready", so it only ever exists if
|
|
859
|
+
// the command was left running past its timeout. `trap ''
|
|
860
|
+
// TERM` on both the shell and the background job makes a
|
|
861
|
+
// polite TERM insufficient, exactly as a real runaway
|
|
862
|
+
// command would.
|
|
863
|
+
const marker = 'conformance-timeout-marker.txt';
|
|
864
|
+
const started = Date.now();
|
|
865
|
+
const result = await sandbox.exec('/bin/sh', [
|
|
866
|
+
'-c',
|
|
867
|
+
`trap '' TERM; (trap '' TERM; sleep 1.5; printf late > ${marker}) & echo ready; wait`,
|
|
868
|
+
], { timeout: 400 });
|
|
869
|
+
const elapsed = Date.now() - started;
|
|
870
|
+
expect(result.timedOut).toBe(true);
|
|
871
|
+
// Settled on the timeout rather than on the command
|
|
872
|
+
// finishing: the script itself waits 1.5 s, and a generous
|
|
873
|
+
// ceiling still separates the two outcomes.
|
|
874
|
+
expect(elapsed < 10_000).toBe(true);
|
|
875
|
+
// Long enough that a command left running would have written.
|
|
876
|
+
await sleep(1_800);
|
|
877
|
+
await expectRejects(expect, () => sandbox.readFile(marker));
|
|
878
|
+
// And the sandbox is still usable: a timeout is one
|
|
879
|
+
// command's outcome, not the handle's.
|
|
880
|
+
expect(sandbox.status).toBe('ready');
|
|
881
|
+
const after = await sandbox.exec('/bin/sh', ['-c', 'echo conformance-after-timeout']);
|
|
882
|
+
expect(after.exitCode).toBe(0);
|
|
883
|
+
expect(after.stdout).toMatch(/conformance-after-timeout/);
|
|
884
|
+
}));
|
|
885
|
+
it('leaves timedOut false for a command that finishes inside its timeout', withSandbox(async (sandbox) => {
|
|
886
|
+
const result = await sandbox.exec('/bin/sh', ['-c', 'echo conformance-quick'], {
|
|
887
|
+
timeout: 30_000,
|
|
888
|
+
});
|
|
889
|
+
expect(result.timedOut).toBe(false);
|
|
890
|
+
expect(result.exitCode).toBe(0);
|
|
891
|
+
expect(result.stdout).toMatch(/conformance-quick/);
|
|
892
|
+
}));
|
|
893
|
+
});
|
|
463
894
|
});
|
|
464
895
|
}
|
|
465
896
|
//# sourceMappingURL=sandbox-conformance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-conformance.js","sourceRoot":"","sources":["../../src/testing/sandbox-conformance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox-conformance.js","sourceRoot":"","sources":["../../src/testing/sandbox-conformance.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namzu/sandbox",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "15.0.0",
|
|
4
4
|
"description": "Pluggable sandbox provider for @namzu/sdk. Process-level isolation (bubblewrap on Linux, Seatbelt on macOS, via @anthropic-ai/sandbox-runtime) for developer dev loops; container-level isolation (HTTP worker + a loopback-bound egress proxy that allows by resolved address and brokers outbound credentials so they never enter the sandbox) for multi-tenant production. Backend selected at construction time; the SDK consumes both through the same SandboxProvider interface.",
|
|
5
5
|
"license": "FSL-1.1-MIT",
|
|
6
6
|
"engines": {
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"provenance": true
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@namzu/sdk": "^
|
|
49
|
+
"@namzu/sdk": "^41.0.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@biomejs/biome": "^1.9.4",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"typescript": "^5.5.0",
|
|
55
55
|
"vitest": "^3.2.6",
|
|
56
56
|
"yaml": "^2.9.0",
|
|
57
|
-
"@namzu/sdk": "^
|
|
57
|
+
"@namzu/sdk": "^41.0.0"
|
|
58
58
|
},
|
|
59
59
|
"scripts": {
|
|
60
60
|
"build": "tsc --build",
|
|
@@ -49,6 +49,7 @@ import type {
|
|
|
49
49
|
SandboxExecOptions,
|
|
50
50
|
SandboxExecResult,
|
|
51
51
|
SandboxFileEntry,
|
|
52
|
+
SandboxReadFileOptions,
|
|
52
53
|
SandboxStatus,
|
|
53
54
|
SandboxWalkFilesOptions,
|
|
54
55
|
} from '@namzu/sdk'
|
|
@@ -635,12 +636,26 @@ async function spawnAciSandbox(
|
|
|
635
636
|
}
|
|
636
637
|
},
|
|
637
638
|
|
|
638
|
-
|
|
639
|
+
/**
|
|
640
|
+
* Refused rather than answered whole when a range is asked for —
|
|
641
|
+
* the worker has no range op, and {@link Sandbox.readFile} says a
|
|
642
|
+
* backend that takes `offset`/`length` and hands back everything
|
|
643
|
+
* has given a wrong answer, not a degraded one. `options.signal`
|
|
644
|
+
* is honoured — one HTTP request is the whole read, so the signal
|
|
645
|
+
* goes to `fetch`.
|
|
646
|
+
*/
|
|
647
|
+
async readFile(path: string, options?: SandboxReadFileOptions): Promise<Buffer> {
|
|
639
648
|
assertActive()
|
|
649
|
+
if (options?.offset !== undefined || options?.length !== undefined) {
|
|
650
|
+
throw new Error(
|
|
651
|
+
'readFile: the standby-pool worker serves whole files only, so offset/length cannot be honoured. Read the file whole, or use a backend that streams.',
|
|
652
|
+
)
|
|
653
|
+
}
|
|
640
654
|
const res = await fetch(`${baseUrl}/read-file`, {
|
|
641
655
|
method: 'POST',
|
|
642
656
|
headers: { 'content-type': 'application/json' },
|
|
643
657
|
body: JSON.stringify({ path, encoding: 'base64' }),
|
|
658
|
+
signal: options?.signal,
|
|
644
659
|
})
|
|
645
660
|
if (!res.ok) {
|
|
646
661
|
throw new Error(`read-file failed: HTTP ${res.status} ${await res.text()}`)
|