CC Switch v4.0.9
4.0 正式版的第五个修复版本
重新梳理了添加供应商的整个流程:表单按填写顺序排列,地址和 Key 之后就是模型列表;点「获取模型列表」后弹窗自动打开,每个模型的上下文窗口、是否支持推理和图片输入都已经查好,勾选后点「应用」就连同参数一起加进列表,同一个弹窗里取消勾选就能移除;字段说明收进「?」,提示会按应用当前是直连、路由还是聚合来显示。另外修复了 Codex 新建线程和自动化在部分上游报错、整个线程无法继续的问题:经路由转成 Chat 协议的 DeepSeek、OpenCode Zen 等报 400,xAI 原生 Responses 报 422。WSL2 里的 Claude Desktop 等连不上本机回环的客户端,现在可以在「设置 → 本地路由」填一个「连接地址」。4.0 完整的更新内容请见 v4.0 发布说明。
重新梳理的供应商添加流程
这一版把添加和编辑供应商的表单从头到尾理了一遍,主要是 Claude Code、Codex 和聚合三种布局。以前模型列表收在高级选项里,排在它所决定的默认模型后面;获取到的模型只能在列表下方逐个添加,加完还要逐个核对自动填好的参数;几乎每个字段下面都有一段灰字,有些提示和你实际所处的模式对不上。现在按填写顺序走一遍:
1. 地址、Key 和上游格式。 先选预设或填地址和 Key。选上游格式时,提示按应用当前的模式显示:应用处在直连模式时,如果选的格式需要转换,格式下面会提示这张卡正在直连使用、改成这种格式保存后请求会失败,或者这种格式要先切到路由或聚合才能用。Claude Code 的上游格式选 OpenAI Chat 或 Responses 时,不再显示用不上的认证字段。
2. 模型列表:获取、挑选、自动填参数。 Codex 的模型列表从高级选项里挪了出来,紧跟在地址和 Key 后面,和聚合布局一样叫「模型列表」。Claude Code 聚合、Codex、OpenCode 和 MiniMax Code 的模型列表现在这样添加模型:
- 点模型列表上的「获取模型列表」。
- 获取成功后「选择模型」弹窗自动打开。每个模型旁边已经显示好上下文窗口,以及是否支持推理和图片输入,数值来自同地址的预设,其次按供应商地址查 models.dev,再其次查模型厂商自己的条目。
- 勾选想要的模型,点「应用」。新模型追加到列表末尾,参数按弹窗里显示的值直接填好,不再弹「已补全……的上下文等参数,请核对」的提示。
同一个弹窗也负责删除:勾选表示「在列表里」,已配置的模型默认勾选,取消勾选后点「应用」就会从列表移除,点「取消」什么都不改。留下的模型保持原来的顺序和设置。已配置但供应商这次没返回的模型,单独列在「不在供应商列表中」一组,也能一并清理。弹窗支持搜索、全选 / 全不选、只看已选,并显示已选数量;获取过一次后按钮变成「选择模型」,再点不会重新获取,需要时在弹窗里点「重新获取」。
3. 默认模型:列表第一行。 Codex 有模型列表时,第一行就是默认模型,不再单独有一个默认模型输入框;改名或删掉第一行,默认模型跟着变。列表原本为空时,添加模型会自动把当前的默认模型放在第一行,默认模型不会因为加了列表而变掉。没有配置模型列表的卡仍然保留默认模型输入框:这类卡用的是 Codex 自带的 /model 菜单,加上列表后菜单里只会剩下列表里的模型。聚合模型列表也去掉了每行的 ★ 和「设为默认模型」,规则同样是第一行即默认。
4. 子代理(Codex,新增)。 Codex 表单新增「子代理模型」和「子代理推理强度」,对应 config.toml 里 [agents] 下的 default_subagent_model 和 default_subagent_reasoning_effort。留空就删掉对应的键,子代理沿用主代理的设置;切换供应商时这两项跟着换,[agents] 下的其他设置不动。填的模型不在模型列表里时,表单会提示并可以一键加入:不在列表里的模型,Codex 拿不到它的上下文窗口,经路由转成 Chat / Anthropic 协议时还会被换成默认模型。聚合模式下不写这两项,子代理跟随主模型,以免主代理换到另一家的模型后,子代理又被送回默认供应商。
5. 高级选项。 「完整 URL」开关只对端点路径不标准的网关有用,挪进了高级选项;已经打开它的卡,编辑时高级选项会自动展开。User-Agent 和请求覆盖合成一块,统一注明只在路由和聚合模式下生效。
贯穿整个表单:说明收进「?」。 字段是什么、什么时候用,放在字段名后面的「?」里;页面上只留需要你注意的后果,比如改了模型列表要重启 Codex、最大输出超过实际上限会报 400。托管账号的卡(Codex、xAI 登录和 Copilot)上,后端本来就不读的字段不再显示;旧版残留字段的提示缩成一句话;Claude Desktop 的模型模式说明改成一句话:供应商提供原生 Claude 模型时用直连,DeepSeek、Kimi 等第三方模型用模型映射。
新增
「设置 → 本地路由」新增「连接地址」。 CC Switch 写进客户端配置的代理地址(包括 Claude Desktop 的网关地址)以前总是按监听地址推导,监听 0.0.0.0 时写的是 127.0.0.1。WSL2(NAT 模式)里的 Claude Desktop 会话访问不到 Windows 的本机回环,所以一直连不上,把监听地址改成 0.0.0.0 也没用。现在把监听地址设为 0.0.0.0,再在「连接地址」里填 WSL 能访问到的 Windows 地址,写给客户端的代理地址就会改用它。保存后会直接改写正在走路由的客户端,不用重启路由服务。这个设置只保存在本机,不会随云同步带到其他设备。
新增预设: SoruxGPT、IKunCode、RunToken、BotCF、YYLX、TokenFlux、OpenModel。
修复
- Codex 新建线程或跑自动化时,DeepSeek 等上游报 400,整个线程用不了。 Codex 桌面版新建线程时会往历史里插入一条没有对应工具调用的工具结果(create_thread 回执)。经路由把 Responses 转成 Chat 协议时,这类结果以前被当成
role=tool消息发出去,DeepSeek、OpenCode Zen 这类严格的 Chat 上游会拒绝这个线程里的每一次请求。现在这类找不到对应调用的工具结果会改成一条带标记的用户消息,里面的图片照常作为图片发送;有对应调用的工具结果和以前完全一样。 - Codex 用 xAI 原生 Responses 时报 422,线程无法恢复。 Codex 桌面版插入的回执(新建线程、自动化更新、心跳、跨线程消息)没有
call_id,xAI 会以「缺少call_id」拒绝整个请求,而回执一直留在历史里,所以这个线程之后都发不出去。现在只在发往 xAI 时,把这类回执改写成带同样标记的用户消息,保留文字和图片;有call_id的条目和其他上游都不受影响。 - Claude Code 的上游格式选 OpenAI Chat 或 Responses 时,路由发出的是
x-api-key。 以前请求头只看 Key 的变量名,用ANTHROPIC_API_KEY的卡会发x-api-key,OpenAI 格式的上游不认。现在 OpenAI 格式一律用Authorization: Bearer,Anthropic 格式仍按变量名决定。 - Claude Code 聚合模式只用默认供应商的兼容开关。 选到其他供应商的模型时,可能发出那家不支持的功能而报错。现在按开关的性质合并所有成员的设置:关闭实验性 beta、Artifact、自动模式服务器这类,只要有一家关就关;工具搜索、始终启用 effort、细粒度工具流式这类,所有成员都开才开。额外请求体、思考和窗口相关的开关仍然跟随默认供应商。
- 启动时界面语言不对,打开设置页后才变回来。 首屏语言读的是浏览器缓存,缓存为空或过期时(比如清过 WebView 数据、把
~/.cc-switch复制到新电脑)会先显示系统语言。现在启动时会读取保存的语言设置并立即应用。 - macOS 上连不上局域网里的 API 地址。 CC Switch 现在会向 macOS 申请「本地网络」权限。第一次连接局域网地址时系统会弹出授权,这次请求可能仍然失败,点「允许」后重试即可。如果以前点过拒绝,需要到「系统设置 → 隐私与安全性 → 本地网络」里打开 CC Switch。
- 打开供应商编辑面板时页面闪一下。 编辑面板以前先打开一个加载页再换成内容;现在等内容准备好再打开,保留和新增面板一样的淡入效果。
其他: Flatpak 构建文档修正了 --bundles 参数的写法,并说明没有签名私钥时怎么跳过更新包。
升级说明
数据库结构没有变化,仍然是 20。新增预设只影响新添加的供应商。
致谢
感谢 @NeeYoonc(Codex 线程里找不到对应调用的工具结果不再导致 Chat 上游报 400)、@allenxu09(本地路由的「连接地址」)、@chivopic(macOS 本地网络权限)、@NestorRay(打开编辑面板时的闪烁)、@zydo(Flatpak 构建文档)的贡献。
感谢 @loulanyue 更早提交了同一问题的修复,感谢 @OriyukiAkari 实测确认 xAI 原生 Responses 也有这个问题。感谢 @Z-Eternal、@xulimeng2022、@flame916、@hej56230-commits、@Soliton1912、@gggjjto、@KinJ、@xue-ding-e 报告问题、提供复现信息和帮忙验证。
完整的技术细节请见 CHANGELOG。