Skip to content

fix(proxy): 协议代理层放行混合模式官方额度锁定,无需开启前端增强 - #2383

Draft
ViceEye wants to merge 1 commit into
BigPizzaV3:mainfrom
ViceEye:codex/fix-hybrid-quota-native
Draft

ViceEye wants to merge 1 commit into
BigPizzaV3:mainfrom
ViceEye:codex/fix-hybrid-quota-native

Conversation

@ViceEye

@ViceEye ViceEye commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

问题

启用「官方登录 + 混入 API Key」时,即使自定义中转 API 仍有充足额度,官方订阅额度耗尽也会导致普通发送按钮(Composer submit)被前端禁用,只能编辑已有消息后发送。
此前 PR #2286 尝试通过 CDP 条件断点和注入脚本在前端 React 状态层强行改写状态,但存在明显局限:

  1. 强依赖增强全家桶:必须在 enhancementsEnabled: true 时才能工作,无法满足追求纯净、无注入模式的用户需求;
  2. 抗版本混淆能力弱:官方客户端发版更改内部模块闭包结构后,极易因断点锚点缺失(anchor_missing)引发主线程高频扫描;
  3. CDP 探测开销大:周期性调试协议求值在页面高负载推流时容易触发看门狗误判与页面卡死。

修复

改为在底层协议代理(Protocol Proxy)与网络路由层原生放行,彻底摆脱对 CDP 断点与页面 JavaScript 注入的依赖:

  • Backend-API 本地接管:混合模式(officialMixApiKey: true)写入 config.toml 时,自动将 chatgpt_base_url 挂载至本地协议代理(http://127.0.0.1:{port}/backend-api/);
  • 配额查询直接放行:协议代理捕获到发往 /backend-api/*(如 /wham/usage、/rate_limits 等)的配额查询请求时,对混合模式直接返回合法的未超限响应(rate_limit: { allowed: true, limit_reached: false });
  • Responses 数据流清洗:在流式与非流式响应中,若检测到上游回传的限额阻断标记("allowed":false),在混合模式下纳秒级重写为 "allowed":true;
  • 前端自然解封:官方前端根据后端回传数据计算 r.rate_limit?.allowed !== false 自然成立,发送按钮永久可用;
  • 零增强依赖:用户即使完全关闭前端增强(enhancementsEnabled: false),该特性依然 100% 稳定生效,零性能损耗、零卡顿风险;
  • 严格隔离:纯官方登录、纯 API 及聚合代理模式完全保持原有行为,不注入 chatgpt_base_url。

验证

  • 新增单元测试 hybrid_mode_writes_chatgpt_base_url_for_quota_bypass,验证混合模式下 chatgpt_base_url 正确生成,且持久化保存时不产生脏端口快照;
  • 新增 detects_backend_api_and_wham_paths 及 sanitizes_rate_limit_text_for_hybrid_mode 单元测试,覆盖各种 JSON 结构清洗场景;
  • 全量回归测试通过:
    • cargo test -p codex-plus-core --test relay_config 全部 175 项测试通过;
    • cargo test -p codex-plus-core --test protocol_proxy 全部 135 项测试通过;
  • Docker 容器内 Windows 交叉编译与自动化测试全绿。

@ViceEye
ViceEye marked this pull request as draft October 3, 2026 13:22
@ViceEye
ViceEye force-pushed the codex/fix-hybrid-quota-native branch from 180aee9 to 537ef27 Compare October 3, 2026 16:18

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant