[Bug] 3.10.2 (macOS arm64) 同族多 provider 同名模型:切换通道后旧会话报"模型已不可用",子代理模型绑定写死通道不跟随切换
Open
Nobody has claimed this yet.
priority: P2
- Dominant language
- No language data
- Stars
- 22
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
环境
- ZCode Desktop 3.10.2,macOS(Apple Silicon)
- 模型通道:bigmodel family 下同时启用三个 provider:
builtin:bigmodel(API Key)、builtin:bigmodel-coding-plan(Coding Plan)、builtin:bigmodel-start-plan(Start Plan),三者模型名完全相同(GLM-5.3 / GLM-5.3-Flash / GLM-5-Turbo)
问题概述
同族多 provider 并存且模型同名时,模型身份解析有三处体验问题(推测同一根因:模型选择按 providerId + modelId 成对存储,但 UI 与默认行为没有把 provider 归属暴露给用户):
- 模型选择器不区分 provider 归属。三个通道的模型在下拉里名字完全一样,用户无法知道所选条目属于哪个通道;切换 family 选中通道后,同名选择实际指向了另一个 provider 的模型。
- 切换通道后旧会话恢复失败。旧会话保存的 qualified model id(如
builtin:bigmodel/GLM-5.3)在切换后的注册表中解析不到,resume 报错「当前会话使用的模型已不可用,请从当前模型列表中选择一个可用模型后继续」,用户感知为"选了 Flash 没生效,自动变回 5.3"或"无法选模型"。日志中可见切换窗口期推送给 workspace 的 provider registry 一度为空(providerCount: 0),以及「历史 session 模型已不可用,拒绝按默认模型恢复」。 - 子代理模型绑定写死 provider,不跟随 family 切换,且计费跟绑定走。
agents-state.json的builtInModelOverrides以custom:<providerId>:<modelId>形式钉死当时通道。主会话切到 API Key 通道后:① 绑定不迁移,自然预期是"切换通道后子代理跟随新通道的同名模型";② 无任何 UI 提示绑定仍指向旧通道;③ 子代理流量计费跟随绑定而非当前选中通道——主会话在 API Key、子代理却持续消耗 Coding Plan 额度,用户不可见也不可控。
复现步骤
- 同族配置两个 provider(如 API Key + Coding Plan),模型名相同;
- 会话 A 在通道 X 下选择 GLM-5.3-Flash 并对话;
- 在设置中把 family 选中通道切换到通道 Y;
- resume 会话 A → 报「当前会话使用的模型已不可用」;此时新建会话的同名选择会解析到通道 Y;
- 查看子智能体模型绑定 → 仍指向通道 X;派发子代理时额度从通道 X 扣减。
期望行为
- 模型选择器在多 provider 同名时展示归属(分组或后缀),选中值可见通道;
- 子代理绑定提供「跟随当前通道/默认」选项,或在 family 选中通道变化时提示迁移既有绑定;
- provider 切换完成后,旧会话给出一次性、可一键迁移的提示,而不是直接拒绝恢复;
- 消除切换窗口期的空 registry(
providerCount: 0)状态。
实际行为
- resume 报错
当前会话使用的模型已不可用,请从当前模型列表中选择一个可用模型后继续。(resolveRuntimeModelForV4 FAIL,2026-09-01 单日 18 条,时间与通道切换操作窗口吻合;停止切换后不再出现) - 子代理绑定保持旧通道并静默按旧通道计费。
(日志引用已去除会话 ID、凭证与账号信息。)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the provider switch with same-named models and inspect agents-state.json, the workspace provider registry, and the resolveRuntimeModelForV4 failure. Check the model selector and resume flow against the reported behavior. Done means provider ownership is visible, old sessions have a migration path, sub-agent bindings can follow the selected channel, and the registry does not become empty during switching.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100