Skip to content

Commit c460c31

Browse files
committed
feat: add account grouping and sorting modes
1 parent 0ecad47 commit c460c31

21 files changed

Lines changed: 1981 additions & 328 deletions

docs-linhay/memory/2026-05-24.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@
77
- 2026-05-24 quota 展示切换:`QuotaBars` 的 percent/token 切换入口从右侧数值按钮改为整块 quota 区域可点击/可键盘切换;仅在窗口存在 `usedTokens`/`limitTokens` 时启用 `role="button"``aria-pressed``Enter`/`Space` 切换。
88
- CLIProxyAPI 上游同步:`docs-linhay/references/CLIProxyAPI#gettokens/sidecar` 已合并 `upstream/main@50d19e20``v7.1.20-1`),生成并推送 merge commit `1c5db246``AxApp/CLIProxyAPI#gettokens/sidecar`。冲突保留 `internal/registry/model_definitions_test.go` 的 GetTokens fork 回归测试,并把 Antigravity credits 测试的 loadCodeAssist host 断言更新为上游 prod host。
99
- CLIProxyAPI 验证:子仓库 `go test ./internal/registry``go test ./internal/runtime/executor``go test ./...``git diff --check` 均通过;已执行 `./scripts/ensure-sidecar.sh darwin arm64` 重建本地 sidecar,meta 为 `commit=1c5db246``dirty=clean`
10+
- 账号池分组与排序模式规划:`#frame=accounts` 后续需要从固定 provider 分组升级为可切换分组模式,并新增排序模式。默认按套餐分组、按业务优先级排序;P0 分组维度为套餐、来源、状态,P0 排序维度为业务优先级、名称、状态、剩余额度;P1 再规划供应商/资源状态分组与重置时间/最近使用排序。分组和排序只改变列表组织方式,不改变筛选、选择、路由、轮动、禁用或导出语义;详细规划写入 `docs-linhay/spaces/account-pool/plans/20260524-account-grouping-mode-plan-v01.md`,入口 README 已同步。
11+
- 账号池分组与排序实现:`#frame=accounts` 主列表已新增分组/排序工具栏入口,默认 `group=plan``sort=priority`;支持套餐/来源/状态/供应商/资源分组,以及业务优先级/名称/状态/剩余额度/重置时间排序。顶层 hash canonicalizer 已保留 `group` / `sort`,避免切换后被还原成 `#frame=accounts`。验证:`npm --prefix frontend run typecheck``npm --prefix frontend run test:unit` 通过;浏览器验证 `#frame=accounts&group=source&sort=quota` 可恢复“分组 · 来源 / 排序 · 剩余额度”,截图归档到 `docs-linhay/spaces/account-pool/screenshots/20260524/accounts/20260524-accounts-group-sort-toolbar-after-v01.png`

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

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@
2222
3. 筛选菜单中的状态、资源、来源都使用同一种勾选框行样式;状态无勾选即表示不过滤状态。
2323
4. 2026-05-23 无头浏览器验收截图:`screenshots/20260523/accounts/20260523-accounts-filter-and-after-v01.png`
2424

25+
### 分组模式规划
26+
27+
1. 账号池主列表需要支持可切换分组模式和排序模式,二者只改变列表组织方式,不改变筛选、选择、路由、轮动、禁用或导出语义。
28+
2. 默认分组模式为“按套餐分组”,优先级最高;用户进入 `#frame=accounts` 时默认看到 `Pro / Plus / Free / API Key 或兼容服务 / 未识别套餐` 的结构。
29+
3. 其他规划维度按阶段推进:
30+
- P0:来源、状态
31+
- P1:供应商、资源状态
32+
4. 默认排序模式为“业务优先级”,保留现有 Codex API Key `priority` 轮动顺序;其他 P0 排序维度为名称、状态、剩余额度,P1 维度为重置时间、最近使用。
33+
5. 搜索和筛选先执行,再对过滤后的账号分组,最后在每个分组内排序;选择模式的全选继续作用于全部过滤结果,不限制在单个分组。
34+
6. 分组模式需要支持 hash 与本地偏好恢复,显式 `group=plan|source|status|provider|resource` 优先于本地持久化。
35+
7. 排序模式需要支持 hash 与本地偏好恢复,显式 `sort=priority|name|status|quota|reset|recent` 优先于本地持久化。
36+
8. 详细规划见 `plans/20260524-account-grouping-mode-plan-v01.md`
37+
9. 2026-05-24 无头浏览器验收截图:`screenshots/20260524/accounts/20260524-accounts-group-sort-toolbar-after-v01.png`
38+
2539
## 非目标
2640
- 在本次操作中直接定义账号池的详细产品方案或技术实现
2741
- 在仓库级 `dev/` 或其他 space 中重复维护同一份账号池范围说明
@@ -293,6 +307,37 @@
293307
- And 不应出现父级高亮、子级选中、主体内容三者不一致
294308
- And 父级折叠后再展开时,应保留上次子菜单选中态
295309

