Skip to content

Commit e877e54

Browse files
committed
fix Windows sandbox diagnostics and SkillRoute recovery
1 parent 6a2ccbe commit e877e54

49 files changed

Lines changed: 1366 additions & 265 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CHANGELOG.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
# 变更日志 (CHANGELOG)
22

33
> **说明**: 版本概览摘要;历史版本见对应详细变更文件。
4-
> **最新版本详细变更文档**: [`changelogs/releases/v1.16.5.md`](./changelogs/releases/v1.16.5.md)
5-
> **最后更新**: 2026-08-09
6-
> **当前未发布**: v1.16.5 已形成发布候选并归档到版本详情;远端发布事实仍以 tag、npm registry 与最终回读为准,后续实现继续记录到 [`changelogs/unreleased.md`](./changelogs/unreleased.md)。
4+
> **最新版本详细变更文档**: [`changelogs/releases/v1.16.6.md`](./changelogs/releases/v1.16.6.md)
5+
> **最后更新**: 2026-08-10
6+
> **当前未发布**: v1.16.6 已形成发布候选并归档到版本详情;远端发布事实仍以 tag、npm registry 与最终回读为准,后续实现继续记录到 [`changelogs/unreleased.md`](./changelogs/unreleased.md)。
77
88
---
99

1010
## 版本概览
1111

1212
| 版本 | 日期 | 变更摘要 | 详细 |
1313
|------|------|---------|------|
14+
| [v1.16.6](./changelogs/releases/v1.16.6.md) | 2026-08-10 | 🔧 **Windows 审批沙箱与 SkillRoute 恢复修复**:逐宿主隔离只读权限拒绝,新增 Node launcher readiness;可见恢复卡仅保留当前精确动作,语义漂移进入不可重试的持久退役终态 | [查看](./changelogs/releases/v1.16.6.md) |
1415
| [v1.16.5](./changelogs/releases/v1.16.5.md) | 2026-08-09 | 🔧 **SkillRoute 累计预算与有限退休修复**:持久化正文计费账本、全计划预算预留、原子计费和 cache 去重;预算不足时零写入、无 `nextCall` 有限退役;npm 包内完整路由验证与 Mermaid/DOMPurify/React Router 安全下限同步收敛 | [查看](./changelogs/releases/v1.16.5.md) |
1516
| [v1.16.4](./changelogs/releases/v1.16.4.md) | 2026-08-05 | 🔧 **审计缺陷收敛与上下文恢复修复**:修复 ProjectKnowledge 越界、SkillRoute/ContextRead 三次无进展循环、Memory 与 Profile 边界;增加 MCP/宿主有界 I/O、关键风险映射、验证 DAG 分层和安全审计证据闭环 | [查看](./changelogs/releases/v1.16.4.md) |
1617
| [v1.16.3](./changelogs/releases/v1.16.3.md) | 2026-08-04 | 🔧 **SkillRoute 无恢复循环与滚动升级修复**:不可执行旧路由自动退役并在下一轮重建;运行中会话与更新后新会话安全分流,ContextRead 仅迁移受支持的上一版本契约;Profile、memory、索引和治理台账同步加固 | [查看](./changelogs/releases/v1.16.3.md) |

