Skip to content

Releases: james-6-23/codex2api

v2.2.7

05 Jun 00:54

Choose a tag to compare

Codex 反代网关:WS 上游错误静默换号重试、OpenAI Responses compact 路由、模型/额度判断加固,以及安全扫描修复

Features

  • WebSocket 静默重试控制(#195:新增 codex_ws_hide_upstream_errorscodex_ws_silent_retry_enabledcodex_ws_silent_max_retries 三个系统设置。开启后,WS 上游在首 token 前遇到可恢复错误时会在服务端换账号、重建上游连接并继续等待,客户端连接不再立即收到上游失败帧。
  • WS 错误隐藏与友好兜底:重试耗尽后,客户端只收到统一友好提示 上游服务临时繁忙,请稍后重试;原始上游错误仍保留在后端日志与用量记录中,方便排查。
  • WHAM-only 用量探针控制:新增后台用量探针控制,支持优先/仅使用零额度成本的 WHAM 用量端点,减少探针走 /responses 的额度影响。
  • WebSocket 设置入口:管理后台的 WebSocket(Codex 上游)设置卡片新增静默重试、隐藏错误和最大重试次数控制。

Fixes

  • WS 上游失败处理(#195usage_limit、429、5xx、读取错误、超时、EOF 等首包前失败会按配置静默换号重试,不再直接触发客户端反复 Reconnecting。
  • Responses 路由和模型加固(#198:放宽本地 plan_type 约束,避免本地记录不准导致真实上游调用被提前拦截;同时加固 gpt-5.3-codex-spark 等新 Codex 模型的 Responses 路由与 TTFT 判断。
  • OpenAI Responses compact 路由:通过 base_url + api_key 添加的 OpenAI Responses API 账号现在也能走 /v1/responses/compact,不会再误发到 ChatGPT-only compact 路径。
  • 额度耗尽识别usage_limit_reached 即使包在 response.errorresponse.status_details 或 5xx 形态 payload 里,也会按账号额度耗尽处理。
  • 账号工具栏布局:账号页搜索、筛选和操作按钮在窄屏下换行更稳定。
  • 安全扫描修复:React Router 升级到 patched 版本,Go toolchain 提升到 1.26.4,修复 npm audit 与 govulncheck 报错;Docker 构建镜像也同步使用 Go 1.26.4 builder。

Installation

Docker (GHCR):

docker pull ghcr.io/james-6-23/codex2api:2.2.7
# 也可使用 latest tag
docker pull ghcr.io/james-6-23/codex2api:latest

Manual download:
从下方 Assets 选择对应平台的压缩包,使用 SHA256SUMS.txt 校验。

Platform Asset
Linux x86_64 codex2api_2.2.7_linux_amd64.tar.gz
Linux arm64 codex2api_2.2.7_linux_arm64.tar.gz
macOS x86_64 codex2api_2.2.7_darwin_amd64.tar.gz
macOS arm64 codex2api_2.2.7_darwin_arm64.tar.gz
Windows x86_64 codex2api_2.2.7_windows_amd64.zip

Documentation

v2.2.6

02 Jun 17:05

Choose a tag to compare

Codex 反代网关:Codex 上游 WebSocket 长连接模式、空闲连接保活、传输层调优与上游错误透传,配套 TLS 会话复用与账号查找优化

Features

  • Codex 上游 WebSocket 模式:系统设置新增 codex_force_websocket 开关,开启后对 Codex 上游的请求改走 WebSocket 长连接(复用 wsrelay 连接池),减少每次请求的 TLS/连接握手开销,更接近官方 CLI 体验。默认关闭,关闭时仍走原有 HTTP 路径;下游用普通 https://.../v1/responses(或 /v1/chat/completions)HTTP POST 发起的请求会被透明地转发为 wss:// 上游连接,客户端无感。
  • WS 空闲连接保活:新增 codex_ws_keepalive_enabledcodex_ws_keepalive_interval_sec(默认 60 秒),后台定期对已建立的空闲上游 WebSocket 连接发送 Ping 保活。保活不会发起新连接、不发送任何业务帧,零账号额度消耗,降低复用时的冷启动延迟。默认关闭。
  • WS 请求徽章:用量日志中,走 WebSocket 的请求会在状态码与模型之间显示一个 ws 小徽章,便于区分传输方式。
  • WebSocket 设置独立卡片:将 WS 相关设置从拥挤的“调度策略”卡片中抽出,独立成全宽的“WebSocket(Codex 上游)”卡片。
  • 内置 Codex CLI 版本升级:内置 Codex CLI 版本从 0.128.0 升级到 0.136.0,指纹更真实,并可使用更新的模型。

Fixes

  • WS 上游错误透传:上游 WebSocket 错误帧现在会作为 response.failed SSE 事件透传给客户端并保留原始错误内容,不再被转成底层 read error 而表现为“空响应 / 卡 32-90 秒”这类难以排查的现象。任何上游错误(限流、模型不支持、参数错误)现在都能被客户端看到。
  • WS 传输层健壮性:修复 wsrelay 拨号器副本丢失 NetDialContext 导致 TCP KeepAlive 从未生效的隐藏 bug;为 48-91KB 的大上游帧设置 64KB 读写缓冲与共享写缓冲池;将忙连接的固定 10ms 自旋等待改为指数退避加最大等待超时;将读超时从 60 秒放宽到 120 秒,避免长推理 turn 被误判断开;并在 WS 路径静默回退 HTTP 时打印告警。
  • TLS 会话复用:标准与 uTLS 传输现在共享 ClientSessionCache,重连走 TLS resumption(1-RTT),降低冷连接握手成本;同时调大 MaxIdleConnsPerHostIdleConnTimeout,并将 HTTP 服务改为显式 ReadHeaderTimeout/IdleTimeout + 优雅关闭(WriteTimeout 保持 0,确保流式响应不被中途切断)。
  • 账号查找 O(N) → O(1):内存账号池新增 DBID → 账号 索引,会话粘性热路径与所有 FindByID 查找不再线性扫描账号列表。

Installation

Docker (GHCR):

docker pull ghcr.io/james-6-23/codex2api:2.2.6
# 也可使用 latest tag
docker pull ghcr.io/james-6-23/codex2api:latest

Manual download:
从下方 Assets 选择对应平台的压缩包,使用 SHA256SUMS.txt 校验。

Platform Asset
Linux x86_64 codex2api_2.2.6_linux_amd64.tar.gz
Linux arm64 codex2api_2.2.6_linux_arm64.tar.gz
macOS x86_64 codex2api_2.2.6_darwin_amd64.tar.gz
macOS arm64 codex2api_2.2.6_darwin_arm64.tar.gz
Windows x86_64 codex2api_2.2.6_windows_amd64.zip

Documentation

v2.2.5

02 Jun 02:04

Choose a tag to compare

Codex 反代网关:Codex 模型映射与思考强度配置、账号配额保护、compact 请求识别、邮箱域名标签,以及账号池/计费稳定性修复

Features

  • Codex 模型注册与思考强度 (#165):系统设置新增模型注册/思考强度配置,可从上游同步基础模型并配置带 reasoning effort 的模型列表
  • Codex 模型重定向映射 (#189, #190):新增 Codex 模型之间的重定向映射,下游请求模型可映射到另一个 Codex 模型,同时保留请求的思考强度
  • 账号配额自动暂停:支持按 5h/7d 用量阈值自动暂停账号调度,提供全局默认、单账号禁用、编辑账号设置和批量设置入口
  • compact 请求识别:使用统计新增 compact 徽章,并在请求记录中展示模型/思考强度相关信息,便于区分压缩上下文请求
  • 邮箱域名标签 (#191):账号管理自动解析邮箱域名,支持按域名筛选、显示封禁/总数统计,并可在账号管理界面显示或隐藏域名标签
  • 配置示例更新:更新 Codex 配置示例,覆盖当前模型映射和思考强度配置方式

Fixes

  • service tier 计费语义 (#183):拆分 requested / actual / billing service tier,避免上游 actual tier 与下游请求意图混用导致计费口径不清
  • SQLite 与管理后台账号池稳定性 (#185, #186):优化账号用量窗口读取和 SQLite 访问路径,减少大账号池下简单查询被写入队列阻塞导致 503 的情况
  • 账号状态与探测记录:更稳定地记录 unauthorized 错误,并降低账号列表批量渲染和状态更新的额外开销
  • Refresh token 复用处理:复用 refresh token 现在按不可重试凭据错误处理,避免无效重试路径扩大异常影响

Installation

Docker (GHCR):

docker pull ghcr.io/james-6-23/codex2api:2.2.5
# 也可使用 latest tag
docker pull ghcr.io/james-6-23/codex2api:latest

Manual download:
从下方 Assets 选择对应平台的压缩包,使用 SHA256SUMS.txt 校验。

Platform Asset
Linux x86_64 codex2api_2.2.5_linux_amd64.tar.gz
Linux arm64 codex2api_2.2.5_linux_arm64.tar.gz
macOS x86_64 codex2api_2.2.5_darwin_amd64.tar.gz
macOS arm64 codex2api_2.2.5_darwin_arm64.tar.gz
Windows x86_64 codex2api_2.2.5_windows_amd64.zip

Documentation

Full Changelog: v2.2.4...v2.2.5

v2.2.4

27 May 20:48

Choose a tag to compare

Codex 反代网关:WS 上下文续接修复、首字超时重试优化、账号测试恢复、API 图片预览与 long context 计费明细

Features

  • 调度器跳过 warm 层级 (#176):新增跳过 warm 健康层级的调度选项,适合希望账号维持 healthy 调度层级的场景
  • API Reference 图片响应预览/v1/images/generations/v1/images/edits 等返回 b64_json 或图片 URL 时,调试面板会直接渲染图片预览,并保留原始 JSON 便于排查
  • long context 计费明细 (#178):使用统计的成本 tooltip 会标注 Long context(输入 > 272,000) 触发原因,并展示实际采用的输入 / 输出 / 缓存读取单价
  • CHANGELOG 位置整理:项目变更记录移动到仓库根目录,便于 Release 和文档引用保持一致

Fixes

  • WS 模式上下文续接 (#182):修复 WebSocket 模式下 previous_response_id 对话上下文丢失的问题,保持响应续链一致性
  • 首字超时重试 (#172):首 token 超时后按账号池轮次重试;账号池尝试完后会清理临时不可用标记再进入下一轮,减少单账号/少账号池时直接返回无可用账号的问题
  • 封禁账号测试状态恢复:账号测试成功后会恢复先前因封禁测试留下的状态,避免成功测试后仍显示异常
  • 批量账号测试边界:批量测试增加边界控制,避免重复/超量测试导致调度和状态统计不稳定
  • 版本弹窗裁剪问题:版本提示弹窗改为 portal 渲染,避免被侧栏 overflow 裁剪

Installation

Docker (GHCR):

docker pull ghcr.io/james-6-23/codex2api:2.2.4
# 也可使用 latest tag
docker pull ghcr.io/james-6-23/codex2api:latest

Manual download:
从下方 Assets 选择对应平台的压缩包,使用 SHA256SUMS.txt 校验。

Platform Asset
Linux x86_64 codex2api_2.2.4_linux_amd64.tar.gz
Linux arm64 codex2api_2.2.4_linux_arm64.tar.gz
macOS x86_64 codex2api_2.2.4_darwin_amd64.tar.gz
macOS arm64 codex2api_2.2.4_darwin_arm64.tar.gz
Windows x86_64 codex2api_2.2.4_windows_amd64.zip

Documentation

Full Changelog: v2.2.3...v2.2.4

v2.2.3

26 May 23:26

Choose a tag to compare

Codex 反代网关 — 调度优化、运维可观测性增强、UI 体验打磨

Features

  • 用量重置雷达:新增 /subscriptions 页面,集中查看 Codex Reset Radar、RSS 事件与重置时间钩子;检测到「窗口关闭」信号后,后端会清理全部账号的旧冷却与用量缓存并自动跑一轮连接测试,使账号池立即对齐新的重置边界
  • 批量操作流式进度:账号管理的批量刷新 / 批量测试 / 启停 / 锁定 / 重置等操作改为流式事件下发(success / banned / rate_limited / failed),后台无需等整批完成即可看到逐个账号的进度
  • Token 数字紧凑显示:系统设置中加入「使用统计数字格式」开关,开启后 token 数自动按 K / M 单位简写,方便看大量级
  • 账号管理卡片视图:账号列表新增「卡片 / 表格」切换按钮,xl 屏卡片模式一行 5 个;选择会持久化在 localStorage
  • 状态徽章错误提示:账号管理列表中,鼠标悬停封禁(unauthorized)/ 错误(error)状态徽章会弹出完整的上游错误信息 tooltip,样式与使用统计的状态码 tooltip 一致
  • Anthropic speed: fast 透传 (#170):Anthropic 风格的 speed: fast 请求会映射为 Codex 上游的 priority 计费档,确保 fast 客户端拿到 fast 通道

Fixes

  • 修复版本徽章按钮在 GitHub 最新版未拉到(被网络拦截 / 限流 / 仍在请求中)时点击没有反应的问题;现在始终可以点开弹窗,远端版本未知时显示「正在检查最新版本…」
  • 修复首 token 超时与调度竞争被错误归并为「无可用账号 503」的问题(#167
  • 修复 /v1/responses WebSocket 入站返回 404、以及 CODEX_UPSTREAM_TRANSPORT=ws 强制 WS 时上游 101 被误判为未知错误的问题(#171
  • 修复 Anthropic 响应内容被改写、以及失活账号在探测里没有被标记的问题
  • 修复 wham 用量窗口的分类逻辑:免费账号的 7d 主窗口不再被错认成 5h(按 limit_window_seconds 而不是字段位置识别)

Installation

Docker (GHCR):

docker pull ghcr.io/james-6-23/codex2api:2.2.3
# 也可使用 latest tag
docker pull ghcr.io/james-6-23/codex2api:latest

Manual download:
从下方 Assets 选择对应平台的压缩包,使用 SHA256SUMS.txt 校验。

Platform Asset
Linux x86_64 codex2api_2.2.3_linux_amd64.tar.gz
Linux arm64 codex2api_2.2.3_linux_arm64.tar.gz
macOS x86_64 codex2api_2.2.3_darwin_amd64.tar.gz
macOS arm64 codex2api_2.2.3_darwin_arm64.tar.gz
Windows x86_64 codex2api_2.2.3_windows_amd64.zip

Documentation

Full Changelog: v2.2.2...v2.2.3

v2.2.2

26 May 01:41

Choose a tag to compare

v2.2.2

codex2api dashboard background preview

Highlights

  • Productized the first-run admin setup path with clearer setup hints and admin authentication polish.
  • Added runtime status reporting for service, database, cache, usage log writer, probes, account pool, image storage, and admin auth.
  • Added configurable background image/video support with live glass opacity and blur controls.
  • Raised MP4 dynamic wallpaper uploads to 40MB while keeping image uploads capped at 20MB.
  • Added fast-mode and reasoning-effort quick-start snippets for supported client templates.
  • Added structured Chinese and English GitHub issue templates.

Downloads

Release assets are available for Linux, macOS, and Windows. Use SHA256SUMS.txt to verify downloaded packages.

Full Changelog: v2.2.1...v2.2.2

v2.2.1

25 May 17:54

Choose a tag to compare

✨ 新增

主题设置中心 /theme

Theme Settings Preview

集中调整管理后台的明暗模式与视觉风格,所有切换实时生效、本地持久化、跨刷新保留。

  • 明暗模式:浅色 / 深色,附 View Transition 圆形扩散过渡动画。
  • 20 套精选配色,每套均提供 light / dark 双变体,可与明暗模式自由组合:
    • 经典系:Classic Blue · Claude 暖杏 · ChatGPT 极简 · DeepSeek 科技 · Graphite · Aurora · Rose · Mono
    • 编辑器系(VSCode 热门):One Dark Pro · GitHub Dimmed · Tokyo Night · Dracula · Monokai Pro · Nord · Catppuccin · Gruvbox
    • 亮色系:Solarized Light · Quiet Light · Ayu Light · Noctis Lux
  • 全局同步:主题状态提升到 ThemeProvider Context,侧栏底部的深色切换按钮与主题设置页双向实时联动。
  • 侧栏深色切换:恢复并保留侧栏左下角的明暗切换按钮(含旋转动效)。

🔧 修复 / 改进

  • 修复刷新后主题恢复为默认的问题:把主题恢复逻辑提到 React 挂载之上的 inline 脚本中,避免 React 首次渲染前的主题闪烁。
  • CSP 收紧:通过 SHA-256 内联脚本哈希允许主题恢复脚本执行,整体 script-src 保持 'self',不再依赖 'unsafe-inline'
  • 主题选择持久化至 localStoragetheme / color-theme),无需后端存储、按浏览器粒度。

📦 构建

  • 工作流:Release workflow 自动构建 5 个平台二进制(linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64)+ SHA256SUMS.txt

Full Changelog: v2.2.0...v2.2.1

v2.2.0

25 May 09:21

Choose a tag to compare

API Key Token 统计、零成本额度探测、侧栏动画优化与导出修复

本次版本聚焦运营侧数据可视化、账号额度探测成本、UI 体验以及导出兼容性。覆盖 #162#163#164

API Keys 页新增 Token 用量统计 (#162)

/admin/api-keys 新增「Token 用量」tab,专门用于按 API Key 统计 token 消耗,不再局限于旧面板的 Top 3 / Top 8 简略排行。

后端

  • 新增 GET /api/admin/usage/api-keys?start=&end=
  • 新增 database.APIKeyTokenStat:分列 input / output / cached / total token
  • ListAPIKeyTokenStats(ctx, start, end) 使用同一份 SQL 兼容 sqlite / postgres
  • 返回完整列表,不做后端 limit,前端负责搜索、排序和展示

前端

  • 时间 chip:今日 / 本周 / 本月 / 自定义起止
  • 搜索:按 key 名称或 masked key 片段过滤
  • 表格列:请求数、Input Token、Output Token、Cached Token、Total Token、错误数、费用 (USD)
  • 所有列支持点击排序;默认按 total_tokens DESC
  • 中英文 i18n 完整补齐

/wham/usage 零成本额度探测

发现 ChatGPT 后端真实存在:

GET https://chatgpt.com/backend-api/wham/usage

该接口返回结构化 JSON(plan_type、5h / 7d 用量百分比、reset_at、credits、spend_control),并且不消耗任何推理额度

本版本将主动额度探测从「最小 /responses 请求」升级为:

  1. 优先调用 /backend-api/wham/usage(零成本)
  2. 任意失败时 fallback 到原来的 /responses 探针,保证兼容性

同步逻辑接入现有链路:

  • plan_typeStore.UpdateAccountPlanType
  • 5h 用量 → SetUsageSnapshot5h
  • 7d 用量 → PersistUsageSnapshot
  • Premium 5h 达 100% → MarkPremium5hRateLimited

这样后台探测不会再因为刷新额度信息而消耗少量 token。

侧栏收起动画优化 (#163)

收起侧栏的过渡从硬切换改为编排式动画:

  • 缓动曲线改为 Apple HIG 风格 cubic-bezier(0.32,0.72,0,1)
  • 容器宽度 / padding / gap 使用 380ms 软着陆
  • 文字 opacity / translate 使用 200ms,展开时增加 150ms delay:容器先撑开,文字再滑入
  • Brand 区拆成外层 max-width + 内层 opacity/transform,避免文字和容器抢空间
  • ChevronLeft/Right 条件渲染改为单个 ChevronLeft 旋转 180°,视觉连续性更好
  • 侧栏增加 overflow-hidden,过渡中间态文字不再露出

导出兼容性修复 (#164)

修复导出 JSON 里 account_id 为空的问题。

根因:新增账号时真实 ChatGPT account id 存在 chatgpt_account_id,但导出逻辑只读历史字段 account_id

修复

  • 导出时优先读取 chatgpt_account_id
  • 空时 fallback 到历史字段 account_id
  • 与导入去重逻辑 GetAllChatGPTAccountIDs 的顺序保持一致

同时将下载文件名改得更清晰:

  • cpa-<ts>-<n>.jsoncodex2api-<ts>-<n>.json
  • rt-<ts>-<n>.txtcodex2api-rt-<ts>-<n>.txt

📋 HTTP 下复制 auth.json 修复

修复通过 HTTP 部署时「复制 auth.json」失败的问题。

navigator.clipboard.writeText() 在非安全上下文(HTTP、沙盒 iframe、部分浏览器)会抛 NotAllowedError。旧逻辑只做 feature check,没有 try/catch,导致异常直接传播,textarea fallback 永远不会执行。

现在:

  • 现代 Clipboard API 抛错时自动 fallback 到 document.execCommand("copy")
  • fallback 增强:pointer-events:nonefocus({ preventScroll: true })setSelectionRange
  • HTTP 部署也能复制 auth.json

兼容性

  • 无 breaking change
  • API Key Token 统计为新增端点,不影响旧接口
  • /wham/usage 探测失败会自动 fallback /responses,不会影响已有账号探测稳定性
  • 升级:git pull && docker compose restart

构建产物

  • Linux: amd64、arm64
  • macOS: amd64、arm64
  • Windows: amd64

SHA256SUMS.txt 见附件。

v2.1.9

24 May 18:08

Choose a tag to compare

Toast 体验修复 + 一键清理限流逻辑修正

本次更新聚焦运营体验的两处具体问题:批量操作的 toast 提示稳定性,以及"一键清理限流"行为与前端筛选不一致的 bug。

Toast 通知系统重写

问题:批量测试账号等耗时操作完成后,右上角 toast 经常一闪而过、或完全看不到。

根因:每个页面都把 <ToastNotice> 渲染在 <StateShell> 的 children 内。任何 reload() 触发 loading=true,StateShell 切换到 spinner 视图就会 卸载整个 children 树,toast 随之消失。账号越多,loading 越久,toast 越是看不见。

修复

  • 新增全局 ToastProvider(context + 在 App 顶层渲染),toast 完全脱离任何页面 StateShell 的 mount 周期
  • 默认显示时长 3000ms → 4500ms,长文案有充足读取时间;showToast(msg, type, ms) 支持单次自定义
  • 8 个页面(Accounts / APIKeys / Docs / ImageStudio / OperationsErrors / PromptFilter / Proxies / Settings / Usage)移除冗余 <ToastNotice> 挂载
  • useToast() API 完全不变,77 处现有调用零修改即可生效
  • handleBatchTest 改用 reloadSilently(),批量测试完成后页面不再短暂变 spinner

"一键清理限流"现在能真正清干净

问题:用户点击"一键清理限流"清不掉、且账号也没有锁定;但勾选全部限流账号 + 批量删除却能成功。

根因CleanByRuntimeStatus("rate_limited") 这个函数本来是给自动清理(cron sweep)设计的,有两个语义裁剪:

  1. 显式跳过 premium 5h 限流——这些账号 5h 内会自然恢复,自动清理删了浪费
  2. 只匹配 RuntimeStatus()=="rate_limited",不含 usage_exhausted(Free 7d 用尽时的状态)

但前端"限流"筛选包含更广的语义(5h / 7d / usage_exhausted / cooldown_reason),所以 UI 看到的"限流账号"和后端能清的对不上。手动点击 + 自动清理共用一个函数,把手动场景也卡死了。

修复

  • 新增 CleanRateLimitedManual() 用于手动一键清理:
    • 匹配 rate_limited usage_exhausted
    • 不跳过 premium 5h 限流(手动点击即用户明确意图)
    • 锁定账号继续跳过(与其它清理流程一致)
    • 删除事件 reason 标记为 manual_clean(区别于 auto_clean
  • CleanByRuntimeStatus 行为完全保持不变,自动清理 sweep(runAutoCleanupSweep)路径继续按原逻辑运行
  • 配套单元测试 TestCleanRateLimitedManualClearsAllRateLimitFlavors:覆盖 premium 5h / usage_exhausted / 锁定账号 / 健康账号四种情况

兼容性

  • 无 breaking change,所有接口字段、URL、行为对客户端透明
  • 升级:git pull && docker compose restart
  • 已启用 auto_clean_rate_limited 的用户不受影响——后台清理路径完全没变,仍然保留 premium 5h skip

构建产物

  • Linux: amd64、arm64
  • macOS: amd64、arm64
  • Windows: amd64

SHA256SUMS.txt 见附件。

v2.1.8

24 May 14:56

Choose a tag to compare

Fast 计费修复 + 移动端体验改进

本次更新主要修复 Fast/Priority 模式计费链路的两个关键 bug、移动端布局溢出,以及一些小幅打磨。涉及 #157#158

🚨 Fast / Priority 计费修复 (#158)

之前 fast 请求没有按照倍率计费,存在两层独立的 bug,本次一并修复:

Bug 1:fallback 倍率缺失

  • gpt-5.4-mini / gpt-5.4-nano 等没有显式 priority 价表的模型,fast 请求按 base 价记账,未应用 2× 倍率
  • 现在 serviceTierCostMultiplier("fast"/"priority") 返回 2.0,与 sub2api 行为对齐

Bug 2:上游降级导致的计费旁路

  • 客户端请求 service_tier=fast,上游 Codex 后端可能回 service_tier=default(fast 通道未生效),resolveBillingServiceTier 之前会让上游报告的 tier 覆盖客户端意图,导致 usage_log 按 base 计费
  • 现在按 客户端意图 锁定计费 tier:只要请求里写了 fast/priority,就按 priority 计费,不被上游降级值掩盖

实测验证(gpt-5.4-mini,input=13 / output=5):

Tier 修复前 修复后
default $0.0000322500 $0.0000322500
fast $0.0000322500 ❌ $0.0000645000 ✅ (×2)

gpt-5.5 / gpt-5.4 / gpt-5.3-codex有显式 priority 价表的模型走专属单价(如 gpt-5.5: 12.5 / 75 / 1.25,约 2.5× base),价目表本身未改动。

📱 移动端布局修复 (#157)

升级 2.1.7 后移动端出现的几处溢出 / 裁切问题:

  • 账号页"额度重置概览 / 限流恢复"图表卡compact 模式硬编码 h-[430px] + 底部 94px 行,移动端文字会被裁掉。改为 lg: 断点生效,移动端图表行 200px + 摘要卡 auto 自适应
  • Layout / SecurityBanner / Accounts / Usage 在移动端横向溢出:补齐 min-w-0 + overflow-hidden + break-words,sidebar 列宽用 CSS 变量传值避免 grid-template-columns 重排时的过渡断裂
  • 顶栏站点名:从 max-w-[150px] 改为 min-w-0 flex-1 truncate,长站点名不再撑破布局

🆕 计费明细 tooltip 显示 Tier

成本明细悬浮窗末行新增一行"计费模式":

  • default 请求 → Standard
  • fast / priority 请求 → ⚡ Fast(琥珀色)

未显示倍率数字 —— 因为 gpt-5.5 这类显式 priority 价表的模型已经把加价计入单价(rate_multiplier=1),强行打 ×N 会误导用户。

⚙️ Structured Output Schema 兼容

/v1/chat/completionsresponse_format 转上游 text.format 时,给所有 type=object 节点(含根、嵌套、items$defsanyOf/oneOf/allOf)补 additionalProperties: false。Codex strict mode 要求此字段才能用 structured output。

🔧 其它打磨

  • 重置后 plan 同步异步化42d48a7):单个 / 批量重置不再阻塞等待上游 plan 探测,改为后台 goroutine(独立 15s 超时 + context.Background()),N 个账号并发探测,前端立刻拿到响应
  • PR #142 合并:账号重置时主动同步 Codex plan 类型,刷新 plan_type 元数据
  • 修复 auth/store.go 一处中文乱码 log(之前是 GBK 误编码)

兼容性

  • 无 breaking change,全部接口字段向下兼容
  • 升级:git pull && docker compose restart
  • 已部署用户:fast 计费修复会影响 fast 请求的扣费金额(按预期翻倍),如果你以前在依赖 fast 不收 2× 的行为,请提前通知用户

构建产物

  • Linux: amd64、arm64
  • macOS: amd64、arm64
  • Windows: amd64

SHA256SUMS.txt 见附件。