跳转到内容
搜索文档

HTTP API 参考

最后更新 查看 MarkdownAgent 设置

本页记录 sandbox bridge 暴露的每条路由。

认证

/v1/sandbox/*/v1/openapi.* 下的所有路由都需要 Bearer token:

Authorization: Bearer <SANDBOX_API_KEY>

未配置 SANDBOX_API_KEY 时,为便于本地开发会跳过认证。部署到生产环境前请务必设置该密钥。

OpenAPI schema

bridge 提供自身的 API 文档:

方法 路由 描述
GET /v1/openapi.json 机器可读的 OpenAPI 3.1 schema。
GET /v1/openapi 交互式 HTML 文档。

两条路由均支持通过 Bearer 请求头或 ?token= 查询参数进行认证。

在本地使用 npm run dev 运行时,在浏览器中打开 http://localhost:8787/v1/openapi,可交互式探索每个端点。

沙箱生命周期

方法 路由 描述
POST /v1/sandbox 创建新沙箱。返回 {"id": "<sandbox-id>"}
DELETE /v1/sandbox/:id 销毁沙箱 container。返回 204
GET /v1/sandbox/:id/running 检查 container 存活性。返回 {"running": true|false}

命令执行

方法 路由 描述
POST /v1/sandbox/:id/exec 运行命令。响应为 SSE 流(见下文)。

/exec 端点接受 JSON 请求体:

{
  "argv": ["sh", "-lc", "echo hello"],
  "timeout_ms": 10000,
  "cwd": "/workspace"
}

Argv 转义

argv 数组的每个元素在拼接为 shell 命令前,会使用 ANSI-C $'...' 引号进行转义。仅包含安全字符(A-Za-z0-9@%+=:,./-)的 token 会原样传递。所有其他 token 会包装在 $'...' 中,并对反斜杠、单引号、换行、回车和制表符进行转义。这可防止 shell 注入,同时保留包含空格、引号或特殊字符的参数。

SSE 响应格式

响应为 text/event-stream,包含以下事件类型:

事件 数据 描述
stdout Base64 编码的数据块 命令的标准输出。
stderr Base64 编码的数据块 命令的标准错误。
exit {"exit_code": N} 命令完成。终端事件。
error {"error": "…", "code": "…"} 命令失败。终端事件。

文件操作

方法 路由 描述
GET /v1/sandbox/:id/file/* 读取文件。返回原始字节(application/octet-stream)。
PUT /v1/sandbox/:id/file/* 写入文件。请求体为原始字节。返回 {"ok": true}。最大 32 MiB。

文件路径编码在 URL 的 /file/ 之后。所有路径必须解析到 /workspace 内。路径遍历尝试(例如 ../../etc/passwd)会被拒绝。

工作区持久化

方法 路由 描述
POST /v1/sandbox/:id/persist /workspace 序列化为 tar 归档。返回原始 tar 字节。
POST /v1/sandbox/:id/hydrate 从作为请求体发送的 tar 归档填充 /workspace

/persist 端点接受可选的 excludes 查询参数 — 要从归档中排除的相对路径的逗号分隔列表。

/hydrate 端点接受最大 32 MiB 的原始 tar 负载。

存储桶挂载

方法 路由 描述
POST /v1/sandbox/:id/mount 将 S3 兼容存储桶挂载为本地目录。
POST /v1/sandbox/:id/unmount 卸载先前挂载的存储桶。

/mount 端点接受 JSON 请求体。支持两种流程:

R2 绑定挂载

省略 endpoint,并在 bucket 中传入 Worker R2 绑定名称:

{
  "bucket": "MY_BUCKET",
  "mountPath": "/mnt/data",
  "options": {
    "readOnly": false,
    "prefix": "/subdir"
  }
}

当省略 options.endpoint 时,bucket 表示 Worker R2 绑定名称。

对于显式的 S3 兼容端点挂载,请包含 endpoint 以及可选的 credentials

{
  "bucket": "my-r2-bucket",
  "mountPath": "/mnt/data",
  "options": {
    "endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
    "readOnly": false,
    "prefix": "/subdir",
    "credentials": {
      "accessKeyId": "...",
      "secretAccessKey": "..."
    }
  }
}

当提供 endpoint 时,bucket 表示远程存储桶名称。此模式下凭据是可选的 — 省略时,bridge 会从 Worker 密钥(R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEYAWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY)自动检测。

会话

方法 路由 描述
POST /v1/sandbox/:id/session 创建会话。返回 {"id": "<session-id>"}
DELETE /v1/sandbox/:id/session/:sid 删除会话。返回 204

会话在沙箱内隔离工作目录、环境变量和命令执行状态。在 /exec/file/*/pty 请求上传递 Session-Id 请求头,可将其限定到某个会话。

未提供 Session-Id 请求头时,请求使用沙箱的隐式执行模式。默认这是默认会话,但配置了 enableDefaultSession: false 的 SDK 会改为以无会话方式运行这些隐式操作。

终端 (PTY)

方法 路由 描述
GET /v1/sandbox/:id/pty 升级为 WebSocket PTY 会话。

查询参数:

参数 类型 默认值 描述
cols number 80 终端宽度(列)。
rows number 24 终端高度(行)。
shell string Shell 二进制文件(例如 /bin/bash)。
session string 用于会话作用域 PTY 的会话 ID。

WebSocket 为终端 I/O 携带二进制帧,为控制消息携带 JSON 文本帧:

方向 帧类型 内容
客户端到服务器 Binary UTF-8 编码的按键。
服务器到客户端 Binary 包含 ANSI 转义序列的终端输出。
客户端到服务器 Text (JSON) 控制消息(例如 {"type": "resize", "cols": 120, "rows": 30})。
服务器到客户端 Text (JSON) 状态消息(readyexiterror)。

预热池

方法 路由 描述
GET /v1/pool/stats 当前池统计信息。
POST /v1/pool/prime 启动预热池 alarm 循环。
POST /v1/pool/shutdown-prewarmed 停止所有空闲预热 container。

预热池会预先启动沙箱 container,使新会话可即时启动。在 wrangler.jsonc 中使用环境变量配置:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "vars": {
    "WARM_POOL_TARGET": "3",
    "WARM_POOL_REFRESH_INTERVAL": "10000"
  }
}
[vars]
WARM_POOL_TARGET = "3"           # Number of idle containers to keep warm (0 = disabled)
WARM_POOL_REFRESH_INTERVAL = "10000"  # Health-check interval in milliseconds

cron 触发器(* * * * *)会在部署后自动预热池。将 WARM_POOL_TARGET 设为 "0"(默认值)可禁用池并避免意外费用。

健康检查

方法 路由 描述
GET /health 无需认证的存活性探测。返回 {"ok": true}

相关资源

这篇文档对您有帮助吗?