‎README.md‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,36 @@ Get-Command devcodex
358358
npm root -g
359359
```
360360

361+
### “帮我审批”时反复重新连接,是否必须开启完全访问?
362+
363+
不需要永久开启 Full access。“帮我审批”仍受 workspace 沙箱约束;它只决定符合条件的越界动作如何审批,不会自动扩大文件系统或可执行文件范围。先运行:
364+
365+
```powershell
366+
Get-Command node
367+
node --version
368+
devcodex doctor
369+
devcodex doctor --json
370+
```
371+
372+
重点看两类诊断:
373+
374+
| 诊断 | 含义与恢复 |
375+
|------|------------|
376+
| `node runtime BLOCK (... reason=sandbox-exec-denied)` | ambient Node launcher 在 DevCodex JavaScript 启动前被沙箱拒绝,Hook 此时无法自我恢复。对该 launcher 做一次明确审批,或改用路径稳定、可受信任的系统 Node,然后重跑 `devcodex doctor`。Volta、NVM、FNM、asdf 等 shim 更新物理路径后可能需要重新批准。 |
377+
| 某个宿主为 `unverified`,JSON 含 `GLOBAL_HOST_TARGET_UNVERIFIED` / `sandbox-read-denied` | 只表示该用户级宿主目录在当前沙箱中不可读;其他宿主仍会继续检查。批准读取该目录后重试即可,不代表必须给整个 Codex 完全访问权限。 |
378+
379+
如果界面只显示 Skill Route `blocked` 或一个待执行 `nextCall`,它表达的是工作流仍有待办,不足以证明是权限问题;`BUDGET_BLOCKED` 则表示当前路由预算耗尽且没有可执行恢复动作,同样不是权限证据。`REBIND_SEMANTIC_DRIFT` 表示刷新后的任务语义已经改变,旧路由会立即退役且不再重试;下一条真实用户消息会建立新路由。新版本会把可见恢复信息压缩为当前精确动作或 typed 状态,完整 `NextActionEnvelopeV1` 只保留在结构化机器字段中;不会自动重放修改性操作。
380+
381+
若更新后仍看到整段原始 envelope 或旧的重复提醒,通常是旧任务仍绑定启动时运行态。执行:
382+
383+
```bash
384+
npm update -g devcodex
385+
devcodex global-adapters apply
386+
devcodex doctor
387+
```
388+
389+
然后完全关闭旧任务并新建任务。完全访问可以作为短时诊断对照,但不是默认修复方案。
390+
361391
## 更新
362392

363393
```bash

‎RULES.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# DevCodex v1.16.5 — 使用入口
1+
# DevCodex v1.16.6 — 使用入口
22

3-
> AI workflow injector for Copilot / Claude Code / Codex / Gemini / Grok · publisher: Rocky · version: 1.16.5
3+
> AI workflow injector for Copilot / Claude Code / Codex / Gemini / Grok · publisher: Rocky · version: 1.16.6
44
55
## 正式主支持客户端
66

