From 064b339babea9db04abd8840c59509e9e413ce6d Mon Sep 17 00:00:00 2001 From: makoMakoGo <48956204+makoMakoGo@users.noreply.github.com> Date: Fri, 1 May 2026 17:41:32 +0800 Subject: [PATCH] fix(claude): persist max effort via env (#2493) --- docs/user-manual/en/2-providers/2.1-add.md | 2 +- docs/user-manual/ja/2-providers/2.1-add.md | 2 +- docs/user-manual/zh/2-providers/2.1-add.md | 2 +- .../providers/forms/CommonConfigEditor.tsx | 8 +- tests/components/CommonConfigEditor.test.tsx | 117 ++++++++++++++++++ 5 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 tests/components/CommonConfigEditor.test.tsx diff --git a/docs/user-manual/en/2-providers/2.1-add.md b/docs/user-manual/en/2-providers/2.1-add.md index 87e58f6a..49960efd 100644 --- a/docs/user-manual/en/2-providers/2.1-add.md +++ b/docs/user-manual/en/2-providers/2.1-add.md @@ -509,7 +509,7 @@ When editing Claude providers, a set of **quick toggles** is available above the | **Hide Attribution** | Clears commit/PR attribution metadata | Sets `attribution: {commit: "", pr: ""}` | | **Enable Teammates** | Enables the agent teams feature | Sets `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1"` | | **Enable Tool Search** | Enables tool search functionality | Sets `env.ENABLE_TOOL_SEARCH = "true"` | -| **Max Effort** | Sets effort level to max | Sets `effortLevel = "max"` | +| **Max Effort** | Sets effort level to max | Sets `env.CLAUDE_CODE_EFFORT_LEVEL = "max"` | | **Disable Auto Upgrade** | Prevents Claude Code auto-updates | Sets `env.DISABLE_AUTOUPDATER = "1"` | When a toggle is unchecked, its corresponding config entry is removed entirely. Changes are reflected in the JSON editor in real-time. diff --git a/docs/user-manual/ja/2-providers/2.1-add.md b/docs/user-manual/ja/2-providers/2.1-add.md index f2447eb8..d8bc7e05 100644 --- a/docs/user-manual/ja/2-providers/2.1-add.md +++ b/docs/user-manual/ja/2-providers/2.1-add.md @@ -509,7 +509,7 @@ Claude プロバイダーの編集時、JSON エディタの上部に **クイ | **帰属情報を非表示** | コミット/PR の帰属メタデータをクリア | `attribution: {commit: "", pr: ""}` を設定 | | **チームメイトを有効化** | エージェントチーム機能を有効化 | `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1"` を設定 | | **ツール検索を有効化** | ツール検索機能を有効化 | `env.ENABLE_TOOL_SEARCH = "true"` を設定 | -| **最大強度思考** | エフォートレベルを max に設定 | `effortLevel = "max"` を設定 | +| **最大強度思考** | エフォートレベルを max に設定 | `env.CLAUDE_CODE_EFFORT_LEVEL = "max"` を設定 | | **自動アップグレードを無効化** | Claude Code の自動更新を防止 | `env.DISABLE_AUTOUPDATER = "1"` を設定 | トグルのチェックを外すと、対応する設定エントリが完全に削除されます。変更は JSON エディタにリアルタイムで反映されます。 diff --git a/docs/user-manual/zh/2-providers/2.1-add.md b/docs/user-manual/zh/2-providers/2.1-add.md index d4d62499..ea1fd02c 100644 --- a/docs/user-manual/zh/2-providers/2.1-add.md +++ b/docs/user-manual/zh/2-providers/2.1-add.md @@ -509,7 +509,7 @@ v3.13.0 起新增的高级选项。默认情况下,CC Switch 会把配置的 ` | **隐藏署名** | 清除提交/PR 的署名元数据 | 设置 `attribution: {commit: "", pr: ""}` | | **启用 Teammates** | 启用 Agent 团队功能 | 设置 `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1"` | | **启用工具搜索** | 启用工具搜索功能 | 设置 `env.ENABLE_TOOL_SEARCH = "true"` | -| **最大强度思考** | 将 effort 级别设为 max | 设置 `effortLevel = "max"` | +| **最大强度思考** | 将 effort 级别设为 max | 设置 `env.CLAUDE_CODE_EFFORT_LEVEL = "max"` | | **禁用自动更新** | 阻止 Claude Code 自动更新 | 设置 `env.DISABLE_AUTOUPDATER = "1"` | 取消勾选开关时,对应的配置项会被完全移除。更改会实时反映在 JSON 编辑器中。 diff --git a/src/components/providers/forms/CommonConfigEditor.tsx b/src/components/providers/forms/CommonConfigEditor.tsx index 62b8aeb0..a8353694 100644 --- a/src/components/providers/forms/CommonConfigEditor.tsx +++ b/src/components/providers/forms/CommonConfigEditor.tsx @@ -81,7 +81,7 @@ export function CommonConfigEditor({ enableToolSearch: config?.env?.ENABLE_TOOL_SEARCH === "true" || config?.env?.ENABLE_TOOL_SEARCH === "1", - effortMax: config?.effortLevel === "max", + effortMax: config?.env?.CLAUDE_CODE_EFFORT_LEVEL === "max", disableAutoUpgrade: config?.env?.DISABLE_AUTOUPDATER === "1" || config?.env?.DISABLE_AUTOUPDATER === 1, @@ -129,10 +129,12 @@ export function CommonConfigEditor({ } break; case "effortMax": + if (!config.env) config.env = {}; if (checked) { - config.effortLevel = "max"; + config.env.CLAUDE_CODE_EFFORT_LEVEL = "max"; } else { - delete config.effortLevel; + delete config.env.CLAUDE_CODE_EFFORT_LEVEL; + if (Object.keys(config.env).length === 0) delete config.env; } break; case "disableAutoUpgrade": diff --git a/tests/components/CommonConfigEditor.test.tsx b/tests/components/CommonConfigEditor.test.tsx new file mode 100644 index 00000000..a4b0c9ce --- /dev/null +++ b/tests/components/CommonConfigEditor.test.tsx @@ -0,0 +1,117 @@ +import type { ReactNode } from "react"; +import { fireEvent, render, screen } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; +import { CommonConfigEditor } from "@/components/providers/forms/CommonConfigEditor"; + +vi.mock("@/components/common/FullScreenPanel", () => ({ + FullScreenPanel: ({ + isOpen, + title, + onClose, + children, + footer, + }: { + isOpen: boolean; + title: string; + onClose: () => void; + children: ReactNode; + footer?: ReactNode; + }) => + isOpen ? ( +