You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+32-29Lines changed: 32 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,13 +53,13 @@ a3s-box run --rm alpine:latest -- uname -a
53
53
a3s-box run --rm --isolation sandbox alpine:latest -- id
54
54
```
55
55
56
-
### E2B-compatible Python and TypeScript SDKs
56
+
### A3S SDKs with E2B-compatible APIs
57
57
58
-
The A3S Python and TypeScript packages re-export the pinned official E2B
59
-
objects and add typed A3S endpoint configuration. Applications keep the
60
-
familiar `Sandbox`, `AsyncSandbox`, Commands, Filesystem, PTY, and Code
61
-
Interpreter surfaces while `a3s-box-e2b` owns the remote runtime and isolation
62
-
policy. No E2B-hosted service is involved.
58
+
A3S Box implements the remote runtime and protocol service. The A3S Python and
59
+
TypeScript packages re-export the pinned official E2B objects and add typed A3S
60
+
endpoint configuration, so applications keep the familiar `Sandbox`,
61
+
`AsyncSandbox`, Commands, Filesystem, PTY, and Code Interpreter surfaces. No
62
+
E2B-hosted service is involved.
63
63
64
64
Point the native SDK at the deployed A3S Box service. A conventional
65
65
`https://api.<domain>` endpoint automatically derives `<domain>` for Sandbox
@@ -74,8 +74,10 @@ Set `A3S_BOX_DOMAIN` only when the control endpoint does not follow the
74
74
conventional `api.<domain>` form. The service advertises the direct Sandbox
75
75
authority, including a non-standard public TLS port, so normal deployments do
76
76
not need a client-side Sandbox URL override. `A3S_BOX_SANDBOX_URL` remains a
77
-
single-Sandbox fixture escape hatch. The `E2B_*` variables are needed only
78
-
when an unchanged official E2B SDK is used directly for protocol compatibility.
77
+
single-Sandbox fixture escape hatch. `E2B_API_URL` is not an A3S SDK setting.
78
+
It is used only when an unchanged official E2B SDK is connected directly to
79
+
A3S Box, because that is the endpoint variable exposed by the official client;
80
+
its value still points to A3S Box.
79
81
80
82
Python uses async lifecycle management so the remote Sandbox is always cleaned
81
83
up:
@@ -120,10 +122,10 @@ try {
120
122
}
121
123
```
122
124
123
-
Both packages are source-tree previews until the complete official and native
124
-
client matrix passes and the packages are published. The current verified
125
-
surface and remaining compatibility gates are stated under
126
-
[SDKs and Compatibility](#sdks-and-compatibility).
125
+
Both packages pass the production matrix described below. The release workflow
126
+
builds wheel and npm tarball artifacts, but the packages are not yet published
127
+
to PyPI or npm. The verified subset and remaining full-compatibility gates are
128
+
stated under [SDKs and Compatibility](#sdks-and-compatibility).
127
129
128
130
## Features
129
131
@@ -146,8 +148,8 @@ surface and remaining compatibility gates are stated under
146
148
resource and syscall controls, audit records, AMD SEV-SNP-oriented
147
149
attestation, RA-TLS, sealing, and secret injection
148
150
-**Typed SDKs and protocols**: Direct runtime-backed Rust management APIs,
149
-
an optional programmable pipeline runner, and an E2B protocol compatibility
150
-
preview with official-client fixtures plus Python and TypeScript source packages
151
+
an optional programmable pipeline runner, and a production-tested E2B
152
+
protocol subset with Python and TypeScript packages
151
153
-**Operations and cluster integration**: Structured logs, stats, events,
152
154
Prometheus endpoints, health monitoring, CRI, and containerd RuntimeClass
153
155
@@ -164,7 +166,7 @@ surface and remaining compatibility gates are stated under
164
166
| Networking and Compose | TSI, bridge networks, TCP publishing, peer discovery, and Compose lifecycle/config/logs | Implemented subset for MicroVM workloads. UDP publishing, host-IP binds, ranges, and live network hot-plug are not implemented. |
165
167
| Warm pool and snapshot-fork | Pre-booted MicroVMs, one-shot runs, build leases, metrics, and CoW memory restore | Implemented. Native snapshot-fork is Linux/KVM-only and disabled by default. |
166
168
| Rust SDK | Typed, direct runtime-backed management and guest-control APIs | Implemented in `a3s-box-sdk`. The optional `pipeline-cli` feature retains the CLI-driven programmable pipeline. |
167
-
| E2B protocol and language SDKs | Pinned contracts, durable lifecycle, TLS routing, runtime envd initialization, foreground Process commands, and core Filesystem operations | Preview only. Production evidence covers lifecycle and foreground commands across the pinned base clients, plus environment propagation and core Filesystem operations through the official Python sync client. Concurrent Process/PTY, the extended async Python and TypeScript matrix, Code Interpreter execution, MCP, signed files, and full unchanged-client conformance remain release gates. Python/npm packages are not published. |
169
+
| E2B protocol and language SDKs | Pinned contracts, durable lifecycle, TLS routing, envd initialization, Filesystem, foreground/background Process, stdin, PTY, and Python Code Interpreter contexts |Production-tested preview subset on A3S OS with certified `crun`: pinned official Python sync/async and TypeScript clients, plus A3S Python sync/async and TypeScript packages, pass the same matrix. Templates, snapshots, volumes, signed files, public-port breadth, MCP, cancellation/backpressure, and the rest of the pinned contract remain gates; `full_compatibility=false`. PyPI/npm publication is also pending. |
168
170
| TEE | SEV-SNP-oriented attestation, RA-TLS, sealing, secret injection, and simulation | Host-specific. Hardware claims require a supported SEV-SNP host and real attestation evidence. Simulation is development-only; TDX is not productized. |
169
171
| Kubernetes | CRI server plus a containerd runtime-v2 shim and `runtimeClassName: a3s-box`| Preview. Core lifecycle, streaming, logs, resources, and RuntimeClass paths exist; complete CRI conformance is not claimed. |
170
172
| Windows | Native x86_64 WHPX/libkrun code paths | Integration surface requiring host-specific validation. Current standard release automation focuses on Linux and macOS; Windows CRI is out of scope. |
@@ -519,7 +521,7 @@ The historical programmable CI pipeline remains behind the optional
519
521
yet exposed by its pipeline abstraction. See
520
522
[the SDK README](src/sdk/README.md) for the current API coverage.
521
523
522
-
### E2B protocol preview
524
+
### E2B-compatible protocol preview
523
525
524
526
A3S Box pins the public control, envd, volume-content, Process, Filesystem, MCP,
525
527
Python, TypeScript, and Code Interpreter contracts under
@@ -535,18 +537,18 @@ The current pin targets:
535
537
| Python `e2b-code-interpreter`| 2.8.1 |
536
538
| TypeScript `@e2b/code-interpreter`| 2.6.1 |
537
539
538
-
Current implementation evidence is intentionally narrower than full
540
+
The production-tested subset remains intentionally narrower than full
539
541
compatibility:
540
542
541
543
| Surface | Implemented preview | Not yet a release claim |
542
544
| --- | --- | --- |
543
-
| Control plane | Owner-scoped create, connect, get, list, timeout replacement, and kill with SQLite WAL persistence and reconciliation| Complete template, snapshot, volume, metrics, pagination, and recovery semantics|
544
-
| Credentials and routing | PBKDF2 account-key hashes, encrypted scope-bound Sandbox tokens, generation-fenced leases, wildcard TLS, direct/shared routes, CORS, and PID-fenced Sandbox network access |Complete certificate rotation and every streaming/upgrade/public-port route |
545
-
| envd | Authenticated `GET /health` has running and terminal behavior. Runtime templates receive a fail-closed `POST /init` with the lifecycle ID, merged environment, timestamp, and default user before create succeeds. |`/metrics`, `/envs`, HTTP file transfer, volume-content endpoints, and the complete envd semantic matrix |
546
-
| Process | Start/connect/list/input/close/SIGKILL and PTY primitives exist. Pinned Python sync/async and TypeScript clients pass a foreground non-PTY command on production; the extended Python sync path also proves environment propagation and background Start. | Concurrent streaming plus unary Process calls, full signals, binary framing, stdin/close completion, PTY, reconnect, cancellation, ordering, and backpressure|
547
-
| Filesystem |Runtime-backed remove, make-directory, write, read, stat, list, rename, exists, and cleanup operations pass through the production TLS route with the pinned official Python sync client. | Async Python and TypeScript evidence, watch and edge-case semantics, signed URLs, and HTTP file transfer |
548
-
| Code Interpreter and MCP |Contracts, generated inventories, official package artifacts, and black-box fixtures are pinned. | Code execution, context lifecycle, rich results, MCP execution, and the complete unchanged-client matrix|
549
-
| Python and TypeScript packages | Typed source packages re-export the pinned official SDK surfaces, add endpoint configuration helpers, and are included in the native-package production harness. | PyPI/npm publication and a passing complete native-package conformance matrix|
545
+
| Control plane | Owner-scoped create, connect, get, list, timeout replacement, and kill with SQLite WAL persistence, restart reconciliation, and cleanup | Template, snapshot, volume, metrics, full pagination/recovery semantics, and cold-start lifetime handling tracked by #112|
546
+
| Credentials and routing | PBKDF2 account-key hashes, encrypted scope-bound Sandbox tokens, generation-fenced leases, wildcard TLS, direct/shared routes, CORS, HTTP/2, and PID-fenced Sandbox access |Certificate rotation and the complete streaming, upgrade, signed-file, and public-port route matrix|
547
+
| envd | Authenticated running/terminal health plus fail-closed runtime initialization with lifecycle ID, environment, timestamp, and default user |`/metrics`, `/envs`, HTTP content transfer, volume-content endpoints, and the remaining envd semantic matrix |
548
+
| Process and PTY | Official and A3S Python sync/async and TypeScript clients pass foreground and background commands, list, stdin send/close, wait, PTY create/resize/input/wait, and ordered output on real Sandboxes | Additional signals, binary framing, reconnect, cancellation, backpressure, and adversarial concurrent-stream coverage|
549
+
| Filesystem |The same six clients pass remove, make-directory, write, read, stat, list, rename, exists, and cleanup through production TLS routing | Watch, multi-file and ownership edge cases, signed URLs, HTTP content transfer, and negative-path breadth|
550
+
| Code Interpreter and MCP |Official and A3S Python sync/async and TypeScript clients execute Python, validate stdout/results, and pass context create/list/run/restart/remove | Other languages, rich MIME/error/cancellation breadth, MCP execution, and the rest of the pinned interpreter contract|
551
+
| Python and TypeScript packages | Typed packages re-export the pinned official surfaces, use `A3S_BOX_*` connection configuration, and pass the production matrix with all `E2B_*` connection variables removed | PyPI/npm publication and conformance for the unimplemented protocol surfaces above|
550
552
551
553
The production `a3s-box-e2b` process accepts only `.acl` configuration parsed
552
554
by `a3s-acl`. For runtime-envd templates, create does not become visible until
0 commit comments