Skip to content

Commit e40a450

Browse files
committed
docs: refine openai-compatible provider spec
1 parent d955267 commit e40a450

3 files changed

Lines changed: 125 additions & 4 deletions

File tree

docs-linhay/spaces/20260427-deepseek-provider-support/README.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,18 +127,54 @@
127127

128128
1. 后端补齐 `openai-compatible` 的 Wails / management bridge,而不是只扩 `CodexAPIKey`
129129
2. 前端从“添加 Codex API Key”升级为“新增 openai-compatible provider”
130-
3. 顶层对象改为 provider 容器,而不是单个 API key 资产
130+
3. 顶层对象改为 provider 容器,而不是单个 API key 资产;第一阶段使用独立 provider 列表模型,不进入现有 `AccountRecord` 主列表
131131
4. 第一阶段最少支持:
132132
- `name`
133133
- `baseUrl`
134134
- `apiKeyEntries[0].apiKey`
135135
- `prefix`
136+
- `name` 唯一性校验
137+
- 空状态与默认 CTA
138+
- provider 配置验证
136139
5. 第二阶段再补:
137140
- `headers`
138141
-`apiKeyEntries`
139142
- `models`
140143
6. DeepSeek 作为 `openai-compatible` 下的 provider 候选,而不是先做专用 `DeepSeek API Key`
141144

145+
## Provider 验证边界
146+
147+
当前 GetTokens 里的 API Key 资产还没有被设计成“可验证 provider 配置”的正式链路:
148+
149+
1. `Codex API Key` 现状只有创建、删除、改优先级,没有 verify / test 接口
150+
2. 现有外呼桥接主要服务 `codex auth-file quota`,依赖 `auth_index + chatgpt.com/backend-api/wham/usage`,不适合直接承担通用 API Key/provider 验证
151+
3. 当前前端状态模型也没有“最近一次验证结果/失败原因”的展示位
152+
153+
因此,这个需求的正式归属应是:
154+
155+
1. `account-pool -> openai-compatible` 子菜单负责人
156+
2. 验证对象是 provider 配置,而不是单条资产卡片
157+
158+
如果产品决定先在 `codex api key` 上补一个最小验证版本,应明确它只是过渡方案,不是最终信息架构。
159+
160+
### 最小验证入参与结果
161+
162+
最小后端验证入参建议至少包括:
163+
164+
1. `baseUrl`
165+
2. `apiKey`
166+
3. `headers(可选)`
167+
4. `model(可选,但建议支持)`
168+
169+
最小前端结果状态建议至少包括:
170+
171+
1. `idle`
172+
2. `loading`
173+
3. `success`
174+
4. `error`
175+
176+
并且 `error` 需要保留最近一次失败原因,作为用户可见状态,而不是仅写调试日志。
177+
142178
## BDD 场景
143179

144180
### 场景 1:当前版本尝试添加 DeepSeek
@@ -170,3 +206,18 @@
170206
- Then 页面主体进入 openai-compatible provider 视图
171207
- And 用户看到的对象应是 provider 容器
172208
- And 页面不应继续显示只适用于 codex 的新增入口文案
209+
210+
### 场景 5:验证 provider 配置
211+
212+
- Given 用户已进入 `openai-compatible` 子菜单
213+
- And 页面中已有 provider 容器
214+
- When 用户触发验证
215+
- Then 验证请求应基于 provider 配置发起,而不是复用 `codex quota` 请求
216+
- And 页面应能展示最近一次验证状态与失败原因
217+
218+
### 场景 6:codex api key 的过渡验证边界
219+
220+
- Given 产品决定先在 `codex api key` 上补最小验证功能
221+
- When 进入实现
222+
- Then 必须把该功能标记为过渡方案
223+
- And 后续正式的统一验证归属仍应回到 `openai-compatible provider` 工作区

