Skip to content

Commit 39d91b7

Browse files
committed
docs(account-pool): expand navigation and provider scope
1 parent 51157b9 commit 39d91b7

1 file changed

Lines changed: 122 additions & 13 deletions

File tree

docs-linhay/spaces/account-pool/README.md

Lines changed: 122 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
- 账号池截图归档到 `screenshots/`
1313
- 账号池多 agent 讨论归档到 `debate/`
1414
- `nolon/chatgpt(codex)` OAuth 登录与账号过期恢复集成
15+
- 账号池信息架构与子菜单导航
16+
- `openai-compatible` provider 资产入口与管理范围
1517

1618
## 非目标
1719
- 在本次操作中直接定义账号池的详细产品方案或技术实现
@@ -20,83 +22,190 @@
2022

2123
## 当前需求
2224

23-
### 目标
25+
### 完全体目标
2426

25-
在当前账号池中,为 `nolon/chatgpt(codex)` 账号补齐两条闭环
27+
账号池在完全体状态下不再是一个单平面页面,而是一个带子菜单的父级工作区
2628

27-
1. 应用内发起 OAuth 登录,替代纯手工导入 `auth.json`
28-
2. 当账号过期或失效时,用户可以直接从失败卡片触发重新登录,而不是只看到失败原因
29+
1. 用户点击侧边栏 `账号池` 后,`账号池` 下方展开两个子菜单:
30+
- `codex`
31+
- `openai-compatible`
32+
2. `codex` 子菜单承接现有 `ChatGPT OAuth auth-file + Codex API Key + quota + reauth + rotation` 的完整闭环。
33+
3. `openai-compatible` 子菜单承接通用 OpenAI 兼容 provider 的新增、查看、编辑、删除与配置工作台。
34+
4. 父级 `账号池` 负责统一入口、统一导航状态和统一空间命名;两个子菜单分别承接各自的业务模型,不强行压成同一种“账号卡”心智。
2935

3036
### 已知边界
3137

3238
1. 当前 GetTokens 已能把 `nolon chatgptAccount` 类 auth 文件识别为 `codex`
3339
2. 当前导入链路已能把 legacy `codex/nolon` auth 清洗成 sidecar 真正消费的最小字段结构
3440
3. 当前失败原因已能从 sidecar `statusMessage` 透传到账号卡片
35-
4. 当前前端入口仍以“上传文件 / 粘贴 JSON / API Key 录入”为主,没有 OAuth bridge
41+
4. 当前前端入口仍以“上传文件 / 粘贴 JSON / API Key 录入”为主,`codex` 已有 OAuth bridge,但 `openai-compatible` 还没有正式产品入口
3642
5. 当前桌面应用不是单一全局登录应用,不能把单个账号失效等同于整个应用登出
43+
6. 参考 sidecar 的 `openai-compatible` 协议是 `provider 容器 + api-key-entries + models`,不是单个 API key 资产
44+
45+
### 信息架构
46+
47+
#### 父级:账号池
48+
49+
- 侧边栏主项:`账号池`
50+
- 交互:点击后展开/聚焦子菜单,而不是直接只展示单一列表
51+
- 子菜单顺序:
52+
1. `codex`
53+
2. `openai-compatible`
54+
55+
#### 子级 1:codex
56+
57+
- 继续保留并增强现有 `codex` 账号池能力:
58+
- `ChatGPT 登录`
59+
- `导入 Auth File`
60+
- `粘贴 Auth 内容`
61+
- `添加 Codex API Key`
62+
- `重新登录`
63+
- `额度观察`
64+
- `轮动设置`
65+
66+
#### 子级 2:openai-compatible
67+
68+
- 新增一个面向 provider 的子工作区
69+
- 其核心对象不是“单个 key”,而是“provider”
70+
- provider 最小字段:
71+
- `name`
72+
- `baseUrl`
73+
- `apiKeyEntries[0].apiKey`
74+
- `prefix(可选)`
75+
- 后续增强字段:
76+
- `headers`
77+
- `apiKeyEntries[]`
78+
- `models[]`
3779

3880
### BDD 场景
3981

40-
#### 场景 1:新增 ChatGPT 账号
82+
#### 场景 1:进入账号池父级后看到子菜单
83+
84+
- Given 用户已进入桌面应用主界面
85+
- When 用户点击侧边栏 `账号池`
86+
- Then `账号池` 下方展开两个子菜单:`codex``openai-compatible`
87+
- And 当前页面主体展示默认子菜单对应的内容
88+
- And 父级高亮与子级选中态保持一致
89+
90+
#### 场景 2:切换到 codex 子菜单
91+
92+
- Given 用户已展开 `账号池` 子菜单
93+
- When 用户点击 `codex`
94+
- Then 页面进入 `codex` 账号池视图
95+
- And 用户可以看到 `ChatGPT 登录``导入 Auth File``粘贴 Auth 内容``添加 Codex API Key`
96+
- And 现有 quota、reauth、rotation 等 codex 专属能力仍保留在该子菜单内
97+
98+
#### 场景 3:切换到 openai-compatible 子菜单
99+
100+
- Given 用户已展开 `账号池` 子菜单
101+
- When 用户点击 `openai-compatible`
102+
- Then 页面进入 `openai-compatible` provider 视图
103+
- And 主体对象是 provider 列表或 provider 容器
104+
- And 页面不再误用 `添加 Codex API Key` 作为主入口
105+
106+
#### 场景 4:新增 ChatGPT 账号
41107

42108
- Given sidecar 已就绪,账号池页面可操作
109+
- And 当前位于 `codex` 子菜单
43110
- When 用户点击 `ChatGPT 登录`
44111
- Then 应用调用 sidecar OAuth 起始接口并弹出登录确认框
45112
- And 确认框展示登录 URL,并提供 `复制``在浏览器中打开``关闭`
46113
- And 前端显示登录进行中状态
47114
- When sidecar OAuth 流程完成
48115
- Then 账号池刷新并出现新的 `codex` 账号记录
49116

50-
#### 场景 2:过期账号重新登录
117+
#### 场景 5:过期账号重新登录
51118

52-
- Given 账号池中已有一个 `codex` auth-file 账号,状态异常且存在失败原因
119+
- Given 当前位于 `codex` 子菜单
120+
- And 账号池中已有一个 `codex` auth-file 账号,状态异常且存在失败原因
53121
- When 用户点击该卡片上的 `重新登录`
54122
- Then 应用发起新的 OAuth 流程
55123
- When OAuth 成功且检测到新的 `codex` auth 文件
56124
- Then 应用将新 auth 内容回填到原账号资产
57125
- And 刷新后原账号 ID 仍以原文件名存在
58126
- And 临时生成的新 auth 文件不会作为重复账号残留
59127

60-
#### 场景 3:OAuth 失败或超时
128+
#### 场景 6:OAuth 失败或超时
61129

62130
- Given 用户已发起 `ChatGPT 登录``重新登录`
63131
- When sidecar 返回 `error` 状态或超时
64132
- Then 前端保留错误提示
65133
- And 不修改现有账号内容
66134
- And 用户可以再次触发登录
67135

68-
#### 场景 4:登录 URL 手动操作
136+
#### 场景 7:登录 URL 手动操作
69137

70138
- Given 用户已发起 `ChatGPT 登录``重新登录`
71139
- When 前端展示登录确认框
72140
- Then 用户可以复制登录 URL
73141
- And 用户可以手动打开浏览器继续登录
74142
- And 用户可以关闭确认框而不影响后续列表刷新
75143

76-
#### 场景 5:账号失效后的可恢复性
144+
#### 场景 8:账号失效后的可恢复性
77145

78146
- Given `codex` auth-file 账号状态不是 `ACTIVE / CONFIGURED / DISABLED / LOCAL`
79147
- When 用户查看账号卡片
80148
- Then 卡片除失败原因外,还应暴露 `重新登录` 动作
81149
- And 该动作只作用于当前账号,不影响其他账号和应用整体路由
82150

