From 9a5c8c0e575a19ceeb5976703871c3692730425a Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 10 Nov 2025 21:21:27 +0800 Subject: [PATCH] chore(release): prepare for v3.6.1 release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- README.md | 6 +- README_ZH.md | 6 +- docs/release-note-v3.6.0-en.md | 249 +++++++++++++++++++++ docs/release-note-v3.6.1-en.md | 391 +++++++++++++++++++++++++++++++++ docs/release-note-v3.6.1-zh.md | 389 ++++++++++++++++++++++++++++++++ docs/roadmap.md | 3 +- package.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 +- 10 files changed, 1041 insertions(+), 11 deletions(-) create mode 100644 docs/release-note-v3.6.0-en.md create mode 100644 docs/release-note-v3.6.1-en.md create mode 100644 docs/release-note-v3.6.1-zh.md diff --git a/README.md b/README.md index 2bb3c23..3fa641e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Claude Code & Codex Provider Switcher -[![Version](https://img.shields.io/badge/version-3.6.0-blue.svg)](https://github.com/farion1231/cc-switch/releases) +[![Version](https://img.shields.io/badge/version-3.6.1-blue.svg)](https://github.com/farion1231/cc-switch/releases) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)](https://github.com/farion1231/cc-switch/releases) [![Built with Tauri](https://img.shields.io/badge/built%20with-Tauri%202-orange.svg)](https://tauri.app/) @@ -26,7 +26,7 @@ Get 10% OFF the GLM CODING PLAN with [this link](https://z.ai/subscribe?ic=8JVLJ - +
PackyCodePackyCode Thanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more. PackyCode provides special discounts for our software users: register using this link and enter the "cc-switch" promo code during recharge to get 10% off.
@@ -39,7 +39,7 @@ Get 10% OFF the GLM CODING PLAN with [this link](https://z.ai/subscribe?ic=8JVLJ ## Features -### Current Version: v3.6.0 | [Full Changelog](CHANGELOG.md) +### Current Version: v3.6.1 | [Full Changelog](CHANGELOG.md) **Core Capabilities** diff --git a/README_ZH.md b/README_ZH.md index ad4eb37..46a5d44 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -2,7 +2,7 @@ # Claude Code & Codex 供应商管理器 -[![Version](https://img.shields.io/badge/version-3.6.0-blue.svg)](https://github.com/farion1231/cc-switch/releases) +[![Version](https://img.shields.io/badge/version-3.6.1-blue.svg)](https://github.com/farion1231/cc-switch/releases) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)](https://github.com/farion1231/cc-switch/releases) [![Built with Tauri](https://img.shields.io/badge/built%20with-Tauri%202-orange.svg)](https://tauri.app/) @@ -26,7 +26,7 @@ CC Switch 已经预设了智谱GLM,只需要填写 key 即可一键导入编 - +
PackyCodePackyCode 感谢 PackyCode 赞助了本项目!PackyCode 是一家稳定、高效的API中转服务商,提供 Claude Code、Codex、Gemini 等多种中转服务。PackyCode 为本软件的用户提供了特别优惠,使用此链接注册并在充值时填写"cc-switch"优惠码,可以享受9折优惠。
@@ -39,7 +39,7 @@ CC Switch 已经预设了智谱GLM,只需要填写 key 即可一键导入编 ## 功能特性 -### 当前版本:v3.6.0 | [完整更新日志](CHANGELOG.md) +### 当前版本:v3.6.1 | [完整更新日志](CHANGELOG.md) **核心功能** diff --git a/docs/release-note-v3.6.0-en.md b/docs/release-note-v3.6.0-en.md new file mode 100644 index 0000000..e2512d2 --- /dev/null +++ b/docs/release-note-v3.6.0-en.md @@ -0,0 +1,249 @@ +## Major architecture refactoring with enhanced config sync and data protection + +**[中文更新说明 Chinese Documentation →](https://github.com/farion1231/cc-switch/blob/main/docs/release-note-v3.6.0-zh.md)** + +--- + +## What's New + +### Edit Mode & Provider Management + +- **Provider Duplication** - Quickly duplicate existing provider configurations to create variants with one click +- **Manual Sorting** - Drag and drop to reorder providers, with visual push effect animations. Thanks to @ZyphrZero +- **Edit Mode Toggle** - Show/hide drag handles to optimize editing experience + +### Custom Endpoint Management + +- **Multi-Endpoint Configuration** - Support for aggregator providers with multiple API endpoints +- **Endpoint Input Visibility** - Shows endpoint field for all non-official providers automatically + +### Usage Query Enhancements + +- **Auto-Refresh Interval** - Configure periodic automatic usage queries with customizable intervals +- **Test Script API** - Validate JavaScript usage query scripts before execution +- **Enhanced Templates** - Custom blank templates with access token and user ID parameter support + Thanks to @Sirhexs + +### Custom Configuration Directory (Cloud Sync) + +- **Customizable Storage Location** - Customize CC Switch's configuration storage directory +- **Cloud Sync Support** - Point to cloud sync folders (Dropbox, OneDrive, iCloud Drive, etc.) to enable automatic config synchronization across devices +- **Independent Management** - Managed via Tauri Store for better isolation and reliability + Thanks to @ZyphrZero + +### Configuration Directory Switching (WSL Support) + +- **Auto-Sync on Directory Change** - When switching Claude/Codex config directories (e.g., WSL environment), automatically sync current provider to the new directory without manual operation +- **Post-Change Sync Utility** - Unified `postChangeSync.ts` utility for graceful error handling without blocking main flow +- **Import Config Auto-Sync** - Automatically sync after config import to ensure immediate effectiveness +- **Smart Conflict Resolution** - Distinguishes "fully successful" and "partially successful" states for precise user feedback + +### Configuration Editor Improvements + +- **JSON Format Button** - One-click JSON formatting in configuration editors +- **Real-Time TOML Validation** - Live syntax validation for Codex configuration with error highlighting + +### Load Live Config When Editing + +- **Protect Manual Modifications** - When editing the currently active provider, prioritize displaying the actual effective configuration from live files +- **Dual-Source Strategy** - Automatically loads from live config for active provider, SSOT for inactive ones + +### Claude Configuration Data Structure Enhancements + +- **Granular Model Configuration** - Migrated from dual-key to quad-key system for better model tier differentiation + - New fields: `ANTHROPIC_DEFAULT_HAIKU_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_MODEL` + - Replaces legacy `ANTHROPIC_SMALL_FAST_MODEL` with automatic migration + - Backend normalizes old configs on first read/write with smart fallback chain + - UI expanded from 2 to 4 model input fields with intelligent defaults +- **ANTHROPIC_API_KEY Support** - Providers can now use `ANTHROPIC_API_KEY` field in addition to `ANTHROPIC_AUTH_TOKEN` +- **Template Variable System** - Support for dynamic configuration replacement (e.g., KAT-Coder's `ENDPOINT_ID` parameter) +- **Endpoint Candidates** - Predefined endpoint list for speed testing and endpoint management +- **Visual Theme Configuration** - Custom icons and colors for provider cards + +### Updated Provider Models + +- **Kimi k2** - Updated to latest `kimi-k2-thinking` model + +### New Provider Presets + +Added 5 new provider presets: + +- **DMXAPI** - Multi-model aggregation service +- **Azure Codex** - Microsoft Azure OpenAI endpoint +- **AnyRouter** - None-profit routing service +- **AiHubMix** - Multi-model aggregation service +- **MiniMax** - Open source AI model provider + +### Partner Promotion Mechanism + +- Support for ecosystem partner promotion (Zhipu GLM Z.ai) +- Sponsored banner integration in README + +--- + +## Improvements + +### Configuration & Sync + +- **Unified Error Handling** - AppError with internationalized error messages throughout backend +- **Fixed apiKeyUrl Priority** - Correct priority order for API key URL resolution +- **Fixed MCP Sync Issues** - Resolved sync-to-other-side functionality failures +- **Import Config Sync** - Fixed sync issues after configuration import +- **Config Error Handling** - Force exit on config error to prevent silent fallback and data loss + +### UI/UX Enhancements + +- **Unique Provider Icons** - Each provider card now has unique icons and color identification +- **Unified Border System** - Consistent border design across all components +- **Drag Interaction** - Push effect animation and improved drag handle icons +- **Enhanced Visual Feedback** - Better current provider visual indication +- **Dialog Standardization** - Unified dialog sizes and layout consistency +- **Form Improvements** - Optimized model placeholders, simplified provider hints, category-specific hints +- **Usage Display Inline** - Usage info moved next to enable button for better space utilization + +### Complete Internationalization + +- **Error Messages i18n** - All backend error messages support Chinese/English +- **Tray Menu i18n** - System tray menu fully internationalized +- **UI Components i18n** - 100% coverage across all user-facing components + +--- + +## Bug Fixes + +### Configuration Management + +- Fixed `apiKeyUrl` priority issue +- Fixed MCP sync-to-other-side functionality failure +- Fixed sync issues after config import +- Fixed Codex API Key auto-sync +- Fixed endpoint speed test functionality +- Fixed provider duplicate insertion position (now inserts next to original) +- Fixed custom endpoint preservation in edit mode +- Prevent silent fallback and data loss on config error + +### Usage Query + +- Fixed auto-query interval timing issue +- Ensured refresh button shows loading animation on click + +### UI Issues + +- Fixed name collision error (`get_init_error` command) +- Fixed language setting rollback after successful save +- Fixed language switch state reset (dependency cycle) +- Fixed edit mode button alignment + +### Startup Issues + +- Force exit on config error (no silent fallback) +- Eliminated code duplication causing initialization errors + +--- + +## Architecture Refactoring + +### Backend (Rust) - 5 Phase Refactoring + +1. **Phase 1**: Unified error handling (`AppError` + i18n error messages) +2. **Phase 2**: Command layer split by domain (`commands/{provider,mcp,config,settings,plugin,misc}.rs`) +3. **Phase 3**: Integration tests and transaction mechanism (config snapshot + failure rollback) +4. **Phase 4**: Extracted Service layer (`services/{provider,mcp,config,speedtest}.rs`) +5. **Phase 5**: Concurrency optimization (`RwLock` instead of `Mutex`, scoped guard to avoid deadlock) + +### Frontend (React + TypeScript) - 4 Stage Refactoring + +1. **Stage 1**: Test infrastructure (vitest + MSW + @testing-library/react) +2. **Stage 2**: Extracted custom hooks (`useProviderActions`, `useMcpActions`, `useSettings`, `useImportExport`, etc.) +3. **Stage 3**: Component splitting and business logic extraction +4. **Stage 4**: Code cleanup and formatting unification + +### Testing System + +- **Hooks Unit Tests** - 100% coverage for all custom hooks +- **Integration Tests** - Coverage for key processes (App, SettingsDialog, MCP Panel) +- **MSW Mocking** - Backend API mocking to ensure test independence +- **Test Infrastructure** - vitest + MSW + @testing-library/react + +### Code Quality + +- **Unified Parameter Format** - All Tauri commands migrated to camelCase (Tauri 2 specification) +- **Semantic Clarity** - `AppType` renamed to `AppId` for better semantics +- **Centralized Parsing** - Unified `app` parameter parsing with `FromStr` trait +- **DRY Violations Cleanup** - Eliminated code duplication throughout codebase +- **Dead Code Removal** - Removed unused `missing_param` helper, deprecated `tauri-api.ts`, redundant `KimiModelSelector` + +--- + +## Internal Optimizations (User Transparent) + +### Removed Legacy Migration Logic + +v3.6.0 removed v1 config auto-migration and copy file scanning logic: + +- **Impact**: Improved startup performance, cleaner codebase +- **Compatibility**: v2 format configs fully compatible, no action required +- **Note**: Users upgrading from v3.1.0 or earlier should first upgrade to v3.2.x or v3.5.x for one-time migration, then upgrade to v3.6.0 + +### Command Parameter Standardization + +Backend unified to use `app` parameter (values: `claude` or `codex`): + +- **Impact**: More standardized code, friendlier error prompts +- **Compatibility**: Frontend fully adapted, users don't need to care about this change + +--- + +## Dependencies + +- Updated to **Tauri 2.8.x** +- Updated to **TailwindCSS 4.x** +- Updated to **TanStack Query v5.90.x** +- Maintained **React 18.2.x** and **TypeScript 5.3.x** + +--- + +## Installation + +### macOS + +**Via Homebrew (Recommended):** + +```bash +brew tap farion1231/ccswitch +brew install --cask cc-switch +``` + +**Manual Download:** + +- Download `CC-Switch-v3.6.0-macOS.zip` from [Assets](#assets) below + +> **Note**: Due to lack of Apple Developer account, you may see "unidentified developer" warning. Go to System Settings → Privacy & Security → Click "Open Anyway" + +### Windows + +- **Installer**: `CC-Switch-v3.6.0-Windows.msi` +- **Portable**: `CC-Switch-v3.6.0-Windows-Portable.zip` + +### Linux + +- **AppImage**: `CC-Switch-v3.6.0-Linux.AppImage` +- **Debian**: `CC-Switch-v3.6.0-Linux.deb` + +--- + +## Documentation + +- [中文文档 (Chinese)](https://github.com/farion1231/cc-switch/blob/main/README_ZH.md) +- [English Documentation](https://github.com/farion1231/cc-switch/blob/main/README.md) +- [完整更新日志 (Full Changelog)](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md) + +--- + +## Acknowledgments + +Special thanks to **Zhipu AI** for sponsoring this project with their GLM CODING PLAN! + +--- + +**Full Changelog**: https://github.com/farion1231/cc-switch/compare/v3.5.1...v3.6.0 diff --git a/docs/release-note-v3.6.1-en.md b/docs/release-note-v3.6.1-en.md new file mode 100644 index 0000000..a291f92 --- /dev/null +++ b/docs/release-note-v3.6.1-en.md @@ -0,0 +1,391 @@ +# CC Switch v3.6.1 + +> Stability improvements and user experience optimization (based on v3.6.0) + +**[中文更新说明 Chinese Documentation →](https://github.com/farion1231/cc-switch/blob/main/docs/release-note-v3.6.1-zh.md)** + +--- + +## 📦 What's New in v3.6.1 (2025-11-10) + +This release focuses on **user experience optimization** and **configuration parsing robustness**, fixing several critical bugs and enhancing the usage query system. + +### ✨ New Features + +#### Usage Query System Enhancements + +- **Credential Decoupling** - Usage queries can now use independent API Key and Base URL, no longer dependent on provider configuration + - Support for different query endpoints and authentication methods + - Automatically displays credential input fields based on template type + - General template: API Key + Base URL + - NewAPI template: Base URL + Access Token + User ID + - Custom template: Fully customizable +- **UI Component Upgrade** - Replaced native checkbox with shadcn/ui Switch component for modern experience +- **Form Unification** - Unified use of shadcn/ui Input components, consistent styling with the application +- **Password Visibility Toggle** - Added show/hide password functionality (API Key, Access Token) + +#### Form Validation Infrastructure + +- **Common Schema Library** - New JSON/TOML generic validators to reduce code duplication + - `jsonConfigSchema`: Generic JSON object validator + - `tomlConfigSchema`: Generic TOML format validator + - `mcpJsonConfigSchema`: MCP-specific JSON validator +- **MCP Conditional Field Validation** - Strict type checking + - stdio type requires `command` field + - http type requires `url` field + +#### Partner Integration + +- **PackyCode** - New official partner + - Added to Claude and Codex provider presets + - 10% discount promotion support + - New logo and partner identification + +--- + +### 🔧 Improvements + +#### User Experience + +- **Drag Sort Sync** - Tray menu order now syncs with drag-and-drop sorting in real-time +- **Enhanced Error Notifications** - Provider switch failures now display copyable error messages +- **Removed Misleading Placeholders** - Deleted example text from model input fields to avoid user confusion +- **Auto-fill Base URL** - All non-official provider categories automatically populate the Base URL input field + +#### Configuration Parsing + +- **CJK Quote Normalization** - Automatically handles IME-input fullwidth quotes to prevent TOML parsing errors + - Supports automatic conversion of Chinese quotes (" " ' ') to ASCII quotes + - Applied in TOML input handlers + - Disabled browser auto-correction in Textarea component +- **Preserve Custom Fields** - Editing Codex MCP TOML configuration now preserves unknown fields + - Supports extension fields like timeout_ms, retry_count + - Forward compatibility with future MCP protocol extensions + +--- + +### 🐛 Bug Fixes + +#### Critical Fixes + +- **Fixed usage script panel white screen crash** - FormLabel component missing FormField context caused entire app to crash + - Replaced with standalone Label component + - Root cause: FormLabel internally calls useFormField() hook which requires FormFieldContext +- **Fixed CJK input quote parsing failure** - IME-input fullwidth quotes caused TOML parsing errors + - Added textNormalization utility function + - Automatically normalizes quotes before parsing +- **Fixed drag sort tray desync** (#179) - Tray menu order not updated after drag-and-drop sorting + - Automatically calls updateTrayMenu after sorting completes + - Ensures UI and tray menu stay consistent +- **Fixed MCP custom field loss** - Custom fields silently dropped when editing Codex MCP configuration + - Uses spread operator to retain all fields + - Preserves unknown fields in normalizeServerConfig + +#### Stability Improvements + +- **Error Isolation** - Tray menu update failures no longer affect main operations + - Decoupled tray update errors from main operations + - Provides warning when main operation succeeds but tray update fails +- **Safe Pattern Matching** - Replaced `unwrap()` with safe pattern matching + - Avoids panic-induced app crashes + - Tray menu event handling uses match patterns +- **Import Config Classification** - Importing from default config now automatically sets category to `custom` + - Avoids imported configs being mistaken for official presets + - Provides clearer configuration source identification + +--- + +### 📊 Technical Statistics + +``` +Commits: 17 commits +Code Changes: 31 files + - Additions: 1,163 lines + - Deletions: 811 lines + - Net Growth: +352 lines +Contributors: Jason (16), ZyphrZero (1) +``` + +**By Module**: +- UI/User Interface: 3 commits +- Usage Query System: 3 commits +- Configuration Parsing: 2 commits +- Form Validation: 1 commit +- Other Improvements: 8 commits + +--- + +### 📥 Installation + +#### macOS + +**Via Homebrew (Recommended):** + +```bash +brew tap farion1231/ccswitch +brew install --cask cc-switch +``` + +**Manual Download:** + +- Download `CC-Switch-v3.6.1-macOS.zip` from [Assets](#assets) below + +> **Note**: Due to lack of Apple Developer account, you may see "unidentified developer" warning. Go to System Settings → Privacy & Security → Click "Open Anyway" + +#### Windows + +- **Installer**: `CC-Switch-v3.6.1-Windows.msi` +- **Portable**: `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` + +--- + +### 📚 Documentation + +- [中文文档 (Chinese)](https://github.com/farion1231/cc-switch/blob/main/README_ZH.md) +- [English Documentation](https://github.com/farion1231/cc-switch/blob/main/README.md) +- [完整更新日志 (Full Changelog)](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md) + +--- + +### 🙏 Acknowledgments + +Special thanks to: +- **Zhipu AI** - For sponsoring this project with GLM CODING PLAN +- **PackyCode** - New official partner +- **ZyphrZero** - For contributing tray menu sync fix (#179) + +--- + +**Full Changelog**: https://github.com/farion1231/cc-switch/compare/v3.6.0...v3.6.1 + +--- +--- + +## 📜 v3.6.0 Complete Feature Review + +> Content below is from v3.6.0 (2025-11-07), helping you understand the complete feature set + +
+Click to expand v3.6.0 detailed content → + +## What's New + +### Edit Mode & Provider Management + +- **Provider Duplication** - Quickly duplicate existing provider configurations to create variants with one click +- **Manual Sorting** - Drag and drop to reorder providers, with visual push effect animations. Thanks to @ZyphrZero +- **Edit Mode Toggle** - Show/hide drag handles to optimize editing experience + +### Custom Endpoint Management + +- **Multi-Endpoint Configuration** - Support for aggregator providers with multiple API endpoints +- **Endpoint Input Visibility** - Shows endpoint field for all non-official providers automatically + +### Usage Query Enhancements + +- **Auto-Refresh Interval** - Configure periodic automatic usage queries with customizable intervals +- **Test Script API** - Validate JavaScript usage query scripts before execution +- **Enhanced Templates** - Custom blank templates with access token and user ID parameter support + Thanks to @Sirhexs + +### Custom Configuration Directory (Cloud Sync) + +- **Customizable Storage Location** - Customize CC Switch's configuration storage directory +- **Cloud Sync Support** - Point to cloud sync folders (Dropbox, OneDrive, iCloud Drive, etc.) to enable automatic config synchronization across devices +- **Independent Management** - Managed via Tauri Store for better isolation and reliability + Thanks to @ZyphrZero + +### Configuration Directory Switching (WSL Support) + +- **Auto-Sync on Directory Change** - When switching Claude/Codex config directories (e.g., WSL environment), automatically sync current provider to the new directory without manual operation +- **Post-Change Sync Utility** - Unified `postChangeSync.ts` utility for graceful error handling without blocking main flow +- **Import Config Auto-Sync** - Automatically sync after config import to ensure immediate effectiveness +- **Smart Conflict Resolution** - Distinguishes "fully successful" and "partially successful" states for precise user feedback + +### Configuration Editor Improvements + +- **JSON Format Button** - One-click JSON formatting in configuration editors +- **Real-Time TOML Validation** - Live syntax validation for Codex configuration with error highlighting + +### Load Live Config When Editing + +- **Protect Manual Modifications** - When editing the currently active provider, prioritize displaying the actual effective configuration from live files +- **Dual-Source Strategy** - Automatically loads from live config for active provider, SSOT for inactive ones + +### Claude Configuration Data Structure Enhancements + +- **Granular Model Configuration** - Migrated from dual-key to quad-key system for better model tier differentiation + - New fields: `ANTHROPIC_DEFAULT_HAIKU_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_MODEL` + - Replaces legacy `ANTHROPIC_SMALL_FAST_MODEL` with automatic migration + - Backend normalizes old configs on first read/write with smart fallback chain + - UI expanded from 2 to 4 model input fields with intelligent defaults +- **ANTHROPIC_API_KEY Support** - Providers can now use `ANTHROPIC_API_KEY` field in addition to `ANTHROPIC_AUTH_TOKEN` +- **Template Variable System** - Support for dynamic configuration replacement (e.g., KAT-Coder's `ENDPOINT_ID` parameter) +- **Endpoint Candidates** - Predefined endpoint list for speed testing and endpoint management +- **Visual Theme Configuration** - Custom icons and colors for provider cards + +### Updated Provider Models + +- **Kimi k2** - Updated to latest `kimi-k2-thinking` model + +### New Provider Presets + +Added 5 new provider presets: + +- **DMXAPI** - Multi-model aggregation service +- **Azure Codex** - Microsoft Azure OpenAI endpoint +- **AnyRouter** - None-profit routing service +- **AiHubMix** - Multi-model aggregation service +- **MiniMax** - Open source AI model provider + +### Partner Promotion Mechanism + +- Support for ecosystem partner promotion (Zhipu GLM Z.ai) +- Sponsored banner integration in README + +--- + +## Improvements + +### Configuration & Sync + +- **Unified Error Handling** - AppError with internationalized error messages throughout backend +- **Fixed apiKeyUrl Priority** - Correct priority order for API key URL resolution +- **Fixed MCP Sync Issues** - Resolved sync-to-other-side functionality failures +- **Import Config Sync** - Fixed sync issues after configuration import +- **Config Error Handling** - Force exit on config error to prevent silent fallback and data loss + +### UI/UX Enhancements + +- **Unique Provider Icons** - Each provider card now has unique icons and color identification +- **Unified Border System** - Consistent border design across all components +- **Drag Interaction** - Push effect animation and improved drag handle icons +- **Enhanced Visual Feedback** - Better current provider visual indication +- **Dialog Standardization** - Unified dialog sizes and layout consistency +- **Form Improvements** - Optimized model placeholders, simplified provider hints, category-specific hints +- **Usage Display Inline** - Usage info moved next to enable button for better space utilization + +### Complete Internationalization + +- **Error Messages i18n** - All backend error messages support Chinese/English +- **Tray Menu i18n** - System tray menu fully internationalized +- **UI Components i18n** - 100% coverage across all user-facing components + +--- + +## Bug Fixes + +### Configuration Management + +- Fixed `apiKeyUrl` priority issue +- Fixed MCP sync-to-other-side functionality failure +- Fixed sync issues after config import +- Fixed Codex API Key auto-sync +- Fixed endpoint speed test functionality +- Fixed provider duplicate insertion position (now inserts next to original) +- Fixed custom endpoint preservation in edit mode +- Prevent silent fallback and data loss on config error + +### Usage Query + +- Fixed auto-query interval timing issue +- Ensured refresh button shows loading animation on click + +### UI Issues + +- Fixed name collision error (`get_init_error` command) +- Fixed language setting rollback after successful save +- Fixed language switch state reset (dependency cycle) +- Fixed edit mode button alignment + +### Startup Issues + +- Force exit on config error (no silent fallback) +- Eliminated code duplication causing initialization errors + +--- + +## Architecture Refactoring + +### Backend (Rust) - 5 Phase Refactoring + +1. **Phase 1**: Unified error handling (`AppError` + i18n error messages) +2. **Phase 2**: Command layer split by domain (`commands/{provider,mcp,config,settings,plugin,misc}.rs`) +3. **Phase 3**: Integration tests and transaction mechanism (config snapshot + failure rollback) +4. **Phase 4**: Extracted Service layer (`services/{provider,mcp,config,speedtest}.rs`) +5. **Phase 5**: Concurrency optimization (`RwLock` instead of `Mutex`, scoped guard to avoid deadlock) + +### Frontend (React + TypeScript) - 4 Stage Refactoring + +1. **Stage 1**: Test infrastructure (vitest + MSW + @testing-library/react) +2. **Stage 2**: Extracted custom hooks (`useProviderActions`, `useMcpActions`, `useSettings`, `useImportExport`, etc.) +3. **Stage 3**: Component splitting and business logic extraction +4. **Stage 4**: Code cleanup and formatting unification + +### Testing System + +- **Hooks Unit Tests** - 100% coverage for all custom hooks +- **Integration Tests** - Coverage for key processes (App, SettingsDialog, MCP Panel) +- **MSW Mocking** - Backend API mocking to ensure test independence +- **Test Infrastructure** - vitest + MSW + @testing-library/react + +### Code Quality + +- **Unified Parameter Format** - All Tauri commands migrated to camelCase (Tauri 2 specification) +- **Semantic Clarity** - `AppType` renamed to `AppId` for better semantics +- **Centralized Parsing** - Unified `app` parameter parsing with `FromStr` trait +- **DRY Violations Cleanup** - Eliminated code duplication throughout codebase +- **Dead Code Removal** - Removed unused `missing_param` helper, deprecated `tauri-api.ts`, redundant `KimiModelSelector` + +--- + +## Internal Optimizations (User Transparent) + +### Removed Legacy Migration Logic + +v3.6.0 removed v1 config auto-migration and copy file scanning logic: + +- **Impact**: Improved startup performance, cleaner codebase +- **Compatibility**: v2 format configs fully compatible, no action required +- **Note**: Users upgrading from v3.1.0 or earlier should first upgrade to v3.2.x or v3.5.x for one-time migration, then upgrade to v3.6.0 + +### Command Parameter Standardization + +Backend unified to use `app` parameter (values: `claude` or `codex`): + +- **Impact**: More standardized code, friendlier error prompts +- **Compatibility**: Frontend fully adapted, users don't need to care about this change + +--- + +## Dependencies + +- Updated to **Tauri 2.8.x** +- Updated to **TailwindCSS 4.x** +- Updated to **TanStack Query v5.90.x** +- Maintained **React 18.2.x** and **TypeScript 5.3.x** + +
+ +--- + +## 🌟 About CC Switch + +CC Switch is a cross-platform desktop application for managing and switching between different provider configurations for Claude Code and Codex. Built with Tauri 2.0 + React 18 + TypeScript, supporting Windows, macOS, and Linux. + +**Core Features**: +- 🔄 One-click switching between multiple AI providers +- 📦 Support for both Claude Code and Codex applications +- 🎨 Modern UI with complete Chinese/English internationalization +- 🔐 Local storage, secure and reliable data +- ☁️ Support for cloud sync configurations +- 🧩 Unified MCP server management + +--- + +**Project Repository**: https://github.com/farion1231/cc-switch diff --git a/docs/release-note-v3.6.1-zh.md b/docs/release-note-v3.6.1-zh.md new file mode 100644 index 0000000..76943f4 --- /dev/null +++ b/docs/release-note-v3.6.1-zh.md @@ -0,0 +1,389 @@ +# 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),帮助您了解完整的功能集 + +
+点击展开 v3.6.0 的详细内容 → + +## 新增功能 + +### 编辑模式与供应商管理 + +- **供应商复制功能** - 一键快速复制现有供应商配置,轻松创建变体配置 +- **手动排序功能** - 通过拖拽对供应商进行重新排序,带有视觉推送效果动画 +- **编辑模式切换** - 显示/隐藏拖拽手柄,优化编辑体验 + +### 自定义端点管理 + +- **多端点配置** - 支持聚合类供应商的多 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** + +
+ +--- + +## 🌟 关于 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 diff --git a/docs/roadmap.md b/docs/roadmap.md index 014cdeb..ede2d51 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -3,7 +3,8 @@ - mcp 管理器 ✅ - i18n ✅ - gemini cli -- homebrew 支持 +- homebrew 支持 ✅ - memory 管理 - codex 更多预设供应商 - 云同步 +- 本地代理 diff --git a/package.json b/package.json index b721d6b..a1ac252 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cc-switch", - "version": "3.6.0", + "version": "3.6.1", "description": "Claude Code & Codex 供应商切换工具", "scripts": { "dev": "pnpm tauri dev", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 89e8c11..08edb91 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -563,7 +563,7 @@ dependencies = [ [[package]] name = "cc-switch" -version = "3.6.0" +version = "3.6.1" dependencies = [ "chrono", "dirs 5.0.1", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4b91c89..d842159 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cc-switch" -version = "3.6.0" +version = "3.6.1" description = "Claude Code & Codex 供应商配置管理工具" authors = ["Jason Young"] license = "MIT" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index ca4e664..5a37832 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "CC Switch", - "version": "3.6.0", + "version": "3.6.1", "identifier": "com.ccswitch.desktop", "build": { "frontendDist": "../dist",