OpenAI 分组在没有账号模型映射时,每次 Codex 客户端请求 Model Manifest 都会经由调度器挑选一个账号向上游拉取。调度结果受优先级、负载因子和限流窗口影响,而分组内账号的模型权限并不一致(例如部分账号拥有 Trusted Access for Cyber 的特殊模型),导致同一个 API Key 前后看到的模型列表不确定。此外 OAuth 账号的 manifest 拉取完全没有缓存,每次客户端刷新都直接打到 chatgpt.com。
models 按 slug 取并集后返回。部分账号失败时以成功部分合并;全部失败按配置返回 503 或回退到现有调度器路径。/v1/models 与 /models(无非空 client_version)复用同一固定账号配置;API Key 请求标准上游模型列表,OAuth 从现有 Codex manifest 提取 ID,输出 OpenAI 列表。codex-manifest-pinned-accounts:OpenAI 分组的固定账号 Manifest 配置(数据模型、管理端校验与 UI)、运行时的固定账号并发拉取与合并、不可用时的回退策略。codex-manifest-cache:Codex Model Manifest 的按账号缓存策略:新鲜期、乐观期与强制刷新期的行为,以及对所有账号类型生效。groups 新增 JSONB 列 codex_models_manifest_config,新增迁移文件;ent schema 与生成代码更新。Group 领域模型、分组仓储的创建与更新、API Key 加载分组的字段投影、认证快照缓存、管理端分组 DTO 与校验、分组复制逻辑;openai_codex_models_handler.go 新增固定账号分支;openai_codex_models_service.go 新增固定账号并发拉取与合并、缓存策略调整并扩展到 OAuth 路径。POST/PUT /admin/groups 请求与响应新增 codex_models_manifest_config 字段;GET /admin/accounts 已支持按分组过滤,无需改动。GroupsView.vue 编辑对话框 OpenAI 区块、types/index.ts、中英文 i18n。