OmX 0.20.3 版本深度解析:按 Agent 推理强度上限、tmux 面板精确权威与 Ralplan 评审完整性加固
2026/9/10 15:21:44 网站建设 项目流程

OmX 0.20.3 版本深度解析:按 Agent 推理强度上限、tmux 面板精确权威与 Ralplan 评审完整性加固

【免费下载链接】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

OmX(Oh My codeX)0.20.3 是一个面向可靠性、工作流安全与细粒度模型控制的 patch 版本,冻结范围为v0.20.2..f967cfed64ec57614af136f75d7cb81509808f7e,共合并 13 个产品 PR,其中仅一项为向后兼容的新增特性,其余均为稳定性与流程安全修复。本文以官方 release notes 为骨架,结合仓库源码逐项拆解团队模型契约的按 Agent 推理强度上限、Team 精确 live-pane 权威、Ralplan 评审完整性、邮箱唤醒合并与跨平台fsync容错等核心变更,并给出可复现的版本盘点命令与验证记录入口。

版本概览:patch 发布的范围与定位

0.20.3的发布日期为 2026-07-19,属于补丁发布(patch release),没有有意的破坏性 CLI 或包布局变更。唯一的新特性 #3143(按 Agent 上限的推理强度)是加法式、向后兼容的。完整范围包含 99 个提交,构成如下:

  • 13 个合并的产品 PR(#3135、#3143、#3153、#3186、#3187、#3191、#3192、#3196、#3201、#3211、#3215、#3217、#3218);
  • 4 个 v0.20.2 发布后证据修正(1c007fff122b0cbafb13a6db0a7baa81),仅作为发布配套资产(release-collateral inventory),不是 0.20.3 的产品头条;
  • 1 个发布开发准备提交(4b557d13),负责开启 0.20.3 开发并同步版本元数据;
  • 其余提交是 PR #3153、#3196、#3215、#3217、#3218 的 squash 组成提交。

对应的发布就绪记录在 docs/qa/release-readiness-0.20.3.md,其中记录了发布身份、冻结提交清单、必需门禁(gates)的本地证据与发布序列(publish sequence)。

新特性:团队模型契约的按 Agent 推理强度上限(#3143)

特性含义

#3143 让推理强度(reasoning effort)可以通过团队模型契约按 Agent 上限封顶,从而在一个团队内部对不同的 Agent 角色施加更细粒度的模型行为控制。例如,探索类 Agent 使用低推理强度以节省成本,而评审类 Agent 使用高推理强度以保障质量。

源码级实现证据

推理强度的合法取值定义在 src/config/models.ts:

export const PER_AGENT_REASONING_EFFORTS = ['low', 'medium', 'high', 'xhigh', 'max'] as const; export type PerAgentReasoningEffort = (typeof PER_AGENT_REASONING_EFFORTS)[number];

与根级(root)推理强度不同,根级只允许low/medium/high/xhighROOT_REASONING_EFFORTS),maxultra被标记为根级不支持的取值(ROOT_UNSUPPORTED_REASONING_EFFORTS),而按 Agent 维度则允许max,这正是"按 Agent 上限"的语义所在。

团队侧的契约在 src/team/model-contract.ts 中实现:

  • TeamReasoningEffort类型别名直接复用PerAgentReasoningEffort
  • resolveAgentReasoningEffort(agentType, codexHomeOverride)会依次读取 Agent 的推理覆盖(getAgentReasoningOverride)与 Agent 定义中的reasoningEffort,用于解析某类 Agent 的角色默认推理强度;
  • resolveTeamWorkerLaunchArgs负责把环境变量OMX_TEAM_WORKER_LAUNCH_ARGS、Leader 继承参数与角色默认值合并、归一化,最终生成 worker 的实际启动参数;
  • 关键配置键为model_reasoning_effort,通过-c model_reasoning_effort="high"形式的 Codex 配置项传递,parseTeamWorkerLaunchArgs中的isReasoningOverride/extractReasoningEffort专门识别该键;
  • 环境变量OMX_TEAM_WORKER_LAUNCH_ARGS的解析器tokenizeWorkerLaunchArgs刻意不执行 shell 语法求值,只实现有限的双引号/单引号与转义语法,避免把任意 shell 注入引入 worker 启动参数。

此外,模型选择遵循明确的优先级链(selectTeamWorkerModel):环境变量显式模型 > 继承的 Leader 模型 > 角色回退模型;当honorExactRoleModel开启且存在角色回退模型时,角色精确模型优先于继承模型。启动参数的来源可诊断化:ResolvedTeamWorkerLaunchDiagnostics中的modelSource区分env/inherited/fallback/nonereasoningSource区分explicit/role-default/none,方便排查"实际用了什么模型、什么推理强度、从哪来"。

配置示例

~/.codex/.omx-config.json(或codexHomeOverride指向的配置目录)中按 Agent 配置推理强度:

{ "agentReasoning": { "explore": "low", "code-reviewer": "high", "architect": "xhigh" } }

运行时可借助诊断字段确认实际生效值,例如通过团队运行时暴露的启动参数诊断(actualModelactualReasoningmodelSourcereasoningSource)核对每个 worker 的最终推理强度。

Team 精确 live-pane 权威(#3153 / issue #3121)

特性含义

#3153 让 Team 在施加显式生命周期效果(lifecycle effects)之前,先验证精确的 live tmux 面板(pane),并在启动、扩容(scaling)、回滚(rollback)、恢复(recovery)与拆除(teardown)全过程中保持面板归属(pane ownership)。其配套保证包括:

  • 成员变更与扩容事务持久化且失败原子(durable and failure-atomic);
  • 拆除/恢复权威可重放(replayable);
  • 通知派发绑定到所属 worker 面板的 PID。

源码级实现证据

精确面板证明(exact pane proof)实现在 src/team/exact-pane.ts:

export type ExactPaneProof = | { status: 'live'; paneId: string; pid: number } | { status: 'gone'; paneId: string; reason: 'absent' | 'dead' } | { status: 'unavailable'; paneId: string; reason: 'invalid_pane_id' | 'query_failed' | 'malformed_snapshot' | 'pane_pid_changed' | 'pane_proof_lost_during_process_teardown' | 'process_identity_unavailable'; detail?: string };

核心取证命令是tmux list-panes -a -F '#{pane_id}\t#{pane_dead}\t#{pane_pid}',即读取一次全局 tmux 面板快照,解析每个面板的 ID、dead 标志与首个进程 PID:

  • 面板 ID 必须匹配精确模式^%[0-9]+$,否则判定invalid_pane_id
  • 快照字段数、ID 合法性、dead 标志取值、PID 正整数性任一不满足即判定malformed_snapshot
  • 目标面板缺失判定gone/absent,dead 标志非 0 判定gone/dead
  • 仅当面板存活且 PID 可解析时判定live

值得注意的是批量取证函数readExactPaneProofsSync:在拓扑变更批次之前,用同一次全局快照证明所有目标面板,避免后一个目标使前一个授权失效("one later target cannot invalidate an earlier authorization")。这与"失败原子、可重放"的事务语义互为表里——先取证、后变更、按批次统一授权。团队运行时的对应测试位于 src/team/tests/tmux-source-authority-realtmux.test.ts 与 src/team/tests/runtime.test.ts。

Ralplan 评审完整性:严格评审顺序、Leader 证明与 PreToolUse 断言(#3186 / #3196 / #3187 / #3218)

特性含义

本组 PR 一起收紧了规划工作流(Ralplan)中的歧义权威(ambiguous-authority)与 live 执行回退(live-exec regression)路径:

  • Ralplan 要求严格的直接评审顺序(strict direct review order),评审链路不可跳跃;
  • 当 Leader 证明未被文档化时,流程失败关闭(fails closed);
  • PreToolUse中断言已对账的 Leader(attests the reconciled leader);
  • 通过结构化解析协作结果(parsing collaboration results structurally)修复 App 侧的 Leader 证明回归。

源码级实现证据:失败关闭的 PreToolUse

src/ralplan/documented-leader-preflight.ts 实现了文档化 Leader 证明的前置检查:

export const UNSUPPORTED_DOCUMENTED_LEADER_PROOF = 'unsupported_documented_leader_proof' as const; export const UNSUPPORTED_DOCUMENTED_LEADER_PRE_TOOL_USE = Object.freeze({ hookSpecificOutput: Object.freeze({ hookEventName: 'PreToolUse', permissionDecision: 'deny', permissionDecisionReason: 'unsupported_documented_leader_proof: Codex hooks do not expose a documented, ' + 'non-user-mintable root identity required for adapted Ralplan.', }), });

parseCodex01445AdaptedRoleIntentCommand精确匹配omx ralplan role-intent write --role <role> --parent-thread <thread-id> --json形式的命令(--parent-thread使用$CODEX_THREAD_ID占位符),只有命中该形态的 Bash 命令才会触发角色意图的PreToolUse评估。若角色已安装则拒绝为unsupported_documented_leader_proof,若角色未知则拒绝为Ralplan role-intent denied: unknown_role——两种情况都 fail-closed。

ADR 3212 的现状语义

发布说明中的"Current status / supersession (ADR 3212)"信息块与本仓库 docs/adr/3194-codex-01445-documented-leader-proof.md、docs/adr/3212-same-user-native-child-auth-boundary.md 相关联。核心语义为:

  • 本地 Leader 断言与适配的角色意图(adapted role intent)不再授权
  • 类型化路由/追踪器证据仅作生命周期/诊断用途;
  • role_routing_unavailable状态下,适配 Ralplan 的权威尝试会以unsupported_documented_leader_proof失败关闭;
  • 缺少官方主机回执时,documented_host_consensus_receipt_unavailable意味着共识不可用。

Leader 契约中的退化指导块(src/leader/contract.ts)明确写入:原生角色路由不可用时,不要伪造agent_type、不要用适配角色意图/任务名载体/标记/提示标签作为权威;当请求适配 Ralplan 权威时,应运行omx ralplan preflight --json并在出现unsupported_documented_leader_proof时停止。

协作结果的结构化解析

"通过结构化解析协作结果修复 App Leader 证明回归"对应 src/leader/contract.ts 中的原生协作工具名规范化逻辑:Codex CLI 可能把点号命名空间拍平(如collaboration.spawn_agent到达时变成collaborationspawn_agent),canonicalizeNativeCollaborationToolName会把已知的拍平名称恢复为规范点号形式,使 spawn/result 识别、能力检测都基于同一规范名;未知的拍平名称原样透传并保持失败关闭。与之配套的 Ralplan 咨询(advisory)流程实现在 src/ralplan/advisory.ts:关闭结案(closeout)以 fence 状态机(pending_closeout → recovery_required / closed / abandoned)与带 SHA-256 链的事件文件推进,任何一步后置条件不满足都会拒绝终态,证据摘要不一致时转入recovery_required

Team 邮箱与会话恢复:唤醒合并与精确指针锁恢复(#3217 / #3215)

特性含义

  • #3217:邮箱唤醒(mailbox wakeups)被合并(coalesced),并且每次唤醒都被确认(every wake acknowledged),避免同一时钟 tick 内并发路径排队多个唤醒导致重复唤醒;
  • #3215:增加精确会话指针锁恢复(exact session pointer lock recovery),修复 issue #3203。

源码级实现证据

邮箱消息模型在 src/team/state/mailbox.ts:TeamMailboxMessage携带message_idfrom_workerto_workerbodycreated_at,以及可选的notified_atdelivered_atsendDirectMessage在持锁状态下做去重:对同一发送者、同一接收者、相同正文、未投递且属于当前团队的候选消息直接复用,不重复落盘;随后通过markMessageNotifiedmarkMessageDelivered更新通知/投递时间戳。投递与创建事件同时写入团队交付日志(appendTeamDeliveryLogForCwd),便于事后审计。

唤醒合并(wake coalescing)的行为有专门测试覆盖(src/team/tests/api-interop.test.ts):

  • "keeps one mailbox wake pending until every queued message is acknowledged":并发入队多个唤醒请求时,后续请求被去重(deduped: true)并复用同一个request_id;只有当队列中的每条消息都被确认投递后,该唤醒才转为delivered
  • 测试还验证了"preserves direct and broadcast mailbox messages while coalescing their outstanding wake"(src/team/tests/mcp-comm.test.ts),即直发与广播消息在唤醒合并期间均被保留。

原生 hook 与配置安全:写入身份加固与幂等配置生成(#3135 / #3201)

  • #3135:原生子进程写入身份(native child write identity)在原生 hook、code-intel 与 wiki MCP 三个面上被统一加固,对应 issue #3127;
  • #3201:配置生成器对重复的项目信任表做幂等对账(reconciles duplicate project trust tables idempotently),对应 issue #3199。

相关实现可在 src/scripts/codex-native-hook.ts 与 src/config/generator.ts 中继续追踪;幂等对账意味着多次运行配置生成不会累积重复的信任表条目。

插件与平台健壮性:超大载荷结构化响应与 fsync EPERM 容错(#3211 / #3191)

  • #3211:插件原生 hook 对超大工具 hook 载荷(oversized tool-hook payloads)返回结构化响应,而不是让上游得到不可解析的失败;
  • #3191:在 Windows 上对常规文件fsyncEPERM予以容忍,覆盖 hooks、卸载(uninstall)与原生 hook 三个路径。

EPERM容错在仓库中的落点可参考 src/utils/file-durability.ts 及其测试 src/utils/tests/file-durability.test.ts,以及 src/cli/uninstall.ts 等使用方:对某些平台(如 Windows 文件系统语义)不允许对常规文件执行fsync的场景,将其视为可忽略而非致命错误。

其他修复:隔离标准启动的文档化(#3192)

#3192 在 CLI 与 README 两处补充了隔离标准启动(isolated standard launches)的说明。用户可参考 README.md 与 src/cli/index.ts 中的 CLI 帮助文本了解具体用法。

发布盘点:合并 PR 清单与可复现命令

13 个合并产品 PR 为 #3135、#3143、#3153、#3186、#3187、#3191、#3192、#3196、#3201、#3211、#3215、#3217、#3218;关联 issue #3121、#3127、#3181、#3194、#3195、#3199、#3203、#3204 不是额外 PR。范围中的其余提交是 PR #3153、#3196、#3215、#3217、#3218 的 squash 组成。

在克隆仓库后,可用以下命令复现完整提交清单:

git log --reverse --format='%H%x09%s' v0.20.2..f967cfed64ec57614af136f75d7cb81509808f7e

完整的提交级分类见artifacts/release-0.20.3/inventory.md(发布配套资产,不在本仓库 docs 目录内,以发布时为准)。

验证与发布就绪记录

发布就绪记录 docs/qa/release-readiness-0.20.3.md 记录了如下本地门禁证据(采集于 2026-07-19):

门禁证据
配套/范围审查冻结 99 提交范围、13 个合并 PR、分类、亮点、贡献者与 compare 链接在CHANGELOG.md、release notes、RELEASE_BODY.md与记录间一致
发布范围审查候选即dev尖端f967cfed;release-prep 仅增加 4 个发布配套文件与冻结范围清单资产,无产品运行时代码/依赖/lockfile/工作流改动;package.jsonCargo.toml版本元数据为0.20.3
本地静态门禁npm cinpm run buildnpm run lint(753 文件)、npm run verify:plugin-bundle(29 个规范 skill 目录)、npm run verify:native-agents(22 个原生 Agent、37 个 setup 提示资产)全部通过
本地 Node 测试npm run test:nodeautopilot 套件 25/25;首轮发现的 ralplan-gate 诊断措辞回归已由 #3218 上游修复,无本地测试改动带入发布

已记录的已知缺口均为环境/平台门控套件:uninstall.test.ts(macOS 路径/语法模拟用例)、codex-native-hook.test.tssmoke-packed-install.test.ts(live-CLI/版本边界)、team/__tests__/runtime.test.tsscaling.test.ts(tmux 时序敏感,超出本地墙钟预算)——这些在 v0.20.2 基线同样失败,并非 0.20.3 回归,且以 Linux CI 边界为准。

发布序列遵循 RELEASE_PROTOCOL.md 第 5 节:推送候选配套提交到dev→ 经 CI 提升到main→ 创建并推送注解v0.20.3标签触发发布工作流(原生构建、资产发布/验证、packed-install smoke、npm 发布)→ 验证非草稿 GitHub release 与npm view oh-my-codex version == 0.20.3dev快进到已发布main提交 → 将dev元数据提升到下一个开发基版本0.20.4

兼容性与升级建议

0.20.3 是无有意破坏性变更的补丁发布:CLI 与包布局保持不变,唯一特性 #3143 为加法式、向后兼容。对已运行 0.20.2 的用户,升级到 0.20.3 无需迁移 CLI 用法;新特性只需在团队模型契约中按 Agent 配置model_reasoning_effort上限即可生效。对使用 Ralplan 的团队,请留意 ADR 3212 的语义收紧:本地 Leader 断言不再授权,需要确保规划工作流运行在具备已安装类型化agent_type路由或经评审的替代工作流的表面上,否则在role_routing_unavailable状态下会以unsupported_documented_leader_proof失败关闭——这正是该版本把"歧义权威"从流程中移除的预期结果。

【免费下载链接】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),仅供参考

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

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

立即咨询