From 19788c031667fc1e367511fb9026607652e0f9cb Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Fri, 4 Sep 2026 10:21:22 +0800 Subject: [PATCH 1/8] feat(settings): dynamic thinking effort experimental toggle (DTE-1) --- .../types/src/__tests__/experiment.test.ts | 19 +++++ packages/types/src/experiment.ts | 2 + scripts/stryker-diff.mjs | 10 ++- scripts/stryker-diff.test.mjs | 7 +- src/shared/__tests__/experiments.spec.ts | 29 ++++++- src/shared/experiments.ts | 2 + .../__tests__/ExperimentalSettings.spec.tsx | 76 ++++++++++++++++++- webview-ui/src/i18n/locales/ca/settings.json | 4 + webview-ui/src/i18n/locales/de/settings.json | 4 + webview-ui/src/i18n/locales/en/settings.json | 4 + webview-ui/src/i18n/locales/es/settings.json | 4 + webview-ui/src/i18n/locales/fr/settings.json | 4 + webview-ui/src/i18n/locales/hi/settings.json | 4 + webview-ui/src/i18n/locales/id/settings.json | 4 + webview-ui/src/i18n/locales/it/settings.json | 4 + webview-ui/src/i18n/locales/ja/settings.json | 4 + webview-ui/src/i18n/locales/ko/settings.json | 4 + webview-ui/src/i18n/locales/nl/settings.json | 4 + webview-ui/src/i18n/locales/pl/settings.json | 4 + .../src/i18n/locales/pt-BR/settings.json | 4 + webview-ui/src/i18n/locales/ru/settings.json | 4 + webview-ui/src/i18n/locales/tr/settings.json | 4 + webview-ui/src/i18n/locales/vi/settings.json | 4 + .../src/i18n/locales/zh-CN/settings.json | 4 + .../src/i18n/locales/zh-TW/settings.json | 4 + 25 files changed, 211 insertions(+), 6 deletions(-) create mode 100644 packages/types/src/__tests__/experiment.test.ts diff --git a/packages/types/src/__tests__/experiment.test.ts b/packages/types/src/__tests__/experiment.test.ts new file mode 100644 index 0000000000..0ef4ed2e02 --- /dev/null +++ b/packages/types/src/__tests__/experiment.test.ts @@ -0,0 +1,19 @@ +import { experimentIds, experimentIdsSchema, experimentsSchema } from "../experiment.js" + +describe("dynamicThinkingEffort experiment", () => { + it("is part of the experiment id enum", () => { + expect(experimentIds).toContain("dynamicThinkingEffort") + expect(experimentIdsSchema.safeParse("dynamicThinkingEffort").success).toBe(true) + }) + + it("parses enabled and disabled states", () => { + expect(experimentsSchema.parse({ dynamicThinkingEffort: true })).toEqual({ dynamicThinkingEffort: true }) + expect(experimentsSchema.parse({ dynamicThinkingEffort: false })).toEqual({ dynamicThinkingEffort: false }) + expect(experimentsSchema.parse({})).toEqual({}) + }) + + it("rejects non-boolean values", () => { + expect(experimentsSchema.safeParse({ dynamicThinkingEffort: "yes" }).success).toBe(false) + expect(experimentIdsSchema.safeParse("dynamic-thinking-effort").success).toBe(false) + }) +}) diff --git a/packages/types/src/experiment.ts b/packages/types/src/experiment.ts index 5d511859b1..f4b3a1c0a8 100644 --- a/packages/types/src/experiment.ts +++ b/packages/types/src/experiment.ts @@ -12,6 +12,7 @@ export const experimentIds = [ "runSlashCommand", "customTools", "parallelToolExecution", + "dynamicThinkingEffort", ] as const export const experimentIdsSchema = z.enum(experimentIds) @@ -28,6 +29,7 @@ export const experimentsSchema = z.object({ runSlashCommand: z.boolean().optional(), customTools: z.boolean().optional(), parallelToolExecution: z.boolean().optional(), + dynamicThinkingEffort: z.boolean().optional(), }) export type Experiments = z.infer diff --git a/scripts/stryker-diff.mjs b/scripts/stryker-diff.mjs index c0e8a6cd1a..e46afb22ab 100644 --- a/scripts/stryker-diff.mjs +++ b/scripts/stryker-diff.mjs @@ -51,8 +51,14 @@ export const PACKAGE_CONFIGS = [ root: "src", sourceRoot: "src/", vitestConfig: "vitest.config.ts", - vitestRelated: false, - discoverRelatedTests: true, + // Use plugin-side related-test discovery: with an explicit STRYKER_TEST_FILES + // list, stryker-js 10.0.0 plans static mutants with runtime activation + // (stryker-mutator/stryker-js#6144, #6209), which the vitest plugin can only + // apply after top-level code has run, producing false Survived results. + // Revert to vitestRelated: false / discoverRelatedTests: true once the + // upstream planner fix lands. + vitestRelated: true, + discoverRelatedTests: false, excludedPaths: ["src/esbuild.mjs", "src/eslint.config.mjs", "src/utils/vitest-verbosity.ts"], }, ] diff --git a/scripts/stryker-diff.test.mjs b/scripts/stryker-diff.test.mjs index 0f39dc507f..b86f5f3e96 100644 --- a/scripts/stryker-diff.test.mjs +++ b/scripts/stryker-diff.test.mjs @@ -129,8 +129,11 @@ describe("buildManifest", () => { assert.equal(webview.runRoot, ".") assert.equal(webview.discoverRelatedTests, true) assert.equal(webview.vitestRelated, false) - assert.equal(extension.discoverRelatedTests, true) - assert.equal(extension.vitestRelated, false) + // The extension entry uses plugin-side related discovery while stryker-js 10.0.0 + // plans static mutants with runtime activation when given explicit test files + // (stryker-mutator/stryker-js#6144, #6209); see the entry comment in stryker-diff.mjs. + assert.equal(extension.discoverRelatedTests, false) + assert.equal(extension.vitestRelated, true) }) it("returns no packages for tests, barrels, unsupported packages, and type-only changes", () => { diff --git a/src/shared/__tests__/experiments.spec.ts b/src/shared/__tests__/experiments.spec.ts index f2261a5c09..b6e8993df4 100644 --- a/src/shared/__tests__/experiments.spec.ts +++ b/src/shared/__tests__/experiments.spec.ts @@ -2,7 +2,7 @@ import type { ExperimentId } from "@roo-code/types" -import { EXPERIMENT_IDS, experimentConfigsMap, experiments as Experiments } from "../experiments" +import { EXPERIMENT_IDS, experimentConfigsMap, experimentDefault, experiments as Experiments } from "../experiments" describe("experiments", () => { describe("PREVENT_FOCUS_DISRUPTION", () => { @@ -22,6 +22,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(false) }) @@ -33,6 +34,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(true) }) @@ -44,6 +46,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(false) }) @@ -66,4 +69,28 @@ describe("experiments", () => { expect(Experiments.isEnabled({ parallelToolExecution: true }, "parallelToolExecution")).toBe(true) }) }) + + describe("DYNAMIC_THINKING_EFFORT", () => { + it("is configured correctly", () => { + expect(EXPERIMENT_IDS.DYNAMIC_THINKING_EFFORT).toBe("dynamicThinkingEffort") + expect(experimentConfigsMap.DYNAMIC_THINKING_EFFORT).toMatchObject({ + enabled: false, + }) + // Visible in the Settings panel (showInSettings defaults to true). + expect(experimentConfigsMap.DYNAMIC_THINKING_EFFORT.showInSettings).toBeUndefined() + }) + + it("is disabled by default", () => { + expect(experimentDefault.dynamicThinkingEffort).toBe(false) + expect(Experiments.isEnabled({}, "dynamicThinkingEffort")).toBe(false) + }) + + it("returns true when enabled", () => { + expect(Experiments.isEnabled({ dynamicThinkingEffort: true }, "dynamicThinkingEffort")).toBe(true) + }) + + it("returns false when explicitly disabled", () => { + expect(Experiments.isEnabled({ dynamicThinkingEffort: false }, "dynamicThinkingEffort")).toBe(false) + }) + }) }) diff --git a/src/shared/experiments.ts b/src/shared/experiments.ts index ae538b9138..c0d461a454 100644 --- a/src/shared/experiments.ts +++ b/src/shared/experiments.ts @@ -6,6 +6,7 @@ export const EXPERIMENT_IDS = { RUN_SLASH_COMMAND: "runSlashCommand", CUSTOM_TOOLS: "customTools", PARALLEL_TOOL_EXECUTION: "parallelToolExecution", + DYNAMIC_THINKING_EFFORT: "dynamicThinkingEffort", } as const satisfies Record type _AssertExperimentIds = AssertEqual>> @@ -25,6 +26,7 @@ export const experimentConfigsMap: Record = { CUSTOM_TOOLS: { enabled: false }, // TODO: add i18n keys (settings:experimental.PARALLEL_TOOL_EXECUTION.name/.description) in the same PR that sets showInSettings: true PARALLEL_TOOL_EXECUTION: { enabled: false, showInSettings: false }, + DYNAMIC_THINKING_EFFORT: { enabled: false }, } export const experimentDefault = Object.fromEntries( diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx index b31f87dc7e..3feddad1d4 100644 --- a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx @@ -1,4 +1,4 @@ -import { render, screen } from "@testing-library/react" +import { fireEvent, render, screen } from "@testing-library/react" import { experimentDefault } from "@roo/experiments" @@ -32,4 +32,78 @@ describe("ExperimentalSettings", () => { expect(screen.getByText("settings:experimental.CUSTOM_TOOLS.name")).toBeInTheDocument() expect(screen.queryByText("settings:experimental.PARALLEL_TOOL_EXECUTION.name")).not.toBeInTheDocument() }) + + it("renders the dynamic thinking effort toggle", () => { + render() + + expect(screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name")).toBeInTheDocument() + }) + + it("leaves the dynamic thinking effort toggle unchecked when the value is false or omitted", () => { + const getCheckbox = () => { + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + return label?.querySelector("input[type='checkbox']") + } + + // Explicit false + let result = render( + , + ) + expect(getCheckbox()).not.toBeNull() + expect(getCheckbox()).not.toBeChecked() + result.unmount() + + // Omitted (absent from the persisted config) + const omitted: Record = { ...experimentDefault } + delete omitted.dynamicThinkingEffort + result = render() + expect(getCheckbox()).not.toBeNull() + expect(getCheckbox()).not.toBeChecked() + result.unmount() + }) + + it("binds the dynamic thinking effort toggle to setExperimentEnabled", () => { + const setExperimentEnabled = vi.fn() + render( + , + ) + + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + const checkbox = label?.querySelector("input[type='checkbox']") + expect(checkbox).not.toBeNull() + expect(checkbox).toBeChecked() + + fireEvent.click(checkbox!) + + expect(setExperimentEnabled).toHaveBeenCalledTimes(1) + expect(setExperimentEnabled).toHaveBeenCalledWith("dynamicThinkingEffort", false) + }) + + it("toggles the dynamic thinking effort on when clicked from the unchecked state", () => { + const setExperimentEnabled = vi.fn() + render( + , + ) + + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + const checkbox = label?.querySelector("input[type='checkbox']") + expect(checkbox).not.toBeNull() + expect(checkbox).not.toBeChecked() + + fireEvent.click(checkbox!) + + expect(setExperimentEnabled).toHaveBeenCalledTimes(1) + expect(setExperimentEnabled).toHaveBeenCalledWith("dynamicThinkingEffort", true) + }) }) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 762a1290af..8d7b7ee515 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Eines actualitzades correctament", "refreshError": "Error en actualitzar les eines", "toolParameters": "Paràmetres" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esforç de pensament dinàmic", + "description": "Activa l'eina set_thinking_effort perquè el model decideixi el seu esforç de pensament per pas. El control manual al xat sempre està disponible. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index f56984bc73..cbb94b5cee 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tools erfolgreich aktualisiert", "refreshError": "Fehler beim Aktualisieren der Tools", "toolParameters": "Parameter" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamische Denkintensität", + "description": "Aktiviert das set_thinking_effort-Tool, damit das Modell die Denkintensität pro Schritt selbst bestimmt. Die manuelle Anpassung im Chat ist immer verfügbar. (experimentell)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 77f8a4f86d..9839de35d3 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -1055,6 +1055,10 @@ "refreshSuccess": "Tools refreshed successfully", "refreshError": "Failed to refresh tools", "toolParameters": "Parameters" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamic thinking effort", + "description": "Enables the set_thinking_effort tool so the model can decide its thinking effort per step. The manual in-chat control is always available. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index e730483fa0..9556372c04 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Herramientas actualizadas correctamente", "refreshError": "Error al actualizar las herramientas", "toolParameters": "Parámetros" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esfuerzo de pensamiento dinámico", + "description": "Habilita la herramienta set_thinking_effort para que el modelo decida su esfuerzo de pensamiento por paso. El control manual en el chat siempre está disponible. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 78770da21d..2914341df1 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Outils actualisés avec succès", "refreshError": "Échec de l'actualisation des outils", "toolParameters": "Paramètres" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Effort de réflexion dynamique", + "description": "Active l'outil set_thinking_effort afin que le modèle décide de son effort de réflexion à chaque étape. Le contrôle manuel dans le chat est toujours disponible. (expérimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 413d3515bc..9fb8a84a72 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "टूल्स सफलतापूर्वक रिफ्रेश हुए", "refreshError": "टूल्स रिफ्रेश करने में विफल", "toolParameters": "पैरामीटर्स" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "डायनामिक चिंतन प्रयास", + "description": "set_thinking_effort टूल सक्षम करता है ताकि मॉडल हर चरण में अपना चिंतन प्रयास स्वयं तय कर सके। चैट में मैन्युअल नियंत्रण हमेशा उपलब्ध है। (प्रयोगात्मक)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 9b9928da64..682ac9ad55 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tool berhasil direfresh", "refreshError": "Gagal merefresh tool", "toolParameters": "Parameter" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Usaha berpikir dinamis", + "description": "Mengaktifkan alat set_thinking_effort agar model dapat memutuskan usaha berpikirnya per langkah. Kontrol manual di obrolan selalu tersedia. (eksperimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 8a43ec3d35..9ae8f2a8bd 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Strumenti aggiornati con successo", "refreshError": "Impossibile aggiornare gli strumenti", "toolParameters": "Parametri" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Sforzo di pensiero dinamico", + "description": "Abilita lo strumento set_thinking_effort in modo che il modello decida lo sforzo di pensiero per ogni passaggio. Il controllo manuale nella chat è sempre disponibile. (sperimentale)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index b2cfbe977e..b824141a95 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "ツールが正常に更新されました", "refreshError": "ツールの更新に失敗しました", "toolParameters": "パラメーター" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "ダイナミック思考強度", + "description": "set_thinking_effort ツールを有効にし、ステップごとにモデルが思考強度を決定できるようにします。チャット内での手動調整は常に利用可能です。(実験的機能)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 1ff9addeb4..c714cf86bf 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "도구가 성공적으로 새로고침되었습니다", "refreshError": "도구 새로고침에 실패했습니다", "toolParameters": "매개변수" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "동적 사고 노력", + "description": "set_thinking_effort 도구를 활성화하여 단계별로 모델이 사고 노력을 결정하도록 합니다. 채팅에서 수동 조정은 항상 사용 가능합니다. (실험적 기능)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 4361d091a1..dfa0c29a7f 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tools succesvol vernieuwd", "refreshError": "Fout bij vernieuwen van tools", "toolParameters": "Parameters" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamisch denkwerk", + "description": "Schakelt het set_thinking_effort-gereedschap in zodat het model per stap het denkwerk zelf kan bepalen. De handmatige aanpassing in het gesprek is altijd beschikbaar. (experimenteel)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 277bcaa470..84e06b68a6 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Narzędzia odświeżone pomyślnie", "refreshError": "Nie udało się odświeżyć narzędzi", "toolParameters": "Parametry" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamiczny wysiłek myślowy", + "description": "Włącza narzędzie set_thinking_effort, aby model samodzielnie decydował o wysiłku myślowym na każdym kroku. Ręczna regulacja w czacie jest zawsze dostępna. (eksperymentalne)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 8ce67bcd48..79e16a6298 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Ferramentas atualizadas com sucesso", "refreshError": "Falha ao atualizar ferramentas", "toolParameters": "Parâmetros" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esforço de pensamento dinâmico", + "description": "Ativa a ferramenta set_thinking_effort para que o modelo decida seu esforço de pensamento em cada etapa. O controle manual na conversa está sempre disponível. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 0ac516c190..e1131173ff 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Инструменты успешно обновлены", "refreshError": "Не удалось обновить инструменты", "toolParameters": "Параметры" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Динамическое усилие размышления", + "description": "Включает инструмент set_thinking_effort, чтобы модель самостоятельно определяла усилие размышления на каждом шаге. Ручное управление в чате всегда доступно. (экспериментальная функция)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 5d3a5cb89a..992ef00800 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Araçlar başarıyla yenilendi", "refreshError": "Araçlar yenilenemedi", "toolParameters": "Parametreler" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dinamik düşünme çabası", + "description": "set_thinking_effort aracını etkinleştirir; böylece model her adımda kendi düşünme çabasını belirler. Sohbetteki manuel kontrol her zaman kullanılabilir. (deneysel)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index adb1be64e3..990db5ebe8 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Làm mới công cụ thành công", "refreshError": "Không thể làm mới công cụ", "toolParameters": "Thông số" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Nỗ lực suy nghĩ động", + "description": "Bật công cụ set_thinking_effort để model tự quyết định nỗ lực suy nghĩ của từng bước. Điều chỉnh thủ công trong trò chuyện luôn khả dụng. (thực nghiệm)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 916f629efe..092ebfb8c3 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "工具刷新成功", "refreshError": "工具刷新失败", "toolParameters": "参数" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "动态思考强度", + "description": "启用 set_thinking_effort 工具,让模型按步骤自行决定思考强度。对话中的手动调整随时可用。 (实验性功能)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index d1f9258dcf..a057fab671 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -1002,6 +1002,10 @@ "refreshSuccess": "工具重新整理成功", "refreshError": "工具重新整理失敗", "toolParameters": "參數" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "動態思考強度", + "description": "啟用 set_thinking_effort 工具,讓模型自行決定每一步的思考強度。對話中的手動調整隨時可用。(實驗性)" } }, "promptCaching": { From 82358bdfcde3fe5c374eb0c219c35386c1bda339 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Fri, 4 Sep 2026 14:46:25 +0800 Subject: [PATCH 2/8] feat(api): per-request thinking effort override and adaptive effort envelope (DTE series 2/5) --- src/api/index.ts | 11 +++- .../dte-effective-reasoning-effort.spec.ts | 58 +++++++++++++++++++ src/api/transform/reasoning.ts | 45 ++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 src/api/transform/__tests__/dte-effective-reasoning-effort.spec.ts diff --git a/src/api/index.ts b/src/api/index.ts index f45412e32c..ba1f4d7e0a 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -7,6 +7,7 @@ import { retiredProviderIdentifiers, type ProviderSettings, type ModelInfo, + type ReasoningEffortExtended, } from "@roo-code/types" import { getRouterRemovalMessage } from "../core/config/routerRemoval" @@ -115,6 +116,14 @@ export interface ApiHandlerCreateMessageMetadata { * when the user clicks stop, preventing wasted API tokens/compute on the provider side. */ abortSignal?: AbortSignal + /** + * Per-request thinking effort override (DTE series 2/5). + * When defined, takes precedence over the settings-derived `reasoningEffort` + * wherever the effective effort is resolved (see `resolveEffectiveReasoningEffort`). + * Task-scoped and transient: it applies to this request only (the next request + * after being set — no mid-stream effect) and is never persisted to settings. + */ + reasoningEffort?: ReasoningEffortExtended } export interface ApiHandler { @@ -236,7 +245,7 @@ export function buildApiHandler(configuration: ProviderSettings): ApiHandler { case providerIdentifiers.poe: return new PoeHandler(options) case providerIdentifiers.geminiCli: - // Intentionally falls through to the Anthropic handler pending a dedicated Gemini CLI handler implementation. + // Intentionally falls through to the Anthropic handler pending a dedicated Gemini CLI handler implementation. default: return new AnthropicHandler(options) } diff --git a/src/api/transform/__tests__/dte-effective-reasoning-effort.spec.ts b/src/api/transform/__tests__/dte-effective-reasoning-effort.spec.ts new file mode 100644 index 0000000000..f126cae97c --- /dev/null +++ b/src/api/transform/__tests__/dte-effective-reasoning-effort.spec.ts @@ -0,0 +1,58 @@ +// npx vitest run src/api/transform/__tests__/dte-effective-reasoning-effort.spec.ts + +import { ADAPTIVE_OUTPUT_CONFIG_EFFORTS, resolveEffectiveReasoningEffort } from "../reasoning" + +describe("DTE series 2/5 — resolveEffectiveReasoningEffort", () => { + const settingsEffort = "high" + const modelDefault = "medium" + + it("returns the per-request override when present (strongest precedence)", () => { + expect( + resolveEffectiveReasoningEffort({ + override: "xhigh", + settingsReasoningEffort: settingsEffort, + modelDefaultEffort: modelDefault, + }), + ).toBe("xhigh") + }) + + it("lets the override win even when it is out-of-range for the adaptive envelope", () => { + // "minimal" is a valid override value but outside the adaptive envelope set; + // resolution still returns it — envelope gating is the caller's concern. + expect( + resolveEffectiveReasoningEffort({ + override: "minimal", + settingsReasoningEffort: settingsEffort, + modelDefaultEffort: modelDefault, + }), + ).toBe("minimal") + }) + + it("falls back to the settings value when no override is present", () => { + expect( + resolveEffectiveReasoningEffort({ settingsReasoningEffort: "low", modelDefaultEffort: modelDefault }), + ).toBe("low") + }) + + it("preserves the settings 'disable' sentinel when no override is present", () => { + expect( + resolveEffectiveReasoningEffort({ settingsReasoningEffort: "disable", modelDefaultEffort: modelDefault }), + ).toBe("disable") + }) + + it("an explicit override wins over a settings 'disable' sentinel", () => { + expect(resolveEffectiveReasoningEffort({ override: "low", settingsReasoningEffort: "disable" })).toBe("low") + }) + + it("falls back to the model default when neither override nor settings is set", () => { + expect(resolveEffectiveReasoningEffort({ modelDefaultEffort: "low" })).toBe("low") + }) + + it("returns undefined when nothing is set", () => { + expect(resolveEffectiveReasoningEffort({})).toBeUndefined() + }) + + it("exposes exactly the in-range adaptive envelope efforts", () => { + expect([...ADAPTIVE_OUTPUT_CONFIG_EFFORTS]).toEqual(["low", "medium", "high", "xhigh", "max"]) + }) +}) diff --git a/src/api/transform/reasoning.ts b/src/api/transform/reasoning.ts index c51111125a..14bdaba889 100644 --- a/src/api/transform/reasoning.ts +++ b/src/api/transform/reasoning.ts @@ -22,6 +22,51 @@ export type AnthropicProviderReasoningParams = AnthropicReasoningParams | { type export type OpenAiReasoningParams = { reasoning_effort: OpenAI.Chat.ChatCompletionCreateParams["reasoning_effort"] } +/** + * DTE series 2/5 — effort levels accepted by the Claude 4.7+ adaptive-thinking + * `output_config.effort` envelope. Efforts outside this set (e.g. "none", + * "minimal", "disable") omit the envelope so the API applies its own default. + */ +export const ADAPTIVE_OUTPUT_CONFIG_EFFORTS: readonly ReasoningEffortExtended[] = [ + "low", + "medium", + "high", + "xhigh", + "max", +] + +/** + * DTE series 2/5 — resolves the effective thinking effort for a single request. + * + * Resolution order (strongest first): + * 1. `override` — the per-request task-local effort + * (`ApiHandlerCreateMessageMetadata.reasoningEffort`), + * 2. `settingsReasoningEffort` — the settings-derived value, + * 3. `modelDefaultEffort` — the model's default effort. + * + * This is the single shared resolution point for the per-request override: + * providers that resolve the effective effort through it inherit the override + * without duplicating precedence logic. The override is transient (next request + * only) and never persisted to settings. + */ +export const resolveEffectiveReasoningEffort = ({ + override, + settingsReasoningEffort, + modelDefaultEffort, +}: { + override?: ReasoningEffortExtended + settingsReasoningEffort?: ReasoningEffortExtended | "disable" + modelDefaultEffort?: ReasoningEffortExtended +}): ReasoningEffortExtended | "disable" | undefined => { + if (override !== undefined) { + return override + } + if (settingsReasoningEffort !== undefined) { + return settingsReasoningEffort + } + return modelDefaultEffort +} + // Valid Gemini thinking levels for effort-based reasoning const GEMINI_THINKING_LEVELS = ["minimal", "low", "medium", "high"] as const From 4075c8a7513b7cc05d7006eca0d18a47083e4336 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Fri, 4 Sep 2026 15:05:18 +0800 Subject: [PATCH 3/8] feat(task): task-local runtime thinking effort state with per-request override (DTE series 2/5) - Task: setRuntimeThinkingEffort/getRuntimeThinkingEffort with in-memory apiConfiguration merge/restore; per-request metadata at all four createMessage sites; profile-switch re-capture in updateApiConfiguration - Transient state only: never persisted to settings or history - Tests: 8 focused vitest cases (state machine, profile switch, metadata fragment, non-persistence) Part of #35 (DTE-v2 ship plan, unit 3/5). --- src/core/task/Task.ts | 97 +++++- .../Task.runtime-thinking-effort.test.ts | 301 ++++++++++++++++++ 2 files changed, 397 insertions(+), 1 deletion(-) create mode 100644 src/core/task/__tests__/Task.runtime-thinking-effort.test.ts diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index 37281a9010..d5e4a08b79 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -22,6 +22,7 @@ import { type TaskMetadata, type TaskEvents, type ProviderSettings, + type ReasoningEffortExtended, type TokenUsage, type ToolUsage, type ToolName, @@ -318,6 +319,13 @@ export class Task extends EventEmitter implements TaskLike { // API apiConfiguration: ProviderSettings api: ApiHandler + // DTE series 2/5: task-local thinking effort override. Transient per-task state — + // never persisted to settings; cleared on dispose (see dispose()). + private runtimeThinkingEffort?: ReasoningEffortExtended + private runtimeThinkingEffortSource?: string + // Settings-derived effort captured when the override activates, so clearing + // (undefined) restores it in the in-memory apiConfiguration copy. + private preOverrideReasoningEffort?: ProviderSettings["reasoningEffort"] private rateLimitClock: RateLimitClock private autoApprovalHandler: AutoApprovalHandler @@ -1630,14 +1638,89 @@ export class Task extends EventEmitter implements TaskLike { * Updates the API configuration and rebuilds the API handler. * There is no tool-protocol switching or tool parser swapping. * + * DTE series 2/5: when a task-local thinking effort override is active + * (`setRuntimeThinkingEffort`), the incoming configuration's `reasoningEffort` + * becomes the new restore value and the override is re-applied on top of the + * fresh in-memory copy — clearing the override later restores the NEW profile's + * value, not a stale one. + * * @param newApiConfiguration - The new API configuration to use */ public updateApiConfiguration(newApiConfiguration: ProviderSettings): void { // Update the configuration and rebuild the API handler - this.apiConfiguration = newApiConfiguration + if (this.runtimeThinkingEffort !== undefined) { + // DTE series 2/5: a task-local override is active, so re-capture the + // incoming profile's value as the restore value and re-apply the + // override on top of the new in-memory copy — clearing the override + // must restore the NEW profile's value, not the stale one. + this.preOverrideReasoningEffort = newApiConfiguration.reasoningEffort + this.apiConfiguration = { ...newApiConfiguration, reasoningEffort: this.runtimeThinkingEffort } + } else { + this.apiConfiguration = newApiConfiguration + } + this.api = buildApiHandler(this.apiConfiguration) + } + + /** + * DTE series 2/5: sets — or clears with `undefined` — the task-local thinking + * effort override. + * + * Resolution order for the affected requests (strongest first): this + * task-local override → settings `reasoningEffort` → model default. The + * override applies to the NEXT API request only (no mid-stream effect): it is + * passed per request as `metadata.reasoningEffort` and, while active, is + * merged into the in-memory `apiConfiguration` copy (profile-switch / + * `updateApiConfiguration` precedent) so the rebuilt handler reflects it too. + * `undefined` clears the override and restores the settings-derived value in + * the copy. Nothing is ever written to persisted settings. + * + * @param effort - The task-local effort, or `undefined` to clear. + * @param source - Optional provenance label (UI wiring lands in a later PR). + */ + public setRuntimeThinkingEffort(effort: ReasoningEffortExtended | undefined, source?: string): void { + const wasActive = this.runtimeThinkingEffort !== undefined + this.runtimeThinkingEffort = effort + this.runtimeThinkingEffortSource = effort === undefined ? undefined : source + + if (effort !== undefined) { + // Capture the settings-derived value once so clearing can restore it. + if (!wasActive) { + this.preOverrideReasoningEffort = this.apiConfiguration.reasoningEffort + } + // Merge into the in-memory copy (never the persisted settings object). + this.apiConfiguration = { ...this.apiConfiguration, reasoningEffort: effort } + } else if (wasActive) { + // Restore the settings-derived value captured when the override activated. + this.apiConfiguration = { ...this.apiConfiguration, reasoningEffort: this.preOverrideReasoningEffort } + this.preOverrideReasoningEffort = undefined + } else { + // Already inactive: nothing to clear. + return + } + + // Rebuild the handler from the updated copy so the next request uses it. this.api = buildApiHandler(this.apiConfiguration) } + /** + * DTE series 2/5: reads the current task-local thinking effort override. + */ + public getRuntimeThinkingEffort(): { effort?: ReasoningEffortExtended; source?: string } { + return { + effort: this.runtimeThinkingEffort, + source: this.runtimeThinkingEffortSource, + } + } + + /** + * DTE series 2/5: metadata fragment carrying the active task-local effort + * override on a single request. Empty when no override is active, so the + * existing settings resolution applies unchanged. + */ + private getRuntimeThinkingEffortMetadata(): Pick { + return this.runtimeThinkingEffort !== undefined ? { reasoningEffort: this.runtimeThinkingEffort } : {} + } + public async submitUserMessage( text: string, images?: string[], @@ -1754,6 +1837,8 @@ export class Task extends EventEmitter implements TaskLike { parallelToolCalls: true, } : {}), + // DTE series 2/5: carry the active task-local effort override. + ...this.getRuntimeThinkingEffortMetadata(), } // Generate environment details to include in the condensed summary const environmentDetails = await getEnvironmentDetails(this, true) @@ -2514,6 +2599,10 @@ export class Task extends EventEmitter implements TaskLike { } } + /** + * Centralized task teardown: releases task resources and resets transient + * task-local state. + */ public dispose(): void { console.log(`[Task#dispose] disposing task ${this.taskId}.${this.instanceId}`) @@ -4177,6 +4266,8 @@ export class Task extends EventEmitter implements TaskLike { parallelToolCalls: true, } : {}), + // DTE series 2/5: carry the active task-local effort override. + ...this.getRuntimeThinkingEffortMetadata(), } try { @@ -4403,6 +4494,8 @@ export class Task extends EventEmitter implements TaskLike { parallelToolCalls: true, } : {}), + // DTE series 2/5: carry the active task-local effort override. + ...this.getRuntimeThinkingEffortMetadata(), } // Only generate environment details when context management will actually run. @@ -4568,6 +4661,8 @@ export class Task extends EventEmitter implements TaskLike { taskId: this.taskId, suppressPreviousResponseId: this.skipPrevResponseIdOnce, abortSignal, + // DTE series 2/5: carry the active task-local effort override for this request. + ...this.getRuntimeThinkingEffortMetadata(), // Include tools whenever they are present. ...(shouldIncludeTools ? { diff --git a/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts b/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts new file mode 100644 index 0000000000..0800fadbd9 --- /dev/null +++ b/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts @@ -0,0 +1,301 @@ +// npx vitest run src/core/task/__tests__/Task.runtime-thinking-effort.test.ts +// +// DTE series 2/5 — task-local thinking effort state on Task: +// setRuntimeThinkingEffort / getRuntimeThinkingEffort, the in-memory +// apiConfiguration merge + restore. + +import { ProviderSettings, type ReasoningEffortExtended } from "@roo-code/types" +import { providerIdentifiers } from "@roo-code/types/provider-identifiers" + +import { Task } from "../Task" +import { ClineProvider } from "../../webview/ClineProvider" +import { buildApiHandler } from "../../../api" + +// Mock dependencies (same lightweight set as Task.throttle.test.ts) +vi.mock("../../webview/ClineProvider") +vi.mock("../../../integrations/terminal/TerminalRegistry", () => ({ + TerminalRegistry: { + releaseTerminalsForTask: vi.fn(), + }, +})) +vi.mock("../../ignore/RooIgnoreController") +vi.mock("../../protect/RooProtectedController") +vi.mock("../../context-tracking/FileContextTracker") +vi.mock("../../../integrations/editor/DiffViewProvider") +vi.mock("../../tools/ToolRepetitionDetector") +vi.mock("../../../api", () => ({ + // Returns a fresh handler object per call so tests can assert on the exact + // configuration each rebuild received (via vi.mocked(buildApiHandler).mock.calls). + buildApiHandler: vi.fn((configuration: { apiModelId?: string }) => ({ + getModel: () => ({ info: {}, id: configuration.apiModelId ?? "test-model" }), + })), +})) + +// Mock TelemetryService +vi.mock("@roo-code/telemetry", () => ({ + TelemetryService: { + instance: { + captureTaskCreated: vi.fn(), + captureTaskRestarted: vi.fn(), + }, + }, +})) + +// Mock task persistence to avoid disk writes +vi.mock("../../task-persistence", async (importOriginal) => ({ + ...(await importOriginal()), + readApiMessages: vi.fn().mockResolvedValue([]), + saveApiMessages: vi.fn().mockResolvedValue(undefined), + readTaskMessages: vi.fn().mockResolvedValue([]), + saveTaskMessages: vi.fn().mockResolvedValue(undefined), + taskMetadata: vi.fn().mockResolvedValue({ + historyItem: { + id: "test-task-id", + number: 1, + task: "Test task", + ts: Date.now(), + totalCost: 0.01, + tokensIn: 100, + tokensOut: 50, + }, + tokenUsage: { + totalTokensIn: 100, + totalTokensOut: 50, + totalCost: 0.01, + contextTokens: 150, + totalCacheWrites: 0, + totalCacheReads: 0, + }, + }), +})) + +// Typed access to the intentionally-private DTE state, mirroring the +// getTaskTestAccess pattern in Task.spec.ts (single double assertion, documented). +type RuntimeThinkingEffortAccess = { + runtimeThinkingEffort?: ReasoningEffortExtended + runtimeThinkingEffortSource?: string + preOverrideReasoningEffort?: ProviderSettings["reasoningEffort"] + getRuntimeThinkingEffortMetadata: () => { reasoningEffort?: ReasoningEffortExtended } +} + +function getPrivateAccess(task: Task): RuntimeThinkingEffortAccess { + return task as unknown as RuntimeThinkingEffortAccess +} + +const SETTINGS_EFFORT: ReasoningEffortExtended = "low" + +describe("Task runtime thinking effort (DTE series 2/5)", () => { + let mockProvider: Record + let mockApiConfiguration: ProviderSettings + let task: Task + + beforeEach(() => { + vi.clearAllMocks() + vi.useFakeTimers() + + mockProvider = { + context: { + globalStorageUri: { fsPath: "/test/path" }, + }, + getState: vi.fn().mockResolvedValue({ mode: "code" }), + log: vi.fn(), + postStateToWebview: vi.fn().mockResolvedValue(undefined), + postStateToWebviewWithoutTaskHistory: vi.fn().mockResolvedValue(undefined), + postStateToWebviewThrottled: vi.fn().mockResolvedValue(undefined), + flushPostStateToWebviewThrottled: vi.fn().mockResolvedValue(undefined), + updateTaskHistory: vi.fn().mockResolvedValue(undefined), + } + + mockApiConfiguration = { + apiProvider: providerIdentifiers.anthropic, + apiModelId: "claude-opus-4-7", + apiKey: "test-key", + reasoningEffort: SETTINGS_EFFORT, + } as ProviderSettings + + // mockProvider is a minimal structural double (ClineProvider is auto-mocked + // by the vi.mock above); the task only touches the members supplied here. + task = new Task({ + provider: mockProvider as unknown as ClineProvider, + apiConfiguration: mockApiConfiguration, + startTask: false, + }) + }) + + afterEach(() => { + vi.useRealTimers() + if (task && !task.abort) { + task.dispose() + } + }) + + describe("setRuntimeThinkingEffort", () => { + it("stores effort + source, merges into the in-memory apiConfiguration, and rebuilds the handler", () => { + task.setRuntimeThinkingEffort("xhigh", "test-source") + + expect(task.getRuntimeThinkingEffort()).toEqual({ effort: "xhigh", source: "test-source" }) + expect(getPrivateAccess(task).runtimeThinkingEffort).toBe("xhigh") + expect(getPrivateAccess(task).runtimeThinkingEffortSource).toBe("test-source") + + // The in-memory copy carries the override... + expect(task.apiConfiguration).toEqual( + expect.objectContaining({ + apiProvider: providerIdentifiers.anthropic, + apiKey: "test-key", + reasoningEffort: "xhigh", + }), + ) + // ...without mutating the settings object the provider handed in. + expect(mockApiConfiguration).toEqual( + expect.objectContaining({ + reasoningEffort: SETTINGS_EFFORT, + }), + ) + // The handler is rebuilt from the merged copy (last build call). + const lastCall = vi.mocked(buildApiHandler).mock.calls.at(-1) + expect(lastCall?.[0]).toEqual(expect.objectContaining({ reasoningEffort: "xhigh" })) + // The merged copy is a fresh object, not the settings object. + expect(lastCall?.[0]).not.toBe(mockApiConfiguration) + }) + + it("does not re-capture the settings value when re-set while active", () => { + task.setRuntimeThinkingEffort("high", "first") + task.setRuntimeThinkingEffort("medium", "second") + + expect(task.getRuntimeThinkingEffort()).toEqual({ effort: "medium", source: "second" }) + // The settings-derived value captured at first activation is preserved. + expect(getPrivateAccess(task).preOverrideReasoningEffort).toBe(SETTINGS_EFFORT) + + // Clearing restores the original settings value, not the intermediate one. + task.setRuntimeThinkingEffort(undefined) + expect(task.apiConfiguration.reasoningEffort).toBe(SETTINGS_EFFORT) + }) + + it("restores the settings-derived effort when cleared with undefined", () => { + task.setRuntimeThinkingEffort("max") + expect(task.apiConfiguration.reasoningEffort).toBe("max") + + // A label passed on the clearing call must not survive into source. + task.setRuntimeThinkingEffort(undefined, "stale-source") + + expect(task.getRuntimeThinkingEffort()).toEqual({ effort: undefined, source: undefined }) + expect(task.apiConfiguration.reasoningEffort).toBe(SETTINGS_EFFORT) + // The rest of the configuration is preserved through the restore. + expect(task.apiConfiguration).toEqual( + expect.objectContaining({ + apiProvider: providerIdentifiers.anthropic, + apiModelId: "claude-opus-4-7", + apiKey: "test-key", + }), + ) + // The handler is rebuilt from the restored copy. + const lastCall = vi.mocked(buildApiHandler).mock.calls.at(-1) + expect(lastCall?.[0]).toEqual(expect.objectContaining({ reasoningEffort: SETTINGS_EFFORT })) + }) + + it("is a no-op when cleared while inactive (no handler rebuild)", () => { + const callsBefore = vi.mocked(buildApiHandler).mock.calls.length + + task.setRuntimeThinkingEffort(undefined) + + expect(vi.mocked(buildApiHandler).mock.calls.length).toBe(callsBefore) + expect(task.getRuntimeThinkingEffort()).toEqual({ effort: undefined, source: undefined }) + expect(task.apiConfiguration).toBe(mockApiConfiguration) + }) + + it("never writes to the provider or persisted settings", () => { + task.setRuntimeThinkingEffort("xhigh") + task.setRuntimeThinkingEffort(undefined) + + // Nothing is posted to the webview and the handed-in settings object is intact. + expect(mockProvider.postStateToWebview).not.toHaveBeenCalled() + expect(mockApiConfiguration).toEqual( + expect.objectContaining({ + apiProvider: providerIdentifiers.anthropic, + apiModelId: "claude-opus-4-7", + apiKey: "test-key", + reasoningEffort: SETTINGS_EFFORT, + }), + ) + }) + }) + + describe("updateApiConfiguration while an override is active", () => { + it("re-captures the incoming profile's effort as the restore value and keeps the override applied", () => { + task.setRuntimeThinkingEffort("xhigh", "test-source") + + // A profile switch lands a different settings-derived effort while the override is active. + const newConfig = { + apiProvider: providerIdentifiers.anthropic, + apiModelId: "claude-opus-4-8", + apiKey: "test-key-2", + reasoningEffort: "medium", + } as ProviderSettings + task.updateApiConfiguration(newConfig) + + // The override still wins in the in-memory copy... + expect(task.apiConfiguration).toEqual( + expect.objectContaining({ + apiModelId: "claude-opus-4-8", + apiKey: "test-key-2", + reasoningEffort: "xhigh", + }), + ) + // ...the override remains active... + expect(task.getRuntimeThinkingEffort()).toEqual({ effort: "xhigh", source: "test-source" }) + // ...and the NEW profile's value is now the restore target. + expect(getPrivateAccess(task).preOverrideReasoningEffort).toBe("medium") + // The handler was rebuilt from the merged new copy. + const lastCall = vi.mocked(buildApiHandler).mock.calls.at(-1) + expect(lastCall?.[0]).toEqual( + expect.objectContaining({ apiModelId: "claude-opus-4-8", reasoningEffort: "xhigh" }), + ) + expect(lastCall?.[0]).not.toBe(newConfig) + + // Clearing restores the NEW profile's effort, not the stale original one. + task.setRuntimeThinkingEffort(undefined) + expect(task.apiConfiguration.reasoningEffort).toBe("medium") + expect(task.apiConfiguration).toEqual( + expect.objectContaining({ + apiModelId: "claude-opus-4-8", + apiKey: "test-key-2", + }), + ) + const lastCallAfterClear = vi.mocked(buildApiHandler).mock.calls.at(-1) + expect(lastCallAfterClear?.[0]).toEqual(expect.objectContaining({ reasoningEffort: "medium" })) + }) + + it("replaces the configuration as usual while inactive", () => { + const newConfig = { + apiProvider: providerIdentifiers.anthropic, + apiModelId: "claude-opus-4-8", + apiKey: "test-key-2", + reasoningEffort: "medium", + } as ProviderSettings + + task.updateApiConfiguration(newConfig) + + expect(task.apiConfiguration).toBe(newConfig) + expect(task.apiConfiguration.reasoningEffort).toBe("medium") + const lastCall = vi.mocked(buildApiHandler).mock.calls.at(-1) + expect(lastCall?.[0]).toBe(newConfig) + }) + }) + + describe("request metadata fragment", () => { + it("is empty while inactive and carries the override while active", () => { + // Key absence, not toEqual({}): toEqual ignores keys whose value is undefined, + // so only an absence assertion kills the always-consequent metadata mutant. + expect(getPrivateAccess(task).getRuntimeThinkingEffortMetadata()).not.toHaveProperty("reasoningEffort") + + task.setRuntimeThinkingEffort("high") + expect(getPrivateAccess(task).getRuntimeThinkingEffortMetadata()).toEqual({ reasoningEffort: "high" }) + + task.setRuntimeThinkingEffort("low") + expect(getPrivateAccess(task).getRuntimeThinkingEffortMetadata()).toEqual({ reasoningEffort: "low" }) + + task.setRuntimeThinkingEffort(undefined) + expect(getPrivateAccess(task).getRuntimeThinkingEffortMetadata()).not.toHaveProperty("reasoningEffort") + }) + }) +}) From 710bf6134a6698a26715288151baaabb5a6732e3 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Fri, 4 Sep 2026 10:21:22 +0800 Subject: [PATCH 4/8] feat(settings): dynamic thinking effort experimental toggle (DTE-1) --- .../types/src/__tests__/experiment.test.ts | 19 +++++ packages/types/src/experiment.ts | 2 + scripts/stryker-diff.mjs | 10 ++- scripts/stryker-diff.test.mjs | 7 +- .../webview/__tests__/ClineProvider.spec.ts | 32 ++++++++ .../__tests__/webviewMessageHandler.spec.ts | 55 +++++++++++++ src/shared/__tests__/experiments.spec.ts | 29 ++++++- src/shared/experiments.ts | 2 + webview-ui/playwright/gallery/stories.tsx | 5 ++ .../__tests__/ExperimentalSettings.spec.tsx | 76 +++++++++++++++++- .../ExperimentalSettings.visual.fixture.tsx | 28 +++++++ .../__tests__/ExperimentalSettings.visual.tsx | 12 +++ .../experimental-settings-dark.png | Bin 0 -> 40449 bytes ...erimental-settings-high-contrast-light.png | Bin 0 -> 41457 bytes .../experimental-settings-high-contrast.png | Bin 0 -> 41675 bytes .../experimental-settings-light.png | Bin 0 -> 41449 bytes webview-ui/src/i18n/locales/ca/settings.json | 4 + webview-ui/src/i18n/locales/de/settings.json | 4 + webview-ui/src/i18n/locales/en/settings.json | 4 + webview-ui/src/i18n/locales/es/settings.json | 4 + webview-ui/src/i18n/locales/fr/settings.json | 4 + webview-ui/src/i18n/locales/hi/settings.json | 4 + webview-ui/src/i18n/locales/id/settings.json | 4 + webview-ui/src/i18n/locales/it/settings.json | 4 + webview-ui/src/i18n/locales/ja/settings.json | 4 + webview-ui/src/i18n/locales/ko/settings.json | 4 + webview-ui/src/i18n/locales/nl/settings.json | 4 + webview-ui/src/i18n/locales/pl/settings.json | 4 + .../src/i18n/locales/pt-BR/settings.json | 4 + webview-ui/src/i18n/locales/ru/settings.json | 4 + webview-ui/src/i18n/locales/tr/settings.json | 4 + webview-ui/src/i18n/locales/vi/settings.json | 4 + .../src/i18n/locales/zh-CN/settings.json | 4 + .../src/i18n/locales/zh-TW/settings.json | 4 + 34 files changed, 343 insertions(+), 6 deletions(-) create mode 100644 packages/types/src/__tests__/experiment.test.ts create mode 100644 webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx create mode 100644 webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-dark.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast-light.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-light.png diff --git a/packages/types/src/__tests__/experiment.test.ts b/packages/types/src/__tests__/experiment.test.ts new file mode 100644 index 0000000000..0ef4ed2e02 --- /dev/null +++ b/packages/types/src/__tests__/experiment.test.ts @@ -0,0 +1,19 @@ +import { experimentIds, experimentIdsSchema, experimentsSchema } from "../experiment.js" + +describe("dynamicThinkingEffort experiment", () => { + it("is part of the experiment id enum", () => { + expect(experimentIds).toContain("dynamicThinkingEffort") + expect(experimentIdsSchema.safeParse("dynamicThinkingEffort").success).toBe(true) + }) + + it("parses enabled and disabled states", () => { + expect(experimentsSchema.parse({ dynamicThinkingEffort: true })).toEqual({ dynamicThinkingEffort: true }) + expect(experimentsSchema.parse({ dynamicThinkingEffort: false })).toEqual({ dynamicThinkingEffort: false }) + expect(experimentsSchema.parse({})).toEqual({}) + }) + + it("rejects non-boolean values", () => { + expect(experimentsSchema.safeParse({ dynamicThinkingEffort: "yes" }).success).toBe(false) + expect(experimentIdsSchema.safeParse("dynamic-thinking-effort").success).toBe(false) + }) +}) diff --git a/packages/types/src/experiment.ts b/packages/types/src/experiment.ts index 5d511859b1..f4b3a1c0a8 100644 --- a/packages/types/src/experiment.ts +++ b/packages/types/src/experiment.ts @@ -12,6 +12,7 @@ export const experimentIds = [ "runSlashCommand", "customTools", "parallelToolExecution", + "dynamicThinkingEffort", ] as const export const experimentIdsSchema = z.enum(experimentIds) @@ -28,6 +29,7 @@ export const experimentsSchema = z.object({ runSlashCommand: z.boolean().optional(), customTools: z.boolean().optional(), parallelToolExecution: z.boolean().optional(), + dynamicThinkingEffort: z.boolean().optional(), }) export type Experiments = z.infer diff --git a/scripts/stryker-diff.mjs b/scripts/stryker-diff.mjs index c0e8a6cd1a..e46afb22ab 100644 --- a/scripts/stryker-diff.mjs +++ b/scripts/stryker-diff.mjs @@ -51,8 +51,14 @@ export const PACKAGE_CONFIGS = [ root: "src", sourceRoot: "src/", vitestConfig: "vitest.config.ts", - vitestRelated: false, - discoverRelatedTests: true, + // Use plugin-side related-test discovery: with an explicit STRYKER_TEST_FILES + // list, stryker-js 10.0.0 plans static mutants with runtime activation + // (stryker-mutator/stryker-js#6144, #6209), which the vitest plugin can only + // apply after top-level code has run, producing false Survived results. + // Revert to vitestRelated: false / discoverRelatedTests: true once the + // upstream planner fix lands. + vitestRelated: true, + discoverRelatedTests: false, excludedPaths: ["src/esbuild.mjs", "src/eslint.config.mjs", "src/utils/vitest-verbosity.ts"], }, ] diff --git a/scripts/stryker-diff.test.mjs b/scripts/stryker-diff.test.mjs index 0f39dc507f..b86f5f3e96 100644 --- a/scripts/stryker-diff.test.mjs +++ b/scripts/stryker-diff.test.mjs @@ -129,8 +129,11 @@ describe("buildManifest", () => { assert.equal(webview.runRoot, ".") assert.equal(webview.discoverRelatedTests, true) assert.equal(webview.vitestRelated, false) - assert.equal(extension.discoverRelatedTests, true) - assert.equal(extension.vitestRelated, false) + // The extension entry uses plugin-side related discovery while stryker-js 10.0.0 + // plans static mutants with runtime activation when given explicit test files + // (stryker-mutator/stryker-js#6144, #6209); see the entry comment in stryker-diff.mjs. + assert.equal(extension.discoverRelatedTests, false) + assert.equal(extension.vitestRelated, true) }) it("returns no packages for tests, barrels, unsupported packages, and type-only changes", () => { diff --git a/src/core/webview/__tests__/ClineProvider.spec.ts b/src/core/webview/__tests__/ClineProvider.spec.ts index ad6ea143a8..9249140353 100644 --- a/src/core/webview/__tests__/ClineProvider.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.spec.ts @@ -1439,6 +1439,38 @@ describe("ClineProvider", () => { expect(state.destructiveCommandGuardEnabled).toBe(false) }) + test("getStateToPostToWebview returns the saved dynamicThinkingEffort experiment when enabled", async () => { + await provider.resolveWebviewView(mockWebviewView) + await provider.contextProxy.setValue("experiments", { + ...experimentDefault, + dynamicThinkingEffort: true, + }) + + const state = await provider.getStateToPostToWebview() + + expect(state.experiments).toEqual({ ...experimentDefault, dynamicThinkingEffort: true }) + }) + + test("getStateToPostToWebview returns the saved dynamicThinkingEffort experiment when explicitly disabled", async () => { + await provider.resolveWebviewView(mockWebviewView) + await provider.contextProxy.setValue("experiments", { + ...experimentDefault, + dynamicThinkingEffort: false, + }) + + const state = await provider.getStateToPostToWebview() + + expect(state.experiments).toEqual({ ...experimentDefault, dynamicThinkingEffort: false }) + }) + + test("getStateToPostToWebview defaults dynamicThinkingEffort to false when experiments are unset", async () => { + await provider.resolveWebviewView(mockWebviewView) + + const state = await provider.getStateToPostToWebview() + + expect(state.experiments).toEqual({ ...experimentDefault, dynamicThinkingEffort: false }) + }) + test("language is set to VSCode language", async () => { // Mock VSCode language as Spanish ;(vscode.env as any).language = "pt-BR" diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 4c2a301965..bbbb6852e7 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -73,6 +73,7 @@ import type { ModelRecord } from "@roo-code/types" import { webviewMessageHandler } from "../webviewMessageHandler" import type { ClineProvider } from "../ClineProvider" +import { experimentDefault } from "../../../shared/experiments" import { flushModels, getModels } from "../../../api/providers/fetchers/modelCache" import { getLMStudioModels } from "../../../api/providers/fetchers/lmstudio" import { getCommands } from "../../../services/command/commands" @@ -2273,3 +2274,57 @@ describe("webviewMessageHandler - telemetrySetting", () => { expect(TelemetryService.instance.updateTelemetryState).not.toHaveBeenCalled() }) }) + +describe("webviewMessageHandler - experiments", () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it("persists dynamicThinkingEffort true merged with the saved experiments", async () => { + vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => + key === "experiments" ? { preventFocusDisruption: true } : undefined, + ) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { experiments: { dynamicThinkingEffort: true } }, + }) + + expect(mockClineProvider.contextProxy.setValue).toHaveBeenCalledWith("experiments", { + preventFocusDisruption: true, + dynamicThinkingEffort: true, + }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) + }) + + it("persists dynamicThinkingEffort false over a previously enabled value", async () => { + vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => + key === "experiments" ? { dynamicThinkingEffort: true } : undefined, + ) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { experiments: { dynamicThinkingEffort: false } }, + }) + + expect(mockClineProvider.contextProxy.setValue).toHaveBeenCalledWith("experiments", { + dynamicThinkingEffort: false, + }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) + }) + + it("persists the experiment defaults when no experiments are saved yet", async () => { + vi.mocked(mockClineProvider.contextProxy.getValue).mockReturnValue(undefined) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { experiments: {} }, + }) + + expect(mockClineProvider.contextProxy.setValue).toHaveBeenCalledWith("experiments", { + ...experimentDefault, + dynamicThinkingEffort: false, + }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) + }) +}) diff --git a/src/shared/__tests__/experiments.spec.ts b/src/shared/__tests__/experiments.spec.ts index f2261a5c09..b6e8993df4 100644 --- a/src/shared/__tests__/experiments.spec.ts +++ b/src/shared/__tests__/experiments.spec.ts @@ -2,7 +2,7 @@ import type { ExperimentId } from "@roo-code/types" -import { EXPERIMENT_IDS, experimentConfigsMap, experiments as Experiments } from "../experiments" +import { EXPERIMENT_IDS, experimentConfigsMap, experimentDefault, experiments as Experiments } from "../experiments" describe("experiments", () => { describe("PREVENT_FOCUS_DISRUPTION", () => { @@ -22,6 +22,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(false) }) @@ -33,6 +34,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(true) }) @@ -44,6 +46,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(false) }) @@ -66,4 +69,28 @@ describe("experiments", () => { expect(Experiments.isEnabled({ parallelToolExecution: true }, "parallelToolExecution")).toBe(true) }) }) + + describe("DYNAMIC_THINKING_EFFORT", () => { + it("is configured correctly", () => { + expect(EXPERIMENT_IDS.DYNAMIC_THINKING_EFFORT).toBe("dynamicThinkingEffort") + expect(experimentConfigsMap.DYNAMIC_THINKING_EFFORT).toMatchObject({ + enabled: false, + }) + // Visible in the Settings panel (showInSettings defaults to true). + expect(experimentConfigsMap.DYNAMIC_THINKING_EFFORT.showInSettings).toBeUndefined() + }) + + it("is disabled by default", () => { + expect(experimentDefault.dynamicThinkingEffort).toBe(false) + expect(Experiments.isEnabled({}, "dynamicThinkingEffort")).toBe(false) + }) + + it("returns true when enabled", () => { + expect(Experiments.isEnabled({ dynamicThinkingEffort: true }, "dynamicThinkingEffort")).toBe(true) + }) + + it("returns false when explicitly disabled", () => { + expect(Experiments.isEnabled({ dynamicThinkingEffort: false }, "dynamicThinkingEffort")).toBe(false) + }) + }) }) diff --git a/src/shared/experiments.ts b/src/shared/experiments.ts index ae538b9138..c0d461a454 100644 --- a/src/shared/experiments.ts +++ b/src/shared/experiments.ts @@ -6,6 +6,7 @@ export const EXPERIMENT_IDS = { RUN_SLASH_COMMAND: "runSlashCommand", CUSTOM_TOOLS: "customTools", PARALLEL_TOOL_EXECUTION: "parallelToolExecution", + DYNAMIC_THINKING_EFFORT: "dynamicThinkingEffort", } as const satisfies Record type _AssertExperimentIds = AssertEqual>> @@ -25,6 +26,7 @@ export const experimentConfigsMap: Record = { CUSTOM_TOOLS: { enabled: false }, // TODO: add i18n keys (settings:experimental.PARALLEL_TOOL_EXECUTION.name/.description) in the same PR that sets showInSettings: true PARALLEL_TOOL_EXECUTION: { enabled: false, showInSettings: false }, + DYNAMIC_THINKING_EFFORT: { enabled: false }, } export const experimentDefault = Object.fromEntries( diff --git a/webview-ui/playwright/gallery/stories.tsx b/webview-ui/playwright/gallery/stories.tsx index 52ec5c2ce5..e047f1c32d 100644 --- a/webview-ui/playwright/gallery/stories.tsx +++ b/webview-ui/playwright/gallery/stories.tsx @@ -162,6 +162,11 @@ export const stories: Record = { const { UISettingsStory } = await import("@/components/settings/__tests__/UISettings.visual.fixture") return }, + "experimental-settings": async () => { + const { ExperimentalSettingsStory } = + await import("@/components/settings/__tests__/ExperimentalSettings.visual.fixture") + return + }, "ui-settings-long-locale": async () => { const [{ UISettingsStory }, { default: i18next }] = await Promise.all([ import("@/components/settings/__tests__/UISettings.visual.fixture"), diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx index b31f87dc7e..3feddad1d4 100644 --- a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx @@ -1,4 +1,4 @@ -import { render, screen } from "@testing-library/react" +import { fireEvent, render, screen } from "@testing-library/react" import { experimentDefault } from "@roo/experiments" @@ -32,4 +32,78 @@ describe("ExperimentalSettings", () => { expect(screen.getByText("settings:experimental.CUSTOM_TOOLS.name")).toBeInTheDocument() expect(screen.queryByText("settings:experimental.PARALLEL_TOOL_EXECUTION.name")).not.toBeInTheDocument() }) + + it("renders the dynamic thinking effort toggle", () => { + render() + + expect(screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name")).toBeInTheDocument() + }) + + it("leaves the dynamic thinking effort toggle unchecked when the value is false or omitted", () => { + const getCheckbox = () => { + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + return label?.querySelector("input[type='checkbox']") + } + + // Explicit false + let result = render( + , + ) + expect(getCheckbox()).not.toBeNull() + expect(getCheckbox()).not.toBeChecked() + result.unmount() + + // Omitted (absent from the persisted config) + const omitted: Record = { ...experimentDefault } + delete omitted.dynamicThinkingEffort + result = render() + expect(getCheckbox()).not.toBeNull() + expect(getCheckbox()).not.toBeChecked() + result.unmount() + }) + + it("binds the dynamic thinking effort toggle to setExperimentEnabled", () => { + const setExperimentEnabled = vi.fn() + render( + , + ) + + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + const checkbox = label?.querySelector("input[type='checkbox']") + expect(checkbox).not.toBeNull() + expect(checkbox).toBeChecked() + + fireEvent.click(checkbox!) + + expect(setExperimentEnabled).toHaveBeenCalledTimes(1) + expect(setExperimentEnabled).toHaveBeenCalledWith("dynamicThinkingEffort", false) + }) + + it("toggles the dynamic thinking effort on when clicked from the unchecked state", () => { + const setExperimentEnabled = vi.fn() + render( + , + ) + + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + const checkbox = label?.querySelector("input[type='checkbox']") + expect(checkbox).not.toBeNull() + expect(checkbox).not.toBeChecked() + + fireEvent.click(checkbox!) + + expect(setExperimentEnabled).toHaveBeenCalledTimes(1) + expect(setExperimentEnabled).toHaveBeenCalledWith("dynamicThinkingEffort", true) + }) }) diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx new file mode 100644 index 0000000000..f28038aa6d --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx @@ -0,0 +1,28 @@ +import { useState } from "react" + +import type { Experiments } from "@roo-code/types" + +import { EXPERIMENT_IDS, experimentDefault } from "@roo/experiments" + +import { ExperimentalSettings } from "../ExperimentalSettings" +import { AppProviders } from "../../../../playwright/AppProviders" + +export function ExperimentalSettingsStory() { + const [experiments, setExperiments] = useState({ + ...experimentDefault, + [EXPERIMENT_IDS.DYNAMIC_THINKING_EFFORT]: true, + }) + + return ( + +
+ setExperiments((current) => ({ ...current, [id]: enabled }))} + /> +
+
+ ) +} diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx new file mode 100644 index 0000000000..8a12ebf3ae --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx @@ -0,0 +1,12 @@ +import { expect, test } from "../../../../playwright/coverage-fixture" +import { mountedStory } from "../../../../playwright/mounted-story" +import { applyVisualTheme, visualThemes } from "../../../../playwright/themes" + +for (const theme of visualThemes) { + test(`renders the experimental settings section in the VS Code ${theme.name} theme`, async ({ mount, page }) => { + const component = mountedStory(await mount("experimental-settings")) + await applyVisualTheme(page, theme) + const story = component.getByTestId("experimental-settings-story") + await expect(story).toHaveScreenshot(`experimental-settings-${theme.name}.png`) + }) +} diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b15dc14b1e8258a378645b014cbc615c71c060 GIT binary patch literal 40449 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast-light.png b/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4f1b090fdf1696c843ccce48957334555a0b1488 GIT binary patch literal 41457 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 GAni}se(FU4 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast.png b/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast.png new file mode 100644 index 0000000000000000000000000000000000000000..348dab9629e4350dd494cc087b7cdf1d4b02b2d7 GIT binary patch literal 41675 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 762a1290af..8d7b7ee515 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Eines actualitzades correctament", "refreshError": "Error en actualitzar les eines", "toolParameters": "Paràmetres" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esforç de pensament dinàmic", + "description": "Activa l'eina set_thinking_effort perquè el model decideixi el seu esforç de pensament per pas. El control manual al xat sempre està disponible. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index f56984bc73..cbb94b5cee 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tools erfolgreich aktualisiert", "refreshError": "Fehler beim Aktualisieren der Tools", "toolParameters": "Parameter" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamische Denkintensität", + "description": "Aktiviert das set_thinking_effort-Tool, damit das Modell die Denkintensität pro Schritt selbst bestimmt. Die manuelle Anpassung im Chat ist immer verfügbar. (experimentell)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 77f8a4f86d..9839de35d3 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -1055,6 +1055,10 @@ "refreshSuccess": "Tools refreshed successfully", "refreshError": "Failed to refresh tools", "toolParameters": "Parameters" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamic thinking effort", + "description": "Enables the set_thinking_effort tool so the model can decide its thinking effort per step. The manual in-chat control is always available. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index e730483fa0..9556372c04 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Herramientas actualizadas correctamente", "refreshError": "Error al actualizar las herramientas", "toolParameters": "Parámetros" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esfuerzo de pensamiento dinámico", + "description": "Habilita la herramienta set_thinking_effort para que el modelo decida su esfuerzo de pensamiento por paso. El control manual en el chat siempre está disponible. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 78770da21d..2914341df1 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Outils actualisés avec succès", "refreshError": "Échec de l'actualisation des outils", "toolParameters": "Paramètres" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Effort de réflexion dynamique", + "description": "Active l'outil set_thinking_effort afin que le modèle décide de son effort de réflexion à chaque étape. Le contrôle manuel dans le chat est toujours disponible. (expérimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 413d3515bc..9fb8a84a72 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "टूल्स सफलतापूर्वक रिफ्रेश हुए", "refreshError": "टूल्स रिफ्रेश करने में विफल", "toolParameters": "पैरामीटर्स" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "डायनामिक चिंतन प्रयास", + "description": "set_thinking_effort टूल सक्षम करता है ताकि मॉडल हर चरण में अपना चिंतन प्रयास स्वयं तय कर सके। चैट में मैन्युअल नियंत्रण हमेशा उपलब्ध है। (प्रयोगात्मक)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 9b9928da64..682ac9ad55 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tool berhasil direfresh", "refreshError": "Gagal merefresh tool", "toolParameters": "Parameter" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Usaha berpikir dinamis", + "description": "Mengaktifkan alat set_thinking_effort agar model dapat memutuskan usaha berpikirnya per langkah. Kontrol manual di obrolan selalu tersedia. (eksperimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 8a43ec3d35..9ae8f2a8bd 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Strumenti aggiornati con successo", "refreshError": "Impossibile aggiornare gli strumenti", "toolParameters": "Parametri" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Sforzo di pensiero dinamico", + "description": "Abilita lo strumento set_thinking_effort in modo che il modello decida lo sforzo di pensiero per ogni passaggio. Il controllo manuale nella chat è sempre disponibile. (sperimentale)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index b2cfbe977e..b824141a95 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "ツールが正常に更新されました", "refreshError": "ツールの更新に失敗しました", "toolParameters": "パラメーター" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "ダイナミック思考強度", + "description": "set_thinking_effort ツールを有効にし、ステップごとにモデルが思考強度を決定できるようにします。チャット内での手動調整は常に利用可能です。(実験的機能)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 1ff9addeb4..c714cf86bf 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "도구가 성공적으로 새로고침되었습니다", "refreshError": "도구 새로고침에 실패했습니다", "toolParameters": "매개변수" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "동적 사고 노력", + "description": "set_thinking_effort 도구를 활성화하여 단계별로 모델이 사고 노력을 결정하도록 합니다. 채팅에서 수동 조정은 항상 사용 가능합니다. (실험적 기능)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 4361d091a1..dfa0c29a7f 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tools succesvol vernieuwd", "refreshError": "Fout bij vernieuwen van tools", "toolParameters": "Parameters" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamisch denkwerk", + "description": "Schakelt het set_thinking_effort-gereedschap in zodat het model per stap het denkwerk zelf kan bepalen. De handmatige aanpassing in het gesprek is altijd beschikbaar. (experimenteel)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 277bcaa470..84e06b68a6 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Narzędzia odświeżone pomyślnie", "refreshError": "Nie udało się odświeżyć narzędzi", "toolParameters": "Parametry" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamiczny wysiłek myślowy", + "description": "Włącza narzędzie set_thinking_effort, aby model samodzielnie decydował o wysiłku myślowym na każdym kroku. Ręczna regulacja w czacie jest zawsze dostępna. (eksperymentalne)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 8ce67bcd48..79e16a6298 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Ferramentas atualizadas com sucesso", "refreshError": "Falha ao atualizar ferramentas", "toolParameters": "Parâmetros" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esforço de pensamento dinâmico", + "description": "Ativa a ferramenta set_thinking_effort para que o modelo decida seu esforço de pensamento em cada etapa. O controle manual na conversa está sempre disponível. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 0ac516c190..e1131173ff 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Инструменты успешно обновлены", "refreshError": "Не удалось обновить инструменты", "toolParameters": "Параметры" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Динамическое усилие размышления", + "description": "Включает инструмент set_thinking_effort, чтобы модель самостоятельно определяла усилие размышления на каждом шаге. Ручное управление в чате всегда доступно. (экспериментальная функция)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 5d3a5cb89a..992ef00800 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Araçlar başarıyla yenilendi", "refreshError": "Araçlar yenilenemedi", "toolParameters": "Parametreler" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dinamik düşünme çabası", + "description": "set_thinking_effort aracını etkinleştirir; böylece model her adımda kendi düşünme çabasını belirler. Sohbetteki manuel kontrol her zaman kullanılabilir. (deneysel)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index adb1be64e3..2f697a1609 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Làm mới công cụ thành công", "refreshError": "Không thể làm mới công cụ", "toolParameters": "Thông số" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Nỗ lực suy nghĩ động", + "description": "Bật công cụ set_thinking_effort để mô hình tự quyết định nỗ lực suy nghĩ của từng bước. Điều chỉnh thủ công trong trò chuyện luôn khả dụng. (thực nghiệm)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 916f629efe..092ebfb8c3 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "工具刷新成功", "refreshError": "工具刷新失败", "toolParameters": "参数" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "动态思考强度", + "description": "启用 set_thinking_effort 工具,让模型按步骤自行决定思考强度。对话中的手动调整随时可用。 (实验性功能)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index d1f9258dcf..a057fab671 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -1002,6 +1002,10 @@ "refreshSuccess": "工具重新整理成功", "refreshError": "工具重新整理失敗", "toolParameters": "參數" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "動態思考強度", + "description": "啟用 set_thinking_effort 工具,讓模型自行決定每一步的思考強度。對話中的手動調整隨時可用。(實驗性)" } }, "promptCaching": { From 521e0e6976e2700aa601e07622581f60d486d962 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Fri, 4 Sep 2026 10:21:22 +0800 Subject: [PATCH 5/8] feat(settings): dynamic thinking effort experimental toggle (DTE-1) --- .../types/src/__tests__/experiment.test.ts | 19 +++++ packages/types/src/experiment.ts | 2 + scripts/stryker-diff.mjs | 10 ++- scripts/stryker-diff.test.mjs | 7 +- .../webview/__tests__/ClineProvider.spec.ts | 32 ++++++++ .../__tests__/webviewMessageHandler.spec.ts | 55 +++++++++++++ src/shared/__tests__/experiments.spec.ts | 29 ++++++- src/shared/experiments.ts | 2 + webview-ui/playwright/gallery/stories.tsx | 5 ++ .../__tests__/ExperimentalSettings.spec.tsx | 76 +++++++++++++++++- .../ExperimentalSettings.visual.fixture.tsx | 28 +++++++ .../__tests__/ExperimentalSettings.visual.tsx | 12 +++ .../settings/__tests__/SettingsView.spec.tsx | 35 ++++++++ .../experimental-settings-dark.png | Bin 0 -> 40449 bytes ...erimental-settings-high-contrast-light.png | Bin 0 -> 41457 bytes .../experimental-settings-high-contrast.png | Bin 0 -> 41675 bytes .../experimental-settings-light.png | Bin 0 -> 41449 bytes webview-ui/src/i18n/locales/ca/settings.json | 4 + webview-ui/src/i18n/locales/de/settings.json | 4 + webview-ui/src/i18n/locales/en/settings.json | 4 + webview-ui/src/i18n/locales/es/settings.json | 4 + webview-ui/src/i18n/locales/fr/settings.json | 4 + webview-ui/src/i18n/locales/hi/settings.json | 4 + webview-ui/src/i18n/locales/id/settings.json | 4 + webview-ui/src/i18n/locales/it/settings.json | 4 + webview-ui/src/i18n/locales/ja/settings.json | 4 + webview-ui/src/i18n/locales/ko/settings.json | 4 + webview-ui/src/i18n/locales/nl/settings.json | 4 + webview-ui/src/i18n/locales/pl/settings.json | 4 + .../src/i18n/locales/pt-BR/settings.json | 4 + webview-ui/src/i18n/locales/ru/settings.json | 4 + webview-ui/src/i18n/locales/tr/settings.json | 4 + webview-ui/src/i18n/locales/vi/settings.json | 4 + .../src/i18n/locales/zh-CN/settings.json | 4 + .../src/i18n/locales/zh-TW/settings.json | 4 + 35 files changed, 378 insertions(+), 6 deletions(-) create mode 100644 packages/types/src/__tests__/experiment.test.ts create mode 100644 webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx create mode 100644 webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-dark.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast-light.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-light.png diff --git a/packages/types/src/__tests__/experiment.test.ts b/packages/types/src/__tests__/experiment.test.ts new file mode 100644 index 0000000000..0ef4ed2e02 --- /dev/null +++ b/packages/types/src/__tests__/experiment.test.ts @@ -0,0 +1,19 @@ +import { experimentIds, experimentIdsSchema, experimentsSchema } from "../experiment.js" + +describe("dynamicThinkingEffort experiment", () => { + it("is part of the experiment id enum", () => { + expect(experimentIds).toContain("dynamicThinkingEffort") + expect(experimentIdsSchema.safeParse("dynamicThinkingEffort").success).toBe(true) + }) + + it("parses enabled and disabled states", () => { + expect(experimentsSchema.parse({ dynamicThinkingEffort: true })).toEqual({ dynamicThinkingEffort: true }) + expect(experimentsSchema.parse({ dynamicThinkingEffort: false })).toEqual({ dynamicThinkingEffort: false }) + expect(experimentsSchema.parse({})).toEqual({}) + }) + + it("rejects non-boolean values", () => { + expect(experimentsSchema.safeParse({ dynamicThinkingEffort: "yes" }).success).toBe(false) + expect(experimentIdsSchema.safeParse("dynamic-thinking-effort").success).toBe(false) + }) +}) diff --git a/packages/types/src/experiment.ts b/packages/types/src/experiment.ts index 5d511859b1..f4b3a1c0a8 100644 --- a/packages/types/src/experiment.ts +++ b/packages/types/src/experiment.ts @@ -12,6 +12,7 @@ export const experimentIds = [ "runSlashCommand", "customTools", "parallelToolExecution", + "dynamicThinkingEffort", ] as const export const experimentIdsSchema = z.enum(experimentIds) @@ -28,6 +29,7 @@ export const experimentsSchema = z.object({ runSlashCommand: z.boolean().optional(), customTools: z.boolean().optional(), parallelToolExecution: z.boolean().optional(), + dynamicThinkingEffort: z.boolean().optional(), }) export type Experiments = z.infer diff --git a/scripts/stryker-diff.mjs b/scripts/stryker-diff.mjs index c0e8a6cd1a..e46afb22ab 100644 --- a/scripts/stryker-diff.mjs +++ b/scripts/stryker-diff.mjs @@ -51,8 +51,14 @@ export const PACKAGE_CONFIGS = [ root: "src", sourceRoot: "src/", vitestConfig: "vitest.config.ts", - vitestRelated: false, - discoverRelatedTests: true, + // Use plugin-side related-test discovery: with an explicit STRYKER_TEST_FILES + // list, stryker-js 10.0.0 plans static mutants with runtime activation + // (stryker-mutator/stryker-js#6144, #6209), which the vitest plugin can only + // apply after top-level code has run, producing false Survived results. + // Revert to vitestRelated: false / discoverRelatedTests: true once the + // upstream planner fix lands. + vitestRelated: true, + discoverRelatedTests: false, excludedPaths: ["src/esbuild.mjs", "src/eslint.config.mjs", "src/utils/vitest-verbosity.ts"], }, ] diff --git a/scripts/stryker-diff.test.mjs b/scripts/stryker-diff.test.mjs index 0f39dc507f..b86f5f3e96 100644 --- a/scripts/stryker-diff.test.mjs +++ b/scripts/stryker-diff.test.mjs @@ -129,8 +129,11 @@ describe("buildManifest", () => { assert.equal(webview.runRoot, ".") assert.equal(webview.discoverRelatedTests, true) assert.equal(webview.vitestRelated, false) - assert.equal(extension.discoverRelatedTests, true) - assert.equal(extension.vitestRelated, false) + // The extension entry uses plugin-side related discovery while stryker-js 10.0.0 + // plans static mutants with runtime activation when given explicit test files + // (stryker-mutator/stryker-js#6144, #6209); see the entry comment in stryker-diff.mjs. + assert.equal(extension.discoverRelatedTests, false) + assert.equal(extension.vitestRelated, true) }) it("returns no packages for tests, barrels, unsupported packages, and type-only changes", () => { diff --git a/src/core/webview/__tests__/ClineProvider.spec.ts b/src/core/webview/__tests__/ClineProvider.spec.ts index ad6ea143a8..9249140353 100644 --- a/src/core/webview/__tests__/ClineProvider.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.spec.ts @@ -1439,6 +1439,38 @@ describe("ClineProvider", () => { expect(state.destructiveCommandGuardEnabled).toBe(false) }) + test("getStateToPostToWebview returns the saved dynamicThinkingEffort experiment when enabled", async () => { + await provider.resolveWebviewView(mockWebviewView) + await provider.contextProxy.setValue("experiments", { + ...experimentDefault, + dynamicThinkingEffort: true, + }) + + const state = await provider.getStateToPostToWebview() + + expect(state.experiments).toEqual({ ...experimentDefault, dynamicThinkingEffort: true }) + }) + + test("getStateToPostToWebview returns the saved dynamicThinkingEffort experiment when explicitly disabled", async () => { + await provider.resolveWebviewView(mockWebviewView) + await provider.contextProxy.setValue("experiments", { + ...experimentDefault, + dynamicThinkingEffort: false, + }) + + const state = await provider.getStateToPostToWebview() + + expect(state.experiments).toEqual({ ...experimentDefault, dynamicThinkingEffort: false }) + }) + + test("getStateToPostToWebview defaults dynamicThinkingEffort to false when experiments are unset", async () => { + await provider.resolveWebviewView(mockWebviewView) + + const state = await provider.getStateToPostToWebview() + + expect(state.experiments).toEqual({ ...experimentDefault, dynamicThinkingEffort: false }) + }) + test("language is set to VSCode language", async () => { // Mock VSCode language as Spanish ;(vscode.env as any).language = "pt-BR" diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 4c2a301965..bbbb6852e7 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -73,6 +73,7 @@ import type { ModelRecord } from "@roo-code/types" import { webviewMessageHandler } from "../webviewMessageHandler" import type { ClineProvider } from "../ClineProvider" +import { experimentDefault } from "../../../shared/experiments" import { flushModels, getModels } from "../../../api/providers/fetchers/modelCache" import { getLMStudioModels } from "../../../api/providers/fetchers/lmstudio" import { getCommands } from "../../../services/command/commands" @@ -2273,3 +2274,57 @@ describe("webviewMessageHandler - telemetrySetting", () => { expect(TelemetryService.instance.updateTelemetryState).not.toHaveBeenCalled() }) }) + +describe("webviewMessageHandler - experiments", () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it("persists dynamicThinkingEffort true merged with the saved experiments", async () => { + vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => + key === "experiments" ? { preventFocusDisruption: true } : undefined, + ) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { experiments: { dynamicThinkingEffort: true } }, + }) + + expect(mockClineProvider.contextProxy.setValue).toHaveBeenCalledWith("experiments", { + preventFocusDisruption: true, + dynamicThinkingEffort: true, + }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) + }) + + it("persists dynamicThinkingEffort false over a previously enabled value", async () => { + vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => + key === "experiments" ? { dynamicThinkingEffort: true } : undefined, + ) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { experiments: { dynamicThinkingEffort: false } }, + }) + + expect(mockClineProvider.contextProxy.setValue).toHaveBeenCalledWith("experiments", { + dynamicThinkingEffort: false, + }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) + }) + + it("persists the experiment defaults when no experiments are saved yet", async () => { + vi.mocked(mockClineProvider.contextProxy.getValue).mockReturnValue(undefined) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { experiments: {} }, + }) + + expect(mockClineProvider.contextProxy.setValue).toHaveBeenCalledWith("experiments", { + ...experimentDefault, + dynamicThinkingEffort: false, + }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) + }) +}) diff --git a/src/shared/__tests__/experiments.spec.ts b/src/shared/__tests__/experiments.spec.ts index f2261a5c09..b6e8993df4 100644 --- a/src/shared/__tests__/experiments.spec.ts +++ b/src/shared/__tests__/experiments.spec.ts @@ -2,7 +2,7 @@ import type { ExperimentId } from "@roo-code/types" -import { EXPERIMENT_IDS, experimentConfigsMap, experiments as Experiments } from "../experiments" +import { EXPERIMENT_IDS, experimentConfigsMap, experimentDefault, experiments as Experiments } from "../experiments" describe("experiments", () => { describe("PREVENT_FOCUS_DISRUPTION", () => { @@ -22,6 +22,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(false) }) @@ -33,6 +34,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(true) }) @@ -44,6 +46,7 @@ describe("experiments", () => { runSlashCommand: false, customTools: false, parallelToolExecution: false, + dynamicThinkingEffort: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.PREVENT_FOCUS_DISRUPTION)).toBe(false) }) @@ -66,4 +69,28 @@ describe("experiments", () => { expect(Experiments.isEnabled({ parallelToolExecution: true }, "parallelToolExecution")).toBe(true) }) }) + + describe("DYNAMIC_THINKING_EFFORT", () => { + it("is configured correctly", () => { + expect(EXPERIMENT_IDS.DYNAMIC_THINKING_EFFORT).toBe("dynamicThinkingEffort") + expect(experimentConfigsMap.DYNAMIC_THINKING_EFFORT).toMatchObject({ + enabled: false, + }) + // Visible in the Settings panel (showInSettings defaults to true). + expect(experimentConfigsMap.DYNAMIC_THINKING_EFFORT.showInSettings).toBeUndefined() + }) + + it("is disabled by default", () => { + expect(experimentDefault.dynamicThinkingEffort).toBe(false) + expect(Experiments.isEnabled({}, "dynamicThinkingEffort")).toBe(false) + }) + + it("returns true when enabled", () => { + expect(Experiments.isEnabled({ dynamicThinkingEffort: true }, "dynamicThinkingEffort")).toBe(true) + }) + + it("returns false when explicitly disabled", () => { + expect(Experiments.isEnabled({ dynamicThinkingEffort: false }, "dynamicThinkingEffort")).toBe(false) + }) + }) }) diff --git a/src/shared/experiments.ts b/src/shared/experiments.ts index ae538b9138..c0d461a454 100644 --- a/src/shared/experiments.ts +++ b/src/shared/experiments.ts @@ -6,6 +6,7 @@ export const EXPERIMENT_IDS = { RUN_SLASH_COMMAND: "runSlashCommand", CUSTOM_TOOLS: "customTools", PARALLEL_TOOL_EXECUTION: "parallelToolExecution", + DYNAMIC_THINKING_EFFORT: "dynamicThinkingEffort", } as const satisfies Record type _AssertExperimentIds = AssertEqual>> @@ -25,6 +26,7 @@ export const experimentConfigsMap: Record = { CUSTOM_TOOLS: { enabled: false }, // TODO: add i18n keys (settings:experimental.PARALLEL_TOOL_EXECUTION.name/.description) in the same PR that sets showInSettings: true PARALLEL_TOOL_EXECUTION: { enabled: false, showInSettings: false }, + DYNAMIC_THINKING_EFFORT: { enabled: false }, } export const experimentDefault = Object.fromEntries( diff --git a/webview-ui/playwright/gallery/stories.tsx b/webview-ui/playwright/gallery/stories.tsx index 52ec5c2ce5..e047f1c32d 100644 --- a/webview-ui/playwright/gallery/stories.tsx +++ b/webview-ui/playwright/gallery/stories.tsx @@ -162,6 +162,11 @@ export const stories: Record = { const { UISettingsStory } = await import("@/components/settings/__tests__/UISettings.visual.fixture") return }, + "experimental-settings": async () => { + const { ExperimentalSettingsStory } = + await import("@/components/settings/__tests__/ExperimentalSettings.visual.fixture") + return + }, "ui-settings-long-locale": async () => { const [{ UISettingsStory }, { default: i18next }] = await Promise.all([ import("@/components/settings/__tests__/UISettings.visual.fixture"), diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx index b31f87dc7e..3feddad1d4 100644 --- a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx @@ -1,4 +1,4 @@ -import { render, screen } from "@testing-library/react" +import { fireEvent, render, screen } from "@testing-library/react" import { experimentDefault } from "@roo/experiments" @@ -32,4 +32,78 @@ describe("ExperimentalSettings", () => { expect(screen.getByText("settings:experimental.CUSTOM_TOOLS.name")).toBeInTheDocument() expect(screen.queryByText("settings:experimental.PARALLEL_TOOL_EXECUTION.name")).not.toBeInTheDocument() }) + + it("renders the dynamic thinking effort toggle", () => { + render() + + expect(screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name")).toBeInTheDocument() + }) + + it("leaves the dynamic thinking effort toggle unchecked when the value is false or omitted", () => { + const getCheckbox = () => { + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + return label?.querySelector("input[type='checkbox']") + } + + // Explicit false + let result = render( + , + ) + expect(getCheckbox()).not.toBeNull() + expect(getCheckbox()).not.toBeChecked() + result.unmount() + + // Omitted (absent from the persisted config) + const omitted: Record = { ...experimentDefault } + delete omitted.dynamicThinkingEffort + result = render() + expect(getCheckbox()).not.toBeNull() + expect(getCheckbox()).not.toBeChecked() + result.unmount() + }) + + it("binds the dynamic thinking effort toggle to setExperimentEnabled", () => { + const setExperimentEnabled = vi.fn() + render( + , + ) + + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + const checkbox = label?.querySelector("input[type='checkbox']") + expect(checkbox).not.toBeNull() + expect(checkbox).toBeChecked() + + fireEvent.click(checkbox!) + + expect(setExperimentEnabled).toHaveBeenCalledTimes(1) + expect(setExperimentEnabled).toHaveBeenCalledWith("dynamicThinkingEffort", false) + }) + + it("toggles the dynamic thinking effort on when clicked from the unchecked state", () => { + const setExperimentEnabled = vi.fn() + render( + , + ) + + const label = screen.getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label") + const checkbox = label?.querySelector("input[type='checkbox']") + expect(checkbox).not.toBeNull() + expect(checkbox).not.toBeChecked() + + fireEvent.click(checkbox!) + + expect(setExperimentEnabled).toHaveBeenCalledTimes(1) + expect(setExperimentEnabled).toHaveBeenCalledWith("dynamicThinkingEffort", true) + }) }) diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx new file mode 100644 index 0000000000..f28038aa6d --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.fixture.tsx @@ -0,0 +1,28 @@ +import { useState } from "react" + +import type { Experiments } from "@roo-code/types" + +import { EXPERIMENT_IDS, experimentDefault } from "@roo/experiments" + +import { ExperimentalSettings } from "../ExperimentalSettings" +import { AppProviders } from "../../../../playwright/AppProviders" + +export function ExperimentalSettingsStory() { + const [experiments, setExperiments] = useState({ + ...experimentDefault, + [EXPERIMENT_IDS.DYNAMIC_THINKING_EFFORT]: true, + }) + + return ( + +
+ setExperiments((current) => ({ ...current, [id]: enabled }))} + /> +
+
+ ) +} diff --git a/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx new file mode 100644 index 0000000000..8a12ebf3ae --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/ExperimentalSettings.visual.tsx @@ -0,0 +1,12 @@ +import { expect, test } from "../../../../playwright/coverage-fixture" +import { mountedStory } from "../../../../playwright/mounted-story" +import { applyVisualTheme, visualThemes } from "../../../../playwright/themes" + +for (const theme of visualThemes) { + test(`renders the experimental settings section in the VS Code ${theme.name} theme`, async ({ mount, page }) => { + const component = mountedStory(await mount("experimental-settings")) + await applyVisualTheme(page, theme) + const story = component.getByTestId("experimental-settings-story") + await expect(story).toHaveScreenshot(`experimental-settings-${theme.name}.png`) + }) +} diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx index a3aa131902..71d0bff9f0 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx @@ -5,6 +5,7 @@ import { act } from "@testing-library/react" import { vscode } from "@/utils/vscode" import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS } from "@roo-code/types" +import { experimentDefault } from "@roo/experiments" import SettingsView from "../SettingsView" @@ -804,3 +805,37 @@ describe("SettingsView - Duplicate Commands", () => { expect(onDone).toHaveBeenCalledTimes(1) }) }) + +describe("SettingsView - Experimental Settings", () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it("includes the dynamic thinking effort toggle in the updateSettings payload on save", () => { + // Start from the shared contract default, where dynamicThinkingEffort is off. + const { activateTab, getSettingsContent } = renderSettingsView({ experiments: experimentDefault }) + + activateTab("experimental") + + const content = getSettingsContent() + const label = within(content).getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label")! + const checkbox = within(label).getByRole("checkbox") + expect(checkbox).not.toBeChecked() + + fireEvent.click(checkbox) + + // Click Save to save settings + const saveButton = screen.getByTestId("save-button") + fireEvent.click(saveButton) + + // The toggled experiment must reach the host inside the updateSettings payload + expect(vscode.postMessage).toHaveBeenCalledWith( + expect.objectContaining({ + type: "updateSettings", + updatedSettings: expect.objectContaining({ + experiments: expect.objectContaining({ dynamicThinkingEffort: true }), + }), + }), + ) + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b15dc14b1e8258a378645b014cbc615c71c060 GIT binary patch literal 40449 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast-light.png b/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4f1b090fdf1696c843ccce48957334555a0b1488 GIT binary patch literal 41457 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 GAni}se(FU4 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast.png b/webview-ui/src/components/settings/__tests__/__screenshots__/experimental-settings-high-contrast.png new file mode 100644 index 0000000000000000000000000000000000000000..348dab9629e4350dd494cc087b7cdf1d4b02b2d7 GIT binary patch literal 41675 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 762a1290af..8d7b7ee515 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Eines actualitzades correctament", "refreshError": "Error en actualitzar les eines", "toolParameters": "Paràmetres" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esforç de pensament dinàmic", + "description": "Activa l'eina set_thinking_effort perquè el model decideixi el seu esforç de pensament per pas. El control manual al xat sempre està disponible. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index f56984bc73..cbb94b5cee 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tools erfolgreich aktualisiert", "refreshError": "Fehler beim Aktualisieren der Tools", "toolParameters": "Parameter" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamische Denkintensität", + "description": "Aktiviert das set_thinking_effort-Tool, damit das Modell die Denkintensität pro Schritt selbst bestimmt. Die manuelle Anpassung im Chat ist immer verfügbar. (experimentell)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 77f8a4f86d..9839de35d3 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -1055,6 +1055,10 @@ "refreshSuccess": "Tools refreshed successfully", "refreshError": "Failed to refresh tools", "toolParameters": "Parameters" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamic thinking effort", + "description": "Enables the set_thinking_effort tool so the model can decide its thinking effort per step. The manual in-chat control is always available. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index e730483fa0..9556372c04 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Herramientas actualizadas correctamente", "refreshError": "Error al actualizar las herramientas", "toolParameters": "Parámetros" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esfuerzo de pensamiento dinámico", + "description": "Habilita la herramienta set_thinking_effort para que el modelo decida su esfuerzo de pensamiento por paso. El control manual en el chat siempre está disponible. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 78770da21d..2914341df1 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Outils actualisés avec succès", "refreshError": "Échec de l'actualisation des outils", "toolParameters": "Paramètres" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Effort de réflexion dynamique", + "description": "Active l'outil set_thinking_effort afin que le modèle décide de son effort de réflexion à chaque étape. Le contrôle manuel dans le chat est toujours disponible. (expérimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 413d3515bc..9fb8a84a72 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "टूल्स सफलतापूर्वक रिफ्रेश हुए", "refreshError": "टूल्स रिफ्रेश करने में विफल", "toolParameters": "पैरामीटर्स" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "डायनामिक चिंतन प्रयास", + "description": "set_thinking_effort टूल सक्षम करता है ताकि मॉडल हर चरण में अपना चिंतन प्रयास स्वयं तय कर सके। चैट में मैन्युअल नियंत्रण हमेशा उपलब्ध है। (प्रयोगात्मक)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 9b9928da64..682ac9ad55 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tool berhasil direfresh", "refreshError": "Gagal merefresh tool", "toolParameters": "Parameter" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Usaha berpikir dinamis", + "description": "Mengaktifkan alat set_thinking_effort agar model dapat memutuskan usaha berpikirnya per langkah. Kontrol manual di obrolan selalu tersedia. (eksperimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 8a43ec3d35..9ae8f2a8bd 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Strumenti aggiornati con successo", "refreshError": "Impossibile aggiornare gli strumenti", "toolParameters": "Parametri" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Sforzo di pensiero dinamico", + "description": "Abilita lo strumento set_thinking_effort in modo che il modello decida lo sforzo di pensiero per ogni passaggio. Il controllo manuale nella chat è sempre disponibile. (sperimentale)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index b2cfbe977e..b824141a95 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "ツールが正常に更新されました", "refreshError": "ツールの更新に失敗しました", "toolParameters": "パラメーター" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "ダイナミック思考強度", + "description": "set_thinking_effort ツールを有効にし、ステップごとにモデルが思考強度を決定できるようにします。チャット内での手動調整は常に利用可能です。(実験的機能)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 1ff9addeb4..c714cf86bf 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "도구가 성공적으로 새로고침되었습니다", "refreshError": "도구 새로고침에 실패했습니다", "toolParameters": "매개변수" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "동적 사고 노력", + "description": "set_thinking_effort 도구를 활성화하여 단계별로 모델이 사고 노력을 결정하도록 합니다. 채팅에서 수동 조정은 항상 사용 가능합니다. (실험적 기능)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 4361d091a1..dfa0c29a7f 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Tools succesvol vernieuwd", "refreshError": "Fout bij vernieuwen van tools", "toolParameters": "Parameters" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamisch denkwerk", + "description": "Schakelt het set_thinking_effort-gereedschap in zodat het model per stap het denkwerk zelf kan bepalen. De handmatige aanpassing in het gesprek is altijd beschikbaar. (experimenteel)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 277bcaa470..84e06b68a6 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Narzędzia odświeżone pomyślnie", "refreshError": "Nie udało się odświeżyć narzędzi", "toolParameters": "Parametry" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dynamiczny wysiłek myślowy", + "description": "Włącza narzędzie set_thinking_effort, aby model samodzielnie decydował o wysiłku myślowym na każdym kroku. Ręczna regulacja w czacie jest zawsze dostępna. (eksperymentalne)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 8ce67bcd48..79e16a6298 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Ferramentas atualizadas com sucesso", "refreshError": "Falha ao atualizar ferramentas", "toolParameters": "Parâmetros" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Esforço de pensamento dinâmico", + "description": "Ativa a ferramenta set_thinking_effort para que o modelo decida seu esforço de pensamento em cada etapa. O controle manual na conversa está sempre disponível. (experimental)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 0ac516c190..e1131173ff 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Инструменты успешно обновлены", "refreshError": "Не удалось обновить инструменты", "toolParameters": "Параметры" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Динамическое усилие размышления", + "description": "Включает инструмент set_thinking_effort, чтобы модель самостоятельно определяла усилие размышления на каждом шаге. Ручное управление в чате всегда доступно. (экспериментальная функция)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 5d3a5cb89a..992ef00800 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Araçlar başarıyla yenilendi", "refreshError": "Araçlar yenilenemedi", "toolParameters": "Parametreler" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Dinamik düşünme çabası", + "description": "set_thinking_effort aracını etkinleştirir; böylece model her adımda kendi düşünme çabasını belirler. Sohbetteki manuel kontrol her zaman kullanılabilir. (deneysel)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index adb1be64e3..2f697a1609 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "Làm mới công cụ thành công", "refreshError": "Không thể làm mới công cụ", "toolParameters": "Thông số" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "Nỗ lực suy nghĩ động", + "description": "Bật công cụ set_thinking_effort để mô hình tự quyết định nỗ lực suy nghĩ của từng bước. Điều chỉnh thủ công trong trò chuyện luôn khả dụng. (thực nghiệm)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 916f629efe..092ebfb8c3 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -975,6 +975,10 @@ "refreshSuccess": "工具刷新成功", "refreshError": "工具刷新失败", "toolParameters": "参数" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "动态思考强度", + "description": "启用 set_thinking_effort 工具,让模型按步骤自行决定思考强度。对话中的手动调整随时可用。 (实验性功能)" } }, "promptCaching": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index d1f9258dcf..a057fab671 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -1002,6 +1002,10 @@ "refreshSuccess": "工具重新整理成功", "refreshError": "工具重新整理失敗", "toolParameters": "參數" + }, + "DYNAMIC_THINKING_EFFORT": { + "name": "動態思考強度", + "description": "啟用 set_thinking_effort 工具,讓模型自行決定每一步的思考強度。對話中的手動調整隨時可用。(實驗性)" } }, "promptCaching": { From 39762bf8162222fc6ff93a73e2f71df7acb7a187 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Sat, 5 Sep 2026 01:24:54 +0800 Subject: [PATCH 6/8] test(settings): assert false and unset dynamicThinkingEffort persistence in the updateSettings payload --- .../settings/__tests__/SettingsView.spec.tsx | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx index 71d0bff9f0..656cf2e659 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx @@ -812,23 +812,14 @@ describe("SettingsView - Experimental Settings", () => { }) it("includes the dynamic thinking effort toggle in the updateSettings payload on save", () => { - // Start from the shared contract default, where dynamicThinkingEffort is off. const { activateTab, getSettingsContent } = renderSettingsView({ experiments: experimentDefault }) - activateTab("experimental") - const content = getSettingsContent() const label = within(content).getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label")! const checkbox = within(label).getByRole("checkbox") expect(checkbox).not.toBeChecked() - fireEvent.click(checkbox) - - // Click Save to save settings - const saveButton = screen.getByTestId("save-button") - fireEvent.click(saveButton) - - // The toggled experiment must reach the host inside the updateSettings payload + fireEvent.click(screen.getByTestId("save-button")) expect(vscode.postMessage).toHaveBeenCalledWith( expect.objectContaining({ type: "updateSettings", @@ -838,4 +829,26 @@ describe("SettingsView - Experimental Settings", () => { }), ) }) + + it("persists the unset representation of dynamicThinkingEffort as false on save", () => { + const experiments: Record = { ...experimentDefault } + delete experiments.dynamicThinkingEffort + const { activateTab, getSettingsContent } = renderSettingsView({ experiments }) + activateTab("experimental") + const content = getSettingsContent() + const label = within(content).getByText("settings:experimental.DYNAMIC_THINKING_EFFORT.name").closest("label")! + const checkbox = within(label).getByRole("checkbox") + expect(checkbox).not.toBeChecked() + fireEvent.click(checkbox) + fireEvent.click(checkbox) + fireEvent.click(screen.getByTestId("save-button")) + expect(vscode.postMessage).toHaveBeenCalledWith( + expect.objectContaining({ + type: "updateSettings", + updatedSettings: expect.objectContaining({ + experiments: expect.objectContaining({ dynamicThinkingEffort: false }), + }), + }), + ) + }) }) From 1edd728c49da4c7dae12f4686e3a43d336696eb4 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Sun, 6 Sep 2026 05:02:57 +0800 Subject: [PATCH 7/8] fix(task): clear DTE runtime-effort state on disposal and dispose aborted test tasks (CR 5120440807) --- src/core/task/Task.ts | 5 +++++ src/core/task/__tests__/Task.runtime-thinking-effort.test.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index 297e2486f2..0c0cc01c53 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -2706,6 +2706,11 @@ export class Task extends EventEmitter implements TaskLike { console.error("Error reverting diff changes:", error) } + // Clear DTE runtime-effort override state so a retained disposed task never serves a stale override. + this.runtimeThinkingEffort = undefined + this.runtimeThinkingEffortSource = undefined + this.preOverrideReasoningEffort = undefined + await pendingCleanup await this.diffReversionPromise } diff --git a/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts b/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts index e62cbd0e24..ee2874d2da 100644 --- a/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts +++ b/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts @@ -124,7 +124,7 @@ describe("Task runtime thinking effort (DTE series 2/5)", () => { afterEach(async () => { vi.useRealTimers() - if (task && !task.abort) { + if (task) { await task.dispose().catch(() => {}) } }) From 1087fcbd4a28c5fdb16b9fa49b370c3264e1e4e0 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Sun, 6 Sep 2026 05:57:16 +0800 Subject: [PATCH 8/8] fix(task): restore API configuration when clearing the DTE effort override on disposal (CR 3942121231) --- src/core/task/Task.ts | 9 +++++---- .../__tests__/Task.runtime-thinking-effort.test.ts | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index 0c0cc01c53..eb233f3d71 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -2706,10 +2706,11 @@ export class Task extends EventEmitter implements TaskLike { console.error("Error reverting diff changes:", error) } - // Clear DTE runtime-effort override state so a retained disposed task never serves a stale override. - this.runtimeThinkingEffort = undefined - this.runtimeThinkingEffortSource = undefined - this.preOverrideReasoningEffort = undefined + // Clear the DTE runtime-effort override via the standard clearing call so a + // retained disposed task never serves a stale override: the override also + // lives in apiConfiguration.reasoningEffort and the built api handler, and + // the clearing call restores both before clearing the runtime fields. + this.setRuntimeThinkingEffort(undefined) await pendingCleanup await this.diffReversionPromise diff --git a/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts b/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts index ee2874d2da..f91f00e820 100644 --- a/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts +++ b/src/core/task/__tests__/Task.runtime-thinking-effort.test.ts @@ -298,4 +298,18 @@ describe("Task runtime thinking effort (DTE series 2/5)", () => { expect(getPrivateAccess(task).getRuntimeThinkingEffortMetadata()).not.toHaveProperty("reasoningEffort") }) }) + + describe("dispose", () => { + it("clears the task-local override and restores the settings-derived API configuration at task end", async () => { + task.setRuntimeThinkingEffort("xhigh", "source") + await task.dispose() + + expect(task.getRuntimeThinkingEffort()).toEqual({ effort: undefined, source: undefined }) + const access = getPrivateAccess(task) + expect(access.runtimeThinkingEffort).toBeUndefined() + expect(access.runtimeThinkingEffortSource).toBeUndefined() + expect(access.preOverrideReasoningEffort).toBeUndefined() + expect(task.apiConfiguration.reasoningEffort).toBe(SETTINGS_EFFORT) + }) + }) })