|
11 | 11 | - 账号池开发计划归档到 `plans/` |
12 | 12 | - 账号池截图归档到 `screenshots/` |
13 | 13 | - 账号池多 agent 讨论归档到 `debate/` |
| 14 | +- `nolon/chatgpt(codex)` OAuth 登录与账号过期恢复集成 |
14 | 15 |
|
15 | 16 | ## 非目标 |
16 | 17 | - 在本次操作中直接定义账号池的详细产品方案或技术实现 |
17 | 18 | - 在仓库级 `dev/` 或其他 space 中重复维护同一份账号池范围说明 |
| 19 | +- 为整个桌面应用引入独立的全局登录页或 Web 管理后台式会话系统 |
| 20 | + |
| 21 | +## 当前需求 |
| 22 | + |
| 23 | +### 目标 |
| 24 | + |
| 25 | +在当前账号池中,为 `nolon/chatgpt(codex)` 账号补齐两条闭环: |
| 26 | + |
| 27 | +1. 应用内发起 OAuth 登录,替代纯手工导入 `auth.json` |
| 28 | +2. 当账号过期或失效时,用户可以直接从失败卡片触发重新登录,而不是只看到失败原因 |
| 29 | + |
| 30 | +### 已知边界 |
| 31 | + |
| 32 | +1. 当前 GetTokens 已能把 `nolon chatgptAccount` 类 auth 文件识别为 `codex` |
| 33 | +2. 当前导入链路已能把 legacy `codex/nolon` auth 清洗成 sidecar 真正消费的最小字段结构 |
| 34 | +3. 当前失败原因已能从 sidecar `statusMessage` 透传到账号卡片 |
| 35 | +4. 当前前端入口仍以“上传文件 / 粘贴 JSON / API Key 录入”为主,没有 OAuth bridge |
| 36 | +5. 当前桌面应用不是单一全局登录应用,不能把单个账号失效等同于整个应用登出 |
| 37 | + |
| 38 | +### BDD 场景 |
| 39 | + |
| 40 | +#### 场景 1:新增 ChatGPT 账号 |
| 41 | + |
| 42 | +- Given sidecar 已就绪,账号池页面可操作 |
| 43 | +- When 用户点击 `ChatGPT 登录` |
| 44 | +- Then 应用调用 sidecar OAuth 起始接口并打开系统浏览器 |
| 45 | +- And 前端显示登录进行中状态 |
| 46 | +- When sidecar OAuth 流程完成 |
| 47 | +- Then 账号池刷新并出现新的 `codex` 账号记录 |
| 48 | + |
| 49 | +#### 场景 2:过期账号重新登录 |
| 50 | + |
| 51 | +- Given 账号池中已有一个 `codex` auth-file 账号,状态异常且存在失败原因 |
| 52 | +- When 用户点击该卡片上的 `重新登录` |
| 53 | +- Then 应用发起新的 OAuth 流程 |
| 54 | +- When OAuth 成功且检测到新的 `codex` auth 文件 |
| 55 | +- Then 应用将新 auth 内容回填到原账号资产 |
| 56 | +- And 刷新后原账号 ID 仍以原文件名存在 |
| 57 | +- And 临时生成的新 auth 文件不会作为重复账号残留 |
| 58 | + |
| 59 | +#### 场景 3:OAuth 失败或超时 |
| 60 | + |
| 61 | +- Given 用户已发起 `ChatGPT 登录` 或 `重新登录` |
| 62 | +- When sidecar 返回 `error` 状态或超时 |
| 63 | +- Then 前端保留错误提示 |
| 64 | +- And 不修改现有账号内容 |
| 65 | +- And 用户可以再次触发登录 |
| 66 | + |
| 67 | +#### 场景 4:账号失效后的可恢复性 |
| 68 | + |
| 69 | +- Given `codex` auth-file 账号状态不是 `ACTIVE / CONFIGURED / DISABLED / LOCAL` |
| 70 | +- When 用户查看账号卡片 |
| 71 | +- Then 卡片除失败原因外,还应暴露 `重新登录` 动作 |
| 72 | +- And 该动作只作用于当前账号,不影响其他账号和应用整体路由 |
18 | 73 |
|
19 | 74 | ## 验收标准 |
20 | 75 | - 已存在 `docs-linhay/spaces/account-pool/README.md` |
21 | 76 | - 已存在 `docs-linhay/spaces/account-pool/plans/` |
22 | 77 | - 已存在 `docs-linhay/spaces/account-pool/screenshots/` |
23 | 78 | - 已存在 `docs-linhay/spaces/account-pool/debate/` |
24 | 79 | - 后续账号池相关文档默认优先落到该 space |
| 80 | +- 已定义 `codex` OAuth 登录与过期恢复的验收场景 |
| 81 | +- 实现后至少覆盖后端 bridge 测试与前端账号动作测试 |
| 82 | +- 过期 `codex` 账号不再只是显示失败原因,而是可直接触发重新登录 |
| 83 | +- 成功重登后默认回填原账号资产,不新增重复账号 |
25 | 84 |
|
26 | 85 | ## 相关链接 |
27 | 86 | - [docs-linhay 文档入口](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/README.md) |
28 | 87 | - [spaces 结构治理](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/dev/20260424-spaces-structure-governance.md) |
29 | 88 |
|
30 | 89 | ## 当前状态 |
31 | | -- 状态:ready |
| 90 | +- 状态:in-progress |
32 | 91 | - 最近更新:2026-04-26 |
33 | | -- 最近变更:`AccountDetailModal` 的 `RAW_SOURCE_DATA` 区块已支持点击 / 键盘触发复制,便于直接提取 auth 原文做排障和对比。 |
| 92 | +- 最近变更:启动 `nolon/chatgpt(codex)` OAuth 登录与过期恢复集成,先收敛为账号池内局部动作,不引入全局登录页。 |
0 commit comments