oh-my-codex 0.20.4 发布说明深度解读:死会话指针恢复、Team 启动回滚、原生钩子信任与路径规范化
2026/9/10 8:23:44 网站建设 项目流程

oh-my-codex 0.20.4 发布说明深度解读:死会话指针恢复、Team 启动回滚、原生钩子信任与路径规范化

【免费下载链接】oh-my-codexOmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more.项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex

oh-my-codex 0.20.4 是一个面向可靠性、工作流安全与原生钩子信任的 patch 版本,在v0.20.3..73cb50c125c11aca0654b8841e690f011eb5f43f冻结区间内合并了 62 个产品 PR,其中仅包含一个新增且向后兼容的特性(Herdr 生命周期/状态桥接),其余全部为稳定性修复。本文以官方发布说明为主体,结合仓库源码,逐项拆解该版本的六大核心亮点、分类修复清单、发布验证流程与可复现的 PR 清单,帮助你理解这些修复背后的实现原理,以及它们如何影响日常使用。

版本总览:一次"冻结范围明确、无破坏性变更"的补丁发布

0.20.4 于 2026-07-28 发布,属于纯补丁(patch)发布:

  • 精确冻结区间v0.20.3..73cb50c125c11aca0654b8841e690f011eb5f43f,共 130 个提交、62 个合并的产品 PR;
  • 兼容性承诺:无任何有意的破坏性 CLI 或包布局变更;唯一的特性(#3241/#3242 Herdr 桥接)是增量式且向后兼容的;
  • 发布就绪记录:本地构建、lint、类型检查、插件包、原生 agent 与 Node 测试门禁,以及外部 CI、tag、GitHub release、npm 发布证据,全部记录在 docs/qa/release-readiness-0.20.4.md。

发布就绪记录还给出了完整的发布序列(对应 RELEASE_PROTOCOL.md §5):推送候选到dev→ 等待 CI 绿 → 提升到main→ 打v0.20.4注解 tag → 触发 release 工作流(原生构建、资产发布/校验、packed-install smoke、npm 发布)→dev快进到已发布提交 → 将dev元数据提升到下一开发基版本0.20.5

Highlights 一:死会话指针锁恢复(Dead session-pointer lock recovery)

会话指针锁在进程崩溃后可能残留,成为"死锁"。0.20.4 引入了正向确认死亡(positively dead)时的恢复机制(#3261、#3262,关联 issue #3256),其关键设计约束是身份再校验、不覆盖、可逆

  • 恢复检查点可恢复(resumable):恢复过程可以中断后继续,不必从头开始;
  • 被交换的声明被保留(swapped claims preserved):不会因为恢复而误删其他会话已经接管的声明;
  • 失败的声明被回滚(failed claims rolled back):声明失败不会留下半成品状态;
  • 恢复目录原子化隔离(atomically quarantined):疑似损坏的恢复目录会被原子地移出正常路径,避免污染后续读取。

仓库中 src/utils/file-durability.ts 与 src/utils/paths.ts 提供了这类跨进程状态锁的底层支撑:canonicalizeComparablePath通过realpathSync.native将路径解析为真实路径后再做比较,确保同一文件不会因符号链接或路径写法差异而被识别为两个不同的锁目标——这正是"身份再校验"能够可靠进行的前提。

Highlights 二:Team 启动回滚与面板权威(Team startup rollback and pane authority)

Team 模式的启动清理此前可能误伤不属于自己的工作区面板。0.20.4 的修复(#3265,及 #3231、#3228、#3229、#3230、#3232,关联 issue #3224)把清理动作严格绑定到确切拥有的面板

  • 防拆分(split-proof)对账:tmux 面板发生 split 后,原面板标识可能被复制或拆分,修复后的对账逻辑能识别这类情况,避免把子面板误判为主面板;
  • 面板级 worker 存活校验:Team 在判断 worker 是否存活时,以确切面板为准(对应 src/team/worker-provenance.ts 的 worker 溯源逻辑),并明确拒绝在存在歧义时清理 worker/HUD;
  • Leader 会话指针所有权保留:重启或清理不会破坏 leader 对会话指针的持有;
  • 失效的排队通知被作废:旧的工作流产生的 stale notice 不再被误投递;
  • 终端 follow-up 边界守卫:限定 terminal follow-up 只在正确的作用域内生效;
  • 托管 Codex 绕过拒绝时 fail closed:当受管 Codex 的绕过(bypass)被拒绝时,流程安全地关闭而非继续执行。

Highlights 三:原生钩子信任与路径规范化(Native hook trust and path canonicalization)

原生(native)钩子面(PreToolUse / Stop 等 Codex 钩子)在本版本中得到系统性的信任与路径加固:

  • 精确的绝对包 CLI 状态被信任(#3333,关联 issues #3320、#3322、#3323、#3325、#3321、#3327):对于已确认安装的绝对路径包,不再做额外的怀疑性校验;
  • Conductor 变更根、macOS 策略路径、临时 fixture 根均被规范化:统一经过 src/utils/paths.ts 的 canonical 路径解析,杜绝同一目录多种写法导致的绕过;
  • 规划状态传输守卫修复(#3343、#3344、#3348–#3353):planning 状态在跨进程传输时的校验逻辑被打上补丁,防止未授权内容流入规划状态。

Highlights 四:Ultragoal 目标状态与状态绑定(Ultragoal goal-status and state binding)

Ultragoal(长期目标工作流)在本版本中获得多项状态正确性修复:

  • 原生 Codex 目标的 blocked 状态被保留(#3301、#3305):此前 blocked 状态可能被误判为成功或丢失;
  • 聚合目标绑定到规范状态路径(#3294、#3297):多个子目标聚合时,以 canonical 状态路径为准,而不是任意工作目录;
  • 聚合完成在普通最终检查点持久化(#3295):不再依赖特殊分支才记录完成;
  • 有限 Codex 目标工具在 Main-root Conductor 下被授权(#3300、#3304):只有"有限"集合内的目标工具才能在 Conductor 主根下运行,防止权限越界。

Highlights 五:权威运行时根(State authoritative root)

#3160 引入了权威运行时根(authoritative runtime root),为会话状态建立会话级权威

  • 认证 fixtures 与所有权强制:状态文件必须经过认证,且访问受所有权约束;
  • 别名绑定与 HUD 读绑定:会话别名必须绑定到权威根,HUD 读取也被绑定到同一根,避免读到别的会话的状态;
  • stale 祖先拒绝:来自过时祖先目录的状态被拒绝;
  • 插件权威隔离与受限根目标:插件只能在自己的权威范围内活动,根目标被限制在受控集合内。

这与 src/state/operations.ts 中"canonical successor-safe state lock""mode state sync 要求 canonical 常规文件"等实现一脉相承——所有状态变更都必须落到 canonical 化的常规文件路径上,杜绝目录/符号链接混淆。

Highlights 六:Herdr 生命周期/状态桥接(Herdr lifecycle/status bridge, Phase 1)

这是 0.20.4 中唯一的新特性(#3241、#3242),是一个**可选启用、尽力而为(opt-in, best-effort)**的外部适配面。其实现集中在 src/adapt/herdr.ts 与 src/adapt/herdr/ 目录:

  • 环境探测:仅当运行在 Herdr 管理的面板内(HERDR_ENV=1且设置了HERDR_PANE_ID)时桥接才激活;HERDR_SOCKET_PATH存在时优先走 socket 传输,否则退化为 CLI 传输,无环境则完全 inert(collectHerdrEvidence返回transport: "none");
  • 非阻塞、故障隔离:传输错误被捕获并返回,绝不会抛入 OMX 运行流程(见 src/adapt/herdr/bridge.ts 中HerdrBridge.reportState的实现);
  • 有序性:序列号(seq)来自跨进程持久化 per-source 存储(src/adapt/herdr/seq-store.ts),并发钩子进程或重启后的陈旧报告无法抢占新报告;
  • 权威释放:release 被门控在"没有其他 OMX 工作流仍活跃"之上,并在 src/adapt/herdr/authority.ts 记录/清除权威以支持崩溃对账——如果权威记录存在但属主进程已死,下一次运行可据此做崩溃协调。

其余修复清单(Other fixes)详解

发布说明中其余修复可归为以下几个主题,逐一列出便于对照使用:

会话生命周期

  • 恢复会话的 cancel 所有权对账,保留 proven-session 作用域(#3280、#3290、#3214);
  • 根会话防自重启(#3284、#3289);
  • 身份不确定的指针恢复采用有界精确匹配(#3324、#3332);
  • 已核验的原生会话别名被解析(#3308),持久状态提交对过期会话绑定重新校验(#3272、#3298)。

钩子与协作

  • deep-interview 的 omx cancel 钩子改为钩子自有(#3293、#3299),PreToolUse 自锁修复(#3240);
  • HUD 子进程退出时拆除分离面板(#3267),命令列表上下文中延迟 HUD resize sink 被守卫(#3292、#3296);
  • 原生 Stop 钩子:宽松 fallback Stop 审计有界且按会话限定(#3347)、指针循环有界(#3238)、暂停 Stop 指导有界(#3237)、不匹配的原生 Stop 静默(#3254);
  • 原生 sidecar 会话权威在指针冲突时限定作用域(#3244),活动会话指针禁止被 native-start 替换(#3235),协作工具名规范化(#3264),collaboration.send_message从原生子编排 deny 列表中移出(#3317)。

Ultragoal / Conductor

  • 无可达属主的独立 Ultragoal Conductor 激活被拒绝(#3311、#3312);
  • 非权威的 Ultragoal bootstrap 发布被拒绝(#3326)。

诊断与数据正确性

  • omx/gjc只读发现不再被误分类为写入(#3313、#3314、#3318);
  • 凭据切换前先校验元数据(#3276);
  • 过大的原生钩子 stdin 被排空(#3273);
  • 移除不存在的原生赋值引导(#3346)。

平台与工具链

  • Windows 原生钩子会话属主 PID 被正确解析(#3260);
  • Bun 安装属主在更新期间被保留(#3259);
  • tmux separator argv 边界被保留(#3258);
  • Ralplan 预检引导限定作用域(#3255);
  • Team 的 PowerShell psmux 面板创建改为安全方式(#3145);
  • fresh 默认 Autopilot 在官方 host 共识回执校验器确定性不可用时,会在 deep-interview 与 Architect/Critic 评审之前先失败(#3270);
  • 受管缓存二进制缺少.sha256伴生文件时被拒绝,native-assets 在未验证的缓存权威上 fail closed(#3285)。

确定性测试与依赖升级

  • PATH 候选预算 smoke 测试改为确定性(#3330);新增 Darwin/Linux 可移植 PTYscript(1)argv 辅助(#3328、#3331);Windows 持久化同步改为确定性(#3233);
  • 依赖升级:libc 0.2.186→0.2.189、serde 1.0.228→1.0.229、serde_json 1.0.150→1.0.151、@modelcontextprotocol/sdk 1.29.0→1.30.0、@biomejs/biome 2.5.3→2.5.4、c8 11.0.0→12.0.0、@types/yauzl 2.10.3→3.4.0、@types/yazl 2.4.5→3.3.1。

合并 PR 清单与可复现命令

发布说明给出了完整的合并 PR 集合(#3145、#3160、#3214、#3216、#3219、#3228–#3233、#3235、#3237、#3238、#3240–#3242、#3244、#3248–#3252、#3254、#3255、#3258–#3260、#3262、#3264、#3265、#3267、#3271–#3273、#3276、#3277、#3280、#3284、#3285、#3289、#3290、#3292–#3300、#3304、#3305、#3308、#3311–#3314、#3317、#3318、#3324、#3326、#3328、#3330–#3333、#3335、#3337、#3339、#3340、#3343、#3346–#3353),并提供了可直接复现清单的命令:

git log --reverse --format='%H%x09%s' v0.20.3..73cb50c125c11aca0654b8841e690f011eb5f43f

同时说明:issues #3301、#3309、#3220、#3320–#3323、#3325、#3327、#3293、#3284、#3292、#3294、#3272、#3311、#3313、#3314、#3241、#3256、#3224、#3270、#3300 属于关联问题而非新增 PR,便于核对时排除重复计数。提交级完整分类可参考发布记录中提及的artifacts/release-0.20.4/inventory.md(在发布就绪记录 docs/qa/release-readiness-0.20.4.md 中亦被引用)。

验证与发布门禁

0.20.4 的发布就绪记录明确区分了"本地门禁"与"发布序列证据"两类验证:

门禁内容状态(记录时)
范围审查130 提交 / 62 PR 与 CHANGELOG、release notes、RELEASE_BODY 交叉核对本地通过
发布范围审查release-prep 仅添加发布附属文件与版本载体提升,不含产品运行时代码变更;版本元数据在 package.json、package-lock.json、Cargo.toml、Cargo.lock、plugin.json 中均为 0.20.4本地通过
本地静态门禁npm cinpm run buildnpm run lintnpm run verify:plugin-bundlenpm run verify:native-agents待执行
本地 Node 测试npm run test:node(受影响面)待执行
Release body 生成node dist/scripts/generate-release-body.js --template RELEASE_BODY.md --current-tag v0.20.4 --previous-tag v0.20.3 --repo Yeachan-Heo/oh-my-codex待执行
CI / tag / releasedevmainCI 绿、注解v0.20.4tag、release 工作流完成原生构建与资产发布发布序列中记录
npm 发布npm view oh-my-codex@0.20.4返回 0.20.4,且隔离环境安装可启动发布序列中记录

已知缺口方面:Linux CI 边界是平台门控测试套件的权威依据,本地若出现与 v0.20.3 基线完全一致的重现失败,则不被视为 0.20.4 回归。

贡献者

本区间绝大多数提交来自维护者 Bellman(@Yeachan-Heo),另有 @achieve0410、@bohe76、@chief-impact7、@don9x2E、@huajuan404、@ictechgy、@lux-02、@masterFoad、@WangErgouaaaa 的外部贡献,以及 @app/dependabot 的依赖更新。

小结与升级建议

0.20.4 是一次典型的"可靠性补丁":以死锁恢复、Team 面板权威、原生钩子信任、路径规范化、Ultragoal 状态绑定、权威状态根六大主线收束了一个发布周期内积累的稳定性问题,并以新增且默认 inert 的 Herdr 桥接为后续外部适配铺路。由于该版本无破坏性 CLI 或包布局变更,可安全升级;若你依赖 Team 模式的启动清理、原生钩子面或 Ultragoal 工作流,建议优先验证本节列出的对应修复项(#3265、#3333、#3294–#3305)在你的使用场景中的行为。完整的版本脉络可继续查阅 CHANGELOG.md、RELEASE_BODY.md 以及下一版本记录 docs/release-notes-0.20.5.md。

【免费下载链接】oh-my-codexOmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more.项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询