sandbox-agent 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/chunk-7BNDCDDU.js +18 -0
  2. package/dist/chunk-7BNDCDDU.js.map +1 -0
  3. package/dist/chunk-TVCDKGSM.js +3029 -0
  4. package/dist/chunk-TVCDKGSM.js.map +1 -0
  5. package/dist/index.d.ts +1674 -144
  6. package/dist/index.js +17 -2353
  7. package/dist/index.js.map +1 -1
  8. package/dist/providers/cloudflare.d.ts +1 -1
  9. package/dist/providers/cloudflare.js +1 -0
  10. package/dist/providers/cloudflare.js.map +1 -1
  11. package/dist/providers/computesdk.d.ts +4 -4
  12. package/dist/providers/computesdk.js +9 -3
  13. package/dist/providers/computesdk.js.map +1 -1
  14. package/dist/providers/daytona.d.ts +3 -2
  15. package/dist/providers/daytona.js +4 -1
  16. package/dist/providers/daytona.js.map +1 -1
  17. package/dist/providers/docker.d.ts +1 -1
  18. package/dist/providers/docker.js +2 -1
  19. package/dist/providers/docker.js.map +1 -1
  20. package/dist/providers/e2b.d.ts +10 -3
  21. package/dist/providers/e2b.js +55 -10
  22. package/dist/providers/e2b.js.map +1 -1
  23. package/dist/providers/local.d.ts +1 -1
  24. package/dist/providers/modal.d.ts +9 -6
  25. package/dist/providers/modal.js +20 -14
  26. package/dist/providers/modal.js.map +1 -1
  27. package/dist/providers/sprites.d.ts +22 -0
  28. package/dist/providers/sprites.js +209 -0
  29. package/dist/providers/sprites.js.map +1 -0
  30. package/dist/providers/vercel.d.ts +1 -1
  31. package/dist/providers/vercel.js +2 -1
  32. package/dist/providers/vercel.js.map +1 -1
  33. package/dist/{types-DLlJOfyX.d.ts → types-DdcvY5CI.d.ts} +22 -0
  34. package/package.json +13 -4
  35. package/dist/chunk-TWTMX66J.js +0 -15
  36. package/dist/chunk-TWTMX66J.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/vercel.ts"],"sourcesContent":["import { Sandbox } from \"@vercel/sandbox\";\nimport type { SandboxProvider } from \"./types.ts\";\nimport { DEFAULT_AGENTS, SANDBOX_AGENT_INSTALL_SCRIPT } from \"./shared.ts\";\n\nconst DEFAULT_AGENT_PORT = 3000;\n\nexport interface VercelProviderOptions {\n create?: Record<string, unknown> | (() => Record<string, unknown> | Promise<Record<string, unknown>>);\n agentPort?: number;\n}\n\nasync function resolveCreateOptions(value: VercelProviderOptions[\"create\"], agentPort: number): Promise<Record<string, unknown>> {\n const resolved = typeof value === \"function\" ? await value() : (value ?? {});\n return {\n ports: [agentPort],\n ...resolved,\n };\n}\n\nasync function runVercelCommand(sandbox: InstanceType<typeof Sandbox>, cmd: string, args: string[] = []): Promise<void> {\n const result = await sandbox.runCommand({ cmd, args });\n if (result.exitCode !== 0) {\n const stderr = await result.stderr();\n throw new Error(`vercel command failed: ${cmd} ${args.join(\" \")}\\n${stderr}`);\n }\n}\n\nexport function vercel(options: VercelProviderOptions = {}): SandboxProvider {\n const agentPort = options.agentPort ?? DEFAULT_AGENT_PORT;\n\n return {\n name: \"vercel\",\n async create(): Promise<string> {\n const sandbox = await Sandbox.create((await resolveCreateOptions(options.create, agentPort)) as Parameters<typeof Sandbox.create>[0]);\n\n await runVercelCommand(sandbox, \"sh\", [\"-c\", `curl -fsSL ${SANDBOX_AGENT_INSTALL_SCRIPT} | sh`]);\n for (const agent of DEFAULT_AGENTS) {\n await runVercelCommand(sandbox, \"sandbox-agent\", [\"install-agent\", agent]);\n }\n await sandbox.runCommand({\n cmd: \"sandbox-agent\",\n args: [\"server\", \"--no-token\", \"--host\", \"0.0.0.0\", \"--port\", String(agentPort)],\n detached: true,\n });\n\n return sandbox.sandboxId;\n },\n async destroy(sandboxId: string): Promise<void> {\n const sandbox = await Sandbox.get({ sandboxId });\n await sandbox.stop();\n },\n async getUrl(sandboxId: string): Promise<string> {\n const sandbox = await Sandbox.get({ sandboxId });\n return sandbox.domain(agentPort);\n },\n async ensureServer(sandboxId: string): Promise<void> {\n const sandbox = await Sandbox.get({ sandboxId });\n await sandbox.runCommand({\n cmd: \"sandbox-agent\",\n args: [\"server\", \"--no-token\", \"--host\", \"0.0.0.0\", \"--port\", String(agentPort)],\n detached: true,\n });\n },\n };\n}\n"],"mappings":";;;;;;AAAA,SAAS,eAAe;AAIxB,IAAM,qBAAqB;AAO3B,eAAe,qBAAqB,OAAwC,WAAqD;AAC/H,QAAM,WAAW,OAAO,UAAU,aAAa,MAAM,MAAM,IAAK,SAAS,CAAC;AAC1E,SAAO;AAAA,IACL,OAAO,CAAC,SAAS;AAAA,IACjB,GAAG;AAAA,EACL;AACF;AAEA,eAAe,iBAAiB,SAAuC,KAAa,OAAiB,CAAC,GAAkB;AACtH,QAAM,SAAS,MAAM,QAAQ,WAAW,EAAE,KAAK,KAAK,CAAC;AACrD,MAAI,OAAO,aAAa,GAAG;AACzB,UAAM,SAAS,MAAM,OAAO,OAAO;AACnC,UAAM,IAAI,MAAM,0BAA0B,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EAAK,MAAM,EAAE;AAAA,EAC9E;AACF;AAEO,SAAS,OAAO,UAAiC,CAAC,GAAoB;AAC3E,QAAM,YAAY,QAAQ,aAAa;AAEvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,SAA0B;AAC9B,YAAM,UAAU,MAAM,QAAQ,OAAQ,MAAM,qBAAqB,QAAQ,QAAQ,SAAS,CAA0C;AAEpI,YAAM,iBAAiB,SAAS,MAAM,CAAC,MAAM,cAAc,4BAA4B,OAAO,CAAC;AAC/F,iBAAW,SAAS,gBAAgB;AAClC,cAAM,iBAAiB,SAAS,iBAAiB,CAAC,iBAAiB,KAAK,CAAC;AAAA,MAC3E;AACA,YAAM,QAAQ,WAAW;AAAA,QACvB,KAAK;AAAA,QACL,MAAM,CAAC,UAAU,cAAc,UAAU,WAAW,UAAU,OAAO,SAAS,CAAC;AAAA,QAC/E,UAAU;AAAA,MACZ,CAAC;AAED,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,QAAQ,WAAkC;AAC9C,YAAM,UAAU,MAAM,QAAQ,IAAI,EAAE,UAAU,CAAC;AAC/C,YAAM,QAAQ,KAAK;AAAA,IACrB;AAAA,IACA,MAAM,OAAO,WAAoC;AAC/C,YAAM,UAAU,MAAM,QAAQ,IAAI,EAAE,UAAU,CAAC;AAC/C,aAAO,QAAQ,OAAO,SAAS;AAAA,IACjC;AAAA,IACA,MAAM,aAAa,WAAkC;AACnD,YAAM,UAAU,MAAM,QAAQ,IAAI,EAAE,UAAU,CAAC;AAC/C,YAAM,QAAQ,WAAW;AAAA,QACvB,KAAK;AAAA,QACL,MAAM,CAAC,UAAU,cAAc,UAAU,WAAW,UAAU,OAAO,SAAS,CAAC;AAAA,QAC/E,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/providers/vercel.ts"],"sourcesContent":["import { Sandbox } from \"@vercel/sandbox\";\nimport type { SandboxProvider } from \"./types.ts\";\nimport { DEFAULT_AGENTS, SANDBOX_AGENT_INSTALL_SCRIPT } from \"./shared.ts\";\n\nconst DEFAULT_AGENT_PORT = 3000;\n\nexport interface VercelProviderOptions {\n create?: Record<string, unknown> | (() => Record<string, unknown> | Promise<Record<string, unknown>>);\n agentPort?: number;\n}\n\nasync function resolveCreateOptions(value: VercelProviderOptions[\"create\"], agentPort: number): Promise<Record<string, unknown>> {\n const resolved = typeof value === \"function\" ? await value() : (value ?? {});\n return {\n ports: [agentPort],\n ...resolved,\n };\n}\n\nasync function runVercelCommand(sandbox: InstanceType<typeof Sandbox>, cmd: string, args: string[] = []): Promise<void> {\n const result = await sandbox.runCommand({ cmd, args });\n if (result.exitCode !== 0) {\n const stderr = await result.stderr();\n throw new Error(`vercel command failed: ${cmd} ${args.join(\" \")}\\n${stderr}`);\n }\n}\n\nexport function vercel(options: VercelProviderOptions = {}): SandboxProvider {\n const agentPort = options.agentPort ?? DEFAULT_AGENT_PORT;\n\n return {\n name: \"vercel\",\n defaultCwd: \"/home/vercel-sandbox\",\n async create(): Promise<string> {\n const sandbox = await Sandbox.create((await resolveCreateOptions(options.create, agentPort)) as Parameters<typeof Sandbox.create>[0]);\n\n await runVercelCommand(sandbox, \"sh\", [\"-c\", `curl -fsSL ${SANDBOX_AGENT_INSTALL_SCRIPT} | sh`]);\n for (const agent of DEFAULT_AGENTS) {\n await runVercelCommand(sandbox, \"sandbox-agent\", [\"install-agent\", agent]);\n }\n await sandbox.runCommand({\n cmd: \"sandbox-agent\",\n args: [\"server\", \"--no-token\", \"--host\", \"0.0.0.0\", \"--port\", String(agentPort)],\n detached: true,\n });\n\n return sandbox.sandboxId;\n },\n async destroy(sandboxId: string): Promise<void> {\n const sandbox = await Sandbox.get({ sandboxId });\n await sandbox.stop();\n },\n async getUrl(sandboxId: string): Promise<string> {\n const sandbox = await Sandbox.get({ sandboxId });\n return sandbox.domain(agentPort);\n },\n async ensureServer(sandboxId: string): Promise<void> {\n const sandbox = await Sandbox.get({ sandboxId });\n await sandbox.runCommand({\n cmd: \"sandbox-agent\",\n args: [\"server\", \"--no-token\", \"--host\", \"0.0.0.0\", \"--port\", String(agentPort)],\n detached: true,\n });\n },\n };\n}\n"],"mappings":";;;;;;AAAA,SAAS,eAAe;AAIxB,IAAM,qBAAqB;AAO3B,eAAe,qBAAqB,OAAwC,WAAqD;AAC/H,QAAM,WAAW,OAAO,UAAU,aAAa,MAAM,MAAM,IAAK,SAAS,CAAC;AAC1E,SAAO;AAAA,IACL,OAAO,CAAC,SAAS;AAAA,IACjB,GAAG;AAAA,EACL;AACF;AAEA,eAAe,iBAAiB,SAAuC,KAAa,OAAiB,CAAC,GAAkB;AACtH,QAAM,SAAS,MAAM,QAAQ,WAAW,EAAE,KAAK,KAAK,CAAC;AACrD,MAAI,OAAO,aAAa,GAAG;AACzB,UAAM,SAAS,MAAM,OAAO,OAAO;AACnC,UAAM,IAAI,MAAM,0BAA0B,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,EAAK,MAAM,EAAE;AAAA,EAC9E;AACF;AAEO,SAAS,OAAO,UAAiC,CAAC,GAAoB;AAC3E,QAAM,YAAY,QAAQ,aAAa;AAEvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,MAAM,SAA0B;AAC9B,YAAM,UAAU,MAAM,QAAQ,OAAQ,MAAM,qBAAqB,QAAQ,QAAQ,SAAS,CAA0C;AAEpI,YAAM,iBAAiB,SAAS,MAAM,CAAC,MAAM,cAAc,4BAA4B,OAAO,CAAC;AAC/F,iBAAW,SAAS,gBAAgB;AAClC,cAAM,iBAAiB,SAAS,iBAAiB,CAAC,iBAAiB,KAAK,CAAC;AAAA,MAC3E;AACA,YAAM,QAAQ,WAAW;AAAA,QACvB,KAAK;AAAA,QACL,MAAM,CAAC,UAAU,cAAc,UAAU,WAAW,UAAU,OAAO,SAAS,CAAC;AAAA,QAC/E,UAAU;AAAA,MACZ,CAAC;AAED,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,QAAQ,WAAkC;AAC9C,YAAM,UAAU,MAAM,QAAQ,IAAI,EAAE,UAAU,CAAC;AAC/C,YAAM,QAAQ,KAAK;AAAA,IACrB;AAAA,IACA,MAAM,OAAO,WAAoC;AAC/C,YAAM,UAAU,MAAM,QAAQ,IAAI,EAAE,UAAU,CAAC;AAC/C,aAAO,QAAQ,OAAO,SAAS;AAAA,IACjC;AAAA,IACA,MAAM,aAAa,WAAkC;AACnD,YAAM,UAAU,MAAM,QAAQ,IAAI,EAAE,UAAU,CAAC;AAC/C,YAAM,QAAQ,WAAW;AAAA,QACvB,KAAK;AAAA,QACL,MAAM,CAAC,UAAU,cAAc,UAAU,WAAW,UAAU,OAAO,SAAS,CAAC;AAAA,QAC/E,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -5,6 +5,22 @@ interface SandboxProvider {
