39 KiB
CC Switch v3.19.1
这一版的主线是把上一版的尾巴收干净:三家国产 Codex 网关经确认原生支持 Responses API,不用再开本地路由接管——DeepSeek 与火山方舟 Coding Plan 的预设从走本地路由改为直连,新加入的腾讯混元 TokenHub 一上来就是直连;四个能在日常里撞上的故障被修掉——Claude Desktop 用量自 v3.18.0 起被算了两遍(升级后历史数字会自动回正,但有 30 天窗口,见「升级提醒」)、切回官方 Codex 会卡在 401 且看不到登录界面、从设置页升级 Grok Build 只报一句
os error 2、Grok Build 开启接管后直接 404。另有 8 个此前一直按 $0 记账的模型补上内置定价,39 个界面文案的语言问题被修正。本版没有数据库迁移,并且是本项目第一个删除量超过新增量的版本。
重点内容:你现在可以
- 让 DeepSeek、火山方舟 Coding Plan、腾讯混元在 Codex 里直连:三家的官方 Codex 文档都已确认端点原生提供 Responses API。DeepSeek 与火山方舟 Coding Plan 的既有预设从 Chat 格式改为原生格式,供应商卡片上的「需要路由」标记与切换时的提示随之消失,请求不再经过本地代理的协议转换;腾讯混元 TokenHub 是本版新增的预设,从一开始就是原生格式。注意 DeepSeek V4 Pro 暂时还不能直连——厂商侧尚未开通它的 Codex 集成,直连请用 V4 Flash(预设默认),详见升级提醒。
- 让 DeepSeek 用上 DeepSeek 自己发布的模型目录:新的「官方厂商目录镜像」机制把厂商公布的
models.json原样下发给该厂商自己的端点,freeformapply_patch与配套的 GPT-5 提示词框架成套保留,不再被压成中性模板。判定只认域名、不认模型名——同一个模型在聚合站上未必实现同样的能力。 - 拿到正确的 Claude Desktop 用量数字:自 v3.18.0 起,经本地网关的 Claude Desktop 流量在看板里被记了两遍——一遍来自代理、一遍来自会话日志导入,token、费用与请求数约翻倍。本版修好后,明细行还在的日子会自动回到正确数字,不需要重建。
- 切回官方 Codex 之后能正常登录:此前从第三方供应商切回内置的官方 Codex 条目时,第三方的 key 会留在
~/.codex/auth.json里,Codex 拿着它去请求官方端点,稳定 401——又因为文件存在,它不会退回自己的登录界面,在应用里没有出路。 - 从设置页把 Grok Build 升上去:
grok update自 0.2.112 起改为内部调用 npm 完成分发,而图形界面启动的应用看不到 node,升级只会报一句Error: No such file or directory (os error 2)。 - 给 Grok Build 开启接管而不是撞上 404:API 格式被手动改成 OpenAI Chat 或 Anthropic 的 Grok Build 供应商,开启接管后请求会打到一个代理没有注册的路由上,直接 404,且没有故障转移、没有用量记录。同时,Grok Build 的每次请求此前都被当成新会话,缓存键注入与按会话聚合都失效了。
- 看到 8 个此前一直按 $0 记账的模型的真实成本:
gpt-5.3-codex-spark、gemini-3.5-flash-lite、kimi-k2.7-code-highspeed、glm-5-turbo、glm-5v-turbo、qwen3.6-flash,以及不带日期后缀的claude-opus-4-6/claude-sonnet-4-6。 - 在繁体中文界面里看懂「关于」页的工具管理:30 个只补了简中 / 英文 / 日文的文案漏了繁体中文,因为 i18next 会静默回落英文,这块面板自 v3.16.0 起一直是半英文的。另有 9 个文案在所有语言下都显示简体中文。
- 在官方订阅与 DeepSeek 之间来回切,而不是二选一:
auth.json与config.toml都是单槽文件,Codex 自己存不下第二份凭据。厂商的一键脚本会把这份配置改造成自己专用的,而 CC Switch 是按供应商整段快照与还原——这也是它和官方脚本最实际的区别,详见下文对照。
使用攻略
本版的改动集中在 Codex 的连接方式与用量统计口径上,建议结合以下文档了解:
- 本地路由:哪些供应商需要开启接管、接管做了什么。本版之后 DeepSeek、火山方舟 Coding Plan 与腾讯混元都不再需要它。
- 用量统计:用量看板的数据来源与统计口径,理解 Claude Desktop 双算是怎么发生的、修复后为什么部分历史日期无法回正。
- 在 Codex 中用 DeepSeek 这类 Chat 格式 API:这篇攻略讲的是本地路由如何把 Responses 转换成 Chat Completions,机制部分对 Kimi、MiniMax、SiliconFlow 等仍是 Chat 形态的供应商依旧适用;但其中以 DeepSeek 作为示例的部分已不适用于本版——DeepSeek 现在走直连,不需要路由。
Warning
唯一官方渠道声明(请务必阅读)
CC Switch 是完全免费、开源的桌面应用,不会向用户收取任何费用。请仅通过下列官方渠道获取本软件:
类别 唯一官方 官网 ccswitch.io 源码 github.com/farion1231/cc-switch 下载 GitHub Releases 作者 @farion1231 举报山寨 GitHub Issues 任何向你收费、要求充值、或索取登录凭据的"CC Switch"网站或客户端均为假冒。如果你被诱导支付了费用,请立即停止操作并通过 GitHub Issues 反馈。
概览
CC Switch v3.19.1 是一次维护性发布,主线有三条。第一条是国产 Codex 网关集体转向原生 Responses:DeepSeek 直连 api.deepseek.com,并带来一个可复用的机制——把厂商自己发布的模型目录原样镜像下发,让 freeform apply_patch 与配套的 GPT-5 提示词框架保持自洽,而不是被折叠成中性模板;火山方舟的 Coding Plan 端点 /api/coding/v3 在官方文档确认后跟进;腾讯混元的 TokenHub 作为新预设加入。三者都不再需要开启本地路由接管。
第二条是四个现场可见的故障修复:Claude Desktop 的用量自 v3.18.0 起被记两遍(#5938);切回内置官方 Codex 供应商会留下第三方的 auth.json,导致 401 且看不到登录界面;grok update 在图形界面下只报 os error 2;Grok Build 的代理接管在非 Responses 后端上 404,且每次请求都被当作新会话(#5677)。第三条是减重:3,166 行已无任何调用方的代码与 4 个未使用的 npm 依赖被删除——本版是本项目第一个删除量超过新增量的版本。此外,深链导入确认框的脱敏更严、截断更少,8 个此前按 $0 记账的模型补上定价,4 个内置定价与厂商牌价重新对齐。本版没有数据库 schema 迁移(版本号保持 v16),升级轻量。
发布日期:2026-07-31
更新规模:12 commits | 71 files changed | +2,324 / -3,680 lines
新功能
官方厂商模型目录镜像(DeepSeek 首发)
Codex 从一个目录文件读取模型能力,而 CC Switch 此前对所有供应商都用中性模板生成这个目录——对聚合站这是对的,但会剥掉厂商自家集成所依赖的能力。现在,凡是随应用内置了官方目录的厂商,直接镜像下发它自己的那一份。
DeepSeek 是第一家:内置文件带着 deepseek-v4-flash 与 deepseek-v4-pro 两个条目,保留 apply_patch_tool_type: "freeform"、web_search_tool_type: "text"、supports_search_tool: true、low / high / max 三档思考强度,以及 base_instructions 与 model_messages 里那份 17,644 字符的 GPT-5 提示词框架——这份框架必须与 freeform 工具注册一起走,因为框架本身就在指导模型使用 apply_patch,拆开任何一半都会不自洽。
判定条件刻意收得很窄:供应商必须落在原生 Responses 档并且 base_url 在 deepseek.com 上。只认域名、不认模型品牌——同一个模型在转售它的聚合站上未必实现同样的能力,按品牌授予等于把能力凭空发给了没有实现它的服务。供应商自己在目录里写死的条目仍然优先;遇到不认识的模型 ID 会克隆旗舰条目,但保留它自己的名称。其它所有档位生成的目录与改动前逐字节一致。
腾讯混元(TokenHub)Codex 预设
Codex 的预设选择器里新增「Tencent Hunyuan」,归入「开源官方」分类,位于百炼与阶跃之间。选中即写好 https://tokenhub.tencentmaas.com/v1、wire_api = "responses" 与 TokenHub 强制要求的 disable_response_storage = true;声明 hy3 与 hy3-preview 两个模型,上下文窗口 256K(而不是接受 Codex 的 128K 默认值),并标记为纯文本——Codex 不会再把 view_image 的图片载荷发给读不了图的模型。
因为是原生 Responses 供应商,Codex 直连网关、无需本地路由;生成的目录走中性原生模板,会固定 shell_type = "shell_command" 并去掉原生网关拒收的 freeform apply_patch 注册。地址管理器与测速里从一开始就有两个候选:主域名与官方备用的 .cn 域名;区域独立的国际站刻意排除在外,因为 API Key 不跨站通用。
注意 API Key 需要是开通了 Hy3 权限的 TokenHub key,Coding Plan 与 Token Plan 的订阅 key 在这个端点上用不了。
8 个此前按 $0 记账的模型补上内置定价
gpt-5.3-codex-spark、gemini-3.5-flash-lite、kimi-k2.7-code-highspeed(按 Kimi 的 Turbo 惯例,取 kimi-k2.7-code 基准价的 2 倍)、glm-5-turbo、glm-5v-turbo、qwen3.6-flash 在内置定价表里根本没有行,前缀回退也够不着,因此每一次请求都被记成零成本。
另外两行 —— 不带日期后缀的 claude-opus-4-6 与 claude-sonnet-4-6 —— 补的是一个更隐蔽的缺口:模型 ID 解析只会剥掉日期后缀、从不补上,所以一条带着无日期 ID 的日志谁也匹配不到。八行全部按「不存在才插入」播种,你改过的价格不受影响。
Grok Build 加入故障转移页签与环境变量冲突检测
设置页的故障转移在 Claude Code、Codex、Gemini 之外新增第四个 Grok Build 页签。启动时的环境变量冲突横幅也开始检测 XAI_API_KEY 与 GROK_DEFAULT_MODEL——这两个变量会静默盖掉你在应用里选的供应商。检测区分了精确名与前缀,所以 CC Switch 自己用的 GROK_BIN_DIR、GROK_HOME 不会被误报。
变更
DeepSeek 与火山方舟 Coding Plan 改为直连 Codex,不再需要本地路由
两家的预设此前都标记为 OpenAI Chat 格式,因此都是「需要接管」的:供应商卡片带着「需要路由」标记,未开代理就切换会弹提示,每个请求都要走 Codex → 本地代理 → Responses 转 Chat → 上游这条链路。
现在两家的官方 Codex 集成文档都已确认端点提供 Responses API——DeepSeek 的 api.deepseek.com 与火山方舟的 /api/coding/v3——两个预设随之声明为原生 Responses,标记与提示消失,Codex 直连网关。两家写出的 config.toml 都没有变化(本来就是 wire_api = "responses"),变的是目录生成档位;DeepSeek 另外把上下文窗口从 1,000,000 对齐到厂商自己的 1,048,576。
BytePlus 国际站刻意保持 Chat 路由不变,等国际站文档单独核实后再说。火山预设里还留了一条值得知道的计费注记:按量计费的 /api/v3 端点绝不能加进这个预设的备用地址——它单独计费,不走套餐额度。
目录的显示名与上下文窗口改为「显式才生效」
这两个字段此前带着本地默认值——模型 ID 与 128,000 的窗口——并且在厂商值有机会参与之前就应用了,镜像目录里 1M 的窗口会被 128K 覆盖掉。现在它们是可选的,回退挪到条目构造那一层,于是「留空」才真正等于「沿用厂商声明的值」。显式写了这两个字段的供应商,以及所有非镜像档位,生成的目录与之前完全一致。
用 CC Switch 接入,和直接跑官方脚本有什么不同
DeepSeek 官方提供了一条 Codex 一键接入脚本,它能用、会备份、也带恢复菜单。如果你这台机器就打算专心用 DeepSeek,跑官方脚本没有任何问题。 CC Switch 解决的是另一个场景:你要在多个供应商之间来回切。
换供应商时,登录态与配置整套换,不用自己备份
~/.codex/auth.json 与 ~/.codex/config.toml 都是单槽文件——Codex 本身没有多凭据存储,一份配置只能对应一个供应商。CC Switch 在你切走某个供应商时,把这一对文件的内容整段快照进那个供应商的记录里;切回来时再整段写回。所以「ChatGPT 订阅 → DeepSeek → 切回订阅」通常不需要重新 codex login,第三方之间来回切则完全无需手工动作。手工做同一件事,你得在每次切换前后各拷贝一次这两个文件,漏一次,被覆盖的 OAuth 凭据就只能重新登录找回。
官方脚本的取舍不同:它把 config.toml 改造成 DeepSeek 专用配置——顶层写死 preferred_auth_method = "apikey" 与 forced_login_method = "api",把认证方式固定为 API Key,并且删除 config.toml 里已有的 [profiles.*](Codex 自带的多供应商切换机制)。你的 ChatGPT 登录凭据本身没有被删,auth.json 原封不动;但在这份配置下用不上,想回订阅需要跑脚本的恢复菜单整体回滚——回滚会连带丢掉安装之后你对 config.toml 的任何手改。脚本本身也只能在 flash 与 pro 之间切换,没有「换到第三个供应商」这一档。
换供应商之后,codex resume 里的旧会话还在
Codex 的续聊列表按会话里记录的 model_provider 分抽屉。CC Switch 创建的所有第三方 Codex 供应商——不管是 DeepSeek、Kimi 还是聚合站——都写同一个标识 custom,所以在它们之间怎么换,codex resume 一直能看到全部历史。CC Switch 首次启动时还会做一次性迁移,把已知的按厂商分桶的旧会话(官方脚本写入的 deepseek 也在其中)折进这个共享桶,原文件先备份到 ~/.cc-switch/backups/。
这里有一条明确边界:这个迁移只在 CC Switch 首次启动时跑一次。如果你先装了 CC Switch、之后才去跑官方脚本,那批带 deepseek 标识的会话不会再被折进来,它们会留在自己的抽屉里。另外,你手写的、不在已知名单里的供应商标识,CC Switch 刻意不去改动它。
官方订阅的会话,在 CC Switch 里本来就和第三方混排
CC Switch 的会话管理面板直接扫描会话目录、不读 model_provider,所以官方订阅期间产生的 Codex 会话一直和第三方会话在同一个列表里,可搜索、可续聊、可删除——不需要开任何开关。
如果你还希望 Codex 自己的 codex resume 列表也把官方与第三方合并,那是另一件事:设置 → 通用 → Codex 应用增强 → 「统一 Codex 会话历史」,默认关闭。开启后只影响新会话;已有的官方会话要一并迁入,需要在开启确认框里再勾选「同时迁入现有官方会话历史」(同样默认不勾)。这两项都是既有功能、不是本版新增,边界场景见《统一 Codex 会话历史》攻略。
两个共同前提,先说清楚免得你事后困惑:
一、以 CC Switch 指向的 Codex 目录为准。 默认是
~/.codex,可在设置里改。CC Switch 不读CODEX_HOME环境变量——如果你用这个变量把 Codex 指到别处,那边的会话它看不见,供应商切换也会写进 CLI 没在用的目录里。要换目录请用 CC Switch 自己的「配置文件目录」设置。二、出现在同一个列表里,不等于一定能续聊。 Codex 的推理内容(
encrypted_content)只有产生它的后端能解密,跨供应商继续一段旧会话可能失败——这是上游的设计,不是 CC Switch 能绕过的。
修复
Claude Desktop 的用量被算了两遍
经本地网关的 Claude Desktop 流量在用量看板里落两次——一次是代理行,一次是会话记录导入行——于是它的 token、费用与请求数大约翻倍。
这是 v3.18.0 引入的回归:代理侧的去重 ID 对除 claude 之外的所有应用都带上作用域前缀,写成 session:{应用}:{供应商}:{消息ID},这就把 claude-desktop 放进了独立命名空间;而会话导入器仍然以裸的 session:{消息ID} 形态、app_type = 'claude' 写同一条 Claude 消息。三道去重防线因此同时失守:让代理行吸收已有会话行的主键收敛、写入侧的指纹探测、读取侧的过滤器——后两者都在用严格相等比较应用类型。
现在两个应用重新共用裸命名空间,两处比较则按单向规则放宽:claude 的会话行可以被 claude-desktop 的代理行吸收,反过来不成立。由于读取侧的过滤器也正是日报聚合所使用的那一个,已经入库的重复行会停止被计入,不改写、不删除任何一行——这条自愈有保留期限制,见「升级提醒」。对 Codex、Gemini、OpenCode 而言放宽后的比较退化为原来的精确匹配,额度检查仍使用严格匹配。(#5938、#5951)
切回官方 Codex 供应商会卡在 401、看不到登录界面
在 Codex API Key 保留开关关闭时(默认如此),切换到第三方供应商会把对方的 key 写进 ~/.codex/auth.json。之后再切到内置的官方供应商——它存的凭据是空的——会走「只写配置」这条分支,于是 config.toml 被替换,而第三方的 OPENAI_API_KEY 原样留在盘上。Codex 随后拿着这把外来的 key 去请求官方端点,稳定 401;又因为 auth.json 存在,它不会退回自己的登录界面,在应用里找不到出路。
现在,成功切到官方 Codex 供应商之后,如果 auth.json 里只有一个 OPENAI_API_KEY、旁边没有任何一等凭据,这个文件会被删除——OAuth 令牌、个人访问令牌、agent 身份、Bedrock key 中的任何一个都标志着这是一份真实凭据,会被完整保留;而 auth_mode、last_refresh、账号 ID 这类纯元数据不再能「挡住」一把过期的 key。
选择删除文件而不是写入 {}:空对象会被 Codex 判定为没有令牌的 ChatGPT 模式并在启动时报错,而文件缺失才等价于未登录、直接进登录流程。清理只在旧供应商已成功回填进数据库之后执行,所以被删掉的 key 并没有丢——它存进了那个供应商的记录里,再次选中它就会回来。同一处改动还放宽了 live 配置读取:清理之后的状态(没有 auth.json、有 config.toml)不再被报成「Codex 未安装」。
从设置页升级 Grok Build 只报一句 os error 2
在设置 → 关于里升级 Grok Build 会失败于 Error: No such file or directory (os error 2),没有任何其它信息。
根因是探测与执行两条路径的不对称:探测走登录 shell,会读取用户的 rc 文件,因此看得见 nvm、Homebrew、Volta;而生命周期脚本跑在非登录 shell 下,继承的是图形界面应用启动时那份很窄的 PATH。这本来无所谓,因为锚定命令都用绝对路径调用目标程序——但 grok 0.2.112 把自更新改到了 npm 分发上,grok update 内部会调起 npm view 与 npm i -g,而 npm 自己又要通过 shebang 解析 node。内层调用返回 ENOENT,grok 就把它原样抛成了那句 os error 2。
现在 macOS 与 Linux 上的生命周期命令会把登录 shell 的真实 PATH 并到继承的那份前面,读取方式是执行 /usr/bin/env 而不是回显变量——因为 fish 把 PATH 存成列表,回显会得到空格分隔的片段。原生安装的 Grok 还给升级链追加了官方 xAI 安装脚本作为兜底,刻意不用 npm i -g:npm 与主路径共享同样两种失败模式(没有 node、镜像源缺包),会一起失败;官方安装脚本是唯一不依赖 node 的路径,落点相同,并且会把 CLI 自己的 installer 设置改回 internal,顺带治好被早期 npm 兜底切到 npm 分发上的用户。
Grok Build 开启接管后 404,且每次请求都像新会话
在 API 格式被改成 OpenAI Chat 或 Anthropic 的 Grok Build 供应商上开启接管,会立刻得到 404,没有故障转移也没有用量记录——接管改写了地址与 key,却没有动后端字段,于是 CLI 把请求发到了代理没有注册的路由上。现在接管会同时把后端固定为 Responses;针对具体供应商降级到 Chat Completions 的动作仍然发生在转发层,而这个被强制的值会随整份 live 配置的备份在代理停止时还原。
另一个问题是代理的会话识别此前只认 Codex 与 OpenAI 客户端,因此 Grok Build 的每一轮都会生成一个新的会话 ID 并标记为「非客户端提供」,这同时压掉了缓存键注入与看板里的按会话聚合。现在会读取 Grok 自己的头——先会话所属的对话 ID,再会话 ID,忽略每请求变化的那个——并使用独立前缀,避免与 Codex 的记录撞车。(#5677)
9 个界面文案在所有语言下都显示简体中文
有 9 个字符串无论界面语言是什么都显示简体中文,英文与日文界面同样如此。每个调用点都用了「内联默认值」的写法、默认值是中文字面量,但对应的键在四个语言文件里一个都没有——而 i18next 会先走完语言链才考虑内联默认值,于是英文回退根本没有机会生效,中文字面量在所有语言下都赢了。
受影响的文案覆盖 Grok Build 供应商表单的必填校验提示、应用尚未接管时的故障转移悬停提示、另一个应用持有接管时停止 Claude Desktop 路由的警告及其原因说明、供应商标识读取失败提示、Codex 通用配置为空的错误、路由服务的停止与停止失败两个提示,以及用量表格里给「有 token 但算出来是零成本」的请求打的「未定价」标签。9 个键现在在简中、英文、日文、繁中里都有了。(#5960)
繁体中文的「关于」页工具管理回落成英文
界面语言设为繁体中文时,「关于」页的工具管理区块显示英文——版本行、安装与更新按钮、结果提示、安装冲突诊断,以及整个升级确认弹窗。这块面板由三次改动逐步建成,每次都只补了简中、英文、日文;而 i18next 的策略是回落英文而不是报错,于是 30 个缺失的键在测试里完全不可见。这个缺口自 v3.16.0 起一直带到 v3.19.0。
30 个文案现在全部译好,安装提示也与其它语言对齐;新增的语言测试要求每一个工具管理文案在四种语言下都存在、且插值变量一致,这类漂移以后会在测试里失败而不是发出去。(#5943)
内置定价与厂商牌价脱节
成本在写入日志时就按内置定价表冻结,所以一个过期的播种价会静默地把之后每一次请求都算错。本版修正四行:deepseek-chat 与 deepseek-reasoner 现在是 V4 Flash 的旧称别名,每百万 token $0.14 输入 / $0.28 输出、缓存读 $0.0028(原为 $0.27/$1.10 与 $0.55/$2.19);minimax-m3 按官方标准档减半到 $0.30/$1.20;gpt-5.6-luna 按 OpenAI 2026-07-30 的降价下调 80% 到 $0.20/$1.20,gpt-5.6-terra 下调 20% 到 $2/$12,gpt-5.6-sol 刻意不动,该系列的缓存写入比例保持不变。
修复只在一行的四个价格列仍然全等于此前的内置值时才改写它,所以你自己改过的价格——或者由 models.dev 同步写入的价格——绝不会被动到。
安全加固
深链导入确认框:脱敏更严,截断更少
这是 v3.19.0 那轮 ccswitch:// 确认框加固的延续。配置预览改由一个共享模块统一构建,会递归地对嵌套 TOML 表与 JSON 对象里的密钥脱敏,一次修好两个方向相反的缺陷:Grok Build 的导入此前完全不渲染配置预览,而 Codex 的导入会把内嵌的 api_key 明文打印出来。
配置预览上 300 字符的截断被移除,完整内容现在渲染在可滚动的框里——补上了确认框最后一处可能隐藏「即将写入什么」的地方。脱敏本身在所有使用它的位置都更严了,包括 MCP 导入确认框:敏感键名匹配新增 AUTHORIZATION、COOKIE、CREDENTIAL,以及精确匹配的 AUTH 与 BEARER;脱敏后显示的明文前缀从 8 个字符缩到 4 个;长度不超过 8 个字符的值现在整体替换,而不是原样显示。
最后,前端的 Base64 解码器不再裁掉首尾空白——那有可能是 URL 解码把 + 变成的空格。这与 v3.19.0 修过的是同一类前后端解码口径分歧:确认框显示的是一回事,导入器写进去的是另一回事。
内部
删掉 3,166 行已无调用方的代码、14 个模块与 4 个依赖
一轮针对「没有任何调用方」的清理。后端删除了供应商图标推断表、一个占位的健康检查器、一套从未接线的 SSE 实现(含它自己的流式与非流式处理器)、两个未使用的代理会话类型,以及四个无引用的用量解析器与一个死的成本计算入口——线上计费路径、它的自动识别解析器与会话 ID 提取全部原封不动。22 处 #[allow(dead_code)] 抑制(正是它们让编译器一直没报警)随之删除。
前端删除 14 个无导入方的模块,包括已被面板改版取代的提示词表单弹窗与仓库管理器、一个重复的代理配置 hook、一个在项目历史上从未有过导入方的熔断器面板,以及三个 schema 文件;它们的文案在四种语言里同步删除。这些模块背后的 Tauri 命令刻意保留。另外删除 4 个未使用的 npm 依赖。两个会重新生成手工维护的图标索引的脚本被移除,索引文件头改为写明「刻意不支持自动重生成」。
配套的一处改动把代理状态与接管状态合并到单一的查询层——此前有第二套并行的 hook 覆盖同样的命令,但零调用方,它的查询键从来没有观察者,针对它们的失效调用全是空转。查询键字符串逐字未变,保留下来的 hook 维持原有的轮询行为。(#5916、#5928)
升级提醒
本版没有数据库迁移
v3.19.1 不含 schema 迁移(版本号保持 v16),不会触发升级前备份,升级即用。
Claude Desktop 双算的自愈有 30 天窗口(请读)
修复是在查询时抑制重复行,而不是改写或删除数据,所以明细行还在的每一天都会在下次启动后恢复正确总数,不需要任何重建操作。
但明细行超过 30 天会被聚合进日报并清理,而日报是按聚合当时生效的口径算一次就固定下来的。已经被没有此修复的版本聚合掉的日期,会永久保留虚高的数字。 这个回归自 v3.18.0(2026-07-21)进入,所以越早升级、能救回的历史区间越完整。
新定价对历史数据的两种不同影响
八个新补定价的模型会被回溯补算:启动时会给成本记为零的请求补上成本,因此这些模型的看板数字会上升。已经聚合并清理掉的明细行无法补算,保持为零。
四个改价的模型方向相反:补算只处理零成本行,所以已经记录的请求保持旧价,只有新请求按新价计费——同一个模型的历史花费与新增花费会不一致。两条路径都保护你自己的定价:修复只改仍是原内置值的行,而 ~/.cc-switch/model-pricing.json 里的手工改价、models.dev 同步值与删除墓碑会在播种与修复之后重放,始终优先。
预设变更只影响新建供应商
已经保存的 DeepSeek 或火山方舟 Coding Plan 供应商保持它存的 API 格式,仍然需要本地路由,也仍用旧目录。想用直连,请从预设重新创建供应商,或在供应商表单的高级区把 API 格式改为原生 Responses。
不过,已经是原生 Responses、且地址在 deepseek.com 上的供应商,下次切换时就会自动用上镜像的官方目录,不需要重新保存——因为判定读的是 live 配置。
DeepSeek V4 Pro 暂时还不能直连
预设里仍然列着 deepseek-v4-pro,厂商自己发布的目录也带着它,但 DeepSeek 侧针对 pro 的 Codex 集成尚未开通,官方给出的时间是 2026 年 8 月初。在那之前,直连模式下选 pro 会在上游报错——请用 deepseek-v4-flash,它也是预设的默认模型。
如果你现在就要用 pro,把这个供应商的 API 格式改回「OpenAI Chat」并开启本地路由接管即可。这正是 v3.19.1 之前 DeepSeek 一直走的那条路:本地代理会把 Codex 发出的 Responses 请求转换成 Chat Completions,pro 在这条路上不受影响。
DeepSeek 官方目录的两个前提
镜像的目录声明了 Codex 客户端最低版本 0.144.0,CC Switch 自己不做校验——它携带的 freeform apply_patch 注册需要这个版本或更新。另外,生成的目录文件会涨到约 75 KB(两个镜像模型),因为每个条目都带着完整的提示词框架文本。
直连之后,用量的归属会从供应商名变成 Codex (Session)
DeepSeek、火山方舟 Coding Plan 与腾讯混元不再需要接管,它们的流量可以完全绕过本地代理,代理侧的逐请求记录因此看不到它们。
用量本身不会丢,也仍然分得清——Codex 的会话日志导入照常记录,只是这条路径不携带供应商身份:所有没走本地代理的 Codex 用量会一起归入名为 Codex (Session) 的条目,官方订阅的消耗也在这一行里。也就是说,DeepSeek 从走路由改为直连之后,它的用量会从「DeepSeek」这个名字下移到 Codex (Session)。
要区分它们,看模型:每条用量记录都带着自己的模型 ID,用量面板的「模型统计」按模型逐行列出——deepseek-v4-flash、hy3、ark-code-latest 与官方订阅的 GPT 系列各归各行,费用与 token 都是分开的。只有当你需要的正是按供应商这个维度(比如同一个模型在多家聚合站之间比价),才需要继续用本地路由接管——这条路会记录真实的供应商名。
Codex 残留凭据清理的两个前提
清理只在「切入的供应商带有显式的官方分类」且「切出的供应商已成功回填」时执行。手工创建、没有标记官方分类的条目,或者回填失败的那次切换,残留仍会留在盘上。
Grok Build 开启接管会改写后端字段
在 Grok Build 供应商上开启接管,现在会把 live 配置里的后端字段改写为 Responses。数据库里存的供应商记录不受影响,代理停止时 live 文件会从备份整体还原。
工具安装与升级的 PATH 变化(仅 macOS / Linux)
设置 → 关于里触发的每一次工具安装与升级,现在都会把登录 shell 的 PATH 并到继承的那份前面,因此生命周期脚本按名称解析到的程序有可能与之前不同;每次操作还会多启动一个 shell 来读取这份 PATH,这会执行你的交互式启动文件。Windows 不受影响。
使用 grok 0.2.112 及以上版本的用户可能会看到两份安装记录——原生的那份,加上 grok update 自己创建的全局 npm 包;它们由上游保持同步,版本号一致。
环境变量冲突检测的匹配口径变了
Claude Code、Codex、Gemini 的检测从「包含」收紧为「前缀」,因此仅仅名字里含有应用名的变量——MY_ANTHROPIC_API_KEY、OLD_GEMINI_API_KEY——不再被报为冲突。同时新增了 Grok Build 的检测。
深链导入确认框显示的密钥更少
脱敏后显示的明文前缀从 8 个字符缩到 4 个,长度不超过 8 个字符的值整体脱敏。这也影响 MCP 导入确认框。
风险提示
沿用的提示
xAI Grok OAuth 登录:复用官方 Grok CLI 的公开 OAuth 客户端身份,使用可能导致账号被限制或封禁——详见 v3.18.0 release notes。
Codex OAuth 反向代理:使用 ChatGPT 订阅的 Codex OAuth 反代可能违反 OpenAI 服务条款,详情见 v3.13.0 release notes。
SuperGrok 配额查询:供应商卡片的配额展示依赖 grok.com 的非公开计费端点,xAI 调整接口后可能失效——详见 v3.19.0 release notes。
第三方供应商路由:通过 CC Switch 本地代理把 Codex、Claude Desktop 或 Grok Build 的请求转换并转发到第三方供应商时,各供应商对计费、合规与数据留存的约束不同,请在使用前阅读目标供应商的服务条款。
用户启用上述功能即表示自行承担相关风险。CC Switch 不对因使用这些功能而导致的任何账号限制、警告或服务暂停承担责任。
致谢
这一版的修复大半来自外部贡献者——六个 PR 里有五个不是我写的。
代码贡献
- #5677:Grok Build 的代理接管与深链集成收尾——补齐后端字段、会话身份识别、故障转移页签与环境变量检测,并顺带修好了配置预览里的密钥泄漏,感谢 @YUZHEthefool。这是本版覆盖面最广的一份工作。
- #5951:Claude Desktop 用量双算修复,感谢 @Komikawayi。定位到 v3.18.0 的哪一处改动让三道去重防线同时失守,是本版最需要耐心的一次排查。
- #5916、#5928:删除 3,166 行无调用方代码与重复的代理查询层,感谢 @SaladDay。
- #5943:补齐繁体中文的工具管理文案,并新增防止语言漂移的测试,感谢 @yovinchen。
- #5960:补齐 9 个在所有语言下都显示简体中文的文案,感谢 @mhy1227。
问题反馈
感谢 @Alaric-L 在 #5938 中报告 Claude Desktop 的每次请求都多出一条 session_log 来源的日志、导致 token 被统计两遍——这条反馈精确到了数据来源,本版最重要的用量修复直接由它定位。
下载与安装
访问 Releases 下载对应版本,或从官网 ccswitch.io 获取(下载经 Cloudflare 边缘节点分发,不依赖 GitHub 可达)。
系统要求
| 系统 | 最低版本 | 架构 |
|---|---|---|
| Windows | Windows 10 及以上 | x64 / ARM64 |
| macOS | macOS 12 (Monterey) 及以上 | Intel (x64) / Apple Silicon (arm64) |
| Linux | 见下表 | x64 / ARM64 |
Windows
| 文件 | 说明 |
|---|---|
CC-Switch-v3.19.1-Windows.msi |
推荐 - MSI 安装包,支持自动更新 |
CC-Switch-v3.19.1-Windows-Portable.zip |
便携版,解压即用,不写入注册表 |
Windows ARM64 设备请选择文件名中带 arm64 标识的对应制品。
macOS
| 文件 | 说明 |
|---|---|
CC-Switch-v3.19.1-macOS.dmg |
推荐 - DMG 安装包,拖入 Applications 即可 |
CC-Switch-v3.19.1-macOS.zip |
解压后拖入 Applications,Universal Binary |
CC-Switch-v3.19.1-macOS.tar.gz |
用于 Homebrew 安装和自动更新 |
Homebrew 安装:
brew install --cask cc-switch
更新:
brew upgrade --cask cc-switch
Linux
Linux 资产同时提供 x86_64 和 ARM64(aarch64)两种架构。资产文件名中包含架构标识,请按你机器的 uname -m 输出选择对应版本:
CC-Switch-v3.19.1-Linux-x86_64.AppImage/.deb/.rpmCC-Switch-v3.19.1-Linux-arm64.AppImage/.deb/.rpm
| 发行版 | 推荐格式 | 安装方式 |
|---|---|---|
| Ubuntu / Debian / Linux Mint / Pop!_OS | .deb |
sudo dpkg -i CC-Switch-*.deb 或 sudo apt install ./CC-Switch-*.deb |
| Fedora / RHEL / CentOS / Rocky Linux | .rpm |
sudo rpm -i CC-Switch-*.rpm 或 sudo dnf install ./CC-Switch-*.rpm |
| openSUSE | .rpm |
sudo zypper install ./CC-Switch-*.rpm |
| Arch Linux / Manjaro | .AppImage |
添加执行权限后直接运行,或使用 AUR |
| 其他发行版 / 不确定 | .AppImage |
chmod +x CC-Switch-*.AppImage && ./CC-Switch-*.AppImage |