Repository navigation
CodexManager v0.7.2
CodexManager v0.7.2
本次更新围绕回复丢失与 499、Responses WebSocket 接入,以及 Chat / Messages / Responses 三种接口的协议转换修复。
修复
回复完成与 499
- 修复完整终态已交付后,客户端结束读取仍被记为
499 / broken pipe的问题;终态交付后及时结束流,不再等待上游关闭连接。 - 修复部分上游只在
response.completed提供完整助手正文、缺少消息完成事件时,Codex 收不到可显示正文的问题。补齐保持原始消息 ID 和输出位置,避免重复消息。 - 处理末帧缺少 SSE 分隔符、CR/CRLF 换行和分块边界,避免客户端一直等待结束。
- 保留真实取消、正文未完整交付和上游失败的错误状态,不用统一改成 200 的方式掩盖错误。
Responses WebSocket
-
修复原生 Responses WebSocket 将 tool_choice 限定为字符串、拒绝合法指定函数对象的问题,统一保留 auto/required/none 和命名函数选择,并继续校验错误形状。
-
保留官方 Codex 账号的原生 WebSocket 路径,为聚合 API 和混合路由增加通过现有 HTTP/SSE 网关的 WebSocket 兼容接入,解决这些路由被固定返回 426 的问题。
-
兼容路径复用现有认证、模型路由、配额、并发限制和请求日志;日志标记为 WebSocket。
-
HTTP/SSE 兼容路径支持
generate:false本地预热、同连接previous_response_id连续对话、工具结果回传和中断。历史缓存有容量限制;新连接或未知历史 ID 需要完整输入,不能依赖跨连接缓存。 -
客户端断开或中断时取消对应上游处理,不自动重放已经提交的生成请求。
-
修正 Windows 重连回归中的 TCP 重置模拟和握手时序,实际测试连接重置与恢复。
三种接口与协议转换
-
修复 OpenAI SDK 仅携带通用请求追踪头时被误判为 Codex 原生客户端,导致 Chat 路径未转换、Responses 非流式请求被上游拒绝的问题。
-
为标准 Responses 客户端处理 Codex 专有附加事件和旧版结束事件,避免 SDK 解析失败后提前断开;原生 Codex 客户端保留专有事件。
-
修复 Messages 多轮历史中 assistant 内容被误转成 input_text;保留工具选择策略、调用 ID、工具参数和工具结果。
-
补齐只出现在最终 Responses 快照中的 Messages 工具调用,按 ID 去重;不将失败或截断的工具参数当作可执行调用。
-
增加 Responses 请求到 Chat Completions 上游的请求/响应转换,覆盖 JSON、SSE、正文、函数工具、用量和错误。
-
对仅返回部分正文的长度限制响应保留正文与用量,并映射为 length / max_tokens;明确失败、无有效正文的工具截断或未知不完整状态保留错误。
-
流式正文只在已发送内容与最终快照严格前缀匹配时补齐缺失后缀,避免重复正文或猜测内容。
-
保留上游原始错误,不再尝试官方 Codex 并不存在的
/backend-api/codex/v1/responses地址而将原错误覆盖成 404。 -
Responses 转 Messages 时保留 URL/base64 图片输入,非法或不支持的来源明确报错;Responses 转 Chat 时安全跳过原厂 reasoning 元数据,保留可见消息和工具历史,不把加密内容或推理摘要混入正文。
验证
实际启动 Windows CM 桌面端,使用官方 OpenAI SDK 7.53.0 和 Anthropic SDK 1.6.0 访问桌面内置网关,连接真实账号上游。最终独立验收共 50 次生成,50 次完整成功,0 次客户端重试、0 次 499;另测试 2 次预热。
| 接口 / 路由 | 生成请求 | 验证内容 |
|---|---|---|
/v1/responses HTTP |
14 | JSON/SSE 各 5 轮历史,函数调用与结果回传各 2 轮 |
/v1/chat/completions HTTP |
14 | JSON/SSE 各 5 轮历史,函数调用与结果回传各 2 轮 |
/v1/messages HTTP |
14 | JSON/SSE 各 5 轮历史,工具调用与结果回传各 2 轮 |
| 原生账号 Responses WebSocket | 4 | 文本、历史、指定函数调用及结果回传,另 1 次预热 |
| 混合路由 Responses WebSocket | 4 | 文本、历史、指定函数调用及结果回传,另 1 次预热 |
- 核对最终正文、语义、工具 ID/参数、用量和结束状态,关闭客户端自动重试。50 次生成加 1 次原生 WebSocket 预热共 51 条网关日志,全部为 200、无错误;原生预热经过上游并有输入用量,混合路由预热本地完成、零用量且不增加日志。
- 两条实际 WebSocket 连接均正常关闭;验收使用的临时密钥已删除,保留既有密钥和用户配置。
- 官方 SDK 对实际转换输出进行离线整体与逐字节解析:Chat→Responses 及附加事件规范化共 8 项通过。
- 此前在较早的交付修复版本上,独立完成真实 Codex CLI 的 50 轮 HTTP Responses 验收(包含长上下文),全部完整回复且无 499;另以独立服务和模拟上游验证首事件延迟 50 秒/65 秒、终态后上游不关闭的场景,均正常结束。这些不计入上表 50 次。
- 定向网关回归 1084 项、HTTP/WebSocket 回归 239 项、工具选择回归 11 项、图片接口回归 8 项通过;前端运行时 332 项及桌面静态构建通过。
- 完整 Rust 工作区回归 3058 项通过、0 失败;19 项需要独立数据库或外部联网环境的测试按原配置忽略,未计为通过。GitHub Actions 的 CI、全部平台构建和正式发布均已成功。
发布产物
- 正式稳定版 v0.7.2,对应提交
1514c10544b4fe2dff34c49ac7a299e33d43a6cf。 - 共 20 个下载文件:Windows 桌面版 2 个、macOS 桌面版 3 个、Linux 桌面版 8 个、服务端包 5 个、Web 包 2 个,均已上传完成。
ghcr.io/qxcnm/codexmanager-service和ghcr.io/qxcnm/codexmanager-web已发布v0.7.2,同步更新stable、latest。- CI 测试、各平台构建、正式发布均成功;发布使用已验证的同一提交和构建产物。
升级说明
- 桌面用户安装本版本;服务端和容器部署需更新实际承载请求的 CM 实例并重启。仅升级客户端不会改变远端旧版网关能力。
- Messages 入口直接配置 Chat Completions action 不在本次支持范围,会返回明确错误;请配置 Messages 兼容 action 或使用 Responses 入口。
- 标准函数工具可在支持的协议间转换;Chat 上游无法表示的自定义工具、专有历史引用等明确报错。跨厂商转换不会恢复原厂加密推理状态。
- 主动停止、网络断开和实际未交付完成的请求仍可能记录 499;本次修复针对已确认的软件缺陷,有限次数验收不等于所有网络条件下永不断开。
完整变更:v0.7.1...v0.7.2