Skip to content

[Bug][Codex V2] 保存 V2 子 Agent 后回读校验失败:写入与回读使用不同模型目录/Provider 上下文 #65

Description

@zhushihao

环境

  • CCSwitchMulti:v3.19.2-16.2
  • macOS
  • 当前 Codex Provider:codex-multirouter-company(MultiRouter Pro 公司)
  • 目标供应商:Bitto
  • 涉及功能:Codex Sub-Agent V2 保存流程

症状

在 V2 子 Agent 页面点击“保存 V2 子 Agent 配置”后,前端提示:

Codex Agent 文件写入后回读校验失败。

数据库保存看起来已经发生,但 Agent 文件投影与回读校验不一致。

我定位到的根因

  1. 写入阶段和回读阶段使用了不同的 Provider 上下文。

    • finish_codex_subagent_v2_mutation 调用 codex_subagent_v2_write_verification,验证时通过 codex_provider_classification_context 传入 ProviderClassificationContext
    • publish_codex_multirouter_projection 仍调用 prepare_codex_config_text_with_model_catalog_without_provider_context,即写入 Agent 文件时没有传入 Provider 上下文。
    • 对于 mode=all 路由,或模型没有命中 raw matchPrefixes 的情况(例如 glm-5.3deepseek-v4-flash-vision),写入阶段可能把模型判为不可路由、不生成角色文件;回读校验阶段却根据 target provider 目录判为可路由、要求文件存在,于是返回失败。
  2. 投影后的 modelCatalog 没有写回数据库,V2 编译仍只读数据库里的原始 modelCatalog。

    • 前端 saveSpawnAgentCandidates / handleSaveRoutingRoutes 保存时不会把 selectedProjectedCatalog 写回 Provider 的 settingsConfig.modelCatalog
    • codex_catalog_model_specs 仍从 settings.modelCatalog 读取,而投影后的聚合 catalog 只写到 Live 文件。
    • 因此 Bitto 新增的 deepseek-v4-flash-vision 已出现在 ~/.codex/cc-switch-model-catalog.json 和 UI 投影中,但不会自动出现在当前 MultiRouter 的 V2 后端模型列表里。

本机证据(手动修复前)

  • Bitto Provider 的 modelCatalog 有:
    • deepseek-v4-flash-vision
  • 当前 MultiRouter 的 settingsConfig.modelCatalog 之前没有 deepseek-v4-flash-vision
  • 当前 MultiRouter 的 codexRouting.subagentV2.profiles 之前没有 deepseek-v4-flash-vision
  • 实际生成的 Live catalog 有 deepseek-v4-flash-vision
  • ~/.codex/agents 缺少 glm-5-3.toml,因为 Bitto 路由 matchPrefixes 没有 glm
  • 手动把模型名规范化为 deepseek-v4-flash-bitto、并给 Bitto 路由补上 glm 后,glm-5-3.tomldeepseek-v4-flash-bitto.tomlgpt-5-6-luna.tomlgpt-5-6-sol.toml 均能生成且内容与预期一致

关联问题 / PR

建议修复方向

  1. 让 Agent 文件写入和回读校验使用同一份 Provider 上下文;例如 publish_codex_multirouter_projection 也接收 ProviderClassificationContext,或统一由投影设置编译。
  2. 保存 MultiRouter 路由/子 Agent 候选后,把投影生成的 modelCatalog 写回 Provider DB 的 settingsConfig.modelCatalog;或让 codex_catalog_model_specscodex_multirouter::projection 生成模型列表。
  3. 补回归测试:
    • mode=allmatchPrefixes 为空/未命中时,写入与验证一致;
    • 目标供应商新增加模型后,刷新/保存 V2 列表能自动加入;
    • 保存 V2 后 verification.role_files_status == verified

如果需要,我可以提供本机修复前后的数据库备份路径和日志证据。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions