实现位于 src/runner/computers/container.ts,提供统一的创建、查询、执行、停止和删除接口。每个环境有独立 UUID、账号归属键、Runner 身份、容器和持久工作目录。pool.ts 提供持久电脑租约与资源配额。现在已通过受控 Worker 接入 Bot 任务,详见 docs/computer-worker.md。本文记录 Provider 和资源租约本身的边界。
/home/cua/workspace。--network none,不发布任何端口。容器只有 loopback 网卡,不能直接访问宿主服务或外网。自己的主机名映射到 loopback,保证 XFCE/VNC 在无网络环境下正常启动。可通过专属进程通道启用受控公网代理,仍不增加外部网卡或端口。详见 docs/computer-network.md。docs/computer-control.md。docker exec 客户端不能证明 guest 进程已停止。docs/computer-maintenance.md;可信共享电脑见 docs/shared-computers.md。权限校验以回调传入,在异步检查与实际执行的前后重验。ComputerPool 在 SQLite 中保存持有者、租约代次、期限与停止状态,默认每个 Runner 同时 2 个环境、总计最多 32 个环境。启动时必须先恢复未确认停止的资源;旧租约先失效,再停止并删除旧容器身份,保留工作区。不确认停止的环境保持占用,不能交给新任务。当前 Provider 与资源池都不作为裸命令接口对浏览器或模型开放,通过 Worker 和任务授权检查使用。
吸收 OpenMausBot server/container-computer.ts 的不可变镜像、每 Bot 环境、持久工作目录、能力检查和实际健康/画面验证;默认网络进一步收紧为无网络环境。吸收 rakazo 的屏幕租约和接管机制,在任务协调层加入持久 fencing 代次,先确认旧执行停止,再允许新控制者使用资源。
Provider 的 15 项与 ComputerPool 的 6 项离线测试通过,覆盖 Docker/Podman 参数边界、账号/Runner 归属、挂载/网络/权限/资源篡改、异步撤权、危险目录、配额、取消、重启恢复及过期扫描不误停新的持有者。Podman 尚未做真实运行验收。
真实 Docker 验收通过:创建独立电脑、验证只有 loopback 网卡、guest UID 1000 写入文件、读取 CUA 健康报告和真实桌面截图、删除重建后读取持久文件、通过 ComputerPool 取消延迟写入,确认旧容器被删除,拒绝旧租约继续执行。截图在 test-results/computer/desktop.png。每次测试均使用新的 UUID 和临时目录,并清理本轮容器。
YAOYAO_COMPUTER_IMAGE=sha256:本机已验证镜像的完整ID \
npx vitest run tests/live/computer.live.test.ts
本轮 arm64 验证镜像为 sha256:574b51992c53e22d48997d4286ba83e47b872de34250276c99d2f390bf3640e0。镜像构建与跨端电脑面板已有实现,见对应文档;可信共享环境见 docs/shared-computers.md,不能以本测试替代整个 VM 功能验收。