- Bump version to 3.6.1 across all config files - package.json, Cargo.toml, tauri.conf.json - README.md and README_ZH.md version badges - Auto-updated Cargo.lock - Add release notes documentation - docs/release-note-v3.6.0-en.md (archive) - docs/release-note-v3.6.1-zh.md (cumulative format) - docs/release-note-v3.6.1-en.md (cumulative format) - Enlarge PackyCode sponsor logo by 50% (100px → 150px) - Update roadmap checklist (homebrew support marked as done)
390 lines
14 KiB
Markdown
390 lines
14 KiB
Markdown
# CC Switch v3.6.1
|
||
|
||
> 稳定性提升与用户体验优化(基于 v3.6.0)
|
||
|
||
**[English Version →](../release-note-v3.6.1.md)**
|
||
|
||
---
|
||
|
||
## 📦 v3.6.1 新增内容 (2025-11-10)
|
||
|
||
本次更新主要聚焦于**用户体验优化**和**配置解析健壮性**,修复了多个关键 Bug,并增强了用量查询系统。
|
||
|
||
### ✨ 新增功能
|
||
|
||
#### 用量查询系统增强
|
||
|
||
- **凭证解耦** - 用量查询可使用独立的 API Key 和 Base URL,不再依赖供应商配置
|
||
- 支持不同的查询端点和认证方式
|
||
- 根据模板类型自动显示对应的凭证输入框
|
||
- General 模板:API Key + Base URL
|
||
- NewAPI 模板:Base URL + Access Token + User ID
|
||
- Custom 模板:完全自定义
|
||
- **UI 组件升级** - 使用 shadcn/ui Switch 替代原生 checkbox,体验更现代
|
||
- **表单统一化** - 统一使用 shadcn/ui 输入组件,样式与应用保持一致
|
||
- **密码显示切换** - 添加查看/隐藏密码功能(API Key、Access Token)
|
||
|
||
#### 表单验证基础设施
|
||
|
||
- **通用 Schema 库** - 新增 JSON/TOML 通用验证器,减少重复代码
|
||
- `jsonConfigSchema`:通用 JSON 对象验证器
|
||
- `tomlConfigSchema`:通用 TOML 格式验证器
|
||
- `mcpJsonConfigSchema`:MCP 专用 JSON 验证器
|
||
- **MCP 条件字段验证** - 严格的类型检查
|
||
- stdio 类型强制要求 `command` 字段
|
||
- http 类型强制要求 `url` 字段
|
||
|
||
#### 合作伙伴集成
|
||
|
||
- **PackyCode** - 新增官方合作伙伴
|
||
- 添加到 Claude 和 Codex 供应商预设
|
||
- 支持 10% 折扣优惠(促销信息集成)
|
||
- 新增 Logo 和合作伙伴标识
|
||
|
||
---
|
||
|
||
### 🔧 改进优化
|
||
|
||
#### 用户体验
|
||
|
||
- **拖拽排序同步** - 托盘菜单顺序实时同步拖拽排序结果
|
||
- **错误通知增强** - 切换供应商失败时显示可复制的错误信息
|
||
- **移除误导性占位符** - 删除模型输入框的示例文本,避免用户混淆
|
||
- **Base URL 自动填充** - 所有非官方供应商类别自动填充 Base URL 输入框
|
||
|
||
#### 配置解析
|
||
|
||
- **中文引号规范化** - 自动处理 IME 输入的全角引号,防止 TOML 解析错误
|
||
- 支持中文引号(" " ' ')自动转换为 ASCII 引号
|
||
- 在 TOML 输入处理器中应用
|
||
- Textarea 组件禁用浏览器自动纠正
|
||
- **自定义字段保留** - 编辑 Codex MCP TOML 配置时保留未知字段
|
||
- 支持 timeout_ms、retry_count 等扩展字段
|
||
- 向前兼容未来的 MCP 协议扩展
|
||
|
||
---
|
||
|
||
### 🐛 Bug 修复
|
||
|
||
#### 关键修复
|
||
|
||
- **修复用量脚本面板白屏崩溃** - FormLabel 组件缺少 FormField context 导致整个应用崩溃
|
||
- 替换为独立的 Label 组件
|
||
- 根本原因:FormLabel 内部调用 useFormField() hook 需要 FormFieldContext
|
||
- **修复中文输入法引号解析失败** - IME 输入的全角引号导致 TOML 解析错误
|
||
- 新增 textNormalization 工具函数
|
||
- 在解析前自动规范化引号
|
||
- **修复拖拽排序托盘不同步** (#179) - 拖拽排序后托盘菜单顺序未更新
|
||
- 在排序完成后自动调用 updateTrayMenu
|
||
- 确保 UI 和托盘菜单保持一致
|
||
- **修复 MCP 自定义字段丢失** - 编辑 Codex MCP 配置时自定义字段被静默丢弃
|
||
- 使用 spread 操作符保留所有字段
|
||
- normalizeServerConfig 中保留未知字段
|
||
|
||
#### 稳定性改进
|
||
|
||
- **错误隔离** - 托盘菜单更新失败不再影响主操作流程
|
||
- 将托盘更新错误与主操作解耦
|
||
- 主操作成功但托盘更新失败时给出警告
|
||
- **安全模式匹配** - 替换 `unwrap()` 为安全的 pattern matching
|
||
- 避免 panic 导致应用崩溃
|
||
- 托盘菜单事件处理使用 match 模式
|
||
- **导入配置分类** - 从默认配置导入时自动设置 category 为 `custom`
|
||
- 避免导入的配置被误认为官方预设
|
||
- 提供更清晰的配置来源标识
|
||
|
||
---
|
||
|
||
### 📊 技术统计
|
||
|
||
```
|
||
提交数: 17 commits
|
||
代码变更: 31 个文件
|
||
- 新增: 1,163 行
|
||
- 删除: 811 行
|
||
- 净增长: +352 行
|
||
贡献者: Jason (16), ZyphrZero (1)
|
||
```
|
||
|
||
**按模块分类**:
|
||
- UI/用户界面:3 commits
|
||
- 用量查询系统:3 commits
|
||
- 配置解析:2 commits
|
||
- 表单验证:1 commit
|
||
- 其他改进:8 commits
|
||
|
||
---
|
||
|
||
### 📥 安装方式
|
||
|
||
#### macOS
|
||
|
||
**通过 Homebrew 安装(推荐):**
|
||
|
||
```bash
|
||
brew tap farion1231/ccswitch
|
||
brew install --cask cc-switch
|
||
```
|
||
|
||
**手动下载:**
|
||
|
||
- 从下方 [Assets](#assets) 下载 `CC-Switch-v3.6.1-macOS.zip`
|
||
|
||
> **注意**:由于作者没有苹果开发者账号,首次打开可能出现"未知开发者"警告。请前往"系统设置" → "隐私与安全性" → 点击"仍要打开"
|
||
|
||
#### Windows
|
||
|
||
- **安装包**:`CC-Switch-v3.6.1-Windows.msi`
|
||
- **便携版**:`CC-Switch-v3.6.1-Windows-Portable.zip`
|
||
|
||
#### Linux
|
||
|
||
- **AppImage**:`CC-Switch-v3.6.1-Linux.AppImage`
|
||
- **Debian**:`CC-Switch-v3.6.1-Linux.deb`
|
||
|
||
---
|
||
|
||
### 📚 文档
|
||
|
||
- [中文文档](https://github.com/farion1231/cc-switch/blob/main/README_ZH.md)
|
||
- [English Documentation](https://github.com/farion1231/cc-switch/blob/main/README.md)
|
||
- [完整更新日志](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md)
|
||
|
||
---
|
||
|
||
### 🙏 致谢
|
||
|
||
特别感谢:
|
||
- **智谱 AI** - 通过 GLM CODING PLAN 赞助本项目
|
||
- **PackyCode** - 新加入的官方合作伙伴
|
||
- **ZyphrZero** - 贡献托盘菜单同步修复 (#179)
|
||
|
||
---
|
||
|
||
**完整变更记录**: https://github.com/farion1231/cc-switch/compare/v3.6.0...v3.6.1
|
||
|
||
---
|
||
---
|
||
|
||
## 📜 v3.6.0 完整功能回顾
|
||
|
||
> 以下内容来自 v3.6.0 (2025-11-07),帮助您了解完整的功能集
|
||
|
||
<details>
|
||
<summary><b>点击展开 v3.6.0 的详细内容 →</b></summary>
|
||
|
||
## 新增功能
|
||
|
||
### 编辑模式与供应商管理
|
||
|
||
- **供应商复制功能** - 一键快速复制现有供应商配置,轻松创建变体配置
|
||
- **手动排序功能** - 通过拖拽对供应商进行重新排序,带有视觉推送效果动画
|
||
- **编辑模式切换** - 显示/隐藏拖拽手柄,优化编辑体验
|
||
|
||
### 自定义端点管理
|
||
|
||
- **多端点配置** - 支持聚合类供应商的多 API 端点配置
|
||
- **端点输入可见性** - 为所有非官方供应商自动显示端点字段
|
||
|
||
### 自定义配置目录(云同步)
|
||
|
||
- **自定义存储位置** - 自定义 CC Switch 的配置存储目录
|
||
- **云同步支持** - 指定到云同步文件夹(Dropbox、OneDrive、iCloud Drive、坚果云等)即可实现跨设备配置自动同步
|
||
- **独立管理** - 通过 Tauri Store 管理,更好的隔离性和可靠性
|
||
|
||
### 使用量查询增强
|
||
|
||
- **自动刷新间隔** - 配置定时自动使用量查询,支持自定义间隔时间
|
||
- **测试脚本 API** - 在执行前验证 JavaScript 使用量查询脚本
|
||
- **增强模板系统** - 自定义空白模板,支持 access token 和 user ID 参数
|
||
|
||
### 配置目录切换(WSL 支持)
|
||
|
||
- **目录变更自动同步** - 切换 Claude/Codex 配置目录(如 WSL 环境)时,自动同步当前供应商到新目录,无需手动操作
|
||
- **后置同步工具** - 统一的 `postChangeSync.ts` 工具,优雅处理错误而不阻塞主流程
|
||
- **导入配置自动同步** - 配置导入后自动同步,确保立即生效
|
||
- **智能冲突解决** - 区分"完全成功"和"部分成功"状态,提供精确的用户反馈
|
||
|
||
### 配置编辑器改进
|
||
|
||
- **JSON 格式化按钮** - 配置编辑器中一键 JSON 格式化
|
||
- **实时 TOML 验证** - Codex 配置的实时语法验证,带有错误高亮
|
||
|
||
### 编辑时加载 Live 配置
|
||
|
||
- **保护手动修改** - 编辑当前激活的供应商时,优先显示来自 live 文件的实际生效配置
|
||
- **双源策略** - 活动供应商自动从 live 配置加载,非活动供应商从 SSOT 加载
|
||
|
||
### Claude 配置数据结构增强
|
||
|
||
- **细粒度模型配置** - 从双键系统升级到四键系统,以匹配官方最新数据结构
|
||
- 新增字段:`ANTHROPIC_DEFAULT_HAIKU_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_MODEL`
|
||
- 替换旧版 `ANTHROPIC_SMALL_FAST_MODEL`,支持自动迁移
|
||
- 后端在首次读写时自动规范化旧配置,带有智能回退链
|
||
- UI 从 2 个模型输入字段扩展到 4 个,具有智能默认值
|
||
- **ANTHROPIC_API_KEY 支持** - 供应商现可使用 `ANTHROPIC_API_KEY` 字段(除 `ANTHROPIC_AUTH_TOKEN` 外)
|
||
- **模板变量系统** - 支持动态配置替换(如 KAT-Coder 的 `ENDPOINT_ID` 参数)
|
||
- **端点候选列表** - 预定义端点列表,用于速度测试和端点管理
|
||
- **视觉主题配置** - 供应商卡片自定义图标和颜色
|
||
|
||
### 供应商模型更新
|
||
|
||
- **Kimi k2** - 更新到最新的 `kimi-k2-thinking` 模型
|
||
|
||
### 新增供应商预设
|
||
|
||
新增 5 个供应商预设:
|
||
|
||
- **DMXAPI** - 多模型聚合服务
|
||
- **Azure Codex** - 微软 Azure OpenAI 端点
|
||
- **AnyRouter** - API 路由服务
|
||
- **AiHubMix** - AI 模型集合
|
||
- **MiniMax** - 国产 AI 模型提供商
|
||
|
||
### 合作伙伴推广机制
|
||
|
||
- 支持生态合作伙伴推广(智谱 GLM Z.ai)
|
||
- README 中集成赞助商横幅
|
||
|
||
---
|
||
|
||
## 改进优化
|
||
|
||
### 配置与同步
|
||
|
||
- **统一错误处理** - 后端全面使用 AppError 与国际化错误消息
|
||
- **修复 apiKeyUrl 优先级** - 修正 API key URL 解析的优先级顺序
|
||
- **修复 MCP 同步问题** - 解决同步到另一端功能失效的问题
|
||
- **导入配置同步** - 修复配置导入后的同步问题
|
||
- **配置错误处理** - 配置错误时强制退出,防止静默回退和数据丢失
|
||
|
||
### UI/UX 增强
|
||
|
||
- **独特的供应商图标** - 每个供应商卡片现在都有独特的图标和颜色识别
|
||
- **统一边框系统** - 所有组件采用一致的边框设计
|
||
- **拖拽交互** - 推送效果动画和改进的拖拽手柄图标
|
||
- **增强视觉反馈** - 更好的当前供应商视觉指示
|
||
- **对话框标准化** - 统一的对话框尺寸和布局一致性
|
||
- **表单改进** - 优化模型占位符,简化供应商提示,分类特定提示
|
||
- **使用量内联显示** - 使用量信息移至启用按钮旁边,更好地利用空间
|
||
|
||
### 完整国际化
|
||
|
||
- **错误消息国际化** - 所有后端错误消息支持中英文
|
||
- **托盘菜单国际化** - 系统托盘菜单完全国际化
|
||
- **UI 组件国际化** - 所有面向用户的组件 100% 覆盖
|
||
|
||
---
|
||
|
||
## Bug 修复
|
||
|
||
### 配置管理
|
||
|
||
- 修复 `apiKeyUrl` 优先级问题
|
||
- 修复 MCP 同步到另一端功能失效
|
||
- 修复配置导入后的同步问题
|
||
- 修复 Codex API Key 自动同步
|
||
- 修复端点速度测试功能
|
||
- 修复供应商复制插入位置(现在插入到原供应商旁边)
|
||
- 修复编辑模式下自定义端点保留问题
|
||
- 防止配置错误时的静默回退和数据丢失
|
||
|
||
### 使用量查询
|
||
|
||
- 修复自动查询间隔时间问题
|
||
- 确保刷新按钮点击时显示加载动画
|
||
|
||
### UI 问题
|
||
|
||
- 修复名称冲突错误(`get_init_error` 命令)
|
||
- 修复保存成功后语言设置回滚
|
||
- 修复语言切换状态重置(依赖循环)
|
||
- 修复编辑模式按钮对齐
|
||
|
||
### 启动问题
|
||
|
||
- 配置错误时强制退出(不再静默回退)
|
||
- 消除导致初始化错误的代码重复
|
||
|
||
---
|
||
|
||
## 架构重构
|
||
|
||
### 后端(Rust)- 5 阶段重构
|
||
|
||
1. **阶段 1**:统一错误处理(`AppError` + 国际化错误消息)
|
||
2. **阶段 2**:命令层按领域拆分(`commands/{provider,mcp,config,settings,plugin,misc}.rs`)
|
||
3. **阶段 3**:集成测试和事务机制(配置快照 + 失败回滚)
|
||
4. **阶段 4**:提取 Service 层(`services/{provider,mcp,config,speedtest}.rs`)
|
||
5. **阶段 5**:并发优化(`RwLock` 替代 `Mutex`,作用域 guard 避免死锁)
|
||
|
||
### 前端(React + TypeScript)- 4 阶段重构
|
||
|
||
1. **阶段 1**:测试基础设施(vitest + MSW + @testing-library/react)
|
||
2. **阶段 2**:提取自定义 hooks(`useProviderActions`、`useMcpActions`、`useSettings`、`useImportExport` 等)
|
||
3. **阶段 3**:组件拆分和业务逻辑提取
|
||
4. **阶段 4**:代码清理和格式化统一
|
||
|
||
### 测试体系
|
||
|
||
- **Hooks 单元测试** - 所有自定义 hooks 100% 覆盖
|
||
- **集成测试** - 关键流程覆盖(App、SettingsDialog、MCP 面板)
|
||
- **MSW 模拟** - 后端 API 模拟确保测试独立性
|
||
- **测试基础设施** - vitest + MSW + @testing-library/react
|
||
|
||
### 代码质量
|
||
|
||
- **统一参数格式** - 所有 Tauri 命令迁移到 camelCase(Tauri 2 规范)
|
||
- **语义清晰** - `AppType` 重命名为 `AppId` 以获得更好的语义
|
||
- **集中解析** - 使用 `FromStr` trait 统一 `app` 参数解析
|
||
- **DRY 违规清理** - 消除整个代码库中的代码重复
|
||
- **死代码移除** - 移除未使用的 `missing_param` 辅助函数、废弃的 `tauri-api.ts`、冗余的 `KimiModelSelector`
|
||
|
||
---
|
||
|
||
## 内部优化(用户无感知)
|
||
|
||
### 移除遗留迁移逻辑
|
||
|
||
v3.6.0 移除了 v1 配置自动迁移和副本文件扫描逻辑:
|
||
|
||
- **影响**:提升启动性能,代码更简洁
|
||
- **兼容性**:v2 格式配置完全兼容,无需任何操作
|
||
- **注意**:从 v3.1.0 或更早版本升级的用户,请先升级到 v3.2.x 或 v3.5.x 进行一次性迁移,然后再升级到 v3.6.0
|
||
|
||
### 命令参数标准化
|
||
|
||
后端统一使用 `app` 参数(取值:`claude` 或 `codex`):
|
||
|
||
- **影响**:代码更规范,错误提示更友好
|
||
- **兼容性**:前端已完全适配,用户无需关心此变更
|
||
|
||
---
|
||
|
||
## 依赖更新
|
||
|
||
- 更新到 **Tauri 2.8.x**
|
||
- 更新到 **TailwindCSS 4.x**
|
||
- 更新到 **TanStack Query v5.90.x**
|
||
- 保持 **React 18.2.x** 和 **TypeScript 5.3.x**
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
## 🌟 关于 CC Switch
|
||
|
||
CC Switch 是一个跨平台桌面应用,用于管理和切换 Claude Code 与 Codex 的不同供应商配置。基于 Tauri 2.0 + React 18 + TypeScript 构建,支持 Windows、macOS、Linux。
|
||
|
||
**核心特性**:
|
||
- 🔄 一键切换多个 AI 供应商
|
||
- 📦 支持 Claude Code 和 Codex 双应用
|
||
- 🎨 现代化 UI,完整的中英文国际化
|
||
- 🔐 本地存储,数据安全可靠
|
||
- ☁️ 支持云同步配置
|
||
- 🧩 MCP 服务器统一管理
|
||
|
||
---
|
||
|
||
**项目地址**: https://github.com/farion1231/cc-switch
|