沙箱 SPI:Provider → Session → 命令执行

沙箱 SPI:Provider → Session → 命令执行 由 Archify 生成的架构图。 SandboxSpec · providerId/image/workspaceId · 沙箱 SPI(ai4j-agent/sandbox) SandboxSpec providerId/image/workspaceId SandboxProvider · SPI · supports/createSession · 沙箱 SPI(ai4j-agent/sandbox) · spi SandboxProvider SPI · supports/createSession spi 云沙箱实现 · E2B · Daytona · CubeSandbox · 沙箱 SPI(ai4j-agent/sandbox) · spi 云沙箱实现 E2B · Daytona · CubeSandbox spi bash 工具执行器 · SandboxShellCommandExecutor · ai4j-coding 消费侧 · exec bash 工具执行器 SandboxShellCommandExecutor exec SandboxSession · execute/cancel/artifacts/close · 沙箱 SPI(ai4j-agent/sandbox) · exec SandboxSession execute/cancel/artifacts/close exec CodingSandboxRuntime · session 薄包装 · ai4j-coding 消费侧 · exec CodingSandboxRuntime session 薄包装 exec SandboxResult · stdout/stderr/exitCode · 沙箱 SPI(ai4j-agent/sandbox) · exec SandboxResult stdout/stderr/exitCode exec SandboxEvent · 会话与命令状态事件 · 沙箱 SPI(ai4j-agent/sandbox) · exec SandboxEvent 会话与命令状态事件 exec ① supports(spec) ② 三种实现 ③ createSession ④ execute(SandboxCommand) ⑤ 命令结果 ⑥ 持有 session ⑦ 事件上报 沙箱 SPI(ai4j-agent/sandbox) ai4j-coding 消费侧 图例 后端 云服务 消息总线

SPI 三方法

  • • getProviderId:稳定 ID,供配置/blueprint/插件清单引用;supports(spec):能否满足该规格;createSession(spec):建隔离会话
  • • 内置实现:E2B、Daytona、CubeSandbox——各带独立 Client/Config/Session;新增厂商只实现这一个接口

会话即隔离边界

  • • SandboxSession.execute(SandboxCommand)→SandboxResult{stdout/stderr/exitCode/timedOut};cancel(commandId) 取消在跑命令
  • • listArtifacts() 取回会话产物;close() 释放远端资源;SandboxStatus 反映会话生命周期

与权限/编码侧联动

  • • bash 工具经 SandboxShellCommandExecutor 把命令+工作目录+超时翻译为 SandboxCommand,并打 metadata{tool:bash, routing:ai4j-coding}
  • • 权限决策带执行环境:LOCAL / SANDBOX / REMOTE_SANDBOX——沙箱命令可与本地命令走不同审批策略