Skip to content

Releases: james-6-23/codex2api

v1.5.0

06 Apr 18:36

Choose a tag to compare

🚀 v1.5.0 Release Notes

🔴 Bug 修复

#49 内存泄漏修复(高优先级)

容器运行一段时间后内存持续增长直至 OOM 的问题已修复,涉及三处泄漏源:

  • keyLocks sync.Map 永不清理evictExpired() 现在同步清理不再关联存活连接的 keyLocks 条目,RemoveConnection() 同步删除
  • response_cache 缓存过大 — 条目上限从 10,000 降至 2,000,新增单条最大 200 items 截断,避免长对话历史吞噬内存
  • 内存 token 缓存惰性清理不足MemoryTokenCache 新增 60s 定时清理 goroutine,主动回收已过期 token 和锁

#43 Mac Codex 502 Bad Gateway(高优先级)

WebSocket 连接复用导致的 502 错误已修复:

  • 复用缓存连接前发送 Ping 探活,死连接立即淘汰重建
  • executor 发送失败后重试次数从 1 次增加到 2 次,每次间加指数退避(200ms × attempt)

#44 SQLite 异常

高并发下 SQLite 写入超时导致数据不更新的问题已缓解:

  • busy_timeout5,000ms 增加到 15,000ms
  • InsertAccountEventAsync 超时从 5s 增至 10s,失败后最多重试 3 次(间隔递增)

#45 账号导入不进去(~130 个账号)

删除过的账号阻止重新导入的问题已修复:

  • GetAllRefreshTokens / GetAllAccessTokens 查询增加 WHERE status <> 'deleted'
  • 导入流程增加解析数量和去重结果的日志输出,便于排查

✨ 新功能

#46 OAuth 自动回调捕获

OAuth 登录不再需要手动复制粘贴回调 URL:

  • GET /auth/callback — 新增无鉴权回调端点,OpenAI 授权完成后自动 code → token 兑换 → 账号入库 → AT 刷新
  • GET /api/admin/oauth/poll-callback — 前端轮询端点,返回 waiting / processing / completed 状态
  • redirect_uri 自动推导 — 不再硬编码 localhost:1455,从请求 Host 自动推导,适配任意部署环境
  • 回调成功后展示简洁 HTML 结果页,用户可直接关闭窗口

账号状态重置

新增手动重置异常账号状态的能力:

  • POST /api/admin/accounts/:id/reset-status — 单个账号重置
  • POST /api/admin/accounts/batch-reset-status — 批量重置,body: {"ids": [1,2,3]}
  • 前端每行操作栏新增 ↻ 重置状态按钮
  • 批量选择后出现 批量重置按钮
  • 测试连接成功(200)时仍自动恢复正常状态

📦 变更文件统计

13 files changed, 448 insertions(+), 32 deletions(-)
模块 文件
后端核心 admin/handler.go, admin/oauth.go
连接池 proxy/wsrelay/manager.go, proxy/wsrelay/executor.go
缓存 proxy/response_cache.go, cache/memory.go
数据库 database/postgres.go, database/sqlite.go
前端 frontend/src/pages/Accounts.tsx, frontend/src/api.ts
国际化 frontend/src/locales/zh.json, frontend/src/locales/en.json
测试 proxy/wsrelay/manager_test.go

🔄 升级说明

直接拉取最新镜像或代码即可,无需数据库迁移。SQLite 用户将自动受益于更长的 busy_timeout

What's Changed

Full Changelog: v1.4.0...v1.5.0

What's Changed

Full Changelog: v1.4.0...v1.5.0

What's Changed

Full Changelog: v1.4.0...v1.5.0

What's Changed

Full Changelog: v1.4.0...v1.5.0

What's Changed

Full Changelog: v1.4.0...v1.5.0

v1.4.0

03 Apr 23:19

Choose a tag to compare

🚀 v1.4.0 — 支持 Claude Code 通过 /v1/messages 使用 Codex 模型

这是一个重大版本更新,新增了完整的 Anthropic Messages API 兼容层,让 Claude Code 客户端可以无缝接入 Codex 模型。同时大幅增强了管理后台,新增使用文档、API Reference、模型映射配置等功能。


✨ 核心功能

/v1/messages 端点(Anthropic 兼容)

  • 请求翻译:Anthropic Messages → Codex Responses,支持系统提示、多轮对话、工具调用(tool_use/tool_result)、thinking/reasoning
  • 流式响应:Codex SSE 状态机实时翻译为 Anthropic SSE 格式(message_start → content_block_delta → message_stop)
  • 非流式响应:缓冲所有事件后组装完整 Anthropic JSON 响应
  • 认证兼容:同时支持 Authorization: Bearerx-api-keyanthropic-auth-token 三种认证方式
  • 模型映射:Claude 模型名自动映射为 Codex 模型名(如 claude-opus-4-6gpt-5.4),可在系统设置中自定义

