@namzu/sandbox 1.1.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 +474 -0
- package/LICENSE.md +110 -0
- package/README.md +148 -0
- package/dist/backends/aci-standby-pool/index.d.ts +104 -0
- package/dist/backends/aci-standby-pool/index.d.ts.map +1 -0
- package/dist/backends/aci-standby-pool/index.js +425 -0
- package/dist/backends/aci-standby-pool/index.js.map +1 -0
- package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.d.ts +40 -0
- package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.d.ts.map +1 -0
- package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.js +157 -0
- package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.js.map +1 -0
- package/dist/backends/docker/index.d.ts +118 -0
- package/dist/backends/docker/index.d.ts.map +1 -0
- package/dist/backends/docker/index.js +645 -0
- package/dist/backends/docker/index.js.map +1 -0
- package/dist/backends/firecracker/__tests__/backend.test.d.ts +13 -0
- package/dist/backends/firecracker/__tests__/backend.test.d.ts.map +1 -0
- package/dist/backends/firecracker/__tests__/backend.test.js +353 -0
- package/dist/backends/firecracker/__tests__/backend.test.js.map +1 -0
- package/dist/backends/firecracker/__tests__/control-plane-mtls.test.d.ts +19 -0
- package/dist/backends/firecracker/__tests__/control-plane-mtls.test.d.ts.map +1 -0
- package/dist/backends/firecracker/__tests__/control-plane-mtls.test.js +201 -0
- package/dist/backends/firecracker/__tests__/control-plane-mtls.test.js.map +1 -0
- package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.d.ts +39 -0
- package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.d.ts.map +1 -0
- package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.js +149 -0
- package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.js.map +1 -0
- package/dist/backends/firecracker/__tests__/protocol.test.d.ts +6 -0
- package/dist/backends/firecracker/__tests__/protocol.test.d.ts.map +1 -0
- package/dist/backends/firecracker/__tests__/protocol.test.js +77 -0
- package/dist/backends/firecracker/__tests__/protocol.test.js.map +1 -0
- package/dist/backends/firecracker/__tests__/transport.test.d.ts +20 -0
- package/dist/backends/firecracker/__tests__/transport.test.d.ts.map +1 -0
- package/dist/backends/firecracker/__tests__/transport.test.js +449 -0
- package/dist/backends/firecracker/__tests__/transport.test.js.map +1 -0
- package/dist/backends/firecracker/index.d.ts +124 -0
- package/dist/backends/firecracker/index.d.ts.map +1 -0
- package/dist/backends/firecracker/index.js +334 -0
- package/dist/backends/firecracker/index.js.map +1 -0
- package/dist/backends/firecracker/protocol.d.ts +132 -0
- package/dist/backends/firecracker/protocol.d.ts.map +1 -0
- package/dist/backends/firecracker/protocol.js +112 -0
- package/dist/backends/firecracker/protocol.js.map +1 -0
- package/dist/backends/firecracker/transport.d.ts +251 -0
- package/dist/backends/firecracker/transport.d.ts.map +1 -0
- package/dist/backends/firecracker/transport.js +524 -0
- package/dist/backends/firecracker/transport.js.map +1 -0
- package/dist/index.d.ts +611 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +376 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +28 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +670 -0
- package/dist/index.test.js.map +1 -0
- package/package.json +54 -0
- package/src/backends/aci-standby-pool/index.ts +602 -0
- package/src/backends/docker/__tests__/leaf-permissions.smoke.test.ts +169 -0
- package/src/backends/docker/index.ts +826 -0
- package/src/backends/firecracker/__tests__/backend.test.ts +418 -0
- package/src/backends/firecracker/__tests__/control-plane-mtls.test.ts +253 -0
- package/src/backends/firecracker/__tests__/fixtures/mtls-pki.ts +166 -0
- package/src/backends/firecracker/__tests__/protocol.test.ts +90 -0
- package/src/backends/firecracker/__tests__/transport.test.ts +526 -0
- package/src/backends/firecracker/index.ts +528 -0
- package/src/backends/firecracker/protocol.ts +191 -0
- package/src/backends/firecracker/transport.ts +667 -0
- package/src/index.test.ts +731 -0
- package/src/index.ts +930 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/aci-standby-pool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker smoke test — leaf-mount permission semantics.
|
|
3
|
+
*
|
|
4
|
+
* Concern Codex flagged: the Dockerfile pre-creates only the parent
|
|
5
|
+
* dirs (`/mnt`, `/mnt/user-data`, `/mnt/skills`) as root-owned 0555.
|
|
6
|
+
* The runtime claim is that:
|
|
7
|
+
*
|
|
8
|
+
* 1. When `outputs` IS bound, uid 1001 (the worker user) can write
|
|
9
|
+
* into it.
|
|
10
|
+
* 2. When a leaf path (e.g. `/mnt/user-data/uploads`) is NOT bound,
|
|
11
|
+
* the path simply does not exist — `stat` returns ENOENT, NOT
|
|
12
|
+
* a writable empty dir.
|
|
13
|
+
*
|
|
14
|
+
* Both of those are kernel-level mount-namespace properties, not
|
|
15
|
+
* unit-testable. This file exercises them against a real docker
|
|
16
|
+
* daemon. Run via:
|
|
17
|
+
*
|
|
18
|
+
* pnpm --filter @namzu/sandbox test:smoke
|
|
19
|
+
* # or, from the monorepo root:
|
|
20
|
+
* pnpm sandbox:smoke
|
|
21
|
+
*
|
|
22
|
+
* Excluded from the default `pnpm test` run by `vitest.config.ts`.
|
|
23
|
+
*
|
|
24
|
+
* Pre-requisites:
|
|
25
|
+
* - `docker` CLI on PATH.
|
|
26
|
+
* - A pre-built reference image. By default this test looks for
|
|
27
|
+
* `namzu-sandbox-worker:smoke`. Override with the
|
|
28
|
+
* `NAMZU_SANDBOX_SMOKE_IMAGE` env. Build the image once with:
|
|
29
|
+
* `docker build -t namzu-sandbox-worker:smoke -f packages/sandbox/worker/Dockerfile packages/sandbox`
|
|
30
|
+
* - A host-side scratch directory the test creates and tears down.
|
|
31
|
+
*
|
|
32
|
+
* On a developer machine without docker the test self-skips with a
|
|
33
|
+
* clear message. On CI (`process.env.CI === 'true'`) the same
|
|
34
|
+
* pre-conditions FAIL FAST instead of skipping, so a CI
|
|
35
|
+
* misconfiguration cannot silently mask a regression — see the
|
|
36
|
+
* `.github/workflows/sandbox-smoke.yml` workflow which is meant to
|
|
37
|
+
* always run with docker available.
|
|
38
|
+
*/
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=leaf-permissions.smoke.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaf-permissions.smoke.test.d.ts","sourceRoot":"","sources":["../../../../src/backends/docker/__tests__/leaf-permissions.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker smoke test — leaf-mount permission semantics.
|
|
3
|
+
*
|
|
4
|
+
* Concern Codex flagged: the Dockerfile pre-creates only the parent
|
|
5
|
+
* dirs (`/mnt`, `/mnt/user-data`, `/mnt/skills`) as root-owned 0555.
|
|
6
|
+
* The runtime claim is that:
|
|
7
|
+
*
|
|
8
|
+
* 1. When `outputs` IS bound, uid 1001 (the worker user) can write
|
|
9
|
+
* into it.
|
|
10
|
+
* 2. When a leaf path (e.g. `/mnt/user-data/uploads`) is NOT bound,
|
|
11
|
+
* the path simply does not exist — `stat` returns ENOENT, NOT
|
|
12
|
+
* a writable empty dir.
|
|
13
|
+
*
|
|
14
|
+
* Both of those are kernel-level mount-namespace properties, not
|
|
15
|
+
* unit-testable. This file exercises them against a real docker
|
|
16
|
+
* daemon. Run via:
|
|
17
|
+
*
|
|
18
|
+
* pnpm --filter @namzu/sandbox test:smoke
|
|
19
|
+
* # or, from the monorepo root:
|
|
20
|
+
* pnpm sandbox:smoke
|
|
21
|
+
*
|
|
22
|
+
* Excluded from the default `pnpm test` run by `vitest.config.ts`.
|
|
23
|
+
*
|
|
24
|
+
* Pre-requisites:
|
|
25
|
+
* - `docker` CLI on PATH.
|
|
26
|
+
* - A pre-built reference image. By default this test looks for
|
|
27
|
+
* `namzu-sandbox-worker:smoke`. Override with the
|
|
28
|
+
* `NAMZU_SANDBOX_SMOKE_IMAGE` env. Build the image once with:
|
|
29
|
+
* `docker build -t namzu-sandbox-worker:smoke -f packages/sandbox/worker/Dockerfile packages/sandbox`
|
|
30
|
+
* - A host-side scratch directory the test creates and tears down.
|
|
31
|
+
*
|
|
32
|
+
* On a developer machine without docker the test self-skips with a
|
|
33
|
+
* clear message. On CI (`process.env.CI === 'true'`) the same
|
|
34
|
+
* pre-conditions FAIL FAST instead of skipping, so a CI
|
|
35
|
+
* misconfiguration cannot silently mask a regression — see the
|
|
36
|
+
* `.github/workflows/sandbox-smoke.yml` workflow which is meant to
|
|
37
|
+
* always run with docker available.
|
|
38
|
+
*/
|
|
39
|
+
import { spawnSync } from 'node:child_process';
|
|
40
|
+
import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
41
|
+
import { tmpdir } from 'node:os';
|
|
42
|
+
import { join } from 'node:path';
|
|
43
|
+
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
44
|
+
import { createSandboxProvider } from '../../../index.js';
|
|
45
|
+
const IMAGE = process.env.NAMZU_SANDBOX_SMOKE_IMAGE ?? 'namzu-sandbox-worker:smoke';
|
|
46
|
+
const IS_CI = process.env.CI === 'true';
|
|
47
|
+
function dockerAvailable() {
|
|
48
|
+
const probe = spawnSync('docker', ['version', '--format', '{{.Server.Version}}'], {
|
|
49
|
+
stdio: 'ignore',
|
|
50
|
+
});
|
|
51
|
+
return probe.status === 0;
|
|
52
|
+
}
|
|
53
|
+
function imagePresent(image) {
|
|
54
|
+
const probe = spawnSync('docker', ['image', 'inspect', image], { stdio: 'ignore' });
|
|
55
|
+
return probe.status === 0;
|
|
56
|
+
}
|
|
57
|
+
const skipReason = !dockerAvailable()
|
|
58
|
+
? 'docker daemon not reachable — skipping smoke test'
|
|
59
|
+
: !imagePresent(IMAGE)
|
|
60
|
+
? `image ${IMAGE} not present — build it with \`docker build -t ${IMAGE} -f packages/sandbox/worker/Dockerfile packages/sandbox\` and re-run`
|
|
61
|
+
: null;
|
|
62
|
+
// CI fail-fast: the smoke workflow is meant to always have docker +
|
|
63
|
+
// the reference image. Skipping silently in that environment would
|
|
64
|
+
// let a regression land without the test even attempting to run.
|
|
65
|
+
// Locally (no `CI=true`) skipping with a hint is the right behaviour
|
|
66
|
+
// for a developer who hasn't built the image yet.
|
|
67
|
+
if (IS_CI && skipReason) {
|
|
68
|
+
throw new Error(`smoke test pre-condition not satisfied on CI: ${skipReason}. Configure the workflow to install docker and build the reference image before running.`);
|
|
69
|
+
}
|
|
70
|
+
describe.skipIf(skipReason !== null)('docker smoke — leaf permissions', () => {
|
|
71
|
+
let outputsHost;
|
|
72
|
+
beforeAll(() => {
|
|
73
|
+
outputsHost = mkdtempSync(join(tmpdir(), 'namzu-sandbox-smoke-out-'));
|
|
74
|
+
});
|
|
75
|
+
afterAll(() => {
|
|
76
|
+
if (outputsHost) {
|
|
77
|
+
rmSync(outputsHost, { recursive: true, force: true });
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
it('uid 1001 can write to the outputs bind, and the host sees the file', async () => {
|
|
81
|
+
const provider = createSandboxProvider({
|
|
82
|
+
backend: { tier: 'container', image: IMAGE },
|
|
83
|
+
layout: {
|
|
84
|
+
outputs: { source: { type: 'hostDir', hostPath: outputsHost } },
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
const sandbox = await provider.create();
|
|
88
|
+
try {
|
|
89
|
+
const result = await sandbox.exec('sh', [
|
|
90
|
+
'-c',
|
|
91
|
+
'id -u && echo "smoke" > /mnt/user-data/outputs/hello.txt',
|
|
92
|
+
]);
|
|
93
|
+
expect(result.exitCode).toBe(0);
|
|
94
|
+
expect(result.stdout.trim()).toBe('1001');
|
|
95
|
+
// Host-side read confirms the bind round-trips.
|
|
96
|
+
const hostContent = readFileSync(join(outputsHost, 'hello.txt'), 'utf8');
|
|
97
|
+
expect(hostContent.trim()).toBe('smoke');
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
await sandbox.destroy();
|
|
101
|
+
}
|
|
102
|
+
}, 60_000);
|
|
103
|
+
it('unbound leaves do not exist — uploads/transcripts/tool_results are ENOENT, not empty', async () => {
|
|
104
|
+
const provider = createSandboxProvider({
|
|
105
|
+
backend: { tier: 'container', image: IMAGE },
|
|
106
|
+
layout: {
|
|
107
|
+
outputs: { source: { type: 'hostDir', hostPath: outputsHost } },
|
|
108
|
+
// Intentionally leave uploads / toolResults / transcripts
|
|
109
|
+
// unbound. The Dockerfile pre-creates only the parents
|
|
110
|
+
// (`/mnt/user-data`, `/mnt/skills`); leaves should not
|
|
111
|
+
// exist and `stat` should fail.
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
const sandbox = await provider.create();
|
|
115
|
+
try {
|
|
116
|
+
for (const leafPath of [
|
|
117
|
+
'/mnt/user-data/uploads',
|
|
118
|
+
'/mnt/user-data/tool_results',
|
|
119
|
+
'/mnt/transcripts',
|
|
120
|
+
]) {
|
|
121
|
+
const result = await sandbox.exec('sh', ['-c', `stat ${leafPath} 2>&1; echo --rc=$?`]);
|
|
122
|
+
// `stat` returns non-zero on ENOENT; the rc line carries
|
|
123
|
+
// the failure. Either is the contract; we accept either
|
|
124
|
+
// "No such file" or "cannot stat" wording across distros.
|
|
125
|
+
expect(result.stdout).toMatch(/--rc=[1-9]/);
|
|
126
|
+
expect(result.stdout.toLowerCase()).toMatch(/no such file|cannot stat|does not exist/);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
await sandbox.destroy();
|
|
131
|
+
}
|
|
132
|
+
}, 60_000);
|
|
133
|
+
it('uid 1001 cannot mkdir into the root-owned 0555 parent /mnt/user-data', async () => {
|
|
134
|
+
const provider = createSandboxProvider({
|
|
135
|
+
backend: { tier: 'container', image: IMAGE },
|
|
136
|
+
layout: {
|
|
137
|
+
outputs: { source: { type: 'hostDir', hostPath: outputsHost } },
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
const sandbox = await provider.create();
|
|
141
|
+
try {
|
|
142
|
+
// The model trying to "create the missing leaf dir" hits
|
|
143
|
+
// the 0555 root-owned parent and is denied — exactly what
|
|
144
|
+
// distinguishes "not bound" from "writable empty dir".
|
|
145
|
+
const result = await sandbox.exec('sh', [
|
|
146
|
+
'-c',
|
|
147
|
+
'mkdir /mnt/user-data/fake 2>&1; echo --rc=$?',
|
|
148
|
+
]);
|
|
149
|
+
expect(result.stdout).toMatch(/--rc=[1-9]/);
|
|
150
|
+
expect(result.stdout.toLowerCase()).toMatch(/permission denied/);
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
await sandbox.destroy();
|
|
154
|
+
}
|
|
155
|
+
}, 60_000);
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=leaf-permissions.smoke.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaf-permissions.smoke.test.js","sourceRoot":"","sources":["../../../../src/backends/docker/__tests__/leaf-permissions.smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `container:docker` backend.
|
|
3
|
+
*
|
|
4
|
+
* Spawns one Docker container per `Sandbox` instance via the
|
|
5
|
+
* `docker` CLI (no node-docker SDK dependency — keeps the package
|
|
6
|
+
* thin). The container runs the small HTTP worker shipped under
|
|
7
|
+
* `packages/sandbox/worker/server.js`; the host adapter talks to
|
|
8
|
+
* it on `127.0.0.1:<random-port>`.
|
|
9
|
+
*
|
|
10
|
+
* One container per sandbox, not one per `exec` call: keeps cold-
|
|
11
|
+
* start out of the hot path. The container goes away in
|
|
12
|
+
* `destroy()`.
|
|
13
|
+
*
|
|
14
|
+
* Trust model:
|
|
15
|
+
* - Container is the trust boundary; everything inside is treated
|
|
16
|
+
* as untrusted code.
|
|
17
|
+
* - Worker only listens on loopback inside its own netns; the
|
|
18
|
+
* host adapter reaches it via Docker's port-forward.
|
|
19
|
+
* - Outbound network from the worker is restricted by host-side
|
|
20
|
+
* firewall config (see {@link DockerBackendConfig.network}) plus
|
|
21
|
+
* the egress proxy when one is configured (P3.2).
|
|
22
|
+
*/
|
|
23
|
+
import { type ContainerSandboxLayout, type ResolvedContainerSandboxLayout } from '@namzu/sdk';
|
|
24
|
+
import { type SandboxBackend } from '../../index.js';
|
|
25
|
+
/**
|
|
26
|
+
* Backend-specific tuning. Most hosts use the defaults; advanced
|
|
27
|
+
* deployments override `image` to point at their own pre-built
|
|
28
|
+
* image, or pin `dockerBinary` for non-standard installs.
|
|
29
|
+
*
|
|
30
|
+
* The container's mount layout is baked in at provider construction
|
|
31
|
+
* via {@link DockerBackendInternalConfig.layout} — every `create()`
|
|
32
|
+
* call inherits the same layout. This is by design: per-task hosts
|
|
33
|
+
* call `createSandboxProvider` once per task, with that task's
|
|
34
|
+
* layout. There is no per-call layout argument, so the SDK runtime
|
|
35
|
+
* cannot accidentally call a docker provider without one.
|
|
36
|
+
*/
|
|
37
|
+
export interface DockerBackendInternalConfig {
|
|
38
|
+
readonly image: string;
|
|
39
|
+
/**
|
|
40
|
+
* Pre-resolved layout. Construction-time `resolveLayout` validates
|
|
41
|
+
* and applies defaults; the docker backend renders mount flags
|
|
42
|
+
* directly from this without re-validating.
|
|
43
|
+
*/
|
|
44
|
+
readonly layout: ResolvedContainerSandboxLayout;
|
|
45
|
+
readonly dockerBinary?: string;
|
|
46
|
+
readonly network?: 'none' | 'bridge' | string;
|
|
47
|
+
readonly readyPollIntervalMs?: number;
|
|
48
|
+
readonly readyTimeoutMs?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Docker runtime to launch the container under. Default `runc`
|
|
51
|
+
* (vanilla Docker namespaces, what Docker Desktop ships). Linux
|
|
52
|
+
* production deployments that have registered gVisor on the host
|
|
53
|
+
* daemon can pass `runsc` to upgrade to a userspace-kernel trust
|
|
54
|
+
* boundary — same primitive Modal Labs and OpenAI Code Interpreter
|
|
55
|
+
* ship. Hosts can also pass a custom runtime name registered in
|
|
56
|
+
* `daemon.json`. macOS Docker Desktop has no `runsc` runtime, so
|
|
57
|
+
* the default `runc` is the only option there; that's documented
|
|
58
|
+
* as the local-dev tier in the package README.
|
|
59
|
+
*/
|
|
60
|
+
readonly runtime?: 'runc' | 'runsc' | string;
|
|
61
|
+
/**
|
|
62
|
+
* How the SDK consumer reaches the in-container worker:
|
|
63
|
+
*
|
|
64
|
+
* - `'host-port'` (default): publish the worker port on the
|
|
65
|
+
* host loopback (`127.0.0.1::<random>`) and connect by host
|
|
66
|
+
* port. Works when the SDK runs ON the docker host (CLI,
|
|
67
|
+
* direct dev). Backward-compatible — the original behaviour.
|
|
68
|
+
*
|
|
69
|
+
* - `'container-network'`: skip `--publish` entirely, attach
|
|
70
|
+
* the spawned container to a shared docker bridge that the
|
|
71
|
+
* SDK consumer is also on, and connect by container DNS name
|
|
72
|
+
* (`http://<containerName>:2024`). Required when the SDK
|
|
73
|
+
* runs INSIDE a container (e.g. Vandal's app container
|
|
74
|
+
* spawning sibling sandbox containers via the host's Docker
|
|
75
|
+
* daemon — `127.0.0.1` inside the app is the app, not the
|
|
76
|
+
* sandbox). The shared bridge name comes from `config.network`.
|
|
77
|
+
*/
|
|
78
|
+
readonly hostReachability?: 'host-port' | 'container-network';
|
|
79
|
+
/**
|
|
80
|
+
* Optional `--label key=value` pairs applied to the spawned
|
|
81
|
+
* container at `docker run` time. Used by hosts that need to
|
|
82
|
+
* find their containers from out-of-band code paths (reaper jobs,
|
|
83
|
+
* monitoring filters) via `docker ps --filter label=…`. Keys
|
|
84
|
+
* containing `=` or empty names throw at spawn time — the docker
|
|
85
|
+
* CLI accepts them but the resulting label split is ambiguous.
|
|
86
|
+
*/
|
|
87
|
+
readonly labels?: Readonly<Record<string, string>>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Build a {@link SandboxBackend} backed by Docker. Construction is
|
|
91
|
+
* synchronous; the actual container spawns on the first
|
|
92
|
+
* `create()` call.
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildDockerBackend(config: DockerBackendInternalConfig): SandboxBackend;
|
|
95
|
+
/**
|
|
96
|
+
* Validate and resolve a {@link ContainerSandboxLayout}. Returns a
|
|
97
|
+
* {@link ResolvedContainerSandboxLayout} with every container path
|
|
98
|
+
* filled in; throws {@link ContainerSandboxLayoutValidationError}
|
|
99
|
+
* collecting every violation in one pass.
|
|
100
|
+
*
|
|
101
|
+
* Called once at provider construction (`createSandboxProvider`).
|
|
102
|
+
* Validation surfaces synchronously during host wiring; nothing
|
|
103
|
+
* downstream re-validates per `provider.create()` call.
|
|
104
|
+
*
|
|
105
|
+
* Exported for tests so the validation rules are pinned by golden-
|
|
106
|
+
* value assertions rather than only exercised through the spawn path.
|
|
107
|
+
*/
|
|
108
|
+
export declare function resolveLayout(layout: ContainerSandboxLayout): ResolvedContainerSandboxLayout;
|
|
109
|
+
export declare function renderLayoutMountArgs(layout: ResolvedContainerSandboxLayout): string[];
|
|
110
|
+
export declare function renderLayoutReadRootsEnv(layout: ResolvedContainerSandboxLayout): string;
|
|
111
|
+
/**
|
|
112
|
+
* Writable container roots. Only the RW mounts go here — uploads,
|
|
113
|
+
* tool-results, transcripts, and skills are read-only and must stay
|
|
114
|
+
* out of WRITE_ROOTS or the agent's `write`/`append` could clobber
|
|
115
|
+
* source files the host considers immutable.
|
|
116
|
+
*/
|
|
117
|
+
export declare function renderLayoutWriteRootsEnv(layout: ResolvedContainerSandboxLayout): string;
|
|
118
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/docker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EACN,KAAK,sBAAsB,EAE3B,KAAK,8BAA8B,EAcnC,MAAM,YAAY,CAAA;AAEnB,OAAO,EAEN,KAAK,cAAc,EAEnB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAA;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC7C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAAA;IAC7D;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD;AAOD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,2BAA2B,GAAG,cAAc,CAQtF;AA0cD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,8BAA8B,CAmI5F;AAkCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,EAAE,CA+BtF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,CAUvF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,CAKxF"}
|