310+
#### 场景 15:默认按套餐分组查看账号池
311+
312+
- Given 用户进入 `#frame=accounts`
313+
- When 当前没有显式 `group` hash 且没有本地分组偏好
314+
- Then 账号列表默认按 `套餐` 分组
315+
- And 分组顺序为 `Pro -> Plus -> Free -> API Key / 兼容服务 -> 未识别套餐`
316+
- And 搜索、筛选、密度模式仍按原语义工作
317+
318+
#### 场景 16:切换分组模式不改变筛选结果
319+
320+
- Given 用户已在账号池主列表设置搜索词和筛选条件
321+
- When 用户将分组模式从 `套餐` 切换为 `来源``状态`
322+
- Then 页面只改变列表分组方式
323+
- And 过滤后的账号集合不应因为分组模式切换而扩大或缩小
324+
- And 选择模式中的全选仍作用于全部过滤结果
325+
326+
#### 场景 17:默认按业务优先级排序
327+
328+
- Given 用户进入 `#frame=accounts`
329+
- When 当前没有显式 `sort` hash 且没有本地排序偏好
330+
- Then 每个分组内账号默认按 `业务优先级` 排序
331+
- And Codex API Key 继续按 `priority` 从高到低排列
332+
- And priority 相同时按名称稳定排列
333+
334+
#### 场景 18:切换排序模式不改变分组和过滤结果
335+
336+
- Given 用户已在账号池主列表设置搜索词、筛选条件和 `套餐` 分组
337+
- When 用户将排序模式切换为 `剩余额度`
338+
- Then 页面只改变每个分组内部的账号顺序
339+
- And 分组数量、分组名称和过滤后的账号集合不应改变
340+
296341
## 验收标准
297342
- 已存在 `docs-linhay/spaces/account-pool/README.md`
298343
- 已存在 `docs-linhay/spaces/account-pool/plans/`
@@ -303,6 +348,10 @@
303348
- 已定义 `codex` OAuth 登录与过期恢复的验收场景
304349
- 已定义 `openai-compatible` provider 的最小闭环场景
305350
- 已明确定义子菜单恢复规则:显式目标 > 本地持久化 > 默认 `codex`
351+
- 已明确定义账号池分组模式规划,默认按套餐分组,其他维度按来源、状态、供应商、资源状态分阶段推进
352+
- 已明确定义账号池排序模式规划,默认按业务优先级排序,P0 支持名称、状态、剩余额度排序,P1 支持重置时间和最近使用排序
353+
- 已明确定义分组和排序模式不改变筛选、选择、路由、轮动、禁用或导出语义
354+
- 已实现账号池工具栏分组与排序模式入口,并支持 `group` / `sort` hash 恢复
306355
- `openai-compatible` detail modal 已覆盖基础字段、单 `apiKey``headers` 文本编辑、`models / alias` 与 provider 级验证
307356
- 已明确定义 `openai-compatible provider` 的唯一性与主标识规则
308357
- 已明确定义 `openai-compatible` 第一阶段采用独立 provider 列表模型
@@ -327,9 +376,10 @@
327376
- [spaces 结构治理](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/dev/20260424-spaces-structure-governance.md)
328377
- [OpenAI-Compatible 评估与边界](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/spaces/20260427-deepseek-provider-support/README.md)
329378
- [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)
379+
- [账号池分组模式规划 v01](/Users/linhey/Desktop/linhay-open-sources/GetTokens/docs-linhay/spaces/account-pool/plans/20260524-account-grouping-mode-plan-v01.md)
330380

331381
## 当前状态
332382
- 状态:active-umbrella
333-
- 最近更新:2026-05-16
334-
- 最近变更:`openai-compatible` provider detail 已收口为单 `apiKey` provider 工作流;`codex` 继续承接 OAuth 与 quota 闭环,`openai-compatible` 改为 provider 级心智,但不暴露多 `apiKey entries` 编辑
383+
- 最近更新:2026-05-24
384+
- 最近变更:新增账号池分组与排序模式规划,默认按套餐分组、按业务优先级排序;P0 同时规划来源/状态分组与名称/状态/剩余额度排序,P1 规划供应商/资源状态分组与重置时间/最近使用排序;分组和排序只改变列表组织方式,不改变筛选、选择、路由、轮动、禁用或导出语义
335385
- 判定:`account-pool` 是长期 umbrella space,不按单个未收口需求管理;具体新需求应进入独立 space,当前近期主线为 `20260515-rate-limit-middleware`,短线收尾为 `20260511-codex-binary-management`

0 commit comments

Comments
 (0)