跳转到内容

沙箱

OpenMA 把执行环境当作可替换的后端。无论由哪个 driver 提供计算,Session 的 Managed Agents API 形状都不变;托管运行时宿主 在其上负责生命周期、/workspace、输出和栅栏。

本页梳理全局:七类 Agent 执行环境,以及实现每一类的 OpenMA driver。下面的 每一条一致性声明都来自 packages/managed-runtime-host/src/provider-conformance.ts 中的机器可读表(MANAGED_RUNTIME_PROVIDER_CONFORMANCE)。

计算和控制面在同一台主机(或主机集群)上,没有外部沙箱服务。

Driver是什么
node-dockerpackages/managed-runtime-node —— Docker CLI 适配器(docker create、exec、rm)。容器生命周期由宿主自身的组合管理。
liteboxSANDBOX_PROVIDER=litebox(别名 boxlite)—— 通过 sandbox-adapter-litebox 在宿主机上内嵌的 BoxLite microVM。保留 box 是宿主机本地的。
boxrunSANDBOX_PROVIDER=boxrun —— 通过官方 REST client 使用 BoxLite(sandbox-adapter-boxrun)。
subprocess仅供测试的 local-subprocess 适配器。在 NODE_ENV=test 之外被拒绝;生产服务器宁可拒绝也不会在 API 宿主机上跑 Agent 命令。

什么时候选:想要完全自托管、不依赖第三方——代价是隔离较弱(容器与宿主机共享内核),且纯 Docker driver 不支持挂起/恢复。

专门的 dev-box 平台:有名字的沙箱在多次会话轮次之间保持存活,可以挂起和恢复。

Driver服务
e2bE2B 沙箱。提供方级的挂起/恢复,外加提供方内存快照(仍不是 OpenMA 检查点)。
daytonaDaytona workspace:稳定名字、所有权标签、stop/start、可移植的文件系统快照、活动续租 lease。
litebox / boxrun见第 1 类 —— BoxLite 的保留 box 也实现了挂起/恢复,但存储是 best-effort 的宿主机本地存储。

什么时候选:想要长期存活、可恢复的 dev box,又不想运维 Kubernetes。

按需的沙箱 API,按秒计费,每个沙箱一个持久文件系统。

Driver服务说明
modalModal sandbox在 /workspace 挂载预先创建的 Volume v2 会话子路径,detach 前同步,在这份持久卷上重建计算。
spritesFly Sprites提供方持久的 ext4 文件系统,自动暂停/唤醒,原生网络策略。
vercelVercel Sandbox持久的有名沙箱,自动快照恢复。其默认拒绝的防火墙是提供方特性,不是 OpenMA 的凭据出口。仅 ama_worker 通道。
blaxelBlaxel稳定 Session 身份、archive/unarchive 保留文件系统。其原生代理防火墙与 secret 注入是提供方特性,不是 OpenMA 的凭据出口——workspace 持久性是 best-effort。
superserveSuperserve保留式暂停/恢复,保住进程和文件;token 轮换重连。其提供方侧 secret 代理是提供方特性,不是 OpenMA 的凭据出口。

什么时候选:想要零运维、按用量计费的计算,且每个沙箱有持久存储。

跑在 Cloudflare 控制面旁边的沙箱容器。

Driver是什么
cloudflarepackages/managed-runtime-cloudflare —— Cloudflare Workers Containers。唯一一个凭据出口为 enforced 的 driver:沙箱只能到达 OpenMA 出口代理(credentialMode: "live",拦截协议 http/https)。
cloudflare-bridgepackages/managed-runtime-cloudflare-bridge —— Node 控制面通过 HTTP 到达运维方部署的官方 Cloudflare Sandbox Bridge。仅 ama_worker 通道。

什么时候选:当凭据拦截是硬性要求时,或你已经在 Cloudflare 上部署。两个 driver 都不支持挂起/恢复。

由集群的 agent-sandbox 控制器解决的 Kubernetes SandboxClaim。

packages/environment-dispatch-gke 为 GKE 实现了 poll_unacked_then_dispatch 策略:dispatcher 回收过期的 SandboxClaim,从配置的 warmPool 绑定一个热备 pod(一个真实的 K8s agent-sandbox 热备池——也是代码里目前唯一存在的 warm-pool 集成),然后让 pod 内运行时接管 Work 心跳。

什么时候选:已经运行 Kubernetes,希望沙箱生命周期由集群控制器拥有。

每个 Session 一台 VM,按需启动。

packages/environment-activation-aws 实现了 acquire_then_session_poll 策略:一条持久的 activation-intent 队列驱动 AwsMicrovmLauncherPort,VM 内 的 worker 自己 poll、claim、心跳、停止 Work。在失去所有权之后创建的 VM 会 被当作孤儿回收。

