Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenCodex FixMemory

这是一个面向 Windows 的 OpenCodex 2.7.43 非官方临时修复版,重点修复 OpenAI Responses 兼容模型在长流式响应和工具改写场景下可能出现的“上游已经返回,但 Codex 一直收不到结果或下一轮上下文中断”问题。

我之前在 OpenCodex 2.7.43 版本遇到了记忆中断的问题,现在自行进行了临时修复,希望可以帮助到大家。

本项目基于上游 lidge-jun/opencodex 的 OpenCodex 2.7.43,遵循原项目 MIT License。本仓库不是上游官方版本,也不代表上游维护者立场。

先看结论

  • 修复目标:Windows + Bun 1.3.14 + OpenAI Responses 流式转发中的特定挂起和连续性问题。
  • 发布版本:2.7.43-memoryfix.4
  • 安装包:bitkyc08-opencodex-2.7.43-memoryfix.4.tgz
  • 安装包 SHA256:见 SHA256SUMS.txt 和 Release 附件中的校验文件。
  • 最新发布目录聚焦回归:98/98 通过,0 失败;早期修复验收节点为 88/88。
  • 真实 Codex → OpenCodex → Ark:源码候选 6/6 精确通过;生产验证的 memoryfix.2 TGZ 4/4 精确通过,均无重试。公开版 memoryfix.4 还修复了 Ark 版本化 URL 的错误 /v1 插入和 Windows 首次安装误报。
  • 90 轮压力测试没有做到 90/90 全绿:个别轮次出现模型没有按要求复述标记,或供应商主动返回不完整响应。连续性状态没有丢失,但这不能被包装成“所有供应商、所有模型都永不失忆”。

这个问题是什么

问题表面上很像“模型失忆”:请求已经发出,供应商也开始返回,Codex 却一直等不到完整回复;重开任务后,上一轮工具或响应标识还可能接不上。

最终确认,URL、密钥和请求主体都不是这次挂起的根因。真正的问题出现在 Windows 下的一条特殊 Responses 流处理路径:

  1. 上游 SSE 流需要被检查,以便记录真实响应状态和连续性标识。
  2. 返回给 Codex 的工具命名空间和 item ID 又需要改写。
  3. 旧实现把流拆成多个分支,再叠加多层 JavaScript 流包装。
  4. 在 Bun 1.3.14 的这条组合路径上,上游可以完整返回,但客户端分支可能挂住。

修复后改为统一的 eager 单读取器:

  • 每段原始字节先进入 raw inspector。
  • 再做面向 Codex 的 client rewrite。
  • 连续性缓存始终保存上游原始 alias 和 item ID,不保存改写后的客户端值。
  • 协议正常终止、已报告终止、异常失败和客户端取消分别处理。
  • 缓冲上限为 8 MiB,取消后继续有限度 drain,避免把上游连接和状态提交留在半截。

完整技术复盘见 docs/FIXMEMORY_POSTMORTEM.md

适用范围

这次发布主要验证了:

  • Windows x64。
  • Node.js 18 或更高版本。
  • 包内固定的 Bun 1.3.14。
  • OpenCodex 2.7.43。
  • OpenAI Responses 兼容提供商。
  • Codex Desktop/CLI 经过本地 OpenCodex 代理的真实流式请求。

macOS、Linux、其他 Bun 版本及未来的 OpenCodex 版本没有完成同等强度的生产验收。上游新版本可能已经改变相关实现,不要把本补丁直接覆盖到未验证的新版本。

本 Release 的 TGZ 也是 Windows 安装载荷,不作为 macOS/Linux 通用包发布;Windows 上不会依赖 Unix 可执行权限位。

公开版还移除了上游源码中内嵌的 Google Antigravity OAuth client 凭据。若你确实使用该登录方式,需要自行设置 GOOGLE_ANTIGRAVITY_CLIENT_IDGOOGLE_ANTIGRAVITY_CLIENT_SECRET;Ark、NVIDIA 及普通 API Key 提供商不受这项清理影响。

一键安装

详细步骤见 Windows 安装说明

简要流程:

  1. Releases 下载 Windows 一键安装包并完整解压。
  2. 完全退出 Codex Desktop,并确认后台的 Codex app-server 已退出。
  3. 双击发布包中的 安装-OpenCodex修复版.cmd
  4. 等待脚本完成备份、安装、启动、健康检查和桌面快捷方式创建。
  5. 只有在脚本明确显示成功后,再重新打开 Codex。
  6. 双击桌面上的 OpenCodex FixMemory 配置 快捷方式,或在终端运行:
ocx gui

