ワンクリックで
gettokens-codex-account-list
GetTokens Codex 账号列表:Codex Channel Routing、账号请求顺序、两模式路由、路由探测、模型映射、OAuth 透传语义、openai-compatible 映射保存与浏览器预览。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
GetTokens Codex 账号列表:Codex Channel Routing、账号请求顺序、两模式路由、路由探测、模型映射、OAuth 透传语义、openai-compatible 映射保存与浏览器预览。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
GetTokens 领域工程:账号池、quota、UI 体系、调试与 CLIProxyAPI fork。
GetTokens 流程治理:Wails 开发回路、spaces、文档记忆写回与 AGENTS 同步。
GetTokens CLIProxyAPI 上游版本 intake / reference-port 工作流:看新 tag、规划合并、拆子 space、在 gettokens/sidecar 内重实现、验证、重建 sidecar、dev App 验收与双仓提交。
Use when dxyer iOS verification, smoke testing, or debugging needs real API traffic evidence through Proxyman CLI: clear sessions, discover proxy host, export HAR/proxymansession logs, inspect request headers, verify DXY-TOD-SESSION user switching, or distinguish API data mismatch from UI/function failure.
GetTokens 性能治理:用于排查或预防内存占用、WebView/Wails 卡顿、React 渲染放大、大账号池请求放大、sidecar Go 热路径、日志/SQLite/本地文件膨胀、性能回归、perf budget 或 profiling 验收;当用户说性能、内存、卡顿、占用、峰值、泄漏、慢、回归、治理、budget、pprof、profiling,或改动触及账号池、quota、live sessions、session-management、usage attribution、sidecar management API、Wails bridge、日志热路径时使用。
GetTokens 桌面/Wails 前端设计质量统一 skill,合并 taste-skill、Impeccable 与 frontend-system-design 的可复用方法。Use when designing, shaping, auditing, polishing, hardening, or system-designing GetTokens frontend/Wails surfaces: UI/UX flows, Gemini/frontend handoff briefs, visual anti-pattern audits, state/DTO/routing/performance checklists, desktop previews, screenshots, and frontend acceptance criteria. 适用于前端体验优化、视觉重构、复杂页面系统设计、设计稿落地、审计页面、发布前 harden;不用于纯后端/sidecar 修复。
| name | gettokens-codex-account-list |
| description | GetTokens Codex 账号列表:Codex Channel Routing、账号请求顺序、两模式路由、路由探测、模型映射、OAuth 透传语义、openai-compatible 映射保存与浏览器预览。 |
当任务涉及 frontend/src/features/codex/CodexAccountListFeature.tsx、Codex Channel Routing、Codex 账号请求顺序、路由模式、路由探测、模型映射、OAuth/auth-file 映射、openai-compatible provider 映射,或后端 Codex route explain / probe / OAuth model alias 时使用本 skill。
UpdateAccountPriority 表达;渠道顺序必须保存到 Codex channel config。channel-routing/config.json;旧 routing.strategy 只保留作 relay / compatibility 边界,不再参与 Codex 候选排序、fallback 或 balanced 计数。balanced 模式应从 live-session tracker 读取活跃会话数,而不是从展示用 snapshot 反推。balanced 多项目不均分时,先区分“配置是否生效”和“均衡口径是否符合预期”:当前生产语义是剩余可路由候选池内按账号 active session 粗粒度均衡,同数时按渠道顺序 tie-break;它不是按 project、历史 request count 或 token usage 做公平分配。项目名属于 live sessions / route decision 观测字段,除非后续引入 balanced-v2 / project-fair scorer,否则不得把 UI 项目列表解释为项目维度路由键。balanced 诊断证据优先读取 sidecar route decision 和 live sessions,而不是只看前端历史请求列表:核对 routeMode、trace reason、candidateCount、selected account 分布、filtered / guard 原因、账号 requestability / model support / disabled 状态。若多数决策候选池只有 1-2 个账号,先解释候选池收缩,再讨论均衡算法。sequential / balanced。project、projectBindings、projectModeFallbackRouteMode、fallbackMode 已从 Codex / Claude Channel Routing 保存、执行、DTO 和 UI 中下线;旧配置读入时直接丢弃这些字段或把非法 route mode 降级为 sequential。dedicated / prefer / ordered / weighted / canary 不再作为上游兼容输入保留;它们只作为非法 route mode 进入 invalid mode 诊断,不进入 Codex 新 UI / Wails DTO / engine policy。exclude 不是 route mode,只能作为请求级 deny 或 pool filter。allowAccountIDs / denyAccountIDs / orderAccountIDs / allowFallback 只作为请求级兼容 policy,不作为新页面主配置模型。auth-file / OAuth Codexcodex-api-keyopenai-compatibleconfigured 判断:
configured 且没有 requestability evidence 的账号应标记为 waiting-check,继续显示在请求顺序列表,但不进入 requestable candidates / explain / probe 候选。active / local / ready / ok / verified / manual / usage / quota / configured-provider 可作为请求资格证据;usage/quota 只是证据之一,不是唯一入口。configured-provider 证据,不应因为没有 usage/quota 成功记录被误判为待检测。ChannelRoutingConfig.manualRequestableAccountIDs,只作为 requestability evidence,不写入账号凭证本体。codex-api-key,禁用不能只停留在前端状态:账号池 SQLite / management account status 必须保存 disabled:true,CLIProxyAPI synthesizer 必须生成 disabled runtime auth;manual-disabled 只能作为当前进程内存 guard 辅助,不能写成持久 runtimeStates 事实。runtimeStates.manual-disabled 必须忽略并在保存时清理。CodexAccountListFeature.tsx 保持为 controller:
frontend/src/features/channel-routing/model/channelRouting.tsfrontend/src/features/channel-routing/model/channelRoutingValidation.tsfrontend/src/features/channel-routing/model/channelRoutingSelectors.tsfrontend/src/features/channel-routing/model/channelRoutingPreviewData.tsfrontend/src/features/channel-routing/components/ChannelRoutingWorkbench.tsxfrontend/src/features/channel-routing/components/RouteExplainPanel.tsxfrontend/src/features/codex/components/:
CodexRouteProbeCard.tsxCodexAccountOrderRow.tsxCodexAccountDetailModal.tsxModelCombobox.tsxcodexAccountPresentation.tsfrontend/src/features/codex/model/:
codexAccountList.ts:账号合并、渠道展示排序、可请求状态codexModelMappings.ts:OAuth/openai-compatible 模型映射归一codexRoutePolicy.ts:旧请求级兼容 policy、探测日志、路由状态models[].name -> Codex 模型 models[].alias || name。name + alias 去重,允许同一个真实模型映射到多个 Codex alias。model -> model 写成显式 alias,但账号详情仍应把已拉到的 OAuth/Web 模型作为只读透传列表展示,避免用户误以为没有模型。codex channel 共享映射。modelOptions 与显式 alias,账号池详情用 GetAuthFileModels 拉到的 auth-file 模型目录;不得混入全局 Codex catalog、全局 relay 模型列表或仅按 acct_ 前缀决定是否可测试。ModelRegistry。当 /v0/management/accounts/:account_key/models 通过 registry 查不到模型,但 account-store 中该账号是 Codex auth-file 且未禁用时,必须按 plan_type 回退到 Codex 静态模型集;该兜底只适用于 Codex auth-file,不扩展到 Claude/Gemini 等其他 auth-file。datalist。model 作为模型路由输入,不读取 X-OpenAI-Subagent、thread_source 或 role 作为候选账号选择条件。X-OpenAI-Subagent 只属于 Codex Responses client context 透传 header;可以继续转发给上游,但不得写入 GetTokens route context 或 metadata 作为路由判断。deepseek;sidecar 按 deepseek 进入模型 registry / 账号能力过滤,命中声明支持该模型的账号。models[].name = deepseek-chat、models[].alias = deepseek;路由侧按 deepseek 选账号,执行侧发给上游 deepseek-chat。openai_compat_models attribute 携带模型声明。旧 config.OpenAICompatibility 只作为迁移输入,不能在运行时 synthesis 或 sdk/cliproxy 模型注册阶段作为 fallback;缺少自描述模型时应暴露为回归,而不是反查旧 config 补洞。codex-api-key.models_json=[] 表示未声明自定义模型,应按 Codex API key 的默认 Codex 模型集注册和查询,不能投影成“无可路由模型”。管理接口 /v0/management/accounts/:account_key/models、route explain/probe 候选池和真实请求调度必须保持一致。/model 展示与 GetTokens runtime route 是两条边界:runtime 真源仍是 sidecar / account store / channel routing;model_catalog_json 只是让本地 Codex TUI 稳定展示可选模型的 projection。CODEX_HOME/gettokens-model-catalog.json。写入 config.toml 顶层 model_catalog_json 时必须指向这个 GetTokens-owned 文件,不把 account store 或 provider preset 当成 catalog 真源。model_catalog_json 会完全替换 Codex 内置和远程 catalog;生成文件必须覆盖当前 relay 可选的完整模型集合,不能只写 DeepSeek 或某个单一账号模型。models[].name = deepseek-chat、models[].alias = deepseek)用 alias,否则用 name;这保证用户在 /model 里选到的值就是 sidecar route engine 的请求模型输入。OpenAICompatibleModel.Alias 与 Name 仅大小写不同(例如 name=gpt-5.5、alias=GPT-5.5 或 name=gpt-5.4-mini、alias=GPT-5.4-Mini)时,catalog slug 必须保留真实模型 ID,display_name 才使用展示名;否则 Codex 会发送 GPT-5.5 并触发 sidecar unknown provider for model GPT-5.5。model_catalog_json,默认保留并返回冲突提示;除非用户明确确认接管,不得静默覆盖。/model 同步开关必须双向立即写配置:打开时写入 GetTokens-owned model_catalog_json pointer,关闭时只移除指向 gettokens-model-catalog.json 的 pointer;不得删除或改写用户外部 catalog。ProbeCodexAccountRouting 使用页面传入的候选约束发起最小 relay 请求。quota-empty、rate-limit、auth-error 等 transient blocked 账号不得进入 probe candidates,避免“已知不可用账号”被 probe 再次命中或消耗额度。manual-disabled 不从持久 runtimeStates 判定,禁用状态应直接来自账号池 DB / runtime auth disabled。orderAccountIDs / allowAccountIDs / denyAccountIDs / allowFallback 仅作为请求级兼容探测输入,不能回写为 Codex channel config。#frame=codex&workspace=account-list 必须可在普通浏览器预览。window.go.main.App 时使用 previewData.ts,不能让页面空白。runChannelExplain、probe、row badge 里分别用 orderedRows.filter(row.requestable) 临时重算,否则会出现列表显示“候选”但高级诊断显示“候选 0 / 未命中”的同屏矛盾。sequential / balanced、渠道组范围和 explain;旧“默认 / 允许 / 排除”只用于请求级兼容探测入口。请求模式 与 参与账号 放在同一 workbench 内连续展示,主路径优先回答“是什么模式”和“哪些账号会参与”。参与账号 默认折叠,只显示数量;用户需要核对具体账号时再展开。更多操作 / 保存 / 过滤等控制放在标题右侧或同一 header band 内,不单独拉出一条说明栏。AccountCard,不要再维护一个“像账号池”的分叉卡片:
extraBadges、eyebrowPrefix、showDeleteAction=false、showFooterActions=false。#1 可用,但该前缀只属于 Codex 请求顺序页。请求模式 标题旁使用问号图标按钮打开说明,说明作为 modal 弹层出现,不替换当前工作台主内容。*Only 字段;至少覆盖 source、requiresRequestable、requiresBlocked、requiresDisabled、hasBalance、hasLongestQuota、requiresError。source 必须区分 codex-auth-file、codex-api-key、openai-compatible。hasBalance 基于 quota response 中的 billing/balance 信息判断;hasLongestQuota 基于最长 quota window 判断。requiresError 不包含已禁用账号。View / Scope cluster。ListCodexAccountInventory:
internal/wailsapp.ListCodexAccountInventory() 从统一 ListAccounts() / AccountRecord 映射结果中过滤 Codex 路由相关账号。CodexAccountListFeature.tsx 不应再用 ListAccounts + ListOpenAICompatibleProviders 自行拼装真实 Codex rows;浏览器 preview 可继续使用本地 preview data。internal/accounts 统一账号映射层,不在 Codex 页面、账号池页面或 Wails feature 各自解析 auth_json。accountKind=openai-compatible 的统一账号记录进入 Codex inventory;页面模型层只做 presentation row 转换,不拥有“哪些账号属于 Codex 路由链路”的最终判定。internal/wailsappcmd/gettokens/app.gocmd/gettokens DTO / mapperfrontend/wailsjsauth-file:<name>codex-api-key:<id>openai-compatible:<name>GET /v0/management/accounts/:account_key 只能在 runtime apply 状态为 pending 时补做 apply,不能每次打开详情都重新 apply。否则 apply hook 的瞬时失败会把已经 applied / registered_routeable 的账号冲成 failed / degraded,造成账号卡异常和模型列表被清空。supports_websockets=false,WebSocket 只能作为高级 opt-in;显式开启时必须对齐 Codex Provider.websocket_url_for_path() 语义:http:// 转 ws://、https:// 转 wss://,ws:// / wss:// 原样保留。Status 页应检测当前本地 GetTokens relay provider 的存量 supports_websockets=true 并提示显式修复,不静默改用户配置。408 stream closed before response.completed、session_closed、abnormal close、timeout 属于 WebSocket transport failure,只能熔断该 auth 的 WebSocket 能力,不能创建 auth/model 全局 route guard,也不能把后续 HTTP Responses 放大成 503 auth_unavailable。覆盖范围必须同时包括 stream chunk 错误、bootstrap error、handshake 408/5xx、dial 失败、send/retry-send 失败;这些错误都要带 TransportFailureKindWebsocket,并在 auth manager 直接错误分支和 stream chunk 分支都被识别。websockets=false 或 WebSocket circuit 命中时,downstream WebSocket 应关闭并提示 retry over HTTP;openai-compatible provider 继续走 HTTP fallback。auth_unavailable,以及 Codex websockets=false 会 force HTTP fallback。npm --prefix frontend run typechecknpm --prefix frontend run test:unit -- src/features/codex/codexAccountList.test.mjs#frame=codex&workspace=account-list 检查账号行、探测卡、详情 modal 和 combobox。go test ./internal/wailsapp -run 'TestListOAuthModelAliases|TestUpdateOAuthModelAliases|TestProbeCodexAccountRouting|TestDetectCodexRoutingProbeHit|TestSidecarRelayRequest'frontend/wailsjs 并跑类型检查。ChannelRouteMode 只接受 sequential / balanced;project 输入必须降级或标记为旧兼容输入。CODEX_HOME,只把真实上游 key 复制到临时 sidecar config;Codex auth.json 只写本地 relay client key,不写真实 provider key。wire_api = "responses",模型使用 client-facing 名称,例如无 alias 时的 deepseek-v4-flash。codex -a never exec --skip-git-repo-check --ephemeral --sandbox read-only --model <model> --output-last-message <tmp-file> "<prompt>"。/v1/models?client_version=<codex-version> 返回目标模型、Codex CLI exit code 为 0、最后消息符合预期、sidecar 收到 /responses 请求、临时目录和含 key 配置已删除。docs-linhay/spaces/20260511-codex-account-list-tab/screenshots/<YYYYMMDD>/codex/。docs-linhay/spaces/20260511-codex-account-list-tab/README.md。docs-linhay/dev/。docs-linhay/memory/YYYY-MM-DD.md。docs-linhay/scripts/check-docs.sh。