Skip to content

fix: 修复聚合供应商切换后的登录与模式误判 - #1813

Open
yanlong832-source wants to merge 2 commits into
BigPizzaV3:mainfrom
yanlong832-source:fix/aggregate-auth-placeholder
Open

fix: 修复聚合供应商切换后的登录与模式误判#1813
yanlong832-source wants to merge 2 commits into
BigPizzaV3:mainfrom
yanlong832-source:fix/aggregate-auth-placeholder

Conversation

@yanlong832-source

@yanlong832-source yanlong832-source commented Aug 9, 2026

Copy link
Copy Markdown

问题

纯 API Key 用户切换到聚合供应商后,auth.json 中的 OPENAI_API_KEY 会被删除或被旧路径整体重写。Codex 桌面版因此误判为未登录并显示登录页面。

此外,管理工具从实时配置回填时会把聚合模式写入的占位 Key 识别为普通 API Key,进而将 RelayMode::Aggregate 错误改成 PureApi,丢失聚合轮转语义。

修复内容

  • 聚合模式切换时保留实时 auth.json 中已有的 OPENAI_API_KEY
  • 实时认证缺少 Key 时写入非真实占位值,仅用于满足 Codex 桌面版登录状态检查。
  • 保留 auth.json 中 OAuth 等其他字段,不使用聚合 profile 的旧认证快照覆盖实时状态。
  • 回填实时配置时保持 RelayMode::Aggregate
  • 将管理器的聚合写入入口统一到兼容切换路径,并继续传递公共配置与 computer-use guard。
  • Official / PureApi 现有认证行为保持不变。

聚合成员的真实 API Key 仍只来自各成员供应商配置;占位值不参与上游请求认证。聚合请求继续通过本地代理 127.0.0.1:57321 和内部 token codex-plus-aggregate 转发。

回归覆盖

新增单元与集成测试,覆盖:

  • 保留实时 Key 与其他认证字段;
  • 忽略旧 profile 认证快照;
  • 缺少 Key 时写入占位值;
  • 管理器聚合入口写入本地代理配置;
  • 回填后仍保持 Aggregate 模式。

验证

  • git diff --check 通过。
  • 独立代码复核未发现阻塞问题。
  • 本机定向 cargo test 未完成:离线缓存缺少依赖,联网依赖下载在 120 秒后超时,尚未进入可见测试执行阶段。建议以 CI 结果作为完整 Rust 测试依据。

yanlong832-source and others added 2 commits August 10, 2026 13:26
切换聚合供应商时 auth.json 被清空为 0 字节,导致 Codex 桌面版(以 auth.json 的 OPENAI_API_KEY 作为已登录判据)弹出登录界面,纯 API Key 用户无法进入。

聚合模式的请求认证由本地协议代理(127.0.0.1:57321)的 internal token 完成,真实上游 Key 只保存在 settings.json,因此 auth.json 内容不影响请求。切换时保留已有 Key,缺失时写入占位 Key 即可绕过登录界面。

Official/MixedApi 模式行为不变(仍删除 OPENAI_API_KEY),新增三个单元测试覆盖聚合保留、聚合占位、官方删除三条路径。
统一管理器聚合写入与供应商切换路径,始终基于实时 auth.json 保留认证字段并补齐占位 Key。回填实时配置时保持 Aggregate 模式,避免被占位 Key 误判为 PureApi。

新增核心与管理器回归测试,覆盖旧快照忽略、认证字段保留、本地代理配置和模式回填。
@yanlong832-source
yanlong832-source force-pushed the fix/aggregate-auth-placeholder branch from 2ac3bef to c3655d8 Compare August 10, 2026 05:28
@yanlong832-source yanlong832-source changed the title 修复:聚合供应商模式切换时清空 auth.json 导致桌面版弹出登录界面 fix: 修复聚合供应商切换后的登录与模式误判 Aug 10, 2026
@BigPizzaV3

Copy link
Copy Markdown
Owner

补充一个 P1 数据完整性问题:ensure_openai_api_key_in_auth_contents 对“非空但 JSON 解析失败”的实时 auth.json 会直接丢弃原内容,改写成只含占位 OPENAI_API_KEY 的 JSON。切换期间 auth.json 可能被 Codex 刷新/写入到短暂的半文件状态,这会清掉 OAuth tokens 等字段,下一次登录状态会丢失。建议解析失败时保留已有 profile 快照或返回错误并延后切换,不能静默覆盖整个 auth 文件。

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.

3 participants