路由兼容

  • 所有端点同时注册 /v1/* 和根路径 /*,Codex CLI 的 base_url 带不带 /v1 都可正常使用

📖 管理后台新增

使用文档页面(Docs)

  • Codex CLI 配置:完整的 config.toml + auth.json 示例,macOS/Linux 和 Windows Tab 切换
  • Claude Code 配置:环境变量和 settings.json 两种方式,带复制按钮的代码块
  • 认证方式说明模型映射说明curl 请求示例
  • 所有 URL 自动使用当前服务地址

API Reference 页面

  • 11 个端点完整文档:/v1/responses/v1/chat/completions/v1/messages/v1/models/health、账号管理 6 个接口
  • 每个端点:方法标签 + cURL 示例 + 多状态码响应示例(200/400/401/429 Tab 切换)
  • 滑动导航栏:固定悬浮,点击跳转,IntersectionObserver 自动高亮
  • Try it 测试面板:左右分栏,Authorization + Request Body 编辑器,API Key 下拉选择,实时发送请求查看响应

系统设置增强

  • 模型映射编辑器:可视化增删改 Anthropic ↔ Codex 模型映射条目,预填 7 条默认映射
  • API Key 显示优化:眼睛图标切换显示/隐藏完整密钥

使用统计增强

  • 端点筛选添加 /v1/messages 选项
  • Claude 模型名后显示蓝色 → gpt-5.4 映射标签

🔧 Claude Code 快速接入

export ANTHROPIC_BASE_URL=http://your-server:8080
export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY

或编辑 ~/.claude/settings.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://your-server:8080",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY"
  }
}

📋 默认模型映射

Anthropic 模型 Codex 模型
claude-opus-4-6 gpt-5.4
claude-haiku-4-5-20251001 gpt-5.4-mini
claude-sonnet-4-6 gpt-5.3-codex
claude-sonnet-4-5-20250929 gpt-5.2-codex
claude-opus-4-5-20251101 gpt-5.3-codex

映射可在管理后台「系统设置 → 模型映射」中自定义修改。


Full Changelog: v1.3.3...v1.4.0

v1.3.3

03 Apr 14:39

Choose a tag to compare

新功能

  • 账号锁定保护 (#38) — 锁定重要账号,自动清理时跳过。RT 刷新后自动锁定 free 以上套餐账号(pro/plus/team 等)。支持单个/批量锁定解锁、已锁定筛选标签
  • 系统时区选择 — 系统设置新增时区下拉,支持 23 个常用时区,存储在浏览器本地
  • 文件夹导入 — 导入弹窗新增"选择文件夹"选项,递归扫描 .txt/.json 文件。拖放区域也支持拖入文件夹
  • 限流/封禁冷却倒计时 — 账号状态旁显示冷却剩余时间
  • JSON 导入 AT 兼容 — JSON 导入无 refresh_token 时回退 access_token

优化

  • JSON 序列化全链路优化 — 移植 CLIProxyAPI 架构模式,提升代理性能
  • 快速调度器 Rebuild 优化 — 批量插入后统一排序,修复大号池启动卡死
  • 批量过期清理 + 非阻塞启动 — 支持 xhigh 推理强度
  • 主题切换动画 — 改为 View Transition 圆形扩散动画

修复

  • 时间字段迁移为 TIMESTAMPTZ,修复导入时间显示偏差
  • plus/teamplus 计划也显示 5h 用量窗口
  • tools 超过 128 个时静默截断,不再拒绝请求
  • 账号增删趋势图只统计用户操作,排除系统自动清理事件
  • Free 账号用量 ≥100% 时标记为不可用
  • HTTP/HTTPS 代理在 UTLS 传输层失效的问题
  • 401 重试优先换新账号 + 立即清理封禁账号
  • usage_exhausted 状态显示改为限流中样式

Full Changelog: v1.3.2...v1.3.3

v1.3.2

02 Apr 14:07

Choose a tag to compare

Full Changelog: v1.3.1...v1.3.2

v1.3.1

02 Apr 13:12

Choose a tag to compare

Full Changelog: v1.2.2...v1.3.1

v1.4.0

01 Apr 20:33

Choose a tag to compare

🐛 Bug Fixes

调度器:用量耗尽账号不再参与调度

  • Free 账号 7d 用量 ≥ 100% 时标记为 usage_exhausted,前端显示"用量耗尽"(橙色标签)
  • 调度器完全跳过这些账号,不再触发无意义的 429
  • 批量测试 / 用量探针返回 200 时检查用量数据,≥ 100% 不重置状态

仪表盘:账号增删趋势图修正

  • 趋势图"删除账号"仅统计用户手动删除,排除系统自动清理(auto_clean / clean_full_usage / clean_expired)产生的虚假数据

代理:tools 数量超限不再报错 (#29)

  • 上游 Codex API 限制 tools 最多 128 个,之前直接返回 400 拒绝
  • 现在在转发前静默截断到 128 个,兼容 OpenCode 等发送大量工具定义的客户端

Full Changelog: v1.3.0...v1.2.2

v1.3.0

31 Mar 20:39

Choose a tag to compare

🚀 性能优化

本版本对 JSON 序列化和流式处理链路进行全面优化,移植 CLIProxyAPI 二开版的架构模式,消除热路径上的冗余序列化操作

🙏 致谢

本次优化的核心思路源自 CassiopeiaCode/CLIProxyAPI 项目,包括 Unmarshal→map→Marshal 序列化模式、LRU 请求解析缓存、struct 化 chunk 构建等关键设计。感谢 CPA 二开项目提供的优秀架构参考!

✨ 核心改进

请求翻译层

  • TranslateRequest 重写为 Unmarshal→map→Marshal 模式(~100 次 sjson → 1 次 Marshal)
  • 新增 256 条目 LRU 请求解析缓存(SHA256 key),重试场景直接命中缓存
  • PrepareResponsesBody 统一 Responses API 路径(14+ 次 sjson → 1 次 Marshal)
  • handler.go 彻底移除 sjson 依赖

响应翻译层

  • 所有 chunk builder 改为 struct 化单次 json.Marshal(每帧 ~8 次 sjson → 1 次)
  • StreamTranslator 内置 Created 时间戳,消除 handler 后处理开销
  • 新增 BuildCompactResponse 替代内联 sjson 构建(~15 次 → 1 次)
  • extractUsageFromResult 变体避免重复解析已解析的 JSON

SSE 流处理

  • 4 处 SSE 回调改为 一次 gjson.ParseBytes 复用 Result(每事件 3-5 次扫描 → 1 次)
  • SSE 读取缓冲区 8KB → 64KB,适配 reasoning 模型的大 thinking block
  • 新增 sseLineBufPool 行缓冲池化 + 自动缩容,降低 GC 压力

连接层

  • utls_transport 连接等待改为循环重试模式,修复虚假唤醒(spurious wakeup)风险

📊 性能收益一览

热路径 优化前 优化后
Chat 请求翻译 ~100 次 sjson 1 次 Marshal + LRU 缓存
Responses 请求准备 ~30 次 sjson/gjson 1 次 Unmarshal + 1 次 Marshal
SSE chunk 构建(每帧) ~8 次 sjson + 后处理 1 次 struct Marshal
SSE 事件解析(每帧) 3-5 次 gjson.GetBytes 1 次 ParseBytes
非流式响应构建 ~15 次 sjson 1 次 struct Marshal
SSE 读缓冲区 8KB,lineBuf 无池化 64KB + 池化 + 自动缩容

📁 变更文件

  • proxy/translator.go — 翻译层全面重写(结构体定义、LRU 缓存、Unmarshal→Marshal)
  • proxy/handler.go — 移除 sjson 依赖,SSE 回调 gjson 去重,PrepareResponsesBody
  • proxy/executor.go — SSE 缓冲区扩容、lineBuf 池化与缩容
  • proxy/utls_transport.go — 连接等待循环修复
  • proxy/translator_test.go — 适配 NewStreamTranslator 签名变更

Full Changelog: v1.2.1...v1.3.0

v1.2.1

31 Mar 15:39

Choose a tag to compare

🐛 修复

  • 账号列表请求统计显示 0/0GetAccountRequestCounts 全表聚合共享 5s 超时被挤占导致静默失败,现独立 15s 超时 + 错误日志记录
  • HTTP/HTTPS 代理在 UTLS 传输层完全失效 — 修复代理连接问题

⚡ 优化

  • 新增 idx_usage_logs_account_status(account_id, status_code) 复合索引,提升请求统计聚合性能
  • JSON 导入支持 AT 兼容路径,无 refresh_token 时自动回退 access_token

📖 文档

  • 补全 Token 上传接口和管理 API 文档(Closes #28
    • 新增 POST /api/admin/accounts/at(AT-only 账号添加)完整文档
    • 补充导入接口 at_txt 格式及去重边界说明
    • 重写 OAuth 接口文档(PKCE 流程、完整请求/响应格式)
    • api/README.md 添加全部 35 个管理 API 端点速查表
  • README 和 API 文档添加 RT 添加、AT 添加、文件批量导入的 curl 示例

完整变更: v1.2.0...v1.2.1

Full Changelog: v1.1.9...v1.2.1

v1.1.9

30 Mar 23:04

Choose a tag to compare

新增

  • 主题切换圆形扩散动画 — 使用 View Transition API + clip-path,从点击位置向外扩散切换主题(500ms),不支持的浏览器自动降级

Full Changelog: v1.1.8...v1.1.9

v1.1.8

30 Mar 22:31

Choose a tag to compare

修复

  • reasoning_effort 验证放开reasoning_effort(Chat Completions)和 reasoning.effort(Responses API)不再限制枚举值,由翻译层 clampReasoningEffort 统一处理,避免客户端传入新值时被拦截

新增

  • 运维面板显示进程内存 — 系统运维内存卡片新增本进程内存占用显示(runtime.MemStats.Sys),格式:使用 X GB / Y GB · 本进程 Z MB

Full Changelog: v1.1.7...v1.1.8