# CC Switch v4.0.9 ### 4.0 正式版の 5 回目の修正リリース プロバイダーを追加する流れ全体を見直しました。フォームは入力する順に並び、アドレスと Key のすぐ後にモデル一覧が来ます。「モデル一覧を取得」を押すとダイアログが自動で開き、各モデルのコンテキストウィンドウや、推論と画像入力に対応しているかどうかがすでに調べてあります。チェックを入れて「適用」を押すとパラメータごと一覧に追加され、同じダイアログでチェックを外せば削除できます。項目の説明は「?」にまとめ、案内はアプリが現在、直接接続・ルーティング・集約のどのモードかに合わせて表示されます。また、Codex の新しいスレッドや自動化が一部の上流でエラーになり、スレッド全体を続けられなくなっていた問題を修正しました。ルーティング経由で Chat プロトコルに変換される DeepSeek、OpenCode Zen などでは 400、xAI のネイティブ Responses では 422 になっていました。WSL2 内の Claude Desktop など、ホストのループバックに接続できないクライアントのために、「設定 → ローカルルーティング」で「接続先アドレス」を入力できるようになりました。4.0 の更新内容の全体は [v4.0 リリースノート](https://github.com/farion1231/cc-switch/blob/main/docs/release-notes/v4.0.4-ja.md) をご覧ください。 --- ## 見直したプロバイダー追加の流れ 今回は、プロバイダーを追加・編集するフォームを最初から最後まで整理し直しました。主に Claude Code、Codex、集約の 3 つのレイアウトです。これまではモデル一覧が詳細オプションの中にあり、その一覧で決まるデフォルトモデルより後ろに置かれていました。取得したモデルは一覧の下で 1 つずつ追加するしかなく、追加した後も自動入力されたパラメータを 1 つずつ確認する必要がありました。ほぼすべての項目の下に灰色の説明文があり、実際に使っているモードと合わない案内もありました。現在は入力する順に、次のように進みます。 **1. アドレス、Key、上流フォーマット。** まずプリセットを選ぶか、アドレスと Key を入力します。上流フォーマットを選ぶときの案内は、アプリの現在のモードに合わせて表示されます。アプリが直接接続モードのときに変換が必要なフォーマットを選ぶと、フォーマットの下に、このカードは直接接続で使用中のためこのフォーマットで保存するとリクエストが失敗すること、またはこのフォーマットはルーティングか集約に切り替えてから使う必要があることが表示されます。Claude Code の上流フォーマットで OpenAI Chat または Responses を選んだときは、使われない認証の項目を表示しなくなりました。 **2. モデル一覧:取得、選択、パラメータの自動入力。** Codex のモデル一覧を詳細オプションから出してアドレスと Key のすぐ後に置き、集約レイアウトと同じく「モデル一覧」という名前にしました。Claude Code の集約、Codex、OpenCode、MiniMax Code のモデル一覧では、次のようにモデルを追加します。 1. モデル一覧の「モデル一覧を取得」を押します。 2. 取得に成功すると「モデルを選択」ダイアログが自動で開きます。各モデルの横にはコンテキストウィンドウと、推論と画像入力に対応しているかどうかがすでに表示されています。値はまず同じアドレスのプリセットから取り、次にプロバイダーのアドレスで models.dev を調べ、それでもなければモデルのベンダー自身のエントリを調べます。 3. 使いたいモデルにチェックを入れ、「適用」を押します。新しいモデルは一覧の末尾に追加され、パラメータはダイアログに表示された値でそのまま入力されます。「……のコンテキスト長などのパラメータを補完しました。内容をご確認ください」という通知は表示されなくなりました。 同じダイアログで削除もできます。チェックは「一覧にある」ことを表し、設定済みのモデルは最初からチェックが入っています。チェックを外して「適用」を押すと一覧から削除され、「キャンセル」を押すと何も変わりません。残ったモデルは元の順序と設定を保ちます。設定済みなのに今回プロバイダーから返されなかったモデルは「プロバイダーの一覧にないモデル」グループに分けて表示され、まとめて整理できます。ダイアログでは検索、すべて選択 / すべて解除、選択済みのみの表示ができ、選択数も表示されます。一度取得するとボタンは「モデルを選択」に変わり、もう一度押しても再取得はしません。必要なときはダイアログで「再取得」を押します。 **3. デフォルトモデル:一覧の 1 行目。** Codex にモデル一覧があるときは 1 行目がデフォルトモデルになり、デフォルトモデルの入力欄は別に設けなくなりました。1 行目の名前を変えたり削除したりすると、デフォルトモデルもそれに合わせて変わります。一覧が空のときにモデルを追加すると、現在のデフォルトモデルが自動で 1 行目に置かれるため、一覧を追加したことでデフォルトモデルが変わってしまうことはありません。モデル一覧を設定していないカードでは、デフォルトモデルの入力欄が引き続き残ります。こうしたカードは Codex 自身の `/model` メニューを使っており、一覧を追加するとメニューには一覧にあるモデルしか残らないためです。集約のモデル一覧でも各行の ★ と「デフォルトモデルにする」をなくし、同じく 1 行目がデフォルトというルールにしました。 **4. サブエージェント(Codex、新機能)。** Codex のフォームに「サブエージェントモデル」と「サブエージェントの推論強度」を追加しました。`config.toml` の `[agents]` の下にある `default_subagent_model` と `default_subagent_reasoning_effort` に対応します。空欄にすると対応するキーを削除し、サブエージェントはメインエージェントの設定を引き継ぎます。プロバイダーを切り替えるとこの 2 項目も切り替わり、`[agents]` の下のほかの設定は変更しません。入力したモデルがモデル一覧にないときはフォームが案内を表示し、ワンクリックで一覧に追加できます。一覧にないモデルは Codex がコンテキストウィンドウを取得できず、ルーティング経由で Chat / Anthropic プロトコルに変換するときにはデフォルトモデルに置き換えられてしまうためです。集約モードではこの 2 項目を書き込まず、サブエージェントはメインのモデルに従います。メインエージェントが別のプロバイダーのモデルに切り替えた後に、サブエージェントがデフォルトのプロバイダーに戻されてしまうのを防ぐためです。 **5. 詳細オプション。** 「フル URL」スイッチはエンドポイントのパスが標準的でないゲートウェイでしか役に立たないため、詳細オプションに移しました。すでにオンにしているカードでは、編集時に詳細オプションが自動で開きます。User-Agent とリクエスト上書きは 1 つのブロックにまとめ、ルーティングモードと集約モードでのみ有効になることを明記しました。 **フォーム全体:説明は「?」の中に。** 項目が何か、いつ使うかは、項目名の後ろの「?」に入れました。画面には、モデル一覧を変更したら Codex の再起動が必要、最大出力が実際の上限を超えると 400 になる、といった注意が必要な結果だけを残しています。マネージドアカウントのカード(Codex、xAI ログイン、Copilot)では、バックエンドがもともと読まない項目を表示しなくなりました。旧バージョンから残っている項目についての案内は 1 文に短くしました。Claude Desktop のモデルモードの説明も 1 文にしました。プロバイダーがネイティブの Claude モデルを提供している場合は直接接続、DeepSeek、Kimi などのサードパーティのモデルにはモデルマッピングを使います。 ## 新機能 **「設定 → ローカルルーティング」に「接続先アドレス」を追加しました。** CC Switch がクライアントの設定に書き込むプロキシアドレス(Claude Desktop のゲートウェイアドレスを含む)は、これまで常に待ち受けアドレスから決めており、`0.0.0.0` で待ち受けているときは `127.0.0.1` を書き込んでいました。WSL2(NAT モード)内の Claude Desktop のセッションは Windows のループバックにアクセスできないため、ずっと接続できず、待ち受けアドレスを `0.0.0.0` に変えても解決しませんでした。現在は待ち受けアドレスを `0.0.0.0` にしたうえで、「接続先アドレス」に WSL からアクセスできる Windows のアドレスを入力すると、クライアントに書き込むプロキシアドレスにそれが使われます。保存するとルーティング中のクライアントの設定をすぐに書き換え、ルーティングサービスを再起動する必要はありません。この設定はこのデバイスにだけ保存され、クラウド同期でほかのデバイスに持ち込まれることはありません。 **新しいプリセット:** SoruxGPT、IKunCode、RunToken、BotCF、YYLX、TokenFlux、OpenModel。 ## 修正 - **Codex で新しいスレッドを作成したり自動化を実行したりすると、DeepSeek などの上流が 400 を返し、スレッド全体が使えなくなっていた問題。** Codex のデスクトップ版は新しいスレッドを作成するとき、対応するツール呼び出しのないツール結果(create_thread の受領通知)を履歴に挿入します。ルーティング経由で Responses を Chat プロトコルに変換するとき、こうした結果はこれまで `role=tool` メッセージとして送られており、DeepSeek や OpenCode Zen のような厳格な Chat の上流は、このスレッドのすべてのリクエストを拒否していました。現在は、対応する呼び出しが見つからないツール結果を、印の付いたユーザーメッセージに変えて送ります。中の画像はこれまでどおり画像として送ります。対応する呼び出しがあるツール結果は以前とまったく同じです。 - **Codex で xAI のネイティブ Responses を使うと 422 になり、スレッドを復旧できなかった問題。** Codex のデスクトップ版が挿入する受領通知(新しいスレッドの作成、自動化の更新、ハートビート、スレッド間のメッセージ)には `call_id` がなく、xAI は「`call_id` がない」としてリクエスト全体を拒否します。受領通知は履歴に残り続けるため、そのスレッドではその後何も送れなくなっていました。現在は xAI に送るときだけ、こうした受領通知を同じ印の付いたユーザーメッセージに書き換え、テキストと画像は残します。`call_id` のある項目やほかの上流には影響しません。 - **Claude Code の上流フォーマットで OpenAI Chat または Responses を選ぶと、ルーティングが `x-api-key` を送っていた問題。** これまではリクエストヘッダーを Key の変数名だけで決めていたため、`ANTHROPIC_API_KEY` を使うカードは `x-api-key` を送り、OpenAI 形式の上流には認識されませんでした。現在は OpenAI 形式では常に `Authorization: Bearer` を使い、Anthropic 形式では引き続き変数名で決めます。 - **Claude Code の集約モードで、デフォルトのプロバイダーの互換スイッチしか使われていなかった問題。** ほかのプロバイダーのモデルが選ばれたとき、そのプロバイダーが対応していない機能を送ってエラーになることがありました。現在はスイッチの性質に応じて全メンバーの設定をまとめます。実験的 beta、Artifact、自動モードサーバーのように機能をオフにするものは、1 つのメンバーでもオフにしていればオフになります。ツール検索、effort を常に有効化、細粒度のツールストリーミングのようなものは、すべてのメンバーがオンのときだけオンになります。追加のリクエストボディ、思考、ウィンドウ関連のスイッチは、引き続きデフォルトのプロバイダーに従います。 - **起動時に画面の言語が正しくなく、設定ページを開いてから元に戻っていた問題。** 最初の画面の言語はブラウザーのキャッシュから読んでおり、キャッシュが空か古いとき(WebView のデータを消去した、`~/.cc-switch` を新しいパソコンにコピーした、など)は、まずシステムの言語で表示されていました。現在は起動時に保存済みの言語設定を読み込み、すぐに適用します。 - **macOS で LAN 内の API アドレスに接続できなかった問題。** CC Switch は macOS に「ローカルネットワーク」の権限を求めるようになりました。初めて LAN 内のアドレスに接続するときにシステムが許可を求めるダイアログを表示します。このときのリクエストは失敗することがありますが、「許可」を押してからやり直せば接続できます。以前に拒否したことがある場合は、「システム設定 → プライバシーとセキュリティ → ローカルネットワーク」で CC Switch をオンにしてください。 - **プロバイダーの編集パネルを開くと、画面が一瞬ちらついていた問題。** 編集パネルはこれまで読み込み中の画面を先に開いてから内容に切り替えていました。現在は内容の準備ができてから開き、追加パネルと同じフェードインの効果は残しています。 **その他:** Flatpak のビルドドキュメントで `--bundles` 引数の書き方を修正し、署名用の秘密鍵がない場合に更新パッケージの作成を省く方法を説明しました。 ## アップグレードに関する注意 **データベースの構造は変わっていません。** バージョンは 20 のままです。新しいプリセットは新しく追加するプロバイダーにだけ影響します。 --- ## 謝辞 [@NeeYoonc](https://github.com/NeeYoonc)(Codex のスレッドで対応する呼び出しが見つからないツール結果によって Chat の上流が 400 を返さないように)、[@allenxu09](https://github.com/allenxu09)(ローカルルーティングの「接続先アドレス」)、[@chivopic](https://github.com/chivopic)(macOS のローカルネットワーク権限)、[@NestorRay](https://github.com/NestorRay)(編集パネルを開くときのちらつき)、[@zydo](https://github.com/zydo)(Flatpak のビルドドキュメント)の貢献に感謝します。 同じ問題の修正を先に提出してくださった [@loulanyue](https://github.com/loulanyue)、xAI のネイティブ Responses でも同じ問題が起きることを実際に確かめてくださった [@OriyukiAkari](https://github.com/OriyukiAkari) に感謝します。問題の報告、再現情報の提供、検証に協力してくださった [@Z-Eternal](https://github.com/Z-Eternal)、[@xulimeng2022](https://github.com/xulimeng2022)、[@flame916](https://github.com/flame916)、[@hej56230-commits](https://github.com/hej56230-commits)、[@Soliton1912](https://github.com/Soliton1912)、[@gggjjto](https://github.com/gggjjto)、[@KinJ](https://github.com/KinJ)、[@xue-ding-e](https://github.com/xue-ding-e) にも感謝します。 技術的な詳細は [CHANGELOG](https://github.com/farion1231/cc-switch/blob/main/CHANGELOG.md) をご覧ください。