mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-10-25 17:22:27 +08:00
chore(release): v4.0.16
This commit is contained in:
1 parent
01bc780f89
commit
855a2eb8b1
5 files changed
+54
-4
No files matched your search
@@ -5,6 +5,56 @@ All notable changes to CC Switch will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [4.0.16] - 2026-10-19
|
||||
|
||||
This release turns the tray into a quick panel and fixes a batch of Codex and routing issues. Clicking the tray icon now opens a panel with each app's in-use provider, mode, quota and usage; the native menu is still available under Settings → General → Tray style. In Codex aggregation mode, a session no longer gets stuck compacting on the provider it came from, and the ChatGPT login is no longer lost every time CC Switch restarts while Codex is routed. Codex through Chat upstreams keeps parallel tool results together around image notices, configured GPT context windows now apply to official GPT catalog entries, and the 272K GPT cap from 4.0.13 only applies to windows borrowed from the vendor entry. Claude Code routing and Claude Desktop route mode publish the 5.5 catalog ids for 5.5 upstreams. Other fixes cover Zhipu pay-as-you-go accounts showing "query failed", Volcengine plan quota turning red on new cards, fnm-managed Node CLIs on Windows, an idle card that could not be deleted, the "Get API Key" link in the edit form, and a softer grey macOS icon tile. OpenCode cards can now set OpenCode's default model.
|
||||
|
||||
**Stats**: 40 commits | 121 files changed | +8525 insertions | -552 deletions
|
||||
|
||||
### Added
|
||||
|
||||
- **Tray Panel** (#8432): On macOS and Windows, clicking the tray icon opens a panel by default; Settings → General → Window and terminal adds a "Tray style" option, Panel (default) or Menu. The panel has a Configuration tab (apps, in-use providers with search and switching, modes in their theme colors, quota) and a Usage tab whose trend follows the main window's currency and chart style. Every row reuses the native menu's event id and goes through `handle_tray_menu_event`. macOS draws native glass under each card with a mostly opaque theme fill so text stays readable over dark windows; Windows uses opaque cards on a clipped canvas. Switching provider rows follows the pointer immediately (with a menu-aim check toward the open sub panel), panel state is collected off the main thread and change notifications are throttled. The choice is a device setting (`nativeTrayMenu` in `settings.json`; unset means the panel) and applies without restarting. Linux keeps the native menu and gets an "Open quick panel" item at the top.
|
||||
- **OpenCode Default Model From a Card** (refs #8509): Added OpenCode cards get the "Set as default" action already used by OpenClaw, with a model menu built from the same fragment CC Switch writes. It writes only the top-level `model` (`<provider>/<model>`) in `opencode.json` through the format-preserving path, leaving comments and `small_model` alone. New commands `get_opencode_default_model` / `set_opencode_default_model`.
|
||||
|
||||
### Changed
|
||||
|
||||
- **MiniMax-M3.1-Flash** (#8518): The official MiniMax / MiniMax en presets default to MiniMax-M3.1-Flash in Claude Code, Claude Desktop, Codex, Hermes, OpenCode, OpenClaw and Pi, with MiniMax-M3 still selectable (Claude Code keeps it in the Opus slot) and M3.1 Flash pricing seeded. Hermes pins its background title model to M3, since M3.1 cannot turn thinking off, only when the user has not chosen their own title model or route.
|
||||
- **"Get API Key" Link Style**: The link is light blue again without an underline, keeping the caption size and the ↗ arrow.
|
||||
- **Sidebar Today Badge Prefix**: The "Today" prefix from before 4.0.15 is back.
|
||||
- **Zhipu API Key Links**: The `?ic=` invite parameter is removed from the Zhipu GLM / Zhipu GLM en links in all seven presets.
|
||||
- **Pricing**: Kimi K3 records the $3/M 5-minute cache write price (was 0); Step 5 Preview cache reads follow StepFun's raise to 0.70 CNY/M. Both go into the repair list so existing installs pick them up unless edited by hand. Seeds qwen3.7-flash, qwen3.6-27b and qwen3.8-omni-flash.
|
||||
- **Turkish**: 17 UI strings reworded (#8481).
|
||||
- **Presets**: AllTokens SI joins as a sponsor preset.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Codex Aggregation Sessions Stuck Compacting on the Previous Provider** (fixes #8485): Route provider catalog rows kept their template `comp_hash` (official GPT mirrors carry `3000`) while Stack member rows used `cc-switch`, so moving a session between them made Codex run a pre-turn compaction on the previous model; when that provider was out of quota every later turn failed the same way. Third-party route rows in the merged catalog now share the Stack `comp_hash`, which also unsticks sessions already caught this way. The official route keeps its native rows.
|
||||
- **Codex ChatGPT Login Lost After Restarting CC Switch in Routing** (fixes #8431): With the direct pointer on a third-party card and "keep official login" off, quitting detached back to direct config, which stashed the login and deleted `auth.json`, and the next attach never restored it, so Codex desktop 26.1013+ refused to resume chats. Detaching now always keeps the login; a real exit from routing still follows the setting. Entering or attaching a third-party route also takes back the most recently stashed login when `auth.json` has none, recovering logins already lost this way.
|
||||
- **Chat Tool Outputs Split by Hoisted Developer Notices** (#8445, fixes #7190, #7569): Mid-history system/developer items such as Codex's `image_resize_notice` were treated as turn boundaries in the Responses → Chat conversion, so strict Chat upstreams saw tool, user, tool and returned 400 "No tool output found". They are now hoisted: tool media and orphan results wait until the tool-output batch ends, commentary merging looks past trailing hoisted messages, and restored missing calls go before their first output.
|
||||
- **Configured GPT Context Windows Ignored for Official Catalog Entries** (#8385, fixes #8366, #8350): Provider-scoped or per-model context windows now apply to mirrored official GPT entries (`context_window`, `max_context_window`) with the auto-compact limit kept in sync; official defaults stay when nothing is configured. Gemini input overflow on the Codex Chat path is normalized to `context_length_exceeded` as a `response.failed` stream so Codex can compact, and non-string SSE error codes are stringified.
|
||||
- **272K GPT Cap Applied to Real 1.05M Windows**: The 4.0.13 cap applied to every window from the metadata lookup. Same-endpoint presets and the models.dev provider matched by address now keep their own windows; only a window borrowed from the vendor entry is capped. A typed window is kept as is, and the Codex, Hermes, OpenClaw, OpenCode and Pi forms show a note when a GPT window is above 272K. The OpenRouter, Vercel AI Gateway, Cloudflare AI Gateway and DigitalOcean presets get their 1.05M windows back, and the preset guard allows GPT windows above 272K only for those hosts. Existing rows are not migrated.
|
||||
- **Claude Code Routing Used 5 Ids for 5.5 Upstreams** (#8450): In routing takeover, Opus / Sonnet slots whose upstream is a 5.5 model get `claude-opus-5-5` / `claude-sonnet-5-5`, so Claude Code shows the right model and uses the 128K output cap instead of 64K. `CLAUDE_CODE_SUBAGENT_MODEL` is projected the same way and mapped back when its tier is empty.
|
||||
- **Claude Desktop Route Mode Sent 5 Requests to 5.5 Targets** (fixes #8082): Route mode published the fixed mapping keys `claude-opus-5` / `claude-sonnet-5`, so Desktop built requests for the 5 models and 5.5 upstreams rejected them. It now publishes the 5.5 catalog ids for 5.5 targets using the same version matching as Claude Code; mapping keys are unchanged so older profiles keep resolving, and a route configured under the catalog name is left alone.
|
||||
- **Unforced Claude WebSearch Rejected on Codex OAuth** (#7936): A WebSearch tool with `max_uses` was refused unless it was the forced tool. It now passes with a soft instruction cap, and the existing response-side counter cuts off excess `web_search_call` items.
|
||||
- **Zhipu Pay-as-you-go Accounts Showed "Query Failed"** (refs #8465): The token plan endpoint answers HTTP 200 with business code 500 "no coding plan" for such accounts. The personal plan now falls back to the account balance (`availableBalance`, CNY on bigmodel.cn, USD assumed on z.ai), shown in the balance layout; auth, network and other errors are unchanged and the team plan does not fall back.
|
||||
- **Volcengine Plan Quota Red on New Cards** (refs #8494): The quota needs an account AccessKey ID + Secret, not the inference key, but adding a Volcengine Agent / Coding Plan card or importing one by deep link enabled the query anyway. Volcengine is preselected in the usage settings but stays off until the AccessKey is filled in; deep links that set `usageEnabled` are still honored, and the import badge matches the backend.
|
||||
- **Codex Official Card Editor Showed a Stale `auth.json`**: For official cards not bound to a managed account, the box now shows what `auth.json` will contain after switching, predicted read-only from the switch's login plan, instead of the row's old OAuth snapshot (or an empty object for follow-login cards). Saving without touching it keeps the row's original auth. The live file was never affected.
|
||||
- **fnm-managed Node CLIs Not Found on Windows** (refs #8484): fnm only adds a per-shell multishell link to PATH, so detection and in-app installs saw no node or npm. The effective PATH now ends with fnm's `aliases\default` (`FNM_DIR`, legacy `~\.fnm`, then `%APPDATA%\fnm`; only if present); explicit PATH entries keep precedence.
|
||||
- **Idle Card Could Not Be Deleted** (refs #8506): Deletion also refused cards that only the stale DB `is_current` pointed at, which happens after the startup migration of an old Claude Desktop mapping card. It now checks the effective direct pointer plus the route, the same set the UI disables.
|
||||
- **"Get API Key" Link Missing When Editing a Provider**: With no preset selected, the form looks up the preset by its current base URL for the link and partner promotion, as the add form does; presets that disagree fall back to the Website field.
|
||||
- **False Environment Conflicts on macOS / Linux**: The check also scanned the inherited process environment (for example `ANTHROPIC_BASE_URL` that Claude Desktop injects into its terminals), which could not be removed from the app. Only shell config definitions are reported on Unix now; the Windows registry check is unchanged.
|
||||
- **MiniMax Code Usage Rows Recorded as `unknown`**: When the usage table has no model, it is looked up from the assistant message with the same session and timestamp in the pi history. Rows already imported are unchanged.
|
||||
- **Hermes MiniMax Provider Shadowed by the Built-in** (#8538): Hermes routes `model.provider` equal to a canonical built-in id (`minimax`, `minimax-cn`, `minimax-oauth`) to the built-in provider and ignores a same-named `custom_providers` entry, so a card keyed `minimax` asked for `MINIMAX_API_KEY` and sent nothing. The MiniMax / MiniMax en Hermes presets now prefill `cc-switch-minimax` / `cc-switch-minimax-en` as the provider key, and MiniMax-M3.1-Flash declares `supports_vision: true`. Existing cards keyed `minimax` are not migrated.
|
||||
- **Wide CJK Usage Axis**: Chinese and Japanese ticks write 5千万 / 2千亿 instead of 5000万 / 2000亿, and the Y axis in the dashboard and the tray panel sizes itself to its widest tick instead of a fixed 44px.
|
||||
- **macOS Icon Tile Too Bright** (refs #8495): The white tile from 4.0.15 is recolored to `#e8e8e8` with the same geometry and anti-aliasing. Windows and Linux icons stay transparent.
|
||||
- **Blurry About Card Logo** (refs #8470): The About card renders the vector `logo.svg` instead of a 32×32 PNG.
|
||||
|
||||
### Upgrade notes
|
||||
|
||||
- **No database schema change** (still 20).
|
||||
- On macOS and Windows the tray icon opens the panel after upgrading; the native menu can be picked under Settings → General → Tray style. On Windows a left click used to open the main window and now opens the panel too; "Open main window" sits at the bottom of the panel.
|
||||
- Existing GPT model rows are not migrated. Codex GPT rows saved before 4.0.13 with an auto-filled 1.05M window take effect since #8385; the form shows a note when opened.
|
||||
|
||||
## [4.0.15] - 2026-10-17
|
||||
|
||||
This release is mainly fixes. On Windows, settings such as hidden apps and config dir overrides no longer reset to defaults after an update, and updating Codex no longer removes a healthy install when `--version` is slow. The macOS app icon gets a white rounded-square background so macOS 26 stops placing it in a grey tile. Requests through the local route keep Claude Code's session identity again, which restores the stable cache key on the Codex OAuth path and the Gemini signature replay for Claude Desktop. Codex through Chat upstreams recovers from a malformed tool call in history, and DeepSeek no longer rejects replayed tool history. Other fixes cover slow WebDAV/S3 transfers cut off at 300 seconds, "'claude' is not recognized" in Windows provider terminals, Hermes sessions in WSL, unconditional restart prompts on routed switches, the routing marker after failover, and drag sorting. New: a bar / area style for the usage trend chart, an image input switch per Hermes model, and model fetching for managed OAuth providers in the Claude Desktop form.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cc-switch",
|
||||
"version": "4.0.15",
|
||||
"version": "4.0.16",
|
||||
"description": "All-in-One Assistant for Claude Code, Codex & Gemini CLI",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
Generated
+1
-1
@@ -758,7 +758,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cc-switch"
|
||||
version = "4.0.15"
|
||||
version = "4.0.16"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arboard",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "cc-switch"
|
||||
version = "4.0.15"
|
||||
version = "4.0.16"
|
||||
description = "All-in-One Assistant for Claude Code, Codex & Gemini CLI"
|
||||
authors = ["Jason Young"]
|
||||
license = "MIT"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"productName": "CC Switch",
|
||||
"version": "4.0.15",
|
||||
"version": "4.0.16",
|
||||
"identifier": "com.ccswitch.desktop",
|
||||
"build": {
|
||||
"frontendDist": "../dist",
|
||||
|
||||
Reference in new issue
Block a user