安装器不会内置任何供应商密钥或模型名称。密钥只应在你自己的 OpenCodex 配置界面中填写,不要写进 issue、日志或公开仓库。

配置 OpenAI Responses 兼容提供商

普通提供商请按上游 OpenCodex 的方式配置。若使用 Ark 的 OpenAI-compatible Responses 接口,容易踩错的是 URL 拼接:

  • Base URL:以 /api/coding/v3 结尾。
  • Responses Path:/responses
  • 最终请求地址:Base URL 与 Responses Path 拼接后的 /api/coding/v3/responses

不要额外添加 /v1。模型名称和 API Key 请使用你自己账号中的真实值,本仓库不提供、记录或示范任何私有值。

配置完成后运行:

ocx health --json
ocx status

健康检查通过只代表代理活着,不代表某个模型的完整 SSE 流已经正确结束。最终验收应发送一次真实 Codex 请求,并确认:

  • 收到了完整回答。
  • SSE 出现了协议终止事件,而不只是 HTTP 200。
  • Codex 进程正常退出,没有无限等待。
  • 后续一轮仍能接上上一轮上下文。

快捷方式

一键安装器会在当前用户桌面创建 OpenCodex FixMemory 配置 快捷方式。它用于启动或确认本地代理,然后打开 OpenCodex 配置面板。

快捷方式是安装时按当前用户环境动态生成的,发布仓库不会上传任何本机生成的 .lnk 文件,也不会写死用户名或本机路径。

如果快捷方式被删除,可双击 创建-OpenCodex配置快捷方式.cmd,或直接使用:

ocx start
ocx gui

回滚

如果修复版与你的环境不兼容:

  1. 完全退出 Codex Desktop。
  2. 双击发布包中的 回滚-OpenCodex官方版.cmd
  3. 选择安装前自动创建的备份,或恢复到上游 OpenCodex 2.7.43。
  4. 运行 ocx health --json,并重新打开 Codex 验证。

完整说明及手动兜底方式见 docs/ROLLBACK.md

验证结果

验证项 结果 怎么理解
修复早期聚焦测试 88/88 通过 修复实现阶段的验收节点
发布目录最新聚焦测试 98/98 通过,312 个断言 补齐公开目录、OAuth 分发保护、Ark URL 与安装器回归后,使用内置 Bun 1.3.14 复跑
真实源码候选请求 6/6 精确通过 Codex → 代理 → Ark,返回预期标记
生产验证 TGZ(memoryfix.2) 4/4 精确通过,无重试 真实 Codex → 代理 → Ark
公开 TGZ(memoryfix.4) 隔离安装、版本、health、stop 通过 保留记忆修复,并加入 Ark URL 与安装器修复
全仓测试 5988 通过,4 跳过,6 失败 6 个失败是与本修复无关的 Windows 测试脚手架问题
90 轮连续性压力 未完全全绿 模型输出不完整或供应商主动 incomplete;未发现连续性状态丢失

这些结果说明已经修复复现出的代理挂起与状态提交问题,但不构成对任何第三方模型稳定性的保证。

常见误区

  • “返回 HTTP 200 就说明好了。” 不对。流可能只建立成功,却没有正常发出终止事件。
  • “重启 Codex 就会加载修复。” 不对。必须先安装修复包,再重启 Codex。
  • “肯定是 Ark URL 写错了。” 这次最终确认 URL 正确;URL 曾是合理怀疑项,但不是本次挂起根因。
  • “Base URL 已经以 /v3 结尾,OpenCodex 仍可以再补 /v1。” 不对。memoryfix.4 会保留显式版本根路径;旧版曾把 Ark /api/plan/v3 错拼为 /api/plan/v3/v1/responses
  • “小请求通过,生产请求一定通过。” 不对。小请求可能没有触发工具命名空间和 payload rewrite 路径。
  • “模型没复述标记就是代理失忆。” 不一定。还要区分模型自身输出、供应商 incomplete 和代理状态丢失。
  • “把 eager relay 外面再套几层 rewrite 就行。” 仍可能保留多层流组合风险;本修复把检查、改写和失败收尾放进同一个读取器。

更多排查顺序见 完整复盘

项目文档

开源与署名

本项目基于 OpenCodex 2.7.43 修改。上游版权和 MIT License 均予以保留,详见 LICENSENOTICE.md

这是社区临时修复,不是上游官方发布。若上游后续版本吸收了等价修复,优先评估迁移回上游版本。

联系:wangwen9534@gmail.com

About

非官方临时修复版。我之前在 OpenCodex 2.7.43 版本遇到了记忆中断的问题,现在自行进行了临时修复,希望可以帮助到大家。附 Windows 一键安装、桌面配置快捷方式和完整排坑记录。

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages