mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-15 04:03:31 +00:00
Add support for configuring base images across all compute providers: - E2B: Accept optional `template` parameter to select custom templates - Modal: Accept optional `image` parameter (string or Image object) for base images - ComputeSDK: Expand `create` override to accept full CreateSandboxOptions payload (image, templateId, etc.) - Daytona: Improve type safety for `image` option Improve forward compatibility by making all `create` overrides accept full Partial SDK types, allowing any new provider fields to flow through without code changes. Fix Modal provider bug where `encryptedPorts` was hardcoded and would clobber user-provided values; now merges additional ports instead. Update docs and examples to demonstrate base image configuration for E2B, Modal, and ComputeSDK. Add comprehensive provider lifecycle tests for Modal and ComputeSDK, including template and image passthrough verification. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
81 lines
2.8 KiB
Text
81 lines
2.8 KiB
Text
---
|
|
title: "ComputeSDK"
|
|
description: "Deploy Sandbox Agent using ComputeSDK's provider-agnostic sandbox API."
|
|
---
|
|
|
|
[ComputeSDK](https://computesdk.com) provides a unified interface for managing sandboxes across multiple providers. Write once, deploy anywhere by changing environment variables.
|
|
|
|
## Prerequisites
|
|
|
|
- `COMPUTESDK_API_KEY` from [console.computesdk.com](https://console.computesdk.com)
|
|
- Provider API key (one of: `E2B_API_KEY`, `DAYTONA_API_KEY`, `VERCEL_TOKEN`, `MODAL_TOKEN_ID` + `MODAL_TOKEN_SECRET`, `BLAXEL_API_KEY`, `CSB_API_KEY`)
|
|
- `ANTHROPIC_API_KEY` or `OPENAI_API_KEY`
|
|
|
|
## TypeScript example
|
|
|
|
```bash
|
|
npm install sandbox-agent@0.3.x computesdk
|
|
```
|
|
|
|
```typescript
|
|
import { SandboxAgent } from "sandbox-agent";
|
|
import { computesdk } from "sandbox-agent/computesdk";
|
|
|
|
const envs: Record<string, string> = {};
|
|
if (process.env.ANTHROPIC_API_KEY) envs.ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
|
|
if (process.env.OPENAI_API_KEY) envs.OPENAI_API_KEY = process.env.OPENAI_API_KEY;
|
|
|
|
const sdk = await SandboxAgent.start({
|
|
sandbox: computesdk({
|
|
create: {
|
|
envs,
|
|
image: process.env.COMPUTESDK_IMAGE,
|
|
templateId: process.env.COMPUTESDK_TEMPLATE_ID,
|
|
},
|
|
}),
|
|
});
|
|
|
|
try {
|
|
const session = await sdk.createSession({ agent: "claude" });
|
|
const response = await session.prompt([
|
|
{ type: "text", text: "Summarize this repository" },
|
|
]);
|
|
console.log(response.stopReason);
|
|
} finally {
|
|
await sdk.destroySandbox();
|
|
}
|
|
```
|
|
|
|
The `computesdk` provider handles sandbox creation, Sandbox Agent installation, agent setup, and server startup automatically. ComputeSDK routes to your configured provider behind the scenes.
|
|
The `create` option now forwards the full ComputeSDK sandbox-create payload, including provider-specific fields such as `image` and `templateId` when the selected provider supports them.
|
|
|
|
Before calling `SandboxAgent.start()`, configure ComputeSDK with your provider:
|
|
|
|
```typescript
|
|
import { compute } from "computesdk";
|
|
|
|
compute.setConfig({
|
|
provider: "e2b", // or auto-detect via detectProvider()
|
|
computesdkApiKey: process.env.COMPUTESDK_API_KEY,
|
|
});
|
|
```
|
|
|
|
## Supported providers
|
|
|
|
ComputeSDK auto-detects your provider from environment variables:
|
|
|
|
| Provider | Environment Variables |
|
|
|----------|----------------------|
|
|
| E2B | `E2B_API_KEY` |
|
|
| Daytona | `DAYTONA_API_KEY` |
|
|
| Vercel | `VERCEL_TOKEN` or `VERCEL_OIDC_TOKEN` |
|
|
| Modal | `MODAL_TOKEN_ID` + `MODAL_TOKEN_SECRET` |
|
|
| Blaxel | `BLAXEL_API_KEY` |
|
|
| CodeSandbox | `CSB_API_KEY` |
|
|
|
|
## Notes
|
|
|
|
- **Provider resolution**: Set `COMPUTESDK_PROVIDER` to force a specific provider, or let ComputeSDK auto-detect from API keys.
|
|
- `sandbox.runCommand(..., { background: true })` keeps the server running while your app continues.
|
|
- `sandbox.getUrl({ port })` returns a public URL for the sandbox port.
|
|
- Always destroy the sandbox when done to avoid leaking resources.
|