feat(computer): add Daytona cloud sandbox provider and unify computer gateway - #57
feat(computer): add Daytona cloud sandbox provider and unify computer gateway#57mu-hashmi wants to merge 8 commits into
Conversation
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
Signed-off-by: Muhammad Hashmi <mhashmi@berkeley.edu>
|
Closing this, with thanks — the part we wanted is already in. The provider seam from this work is on The Daytona backend itself we took out deliberately rather than by oversight, so it is not sitting in another branch waiting — that decision is why there is nothing matching If you want to take the seam further, the interesting question now is isolation rather than another provider: code a model wrote, on a computer shared between Bots, is not contained by the container it runs in. A per-Bot backend with gVisor or a microVM under it is the shape that matters, and the seam you built is where it plugs in. |
Summary
This change adds support for Daytona cloud sandboxes to OpenBot. Each Bot can now run in its own isolated cloud container with Chromium, Playwright, and bash access.
This change also refactors the computer subsystem into three clear layers:
server/src/computer/provider.tsdefines theComputerProviderinterface (locate,status,stop,reset,list,warm) for Daytona, Docker supervisor, and shared environments.server/src/computer/daytona.tsimplements the Daytona cloud backend. It builds container snapshots fromagent-computer/, manages sandbox lifecycles, and resolves preview URLs.server/src/computer/gateway.tsconsolidates governance into a single module. It resolves element references before policy evaluation, enforces Common Expression Language (CEL) rules, writes audit events, and manages human takeover.server/src/computer/client.tsoperates as a pure HTTP transport client without lifecycle logic.Key Decisions
runLifecycle) serializes locate, stop, and reset operations per Bot ID. This prevents concurrent creation races during rapid requests.agent-computer/directory. It reuses existing snapshots when the hash matches.COMPUTER_TOKENwheneverDAYTONA_API_KEYis present. It also rejects configurations that set bothDAYTONA_API_KEYandCOMPUTER_SUPERVISOR_URL.Limitations
Verification
Ran the test suite in
server/:bun test tests/computer* tests/config*