Summary
Add a new sandbox provider package, @tanstack/ai-sandbox-upstash-box, so harness adapters can run inside isolated Upstash Box cloud sandboxes through the uniform SandboxHandle — alongside the existing Docker / Daytona / Vercel / Cloudflare / Sprites providers.
Motivation
Upstash Box is a cloud sandbox with a feature set close to Daytona (create → exec → fs → preview URLs → destroy) plus native snapshots. Adding it as a provider gives users another managed backend for running coding-agent harnesses, with first-class snapshot/restore.
Scope
SandboxProvider + SandboxHandle implemented over the @upstash/box SDK.
fs via Box's native file API (+ shell for mkdir/remove/rename/exists); virtual /workspace ↔ Box /workspace/home path mapping.
exec and streamed spawn (via exec.stream) with shell-wrapped cwd/env; writableStdin: false (Daytona parity).
ports.connect via getPublicURL; native snapshots (box.snapshot() / Box.fromSnapshot()) + restoreSnapshot.
- Unit tests (mocked Box), gated integration tests (
UPSTASH_BOX_API_KEY), README, changeset, and the central provider-list row in @tanstack/ai-sandbox.
Notes / limitations
backgroundProcesses: true but writableStdin: false — stdin-driven harnesses (Codex/Gemini ACP) must deliver the prompt via a file + shell redirection, same as Daytona.
fork and networkPolicy unsupported in v1.
Summary
Add a new sandbox provider package,
@tanstack/ai-sandbox-upstash-box, so harness adapters can run inside isolated Upstash Box cloud sandboxes through the uniformSandboxHandle— alongside the existing Docker / Daytona / Vercel / Cloudflare / Sprites providers.Motivation
Upstash Box is a cloud sandbox with a feature set close to Daytona (create → exec → fs → preview URLs → destroy) plus native snapshots. Adding it as a provider gives users another managed backend for running coding-agent harnesses, with first-class snapshot/restore.
Scope
SandboxProvider+SandboxHandleimplemented over the@upstash/boxSDK.fsvia Box's native file API (+ shell for mkdir/remove/rename/exists); virtual/workspace↔ Box/workspace/homepath mapping.execand streamedspawn(viaexec.stream) with shell-wrapped cwd/env;writableStdin: false(Daytona parity).ports.connectviagetPublicURL; native snapshots (box.snapshot()/Box.fromSnapshot()) +restoreSnapshot.UPSTASH_BOX_API_KEY), README, changeset, and the central provider-list row in@tanstack/ai-sandbox.Notes / limitations
backgroundProcesses: truebutwritableStdin: false— stdin-driven harnesses (Codex/Gemini ACP) must deliver the prompt via a file + shell redirection, same as Daytona.forkandnetworkPolicyunsupported in v1.