Skip to content

v3.0.5

Choose a tag to compare

@github-actions github-actions released this 29 Sep 19:05
· 328 commits to main since this release

v3.0.5 聚焦 Excel Basispoints 的全面接入与稳定性:BPS 支持全局默认、Chat/Messages/WS 入口,以及 403/429 路由自动暂停与恢复(#744),修复 Codex 客户端工具与历史在 BPS 上的兼容问题(#742);另外未识别的 402/403 不再冷却整个账号(#748),账号页显示并发上限并支持自动刷新(#746),测连能识别客户端版本过旧导致的拒绝并一键同步重测。

Features

  • Excel Basispoints 支持全局默认、更多入口与路由自动暂停(#744,closes #743,@eshao731)。背景:BPS 此前只能逐个账号开启,只接入了 /v1/responses 与 compact,遇到 403/429 也没有路由级处理。方案:在现有账号级适配器上扩展,没有另起一套实现,所有新能力默认关闭。

    • 开启方式:新增系统设置 codex_basispoints_enabled(全局默认,默认关)和可选的全局模型名单 codex_basispoints_models。账号新增凭据键 openai_excel_bps_opt_out,与原有 openai_excel_bps 组成“跟随全局 / 开启 / 关闭”三态。中转、API Key、Agent Identity 账号仍不参与。设置页新增 BPS 卡片(模型名单可搜索多选),账号快速配置增加三态选择。
    • 入口:/v1/chat/completions、/v1/messages、下游 Responses WebSocket 通过共享 SSE 适配器接入 BPS。WS 回合先从调用方响应缓存展开 previous_response_id 再进 BPS,BPS 完成的回合也写回这份缓存。输出前出现的可回退失败在同一账号上回退原生。
    • 路由健康:basispoints_model_access_changed 的 403 只暂停该模型,其他 403 暂停该账号全部 BPS 路由。暂停是运行时状态,不改账号配置。后台按 codex_basispoints_403_probe_interval_minutes(默认 1 分钟)探测恢复,codex_basispoints_403_auto_pause 可关闭自动暂停。429,以及 HTTP 200 后、输出前的流内 rate_limit_exceeded,只冷却 BPS 路由(codex_basispoints_429_cooldown_seconds,默认 5 秒,有 Retry-After 以上游为准)并回退原生。401 回退原生,由原生链路刷新令牌。
    • 管理:新增 POST /api/admin/accounts/:id/bps-pause/clear 手动解除暂停;账号列表“状态”列显示 BPS 状态、暂停与冷却的实时倒计时。
    • 兼容:需要实时联网搜索或有明确生图意图的请求留在原生;invalid_encrypted_content 时去掉无法校验的 reasoning 重试一次,仍失败回退原生。
    • 缓存写入计数(可选):BPS 的 usage 带 cache_write_tokens,已经计入 input_tokens,下游网关可能按缓存创建价再计一次。新设置 codex_basispoints_cache_creation_as_input(默认关)开启后,把下发给客户端的缓存写入计数置 0,网关自身用量记录不受影响。

    验证:贡献者在真实账号上验证了 Chat 两轮工具调用、Messages、compact、下游 WS 两轮续链经 BPS 成功,联网搜索回退原生,流内限流识别后回退并冷却,策略 403 触发账号级暂停;本地 PostgreSQL 16 验证了新列迁移与读写,并已在其生产实例部署。nonce 生成探测的成功恢复路径未覆盖。

  • 账号页显示并发上限、记住排序、支持自动刷新与 ID 列(#746,closes #745,@eshao731)。

    • 并发上限:/api/admin/accounts/live 新增 dynamic_concurrency_limit(调度器经健康档位与额度保护后实际执行的上限)和 base_concurrency_effective(账号值 > 分组值 > 全局默认)。状态标记显示“在途 / 有效上限”,运行时被下调的上限会高亮。两个值都在账号读锁内读取,1 秒轮询不会触发重算。
    • 排序:按浏览器标签页记住排序;新增“排序:列名 ×”标签一键恢复默认;新增可在列设置中关闭的 ID 列(卡片视图同样显示),分页接口支持 sort=id。
    • 自动刷新:刷新按钮新增自动刷新下拉(关 / 5 秒 / 10 秒 / 30 秒),带实时倒计时。静默重拉、跳过隐藏标签页、不会重叠,用量聚合最多每 30 秒刷新一次。

    验证:贡献者新增前后端单测,并已在其生产实例部署使用。

  • Codex 测连识别“客户端版本过旧”并可一键同步重测。背景:上游按客户端版本放行新模型,模拟版本过旧时返回 “model is not supported when using codex with a ChatGPT account” 或 “requires a newer version of Codex”,管理员很难看出是版本问题。方案:测连弹窗识别这两类错误后提示版本可能过旧,一键同步所有 Codex 客户端版本并自动重测;同步后仍被拒或已是最新版时,提示该模型可能尚未对该账号开放。同一文案也会出现在模型确实未开放的场景,所以只作为“可能”提示。另外四个版本源改为并发拉取,落库仍按顺序执行。

  • User-Agent 预设新增参考终端与平台,设置页重新整理。终端预设新增按 Codex 终端检测规则推导的常见终端(iTerm、Ghostty、Warp、WezTerm、VS Code、Cursor、Zed、kitty、Windows Terminal 等,取 2026-09 最新稳定版),平台预设新增 macOS 27。这些条目标注“参考”,只能用于统一画像,不参与号池抽样,因此已有账号画像不变。设置页把 Codex 客户端区拆成“UA 身份”“版本与兼容”“指纹、连接与遥测”三张卡片,模型管理面板新增来源/类别筛选、搜索和规则摘要。

Fixes

  • Excel Basispoints 兼容 Codex 客户端的工具与历史(#742,#741,@OneAHPro)。背景:启用 BPS 后,Codex 客户端的部分子代理、工具调用会中断。根因:明文参数被误标为密文、历史里的展示用字段被回放、工具 transport 格式不匹配。方案:

    • 中继 function 参数明确输出 encrypted_function_args: []。
    • 只把 agent 历史中明确的自然语言明文从 encrypted_content 转为 input_text;真正不透明的加密上下文和 stored-response 请求在调用 BPS 前交回原生路径。
    • 原生历史回放时清掉展示用的 reasoning.content,保留加密推理与 summary。
    • 有限修复被误标为 custom 的已声明 function,以及能唯一确定的 raw transport 缺失字段;歧义、未声明工具等仍拒绝。
    • 图片 detail: original 规范为 high。
    • 尚未输出时,上游 5xx、传输失败、特定本地不支持请求和精确的 model-access-changed 403 在同一账号上回退原生 Responses。

    验证:贡献者跑了全量 go test(8,178 项通过)、go vet 与 BPS 相关 race 测试。PR 说明里提到一次真实子代理请求仍报 “Basispoints response could not be translated”,尚未定位,不承诺所有工具均已支持。

  • 未识别的 402/403 不再冷却整个账号(#748,closes #747,@eshao731)。背景:账号被反复误标为 payment_required,冷却 30 分钟。根因:任何裸 402/403 都会触发 MarkCooldown(30min, "payment_required"),而上游也会用这两个状态码返回单次请求的策略拒绝和路由/端点级拒绝,无法证明账号余额不足。方案:当前请求照常返回原错误,账号状态交给用量探测和 AT 刷新判断。用量耗尽仍按 429 规则冷却,deactivated_workspace 仍标记错误,Agent runtime 已删除仍标记封禁。验证:补充回归断言,贡献者生产实例运行数天,此前被误标的账号保持可用,真正用满的账号仍正常进入 rate_limited。

  • “窗口用满自动重置”只在长窗口用满时消耗重置券。背景:v3.0.2 的 auto_reset_credits_on_exhaustion_enabled 在 5h 窗口用满时也会消耗重置券,而 5h 窗口几小时内会自行恢复,不值得花一张券。方案:只有 7d 窗口(Team 等套餐为 30 天月窗)用满才触发。设置页文案同步更新。

  • Windows Codex 桌面端版本同步在版本化安装包缺失时不再失败。背景:Store 清单有时先发布版本,releases/<version>/ 下的 MSIX 还没上传,同步直接报错。方案:404 时回退到最新包,只要不比 Store 版本新就接受。解析结果按 URL + ETag + 大小缓存,包不变时省掉数十次 Range 请求。

  • 账号页手动刷新会同时刷新“今日统计”(#746,@eshao731)。账号 ID 不变时此前只重拉列表,今日统计停留在旧数据。

Upgrade Notes

  • 数据库迁移(启动时自动执行,PostgreSQL 与 SQLite 都支持):system_settings 新增 6 列(BPS 全局开关、模型名单、403 自动暂停、探测间隔、429 冷却、缓存写入计为输入),均有默认值。只加列,没有数据迁移。
  • 默认行为变化:
    • 裸 402/403(非用量耗尽、非工作区停用、非 runtime 删除)不再让账号冷却 30 分钟。如果上游对某账号持续返回这类错误,该账号会继续被调度,直到用量探测或 AT 刷新判定其状态。
    • 已开启“窗口用满自动重置”的部署:5h 窗口用满不再消耗重置券。
    • 已开启 BPS 的账号:401 改为回退原生(此前直接失败),403/429 会暂停或冷却 BPS 路由并回退原生。
    • BPS 全局默认、新入口、缓存写入置零、账号页自动刷新均默认关闭,不改变既有行为。
  • 验证与升级建议:发版前 main 最新代码提交的 CI、Security Scan 全绿。本次改动都未在本次发版中对真实上游实测(#744、#746、#748 有贡献者自有生产实例的运行验证)。使用 Excel Basispoints 账号、或遇到账号被误标 payment_required 的部署建议升级。
  • 逃生阀:BPS 自动暂停可用 codex_basispoints_403_auto_pause 关闭,被暂停的路由可在账号快速配置里“立即恢复”或调用 POST /api/admin/accounts/:id/bps-pause/clear;单个账号可设为“关闭”退出全局 BPS。

致谢

  • @eshao731 — BPS 全局默认/多入口/路由暂停恢复(PR #744,issue #743)、账号页并发上限与自动刷新(PR #746,issue #745)、未识别 402/403 不再冷却账号(PR #748,issue #747)
  • @OneAHPro — BPS 与 Codex 客户端工具/历史兼容修复(PR #742,issue #741)

Full Changelog: v3.0.4...v3.0.5