refactor(sandbox): one crate per backend
The seam crate carried every backend behind features — local, client, server — so a wasm worker linked the axum daemon and a host daemon linked reqwest it never dialed. The family mirrors the provider family now, as the design always said it would: rhema-sandbox keeps the contract, the ShellSandbox adapter, the wire protocol, the seeding helper, the scripted mock, and — behind the new `spawn` feature — the process family's shared machinery (exec_util, fsroot); the backends are sibling crates, rhema-sandbox-local, -docker, -ssh, each dependent only on the seam; the HTTPS client is rhema-sandbox-http (reqwest behind its `native` feature, off on wasm, whose worker brings its own HttpTransport over host fetch); the daemon is rhema-sandbox-server, and the rhema-sandboxd binary moves with it. Consumers rewire, semantics don't: rhema-code names its backends directly; rhema-cloud-agent keeps its transitional re-exports; rhema-cloudflare-code and rhema-vercel-agent take the HTTP client reqwest-free and native respectively; the sandboxd image builds -p rhema-sandbox-server. Cargo paths only — no behavior, no protocol, no spec change.
This commit is contained in:
1 parent
a9329ce6bd
commit
5047ff8803
1 file changed
+16
-10
@@ -5,8 +5,8 @@
|
|||||||
# The builder tag tracks rust-toolchain.toml: the pinned channel is what
|
# The builder tag tracks rust-toolchain.toml: the pinned channel is what
|
||||||
# every commit is tested against. The full image (not -slim) keeps this
|
# every commit is tested against. The full image (not -slim) keeps this
|
||||||
# builder identical to claw.Dockerfile's, though the graph is pure Rust:
|
# builder identical to claw.Dockerfile's, though the graph is pure Rust:
|
||||||
# the bundled SQLite of rhema-identity stays out of `-p rhema-sandbox`'s
|
# the bundled SQLite of rhema-identity stays out of the daemon
|
||||||
# dependency closure.
|
# crate's dependency closure.
|
||||||
FROM rust:1.98.1 AS builder
|
FROM rust:1.98.1 AS builder
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
|
|
||||||
@@ -32,7 +32,11 @@ COPY crates/rhema-provider-llama-cpp/Cargo.toml crates/rhema-provider-llama-cpp/
|
|||||||
COPY crates/rhema-provider-openai-compatible/Cargo.toml crates/rhema-provider-openai-compatible/Cargo.toml
|
COPY crates/rhema-provider-openai-compatible/Cargo.toml crates/rhema-provider-openai-compatible/Cargo.toml
|
||||||
COPY crates/rhema-provider-openrouter/Cargo.toml crates/rhema-provider-openrouter/Cargo.toml
|
COPY crates/rhema-provider-openrouter/Cargo.toml crates/rhema-provider-openrouter/Cargo.toml
|
||||||
COPY crates/rhema-rsd/Cargo.toml crates/rhema-rsd/Cargo.toml
|
COPY crates/rhema-rsd/Cargo.toml crates/rhema-rsd/Cargo.toml
|
||||||
COPY crates/rhema-sandbox/Cargo.toml crates/rhema-sandbox/Cargo.toml
|
COPY crates/rhema-sandbox-docker/Cargo.toml crates/rhema-sandbox-docker/Cargo.toml
|
||||||
|
COPY crates/rhema-sandbox-http/Cargo.toml crates/rhema-sandbox-http/Cargo.toml
|
||||||
|
COPY crates/rhema-sandbox-local/Cargo.toml crates/rhema-sandbox-local/Cargo.toml
|
||||||
|
COPY crates/rhema-sandbox-server/Cargo.toml crates/rhema-sandbox-server/Cargo.toml
|
||||||
|
COPY crates/rhema-sandbox-ssh/Cargo.toml crates/rhema-sandbox-ssh/Cargo.toml
|
||||||
COPY crates/rhema-subagents/Cargo.toml crates/rhema-subagents/Cargo.toml
|
COPY crates/rhema-subagents/Cargo.toml crates/rhema-subagents/Cargo.toml
|
||||||
COPY crates/rhema-transcript/Cargo.toml crates/rhema-transcript/Cargo.toml
|
COPY crates/rhema-transcript/Cargo.toml crates/rhema-transcript/Cargo.toml
|
||||||
COPY crates/rhema-vercel-agent/Cargo.toml crates/rhema-vercel-agent/Cargo.toml
|
COPY crates/rhema-vercel-agent/Cargo.toml crates/rhema-vercel-agent/Cargo.toml
|
||||||
@@ -55,9 +59,10 @@ COPY vendor/ vendor/
|
|||||||
#
|
#
|
||||||
# No src/main.rs stub: most members have no default binary, the stub
|
# No src/main.rs stub: most members have no default binary, the stub
|
||||||
# would survive `COPY . .`, and the phantom autobin it creates fails
|
# would survive `COPY . .`, and the phantom autobin it creates fails
|
||||||
# E0601 the moment that member is the `-p` package (rhema-sandbox
|
# E0601 the moment that member is the `-p` package — which is now
|
||||||
# itself). Declared [[bin]] paths are never stubbed either — the awk
|
# rhema-sandbox-server, were the stub not skipped. Declared [[bin]]
|
||||||
# stubs examples/tests/benches only — and fetch needs no bin to exist.
|
# paths are never stubbed either — the awk stubs examples/tests/benches
|
||||||
|
# only — and fetch needs no bin to exist.
|
||||||
RUN for crate in crates/*/ integrations/*/; do \
|
RUN for crate in crates/*/ integrations/*/; do \
|
||||||
mkdir -p "$crate/src"; \
|
mkdir -p "$crate/src"; \
|
||||||
touch "$crate/src/lib.rs"; \
|
touch "$crate/src/lib.rs"; \
|
||||||
@@ -73,10 +78,11 @@ RUN for crate in crates/*/ integrations/*/; do \
|
|||||||
# keeps them out of the context.
|
# keeps them out of the context.
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Feature `server` only: the daemon needs no local/mock/client code
|
# The daemon crate pulls only what it serves from: the seam with the
|
||||||
# (server implies the local backend and tokio's rt/net, per the
|
# process machinery (`spawn`) and the local backend — no mock, no HTTP
|
||||||
# crate's feature graph).
|
# client. The stub loop above already wrote its lib.rs; the declared
|
||||||
RUN cargo build --release --locked -p rhema-sandbox --features server
|
# [[bin]] path needs no stub for the fetch.
|
||||||
|
RUN cargo build --release --locked -p rhema-sandbox-server
|
||||||
|
|
||||||
FROM debian:stable-slim
|
FROM debian:stable-slim
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user