151+
#### 场景 9:新增 openai-compatible provider
152+
153+
- Given 用户已进入 `openai-compatible` 子菜单
154+
- When 用户点击新增 provider
155+
- Then 页面展示 provider 级表单
156+
- And 表单至少要求填写 `name``baseUrl``apiKey`
157+
- And `prefix` 作为可选字段出现
158+
- When 用户保存成功
159+
- Then 页面出现新的 openai-compatible provider 容器
160+
- And 该容器不被错误地渲染成 `Codex API Key`
161+
162+
#### 场景 10:编辑 openai-compatible provider
163+
164+
- Given 用户已进入 `openai-compatible` 子菜单
165+
- And 页面中已有一个 provider 容器
166+
- When 用户打开该 provider 的详情或编辑面板
167+
- Then 用户可以查看并修改基础字段
168+
- And 第一阶段至少支持修改 `name``baseUrl`、首个 `apiKey entry``prefix`
169+
- And 后续阶段可继续扩展 `headers`、多 `apiKey entries``models`
170+
171+
#### 场景 11:删除 openai-compatible provider
172+
173+
- Given 用户已进入 `openai-compatible` 子菜单
174+
- And 页面中已有一个 provider 容器
175+
- When 用户执行删除操作
176+
- Then 删除粒度应是整个 provider
177+
- And 不应误实现为“只删除 provider 里的某一个 key 但保留残缺容器”
178+
179+
#### 场景 12:子菜单状态保持
180+
181+
- Given 用户已进入 `账号池` 下的任意子菜单
182+
- When 用户刷新页面或切换到其他主导航后再返回
183+
- Then 应用应能恢复上一次使用的子菜单,或按约定回到默认子菜单
184+
- And 不应出现父级高亮、子级选中、主体内容三者不一致
185+
83186
## 验收标准
84187
- 已存在 `docs-linhay/spaces/account-pool/README.md`
85188
- 已存在 `docs-linhay/spaces/account-pool/plans/`
86189
- 已存在 `docs-linhay/spaces/account-pool/screenshots/`
87190
- 已存在 `docs-linhay/spaces/account-pool/debate/`
88191
- 后续账号池相关文档默认优先落到该 space
192+
- 已定义 `账号池` 父级与 `codex / openai-compatible` 子菜单的信息架构
89193
- 已定义 `codex` OAuth 登录与过期恢复的验收场景
194+
- 已定义 `openai-compatible` provider 的最小闭环场景
90195
- 实现后至少覆盖后端 bridge 测试与前端账号动作测试
91196
- 过期 `codex` 账号不再只是显示失败原因,而是可直接触发重新登录
92197
- 成功重登后默认回填原账号资产,不新增重复账号
93198
- 登录入口改为手动确认框,不再无提示直接拉起系统浏览器
199+
- `openai-compatible` 第一阶段不要求完整 AI Provider 后台,但必须以 provider 为主对象,而不是复用 `Codex API Key` 单条资产心智
200+
- 左侧导航、父级高亮、子菜单选中态与主体内容必须一致
94201

95202
## 相关链接
96203
- [docs-linhay 文档入口](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/README.md)
97204
- [spaces 结构治理](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/dev/20260424-spaces-structure-governance.md)
205+
- [OpenAI-Compatible 评估与边界](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/spaces/20260427-deepseek-provider-support/README.md)
206+
- [OpenAI-Compatible Debate](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/spaces/20260427-deepseek-provider-support/debate/20260427/accounts/20260427-openai-compatible-provider-support-v01.md)
98207

99208
## 当前状态
100209
- 状态:in-progress
101-
- 最近更新:2026-04-26
102-
- 最近变更:启动 `nolon/chatgpt(codex)` OAuth 登录与过期恢复集成,先收敛为账号池内局部动作,不引入全局登录页
210+
- 最近更新:2026-04-27
211+
- 最近变更:账号池需求已升级为完全体信息架构,父级 `账号池` 下明确收敛两个子菜单 `codex / openai-compatible``codex` 继续承接 OAuth 与 quota 闭环,`openai-compatible` 改为 provider 级心智,不复用单条 `Codex API Key` 交互

0 commit comments

Comments
 (0)