5
5
  create(): Promise<string>;
6
6
  /** Permanently tear down a sandbox. */
7
7
  destroy(sandboxId: string): Promise<void>;
8
+ /**
9
+ * Reconnect to an existing sandbox before the SDK attempts health checks.
10
+ * Providers can use this to resume paused sandboxes or surface provider-specific
11
+ * reconnect errors.
12
+ */
13
+ reconnect?(sandboxId: string): Promise<void>;
14
+ /**
15
+ * Gracefully stop or pause a sandbox without permanently deleting it.
16
+ * When omitted, callers should fall back to `destroy()`.
17
+ */
18
+ pause?(sandboxId: string): Promise<void>;
19
+ /**
20
+ * Permanently delete a sandbox. When omitted, callers should fall back to
21
+ * `destroy()`.
22
+ */
23
+ kill?(sandboxId: string): Promise<void>;
8
24
  /**
9
25
  * Return the sandbox-agent base URL for this sandbox.
10
26
  * Providers that cannot expose a URL should implement `getFetch()` instead.
@@ -23,6 +39,12 @@ interface SandboxProvider {
23
39
  * (e.g. the duplicate process exits on port conflict).
24
40
  */
25
41
  ensureServer?(sandboxId: string): Promise<void>;
42
+ /**
43
+ * Default working directory for sessions when the caller does not specify
44
+ * one. Remote providers should set this to a path that exists inside the
45
+ * sandbox (e.g. '/home/user'). When omitted, falls back to process.cwd().
46
+ */
47
+ defaultCwd?: string;
26
48
  }