‎changelogs/releases/v1.16.6.md‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# v1.16.6
2+
3+
> 发布日期:2026-08-10
4+
> 类型:Patch
5+
6+
## 摘要
7+
8+
本版本修复 Windows “帮我审批”/workspace 沙箱环境中的三类恢复问题:单个用户级宿主目录不可读时整批 `status/doctor` 中断;ambient Node launcher 在 DevCodex JavaScript 启动前被拒绝却缺少分型;SkillRoute 在审批或连接中断后把完整 `NextActionEnvelopeV1` 显示到聊天界面。
9+
10+
## 主要修复
11+
12+
- `inspectGlobalHostConfiguration()` 对单宿主 `EPERM/EACCES` 投影 `GLOBAL_HOST_TARGET_UNVERIFIED/sandbox-read-denied`,其余宿主继续检查;非权限异常仍抛出。
13+
- `verifyGlobalHostRuntime()` 对不可验证宿主跳过 target、adapter 与 native 探针,避免把“无法观察”误报成合同失败。
14+
- apply/install/mutation 继续使用严格物理 realpath 边界;不可验证路径不采用 lexical fallback,symlink/junction 逃逸仍阻断。
15+
- 新增 `NodeRuntimeReadinessV1`:无 shell 解析 PATH/PATHEXT,报告当前 Node、ambient launcher、Volta/NVM/FNM/asdf/system provider、shim/script/binary 类型与有界 `node --version` 烟测。
16+
- ambient Node 被审批沙箱拒绝时输出 `sandbox-exec-denied`,明确该故障发生在 DevCodex JavaScript 启动前,Hook 无法自行重试;恢复建议为一次性批准 launcher 或使用可信稳定 Node,而不是永久开启 Full access。
17+
- SkillRoute 可见恢复卡只显示协调说明与精确 `nextCall`;无调用时显示 typed status/nextOp/errorCode,重复无变化提示固定为一行。
18+
- 完整 envelope 保留在结构化 `devcodexNextAction`;Codex/Claude Stop、PostToolUse/PreCompact 以及 Copilot/Grok 输出适配不再静默丢失 carrier。
19+
- `REBIND_SEMANTIC_DRIFT` 继续 fail closed,但会原子写入 `SkillRouteRetirementStateV1`;后续 status/Stop 均返回 terminal retirement 与 `nextCall=null`,禁止再次回放已拒绝的 rebind,下一条真实用户消息重新建路由。
20+
21+
## 用户排障
22+
23+
- `devcodex status` 和 `devcodex doctor` 增加紧凑 Node runtime 行,`--json` 提供完整结构化证据。
24+
- README 新增“帮我审批时反复重新连接”说明,区分宿主目录读取拒绝、Node launcher 启动拒绝、SkillRoute pending/BUDGET_BLOCKED 与旧任务未重载新运行态。
25+
- 安装更新后执行 `devcodex global-adapters apply`,完全关闭旧任务并新建任务,才能加载新的用户级 Hook runtime。
26+
27+
## 测试与兼容性
28+
29+
- 单宿主权限拒绝、兄弟宿主继续、非权限异常、mutation fail-closed 与物理路径逃逸均有负向测试。
30+
- Node readiness 覆盖 system/Volta、binary/shim、PATH missing 与 sandbox execution denied。
31+
- Hook 回归覆盖 exact nextCall、无完整 envelope、无 nextCall typed card、duplicate 单行、structured-first 与用户粘贴文本不误判。
32+
- SkillRoute 状态回归覆盖同语义 rebind 成功、语义漂移拒绝并持久退役、status/Stop 无下一调用,以及退役后再次 rebind 不产生新状态。
33+
- production rebind S15 的第二次 ContextRead 保持与第一次相同的语义输入;语义漂移由独立负向测试验证,探针不再把安全拒绝误判为成功条件。
34+
- 变更均为 additive JSON 字段或人类文本降噪;不新增第三方依赖、网络监听、后台服务或自动 mutation replay。
35+
36+
## 发布说明
37+
38+
- npm 包名:`devcodex`
39+
- registry:`https://registry.npmjs.org/`
40+
- 发布分支:`main`
41+
- 发布路径:候选通过 R4/ECR、main CI、package release、rolling upgrade 与 production S15 后创建 tag `v1.16.6`;tag workflow 发布 npm 包,registry 验证通过后创建 GitHub Release。

‎changelogs/unreleased.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# 未发布变更(Unreleased)
22

33
> **用途**: 记录尚未正式发版的实现级变更。
4-
> **当前**: v1.16.5 已形成发布候选并归档到 `changelogs/releases/v1.16.5.md`;本文件保留候选索引与历史镜像供 validate 探针消费,远端发布事实仍以 tag、npm registry 和最终回读为准。
4+
> **当前**: v1.16.6 已形成发布候选并归档到 `changelogs/releases/v1.16.6.md`;本文件保留候选索引与历史镜像供 validate 探针消费,远端发布事实仍以 tag、npm registry 和最终回读为准。v1.16.5 已发布事实保持历史不变。
55
66
## 当前未发布实现候选
77

