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

71 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 沙盒完整接入:首批实施(2026-10-18)
> 后续已增加[真实只读文件桥](沙盒只读文件桥接入-2026-10-18.md)。下文是首批历史范围;当前桥已开放有界读取,宿主写入/联网代理仍未开放。
## 本批范围与状态
用户批准[完整接入计划](沙盒完整接入计划-2026-10-18.md)后,已开始 P0/P1,并落地 P2 的离线运行时/只读依赖层和 P3 的目录事务子集。所有阶段的完整目标仍按[验收矩阵](沙盒接入验收矩阵-2026-10-18.md)继续推进;本批不标记 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 尚未提供导入入口。
## 调用与维护
模型命令可使用以下参数选择已为当前沙盒注册的运行时与依赖:
```json
{
"command": "npm run build && npm test",
"runtimes": ["node"],
"dependencies": ["node"]
}
```
省略选择时保持系统 shell 配置;缺少运行时/缓存会明确拒绝,不查宿主任意 PATH。Node 依赖保持真实 node_modules 布局,因此已验证 CJS 和 ESM;Python 依赖通过私有 PYTHONPATH 提供。依赖只读,修改源依赖后需要显式重新导入,新的锁文件或运行时身份使旧层失效。
维护命令、格式和明确限制见[原生维护说明](../native/sandbox/README.md)。全局策略 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 导航证据仅沿用此前记录,范围和未知项见矩阵。