docs-linhay/spaces/20260427-deepseek-provider-support/debate/20260427/accounts/20260427-openai-compatible-provider-support-v01.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,29 @@
3737
- Gemini 视角补充前端交互风险:现有 modal、detail、snippet、action 都是单 key 心智,若不改信息架构,会把 provider 级对象错误压扁。
3838
- 本轮形成共识,无需继续展开对抗。
3939

40+
### 第 2 轮
41+
42+
- 用户要求先达成一致,再决定是否继续补需求。
43+
- Gemini 视角对“遗漏点”再次收敛,区分出“本轮必须先补”与“可以后置到实施计划/技术设计”的事项。
44+
- 主持归纳后,与 Gemini 达成以下优先级共识:
45+
1. 先补导航状态恢复规则
46+
2. 再补 `openai-compatible provider` 的稳定标识与唯一性
47+
3. 再补 `openai-compatible` 是否独立列表模型
48+
4. 最后补 `openai-compatible` 的空状态与默认 CTA
49+
- 其余事项如子路由形态、迁移策略、测试矩阵、共性/差异矩阵,可后置到实施计划或技术设计阶段继续细化。
50+
4051
## 结论与行动项
4152

4253
### 结论
4354

4455
1. `openai-compatible` 不应被建模成“再新增一种单 API key 账号”。
4556
2. 最小正确心智应是“provider 容器 + key entries + models”。
4657
3. 第一阶段也不需要一次把全部能力做满,但顶层对象必须先是 provider。
58+
4. 在正式进入实现前,需求文档至少还要先补 4 个关键点:
59+
- 导航状态恢复规则
60+
- provider 标识/唯一性
61+
- `openai-compatible` 是否独立列表模型
62+
- `openai-compatible` 空状态与默认 CTA
4763

4864
### 推荐分阶段方案
4965

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

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
- 子菜单顺序:
5252
1. `codex`
5353
2. `openai-compatible`
54+
- 子菜单恢复规则优先级:
55+
1. 若存在明确子菜单路由或显式导航目标,优先使用该目标
56+
2. 否则读取本地持久化的上次子菜单选择
57+
3. 若以上都不存在,默认回到 `codex`
58+
- 父级 `账号池` 折叠后再次展开时,保留上一次子菜单选中态,不重置到默认值
5459

5560
#### 子级 1:codex
5661

@@ -62,20 +67,43 @@
6267
- `重新登录`
6368
- `额度观察`
6469
- `轮动设置`
70+
- 当前 `Codex API Key` 资产没有正式“验证 provider 配置”链路;若后续补验证,只能视为过渡方案,不代表最终信息架构
6571

6672
#### 子级 2:openai-compatible
6773

6874
- 新增一个面向 provider 的子工作区
6975
- 其核心对象不是“单个 key”,而是“provider”
76+
- 第一阶段使用独立的 provider 列表模型,不强行进入现有 `AccountRecord` 主列表,也不伪装成 `Codex API Key` 卡片
7077
- provider 最小字段:
7178
- `name`
7279
- `baseUrl`
7380
- `apiKeyEntries[0].apiKey`
7481
- `prefix(可选)`
82+
- provider 标识规则:
83+
- 第一阶段以 `name` 作为产品层主标识
84+
- `name` 必须唯一
85+
- 新增或编辑时若与现有 provider 重名,必须阻止保存并给出冲突提示
7586
- 后续增强字段:
7687
- `headers`
7788
- `apiKeyEntries[]`
7889
- `models[]`
90+
- 空状态规则:
91+
- 当列表中没有任何 openai-compatible provider 时,页面必须展示明确空状态
92+
- 空状态需要解释“这里管理的是 provider,而不是单个 API key 账号”
93+
- 空状态主 CTA 为“新增 openai-compatible provider”
94+
- provider 验证规则:
95+
- “验证”针对的是 provider 配置可用性,不是单个资产卡片是否存在
96+
- 第一阶段验证对象至少覆盖:
97+
- `baseUrl`
98+
- `apiKey`
99+
- `headers(可选)`
100+
- `model(可选,但建议支持)`
101+
- 第一阶段验证结果状态至少覆盖:
102+
- `idle`
103+
- `loading`
104+
- `success`
105+
- `error`
106+
- `error` 状态需要保留最近一次失败原因,便于用户在第一跳看到验证失败信息
79107

