Releases: james-6-23/codex2api
v2.2.5
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:latestManual 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
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:latestManual 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
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/responsesWebSocket 入站返回 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:latestManual 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
v2.2.2
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
✨ 新增
主题设置中心 /theme
集中调整管理后台的明暗模式与视觉风格,所有切换实时生效、本地持久化、跨刷新保留。
- 明暗模式:浅色 / 深色,附 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
- 全局同步:主题状态提升到
ThemeProviderContext,侧栏底部的深色切换按钮与主题设置页双向实时联动。 - 侧栏深色切换:恢复并保留侧栏左下角的明暗切换按钮(含旋转动效)。
🔧 修复 / 改进
- 修复刷新后主题恢复为默认的问题:把主题恢复逻辑提到 React 挂载之上的 inline 脚本中,避免 React 首次渲染前的主题闪烁。
- CSP 收紧:通过 SHA-256 内联脚本哈希允许主题恢复脚本执行,整体
script-src保持'self',不再依赖'unsafe-inline'。 - 主题选择持久化至
localStorage(theme/color-theme),无需后端存储、按浏览器粒度。
📦 构建
- 工作流:
Releaseworkflow 自动构建 5 个平台二进制(linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64)+SHA256SUMS.txt。
Full Changelog: v2.2.0...v2.2.1
v2.2.0
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 请求」升级为:
- 优先调用
/backend-api/wham/usage(零成本) - 任意失败时 fallback 到原来的
/responses探针,保证兼容性
同步逻辑接入现有链路:
plan_type→Store.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>.json→codex2api-<ts>-<n>.jsonrt-<ts>-<n>.txt→codex2api-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:none、focus({ 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
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)设计的,有两个语义裁剪:
- 显式跳过 premium 5h 限流——这些账号 5h 内会自然恢复,自动清理删了浪费
- 只匹配
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
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请求 →Standardfast/priority请求 →⚡ Fast(琥珀色)
未显示倍率数字 —— 因为 gpt-5.5 这类显式 priority 价表的模型已经把加价计入单价(rate_multiplier=1),强行打 ×N 会误导用户。
⚙️ Structured Output Schema 兼容
/v1/chat/completions 的 response_format 转上游 text.format 时,给所有 type=object 节点(含根、嵌套、items、$defs、anyOf/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
调度优化、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/endquery (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
计费修正、调度模式、图生图与 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— 标记账号存在额外 creditcredit_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 额度窗口分别统计美元消耗。GetAccountBilledSince 按 reset_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.yml、docker-compose.sqlite.local.yml) 端口默认绑定127.0.0.1,通过BIND_HOST覆盖 .env.example、.env.sqlite.example、CONFIGURATION.md全部补齐BIND_HOST说明
Bug 修复
- 恢复被误删的
modelMapping.Store()初始化(scheduler_mode 重构遗漏) - 修正
credit_enabled/credit_skip_usage_window/score_bias_override三列 SELECT 顺序与 Scan 参数错位导致的数据损坏 X-Codex-Beta-Featuresheader 加入透传白名单- 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 标签
相关
- Full Changelog: v2.1.5...v2.1.6

