Files
ycode/docs/沙盒完整接入首批实施-2026-10-18.md

7.9 KiB
Raw Permalink Blame History

沙盒完整接入:首批实施(2026-10-18)

后续已增加真实只读文件桥。下文是首批历史范围;当前桥已开放有界读取,宿主写入/联网代理仍未开放。

本批范围与状态

用户批准完整接入计划后,已开始 P0/P1,并落地 P2 的离线运行时/只读依赖层和 P3 的目录事务子集。所有阶段的完整目标仍按验收矩阵继续推进;本批不标记 P0/P1/P2/P3 全部完成,也不代表 WorkBuddy 1:1。

当前默认命令仍在自有 AppContainer/Job 和工作区副本中执行,网络禁用;原生组件或策略无效时拒绝执行。未给 MCP、手动终端或 OMP 内核进程追加“已整体隔离”的状态。

已落地实现

模块 当前行为
policy-store.ts 严格版本化全局/工作区策略、CAS 与跨维护进程文件锁;支持命令开关、ask/deny 写回、相对拒绝路径、资源/批次上限;工作区不能放宽全局规则
authorizations.ts / InteractionBroker 授权绑定具体变更摘要、工作区/调用、策略版本及内容指纹;单次消费、单调时限;取消、过期及策略变更拒绝旧授权;撤销会取消真实待审批交互
execution.ts 同工作区串行,最多 4 个活动工作区、32 个全局排队和每工作区 8 个排队请求;排队期间取消不启动副本
health.ts / self-test.ts 已安装与分项能力分开;自检保存时间、二进制/策略身份;身份变化不沿用旧自检结果;当前自检只验命令启动与清理
toolchains.ts 显式导入本机 Node/npm、Python/pip 的独立副本,逐文件摘要清单;源解释器不在宿主执行,凭证配置被过滤;执行时按需验证/复制
dependency-cache.ts 显式导入工作区 node_modules / .venv/Lib/site-packages,绑定工作区、配置/锁文件和运行时身份;拒绝链接/多重硬链接、篡改与过期层
runner.cpp 固定 PATH 指向受控目录,净化 npm/pip/Python 环境;工具与依赖层原生 ACL 为只读/可执行;继续保持零网络 capability 和精确 SID/Job 检查
transactions.ts 保留 v1 文件事务,增加 v2 目录条目;空目录、递归删除和目录重命名进入同一审批/备份/补偿/恢复;未知目录内容会阻止删除
maintenance.ts 增加操作结果查询;主进程独立保存 outcome,记录缺失时返回 incomplete/unknown,不由原生命令退出推断宿主写回成功
main/preload/shared IPC 暴露策略读取/CAS 更新、自检、操作查询与变更通知;变更接口校验自有主页面,拒绝 renderer 任意 workspaceRoot
公共工具路由 OMP/备用循环传递 session/run/tool-call;execute_command 新增显式 runtimes / dependencies,宿主文件工具共用策略与授权
stdio-broker.ts / 原生输入转发 测试用、按 Job 绑定的 stdio 回显通路;限制帧/总量/并发/时间,拒绝伪造归属和重放。未开放文件/网络操作,模型参数不能开启

运行时可用性来自显式注册和每次执行的文件校验。测试中的注册均发生在隔离 stateRoot;没有修改用户正在运行应用的数据。生产状态目录通过维护命令指定后才能注册对应运行时/依赖,安全中心 UI 尚未提供导入入口。

调用与维护

模型命令可使用以下参数选择已为当前沙盒注册的运行时与依赖:

{
  "command": "npm run build && npm test",
  "runtimes": ["node"],
  "dependencies": ["node"]
}

省略选择时保持系统 shell 配置;缺少运行时/缓存会明确拒绝,不查宿主任意 PATH。Node 依赖保持真实 node_modules 布局,因此已验证 CJS 和 ESM;Python 依赖通过私有 PYTHONPATH 提供。依赖只读,修改源依赖后需要显式重新导入,新的锁文件或运行时身份使旧层失效。