80108
### BDD 场景
81109

@@ -168,20 +196,40 @@
168196
- And 第一阶段至少支持修改 `name``baseUrl`、首个 `apiKey entry``prefix`
169197
- And 后续阶段可继续扩展 `headers`、多 `apiKey entries``models`
170198

171-
#### 场景 11:删除 openai-compatible provider
199+
#### 场景 11:验证 openai-compatible provider 配置
200+
201+
- Given 用户已进入 `openai-compatible` 子菜单
202+
- And 页面中已有一个 provider 容器
203+
- When 用户在 provider 详情或编辑面板触发“验证”
204+
- Then 应用应以 provider 配置为输入发起验证,而不是复用 `codex quota` 链路
205+
- And 最小验证入参至少包括 `baseUrl``apiKey`、可选 `headers``model`
206+
- And 页面应展示最近一次验证结果状态:`idle / loading / success / error`
207+
- And 当验证失败时,页面应保留失败原因,不能只显示一个无上下文的失败提示
208+
209+
#### 场景 12:删除 openai-compatible provider
172210

173211
- Given 用户已进入 `openai-compatible` 子菜单
174212
- And 页面中已有一个 provider 容器
175213
- When 用户执行删除操作
176214
- Then 删除粒度应是整个 provider
177215
- And 不应误实现为“只删除 provider 里的某一个 key 但保留残缺容器”
178216

179-
#### 场景 12:子菜单状态保持
217+
#### 场景 13:codex API Key 的过渡性验证
218+
219+
- Given 用户当前位于 `codex` 子菜单
220+
- And 页面中已有 `Codex API Key` 资产
221+
- When 产品选择先补一个过渡性的验证动作
222+
- Then 必须明确该动作只代表“单条 codex api key 的临时验证方案”
223+
- And 不得把它定义成最终统一的 provider 验证架构
224+
- And 后续 `openai-compatible` provider 工作区上线后,应以 provider 级验证作为正式能力归属
225+
226+
#### 场景 14:子菜单状态保持
180227

181228
- Given 用户已进入 `账号池` 下的任意子菜单
182229
- When 用户刷新页面或切换到其他主导航后再返回
183-
- Then 应用应能恢复上一次使用的子菜单,或按约定回到默认子菜单
230+
- Then 应用应按优先级恢复子菜单:显式导航目标 > 本地持久化 > 默认 `codex`
184231
- And 不应出现父级高亮、子级选中、主体内容三者不一致
232+
- And 父级折叠后再展开时,应保留上次子菜单选中态
185233

186234
## 验收标准
187235
- 已存在 `docs-linhay/spaces/account-pool/README.md`
@@ -192,6 +240,12 @@
192240
- 已定义 `账号池` 父级与 `codex / openai-compatible` 子菜单的信息架构
193241
- 已定义 `codex` OAuth 登录与过期恢复的验收场景
194242
- 已定义 `openai-compatible` provider 的最小闭环场景
243+
- 已明确定义子菜单恢复规则:显式目标 > 本地持久化 > 默认 `codex`
244+
- 已明确定义 `openai-compatible provider` 的唯一性与主标识规则
245+
- 已明确定义 `openai-compatible` 第一阶段采用独立 provider 列表模型
246+
- 已明确定义 `openai-compatible` 的空状态与默认主 CTA
247+
- 已明确定义“验证”归属为 provider 配置验证,而不是简单给现有 API key 卡片补按钮
248+
- 已明确定义 provider 验证最小入参与结果状态模型
195249
- 实现后至少覆盖后端 bridge 测试与前端账号动作测试
196250
- 过期 `codex` 账号不再只是显示失败原因,而是可直接触发重新登录
197251
- 成功重登后默认回填原账号资产,不新增重复账号

0 commit comments

Comments
 (0)