Skip to content

feat(desktop): 支持使用当前 Codex CLI 账号 - #3858

Open
JupiterTheWarlock wants to merge 3 commits into
makecindy:mainfrom
JupiterTheWarlock:feat/use-current-codex-cli-account
Open

feat(desktop): 支持使用当前 Codex CLI 账号#3858
JupiterTheWarlock wants to merge 3 commits into
makecindy:mainfrom
JupiterTheWarlock:feat/use-current-codex-cli-account

Conversation

@JupiterTheWarlock

@JupiterTheWarlock JupiterTheWarlock commented Sep 3, 2026

Copy link
Copy Markdown

Closes #3857

这次改了什么

为内置 OpenAI 供应商增加“使用当前 Codex CLI 账号”操作。

当 Cindy 未连接,并且检测到本机存在有效的 Codex CLI ChatGPT OAuth 账号时,用户可以明确选择该账号,无需重新打开浏览器登录。

实现

  • 增加 local-cli 登录模式,复用现有登录单飞、取消和状态刷新流程;
  • 在 Main 进程验证系统 Codex OAuth 状态和账号 ID;
  • 复用现有共享 auth.json 链接机制,不复制 OAuth Token;
  • 链接完成后再次验证账号和文件拓扑;
  • 验证成功后才清除 Cindy 的持久断开边界;
  • 保留 native-harness-inherited 凭证来源;
  • owner/session 在操作期间变化时终止操作并清理未提交链接;
  • 失败时维持 fail-closed 状态,避免恢复未完成采用的凭证;
  • 向 Renderer 仅暴露 OAuth 可用性等非敏感元数据;
  • 在设置页增加操作入口和当前账号标识;
  • 补充英文、日文、韩文、简体中文和繁体中文文案。

API Key-only、格式损坏或缺少账号 ID 的 Codex 凭证不会显示为可复用的 OAuth 账号。

现有 reconnect-required 恢复行为保持不变。

安全边界

  • Renderer 不读取凭证文件或 Token;
  • 不创建可独立刷新的 Token 副本;
  • Cindy 断开连接不会退出系统 Codex CLI;
  • 只有明确的用户操作才能解除持久断开边界;
  • 隔离 OAuth 开发环境禁止访问真实系统 Codex CLI 凭证;
  • 账号、链接拓扑及 owner generation 均在提交前后复核。

UI 变化

  • 设置页增加“使用当前 Codex CLI 账号”操作和当前账号标识。
  • 引用的设计规范:docs/design-rules/DESIGN.md §4 Component Stylings → Buttons:复用现有 PillButton(共享 Button variant="secondary");§10 Theme System & Token Reference:连接状态继续使用已有主题颜色变量。
  • 尚未附截图或录屏;以上为代码层面核对,未新增亮色/暗色界面验证。

怎么验证的

自动化验证:

  • pnpm --filter desktop typecheck
  • 6 个相关测试文件:161 项通过,1 项平台跳过(最近一次本地验证)
  • git diff --check

覆盖:

  • 持久断开后显式采用 CLI OAuth;
  • 凭证缺失、格式损坏及 API Key-only;
  • 登录并发与取消;
  • owner/session 切换;
  • 未提交链接的竞态回滚;
  • 绑定来源和撤销状态;
  • OAuth-only CLI 检测;
  • Renderer 登录状态流转;
  • 现有 inherited subscription 行为。

原 PR 记录的 Windows 桌面实机验证(本次仅更新描述,未重新执行):

  • Cindy 断开连接后 Codex CLI 保持登录;
  • 采用 CLI 账号时不打开浏览器;
  • 账号和模型状态能够刷新;
  • Codex 对话正常;
  • 重启后连接保持;
  • 再次从 Cindy 断开后 Codex CLI 仍保持登录。

非目标

本次改动不提供完整的多账号管理或账号切换界面。

风险

风险分类

  • 权限 / 安全 / 用户数据
  • 跨平台差异

影响与回滚

  • 影响范围:内置 OpenAI 供应商的显式 CLI 账号复用操作,涉及凭证链接、账号归属和取消后的清理。采用失败或操作期间账号变化时,应保持未连接状态,并清理本次新建的链接。
  • 开发版保护:CLI 探测只读取本机 CLI 来源;只读限制下禁止采用账号,并保持现有凭证不变。本次上游适配仅补充这两个关键测试场景,复用原有回归测试。
  • 跨平台差异:文件链接行为受系统和权限影响,相关测试有 1 项平台跳过;本次未新增 macOS/Linux 实机验证。
  • 验证范围:上述通过结果仅指相关测试和桌面类型检查,不代表全量检查通过。
  • 回滚 / 降级方式:可使用现有浏览器登录或设备码登录;如需回滚代码,应回退本 PR 的账号复用功能改动,保留合入的上游 main 变更。

@greptile-apps

greptile-apps Bot commented Sep 3, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 为桌面端内置 OpenAI 供应商增加显式采用当前 Codex CLI ChatGPT OAuth 账号的能力,并保持凭证内容仅由 Main 进程处理。

  • 新增 local-cli 登录模式及跨 Renderer、Preload、IPC、Maker Core 的类型和调用链
  • 在采用前后校验 OAuth 账号、文件链接拓扑和 owner generation,并复用现有取消与单飞流程
  • 设置页展示可用入口和当前账号标识,并补充五种语言文案与相关测试

Confidence Score: 5/5

未发现由本次改动引入且需要阻止合并的具体问题,当前实现看起来可以安全合并。

显式采用流程在 Main 进程完成账号、链接拓扑、owner generation 和持久断开边界检查,Renderer 仅接收非敏感元数据;调查到的竞态均有 fail-closed 行为或缺少可观察故障。

Important Files Changed

Filename Overview
apps/desktop/src/main/maker-host/auth-adapters.ts 新增系统 Codex OAuth 探测与显式采用事务,包含链接复核、owner/cancel 边界和失败回滚。
apps/desktop/src/main/maker-host/nativeProviderAuthBinding.ts 扩展原生供应商绑定,使显式采用系统凭证时清除撤销状态并保留 inherited 来源。
apps/desktop/src/main/maker-ipc/localCliDetect.ts 在 Main 进程识别 Codex OAuth 可用性,并仅向 Renderer 返回布尔元数据。
apps/desktop/src/main/maker-ipc/authHandlers.ts local-cli 纳入受运行时校验的 Codex 登录模式,并继续复用现有操作所有权与取消机制。
apps/desktop/src/renderer/hooks/codexAuthLogin.ts 将本机 CLI 采用接入 Renderer 登录单飞、模式切换和 owner lease 流程。
apps/desktop/src/renderer/hooks/useCodexAuth.ts 扩展认证状态机以承载 local-cli pending 状态和登录结果。
apps/desktop/src/renderer/components/settings/ProvidersSection.tsx 在 OpenAI 设置中增加 Codex CLI 采用入口,并在已连接状态显示账号标识。
apps/desktop/src/shared/localCliDetect.ts 为本机 CLI 检测结果新增 OAuth 可复用性元数据契约。
packages/maker-core/src/interfaces/auth-adapter.ts local-cli 添加到共享登录模式接口,保持各层类型一致。

Sequence Diagram

sequenceDiagram
  participant U as 用户
  participant R as Renderer 设置页
  participant P as Preload / IPC
  participant M as Main 鉴权适配器
  participant S as 系统 Codex auth.json
  participant C as Cindy codex-home

  R->>P: 检测 Codex CLI OAuth 可用性
  P->>M: 请求非敏感登录元数据
  M->>S: 读取并校验 OAuth 形态与账号 ID
  M-->>R: oauthLoggedIn 布尔值
  U->>R: 选择“使用 Codex CLI”
  R->>P: triggerLogin(local-cli)
  P->>M: 启动受跟踪的登录操作
  M->>S: 复核账号与 OAuth 状态
  M->>C: 建立共享 auth.json 链接
  M->>M: 复核 owner generation 与链接拓扑
  M->>M: 清除断开边界并记录继承来源
  M-->>R: 返回认证状态并刷新供应商
Loading

Reviews (1): Last reviewed commit: "fix(desktop): roll back superseded Codex..." | Re-trigger Greptile

Signed-off-by: JupiterTheWarlock <84393202+JupiterTheWarlock@users.noreply.github.com>
Signed-off-by: JupiterTheWarlock <84393202+JupiterTheWarlock@users.noreply.github.com>
@JupiterTheWarlock
JupiterTheWarlock force-pushed the feat/use-current-codex-cli-account branch from 8fcdf16 to e000a91 Compare September 3, 2026 09:24
@MagicLizi MagicLizi added touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) awaiting-discussion 等待维护者讨论(review-pr) labels Sep 3, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

这个 PR 会在设置页增加「使用当前 Codex CLI 账号」的用户可见入口,并改变登录交互,需要先做维护者确认。

确认方式:直接在本 PR 上 Approve;若需要修改,请 Request Changes,作者改完后再 Approve 即放行。

讨论 issue:#3863

@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(apps/desktop/src/renderer/components/settings/ProvidersSection.tsx / apps/desktop/src/renderer/hooks/codexAuthLogin.ts / apps/desktop/src/renderer/hooks/useCodexAuth.ts)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范

@MagicLizi

Copy link
Copy Markdown
Contributor

@JupiterTheWarlock 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Signed-off-by: JupiterTheWarlock <84393202+JupiterTheWarlock@users.noreply.github.com>

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

格式门未通过,请先补全 PR 描述后再继续。

本次缺的段落(对照仓库 PR 模板):

  • 这次改了什么
  • 怎么验证的
  • 风险

请用 gh pr edit 或网页把这三段写进 Description。补齐并推送(或至少更新描述)后会重新走审查。UI 证据缺失不阻断,已另评论提醒。

@MagicLizi MagicLizi added status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) and removed awaiting-discussion 等待维护者讨论(review-pr) labels Sep 6, 2026
@MagicLizi
MagicLizi dismissed their stale review September 6, 2026 18:33

这些问题已在当前 head 的后续 commit 中修复(格式门/安全门已通过),自动 dismiss 旧的 CHANGES_REQUESTED 以解除合并阻塞。

@MagicLizi MagicLizi added the awaiting-discussion 等待维护者讨论(review-pr) label Sep 6, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

@JupiterTheWarlock 👋 这个 PR 现在在等维护者确认,确认之前流程不会合并它 —— 不是卡住了,也不是在等你再改一版(你推的改动流程都读到了,判的就是最新一版代码)。

这条是流程自动发的状态提醒(同一版代码只发一次),不用回复。

@MagicLizi MagicLizi removed the status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) label Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

支持在 Cindy 中显式使用当前 Codex CLI 账号

2 participants