Skip to content

Releases: james-6-23/codex2api

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 见附件。

v2.1.7

23 May 23:42

Choose a tag to compare

调度优化、API Key 限制、用量时间筛选与多项体验改进

本次更新覆盖 6 个 issue:#146#147#150#151#156,以及 Sub2Api 集成与 UI 体验优化。

API Key 级别限制 (#146)

api_keys 新增 limits JSONB 列,支持 6 类细粒度限制:

  • 模型白/黑名单model_allow / model_deny,白名单优先,大小写不敏感
  • 请求频率rpm 每分钟 / rpd 每天滑动窗口
  • 成本上限cost_limit_5h / cost_limit_7d(美元,滑动窗口)
  • Token 上限token_limit_5h / token_limit_7d

热路径校验:模型不在白名单 → 403 permission_error;窗口限额超出 → 429 rate_limit_reached。Redis 60s 缓存窗口聚合结果,DB 兜底。Settings 表单提供"高级限制"折叠区,模型字段复用 ChipInput 支持下拉选择 + 自由输入。

调度系统优化 (#150)

Bounded session affinity 解决"轮询模式仍逮一个号薅"的问题:

  • session 绑定到账号后,以下任一条件触发自动换号:
    • 累计 ≥ 50 次请求
    • 绑定时长 ≥ 5 分钟
    • 绑定账号脱离 healthy 桶(进入 warm/risky/banned)
  • 新增 affinity_mode 设置:bounded(默认) / off(每次重挑) / strict(旧行为)
  • round_robin 模式下 healthy 桶按 7d 用量 ASC 排序,用得少的账号自然先被轮到

UI 在 Settings 页加"会话粘性"单选。

使用统计时间范围筛选 (#151)

  • /usage/stats 接受可选 start / end query (RFC3339);默认行为不变(今日)
  • Usage 页面 timeRange chip 联动 stats 与请求记录,新增第 6 个"自定义"区间选择器:
    • Portal 渲染避开 overflow 裁切
    • datetime-local 输入,90 天上限校验
  • 卡片标签从"今日"切到"近 "

Chat Completions 思考内容修复 (#156)

/v1/chat/completions 不返回 reasoning 思考内容:

  • TranslateRequest 现在显式发送 reasoning.summary: "auto",触发上游 reasoning summary 流
  • 流式 delta 同时输出 reasoning(Cherry Studio / OpenAI o1 风格)和 reasoning_content(DeepSeek 风格),兼容所有主流客户端
  • 非流式 compactMessage 同步补齐两个字段,handler 累计 reasoning delta 不再丢弃

分页持久化 + 200/500 选项 (#147)

新增 usePersistedPageSize hook(localStorage 按页面 key 持久化),应用到:Accounts / Usage / Operations Errors / Prompt Filter logs。可选 pageSize 扩展为 [10, 20, 50, 100, 200, 500]

Sub2Api 导入

后端新增 /api/admin/accounts/sub2api/preview + /import 端点,通过 Admin Key 拉取 Sub2Api 实例账号。前端在数据操作下拉中加入"从 Sub2Api 导入",支持预览统计(总数 / 健康 / 限流 / 错误)+ 三个一键导入按钮(可用 / 健康含限流 / 全部)。复用 chatgpt_account_id 去重逻辑。

JSON 导入去重改进

chatgpt_account_id 优先去重:

  • 文件内去重以 chatgpt_account_id 为唯一键(原来按 RT 会把多账号共享一个 RT 的导出文件错误合并)
  • 数据库去重新增 GetAllChatGPTAccountIDs 查询
  • 新增 format=json_at 路径,忽略 RT/ST 仅按 access_token 导入,适用于 RT 是占位值的导出格式

UI 体验改进

  • 侧边栏可折叠:264px ↔ 64px,localStorage 持久化。展开态全文字 + 在线状态徽章,收起态 icon-only + tooltip
  • UsageCell 显示策略:不再单纯依据 plan_type === "free",改为根据是否真有 5h 重置时间判定(修复 plan_type 滞后场景下 5h 被错误隐藏)
  • 5h/7d 窗口语义在多处统一

Bug 修复

  • usage_logs 历史范围 today_* 语义在显式区间下表示"该区间统计"
  • affinity_mode 失效 cache:有 limits 的 API Key 跳过 runtime cache,PATCH 立即生效
  • sqlite_test GetUsageStats 签名同步更新

兼容性

  • 全部 DDL 使用 IF NOT EXISTS + 安全默认值
  • 接口字段全部 optional,旧客户端无感
  • 升级:git pull && docker compose restart,无 breaking change

构建产物

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

SHA256SUMS.txt 见附件。

v2.1.6

20 May 13:20
0627e0b

Choose a tag to compare

计费修正、调度模式、图生图与 codex-auto-review

合并 PR #144,覆盖 11 个 issue/PR(#129, #132#136, #138#141, #143)。

计费修正

  • GPT-5.5 价格修正:之前与 gpt-5.4 同价,实际为 2 倍。Standard $5.00/$30.00 per 1M、Priority $12.50/$75.00、Flex $2.50/$15.00
  • Pro 系列独立定价:gpt-5.5-pro、gpt-5.4-pro 新增独立档位($30/$180),通过 normalizeCodexBillingModel 前缀匹配。
  • 长上下文溢价:输入 token 超过 272K 时自动切换长上下文定价(input 2x, output 1.5x),覆盖 gpt-5.5、gpt-5.5-pro、gpt-5.4、gpt-5.4-pro。
  • codex-auto-review:实测上游返回 "model": "gpt-5.4",定价映射到 gpt-5.4 档,大小写均匹配。已注册到 builtin model list。
  • 修正 gpt-4o / gpt-4o-mini cache 价格,移除冗余的 gpt-4.1 / o-series 配置。

Credit 额度策略 (#141)

accounts 表新增两列:

  • credit_enabled — 标记账号存在额外 credit
  • credit_skip_usage_window — 跳过 5h/7d 用量窗口限制(需要 credit_enabled=true 才生效)

通过 PATCH /api/admin/accounts/:id/credit 部分更新,带 DisallowUnknownFields 校验。

调度模式 (#133)

system_settings 新增 scheduler_mode:

  • round_robin(默认)— 按 dispatch score 降序、cursor 轮转
  • remaining_quota — 按 7d 用量升序,优先低用量账号

切换时实时重排所有 tier bucket,Settings 页面提供下拉选择。

5h/7d 窗口成本 (#143)

账号列表新增成本列,按 5h 和 7d 额度窗口分别统计美元消耗。GetAccountBilledSincereset_5h_at / reset_7d_at 聚合 usage_logs.account_billed,反映真实花费而非 token 估算。

图生图 (#135, #136)

Image Studio 新增 image-to-image 模式,支持上传参考图并输入 prompt 生成。后端 POST /api/admin/images/edit-jobs

  • 前端 slice 防竞态、显式 forceMode 防路由错误
  • 流式错误不再换号重试、消除双重写入、补齐错误路径 usage log
  • PNG → JPEG 自动回退

OAuth 代理回退 (#138)

OAuth session 和请求均未指定 proxy_url 时,回退到系统默认代理 (store.GetProxyURL()),修复地理受限地区 exchange-code 直接调用 auth.openai.com 导致 502 的问题。

安全 / Docker (#134)

  • SQLite compose (docker-compose.sqlite.ymldocker-compose.sqlite.local.yml) 端口默认绑定 127.0.0.1,通过 BIND_HOST 覆盖
  • .env.example.env.sqlite.exampleCONFIGURATION.md 全部补齐 BIND_HOST 说明

Bug 修复

  • 恢复被误删的 modelMapping.Store() 初始化(scheduler_mode 重构遗漏)
  • 修正 credit_enabled / credit_skip_usage_window / score_bias_override 三列 SELECT 顺序与 Scan 参数错位导致的数据损坏
  • X-Codex-Beta-Features header 加入透传白名单
  • SSE retry 用 c.Writer.Written() 替代 streamStarted 防止响应混流
  • 图生图 rerun 显式 forceMode,不再依赖 stale UI state
  • credit 开关补齐 aria-label / focus-visible / disabled cursor

兼容性

  • 全部 DDL 使用 IF NOT EXISTS + 安全默认值
  • 无字段或接口删除,无 breaking change
  • 升级:git pull && docker compose restart

Breaking(SQLite 部署用户注意)

SQLite 部署若依赖默认 compose 的对外暴露,需显式设置 BIND_HOST=0.0.0.0 或在 compose file 覆盖端口绑定。其他场景完全向后兼容。

构建产物

  • Linux:amd64、arm64
  • macOS:amd64、arm64
  • Windows:amd64
  • 附带 SHA256SUMS.txt 校验文件
  • Docker 镜像已推送到 GHCR,包含 2.1.6、2.1、latest 标签

相关