8+
- **v1.16.6 Windows 审批沙箱与 Skill Route 恢复候选**:只读 `status/doctor` 对单宿主 `realpath EPERM/EACCES` 隔离为 `GLOBAL_HOST_TARGET_UNVERIFIED/sandbox-read-denied`,其余宿主继续检查,安装/写入路径仍保持物理边界 fail closed;新增 `NodeRuntimeReadinessV1`,无 shell 地解析 ambient Node、版本管理器 provider/launcher 与有界启动烟测,区分 `sandbox-exec-denied`、PATH 缺失和不可验证;Skill Route 可见恢复卡仅显示当前精确 `nextCall` 或 typed status/error,完整 envelope 改由结构化 `devcodexNextAction` 承载,Codex/Claude Stop 与 PostToolUse/PreCompact carrier 不再静默丢失;`REBIND_SEMANTIC_DRIFT` 继续拒绝原地迁移,同时持久化有限退役终态,使 status/Stop 不再回放同一个 rebind。README 同步说明“帮我审批”不等于 Full access,并给出一次性 launcher 审批、稳定系统 Node、宿主目录读取、新任务重载与 semantic-drift 新路由恢复路线。当前为未发布候选,远端发布事实仍待 R4~R7。
89
- **新电脑工作流未激活 FAQ 与防回归合同**:公共 README 新增“安装最新版后没有需求概况、PC0~PC7 或 CP 流程”的状态分流,区分用户级 adapter contract、当前 cwd 的 workspace/Profile、Codex 新任务指令加载、Desktop 可接受的 `native=unverified` 与 GlobalOnly 下非故障的 `host kernel not installed`;提供 `global-adapters apply`、`init`、`status`、`doctor --json` 及 Windows 多 Node 根核对命令。公共 README 合同和负向测试同步要求 FAQ 与适配器修复入口不可回退。
910
- **v1.16.5 发布候选已归档**:SkillRoute 累计正文预算循环修复已进入 `changelogs/releases/v1.16.5.md`。新增 `SkillRouteBodyChargeLedgerV1`、`SkillRouteBudgetProjectionV1` 与结构化预算 recovery;commit/rebind 全计划预留,load_stage 首次交付原子计费,跨 generation/cache reopen 去重;预算不足、预留不足或账本不一致时 fail closed、零写入并投影 `nextCall=null` 的有限退役终态。在线发布审计另将维护者本地站点 Mermaid、DOMPurify 与 React Router 安全下限分别提升至 10.9.8、3.4.13 与 7.18.2,移除旧 RSC 临时例外并恢复零 advisory;npm 包资格验证同步修复 SkillRoute 测试、intent/registry 生成器与 closure owner 的 source/package 布局闭环,隔离安装包内完整七段路由链已通过;最终 tarball production S15、远端 CI、tag/Release、npm publish 与 fresh-install R7 仍待发布阶段完成。
1011
- **v1.16.4 发布候选已归档**:14 个审计与候选实机验证缺陷、8 项运行时/验证优化、截图所示 ContextRead/SkillRoute 三次无进展恢复修复,以及有界 MCP/宿主 I/O 与安全审计证据闭环已进入 `changelogs/releases/v1.16.4.md`;远端发布事实仍以 tag、npm registry 和最终回读为准。

‎content/duplication-inventory.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schemaVersion": "ControlContentDuplicationInventoryV1",
3-
"sourceBundleDigest": "9611cdedd2ce5568b4556666c77fa60ff9724ec0cf0cb3679251d0b544d30f70",
3+
"sourceBundleDigest": "55d630785a4e25f68fd0d8ceb14c71fc98a3a08925d208a64bf1b0f9183f2c36",
44
"thresholds": {
55
"minParagraphChars": 100,
66
"sectionThreshold": 0.94,

‎content/instructions/00-safety.instructions.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
applyTo: "**"
33
description: 安全底线与输出语言规则,定义 S01~S07、违规处理与不可豁免边界
44
priority: P2
5-
version: 1.16.5
5+
version: 1.16.6
66
---
77
# 安全底线规范(S01~S07)
88

‎content/instructions/01-common.instructions.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
applyTo: "**"
33
description: 通用规范总则,覆盖优先级、意图路由、Profile/active-root、宿主适配与治理总线
44
priority: P5
5-
version: 1.16.5
5+
version: 1.16.6
66
---
77
# 通用规范
88

‎content/instructions/01a-profile-loading.instructions.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
applyTo: "**"
33
description: 意图驱动的 Profile 加载、active-root 路径、目标项目识别与项目现实扩展规范
44
priority: P5
5-
version: 1.16.5
5+
version: 1.16.6
66
---
77
# Profile 加载与项目现实扩展
88

‎content/instructions/01b-record-router.instructions.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
applyTo: "**"
33
description: 任务切换边界、RecordRouter 分流、Improvement Intake 与提交发布边界的通用规范
44
priority: P5
5-
version: 1.16.5
5+
version: 1.16.6
66
---
77
# 任务边界与 RecordRouter
88

0 commit comments

Comments
 (0)