@bunny-agent/ sandbox-sandock (英语)
桑多克沙盒适配器 给邦尼特工 运行 AI 代理 山多克 沙发 远程沙盒(而不是当地或通过E2B/Daytona),有持久性的卷,种子文件上传和快速启动的图像.
先决条件
- 节点.js 20+
- Sandock API 密钥 (env:) (中文(简体) )
SANDOCK_API_KEY(中文(简体) )
安装
npm install @bunny-agent/sandbox-sandock
快速启动
import { SandockSandbox } from "@bunny-agent/sandbox-sandock";
const sandbox = new SandockSandbox({
apiKey: process.env.SANDOCK_API_KEY,
workdir: "/workspace",
image: "ghcr.io/vikadata/bunny-agent:latest",
skipBootstrap: true,
});
密钥选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
apiKey | 字符串 | SANDOCK_API_KEY | Sandock API 密钥 |
image | 字符串 | sandockai/sandock-code:latest | 容器图像 |
workdir | 字符串 | /workspace | 沙盒内的工作目录 |
templatesPath | 字符串 | - 说吧 | 本地文件目录以种子工作空间; 内容被上传到附件上的工作目录( 例如工程骨架, 配置) |
volumes | { volumeName, volumeMountPath }[] | [] | 持久性量; 名称创建或再利用 |
skipBootstrap | 布尔 | 虚假 | 如果为真, 跳过运行器安装; 图像必须包含运行器 |
env | 记录<字符串,字符串> | {} | 注入沙盒的环境变量 |
timeout | 编号 | 30万个 | 运行超时( 毫秒) |
sandboxId | 字符串 | - 说吧 | 现有沙盒 ID 以重接; 回到失败时创建新文件 |
name | 字符串 | - 说吧 | 沙盒显示名( 如用于 Sandock 仪表板) |
keep | 布尔 | 真实 | 执行后保持沙盒运行 |
用法图案
1. 最小 (预建图像)
new SandockSandbox({
apiKey: process.env.SANDOCK_API_KEY,
image: "ghcr.io/vikadata/bunny-agent:latest",
skipBootstrap: true,
workdir: "/workspace",
});
2. 持久性量
new SandockSandbox({
apiKey: process.env.SANDOCK_API_KEY,
image: "ghcr.io/vikadata/bunny-agent:latest",
skipBootstrap: true,
workdir: "/workspace",
volumes: [
{ volumeName: "my-workspace", volumeMountPath: "/workspace" },
{ volumeName: "my-session", volumeMountPath: "/root/.claude" },
],
});
3. 重新使用现有的沙盒
过 sandboxId 重新连接到一个先前创建的沙盒。 适配器只有在沙盒目前安装时才会重新装入 RUNNING 状态。 如果沙盒被停止、暂停或不复存在, attach() 返回到自动创建新的.
const sandbox = new SandockSandbox({
apiKey: process.env.SANDOCK_API_KEY,
image: "ghcr.io/vikadata/bunny-agent:latest",
skipBootstrap: true,
workdir: "/workspace",
sandboxId: "cached-sandbox-id", // from your cache
});
const handle = await sandbox.attach();
// Store handle.getSandboxId() for next request
说明: 适配器不尝试启动被停止的沙盒. 仅
RUNNING沙盒被重新使用。 这避免出乎意料的冷启动延迟,并确保了连贯的附加经验.
对于web app,缓存 sandboxId 服务器侧(例如有 30-min TTL 的 immerry Map),所以之后请求在没有客户端侧状态的情况下再用同个沙盒. 使用 keep: true (默认)使沙盒在请求之间运行.
与 @ bunny- agent/ sdk 联系
import { createBunnyAgent } from "@bunny-agent/sdk";
import { SandockSandbox } from "@bunny-agent/sandbox-sandock";
import { generateText } from "ai";
const bunnyAgent = createBunnyAgent({
sandbox: new SandockSandbox({
apiKey: process.env.SANDOCK_API_KEY,
workdir: "/workspace",
image: "ghcr.io/vikadata/bunny-agent:latest",
skipBootstrap: true,
}),
env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});
const { text } = await generateText({
model: bunnyAgent("sonnet"),
prompt: "Create a hello world program",
});
安装 : npm install @bunny-agent/sandbox-sandock @bunny-agent/sdk ai
API 密码
桑多克桑德克( Adapter )
attach()— 创建或再使用沙盒;返回 aSandboxHandlegetHandle()—— 如果附加, 返回当前控件, 否则null
沙盒手提箱( 返回于 attach()(中文(简体) )
getSandboxId()返回沙盒实例 IDgetVolumes()- 返回挂载量清单(或null(中文(简体) )getWorkdir()——返回工作目录exec(command, opts)执行命令和流输出upload(files, targetDir)上传文件到沙盒readFile(filePath)从沙盒读取文件destroy()- 停止并删除沙盒
关于跳过Bootstrap
skipBootstrap: true: 图像已包含bunny-agent run; 只上传种子文件( 从templatesPath),无跑道安装. 使用预建的图像ghcr.io/vikadata/bunny-agent:latest。 。 。 .skipBootstrap: false: 在附件上, 运行npm install @bunny-agent/runner-cli@latest内workdir,然后使用${workdir}/node_modules/.bin/bunny-agent run用于执行.
许可证
阿帕奇 - 2.0