27
49
 
28
50
  export type { SandboxProvider as S };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sandbox-agent",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Universal API for automatic coding agents in sandboxes. Supports Claude Code, Codex, OpenCode, and Amp.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -46,12 +46,17 @@
46
46
  "./computesdk": {
47
47
  "types": "./dist/providers/computesdk.d.ts",
48
48
  "import": "./dist/providers/computesdk.js"
49
+ },
50
+ "./sprites": {
51
+ "types": "./dist/providers/sprites.d.ts",
52
+ "import": "./dist/providers/sprites.js"
49
53
  }
50
54
  },
51
55
  "peerDependencies": {
52
56
  "@cloudflare/sandbox": ">=0.1.0",
53
57
  "@daytonaio/sdk": ">=0.12.0",
54
58
  "@e2b/code-interpreter": ">=1.0.0",
59
+ "@fly/sprites": ">=0.0.1",
55
60
  "@vercel/sandbox": ">=0.1.0",
56
61
  "dockerode": ">=4.0.0",
57
62
  "get-port": ">=7.0.0",
@@ -68,6 +73,9 @@
68
73
  "@e2b/code-interpreter": {
69
74
  "optional": true
70
75
  },
76
+ "@fly/sprites": {
77
+ "optional": true
78
+ },
71
79
  "@vercel/sandbox": {
72
80
  "optional": true
73
81
  },
@@ -85,8 +93,8 @@
85
93
  }
