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

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

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