diff --git a/coding-agent/docs/superpowers/specs/2026-07-31-webui-codex-oauth-design.md b/coding-agent/docs/superpowers/specs/2026-07-31-webui-codex-oauth-design.md new file mode 100644 index 000000000..ed57a22d8 --- /dev/null +++ b/coding-agent/docs/superpowers/specs/2026-07-31-webui-codex-oauth-design.md @@ -0,0 +1,93 @@ +# WebUI Codex OAuth 登录(device flow)+ 多账号 — 设计 + +日期:2026-07-31(同日修订:加入多账号并存) +状态:已确认(决策记录在 PR 描述,ADR-lite) + +## 背景与目标 + +o6n 部署的 coding agent 支持 provider=codex(ChatGPT OAuth),但: + +- OAuth 登录只有 CLI 入口,网页端无登录能力; +- 当前 pod 内 refresh token 已失效(403),恢复只能进 pod 操作; +- `~/.coding-agent/oauth/auth.json` 位于容器 overlay fs,pod 重建即丢; +- 只支持单账号记录,无法在多个 ChatGPT 账号间切换。 + +目标:在 webui 完成 codex device-code 登录全流程;OAuth 记录持久化到数据 PVC;**多账号并存,新建会话时可选账号**;支持多个并发登录流程的管理。 + +非目标:其他 provider 的 OAuth(anthropic/copilot redirect 型)、远端 revoke(只删本地记录,CLI 已有 revoke)。 + +## 关键决策 + +1. **形态:只做 codex device flow**。Codex OAuth 原生 device-code 流程(`CodexOAuthClient.request_device_code` / `poll_device_token` / `exchange_device_code`),天然适合 headless 服务器。 +2. **多账号 = 复合 provider key**:`OAuthStore`/`StoreBackedTokenSource` 本就按 provider_name 做 key,直接用 `codex`(默认账号)和 `codex: