CCSwitchMulti v3.19.2-26
·
263 commits
to main
since this release
CCSwitchMulti v3.19.2-26
这是 v3.19.2-25 之后的 Codex 兼容性修复版本。重点收口两个会让用户无法继续使用的故障:旧 MultiRouter schema v2 数据导致深探测和代理请求直接失败,以及历史任务引用 custom Provider 时 Codex 无法加载配置。版本同时补齐协议探测结果、字段映射、Token/费用展示、出口时区控制和启动配置对账。
1. 修复旧 schema v2 路由导致的深探测与代理失败
- 修复
v2_route_forbidden_field: route[n] contains forbidden inherited field 'apiFormat',以及同类upstream、endpoint、凭据和能力快照污染。 - 根因是 v25 以前已经保存的 MultiRouter schema v2 route 带有 Provider 级字段。v25 阻止了新污染,但旧数据库记录没有进入迁移,因此深探测和真实
/responses请求都会在严格解析阶段中断。 - 数据库 schema 升级到 v20。应用启动或导入旧备份时会在事务中迁移既有 Provider,删除 route 内禁止继承的字段;
targetProviderId、模型选择、别名、前缀和认证策略保持不变。 - 严格 schema v2 校验没有放宽;公共保存事务继续清理外部或旧入口可能带入的污染,防止问题再次写回数据库。
- 这项修复同时覆盖协议深探测和真实代理运行,不再出现“探测页面报错”和“聊天请求报相同错误”两套表象分别打补丁的情况。
2. 修复历史任务缺少 custom Provider
- 修复
Model provider 'custom' not found。旧版普通第三方 Provider 和统一历史功能会把任务保存到model_provider=custom,而新的 MultiRouter/官方接管只生成codex_model_router_v2或cc-switch-official,导致 Codex 在请求进入 CCSM 之前就拒绝恢复旧任务。 - 接管投影现在会为旧任务生成
[model_providers.custom]兼容别名,并让它使用当前受管 Router 的本地地址、Responses 外层和认证方式;无需批量改写 rollout 或 SQLite 历史元数据。 - 兼容别名带有 CCSM 所有权标记,标记只在本地使用并由既有出站过滤器移除,不会发送给上游。
- 只有
custom不存在或已经由 CCSM 标记时才会创建/更新别名。用户自己创建、未被标记的customProvider 即使指向本机地址也不会被覆盖。 - 关闭接管、切回官方或清理投影时只删除 CCSM 拥有的兼容别名,不误删用户配置。
3. Codex 启动配置对账与旧任务路由
- CCSM 启动期间先完成配置恢复、代理接管和活动 Profile 对账,再允许前端执行配置一致性检查;不会把启动中的短暂中间态误报成“Codex 修改了配置”。
- 持续存在的接管投影缺失会作为一个明确的“恢复路由接管”问题呈现,不再伪造
model_provider和model_providers.*两条字段差异。 - Desktop 请求兼容层升级并持续发现后启动的 app-server request client,避免补丁只安装到旧 renderer、重启后失效。
- 接管期间,历史
openaiProvider 任务也会通过当前本地代理完成运行时规范化;退出接管时对应的本地回退配置会被清理。
4. Protocol Lab 探测结果和协议映射可见
- Provider 与 MultiRouter 深探测会持久化并展示 Responses、Chat 两条协议的独立证据,不需要为了查看详情重新发送请求。
- 每条协议结果会显示 CCSM 实际采用的请求、推理、工具调用、工具续轮、响应和 usage 字段映射,明确区分“探测记录证据”和“保存启用后应用映射”。
- Responses 与 Chat 的转换仍由运行时适配层自动执行;Codex 对外保持 Responses,Chat 仅作为第三方上游的内部传输。
- 探测记录保存脱敏的输入、输出、缓存及推理 Token 用量,并按模型计费配置与 Provider 倍率显示估算费用;请求前也会提示真实探测可能产生少量费用。
- 兼容性档案的认证、endpoint、模型映射、Custom User-Agent、Header/Body override、工具方言和请求预算仍进入同一指纹;相关配置变化后旧证据会失效,而不是继续误用。
5. Codex 出口时区控制
- 设置页新增可选的出口时区检测与应用入口,使用 IANA 时区名称,不通过固定
+8或简单改系统时钟实现。 - 检测使用真实 HTTPS 出口观测;透明代理返回的
192.xfake-IP 仅作为诊断信息,不把本地 DNS 假地址当成出口所在地。 - 时区只注入 CCSM 启动的 Codex 子进程,并通过 renderer 运行态校验确认实际生效,不修改 Windows 全局时区,也不影响其它应用。
- 自动检测失败或证据不足时保持关闭并给出原因,用户可以手工覆盖 IANA 时区;不会根据不可靠 IP 猜测后静默改写环境。
升级说明
- 可以从 v25 直接覆盖升级。首次启动会自动执行 schema v20 数据迁移;不需要先删除 MultiRouter 或重新创建 Provider。
- 升级并完成接管投影后,历史
custom和openaiProvider 任务会通过当前 Router 恢复。已在运行的 Codex app-server 仍需完全退出并重新打开,旧进程不会热加载新 Provider 表。 - 如果曾遇到
route[n].apiFormat,升级后可直接重新执行兼容性深探测;不应手工放宽 schema 或编辑数据库。 - 协议深探测会产生真实 Token 消耗,界面会在请求前提示,并在完成后显示用量和估算费用。
- 出口时区功能默认不改变系统设置;只有用户启用后才作用于 CCSM 启动的 Codex 进程。
验证边界
- 本地发布门禁已通过:前端 167 个测试文件 / 1344 项测试;Rust library 3801 passed / 0 failed / 6 ignored,全部 integration suites 通过;TypeScript、renderer production build、
cargo check --all-targets、严格 Clippy、rustfmt、Prettier 和 diff 检查均通过。 - 发布提交还必须通过版本一致性与 UTF-8/no-BOM 检查,并从该确定提交生成 Windows NSIS、portable 和 raw exe 本地产物;本地导出结果与哈希以发布记录为准。
- GitHub Release 必须由
v3.19.2-26tag 触发 Windows x64/ARM64、Linux x64/ARM64 与 macOS 构建,并在所有平台成功后生成带签名的六平台latest.json。 - 源码测试、GitHub 资产生成、用户本机安装和已运行 Codex 进程刷新是四个不同层级;发布成功不代表当前机器已经安装或当前任务已经热切换。
完整变更对比:v3.19.2-25...v3.19.2-26
下载
- macOS:
CCSwitchMulti-v3.19.2-26-macOS.dmg(未配置 Apple 签名时为未签名版)或CCSwitchMulti-v3.19.2-26-macOS.zip(解压即用) - Windows (x86_64):
CCSwitchMulti-v3.19.2-26-Windows-Setup.exe(安装版)或CCSwitchMulti-v3.19.2-26-Windows-Portable.zip(绿色版) - Windows (ARM64):
CCSwitchMulti-v3.19.2-26-Windows-arm64-Setup.exe(安装版)或CCSwitchMulti-v3.19.2-26-Windows-arm64-Portable.zip(绿色版) - Linux (x86_64):
CCSwitchMulti-v3.19.2-26-Linux-x86_64.AppImage/.deb/.rpm - Linux (ARM64):
CCSwitchMulti-v3.19.2-26-Linux-arm64.AppImage/.deb/.rpm
.tar.gz为 Tauri updater 自动更新专用,无需手动下载。
macOS DMG 在仓库配置 Apple 签名和公证密钥时会签名并公证;未配置时发布 Tauri 生成的未签名 DMG、updater tarball 和 app zip。