86
94
  },
87
95
  "dependencies": {
88
- "@sandbox-agent/cli-shared": "0.4.0",
89
- "acp-http-client": "0.4.0"
96
+ "@sandbox-agent/cli-shared": "0.4.1",
97
+ "acp-http-client": "0.4.1"
90
98
  },
91
99
  "files": [
92
100
  "dist"
@@ -95,6 +103,7 @@
95
103
  "@cloudflare/sandbox": ">=0.1.0",
96
104
  "@daytonaio/sdk": ">=0.12.0",
97
105
  "@e2b/code-interpreter": ">=1.0.0",
106
+ "@fly/sprites": ">=0.0.1",
98
107
  "@types/dockerode": "^4.0.0",
99
108
  "@types/node": "^22.0.0",
100
109
  "@types/ws": "^8.18.1",
@@ -110,7 +119,7 @@
110
119
  "ws": "^8.19.0"
111
120
  },
112
121
  "optionalDependencies": {
113
- "@sandbox-agent/cli": "0.4.0"
122
+ "@sandbox-agent/cli": "0.4.1"
114
123
  },
115
124
  "scripts": {
116
125
  "generate:openapi": "SANDBOX_AGENT_SKIP_INSPECTOR=1 cargo run -p sandbox-agent-openapi-gen -- --out ../../docs/openapi.json",
@@ -1,15 +0,0 @@
1
- // src/providers/shared.ts
2
- var DEFAULT_SANDBOX_AGENT_IMAGE = "rivetdev/sandbox-agent:0.4.0-full";
3
- var SANDBOX_AGENT_INSTALL_SCRIPT = "https://releases.rivet.dev/sandbox-agent/0.3.x/install.sh";
4
- var DEFAULT_AGENTS = ["claude", "codex"];
5
- function buildServerStartCommand(port) {
6
- return `nohup sandbox-agent server --no-token --host 0.0.0.0 --port ${port} >/tmp/sandbox-agent.log 2>&1 &`;
7
- }
8
-
9
- export {
10
- DEFAULT_SANDBOX_AGENT_IMAGE,
11
- SANDBOX_AGENT_INSTALL_SCRIPT,
12
- DEFAULT_AGENTS,
13
- buildServerStartCommand
14
- };
15
- //# sourceMappingURL=chunk-TWTMX66J.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/shared.ts"],"sourcesContent":["export const DEFAULT_SANDBOX_AGENT_IMAGE = \"rivetdev/sandbox-agent:0.4.0-full\";\nexport const SANDBOX_AGENT_INSTALL_SCRIPT = \"https://releases.rivet.dev/sandbox-agent/0.3.x/install.sh\";\nexport const DEFAULT_AGENTS = [\"claude\", \"codex\"] as const;\n\nexport function buildServerStartCommand(port: number): string {\n return `nohup sandbox-agent server --no-token --host 0.0.0.0 --port ${port} >/tmp/sandbox-agent.log 2>&1 &`;\n}\n"],"mappings":";AAAO,IAAM,8BAA8B;AACpC,IAAM,+BAA+B;AACrC,IAAM,iBAAiB,CAAC,UAAU,OAAO;AAEzC,SAAS,wBAAwB,MAAsB;AAC5D,SAAO,+DAA+D,IAAI;AAC5E;","names":[]}