维护命令、格式和明确限制见原生维护说明。全局策略 UI API 当前只接真实后台,页面仍待原版 REA 采集和实现。原版安全中心分区、控件和语义不由本批后台功能反向假定。

当前验证记录

验证 已得到的结果 范围/报告
test:sandbox:policy 38/38 策略/CAS、授权单次与目标/工作区绑定、同 revision 内容变更失效、真实交互取消、操作查询、串行与排队取消;.tmp/sandbox-policy-QaV6xN/report.json
test:sandbox:toolchains 24/24 真实 Node/npm 构建测试、Python 标准库/pip/单元测试、只读工具/依赖、CJS/ESM/Python 包加载、锁文件和身份/摘要拒绝;.tmp/sandbox-toolchain-6feGGZ/report.json
test:sandbox:directories 13/13 真实空目录/树删除/重命名、精确二进制恢复、凭证保留、外部新增冲突和补偿;.tmp/sandbox-directories-lDwsqD/report.json
test:sandbox:feasibility 9 项基本机制通过;实验命名管道未通过连通性门槛 Windows 10.0.26100 x64、宿主 elevated;假 HKCU 样本和目录锁;.tmp/sandbox-feasibility-ihY5FY/report.json。管道拒绝另见 .tmp/sandbox-feasibility-PtEmPh/report.json,brokerPipeAvailable 为 false
test:sandbox:stdio 10/10 真实继承通路回显、伪造/重放/超限拒绝、实际网络仍被拒绝、取消和模型不能开启;.tmp/sandbox-stdio-7zOaqk/report.json
test:sandbox 52/52 基础 token/Job、越界、网络、事务与故障、退出清理等;目录用例已更新为真实支持;.tmp/sandbox-regression-PoNlsK/report.json
整应用生产链路 最终生产构建与 23/23 通过 真实 production main/preload/renderer、OMP RPC、localhost 模型,Node 与策略/自检/查询、真实撤销交互及迟到按钮拒绝;.tmp/sandbox-app-ZSMl6C/report.json
类型/基础回归 类型检查、smoke、对话、IPC 和 OMP 专项通过 旧对话“默认命令恒拒绝”断言改成显式缺失后端拒绝;并行思考强度修改的短暂类型错误已随其更新恢复,未改动该功能

测试仅使用自有临时工作区、隔离 userData/OMP home、本机模型夹具和假注册表键;注册表样本最终删除。用户当前窗口未被强制重启,主进程/preload 更改需下一次完整启动加载。所有既有并行 UI/引用/用量修改均保留。

P0 原型发现与下一批

  1. 只打开目录元数据的最初句柄原型未能阻止重命名;改为读取目录内容权限后,本机无删除共享句柄成功阻止替换,关闭后允许。未据此声称完整祖先遍历或文件代理安全。
  2. 原生 AppContainer 不能读取/修改自建宿主 HKCU 假值。这只是默认隔离观察,不是自定义注册表规则完成。
  3. 本机 named-pipe 原型在实际/预期 SID 相同的情况下仍返回 access denied;LOCAL 路径也未连通。替代的已绑定 stdio 原型已通过 10 项有限回显检查,实际 TCP 仍被拒绝;仅测试/内部调用可启用,真实文件和网络代理继续关闭。
  4. P1 的真实操作 broker、逐后代归属、完整同步/异步适配和断线语义仍待实现。当前授权票据是可信主进程内部对象,stdio 回显只证明有限的通道、边界和取消,不是完整代理。
  5. P2 仍缺 Git、长期可写工作区、联网安装、依赖更新和清理、pnpm 链接布局与完整编译工具链;P3 仍缺原生句柄代理、完整语言适配、元数据、专用删除阈值/回收站和聊天恢复映射。
  6. P4~P8 的出站/程序/注册表规则、MCP/内核/ConPTY、安全中心、硬磁盘限额、升级/发布/独立审查及原版同场景验证按矩阵继续执行。

本轮没有新采 WorkBuddy 原版实现。E1/E2 静态证据和 E3 导航证据仅沿用此前记录,范围和未知项见矩阵。