docs(release): add v4.0.17 release notes

This commit is contained in:
Jason committed 2026-10-20 22:08:53 +08:00
1 parent e172f37d88
commit 19798e2f92
4 files changed
+165

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
# CC Switch v4.0.17
This release fixes two issues introduced in 4.0.16 and polishes the tray quick panel. Lightweight mode frees the memory used by the tray panel again, so WebView2 processes exit normally on Windows; Codex no longer gets a long-expired ChatGPT login back when entering routing and gets stuck on the sign-in page. The tray panel no longer jumps while hovering between apps and fits on high-DPI and small Windows displays; quota bars line up and show how long until they reset, and remaining balances are shown in green; on Windows, a left click on the tray icon opens the main window again. The Hermes form now warns when a provider key has the same name as a built-in provider. Other fixes cover the routing port staying taken after quitting on Windows, Codex remote compaction usage recorded as 0, some MCP servers lost when several are toggled at once, URL-only MCP servers synced to Hermes and OpenCode as empty entries, curly quotes inside TOML strings being rewritten, WebDAV sync failing on Data Capsule, macOS capitalizing the first letter of a typed API key, and an MSI installed over a portable folder still being treated as portable. For everything new in 4.0, see the [v4.0 release notes](https://github.com/farion1231/cc-switch/blob/main/docs/release-notes/v4.0.4-en.md).
---
## Improvements
**Warning when a Hermes provider key has the same name as a built-in provider**. When a key has the same name as a Hermes built-in provider (such as `deepseek` or `openrouter`), Hermes uses the built-in one, asks for that provider's own API key environment variable, and ignores this card's endpoint and key; 4.0.16 only fixed the two MiniMax presets ([#8538](https://github.com/farion1231/cc-switch/pull/8538)). Now, when the key you enter is a Hermes built-in provider ID, a note under the field warns about it and suggests `cc-switch-<key>`; for a card that is already added and whose key can no longer be changed, it suggests adding the provider again under a different key. Aliases such as `kimi` are not affected and are not flagged. The warning does not block saving.
**Quota lines in the tray panel**. Each tier's label, bar and reset time now sit in three aligned columns, so bars start and end at the same place and are longer; the reset time shows how long is left instead of a date, for example "Resets in 1d 23h". For pay-as-you-go balances only the amount is shown in green, matching the provider card; a used-up balance keeps its warning color.
**On Windows, a left click on the tray icon opens the main window again** ([#8572](https://github.com/farion1231/cc-switch/pull/8572)). A right click shows the tray style chosen in Settings (panel or menu). macOS is unchanged: both buttons show the chosen style.
## Fixes
- **The tray panel kept its memory in lightweight mode** ([#8612](https://github.com/farion1231/cc-switch/issues/8612)). Since 4.0.16 the tray panel is on by default; it is a separate window that was only hidden, never closed, after it first opened, so WebView2 processes on Windows did not exit after entering lightweight mode. In lightweight mode the panel is now released as soon as it is hidden and opened again on the next tray click.
- **Codex stuck on the ChatGPT sign-in page after entering routing** ([#8573](https://github.com/farion1231/cc-switch/issues/8573)). Since 4.0.16, entering a third-party route with no login in `auth.json` gives back the most recently set-aside login; that login could have been set aside months earlier and long expired, so Codex desktop kept failing to refresh it, and every time routing was entered or left it was given back again. Expired logins are no longer given back; they stay in the stash and are still returned when switching back to an official card.
- **The tray panel jumped while hovering, and was cut off on scaled Windows displays** ([#8572](https://github.com/farion1231/cc-switch/pull/8572), [#8595](https://github.com/farion1231/cc-switch/pull/8595), [#8549](https://github.com/farion1231/cc-switch/issues/8549), [#8553](https://github.com/farion1231/cc-switch/issues/8553), [#8564](https://github.com/farion1231/cc-switch/issues/8564)). Both columns now follow the main panel's height, and long provider lists scroll in the right column, so rows no longer move under the pointer while hovering between apps, and a single app no longer leaves a large blank area. On Windows, sizes are converted using the monitor's scale factor, and the panel narrows and stays within the screen's work area, so "Open main window" and "Quit" at the bottom are no longer pushed out of view; after moving to a monitor with a different scale, the first popup also displays correctly.
- **On Windows, the routing port stayed taken after quitting CC Switch, and the next start failed with os error 10048** ([#8552](https://github.com/farion1231/cc-switch/issues/8552)). Terminals and command-line tools started by CC Switch inherited the listening port and kept it after CC Switch quit, so the next start could only fall back to direct mode until a reboot or a port change. These child processes no longer inherit the listening port.
- **Codex remote compaction usage recorded as 0** ([#8479](https://github.com/farion1231/cc-switch/pull/8479)). Since Codex 0.153, remote compaction usage is written in a different kind of record that was not read, so those requests counted as 0. They are now counted; records scanned before the upgrade stay as they are.
- **Some MCP servers were not written to the config file when several were toggled at once** ([#8580](https://github.com/farion1231/cc-switch/issues/8580)). Toggles writing the same config file at the same time overwrote each other, so the UI showed a server as enabled while the config file did not have it. Writes now happen one after another.
- **URL-only MCP servers synced to Hermes and OpenCode as empty entries** ([#8579](https://github.com/farion1231/cc-switch/issues/8579)). Servers pasted in JSON mode or imported by deep link with a `url` but no `type` were treated as local commands, so Hermes got an entry with only `enabled: true` and OpenCode one with an empty command, while the UI reported a successful sync. Now, as with Codex, a server with a URL and no command is treated as a remote server.
- **Curly quotes (including Chinese quotes) inside TOML strings were changed to straight quotes** ([#8559](https://github.com/farion1231/cc-switch/issues/8559)). To work with Chinese input methods, MCP import and the Codex config editor convert curly quotes to straight quotes, but they also converted quotes inside strings, turning `"don’t"` into `"don't"` and rejecting some valid configs. Now only quotes used as string delimiters are converted; quotes inside strings are kept, and typing quotes directly with a Chinese input method still works.
- **WebDAV sync uploads failed on Data Capsule with 500** ([#8554](https://github.com/farion1231/cc-switch/issues/8554)). The sync manifest is now uploaded with a generic file type; its content is unchanged, so old and new versions can read each other's manifests. S3 sync is not affected.
- **macOS capitalized the first letter of a typed API key.** With the key shown in plain text, a typed `sk-…` could be changed to `Sk-…` by the system and saved, failing authentication. The field now turns off auto-capitalization, autocorrect and spellcheck. Pasted keys were not affected.
- **An MSI installed over a portable folder was still treated as portable, with updates only by manual download** ([#8529](https://github.com/farion1231/cc-switch/pull/8529), [#3132](https://github.com/farion1231/cc-switch/issues/3132)). The installer now removes the leftover portable marker `portable.ini` from the folder, so the installed app can update in place. Uninstalling does not remove this file.
## Upgrade Notes
**The database schema is unchanged**, still at 20.
- On Windows, a left click on the tray icon opens the main window again (in 4.0.16 it opened the panel with the panel style; the menu style always worked this way); a right click shows the style chosen under "Settings → General → Tray style".
- Codex remote compaction usage is counted only from records read after the upgrade; records already scanned before the upgrade are not backfilled.
---
## Thanks
Thanks to [@funkpopo](https://github.com/funkpopo) (tray panel scrolling and scaling), [@Chaoqi31](https://github.com/Chaoqi31) (Codex remote compaction usage), [@chonngyi](https://github.com/chonngyi) (installing the MSI over a portable folder) for their contributions.
Thanks to [@SamPheng](https://github.com/SamPheng), [@xinxinxiaoxin](https://github.com/xinxinxiaoxin), [@XinwangTao](https://github.com/XinwangTao), [@ramonmi](https://github.com/ramonmi), [@Jdker22](https://github.com/Jdker22), [@Geneslves](https://github.com/Geneslves), [@Jinmoli](https://github.com/Jinmoli), [@nanfenggushi](https://github.com/nanfenggushi), [@fereverlove](https://github.com/fereverlove), [@hulkbig](https://github.com/hulkbig), [@AngryBigCat](https://github.com/AngryBigCat), [@QC2168](https://github.com/QC2168) for reporting issues and providing reproduction details and fix ideas.
For the full technical details, see the [CHANGELOG](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md).
+44
View File
@@ -0,0 +1,44 @@
# CC Switch v4.0.17
今回のリリースでは、4.0.16 で生じた 2 つの問題を修正し、トレイのクイックパネルを改善しました。軽量モードで再びトレイパネルのメモリが解放されるようになり、Windows の WebView2 プロセスも正常に終了します。Codex がルーティングに入るときに期限切れの古い ChatGPT ログインが戻され、ログイン画面で止まることもなくなりました。トレイパネルはアプリ間でホバーしても揺れなくなり、拡大率の高い Windows や小さな画面でも最後まで表示されます。利用枠のバーがそろい、リセットまでの残り時間を表示し、残高は緑色で示します。Windows でトレイアイコンを左クリックしたときは、再びメイン画面が開きます。Hermes のプロバイダーキーが組み込みプロバイダーと同じ名前のときは、フォームに警告が出るようになりました。このほか、Windows で終了後もルーティングのポートが使用中のままになる、Codex のリモート圧縮の使用量が 0 として記録される、複数の MCP サーバーを同時に切り替えると一部が消える、URL だけの MCP サーバーが Hermes と OpenCode に空の状態で同期される、TOML 文字列内の曲がった引用符が書き換えられる、データカプセルの WebDAV 同期が失敗する、macOS で入力した API キーの先頭が大文字に変わる、ポータブル版のフォルダーに MSI をインストールしてもポータブル版として扱われる、といった問題を修正しました。4.0 の更新内容の全体は [v4.0 リリースノート](https://github.com/farion1231/cc-switch/blob/main/docs/release-notes/v4.0.4-ja.md) をご覧ください。
---
## 改善
**Hermes のプロバイダーキーが組み込みプロバイダーと同じ名前のときに警告を表示**。Hermes は組み込みプロバイダーと同じ名前のキー(`deepseek`、`openrouter` など)を見ると組み込みのほうを使い、そのプロバイダー専用の環境変数の API キーを求めるため、このカードのエンドポイントとキーは使われません。4.0.16 で修正したのは MiniMax の 2 つのプリセットだけでした([#8538](https://github.com/farion1231/cc-switch/pull/8538))。入力したキーが Hermes の組み込みプロバイダーの ID のときは、入力欄の下に警告が出て `cc-switch-<キー>` を提案します。すでに追加済みでキーを変更できないカードでは、別のキーで追加し直すよう案内します。`kimi` などの別名は影響を受けず、警告も出ません。警告が出ても保存はできます。
**トレイパネルの利用枠表示**。各段階のラベル、バー、リセット時刻が 3 列にそろい、バーの始点と終点が一致し、長さも伸びました。リセット時刻は日付ではなく残り時間で表示します(例:「1日23時間後にリセット」)。従量課金の残高は金額だけを緑色で示し、プロバイダーカードと同じ表示になりました。残高を使い切ったときは引き続き警告色で表示します。
**Windows でトレイアイコンを左クリックすると再びメイン画面が開くように**([#8572](https://github.com/farion1231/cc-switch/pull/8572))。右クリックでは設定で選んだトレイの表示(パネルまたはメニュー)が開きます。macOS は変わらず、左右どちらのクリックでも選んだ表示が開きます。
## 修正
- **軽量モードでもトレイパネルがメモリを使い続けていた問題**([#8612](https://github.com/farion1231/cc-switch/issues/8612))。4.0.16 からトレイパネルが既定で有効になりました。パネルは独立したウィンドウで、一度開いた後は隠されるだけで閉じられないため、軽量モードに入っても Windows の WebView2 プロセスが終了しませんでした。軽量モードではパネルを閉じるとすぐに解放し、次にトレイアイコンをクリックしたときに開き直します。
- **ルーティングに入った後、Codex が ChatGPT のログイン画面で止まる問題**([#8573](https://github.com/farion1231/cc-switch/issues/8573))。4.0.16 から、サードパーティのルーティングに入るときに `auth.json` にログインがなければ、最後に退避したログインを戻していました。このログインは何か月も前に退避され、とうに期限切れになっていることがあり、Codex デスクトップ版は更新に失敗し続け、ルーティングに出入りするたびにまた戻されていました。期限切れのログインは戻さず退避したまま残し、公式カードに切り替えたときは従来どおり戻します。
- **トレイパネルがホバー中に揺れる、拡大率の高い Windows で一部が表示されない問題**([#8572](https://github.com/farion1231/cc-switch/pull/8572)、[#8595](https://github.com/farion1231/cc-switch/pull/8595)、[#8549](https://github.com/farion1231/cc-switch/issues/8549)、[#8553](https://github.com/farion1231/cc-switch/issues/8553)、[#8564](https://github.com/farion1231/cc-switch/issues/8564))。2 列の高さをメインパネルに合わせ、プロバイダーの多いリストは右の列の中でスクロールするようにしました。アプリ間でホバーしても行がポインターの下に移動せず、アプリが 1 つだけのときに大きな余白が出ることもなくなりました。Windows ではモニターの拡大率に合わせてサイズを換算し、パネルを狭めて画面の作業領域内に収めるため、下部の「メインウィンドウを開く」と「終了」がはみ出すことはありません。拡大率の異なる別のモニターに移った後も、最初に開いたときから正しく表示されます。
- **Windows で CC Switch を終了してもルーティングのポートが使用中のままで、次回の起動時に os error 10048 になる問題**([#8552](https://github.com/farion1231/cc-switch/issues/8552))。CC Switch が起動したターミナルやコマンドラインツールが待ち受けポートを引き継ぎ、CC Switch の終了後もポートを保持していたため、次回の起動では再起動かポートの変更までは直結に戻るしかありませんでした。これらの子プロセスは待ち受けポートを引き継がなくなりました。
- **Codex のリモート圧縮の使用量が 0 として記録される問題**([#8479](https://github.com/farion1231/cc-switch/pull/8479))。Codex 0.153 以降、リモート圧縮の使用量は別の種類のレコードに書かれており、これを読んでいなかったため、該当するリクエストは 0 として扱われていました。現在は正しく集計します。アップグレード前に読み取り済みのレコードはそのままです。
- **複数の MCP サーバーを同時に切り替えると、一部が設定ファイルに書き込まれない問題**([#8580](https://github.com/farion1231/cc-switch/issues/8580))。同じ設定ファイルへの同時の書き込みが互いに上書きし合い、画面では有効なのに設定ファイルには入っていない状態になっていました。現在は順番に書き込みます。
- **URL だけの MCP サーバーが Hermes と OpenCode に空の状態で同期される問題**([#8579](https://github.com/farion1231/cc-switch/issues/8579))。JSON モードで貼り付けたり、ディープリンクでインポートしたりした、`url` だけで `type` のないサーバーはローカルコマンドとして扱われていました。そのため同期後、Hermes には `enabled: true` だけ、OpenCode にはコマンドが空のエントリが入り、画面には同期成功と表示されていました。現在は Codex と同じく、URL があってコマンドのないサーバーをリモートサーバーとして扱います。
- **TOML 文字列内の曲がった引用符(中国語の引用符を含む)がまっすぐな引用符に書き換えられる問題**([#8559](https://github.com/farion1231/cc-switch/issues/8559))。中国語の入力方式に対応するため、MCP のインポートと Codex の設定エディターでは曲がった引用符をまっすぐな引用符に変換しますが、文字列の中の引用符まで変換していたため、`"don’t"` が `"don't"` に変わり、有効な設定が拒否されることもありました。現在は文字列の区切りとして使われた引用符だけを変換し、文字列の中の引用符はそのまま残します。中国語の入力方式で直接引用符を入力しても引き続き使えます。
- **データカプセルの WebDAV 同期のアップロードが 500 で失敗する問題**([#8554](https://github.com/farion1231/cc-switch/issues/8554))。同期のマニフェストを汎用のファイル形式でアップロードするようにしました。内容は変わらないため、新旧のバージョンで互いに読み取れます。S3 同期には影響しません。
- **macOS で入力した API キーの先頭が自動で大文字に変わる問題。** キーを平文で表示しているとき、入力した `sk-…` がシステムによって `Sk-…` に変わったまま保存され、認証に失敗することがありました。この入力欄では自動大文字化、自動修正、スペルチェックをオフにしました。貼り付けたキーは影響を受けません。
- **ポータブル版のフォルダーに MSI をインストールしてもポータブル版として扱われ、更新は手動ダウンロードしかできなかった問題**([#8529](https://github.com/farion1231/cc-switch/pull/8529)、[#3132](https://github.com/farion1231/cc-switch/issues/3132))。インストール時にフォルダーに残ったポータブル版の目印 `portable.ini` を削除するようにしたため、インストール後はアプリ内で更新できます。アンインストール時にはこのファイルを削除しません。
## アップグレードに関する注意
**データベースの構造は変わっていません。** バージョンは 20 のままです。
- Windows でトレイアイコンを左クリックすると、再びメイン画面が開きます(4.0.16 ではパネル表示のときはパネルが開いていました。メニュー表示では以前からこの動作です)。右クリックでは「設定 → 一般 → トレイの表示」で選んだ表示が開きます。
- Codex のリモート圧縮の使用量は、アップグレード後に読み取ったレコードから集計します。アップグレード前に読み取り済みのレコードはさかのぼって集計しません。
---
## 謝辞
[@funkpopo](https://github.com/funkpopo)(トレイパネルのスクロールと拡大率への対応)、[@Chaoqi31](https://github.com/Chaoqi31)(Codex のリモート圧縮の使用量)、[@chonngyi](https://github.com/chonngyi)(ポータブル版のフォルダーへの MSI のインストール)の貢献に感謝します。
問題の報告、再現情報や修正のアイデアの提供に協力してくださった [@SamPheng](https://github.com/SamPheng)、[@xinxinxiaoxin](https://github.com/xinxinxiaoxin)、[@XinwangTao](https://github.com/XinwangTao)、[@ramonmi](https://github.com/ramonmi)、[@Jdker22](https://github.com/Jdker22)、[@Geneslves](https://github.com/Geneslves)、[@Jinmoli](https://github.com/Jinmoli)、[@nanfenggushi](https://github.com/nanfenggushi)、[@fereverlove](https://github.com/fereverlove)、[@hulkbig](https://github.com/hulkbig)、[@AngryBigCat](https://github.com/AngryBigCat)、[@QC2168](https://github.com/QC2168) に感謝します。
技術的な詳細は [CHANGELOG](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md) をご覧ください。
+44
View File
@@ -0,0 +1,44 @@
# CC Switch v4.0.17
本版本修复了 4.0.16 带来的两个问题,并改进了托盘快捷面板。轻量模式又能释放托盘面板占用的内存,Windows 上的 WebView2 进程能正常退出;Codex 进入路由时不会再还回一份早已过期的 ChatGPT 登录、卡在登录页。托盘面板在应用之间悬停时不再跳动,在高缩放和小屏幕的 Windows 上也能完整显示;额度条对齐了,并显示距重置还有多久,剩余余额标成绿色;Windows 上左键点托盘图标恢复为打开主界面。Hermes 的供应商标识和内置供应商重名时,表单会给出提醒。另外修复了 Windows 上退出后路由端口仍被占用、Codex 远程压缩的用量记成 0、同时勾选多个 MCP 服务器时有的丢失、只有地址的 MCP 服务器同步到 Hermes 和 OpenCode 后是空的、TOML 字符串里的弯引号被改掉、数据胶囊的 WebDAV 同步失败、macOS 把手输的 API Key 首字母改成大写、在便携版目录上安装 MSI 后仍被当成便携版等问题。4.0 完整的更新内容请见 [v4.0 发布说明](https://github.com/farion1231/cc-switch/blob/main/docs/release-notes/v4.0.4-zh.md)。
---
## 改进
**Hermes 的供应商标识和内置供应商重名时给出提醒**。Hermes 遇到和内置供应商同名的标识(如 `deepseek`、`openrouter`)会改用内置那家,要它自己的环境变量 Key,这张卡的地址和 Key 都不生效;4.0.16 只修了 MiniMax 两个预设([#8538](https://github.com/farion1231/cc-switch/pull/8538))。现在填的标识是 Hermes 内置供应商的标识时,输入框下方会提醒并建议改成 `cc-switch-<标识>`;已经添加、标识改不了的卡,会提示用别的标识重新添加。`kimi` 这类别名不受影响,也不会报。提醒不影响保存。
**托盘面板的额度显示**。各档额度的标签、进度条和重置时间排成整齐的三列,进度条起止对齐,也更长了;重置时间从具体日期改为「还剩多久」,例如「1天23小时后重置」。按量付费的剩余余额只把金额标成绿色,和供应商卡片一致;余额用完时仍显示警告色。
**Windows 上左键点托盘图标恢复为打开主界面**([#8572](https://github.com/farion1231/cc-switch/pull/8572))。右键弹出设置里选的托盘样式(面板或菜单)。macOS 不变,左右键都弹出所选样式。
## 修复
- **轻量模式下托盘面板一直占着内存**([#8612](https://github.com/farion1231/cc-switch/issues/8612))。4.0.16 起托盘面板默认开启,它是单独的一个窗口,第一次弹出后只隐藏不关闭,进入轻量模式后 Windows 上的 WebView2 进程也不会退出。现在轻量模式下面板一收起就释放,下次点托盘图标再重新打开。
- **Codex 进入路由后卡在 ChatGPT 登录页**([#8573](https://github.com/farion1231/cc-switch/issues/8573))。4.0.16 起,进入第三方路由时如果 `auth.json` 里没有登录,会还回最近收起的那份;这份登录可能是几个月前收起的、早已过期,Codex 桌面版拿着它反复刷新失败,每次进出路由又会被还回来。现在已过期的登录不再还回,仍留在暂存里,切回官方卡时照常还回。
- **托盘面板悬停时来回跳动,Windows 高缩放下显示不全**([#8572](https://github.com/farion1231/cc-switch/pull/8572)、[#8595](https://github.com/farion1231/cc-switch/pull/8595),[#8549](https://github.com/farion1231/cc-switch/issues/8549)、[#8553](https://github.com/farion1231/cc-switch/issues/8553)、[#8564](https://github.com/farion1231/cc-switch/issues/8564))。两栏高度改为以主面板为准,供应商多的列表在右栏里滚动,在应用之间悬停时行不会再挪到鼠标下面,只有一个应用时也不再留出大片空白。Windows 上按显示器的缩放比例换算尺寸,面板会收窄并限制在屏幕可用区域内,底部的「打开主窗口」和「退出」不会再被挤出去;挪到缩放不同的另一块屏幕后,第一次弹出也能正确显示。
- **Windows 上退出 CC Switch 后路由端口仍被占用,下次启动报 os error 10048**([#8552](https://github.com/farion1231/cc-switch/issues/8552))。CC Switch 打开的终端和命令行工具继承了监听端口,CC Switch 退出后端口仍被它们占着,下次启动只能回到直连,直到重启电脑或换端口。现在这些子进程不再继承监听端口。
- **Codex 远程压缩的用量记成 0**([#8479](https://github.com/farion1231/cc-switch/pull/8479))。Codex 0.153 起,远程压缩的用量写在另一种记录里,以前没有读取,这些请求都按 0 计。现在会正常计入;升级前已经扫描过的记录保持原样。
- **同时勾选多个 MCP 服务器时,有的没写进配置文件**([#8580](https://github.com/farion1231/cc-switch/issues/8580))。几次勾选同时写同一个配置文件时会互相覆盖,界面显示已启用,配置文件里却没有。现在会依次写入。
- **只有地址的 MCP 服务器同步到 Hermes 和 OpenCode 后是空的**([#8579](https://github.com/farion1231/cc-switch/issues/8579))。在 JSON 模式里粘贴或通过深链接导入、只写了 `url` 没写 `type` 的服务器,以前被当成本地命令,同步后 Hermes 里只有 `enabled: true`,OpenCode 里命令为空,界面却显示同步成功。现在和 Codex 一样,有地址、没有命令的按远程服务器处理。
- **TOML 字符串里的弯引号(含中文引号)被改成直引号**([#8559](https://github.com/farion1231/cc-switch/issues/8559))。为了兼容中文输入法,导入 MCP 和编辑 Codex 配置时会把弯引号转成直引号,以前连字符串里面的也一起转了,把 `"don’t"` 改成 `"don't"`,有的合法配置还会被拒绝。现在只转换用作字符串边界的引号,字符串里面的保持原样,用中文输入法直接输入引号仍然可以。
- **数据胶囊的 WebDAV 同步上传失败,返回 500**([#8554](https://github.com/farion1231/cc-switch/issues/8554))。现在同步清单改用通用的文件类型上传,内容不变,新旧版本可以互相读取。S3 同步不受影响。
- **macOS 上手输的 API Key 首字母被自动改成大写。** 显示明文时,输入的 `sk-…` 可能被系统改成 `Sk-…` 保存下来,导致认证失败。现在这个输入框关闭了自动大写、自动更正和拼写检查。粘贴的 Key 不受影响。
- **在便携版目录上安装 MSI 后,仍被当成便携版,只能手动下载更新**([#8529](https://github.com/farion1231/cc-switch/pull/8529),[#3132](https://github.com/farion1231/cc-switch/issues/3132))。现在安装时会删掉目录里残留的便携版标记 `portable.ini`,安装后可以在应用内更新。卸载时不会删除这个文件。
## 升级说明
**数据库结构没有变化**,仍然是 20。
- Windows 上左键点托盘图标恢复为打开主界面(4.0.16 用面板样式时是弹出面板,菜单样式一直如此);右键弹出「设置 → 通用 → 托盘样式」里选的样式。
- Codex 远程压缩的用量只从升级后读到的记录开始计入,升级前已经扫描过的不会补算。
---
## 致谢
感谢 [@funkpopo](https://github.com/funkpopo)(托盘面板的滚动与缩放)、[@Chaoqi31](https://github.com/Chaoqi31)(Codex 远程压缩用量)、[@chonngyi](https://github.com/chonngyi)(在便携版目录上安装 MSI)的贡献。
感谢 [@SamPheng](https://github.com/SamPheng)、[@xinxinxiaoxin](https://github.com/xinxinxiaoxin)、[@XinwangTao](https://github.com/XinwangTao)、[@ramonmi](https://github.com/ramonmi)、[@Jdker22](https://github.com/Jdker22)、[@Geneslves](https://github.com/Geneslves)、[@Jinmoli](https://github.com/Jinmoli)、[@nanfenggushi](https://github.com/nanfenggushi)、[@fereverlove](https://github.com/fereverlove)、[@hulkbig](https://github.com/hulkbig)、[@AngryBigCat](https://github.com/AngryBigCat)、[@QC2168](https://github.com/QC2168) 报告问题、提供复现信息和修复思路。
完整的技术细节请见 [CHANGELOG](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md)。