- protocol/ bundles re-derived from official 0.166.0 binary (generate-json-schema); v1 83 defs, v2 665 -> 677 defs, 0 removals; all 21 host methods present, params refs unchanged - README pin + start.sh comment follow the verified binary - docs/upstream-166-alignment.md: 0.166.0 alignment record - tests/test_host_protocol_mapping.py: 21 host methods pinned against protocol/ bundles (corrects alignment table's 17-count: 18 requests incl. initialize + 3 inbound notifications) - config.example.toml: [[skills.config]] disable semantics doc comment only (no effective config change) - No production binary touched; no push, merge, or deploy.
9.1 KiB
上游对齐:openai/codex 稳定版 0.166.0(核查日 2026-11-05)
结论先说:已用 0.166.0 官方二进制重导 schema 并验证通过;本批只改 宿主侧 pin、文档、schema 与映射测试,不动任何生产二进制。
生产二进制更换(/usr/local/bin/codex、172、170、Docker 镜像内 二进制)是部署动作,需要用户另外点头 + 窗口,不在本批;本批的 验证边界是本地 scratch 验证(见下文“验证”),不是生产换装实证。
基线与上游位置
- 本项目此前锚定:
codex-cli 0.164.0-alpha.9(2026-10-25 实测,protocol/的 schema 就是从它用codex app-server generate-json-schema导出的;见docs/upstream-164-alignment.md)。 - 上游稳定版:
0.165.0(2026-10-27)、0.166.0(2026-10-29, 当前最新稳定版)。本批一次跨两个稳定版锚定到 0.166.0,不 在 0.165.0 停留(0.165.0 的内容已全含在 0.166.0 里)。 - 上游 alpha 线(不作为目标):0.167.0-alpha.5 与 0.168.0-alpha.1 (均 2026-11-03),无 0.167/0.168 稳定版。按 164 文档立过的 原则只记录、不跟进;alpha 跟踪办法见批总结,不进本文档。
- 上游来源:https://github.com/openai/codex/releases(npm 官方包
@openai/codex@0.166.0+ 平台包@openai/codex@0.166.0-linux-x64, npm integrity sha512 已验)。
稳定版 0.166.0 改动 → 本项目状态
| 上游改动 | 对宿主层的影响 | 结论 |
|---|---|---|
| app-server 线程启动/关闭竞态修复、已完成 runtime 及时释放(#57787、#57788) | 宿主 host.py 是长循环、一个 app-server 进程托管多 thread,直接受益 | 升级收益,无需改代码;重测 thread 生命周期一项(已做,见验证) |
| resume/fork 时保留已确认的 approval 与权限设置(#57227) | 宿主 resume/fork 流程不再被重置坑绊 | 升级收益,无需改代码 |
| 独立 executor 随规范 CLI 与 app-server 发布包一起发(#57837) | 实查:不是新文件,是二进制内 exec-server 子命令;三件套文件形态不变,宿主只驱动 app-server |
不影响安装形态,无需改代码 |
| GPT-6.1 Terra 进入 bundled、Vertex AI、Bedrock 三个目录(#57293);Vertex AI provider(0.165.0 #56265) | 宿主模型走中转路由,引擎版本不卡 Terra 可用性;内置列表回退路径 0.165+ 才含 Terra | 不相关,无需改代码 |
codex queue --resume(0.165.0 #57232) |
宿主任务队列自建(host.py 循环 + worker_sweep admin CLI),不依赖上游 queue | 不相关,功能等价但实现无关 |
codex doctor --network-only(#57606) |
运维诊断工具,不是宿主运行路径 | 观察项,不接 |
| 键盘 transcript 选择、Markdown 渲染一致化、安全拦截说明 | 都是 TUI 交互面,app-server 协议与宿主层不依赖它们 | 不相关,无需改代码 |
| memory v2 对新 profile 默认开启 + 外部记忆导入(0.165.0) | 宿主 auto_memory 为自建租户记忆,未对齐上游 memory v2 格式/导入 | 不对齐,见对齐表 A10;本批不动 |
| 实验性 attached thread forks(0.165.0 #56351) | 只在 --experimental schema 里出现(ThreadForkParams.attachToSource),默认 schema 无;且 attached fork 在普通 thread/list 里不可见,与宿主“fork 即新建 worktree 的可见线程”模型冲突 |
不接,评估见批总结;本批不写代码 |
| 构建基线 Node.js 24.22.1、Rust 1.95.0 | 与本机 Node 24.22.1 一致;宿主是 Python,不编译 Rust | 不相关 |
schema 重导结果(0.166.0 二进制实导,非树对比)
导出方式:codex app-server generate-json-schema --out <dir>,
原样取其中两 bundle 替换 protocol/(v1 + v2,与旧形态一致,
不引入 per-type 散文件)。
| 对比项 | alpha.9 时代 bundle | 0.166.0 重导 bundle | 结论 |
|---|---|---|---|
| v1 bundle 定义数 | 83 | 83 | 仅 ClientRequest 变(新增 feedback/save 一个方法) |
| v2 bundle 定义数 | 665 | 677 | +12 定义、0 删除、16 个定义有改动 |
| v2 新增定义 | — | AccountSession、AccountSessionWorkspace(Kind)、ApplicationStorageRequirements、FeedbackSaveParams/Response、ModelProviderError、OtelExporter、OtelHttpProtocol、OtelRequirements、OtelTlsConfig、OtelToolResultLogConfig | 均为新能力/新遥测,无 host 用项 |
| v2 改动定义 | — | Account、AdditionalContextEntry、ApplicationRequirements、ClientRequest、CodexErrorInfo、ConfigRequirements、HookMetadata、HookRunSummary、HooksListParams、NetworkRequirements、ProcessExitedNotification、ReviewDelivery、ReviewStartParams、ReviewStartResponse、ThreadItem、ThreadUsage | 除 ReviewDelivery 外全是新增可选字段或描述改动(见下) |
| 方法集 | ClientRequest 105 | ClientRequest 106(+feedback/save) | 0 删除;ServerRequest 10→10、通知 85→85 全不变 |
| host 方法 params 引用 | — | 21 个 host 方法的 params 引用全部未变 | 零漂移 |
唯一语义变化:ReviewDelivery 枚举从 ["inline", "detached"]
变为 ["inline"](detached 已移除),ReviewStartParams.delivery
与 ReviewStartResponse.reviewThreadId 的描述同步改写。宿主早已
不发 detached(host.py start_review 注释“不发 detached(已废弃)”、
cloud/review.py 同款说明),故无影响;其余改动如
ThreadItem 新增 completedAtMs/startedAtMs(可空)、
ThreadUsage 新增 nativeUsageUsdMicros(可空)、
CodexErrorInfo 新增 modelNotFound/policyCapacityUnavailable
均为向后兼容加法。
方法数勘误:2026-11-05 对齐表写“17 个方法/通知”并不准确。
实查 host.py 触及 21 个方法字符串:18 个发出请求(含
initialize 握手)+ 3 个入站通知;对齐表列出的 18 项漏了
initialize、app/list、mcpServerStatus/list 三个。
tests/test_host_protocol_mapping.py 以实查 21 项为准钉死。
三件套核对(0.166.0 linux-x64 平台包实查)
bin/codex(319,346,888 字节,codex-cli 0.166.0)、bin/codex-code-mode-host(77,997,328 字节)、codex-resources/bwrap(529,776 字节)三件齐全,成套。- 包内另有 voice bundle(
codex-voice-host及 gstreamer 库, 语音为刻意不做项,不理会)与codex-path/rg,均不影响三件套。 - 0.166.0 发布包不改变安装形态:宿主的
bin/codex优先、CODEX_BIN环境变量、PATH回退三档逻辑(host.py default_codex_bin、start.sh)无需改动。
验证(本地 scratch 验证,无模型调用)
- 沙箱 smoke:scratch 三件套布局下
codex sandbox echo成功返回,exit 0(bwrap 配对工作)。 - app-server smoke:仓库自带
client.py --list-threads对 scratch 0.166.0 二进制跑通:initialize 成功(codexHome 为 scratch 目录、platform=linux)、thread/list 返回空数据,exit 0。 - 技能发现复核:0.166.0 下
<codex-home>/skills/(我方播种 位置)与$HOME/.agents/skills/(文档 USER 位置)放的测试 技能均被skills/list发现(scope=user、enabled=true), 故播种机制无需改动;系统技能(skill-creator 等 5 个)照常出现。 - 方法映射重测:
tests/test_host_protocol_mapping.py(21 项 钉死)+ 完整三套件(数见批总结)。
本批实际改动(只改宿主侧,不动官方二进制)
protocol/:两 bundle 替换为 0.166.0 二进制原样导出 (749,825 + 646,070 字节)。README.md:实测版本 pin 从0.164.0-alpha.9改为0.166.0(验证通过后才改,见批总结;不是提前改 pin 充数)。start.sh:三件套注释版本号同步为 0.166.0(仅注释)。config.example.toml:补[[skills.config]]禁用语义的 注释示例(仅注释,不改任何生效配置)。tests/test_host_protocol_mapping.py:新增,21 项钉死。- 本文件:作为 0.166.0 的对齐记录,后续每次上游稳定版发布时 按同一张表复核。
明确不做的事(诚实边界)
- 不换任何生产/服务器二进制。
/usr/local/bin/codex、 172、170、Docker 镜像内二进制一律不动;本批二进制只活在 scratch 目录,批后清理。 - 不追 alpha。 0.167/0.168 alpha 只记录、不采用。
- 不改播种机制。 0.166.0 下
<codex-home>/skills/仍被 发现,无需改skill_seed.py。 - 不接 attached forks。 实验性、仅
--experimentalschema、与宿主可观测模型冲突;重估触发条件见批总结。 - 不改阈值、不改 #238 auto_apply、不改 #247 语义、不改 v1.1 契约、不改 SKILL.md 第五项。
- 不合并、不部署、不推送。 本批留在隔离 worktree 的
codex-opensource-align2分支上;live 仍是 aba06d9,不碰。
下一步(需要用户定)
- 是否把生产二进制从 alpha.9 换到 0.166.0(主机部署动作, 需窗口 + 重跑 resume / goal / 成本实弹)?那一步与控制面 部署是两件分开的决策,不可悄悄混进一次部署。
- gapfill2 线是否合并(B1)仍待用户;本批不替用户定。