Repository navigation
fix(proxy): 协议代理层放行混合模式官方额度锁定,无需开启前端增强 - #2383
Conversation
45f36fe to
f7f3c5e
Compare
|
2026-10-08 当前仍Draft且launcher与c07a337d冲突。正文的协议原生方案与实际CDP独立Query缓存注入不符,请更新正文与实际验证,补断线重连、启动后模式切换、退出清理和官登恢复,再rebase评审。当前head构建通过不能证明无注入或长期持续生效。 |
f7f3c5e to
6eb87d0
Compare
51ba812 to
31bdafd
Compare
已按建议进行完整重构并重新 Rebase:
|
…ota-native # Conflicts: # crates/codex-plus-core/src/launcher.rs
BigPizzaV3
left a comment
There was a problem hiding this comment.
审查结论:Request changes。
[P1] 额度门监督任务在启动时直接 tokio::spawn,没有保存取消句柄,也没有和 Codex 会话退出绑定。supervise_isolated_api_quota_gate 是无限重试循环;Codex 退出后 launcher 仍会持续连接 CDP,并可能在端口复用后注入下一实例。
位置:crates/codex-plus-core/src/launcher.rs:740-742。
请让监督任务接收 cancellation token/退出 future,并在 LaunchHandle 会话结束、重启和清理路径中停止它。
将取消信号和任务句柄归属 LaunchHandle,退出及重启先停止并等待任务,防止旧会话重连复用端口。 Refs BigPizzaV3#2383
|
BigPizzaV3
left a comment
There was a problem hiding this comment.
复核通过:额度门监督任务已绑定会话生命周期,包含停止/清理路径;Windows artifacts 和 macOS DMG CI 均通过。批准合入。
* fix(composer): 独立模式复用用量缓存修复逻辑,补齐断线重连与运行期模式切换 * fix(update): 兼容 Windows 路径分隔符 * test(install): 修正跨平台路径与兼容壳断言 * test(tools): 使用未知工具验证分片兼容 * test(manager): 对齐 MCP 全局导航名称 * ci(windows): 验证 PR 构建的 NSIS 编译器 * test(usage): 隔离续读测试的索引缓存 * fix(launcher): 随会话停止独立额度监督任务 将取消信号和任务句柄归属 LaunchHandle,退出及重启先停止并等待任务,防止旧会话重连复用端口。 Refs #2383 * feat(quota): 增加独立额度解锁开关

问题
在未启用增强模式(
enhancementsEnabled: false)的独立场景下,启用「官方登录 + 混入 API Key」时,官方账户订阅额度耗尽仍会导致发送功能被阻塞。此前 PR #2286 使用的源码定位与条件断点方案,在面对官方客户端打包结构和变量名混淆变动时容易因锚点缺失失效;且之前尝试修改
chatgpt_base_url的协议层反代会破坏官方 OAuth 2.0 鉴权与 Session Cookie 校验。修复
复用增强模式成熟的 TanStack Query 缓存拦截机制,并在独立模式下建立轻量、受控的生命周期:
通过 Fiber 发现 Codex 的
QueryClient,拦截用量查询原型的Query.setData与client.setQueryData。在用量数据通知 React 界面之前完成处理,使已有缓存、后续轮询和推流更新均能生效。仅在启用供应商配置且当前配置为
official + officialMixApiKey时,放行rate_limit.allowed = true与rate_limit.limit_reached = false。百分比、积分、消费上限保持原样,并显式排除image-generation查询。使用 WeakMap 保存真实服务端数据快照,兼容缓存的结构共享。切回纯官登、关闭供应商配置或设置超时未响应时,立即还原真实锁定状态。
在 Rust 侧实现
supervise_isolated_api_quota_gate,内置 500ms~5s 指数退避重试。CDP 会话因页面导航或刷新断开后自动探测并重连;运行期切换 Relay Profile 时通过 Runtime binding 脱敏推送,聚焦窗口即可动态生效。会话销毁时清理在页面注册的脚本;仅在
focus、visibilitychange及DOMContentLoaded时按需获取设置,空闲时完全静默,不消耗任何定时器轮询。验证
cargo test -p codex-plus-core --test api_quota_gate --test native_api_quota_gate全部通过。upstream/main完成 Rebase,无代码冲突。