.agents/design/core/ai/sandbox/integration-testing.md
Sandbox 的 provider SDK 已有自己的契约测试,但它无法验证 FastGPT 在真实运行时中的行为:
runSandboxTools 的参数校验、命令调度、耗时上报和错误返回是否正确。因此本测试不以 SDK 为目标,而是从 FastGPT 业务入口覆盖 Agent Sandbox 完整链路。
prepareSandboxToolRuntime 和 runSandboxTools 执行真实 Agent Sandbox 链路。位置:packages/service/test/integrations/sandbox/fastgpt.integration.test.ts
专用 Vitest 配置为 packages/service/vitest.sandbox.integration.config.ts。它不加载通用
test/setup.ts,避免该 setup 中的 Redis mock 将 lifecycle lease 和 preview session 变成内存行为。
运行命令:
pnpm test:service:integration:sandbox
只有 SANDBOX_INTEGRATION=true 时才运行真实 provider 用例。已启用但 provider 环境变量不完整
时直接失败,避免配置错误被静默跳过。
buildOpenSandboxRuntimeProfile 构造,network policy 会创建 egress
sidecar;测试还会从 Sandbox 访问 dev 私网服务并断言被阻止。AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY 只控制 SDK 到 OpenSandbox server 的连接方式,
不负责创建 egress;egress 由 FastGPT runtime profile 中的 networkPolicy 触发。以下八个工具全部通过 runSandboxTools 执行:
sandbox_write_filesandbox_read_filesandbox_edit_filesandbox_grepsandbox_findsandbox_lssandbox_shellsandbox_get_file_url每次调用记录:操作名、wall-clock 耗时、预算、业务返回的 durationSeconds 和结果类型。测试会
校验 wall-clock 不超过预算,并检查业务上报耗时没有显著大于实际耗时。suite 结束时统一输出 JSON
计时报告。
默认预算:
预算可分别通过 SANDBOX_INTEGRATION_TOOL_MAX_MS、
SANDBOX_INTEGRATION_TIMEOUT_MAX_MS、SANDBOX_INTEGRATION_LIFECYCLE_MAX_MS 和
SANDBOX_INTEGRATION_CLEANUP_MAX_MS 调整。
running 但 provider 资源消失时,同一个 FastGPT client 在下一条指令中自动重建
runtime,并保留 volume 文件。provisioning 失败操作后,再次调用 getSandboxClient 重放 provision。stopping 失败操作后,scheduler retry 完成 stop,再次调用时恢复 runtime。删除前核对 Mongo 记录的 provider、source 和 user,避免误删共享 dev 资源。清理统一调用
deleteSandboxResource,覆盖 provider runtime、egress sidecar、persistent volume、archive 和 Mongo
阶段;可重放删除最多重试三次。suite 结束后再清除本轮 preview Redis key 和随机 Mongo 数据库。