跨 provider 的通用 warm-pool / fork 模型属于规划中,尚未实现。

environment: { type: "none" } 创建一个无沙箱 Session——Agent 直接在宿主机上运行,没有工具隔离。托管的 OpenMA 和 Node 服务器都支持。适用于纯对话 Agent 和轻量工具使用;见 README 中的无沙箱 Session 示例。

事实来源是 MANAGED_RUNTIME_PROVIDER_CONFORMANCE。下面每一个 managed-runtime driver 都声明 hardTerminate: supported、 orphanReap: host-managed 和 runtimeCheckpoints: []——任何 driver 上都没有进程内存检查点/恢复。

Driver通道挂起/恢复Workspace凭据出口
node-dockerama_worker, openma_supervisedunsupporteddurableunsupported(oma-vault 环境代理是 advisory)
cloudflareama_worker, openma_supervisedunsupporteddurableenforced —— live,http/https
cloudflare-bridgeama_workerunsupporteddurableunsupported
e2bama_worker, openma_supervisedsupporteddurableunsupported
daytonaama_worker, openma_supervisedsupporteddurableunsupported
liteboxama_worker, openma_supervisedsupportedbest_effortunsupported
boxrunama_worker, openma_supervisedsupportedbest_effortunsupported
blaxelama_worker, openma_supervisedsupportedbest_effortunsupported
spritesama_worker, openma_supervisedsupporteddurableunsupported
vercelama_workersupporteddurableunsupported
modalama_worker, openma_supervisedsupporteddurableunsupported
superserveama_worker, openma_supervisedsupporteddurableunsupported

各 driver 值得注意的 sandboxPortFacts(裸适配器能做什么、不能做什么):

Driver具备缺少
node-dockerduplex_process, workspace_file_ioprovider_suspend_resume
cloudflareduplex_process, workspace_backup, session_output_mountruntime_scoped_resume, process_memory_checkpoint
cloudflare-bridgehttp_bridge, argv_sse_process, workspace_file_io, workspace_tar_checkpointinteractive_stdin_without_pty, provider_lease, process_memory_checkpoint
e2bduplex_process, provider_suspend_resume, provider_memory_snapshotprocess_memory_checkpoint
daytonaprovider_activity_lease, stable_name_with_ownership_labels, retained_filesystem_stop_start, portable_filesystem_snapshot, duplex_session_processprocess_memory_checkpoint, durable_output_mount
liteboxstable_get_or_create, detached_retained_filesystem, duplex_process, native_network_allowlist, native_secret_substitutionportable_workspace_checkpoint, process_memory_checkpoint
boxrunofficial_boxlite_rest_client, stable_get_or_create, detached_retained_filesystem, duplex_processportable_workspace_checkpoint, process_memory_checkpoint
blaxelstable_name_external_id_and_ownership_labels, archive_unarchive_retained_filesystem, duplex_named_process, native_proxy_firewall_and_secret_injection, optional_persistent_volumeportable_workspace_checkpoint, process_memory_checkpoint
spritesstable_name_and_ownership_labels, persistent_ext4_filesystem, automatic_pause_and_wake, duplex_process, native_network_policyportable_workspace_checkpoint, process_memory_checkpoint
vercelstable_name_and_ownership_tags, persistent_filesystem_with_automatic_snapshot_restore, detached_process_logs, deny_by_default_network_policy, path_scoped_header_transform_and_forward_proxystreaming_process_stdin, portable_workspace_checkpoint, process_memory_checkpoint
modalstable_name_and_ownership_tags, session_scoped_volume_v2_subpath, volume_sync_before_detach, duplex_process, native_domain_and_cidr_allowlist, compute_recreate_over_durable_volumeportable_workspace_checkpoint, stable_process_memory_checkpoint
superservestable_name_and_ownership_metadata, pause_resume_preserves_processes_and_files, transparent_token_rotation_and_auto_resume, duplex_process, deny_by_default_network_policy, provider_side_secret_proxy_and_auditportable_workspace_checkpoint, stable_process_memory_checkpoint
  1. 先决定凭据拦截是不是硬性要求。如果是,今天的选择是 cloudflare driver(或在其他 driver 上注入运维方提供的 CredentialEgressPort)。
  2. 决定 Session 是否必须挂起并带着保留的计算恢复。这会排除 node-docker、cloudflare 和 cloudflare-bridge。
  3. 决定 workspace 需要多持久。litebox、boxrun 和 blaxel 是 best-effort;其余都是 durable。
  4. 把剩下的 driver 对照你的基础设施:Docker 宿主机、dev-box 服务、 serverless 沙箱 API、Cloudflare、GKE 或 AWS VM。

按 driver 的安装指南: