原版 Codex 好用,但换号和切模型太别扭
日常写代码时我很喜欢用原版 OpenAI Codex CLI 和桌面端,但它有三个地方一直卡得我特别难受:
第一,手头有多个官方 OAuth 账号和第三方 API 网关时,来回改配置文件切号极其繁琐;第二,很多第三方中转站只提供传统的 /v1/chat/completions 接口,根本喂不进强制要求新版 Responses 协议的 Codex;第三,同一个对话(Thread)聊到一半如果想换个第三方模型接着干活,上下文里残留的官方 hosted tools 记录会直接把新模型搞崩报错。
本地 Rust Router 实时协议转换与工具清洗
2026 年 9 月 12 日(Commit 2f2edbe),我动手写了一套专门给原版 Codex 当“全能立交桥”的桌面工具——Codex OmniBridge。底层核心用 Rust Workspace(拆分为本地 Router、Core 和 CLI)编写,外面套了一层轻量无边框 Electron 桌面壳与自托管 Material 3 控制面板。
最核心的脏活全由本地 Rust Router 扛了下来:当 Codex 发来 Responses API 请求时,Router 能实时把它转译给只懂 Chat Completions 的第三方接口,再把返回的 SSE 文本流实时组装回 Codex 认识的 Responses 事件流;而且在同一个对话中途切换模型时,Router 会自动清洗过滤掉上下文里不兼容的 hosted tools 历史,让对话无缝接力。
0.24 秒破除管道死锁与 Windows 凭据回退
立项后的 9 月 16 日至 20 日(v0.1.0 ~ v0.1.2),我对着代码做了一轮地毯式自查,一口气清零了 97 项审计缺陷,其中有两场硬仗印象最深:
- 64KB 子进程管道死锁:早期探测 CLI 状态时,偶发出现卡满 30 秒才超时的怪象。排查发现是子进程一次性吐出的输出填满了操作系统 64KB 管道缓冲区,而父进程还在傻等子进程先退出再去读管道,两边当场死锁。改成异步边跑边读(drain)之后,耗时直接从 30 秒降到了 0.24 秒。
- Windows 凭据管理器 2560 字符上限:在 Windows 上存官方 OAuth Token 时,发现巨长的 JWT 字符串经常超出了 Windows Credential Manager 单条 2560 字符的硬上限导致保存失败。我为此写了一套自动回退机制:一旦超长,自动转存到本地私有文件,并调用 Windows 底层宽字符 API 为该文件打上仅限当前用户 SID 访问的严格 ACL 权限,还顺手加上了带退避重试的文件锁,完美扛住了 Windows Defender 实时扫盘时的文件占用冲突。