From c97074581509300e79d3459d4af5090747d34a76 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 09:04:57 -0700 Subject: [PATCH 01/42] feat(ui): add interface, terminal, editor font size and spacing settings --- packages/types/src/global-settings.ts | 16 ++ packages/types/src/vscode-extension-host.ts | 4 + src/core/webview/ClineProvider.ts | 12 ++ webview-ui/playwright/gallery/stories.tsx | 5 + webview-ui/src/components/chat/ChatRow.tsx | 2 +- .../src/components/chat/QueuedMessages.tsx | 2 +- .../src/components/chat/TerminalOutput.tsx | 2 +- .../src/components/common/CodeBlock.tsx | 2 +- .../src/components/common/MarkdownBlock.tsx | 2 +- .../components/settings/AppearancePreview.tsx | 97 ++++++++++++ .../src/components/settings/NumberStepper.tsx | 120 ++++++++++++++ .../src/components/settings/SettingsView.tsx | 13 ++ .../src/components/settings/UISettings.tsx | 54 ++++++- .../__tests__/AppearancePreview.spec.tsx | 66 ++++++++ .../AppearancePreview.visual.fixture.tsx | 33 ++++ .../__tests__/AppearancePreview.visual.tsx | 38 +++++ .../settings/__tests__/NumberStepper.spec.tsx | 148 ++++++++++++++++++ .../settings/__tests__/UISettings.spec.tsx | 63 ++++++++ .../src/context/ExtensionStateContext.tsx | 20 +++ webview-ui/src/i18n/locales/ca/settings.json | 26 +++ webview-ui/src/i18n/locales/de/settings.json | 26 +++ webview-ui/src/i18n/locales/en/settings.json | 26 +++ webview-ui/src/i18n/locales/es/settings.json | 26 +++ webview-ui/src/i18n/locales/fr/settings.json | 26 +++ webview-ui/src/i18n/locales/hi/settings.json | 26 +++ webview-ui/src/i18n/locales/id/settings.json | 26 +++ webview-ui/src/i18n/locales/it/settings.json | 26 +++ webview-ui/src/i18n/locales/ja/settings.json | 26 +++ webview-ui/src/i18n/locales/ko/settings.json | 26 +++ webview-ui/src/i18n/locales/nl/settings.json | 26 +++ webview-ui/src/i18n/locales/pl/settings.json | 26 +++ .../src/i18n/locales/pt-BR/settings.json | 26 +++ webview-ui/src/i18n/locales/ru/settings.json | 26 +++ webview-ui/src/i18n/locales/tr/settings.json | 26 +++ webview-ui/src/i18n/locales/vi/settings.json | 26 +++ .../src/i18n/locales/zh-CN/settings.json | 26 +++ .../src/i18n/locales/zh-TW/settings.json | 26 +++ webview-ui/src/index.css | 38 ++++- .../src/utils/__tests__/appearance.spec.ts | 63 ++++++++ webview-ui/src/utils/appearance.ts | 86 ++++++++++ 40 files changed, 1342 insertions(+), 12 deletions(-) create mode 100644 webview-ui/src/components/settings/AppearancePreview.tsx create mode 100644 webview-ui/src/components/settings/NumberStepper.tsx create mode 100644 webview-ui/src/components/settings/__tests__/AppearancePreview.spec.tsx create mode 100644 webview-ui/src/components/settings/__tests__/AppearancePreview.visual.fixture.tsx create mode 100644 webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx create mode 100644 webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx create mode 100644 webview-ui/src/utils/__tests__/appearance.spec.ts create mode 100644 webview-ui/src/utils/appearance.ts diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index eb51c1d67d..d74616bf21 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -280,6 +280,22 @@ export const globalSettingsSchema = z.object({ * When unset (or `null`), the webview inherits VS Code's `--vscode-font-size`. */ chatFontSize: z.number().int().min(8).max(32).nullish(), + /** + * Scale (percent) applied to Zoo Code's interface text. `null`/unset = 100. + */ + interfaceFontScale: z.number().int().min(50).max(200).nullish(), + /** + * Font size (px) for command/terminal output shown in chat. `null`/unset inherits. + */ + terminalFontSize: z.number().int().min(8).max(32).nullish(), + /** + * Font size (px) for code blocks and diffs shown in chat. `null`/unset inherits. + */ + editorFontSize: z.number().int().min(8).max(32).nullish(), + /** + * Scale (percent) applied to chat row padding. `null`/unset = 100. + */ + spacingScale: z.number().int().min(50).max(200).nullish(), /** * Controls the keyboard behavior for sending messages in the chat input. * - "send": Enter sends message, Shift+Enter creates newline (default) diff --git a/packages/types/src/vscode-extension-host.ts b/packages/types/src/vscode-extension-host.ts index dc407325d9..00f6de543f 100644 --- a/packages/types/src/vscode-extension-host.ts +++ b/packages/types/src/vscode-extension-host.ts @@ -339,6 +339,10 @@ export type ExtensionState = Pick< | "includeTaskHistoryInEnhance" | "reasoningBlockCollapsed" | "chatFontSize" + | "interfaceFontScale" + | "terminalFontSize" + | "editorFontSize" + | "spacingScale" | "enterBehavior" | "includeCurrentTime" | "includeCurrentCost" diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 32b82feaaa..10ad896218 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -2860,6 +2860,10 @@ export class ClineProvider historyPreviewCollapsed, reasoningBlockCollapsed, chatFontSize, + interfaceFontScale, + terminalFontSize, + editorFontSize, + spacingScale, enterBehavior, cloudUserInfo, cloudIsAuthenticated, @@ -3041,6 +3045,10 @@ export class ClineProvider historyPreviewCollapsed: historyPreviewCollapsed ?? false, reasoningBlockCollapsed: reasoningBlockCollapsed ?? true, chatFontSize, + interfaceFontScale, + terminalFontSize, + editorFontSize, + spacingScale, enterBehavior: enterBehavior ?? "send", cloudUserInfo, cloudIsAuthenticated: cloudIsAuthenticated ?? false, @@ -3274,6 +3282,10 @@ export class ClineProvider historyPreviewCollapsed: stateValues.historyPreviewCollapsed ?? false, reasoningBlockCollapsed: stateValues.reasoningBlockCollapsed ?? true, chatFontSize: stateValues.chatFontSize, + interfaceFontScale: stateValues.interfaceFontScale, + terminalFontSize: stateValues.terminalFontSize, + editorFontSize: stateValues.editorFontSize, + spacingScale: stateValues.spacingScale, enterBehavior: stateValues.enterBehavior ?? "send", cloudUserInfo, cloudIsAuthenticated, diff --git a/webview-ui/playwright/gallery/stories.tsx b/webview-ui/playwright/gallery/stories.tsx index 85d6919db4..5847933877 100644 --- a/webview-ui/playwright/gallery/stories.tsx +++ b/webview-ui/playwright/gallery/stories.tsx @@ -415,6 +415,11 @@ export const stories: Record = { ) }, + "appearance-preview": async () => { + const { AppearancePreviewStory } = + await import("@/components/settings/__tests__/AppearancePreview.visual.fixture") + return + }, "ui-settings": async () => { const { UISettingsStory } = await import("@/components/settings/__tests__/UISettings.visual.fixture") return diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index 77ae4529c0..df127f5a13 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -142,7 +142,7 @@ const ChatRow = memo( const prevHeightRef = useRef(0) const [chatrow, { height }] = useSize( -
+
, ) diff --git a/webview-ui/src/components/chat/QueuedMessages.tsx b/webview-ui/src/components/chat/QueuedMessages.tsx index 5bfb6fdb48..ea8f1a5234 100644 --- a/webview-ui/src/components/chat/QueuedMessages.tsx +++ b/webview-ui/src/components/chat/QueuedMessages.tsx @@ -40,7 +40,7 @@ export const QueuedMessages = ({ queue, onRemove, onUpdate }: QueuedMessagesProp } return ( -
+
{t("queuedMessages.title")}
{queue.map((message, index) => { diff --git a/webview-ui/src/components/chat/TerminalOutput.tsx b/webview-ui/src/components/chat/TerminalOutput.tsx index 78684e3753..80a4870a5f 100644 --- a/webview-ui/src/components/chat/TerminalOutput.tsx +++ b/webview-ui/src/components/chat/TerminalOutput.tsx @@ -59,7 +59,7 @@ export const TerminalOutput: React.FC = ({ content, classNa style={{ fontFamily: "var(--vscode-editor-font-family, 'Cascadia Code', 'Fira Code', 'JetBrains Mono', 'Menlo', 'Monaco', 'Courier New', monospace)", - fontSize: "var(--vscode-editor-font-size, 13px)", + fontSize: "var(--zoo-terminal-font-size, var(--vscode-editor-font-size, 13px))", lineHeight: "var(--vscode-editor-line-height, 1.4)", whiteSpace: "pre-wrap", wordBreak: "break-word", diff --git a/webview-ui/src/components/common/CodeBlock.tsx b/webview-ui/src/components/common/CodeBlock.tsx index c9c5d85aa0..c1d07e6bc2 100644 --- a/webview-ui/src/components/common/CodeBlock.tsx +++ b/webview-ui/src/components/common/CodeBlock.tsx @@ -150,7 +150,7 @@ export const StyledPre = styled.div<{ white-space: ${({ wordwrap }) => (wordwrap === "false" ? "pre" : "pre-wrap")}; word-break: ${({ wordwrap }) => (wordwrap === "false" ? "normal" : "normal")}; overflow-wrap: ${({ wordwrap }) => (wordwrap === "false" ? "normal" : "break-word")}; - font-size: 0.95em; + font-size: var(--zoo-editor-font-size, 0.95em); font-family: var(--vscode-editor-font-family); } diff --git a/webview-ui/src/components/common/MarkdownBlock.tsx b/webview-ui/src/components/common/MarkdownBlock.tsx index 02f696553f..dfc51a7737 100644 --- a/webview-ui/src/components/common/MarkdownBlock.tsx +++ b/webview-ui/src/components/common/MarkdownBlock.tsx @@ -102,7 +102,7 @@ const StyledMarkdown = styled.div` "Helvetica Neue", sans-serif; - font-size: var(--zoo-chat-font-size, var(--vscode-font-size, 13px)); + font-size: calc(var(--zoo-chat-font-size, var(--vscode-font-size, 13px)) * var(--zoo-ui-scale, 1)); p, li, diff --git a/webview-ui/src/components/settings/AppearancePreview.tsx b/webview-ui/src/components/settings/AppearancePreview.tsx new file mode 100644 index 0000000000..eff255e47b --- /dev/null +++ b/webview-ui/src/components/settings/AppearancePreview.tsx @@ -0,0 +1,97 @@ +import type { CSSProperties } from "react" + +import { useAppTranslation } from "@/i18n/TranslationContext" +import { APPEARANCE_SETTINGS, clampAppearance, type AppearanceKey } from "@/utils/appearance" + +interface AppearancePreviewProps { + values: Partial> + chatFontSize?: number +} + +/** + * Live preview of the appearance settings using the *unsaved* values. + * + * It sets the same CSS custom properties the real UI reads, but only on this + * element, so the sample updates on every stepper click without touching the + * rest of the webview until the user presses Save. + */ +export const AppearancePreview = ({ values, chatFontSize }: AppearancePreviewProps) => { + const { t } = useAppTranslation() + + // Custom properties inherit, and the saved values live on . An unset value is therefore set + // to `initial` (the guaranteed-invalid value) rather than left out: leaving it out would inherit + // the saved value, so a reset would not show in the preview until after Save. `initial` makes + // var() fall through to the same fallback the live UI uses (e.g. the terminal follows VS Code's + // editor font size), so the preview never shows a size the chat would not. + const vars: Record = {} + for (const key of Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]) { + const setting = APPEARANCE_SETTINGS[key] + const v = clampAppearance(key, values[key]) + vars[setting.cssVar] = v === undefined ? "initial" : setting.toCss(v) + } + vars["--zoo-chat-font-size"] = chatFontSize ? `${chatFontSize}px` : "initial" + + const uiText: CSSProperties = { + fontSize: "calc(var(--zoo-chat-font-size, var(--vscode-font-size)) * var(--zoo-ui-scale, 1))", + } + const row: CSSProperties = { + padding: "calc(10px * var(--zoo-spacing-scale, 1)) calc(15px * var(--zoo-spacing-scale, 1))", + } + const mono: CSSProperties = { + fontFamily: "var(--vscode-editor-font-family, monospace)", + margin: 0, + padding: "6px 10px", + borderRadius: 4, + overflowX: "auto", + whiteSpace: "pre", + } + + return ( +
+
+ {t("settings:ui.appearance.preview")} +
+ +
+
+ {t("settings:ui.appearance.sample.you")} +
+
{t("settings:ui.appearance.sample.user")}
+
+ +
+
+ {t("settings:ui.appearance.sample.zoo")} +
+
{t("settings:ui.appearance.sample.assistant")}
+ +
+ {t("settings:ui.appearance.editorFontSize.label")} +
+
+					{'const isLoading = status === "saving"'}
+				
+ +
+ {t("settings:ui.appearance.terminalFontSize.label")} +
+
+					{"$ pnpm test\n✓ 42 passed"}
+				
+
+
+ ) +} diff --git a/webview-ui/src/components/settings/NumberStepper.tsx b/webview-ui/src/components/settings/NumberStepper.tsx new file mode 100644 index 0000000000..2b8d7c6cc4 --- /dev/null +++ b/webview-ui/src/components/settings/NumberStepper.tsx @@ -0,0 +1,120 @@ +import { useEffect, useState } from "react" +import { Minus, Plus, RotateCcw } from "lucide-react" + +import { cn } from "@/lib/utils" +import { type AppearanceSetting } from "@/utils/appearance" + +interface NumberStepperProps { + label: string + description: string + resetLabel: string + setting: AppearanceSetting + /** Undefined = unset (shows `setting.fallback`, reset disabled). */ + value?: number + onChange: (value: number | undefined) => void + testId: string +} + +/** + * `[ − ] [ value ] [ + ] unit ↺`. + * Typing is allowed; the value commits (clamped) on blur/Enter so partial + * input like "1" on the way to "120" is never saved or applied. + */ +export const NumberStepper = ({ + label, + description, + resetLabel, + setting, + value, + onChange, + testId, +}: NumberStepperProps) => { + const { min, max, step, fallback, unit } = setting + const current = value ?? fallback + const [draft, setDraft] = useState(String(current)) + + useEffect(() => setDraft(String(current)), [current]) + + const commit = (next: number) => { + if (!Number.isFinite(next)) { + setDraft(String(current)) + return + } + // An emptied box means "no entry", not 0: revert instead of clamping to the minimum. + if (draft.trim() === "" && next === 0) { + setDraft(String(current)) + return + } + const clamped = Math.min(max, Math.max(min, Math.round(next))) + setDraft(String(clamped)) + // Committing the default clears the override so VS Code changes still flow through. + onChange(clamped === fallback ? undefined : clamped) + } + + const buttonClass = + "flex items-center justify-center w-8 self-stretch bg-vscode-input-background text-vscode-foreground hover:bg-vscode-list-hoverBackground disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer" + + return ( +
+ +
+
+ + setDraft(e.target.value.replace(/[^\d]/g, ""))} + onBlur={() => commit(Number(draft))} + onKeyDown={(e) => { + if (e.key === "Enter") commit(Number(draft)) + if (e.key === "ArrowUp") { + e.preventDefault() + commit(current + step) + } + if (e.key === "ArrowDown") { + e.preventDefault() + commit(current - step) + } + }} + data-testid={`${testId}-input`} + /> + +
+ {unit} + +
+
{description}
+
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 6100a373e1..b096e0ec77 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -214,6 +214,10 @@ const SettingsView = forwardRef(({ onDone, t openRouterImageGenerationSelectedModel, reasoningBlockCollapsed, chatFontSize, + interfaceFontScale, + terminalFontSize, + editorFontSize, + spacingScale, enterBehavior, includeCurrentTime, includeCurrentCost, @@ -442,6 +446,11 @@ const SettingsView = forwardRef(({ onDone, t includeTaskHistoryInEnhance: includeTaskHistoryInEnhance ?? true, reasoningBlockCollapsed: reasoningBlockCollapsed ?? true, chatFontSize: chatFontSize ?? null, + // null (not undefined) so a reset survives JSON and clears the stored value + interfaceFontScale: interfaceFontScale ?? null, + terminalFontSize: terminalFontSize ?? null, + editorFontSize: editorFontSize ?? null, + spacingScale: spacingScale ?? null, enterBehavior: enterBehavior ?? "send", includeCurrentTime: includeCurrentTime ?? true, includeCurrentCost: includeCurrentCost ?? true, @@ -944,6 +953,10 @@ const SettingsView = forwardRef(({ onDone, t reasoningBlockCollapsed={reasoningBlockCollapsed ?? true} enterBehavior={enterBehavior ?? "send"} chatFontSize={chatFontSize ?? undefined} + interfaceFontScale={interfaceFontScale ?? undefined} + terminalFontSize={terminalFontSize ?? undefined} + editorFontSize={editorFontSize ?? undefined} + spacingScale={spacingScale ?? undefined} autoCloseZooOpenedFiles={autoCloseZooOpenedFiles} autoCloseZooOpenedFilesAfterUserEdited={autoCloseZooOpenedFilesAfterUserEdited} autoCloseZooOpenedNewFiles={autoCloseZooOpenedNewFiles} diff --git a/webview-ui/src/components/settings/UISettings.tsx b/webview-ui/src/components/settings/UISettings.tsx index 46353c26ad..ea730bb390 100644 --- a/webview-ui/src/components/settings/UISettings.tsx +++ b/webview-ui/src/components/settings/UISettings.tsx @@ -14,15 +14,24 @@ import { Section } from "./Section" import { SearchableSetting } from "./SearchableSetting" import { Slider, Button } from "../ui" import { ExtensionStateContextType } from "@/context/ExtensionStateContext" +import { APPEARANCE_SETTINGS, type AppearanceKey } from "@/utils/appearance" +import { NumberStepper } from "./NumberStepper" +import { AppearancePreview } from "./AppearancePreview" -export const CHAT_FONT_SIZE_MIN = 8 -export const CHAT_FONT_SIZE_MAX = 32 -export const CHAT_FONT_SIZE_DEFAULT = 13 +const APPEARANCE_KEYS = Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[] + +const CHAT_FONT_SIZE_MIN = 8 +const CHAT_FONT_SIZE_MAX = 32 +const CHAT_FONT_SIZE_DEFAULT = 13 interface UISettingsProps extends HTMLAttributes { reasoningBlockCollapsed: boolean enterBehavior: "send" | "newline" chatFontSize?: number + interfaceFontScale?: number + terminalFontSize?: number + editorFontSize?: number + spacingScale?: number autoCloseZooOpenedFiles?: boolean autoCloseZooOpenedFilesAfterUserEdited?: boolean autoCloseZooOpenedNewFiles?: boolean @@ -33,6 +42,10 @@ export const UISettings = ({ reasoningBlockCollapsed, enterBehavior, chatFontSize, + interfaceFontScale, + terminalFontSize, + editorFontSize, + spacingScale, autoCloseZooOpenedFiles, autoCloseZooOpenedFilesAfterUserEdited, autoCloseZooOpenedNewFiles, @@ -41,6 +54,13 @@ export const UISettings = ({ }: UISettingsProps) => { const { t } = useAppTranslation() + const appearance: Record = { + interfaceFontScale, + terminalFontSize, + editorFontSize, + spacingScale, + } + // Detect platform for dynamic modifier key display const primaryMod = useMemo(() => { const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0 @@ -160,6 +180,34 @@ export const UISettings = ({
+ {/* Appearance sizes: interface %, terminal px, editor px, spacing % */} + {APPEARANCE_KEYS.map((key) => ( + + { + setCachedStateField(key, value) + telemetryClient.capture("ui_settings_appearance_changed", { + key, + value: value ?? null, + }) + }} + testId={`appearance-${key}`} + /> + + ))} + + {/* Live preview of the (unsaved) size settings above */} + + {/* Auto-close Zoo opened files */} ({ + useAppTranslation: () => ({ t: (key: string) => key }), +})) + +const root = () => screen.getByTestId("appearance-preview") + +describe("AppearancePreview", () => { + it("resets every unset value to `initial`, so the live CSS fallback chain applies and nothing is inherited from ", () => { + render() + const style = root().style + for (const cssVar of [ + "--zoo-terminal-font-size", + "--zoo-editor-font-size", + "--zoo-ui-scale", + "--zoo-spacing-scale", + "--zoo-chat-font-size", + ]) { + expect(style.getPropertyValue(cssVar)).toBe("initial") + } + }) + + it("is not affected by a saved value on the root: a reset shows before Save", () => { + document.documentElement.style.setProperty("--zoo-terminal-font-size", "30px") + try { + render() + // The preview sets its own value for the property, so the root's 30px cannot reach it. + expect(root().style.getPropertyValue("--zoo-terminal-font-size")).toBe("initial") + } finally { + document.documentElement.style.removeProperty("--zoo-terminal-font-size") + } + }) + + it("sets the values the user has set, converted the way the live UI converts them, and resets the rest", () => { + render( + , + ) + const style = root().style + expect(style.getPropertyValue("--zoo-terminal-font-size")).toBe("18px") + expect(style.getPropertyValue("--zoo-ui-scale")).toBe("1.2") + expect(style.getPropertyValue("--zoo-spacing-scale")).toBe("initial") + expect(style.getPropertyValue("--zoo-editor-font-size")).toBe("initial") + }) + + it("clamps out-of-range values like the live UI", () => { + render() + expect(root().style.getPropertyValue("--zoo-spacing-scale")).toBe("2") + }) + + it("applies the chat font size only when one is set", () => { + const { rerender } = render() + expect(root().style.getPropertyValue("--zoo-chat-font-size")).toBe("initial") + rerender() + expect(root().style.getPropertyValue("--zoo-chat-font-size")).toBe("16px") + }) + + it("sizes the editor sample like the live code block when no editor size is set (0.95em of the chat text)", () => { + const { container } = render() + const sample = container.querySelector("pre")! + expect(sample.style.fontSize).toBe("var(--zoo-editor-font-size, 0.95em)") + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.fixture.tsx new file mode 100644 index 0000000000..f96bbab205 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.fixture.tsx @@ -0,0 +1,33 @@ +import { AppearancePreview } from "../AppearancePreview" +import { AppProviders } from "../../../../playwright/AppProviders" + +/** + * Two previews, one above the other: + * - "set": explicit sizes, so the stepper values show up in the sample. + * - "reset": every value unset while carries saved values. The preview must ignore the saved + * values (a reset shows before Save) and fall back to VS Code's sizes, like the live UI does. + */ +export function AppearancePreviewStory() { + return ( + +
+
+ +
+
+ +
+
+
+ ) +} diff --git a/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx b/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx new file mode 100644 index 0000000000..8420999716 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx @@ -0,0 +1,38 @@ +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 appearance preview in the VS Code ${theme.name} theme`, async ({ mount, page }) => { + const component = mountedStory(await mount("appearance-preview")) + await applyVisualTheme(page, theme) + // Saved values on , as the app writes them. The "reset" preview must not pick these up. + await page.evaluate(() => { + const root = document.documentElement + root.style.setProperty("--zoo-terminal-font-size", "30px") + root.style.setProperty("--zoo-editor-font-size", "30px") + root.style.setProperty("--zoo-ui-scale", "2") + root.style.setProperty("--zoo-spacing-scale", "2") + root.style.setProperty("--zoo-chat-font-size", "30px") + }) + const story = component.getByTestId("appearance-preview-story") + await expect(story.getByTestId("appearance-preview-set")).toBeVisible() + await expect(story.getByTestId("appearance-preview-reset")).toBeVisible() + await expect(story).toHaveScreenshot(`appearance-preview-${theme.name}.png`) + }) +} + +test("a reset preview ignores saved root values and uses the live fallbacks", async ({ mount, page }) => { + const component = mountedStory(await mount("appearance-preview")) + await page.evaluate(() => { + const root = document.documentElement + root.style.setProperty("--zoo-terminal-font-size", "30px") + root.style.setProperty("--zoo-ui-scale", "2") + }) + const reset = component.getByTestId("appearance-preview-reset").getByTestId("appearance-preview") + const terminal = reset.locator("pre").nth(1) + const size = await terminal.evaluate((el) => parseFloat(getComputedStyle(el).fontSize)) + // Not the saved 30px: the terminal falls back to VS Code's editor font size. + expect(size).toBeLessThan(30) + expect(await reset.evaluate((el) => getComputedStyle(el).getPropertyValue("--zoo-ui-scale").trim())).toBe("") +}) diff --git a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx new file mode 100644 index 0000000000..da3c2463c9 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx @@ -0,0 +1,148 @@ +import { fireEvent, render, screen } from "@testing-library/react" +import { describe, expect, it, vi } from "vitest" + +import { APPEARANCE_SETTINGS } from "@/utils/appearance" + +import { NumberStepper } from "../NumberStepper" + +const setting = APPEARANCE_SETTINGS.terminalFontSize // 8–32 px, step 1, fallback 12 + +const setup = (props: Partial> = {}) => { + const onChange = vi.fn() + render( + , + ) + return { onChange, input: screen.getByTestId("t-input") as HTMLInputElement } +} + +describe("NumberStepper", () => { + it("shows the fallback when unset and hides reset", () => { + const { input } = setup() + expect(input.value).toBe("12") + expect(screen.getByTestId("t-reset").className).toContain("invisible") + }) + + it("shows the stored value and an active reset", () => { + const { input } = setup({ value: 16 }) + expect(input.value).toBe("16") + expect(screen.getByTestId("t-reset").className).not.toContain("invisible") + }) + + it("increments and decrements by the step", () => { + const { onChange } = setup({ value: 16 }) + fireEvent.click(screen.getByTestId("t-increment")) + expect(onChange).toHaveBeenLastCalledWith(17) + fireEvent.click(screen.getByTestId("t-decrement")) + expect(onChange).toHaveBeenLastCalledWith(15) + }) + + it("clears the override when stepping back to the default", () => { + const { onChange } = setup({ value: 13 }) + fireEvent.click(screen.getByTestId("t-decrement")) // 12 == fallback + expect(onChange).toHaveBeenLastCalledWith(undefined) + }) + + it("disables the buttons at the limits", () => { + setup({ value: setting.max }) + expect((screen.getByTestId("t-increment") as HTMLButtonElement).disabled).toBe(true) + expect((screen.getByTestId("t-decrement") as HTMLButtonElement).disabled).toBe(false) + }) + + it("disables decrement at the minimum", () => { + setup({ value: setting.min }) + expect((screen.getByTestId("t-decrement") as HTMLButtonElement).disabled).toBe(true) + }) + + it("does not commit while typing, then commits clamped on blur", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "999" } }) + expect(onChange).not.toHaveBeenCalled() + fireEvent.blur(input) + expect(onChange).toHaveBeenCalledWith(setting.max) + expect(input.value).toBe(String(setting.max)) + }) + + it("commits on Enter and strips non-digits", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "2a0" } }) + expect(input.value).toBe("20") + fireEvent.keyDown(input, { key: "Enter" }) + expect(onChange).toHaveBeenCalledWith(20) + }) + + it("supports arrow keys", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.keyDown(input, { key: "ArrowUp" }) + expect(onChange).toHaveBeenLastCalledWith(17) + fireEvent.keyDown(input, { key: "ArrowDown" }) + expect(onChange).toHaveBeenLastCalledWith(15) + }) + + it("reverts an empty entry to the current value", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "" } }) + fireEvent.blur(input) + expect(input.value).toBe("16") + expect(onChange).not.toHaveBeenCalledWith(NaN) + }) + + it("clamps a typed zero up to the minimum (a real 0, unlike an emptied box)", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "0" } }) + fireEvent.blur(input) + expect(onChange).toHaveBeenCalledWith(setting.min) + }) + + it("reset clears the override", () => { + const { onChange } = setup({ value: 20 }) + fireEvent.click(screen.getByTestId("t-reset")) + expect(onChange).toHaveBeenCalledWith(undefined) + }) + + it("reverts when the typed number is too large to be finite", () => { + const { onChange, input } = setup({ value: 16 }) + // 400 digits parse to Infinity. + fireEvent.change(input, { target: { value: "9".repeat(400) } }) + fireEvent.blur(input) + expect(onChange).not.toHaveBeenCalled() + expect(input.value).toBe("16") + }) + + it("re-syncs the draft when the value changes from outside", () => { + const { rerender } = (() => { + const r = render( + , + ) + return r + })() + expect((screen.getByTestId("x-input") as HTMLInputElement).value).toBe("14") + rerender( + , + ) + expect((screen.getByTestId("x-input") as HTMLInputElement).value).toBe("20") + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx b/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx index 4e61f0fcff..245d50a05a 100644 --- a/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx @@ -176,4 +176,67 @@ describe("UISettings", () => { }) }) }) + + describe("appearance steppers", () => { + const keys = ["interfaceFontScale", "terminalFontSize", "editorFontSize", "spacingScale"] as const + + it("renders all four size controls, in the design order, with defaults", () => { + const { getByTestId } = render() + const inputs = keys.map((k) => (getByTestId(`appearance-${k}-input`) as HTMLInputElement).value) + expect(inputs).toEqual(["100", "12", "13", "100"]) + }) + + it("shows the saved values", () => { + const { getByTestId } = render( + , + ) + expect((getByTestId("appearance-interfaceFontScale-input") as HTMLInputElement).value).toBe("120") + expect((getByTestId("appearance-terminalFontSize-input") as HTMLInputElement).value).toBe("14") + expect((getByTestId("appearance-editorFontSize-input") as HTMLInputElement).value).toBe("15") + expect((getByTestId("appearance-spacingScale-input") as HTMLInputElement).value).toBe("80") + }) + + it.each([ + ["interfaceFontScale", 105], + ["terminalFontSize", 13], + ["editorFontSize", 14], + ["spacingScale", 105], + ] as const)("stores %s as %s when incremented from the default", (key, expected) => { + const setCachedStateField = vi.fn() + const { getByTestId } = render() + fireEvent.click(getByTestId(`appearance-${key}-increment`)) + expect(setCachedStateField).toHaveBeenCalledWith(key, expected) + }) + + it("reset clears the stored value (undefined → null on save)", () => { + const setCachedStateField = vi.fn() + const { getByTestId } = render( + , + ) + fireEvent.click(getByTestId("appearance-terminalFontSize-reset")) + expect(setCachedStateField).toHaveBeenCalledWith("terminalFontSize", undefined) + }) + + it("records telemetry for changes", () => { + const { getByTestId } = render() + fireEvent.click(getByTestId("appearance-editorFontSize-increment")) + expect(telemetryClient.capture).toHaveBeenCalledWith("ui_settings_appearance_changed", { + key: "editorFontSize", + value: 14, + }) + }) + + it("previews the unsaved values live", () => { + const { getByTestId } = render() + const preview = getByTestId("appearance-preview") + expect(preview.style.getPropertyValue("--zoo-ui-scale")).toBe("1.5") + expect(preview.style.getPropertyValue("--zoo-spacing-scale")).toBe("0.5") + }) + }) }) diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index c4fa00f479..3e2cc40968 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -34,6 +34,7 @@ import { CustomSupportPrompts } from "@roo/support-prompt" import { experimentDefault } from "@roo/experiments" import { vscode } from "@src/utils/vscode" +import { applyAppearanceVariables } from "@src/utils/appearance" import { convertTextMateToHljs } from "@src/utils/textMateToHljs" export interface ExtensionStateContextType extends ExtensionState { @@ -131,6 +132,10 @@ export interface ExtensionStateContextType extends ExtensionState { setHistoryPreviewCollapsed: (value: boolean) => void setReasoningBlockCollapsed: (value: boolean) => void chatFontSize?: number + interfaceFontScale?: number + terminalFontSize?: number + editorFontSize?: number + spacingScale?: number setChatFontSize: (value: number | undefined) => void enterBehavior?: "send" | "newline" setEnterBehavior: (value: "send" | "newline") => void @@ -533,11 +538,26 @@ export const ExtensionStateContextProvider: React.FC<{ } }, [state.chatFontSize]) + // Appearance scales/sizes. Unset values remove the inline override so the + // stylesheet defaults in index.css (100% / VS Code's sizes) apply. + useEffect(() => { + applyAppearanceVariables(document.documentElement, { + interfaceFontScale: state.interfaceFontScale, + terminalFontSize: state.terminalFontSize, + editorFontSize: state.editorFontSize, + spacingScale: state.spacingScale, + }) + }, [state.interfaceFontScale, state.terminalFontSize, state.editorFontSize, state.spacingScale]) + const contextValue: ExtensionStateContextType = { ...state, // `chatFontSize` is persisted as nullish (null on reset); normalize null to // undefined so it matches the context type and means "use VS Code default". chatFontSize: state.chatFontSize ?? undefined, + interfaceFontScale: state.interfaceFontScale ?? undefined, + terminalFontSize: state.terminalFontSize ?? undefined, + editorFontSize: state.editorFontSize ?? undefined, + spacingScale: state.spacingScale ?? undefined, reasoningBlockCollapsed: state.reasoningBlockCollapsed ?? true, didHydrateState, showWelcome, diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index d39d8edd6a..5a631162eb 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Tanca automaticament els fitxers nous creats", "description": "Quan esta activat, les pestanyes dels fitxers que Zoo ha creat (en lloc de modificar) tambe es tanquen automaticament despres d'acceptar el canvi." + }, + "appearance": { + "reset": "Restableix el valor per defecte", + "interfaceFontScale": { + "label": "Mida de la lletra de la interfície", + "description": "Escala tot el text de Zoo Code. El 100% coincideix amb VS Code." + }, + "terminalFontSize": { + "label": "Mida de la lletra del terminal", + "description": "Mida de la lletra de la sortida d'ordres mostrada al xat." + }, + "editorFontSize": { + "label": "Mida de la lletra de l'editor", + "description": "Mida de la lletra dels blocs de codi i dels diffs mostrats al xat." + }, + "spacingScale": { + "label": "Densitat de l'espaiat", + "description": "Farciment entre els missatges del xat. Un valor més baix és més compacte." + }, + "preview": "Previsualització", + "sample": { + "you": "Tu", + "zoo": "Zoo", + "user": "Afegeix un indicador de càrrega al botó Desa", + "assistant": "Fet. He afegit un indicador que es mostra mentre la sol·licitud està en curs." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 983db1df5d..ce9e4b4d06 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Neu erstellte Dateien automatisch schließen", "description": "Wenn aktiviert, werden Tabs für Dateien, die Zoo neu erstellt hat (anstatt sie zu bearbeiten), nach dem Akzeptieren der Änderung ebenfalls automatisch geschlossen." + }, + "appearance": { + "reset": "Auf Standard zurücksetzen", + "interfaceFontScale": { + "label": "Schriftgröße der Oberfläche", + "description": "Skaliert den gesamten Zoo-Code-Text. 100 % entspricht VS Code." + }, + "terminalFontSize": { + "label": "Schriftgröße des Terminals", + "description": "Schriftgröße für die im Chat angezeigte Befehlsausgabe." + }, + "editorFontSize": { + "label": "Schriftgröße des Editors", + "description": "Schriftgröße für Codeblöcke und Diffs im Chat." + }, + "spacingScale": { + "label": "Abstandsdichte", + "description": "Innenabstand zwischen Chat-Nachrichten. Niedriger ist kompakter." + }, + "preview": "Vorschau", + "sample": { + "you": "Du", + "zoo": "Zoo", + "user": "Füge der Schaltfläche „Speichern“ einen Ladeindikator hinzu", + "assistant": "Erledigt. Ich habe einen Spinner hinzugefügt, der angezeigt wird, solange die Anfrage läuft." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index ea924ce79e..b1c9862193 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -242,6 +242,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Auto-close newly created files", "description": "When enabled, tabs for files that Zoo created (rather than modified) will also be closed automatically after the edit is accepted." + }, + "appearance": { + "reset": "Reset to default", + "interfaceFontScale": { + "label": "Interface font size", + "description": "Scales all Zoo Code text. 100% matches VS Code." + }, + "terminalFontSize": { + "label": "Terminal font size", + "description": "Font size for command output shown in chat." + }, + "editorFontSize": { + "label": "Editor font size", + "description": "Font size for code blocks and diffs shown in chat." + }, + "spacingScale": { + "label": "Spacing density", + "description": "Padding between chat messages. Lower is more compact." + }, + "preview": "Preview", + "sample": { + "you": "You", + "zoo": "Zoo", + "user": "Add a loading spinner to the Save button", + "assistant": "Done. I added a spinner that shows while the request is in flight." + } } }, "prompts": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 57612bf3e5..3a07469c23 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Cerrar automaticamente los archivos nuevos creados", "description": "Cuando esta opcion esta activada, las pestanas de archivos que Zoo ha creado (en lugar de modificar) tambien se cierran automaticamente despues de aceptar la modificacion." + }, + "appearance": { + "reset": "Restablecer al valor predeterminado", + "interfaceFontScale": { + "label": "Tamaño de fuente de la interfaz", + "description": "Escala todo el texto de Zoo Code. El 100 % coincide con VS Code." + }, + "terminalFontSize": { + "label": "Tamaño de fuente del terminal", + "description": "Tamaño de fuente de la salida de comandos que se muestra en el chat." + }, + "editorFontSize": { + "label": "Tamaño de fuente del editor", + "description": "Tamaño de fuente de los bloques de código y los diffs que se muestran en el chat." + }, + "spacingScale": { + "label": "Densidad de espaciado", + "description": "Relleno entre los mensajes del chat. Un valor menor es más compacto." + }, + "preview": "Vista previa", + "sample": { + "you": "Tú", + "zoo": "Zoo", + "user": "Añade un indicador de carga al botón Guardar", + "assistant": "Listo. He añadido un indicador que se muestra mientras la solicitud está en curso." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index a91a5137d3..4c8045032b 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Fermer automatiquement les nouveaux fichiers créés", "description": "Quand cette option est activée, les onglets des fichiers que Zoo a créés (plutôt que modifiés) sont également fermés automatiquement après l'acceptation de la modification." + }, + "appearance": { + "reset": "Rétablir la valeur par défaut", + "interfaceFontScale": { + "label": "Taille de police de l'interface", + "description": "Met à l'échelle tout le texte de Zoo Code. 100 % correspond à VS Code." + }, + "terminalFontSize": { + "label": "Taille de police du terminal", + "description": "Taille de police de la sortie des commandes affichée dans le chat." + }, + "editorFontSize": { + "label": "Taille de police de l'éditeur", + "description": "Taille de police des blocs de code et des diffs affichés dans le chat." + }, + "spacingScale": { + "label": "Densité d'espacement", + "description": "Marge intérieure entre les messages du chat. Plus bas, plus compact." + }, + "preview": "Aperçu", + "sample": { + "you": "Vous", + "zoo": "Zoo", + "user": "Ajoute un indicateur de chargement au bouton Enregistrer", + "assistant": "Terminé. J'ai ajouté un indicateur qui s'affiche pendant que la requête est en cours." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index bc6e973623..43e926a4d8 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Nai banayi gayi files ko svachalit band karo", "description": "Saksham hone par, Zoo dvara banaayi gayi (sanshodhit nahin) files ki tabs ko bhi parivartan svikaar hone ke baad svachalit roop se band kar diya jaata hai." + }, + "appearance": { + "reset": "डिफ़ॉल्ट पर रीसेट करें", + "interfaceFontScale": { + "label": "इंटरफ़ेस फ़ॉन्ट आकार", + "description": "Zoo Code के सारे टेक्स्ट को स्केल करता है। 100% VS Code के बराबर है।" + }, + "terminalFontSize": { + "label": "टर्मिनल फ़ॉन्ट आकार", + "description": "चैट में दिखाए गए कमांड आउटपुट का फ़ॉन्ट आकार।" + }, + "editorFontSize": { + "label": "एडिटर फ़ॉन्ट आकार", + "description": "चैट में दिखाए गए कोड ब्लॉक और डिफ़ का फ़ॉन्ट आकार।" + }, + "spacingScale": { + "label": "स्पेसिंग घनत्व", + "description": "चैट संदेशों के बीच की पैडिंग। कम मान अधिक सघन होता है।" + }, + "preview": "पूर्वावलोकन", + "sample": { + "you": "आप", + "zoo": "Zoo", + "user": "Save बटन में लोडिंग स्पिनर जोड़ें", + "assistant": "हो गया। मैंने एक स्पिनर जोड़ा है जो अनुरोध चलने के दौरान दिखता है।" + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 3ed57f373e..db60af9c3b 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Tutup otomatis file baru yang dibuat", "description": "Saat diaktifkan, tab untuk file yang dibuat Zoo (bukan dimodifikasi) juga ditutup secara otomatis setelah perubahan diterima." + }, + "appearance": { + "reset": "Setel ulang ke default", + "interfaceFontScale": { + "label": "Ukuran font antarmuka", + "description": "Menskalakan semua teks Zoo Code. 100% sama dengan VS Code." + }, + "terminalFontSize": { + "label": "Ukuran font terminal", + "description": "Ukuran font untuk output perintah yang ditampilkan di chat." + }, + "editorFontSize": { + "label": "Ukuran font editor", + "description": "Ukuran font untuk blok kode dan diff yang ditampilkan di chat." + }, + "spacingScale": { + "label": "Kerapatan spasi", + "description": "Padding antar pesan chat. Nilai lebih rendah lebih ringkas." + }, + "preview": "Pratinjau", + "sample": { + "you": "Anda", + "zoo": "Zoo", + "user": "Tambahkan spinner pemuatan ke tombol Simpan", + "assistant": "Selesai. Saya menambahkan spinner yang tampil selama permintaan berlangsung." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index b708304e63..e9b06eea5d 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Chiudi automaticamente i nuovi file creati", "description": "Quando abilitata, le schede dei file che Zoo ha creato (invece di modificare) vengono chiuse automaticamente dopo l'accettazione della modifica." + }, + "appearance": { + "reset": "Ripristina predefinito", + "interfaceFontScale": { + "label": "Dimensione carattere dell'interfaccia", + "description": "Ridimensiona tutto il testo di Zoo Code. 100% corrisponde a VS Code." + }, + "terminalFontSize": { + "label": "Dimensione carattere del terminale", + "description": "Dimensione carattere dell'output dei comandi mostrato nella chat." + }, + "editorFontSize": { + "label": "Dimensione carattere dell'editor", + "description": "Dimensione carattere dei blocchi di codice e dei diff mostrati nella chat." + }, + "spacingScale": { + "label": "Densità della spaziatura", + "description": "Spaziatura interna tra i messaggi della chat. Un valore più basso è più compatto." + }, + "preview": "Anteprima", + "sample": { + "you": "Tu", + "zoo": "Zoo", + "user": "Aggiungi un indicatore di caricamento al pulsante Salva", + "assistant": "Fatto. Ho aggiunto un indicatore che compare mentre la richiesta è in corso." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index f6959b50dc..d1f65f50c3 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "新しく作成されたファイルを自動的に閉じる", "description": "有効にすると、Zooが作成した(変更ではなく)ファイルのタブも、変更を承認した後に自動的に閉じられます。" + }, + "appearance": { + "reset": "デフォルトに戻す", + "interfaceFontScale": { + "label": "インターフェースのフォントサイズ", + "description": "Zoo Code のすべてのテキストを拡大縮小します。100% は VS Code と同じです。" + }, + "terminalFontSize": { + "label": "ターミナルのフォントサイズ", + "description": "チャットに表示されるコマンド出力のフォントサイズ。" + }, + "editorFontSize": { + "label": "エディターのフォントサイズ", + "description": "チャットに表示されるコードブロックと diff のフォントサイズ。" + }, + "spacingScale": { + "label": "余白の密度", + "description": "チャットメッセージ間の余白。値が小さいほどコンパクトになります。" + }, + "preview": "プレビュー", + "sample": { + "you": "あなた", + "zoo": "Zoo", + "user": "保存ボタンに読み込み中スピナーを追加して", + "assistant": "完了しました。リクエスト処理中に表示されるスピナーを追加しました。" + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 6cadbd8a3b..a46c144e81 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "새로 만든 파일 자동 닫기", "description": "활성화 시, Zoo가 수정한 것이 아니라 새로 만든 파일의 탭도 변경 사항을 승인한 후 자동으로 닫힙니다." + }, + "appearance": { + "reset": "기본값으로 재설정", + "interfaceFontScale": { + "label": "인터페이스 글꼴 크기", + "description": "모든 Zoo Code 텍스트의 크기를 조절합니다. 100%는 VS Code와 같습니다." + }, + "terminalFontSize": { + "label": "터미널 글꼴 크기", + "description": "채팅에 표시되는 명령 출력의 글꼴 크기입니다." + }, + "editorFontSize": { + "label": "편집기 글꼴 크기", + "description": "채팅에 표시되는 코드 블록과 diff의 글꼴 크기입니다." + }, + "spacingScale": { + "label": "간격 밀도", + "description": "채팅 메시지 사이의 여백입니다. 낮을수록 더 촘촘합니다." + }, + "preview": "미리보기", + "sample": { + "you": "나", + "zoo": "Zoo", + "user": "저장 버튼에 로딩 스피너를 추가해 줘", + "assistant": "완료했습니다. 요청이 진행되는 동안 표시되는 스피너를 추가했습니다." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 992e9c53e0..39d70cf889 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Automatisch sluiten van nieuw gemaakte bestanden", "description": "Wanneer ingeschakeld, worden tabbladen van bestanden die Zoo heeft aangemaakt (in plaats van gewijzigd) ook automatisch gesloten nadat de wijziging is geaccepteerd." + }, + "appearance": { + "reset": "Standaardwaarde herstellen", + "interfaceFontScale": { + "label": "Lettergrootte van de interface", + "description": "Schaalt alle Zoo Code-tekst. 100% komt overeen met VS Code." + }, + "terminalFontSize": { + "label": "Lettergrootte van de terminal", + "description": "Lettergrootte voor de opdrachtuitvoer die in de chat wordt getoond." + }, + "editorFontSize": { + "label": "Lettergrootte van de editor", + "description": "Lettergrootte voor codeblokken en diffs in de chat." + }, + "spacingScale": { + "label": "Dichtheid van de witruimte", + "description": "Opvulling tussen chatberichten. Lager is compacter." + }, + "preview": "Voorbeeld", + "sample": { + "you": "Jij", + "zoo": "Zoo", + "user": "Voeg een laadspinner toe aan de knop Opslaan", + "assistant": "Klaar. Ik heb een spinner toegevoegd die wordt getoond zolang het verzoek loopt." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 459675b0e1..ded72ee954 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Automatycznie zamykaj nowo utworzone pliki", "description": "Gdy wlaczone, karty plikow, ktore Zoo utworzylo (zamiast zmodyfikowalo), sa rowniez automatycznie zamykane po zaakceptowaniu zmiany." + }, + "appearance": { + "reset": "Przywróć domyślne", + "interfaceFontScale": { + "label": "Rozmiar czcionki interfejsu", + "description": "Skaluje cały tekst Zoo Code. 100% odpowiada VS Code." + }, + "terminalFontSize": { + "label": "Rozmiar czcionki terminala", + "description": "Rozmiar czcionki danych wyjściowych poleceń wyświetlanych w czacie." + }, + "editorFontSize": { + "label": "Rozmiar czcionki edytora", + "description": "Rozmiar czcionki bloków kodu i różnic wyświetlanych w czacie." + }, + "spacingScale": { + "label": "Gęstość odstępów", + "description": "Odstęp między wiadomościami czatu. Niższa wartość oznacza zwartszy układ." + }, + "preview": "Podgląd", + "sample": { + "you": "Ty", + "zoo": "Zoo", + "user": "Dodaj wskaźnik ładowania do przycisku Zapisz", + "assistant": "Gotowe. Dodałem wskaźnik, który jest widoczny, gdy żądanie jest w toku." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 500babaaa8..de7858730b 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Fechar automaticamente novos arquivos criados", "description": "Quando ativada, as abas de arquivos que o Zoo criou (em vez de modificar) tambem sao fechadas automaticamente apos aceitar a modificacao." + }, + "appearance": { + "reset": "Restaurar padrão", + "interfaceFontScale": { + "label": "Tamanho da fonte da interface", + "description": "Dimensiona todo o texto do Zoo Code. 100% corresponde ao VS Code." + }, + "terminalFontSize": { + "label": "Tamanho da fonte do terminal", + "description": "Tamanho da fonte da saída de comandos exibida no chat." + }, + "editorFontSize": { + "label": "Tamanho da fonte do editor", + "description": "Tamanho da fonte dos blocos de código e diffs exibidos no chat." + }, + "spacingScale": { + "label": "Densidade de espaçamento", + "description": "Preenchimento entre as mensagens do chat. Menor é mais compacto." + }, + "preview": "Pré-visualização", + "sample": { + "you": "Você", + "zoo": "Zoo", + "user": "Adicione um indicador de carregamento ao botão Salvar", + "assistant": "Pronto. Adicionei um indicador que aparece enquanto a solicitação está em andamento." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 053ff0684d..214e8ea67a 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Автоматически закрывать новые созданные файлы", "description": "Если включено, вкладки файлов, которые Zoo создал (а не изменил), также автоматически закрываются после принятия изменения." + }, + "appearance": { + "reset": "Сбросить по умолчанию", + "interfaceFontScale": { + "label": "Размер шрифта интерфейса", + "description": "Масштабирует весь текст Zoo Code. 100% соответствует VS Code." + }, + "terminalFontSize": { + "label": "Размер шрифта терминала", + "description": "Размер шрифта вывода команд, показываемого в чате." + }, + "editorFontSize": { + "label": "Размер шрифта редактора", + "description": "Размер шрифта блоков кода и диффов, показываемых в чате." + }, + "spacingScale": { + "label": "Плотность отступов", + "description": "Отступы между сообщениями чата. Чем меньше значение, тем компактнее." + }, + "preview": "Предпросмотр", + "sample": { + "you": "Вы", + "zoo": "Zoo", + "user": "Добавь индикатор загрузки на кнопку «Сохранить»", + "assistant": "Готово. Я добавил индикатор, который отображается, пока выполняется запрос." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index b37f28d44d..091c1e6eb6 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Yeni olusturulan dosyalari otomatik kapat", "description": "Etkinlestirildiginde, Zoo'nun olusturdugu (degistirmedigi) dosyalarin sekmeleri de degisiklik kabul edildikten sonra otomatik olarak kapatilir." + }, + "appearance": { + "reset": "Varsayılana sıfırla", + "interfaceFontScale": { + "label": "Arayüz yazı tipi boyutu", + "description": "Tüm Zoo Code metnini ölçekler. %100, VS Code ile aynıdır." + }, + "terminalFontSize": { + "label": "Terminal yazı tipi boyutu", + "description": "Sohbette gösterilen komut çıktısının yazı tipi boyutu." + }, + "editorFontSize": { + "label": "Düzenleyici yazı tipi boyutu", + "description": "Sohbette gösterilen kod blokları ve diff'lerin yazı tipi boyutu." + }, + "spacingScale": { + "label": "Boşluk yoğunluğu", + "description": "Sohbet mesajları arasındaki dolgu. Düşük değer daha sıkışık görünür." + }, + "preview": "Önizleme", + "sample": { + "you": "Sen", + "zoo": "Zoo", + "user": "Kaydet düğmesine bir yükleniyor göstergesi ekle", + "assistant": "Tamam. İstek sürerken görünen bir gösterge ekledim." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 94843217ae..b4a1ee3f90 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "Tự động đóng các tệp mới tạo", "description": "Khi bật, các tab của các tệp mà Zoo đã tạo (thay vì chỉnh sửa) cũng sẽ tự động đóng sau khi chấp nhận thay đổi." + }, + "appearance": { + "reset": "Đặt lại về mặc định", + "interfaceFontScale": { + "label": "Cỡ chữ giao diện", + "description": "Thu phóng toàn bộ văn bản của Zoo Code. 100% khớp với VS Code." + }, + "terminalFontSize": { + "label": "Cỡ chữ terminal", + "description": "Cỡ chữ cho kết quả lệnh hiển thị trong chat." + }, + "editorFontSize": { + "label": "Cỡ chữ trình soạn thảo", + "description": "Cỡ chữ cho khối mã và diff hiển thị trong chat." + }, + "spacingScale": { + "label": "Mật độ khoảng cách", + "description": "Khoảng đệm giữa các tin nhắn chat. Giá trị thấp hơn sẽ gọn hơn." + }, + "preview": "Xem trước", + "sample": { + "you": "Bạn", + "zoo": "Zoo", + "user": "Thêm biểu tượng đang tải vào nút Lưu", + "assistant": "Xong. Tôi đã thêm một biểu tượng hiển thị khi yêu cầu đang được xử lý." + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 8be0fe1532..6770e7992c 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -1179,6 +1179,32 @@ "autoCloseZooOpenedNewFiles": { "label": "自动关闭新建的文件", "description": "启用后,Zoo 新建(而非修改)的文件标签页在接受更改后也会自动关闭。" + }, + "appearance": { + "reset": "恢复默认", + "interfaceFontScale": { + "label": "界面字体大小", + "description": "缩放所有 Zoo Code 文本。100% 与 VS Code 一致。" + }, + "terminalFontSize": { + "label": "终端字体大小", + "description": "聊天中显示的命令输出的字体大小。" + }, + "editorFontSize": { + "label": "编辑器字体大小", + "description": "聊天中显示的代码块和 diff 的字体大小。" + }, + "spacingScale": { + "label": "间距密度", + "description": "聊天消息之间的内边距。数值越小越紧凑。" + }, + "preview": "预览", + "sample": { + "you": "你", + "zoo": "Zoo", + "user": "给保存按钮添加一个加载动画", + "assistant": "完成。我添加了一个在请求进行时显示的加载动画。" + } } }, "skills": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 65eb5c67a5..86ce43a94d 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -189,6 +189,32 @@ "autoCloseZooOpenedNewFiles": { "label": "自動關閉新建立的檔案", "description": "啟用後,Zoo 新建(而非修改)的檔案分頁在接受變更後也會自動關閉。" + }, + "appearance": { + "reset": "還原為預設值", + "interfaceFontScale": { + "label": "介面字型大小", + "description": "縮放所有 Zoo Code 文字。100% 與 VS Code 相同。" + }, + "terminalFontSize": { + "label": "終端機字型大小", + "description": "聊天中顯示的指令輸出的字型大小。" + }, + "editorFontSize": { + "label": "編輯器字型大小", + "description": "聊天中顯示的程式碼區塊與 diff 的字型大小。" + }, + "spacingScale": { + "label": "間距密度", + "description": "聊天訊息之間的內距。數值越小越緊湊。" + }, + "preview": "預覽", + "sample": { + "you": "你", + "zoo": "Zoo", + "user": "為儲存按鈕加上載入動畫", + "assistant": "完成。我加入了一個在請求進行中顯示的載入動畫。" + } } }, "prompts": { diff --git a/webview-ui/src/index.css b/webview-ui/src/index.css index bccbdf7031..808063b3b9 100644 --- a/webview-ui/src/index.css +++ b/webview-ui/src/index.css @@ -27,10 +27,10 @@ @theme { --font-display: var(--vscode-font-family); - --text-xs: calc(var(--vscode-font-size) * 0.85); - --text-sm: calc(var(--vscode-font-size) * 0.9); - --text-base: var(--vscode-font-size); - --text-lg: calc(var(--vscode-font-size) * 1.1); + --text-xs: calc(var(--vscode-font-size) * var(--zoo-ui-scale, 1) * 0.85); + --text-sm: calc(var(--vscode-font-size) * var(--zoo-ui-scale, 1) * 0.9); + --text-base: calc(var(--vscode-font-size) * var(--zoo-ui-scale, 1)); + --text-lg: calc(var(--vscode-font-size) * var(--zoo-ui-scale, 1) * 1.1); --color-background: var(--background); --color-foreground: var(--foreground); @@ -266,6 +266,25 @@ html { * runtime. Scoped to chat rendering so it does not resize settings/other UI. */ --zoo-chat-font-size: var(--vscode-font-size); + + /* + * Appearance settings (UI tab). Each is overridden inline on by + * ExtensionStateContext only when the user sets it, so the defaults below + * reproduce the historical look exactly (scale 1, VS Code sizes, 10/15px). + */ + --zoo-ui-scale: 1; + --zoo-spacing-scale: 1; + --zoo-row-py: calc(10px * var(--zoo-spacing-scale)); + --zoo-row-px: calc(15px * var(--zoo-spacing-scale)); +} + +/* + * Interface font size scales the whole webview's base text. Tailwind's text-* + * tokens and most components derive from body font-size, so one rule covers + * chat, settings and history without touching each component. + */ +body { + font-size: calc(var(--vscode-font-size) * var(--zoo-ui-scale)); } body { @@ -550,6 +569,17 @@ input[cmdk-input]:focus { "liga" 1; } +/* + * Editor font size from the UI tab. Scoped to a class that is only present while + * the user has set a value, so the diff view keeps its original sizing otherwise. + */ +html.zoo-editor-font-set .diff-view, +html.zoo-editor-font-set .diff-view pre, +html.zoo-editor-font-set .diff-view code, +html.zoo-editor-font-set .diff-view .hljs { + font-size: var(--zoo-editor-font-size); +} + /* DiffView background tints via CSS classes instead of inline styles */ .diff-content-inserted { background-color: color-mix(in srgb, var(--vscode-diffEditor-insertedTextBackground) 70%, transparent); diff --git a/webview-ui/src/utils/__tests__/appearance.spec.ts b/webview-ui/src/utils/__tests__/appearance.spec.ts new file mode 100644 index 0000000000..8a22685fa3 --- /dev/null +++ b/webview-ui/src/utils/__tests__/appearance.spec.ts @@ -0,0 +1,63 @@ +import { APPEARANCE_SETTINGS, applyAppearanceVariables, clampAppearance } from "../appearance" + +describe("clampAppearance", () => { + it("passes through in-range integers", () => { + expect(clampAppearance("interfaceFontScale", 110)).toBe(110) + expect(clampAppearance("terminalFontSize", 14)).toBe(14) + }) + + it("clamps to the setting's range", () => { + expect(clampAppearance("interfaceFontScale", 10)).toBe(APPEARANCE_SETTINGS.interfaceFontScale.min) + expect(clampAppearance("editorFontSize", 999)).toBe(APPEARANCE_SETTINGS.editorFontSize.max) + }) + + it("rounds fractional input", () => { + expect(clampAppearance("spacingScale", 87.6)).toBe(88) + }) + + it("treats null/undefined/NaN as unset", () => { + expect(clampAppearance("spacingScale", undefined)).toBeUndefined() + expect(clampAppearance("spacingScale", null)).toBeUndefined() + expect(clampAppearance("spacingScale", NaN)).toBeUndefined() + }) +}) + +describe("applyAppearanceVariables", () => { + let root: HTMLElement + + beforeEach(() => { + root = document.createElement("div") + }) + + it("writes percent settings as unitless multipliers and px settings as px", () => { + applyAppearanceVariables(root, { + interfaceFontScale: 120, + terminalFontSize: 14, + editorFontSize: 13, + spacingScale: 80, + }) + expect(root.style.getPropertyValue("--zoo-ui-scale")).toBe("1.2") + expect(root.style.getPropertyValue("--zoo-terminal-font-size")).toBe("14px") + expect(root.style.getPropertyValue("--zoo-editor-font-size")).toBe("13px") + expect(root.style.getPropertyValue("--zoo-spacing-scale")).toBe("0.8") + }) + + it("removes overrides for unset values so stylesheet defaults apply", () => { + applyAppearanceVariables(root, { interfaceFontScale: 120, terminalFontSize: 14 }) + applyAppearanceVariables(root, { interfaceFontScale: undefined, terminalFontSize: null }) + expect(root.style.getPropertyValue("--zoo-ui-scale")).toBe("") + expect(root.style.getPropertyValue("--zoo-terminal-font-size")).toBe("") + }) + + it("marks the root only while an editor font size is set", () => { + applyAppearanceVariables(root, { editorFontSize: 15 }) + expect(root.classList.contains("zoo-editor-font-set")).toBe(true) + applyAppearanceVariables(root, { editorFontSize: undefined }) + expect(root.classList.contains("zoo-editor-font-set")).toBe(false) + }) + + it("clamps out-of-range values before writing", () => { + applyAppearanceVariables(root, { spacingScale: 1000 }) + expect(root.style.getPropertyValue("--zoo-spacing-scale")).toBe("2") + }) +}) diff --git a/webview-ui/src/utils/appearance.ts b/webview-ui/src/utils/appearance.ts new file mode 100644 index 0000000000..af83084b39 --- /dev/null +++ b/webview-ui/src/utils/appearance.ts @@ -0,0 +1,86 @@ +/** + * User-configurable appearance settings: interface text scale, terminal and + * editor (code) font sizes, and spacing scale. + * + * Each value maps to one CSS custom property on ; index.css owns the + * defaults and every consumer, so components never read these settings. + * Unset (undefined/null) removes the override and restores the default. + */ + +export interface AppearanceSetting { + min: number + max: number + step: number + /** Value shown in the stepper when the setting is unset. */ + fallback: number + unit: "%" | "px" + cssVar: string + toCss: (value: number) => string +} + +export const APPEARANCE_SETTINGS = { + interfaceFontScale: { + min: 50, + max: 200, + step: 5, + fallback: 100, + unit: "%", + cssVar: "--zoo-ui-scale", + toCss: (v) => String(v / 100), + }, + terminalFontSize: { + min: 8, + max: 32, + step: 1, + fallback: 12, + unit: "px", + cssVar: "--zoo-terminal-font-size", + toCss: (v) => `${v}px`, + }, + editorFontSize: { + min: 8, + max: 32, + step: 1, + fallback: 13, + unit: "px", + cssVar: "--zoo-editor-font-size", + toCss: (v) => `${v}px`, + }, + spacingScale: { + min: 50, + max: 200, + step: 5, + fallback: 100, + unit: "%", + cssVar: "--zoo-spacing-scale", + toCss: (v) => String(v / 100), + }, +} satisfies Record + +export type AppearanceKey = keyof typeof APPEARANCE_SETTINGS +export type AppearanceValues = Partial> + +/** Clamps to the setting's range and snaps to an integer; non-finite → undefined. */ +export function clampAppearance(key: AppearanceKey, value: number | null | undefined): number | undefined { + if (typeof value !== "number" || !Number.isFinite(value)) return undefined + const { min, max } = APPEARANCE_SETTINGS[key] + return Math.min(max, Math.max(min, Math.round(value))) +} + +/** Present on while the user has set an editor font size. */ +export const EDITOR_FONT_SET_CLASS = "zoo-editor-font-set" + +/** Writes (or clears) every appearance CSS variable on `root`. */ +export function applyAppearanceVariables(root: HTMLElement, values: AppearanceValues): void { + for (const key of Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]) { + const setting = APPEARANCE_SETTINGS[key] + const value = clampAppearance(key, values[key]) + if (value === undefined) { + root.style.removeProperty(setting.cssVar) + } else { + root.style.setProperty(setting.cssVar, setting.toCss(value)) + } + // Lets index.css apply the editor size to the diff view only while it is set. + if (key === "editorFontSize") root.classList.toggle(EDITOR_FONT_SET_CLASS, value !== undefined) + } +} From 5db31a8d4bd34d6cc68c5a8131a9bf39099057e9 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 09:23:16 -0700 Subject: [PATCH 02/42] test(visual): add appearance preview baselines and refresh UI settings --- .../appearance-preview-dark.png | Bin 0 -> 34940 bytes ...appearance-preview-high-contrast-light.png | Bin 0 -> 35880 bytes .../appearance-preview-high-contrast.png | Bin 0 -> 35088 bytes .../appearance-preview-light.png | Bin 0 -> 35300 bytes .../__screenshots__/ui-settings-dark.png | Bin 48865 -> 86256 bytes .../ui-settings-high-contrast-light.png | Bin 49625 -> 88320 bytes .../ui-settings-high-contrast.png | Bin 49810 -> 88266 bytes .../__screenshots__/ui-settings-light.png | Bin 49285 -> 87280 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-dark.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-high-contrast-light.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-high-contrast.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-light.png diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f57aca01b60ace43a918d7a5d94cb10fa427621f GIT binary patch literal 34940 zcmb@OWmH^km!@%dcXx;25TtMjPJrMN2o@x`yL*BK*8sttP`FEgg5d5F+#TldPJcbq zYfVr0tTq3Dsyg+Y^T^)!weL-ν7c3JD4n6coCGytD=s6m%gJ6wFs77~n5B+k&c4 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-high-contrast-light.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-high-contrast-light.png new file mode 100644 index 0000000000000000000000000000000000000000..751c957b97cc84e8e6ad1463b5cc3c270809fc56 GIT binary patch literal 35880 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�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 oWEt{*0myZ-Q~&?~ literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-light.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-preview-light.png new file mode 100644 index 0000000000000000000000000000000000000000..78f4089f8d8b4b85a02d907d464fe6e16ef54c53 GIT binary patch literal 35300 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 bNY`GKJ5zU_pg)Cwa!pZIO{P}LJoJA7q$AI0 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/ui-settings-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/ui-settings-dark.png index b2f92d7b0485a2f4a8ae594e10a17bbe0a9c7598..fcd5bd829940e64ca30fe22bf514bdbbba78ea13 100644 GIT binary patch literal 86256 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

b1ro` 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 R0DpNPBcbrROw7>#zX8fu+yVdq diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/ui-settings-high-contrast-light.png b/webview-ui/src/components/settings/__tests__/__screenshots__/ui-settings-high-contrast-light.png index 3aa9092f5df77de761b6c41b5adf5dce03d5d13e..d5047e4be0d384059fa4731354f3e50d2fe4a222 100644 GIT binary patch literal 88320 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 literal 49625 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

FBN$v;2G&kwTY0+pXO^88nwS%D-Zc!ZaGs^ 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 OZm20~DwfJy1pO~CNzuOm literal 49810 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

    btY>~KkqSZj9j1wL^9-E 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 wAxl(xNI(SA{d%X_R2^>inpyv)S;1g{ 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 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/ui-settings-light.png b/webview-ui/src/components/settings/__tests__/__screenshots__/ui-settings-light.png index ca6aab1ec3e76f3a319a66a7496aa7ff96ec79c2..71fbf8be63ef477fc4b48011595511c30c12f854 100644 GIT binary patch literal 87280 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

    qMBB6o3j_)@l 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


    tTui`SWDXo*e{@RS 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 R1^=4|qC!%Fh5TBc{{~#&By0cx From dc8880ccb65c78b8cf347ea8b643abd05d01bea5 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 10:00:32 -0700 Subject: [PATCH 03/42] fix(ui): keep a stepper value that equals the shown default; tighten tests --- .../src/components/settings/NumberStepper.tsx | 6 ++++-- .../__tests__/AppearancePreview.visual.tsx | 15 --------------- .../settings/__tests__/NumberStepper.spec.tsx | 17 +++++++++++++---- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/webview-ui/src/components/settings/NumberStepper.tsx b/webview-ui/src/components/settings/NumberStepper.tsx index 2b8d7c6cc4..d4b915bc0d 100644 --- a/webview-ui/src/components/settings/NumberStepper.tsx +++ b/webview-ui/src/components/settings/NumberStepper.tsx @@ -47,8 +47,10 @@ export const NumberStepper = ({ } const clamped = Math.min(max, Math.max(min, Math.round(next))) setDraft(String(clamped)) - // Committing the default clears the override so VS Code changes still flow through. - onChange(clamped === fallback ? undefined : clamped) + // Always the number the user chose. `fallback` is only what the box shows while nothing is set; for + // the font sizes the real default is VS Code's own size, so a typed 12 must stay 12. Only Reset + // clears the override. + onChange(clamped) } const buttonClass = diff --git a/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx b/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx index 8420999716..867eb7bfab 100644 --- a/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx +++ b/webview-ui/src/components/settings/__tests__/AppearancePreview.visual.tsx @@ -21,18 +21,3 @@ for (const theme of visualThemes) { await expect(story).toHaveScreenshot(`appearance-preview-${theme.name}.png`) }) } - -test("a reset preview ignores saved root values and uses the live fallbacks", async ({ mount, page }) => { - const component = mountedStory(await mount("appearance-preview")) - await page.evaluate(() => { - const root = document.documentElement - root.style.setProperty("--zoo-terminal-font-size", "30px") - root.style.setProperty("--zoo-ui-scale", "2") - }) - const reset = component.getByTestId("appearance-preview-reset").getByTestId("appearance-preview") - const terminal = reset.locator("pre").nth(1) - const size = await terminal.evaluate((el) => parseFloat(getComputedStyle(el).fontSize)) - // Not the saved 30px: the terminal falls back to VS Code's editor font size. - expect(size).toBeLessThan(30) - expect(await reset.evaluate((el) => getComputedStyle(el).getPropertyValue("--zoo-ui-scale").trim())).toBe("") -}) diff --git a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx index da3c2463c9..4dd59d54b6 100644 --- a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx @@ -44,10 +44,19 @@ describe("NumberStepper", () => { expect(onChange).toHaveBeenLastCalledWith(15) }) - it("clears the override when stepping back to the default", () => { + it("keeps an explicit value that equals the displayed default: only Reset clears an override", () => { const { onChange } = setup({ value: 13 }) - fireEvent.click(screen.getByTestId("t-decrement")) // 12 == fallback - expect(onChange).toHaveBeenLastCalledWith(undefined) + fireEvent.click(screen.getByTestId("t-decrement")) // 12 == the shown fallback, but the user chose it + expect(onChange).toHaveBeenLastCalledWith(12) + expect(onChange).not.toHaveBeenCalledWith(undefined) + }) + + it("stores a typed value that equals the displayed default as that number", () => { + const { onChange, input } = setup() + fireEvent.change(input, { target: { value: "12" } }) + fireEvent.blur(input) + expect(onChange).toHaveBeenCalledTimes(1) + expect(onChange).toHaveBeenLastCalledWith(12) }) it("disables the buttons at the limits", () => { @@ -91,7 +100,7 @@ describe("NumberStepper", () => { fireEvent.change(input, { target: { value: "" } }) fireEvent.blur(input) expect(input.value).toBe("16") - expect(onChange).not.toHaveBeenCalledWith(NaN) + expect(onChange).not.toHaveBeenCalled() }) it("clamps a typed zero up to the minimum (a real 0, unlike an emptied box)", () => { From 27982f97fb074acd035be320a2f1c84df11d6297 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 12:01:54 -0700 Subject: [PATCH 04/42] fix(ui): make the settings save all-or-nothing and test appearance persistence --- packages/types/src/vscode-extension-host.ts | 1 + .../__tests__/webviewMessageHandler.spec.ts | 140 ++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 68 +++++++-- src/i18n/locales/ca/common.json | 1 + src/i18n/locales/de/common.json | 1 + src/i18n/locales/en/common.json | 1 + src/i18n/locales/es/common.json | 1 + src/i18n/locales/fr/common.json | 1 + src/i18n/locales/hi/common.json | 1 + src/i18n/locales/id/common.json | 1 + src/i18n/locales/it/common.json | 1 + src/i18n/locales/ja/common.json | 1 + src/i18n/locales/ko/common.json | 1 + src/i18n/locales/nl/common.json | 1 + src/i18n/locales/pl/common.json | 1 + src/i18n/locales/pt-BR/common.json | 1 + src/i18n/locales/ru/common.json | 1 + src/i18n/locales/tr/common.json | 1 + src/i18n/locales/vi/common.json | 1 + src/i18n/locales/zh-CN/common.json | 1 + src/i18n/locales/zh-TW/common.json | 1 + .../src/components/settings/SettingsView.tsx | 55 ++++++- .../SettingsView.change-detection.spec.tsx | 7 +- .../SettingsView.saveResult.spec.tsx | 119 +++++++++++++++ .../settings/__tests__/SettingsView.spec.tsx | 54 ++++++- .../SettingsView.unsaved-changes.spec.tsx | 7 +- .../settings/__tests__/saveAcknowledgement.ts | 28 ++++ .../__tests__/ExtensionStateContext.spec.tsx | 100 +++++++++++++ 28 files changed, 567 insertions(+), 30 deletions(-) create mode 100644 webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx create mode 100644 webview-ui/src/components/settings/__tests__/saveAcknowledgement.ts diff --git a/packages/types/src/vscode-extension-host.ts b/packages/types/src/vscode-extension-host.ts index 00f6de543f..3918bec7dd 100644 --- a/packages/types/src/vscode-extension-host.ts +++ b/packages/types/src/vscode-extension-host.ts @@ -50,6 +50,7 @@ export interface ExtensionMessage { | typeof VsCodeLmModelsMessageType.vsCodeLmModels | typeof VsCodeLmModelsMessageType.githubCopilotModels | typeof VsCodeLmModelsMessageType.githubCopilotSignInResult + | "settingsSaveResult" | "vsCodeLmApiAvailable" | "updatePrompt" | "systemPrompt" diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 685a7b11c1..8fd3239449 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -1905,6 +1905,146 @@ describe("webviewMessageHandler - mcpEnabled", () => { }) }) +describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { + const stored: Record = {} + + beforeEach(() => { + vi.clearAllMocks() + for (const key of Object.keys(stored)) delete stored[key] + Object.assign(stored, { soundEnabled: false, writeDelayMs: 1000, language: "en" }) + vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => stored[key] as never) + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { + stored[key] = value + }) + }) + + it("stores every setting and confirms the save by request id", async () => { + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-1", + updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, + }) + + expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-1", + success: true, + }) + expect(vscode.window.showErrorMessage).not.toHaveBeenCalled() + }) + + it("restores the settings already written when a later one fails, and reports the failure", async () => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { + if (key === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") + return real(key as never, value as never) + }) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-2", + updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, + }) + + // soundEnabled was written first, then rolled back; writeDelayMs never changed. + expect(stored).toMatchObject({ soundEnabled: false, writeDelayMs: 1000 }) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-2", + success: false, + error: "storage unavailable", + }) + expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalledWith( + expect.objectContaining({ success: true }), + ) + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("common:errors.settings_save_failed") + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("rolled back")) + // The webview is re-synced with what is really stored. + expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() + }) + + it("rolls back in reverse order, so the first-written value is restored last", async () => { + const order: string[] = [] + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { + order.push(`${key}=${String(value)}`) + if (key === "terminalCommandDelay" && value === 50) throw new Error("boom") + return real(key as never, value as never) + }) + stored.terminalCommandDelay = 0 + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-3", + updatedSettings: { soundEnabled: true, writeDelayMs: 2000, terminalCommandDelay: 50 }, + }) + + expect(stored).toMatchObject({ soundEnabled: false, writeDelayMs: 1000, terminalCommandDelay: 0 }) + + // Writes go forward in order; restores come back in the opposite order. + const failedAt = order.indexOf("terminalCommandDelay=50") + const restoreOrder = order + .slice(failedAt + 1) + .map((entry) => entry.split("=")[0]) + .filter((key, index, all) => all.indexOf(key) === index) + expect(restoreOrder.indexOf("writeDelayMs")).toBeGreaterThanOrEqual(0) + expect(restoreOrder.indexOf("soundEnabled")).toBeGreaterThan(restoreOrder.indexOf("writeDelayMs")) + }) + + it("keeps going and still reports the failure when a restore itself fails", async () => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { + if (key === "writeDelayMs") throw new Error("writeDelayMs is broken") + if (key === "soundEnabled" && value === false) throw new Error("cannot restore") + return real(key as never, value as never) + }) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-4", + updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, + }) + + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("Could not restore soundEnabled")) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ type: "settingsSaveResult", requestId: "save-4", success: false }), + ) + }) + + it("reports a non-Error failure by its text", async () => { + vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValue("plain string failure") + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-5", + updatedSettings: { soundEnabled: true }, + }) + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ success: false, error: "plain string failure" }), + ) + }) + + it("still saves and re-syncs, without a result message, when the request has no id", async () => { + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { soundEnabled: true }, + }) + + expect(stored.soundEnabled).toBe(true) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() + expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() + }) + + it("does nothing when there are no settings to save", async () => { + await webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId: "save-6" }) + expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() + expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() + }) +}) + describe("webviewMessageHandler - destructiveCommandGuardEnabled", () => { beforeEach(() => { vi.clearAllMocks() diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index bd7c589958..fdf6bb3c9f 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -737,18 +737,20 @@ export const webviewMessageHandler = async ( } break - case "updateSettings": - if (message.updatedSettings) { - if (message.updatedSettings.destructiveCommandGuardEnabled === true) { + case "updateSettings": { + const updatedSettings = message.updatedSettings + const saveRequestId = message.requestId + if (updatedSettings) { + if (updatedSettings.destructiveCommandGuardEnabled === true) { try { const { ensureDcgInstalled } = await import("../../services/destructive-command-guard") const binaryPath = await ensureDcgInstalled(provider.context.globalStorageUri.fsPath) if (!binaryPath) { - message.updatedSettings.destructiveCommandGuardEnabled = false + updatedSettings.destructiveCommandGuardEnabled = false vscode.window.showErrorMessage(t("common:errors.destructiveCommandGuard.unavailable")) } } catch (error) { - message.updatedSettings.destructiveCommandGuardEnabled = false + updatedSettings.destructiveCommandGuardEnabled = false vscode.window.showErrorMessage( t("common:errors.destructiveCommandGuard.enableFailed", { error: error instanceof Error ? error.message : String(error), @@ -757,7 +759,8 @@ export const webviewMessageHandler = async ( } } - for (const [key, value] of Object.entries(message.updatedSettings)) { + /** Applies one setting (its side effect, then the stored value). Returns whether a value was stored. */ + const applySetting = async (key: string, value: unknown): Promise => { let newValue = value if (key === "language") { @@ -854,7 +857,7 @@ export const webviewMessageHandler = async ( } } else if (key === "experiments") { if (!value) { - continue + return false } newValue = { @@ -863,17 +866,60 @@ export const webviewMessageHandler = async ( } } else if (key === "customSupportPrompts") { if (!value) { - continue + return false } } - await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) + await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue as never) + return true } - await provider.postStateToWebview() - } + // Every key is snapshotted before it is written. If any write fails, the ones already applied are + // restored (stored value and side effect), so a save is all-or-nothing and the webview can keep + // the user's edits and let them retry. + const written: Array<{ key: string; previous: unknown }> = [] + try { + for (const [key, value] of Object.entries(updatedSettings)) { + written.push({ key, previous: provider.contextProxy.getValue(key as keyof RooCodeSettings) }) + await applySetting(key, value) + } + await provider.postStateToWebview() + if (saveRequestId) { + await provider.postMessageToWebview({ + type: "settingsSaveResult", + requestId: saveRequestId, + success: true, + }) + } + } catch (error) { + const reason = error instanceof Error ? error.message : String(error) + for (const { key, previous } of written.reverse()) { + try { + await applySetting(key, previous) + // Put back exactly what was stored, whatever defaulting the side effect applied. + await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) + } catch (rollbackError) { + provider.log( + `[updateSettings] Could not restore ${key}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`, + ) + } + } + provider.log(`[updateSettings] Save failed and was rolled back: ${reason}`) + vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: reason })) + await provider.postStateToWebview() + if (saveRequestId) { + await provider.postMessageToWebview({ + type: "settingsSaveResult", + requestId: saveRequestId, + success: false, + error: reason, + }) + } + } + } break + } case "terminalOperation": if (message.terminalOperation) { diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index 579cd6b7d7..bc6f64b125 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -62,6 +62,7 @@ "cannot_access_path": "No es pot accedir a la ruta {{path}}: {{error}}", "path_outside_workspace": "La ruta és fora de l'espai de treball", "settings_import_failed": "Ha fallat la importació de la configuració: {{error}}.", + "settings_save_failed": "No s'ha pogut desar la configuració i s'han restaurat els valors anteriors: {{error}}", "mistake_limit_guidance": "Això pot indicar un error en el procés de pensament del model o la incapacitat d'utilitzar una eina correctament, que es pot mitigar amb orientació de l'usuari (p. ex. \"Prova de dividir la tasca en passos més petits\").", "violated_organization_allowlist": "Ha fallat l'execució de la tasca: el perfil actual no és compatible amb la configuració de la teva organització", "condense_failed": "Ha fallat la condensació del context", diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 3d8175a77e..8ac78a072f 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Zugriff auf Pfad {{path}} nicht möglich: {{error}}", "path_outside_workspace": "Pfad liegt außerhalb des Arbeitsbereichs", "settings_import_failed": "Fehler beim Importieren der Einstellungen: {{error}}.", + "settings_save_failed": "Die Einstellungen konnten nicht gespeichert werden und wurden auf die vorherigen Werte zurückgesetzt: {{error}}", "mistake_limit_guidance": "Dies kann auf einen Fehler im Denkprozess des Modells oder die Unfähigkeit hinweisen, ein Tool richtig zu verwenden, was durch Benutzerführung behoben werden kann (z.B. \"Versuche, die Aufgabe in kleinere Schritte zu unterteilen\").", "violated_organization_allowlist": "Aufgabe konnte nicht ausgeführt werden: Das aktuelle Profil ist nicht kompatibel mit den Einstellungen deiner Organisation", "condense_failed": "Fehler beim Verdichten des Kontexts", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index a7d616028f..a16574650b 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Cannot access path {{path}}: {{error}}", "path_outside_workspace": "Path is outside the workspace", "settings_import_failed": "Settings import failed: {{error}}.", + "settings_save_failed": "Settings could not be saved and were restored to their previous values: {{error}}", "mistake_limit_guidance": "This may indicate a failure in the model's thought process or inability to use a tool properly, which can be mitigated with some user guidance (e.g. \"Try breaking down the task into smaller steps\").", "violated_organization_allowlist": "Failed to run task: the current profile isn't compatible with your organization settings", "condense_failed": "Failed to condense context", diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index 2eb6848f11..f5d2d1b060 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "No se puede acceder a la ruta {{path}}: {{error}}", "path_outside_workspace": "La ruta está fuera del espacio de trabajo", "settings_import_failed": "Error al importar la configuración: {{error}}.", + "settings_save_failed": "No se pudieron guardar los ajustes y se restauraron los valores anteriores: {{error}}", "mistake_limit_guidance": "Esto puede indicar un fallo en el proceso de pensamiento del modelo o la incapacidad de usar una herramienta correctamente, lo cual puede mitigarse con orientación del usuario (ej. \"Intenta dividir la tarea en pasos más pequeños\").", "violated_organization_allowlist": "Error al ejecutar la tarea: el perfil actual no es compatible con la configuración de tu organización", "condense_failed": "Error al condensar el contexto", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index b6b65a88de..3cfeeb4664 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Impossible d'accéder au chemin {{path}} : {{error}}", "path_outside_workspace": "Le chemin est à l'extérieur de l'espace de travail", "settings_import_failed": "Échec de l'importation des paramètres : {{error}}", + "settings_save_failed": "Impossible d'enregistrer les paramètres ; les valeurs précédentes ont été rétablies : {{error}}", "mistake_limit_guidance": "Cela peut indiquer un échec dans le processus de réflexion du modèle ou une incapacité à utiliser un outil correctement, ce qui peut être atténué avec des conseils de l'utilisateur (par ex. \"Essaie de diviser la tâche en étapes plus petites\").", "violated_organization_allowlist": "Échec de l'exécution de la tâche : le profil actuel n'est pas compatible avec les paramètres de votre organisation", "condense_failed": "Échec de la condensation du contexte", diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index f69b5adccf..d77a44f18e 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "पाथ {{path}} तक पहुंच नहीं पा रहे हैं: {{error}}", "path_outside_workspace": "पथ वर्कस्पेस से बाहर है", "settings_import_failed": "सेटिंग्स इम्पोर्ट करने में विफल: {{error}}।", + "settings_save_failed": "सेटिंग्स सहेजी नहीं जा सकीं और पिछले मान बहाल कर दिए गए: {{error}}", "mistake_limit_guidance": "यह मॉडल की सोच प्रक्रिया में विफलता या किसी टूल का सही उपयोग न कर पाने का संकेत हो सकता है, जिसे उपयोगकर्ता के मार्गदर्शन से ठीक किया जा सकता है (जैसे \"कार्य को छोटे चरणों में बांटने की कोशिश करें\")।", "violated_organization_allowlist": "कार्य चलाने में विफल: वर्तमान प्रोफ़ाइल आपके संगठन की सेटिंग्स के साथ संगत नहीं है", "condense_failed": "संदर्भ को संक्षिप्त करने में विफल", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index e401612bf3..a9a78a8c28 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Tidak dapat mengakses path {{path}}: {{error}}", "path_outside_workspace": "Path berada di luar workspace", "settings_import_failed": "Impor pengaturan gagal: {{error}}.", + "settings_save_failed": "Pengaturan tidak dapat disimpan dan dikembalikan ke nilai sebelumnya: {{error}}", "mistake_limit_guidance": "Ini mungkin menunjukkan kegagalan dalam proses pemikiran model atau ketidakmampuan untuk menggunakan tool dengan benar, yang dapat diatasi dengan beberapa panduan pengguna (misalnya \"Coba bagi tugas menjadi langkah-langkah yang lebih kecil\").", "violated_organization_allowlist": "Gagal menjalankan tugas: profil saat ini tidak kompatibel dengan pengaturan organisasi kamu", "condense_failed": "Gagal mengompres konteks", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index aeb984940a..ead87cfa11 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Impossibile accedere al percorso {{path}}: {{error}}", "path_outside_workspace": "Il percorso è fuori dall'area di lavoro", "settings_import_failed": "Importazione delle impostazioni fallita: {{error}}.", + "settings_save_failed": "Impossibile salvare le impostazioni; sono stati ripristinati i valori precedenti: {{error}}", "mistake_limit_guidance": "Questo può indicare un fallimento nel processo di pensiero del modello o l'incapacità di utilizzare correttamente uno strumento, che può essere mitigato con la guida dell'utente (ad es. \"Prova a suddividere l'attività in passaggi più piccoli\").", "violated_organization_allowlist": "Impossibile eseguire l'attività: il profilo corrente non è compatibile con le impostazioni della tua organizzazione", "condense_failed": "Impossibile condensare il contesto", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index a7ec0c4de3..d5532ea227 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "パス {{path}} にアクセスできません:{{error}}", "path_outside_workspace": "パスはワークスペースの外にあります", "settings_import_failed": "設定のインポートに失敗しました:{{error}}", + "settings_save_failed": "設定を保存できなかったため、以前の値に戻しました:{{error}}", "mistake_limit_guidance": "これは、モデルの思考プロセスの失敗やツールを適切に使用できないことを示している可能性があり、ユーザーのガイダンスによって軽減できます(例:「タスクをより小さなステップに分割してみてください」)。", "violated_organization_allowlist": "タスクの実行に失敗しました: 現在のプロファイルは組織の設定と互換性がありません", "condense_failed": "コンテキストの圧縮に失敗しました", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index 906652ac14..ff55cfc8f9 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "경로 {{path}}에 접근할 수 없습니다: {{error}}", "path_outside_workspace": "경로가 작업 영역 밖에 있습니다", "settings_import_failed": "설정 가져오기 실패: {{error}}.", + "settings_save_failed": "설정을 저장할 수 없어 이전 값으로 복원했습니다: {{error}}", "mistake_limit_guidance": "이는 모델의 사고 과정 실패나 도구를 제대로 사용하지 못하는 것을 나타낼 수 있으며, 사용자 가이드를 통해 완화할 수 있습니다 (예: \"작업을 더 작은 단계로 나누어 시도해보세요\").", "violated_organization_allowlist": "작업 실행 실패: 현재 프로필이 조직 설정과 호환되지 않습니다", "condense_failed": "컨텍스트 압축에 실패했습니다", diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index 34cdbbbe89..a3a5b61595 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Kan pad {{path}} niet openen: {{error}}", "path_outside_workspace": "Pad is buiten de werkomgeving", "settings_import_failed": "Importeren van instellingen mislukt: {{error}}.", + "settings_save_failed": "De instellingen konden niet worden opgeslagen en zijn teruggezet naar de vorige waarden: {{error}}", "mistake_limit_guidance": "Dit kan duiden op een fout in het denkproces van het model of het onvermogen om een tool correct te gebruiken, wat kan worden verminderd met gebruikersbegeleiding (bijv. \"Probeer de taak op te delen in kleinere stappen\").", "violated_organization_allowlist": "Taak uitvoeren mislukt: het huidige profiel is niet compatibel met de instellingen van uw organisatie", "condense_failed": "Comprimeren van context mislukt", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index 2a743fc009..cfdd0b67e0 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Nie można uzyskać dostępu do ścieżki {{path}}: {{error}}", "path_outside_workspace": "Ścieżka znajduje się poza obszarem roboczym", "settings_import_failed": "Nie udało się zaimportować ustawień: {{error}}.", + "settings_save_failed": "Nie udało się zapisać ustawień; przywrócono poprzednie wartości: {{error}}", "mistake_limit_guidance": "To może wskazywać na błąd w procesie myślowym modelu lub niezdolność do prawidłowego użycia narzędzia, co można złagodzić poprzez wskazówki użytkownika (np. \"Spróbuj podzielić zadanie na mniejsze kroki\").", "violated_organization_allowlist": "Nie udało się uruchomić zadania: bieżący profil nie jest kompatybilny z ustawieniami Twojej organizacji", "condense_failed": "Nie udało się skondensować kontekstu", diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index eaf1cae06b..bbe3a0193b 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -62,6 +62,7 @@ "cannot_access_path": "Não é possível acessar o caminho {{path}}: {{error}}", "path_outside_workspace": "O caminho está fora do espaço de trabalho", "settings_import_failed": "Falha ao importar configurações: {{error}}", + "settings_save_failed": "Não foi possível salvar as configurações; os valores anteriores foram restaurados: {{error}}", "mistake_limit_guidance": "Isso pode indicar uma falha no processo de pensamento do modelo ou incapacidade de usar uma ferramenta adequadamente, o que pode ser mitigado com orientação do usuário (ex. \"Tente dividir a tarefa em etapas menores\").", "violated_organization_allowlist": "Falha ao executar a tarefa: o perfil atual não é compatível com as configurações da sua organização", "condense_failed": "Falha ao condensar o contexto", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index 6f48365ec1..a020b49dcd 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Невозможно получить доступ к пути {{path}}: {{error}}", "path_outside_workspace": "Путь находится вне рабочего пространства", "settings_import_failed": "Не удалось импортировать настройки: {{error}}.", + "settings_save_failed": "Не удалось сохранить настройки; восстановлены прежние значения: {{error}}", "mistake_limit_guidance": "Это может указывать на сбой в процессе мышления модели или неспособность правильно использовать инструмент, что можно смягчить с помощью руководства пользователя (например, \"Попробуйте разбить задачу на более мелкие шаги\").", "violated_organization_allowlist": "Не удалось выполнить задачу: текущий профиль несовместим с настройками вашей организации", "condense_failed": "Не удалось сжать контекст", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index b5c543c405..a60d5ff7a9 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "{{path}} yoluna erişilemiyor: {{error}}", "path_outside_workspace": "Yol çalışma alanının dışında", "settings_import_failed": "Ayarlar içe aktarılamadı: {{error}}.", + "settings_save_failed": "Ayarlar kaydedilemedi ve önceki değerlere geri döndürüldü: {{error}}", "mistake_limit_guidance": "Bu, modelin düşünce sürecindeki bir başarısızlığı veya bir aracı düzgün kullanamama durumunu gösterebilir, bu da kullanıcı rehberliği ile hafifletilebilir (örn. \"Görevi daha küçük adımlara bölmeyi deneyin\").", "violated_organization_allowlist": "Görev yürütülemedi: Geçerli profil kuruluşunuzun ayarlarıyla uyumlu değil", "condense_failed": "Bağlam sıkıştırılamadı", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index cb2ed8e9b8..8c072c9b5b 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "Không thể truy cập đường dẫn {{path}}: {{error}}", "path_outside_workspace": "Đường dẫn nằm ngoài không gian làm việc", "settings_import_failed": "Nhập cài đặt thất bại: {{error}}.", + "settings_save_failed": "Không thể lưu cài đặt và đã khôi phục về giá trị trước đó: {{error}}", "mistake_limit_guidance": "Điều này có thể cho thấy sự thất bại trong quá trình suy nghĩ của mô hình hoặc không thể sử dụng công cụ đúng cách, có thể được giảm thiểu bằng hướng dẫn của người dùng (ví dụ: \"Hãy thử chia nhỏ nhiệm vụ thành các bước nhỏ hơn\").", "violated_organization_allowlist": "Không thể chạy tác vụ: hồ sơ hiện tại không tương thích với cài đặt của tổ chức của bạn", "condense_failed": "Không thể nén ngữ cảnh", diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 08cfe736b5..7ed9f1b617 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -63,6 +63,7 @@ "cannot_access_path": "无法访问路径 {{path}}:{{error}}", "path_outside_workspace": "路径位于工作区之外", "settings_import_failed": "设置导入失败:{{error}}。", + "settings_save_failed": "无法保存设置,已恢复为之前的值:{{error}}", "mistake_limit_guidance": "这可能表明模型思维过程失败或无法正确使用工具,可通过用户指导来缓解(例如\"尝试将任务分解为更小的步骤\")。", "violated_organization_allowlist": "执行任务失败:当前配置文件与您的组织设置不兼容", "condense_failed": "压缩上下文失败", diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index 92fdbaeb96..3d9c8d9858 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -58,6 +58,7 @@ "cannot_access_path": "無法存取路徑 {{path}}:{{error}}", "path_outside_workspace": "路徑位於工作區之外", "settings_import_failed": "設定匯入失敗:{{error}}。", + "settings_save_failed": "無法儲存設定,已還原為之前的值:{{error}}", "mistake_limit_guidance": "這可能表明模型思維過程失敗或無法正確使用工具,可透過使用者指導來緩解(例如「嘗試將工作分解為更小的步驟」)。", "violated_organization_allowlist": "執行工作失敗:目前設定檔與您的組織設定不相容", "condense_failed": "壓縮上下文失敗", diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index b096e0ec77..a12192ceb7 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -134,6 +134,18 @@ const SettingsView = forwardRef(({ onDone, t const [isDiscardDialogShow, setDiscardDialogShow] = useState(false) const [isChangeDetected, setChangeDetected] = useState(false) + // The save currently waiting for the host's answer. The "unsaved changes" flag stays on until it succeeds. + const [pendingSaveId, setPendingSaveId] = useState(undefined) + const saveCounter = useRef(0) + // What the pending save must send once its settings have been stored. + const pendingSaveRef = useRef< + | { + apiConfiguration: typeof apiConfiguration + telemetrySetting: typeof telemetrySetting + debug: boolean | undefined + } + | undefined + >(undefined) const [errorMessage, setErrorMessage] = useState(undefined) const [activeTab, setActiveTab] = useState( targetSection && sectionNames.includes(targetSection as SectionName) @@ -385,9 +397,13 @@ const SettingsView = forwardRef(({ onDone, t const isSettingValid = !errorMessage const handleSubmit = () => { - if (isSettingValid) { + if (isSettingValid && !pendingSaveId) { + const saveId = `settings-save-${++saveCounter.current}` + pendingSaveRef.current = { apiConfiguration, telemetrySetting, debug: cachedState.debug } + setPendingSaveId(saveId) vscode.postMessage({ type: "updateSettings", + requestId: saveId, updatedSettings: { language, alwaysAllowReadOnly: alwaysAllowReadOnly ?? undefined, @@ -468,15 +484,40 @@ const SettingsView = forwardRef(({ onDone, t }, }) + // The rest of the save (API configuration, telemetry, debug) is sent once the host confirms the + // settings were stored, and the "unsaved changes" flag is cleared only then: see the + // `settingsSaveResult` listener below. A failed save leaves the user's edits in place to retry. + } + } + + useEffect(() => { + if (!pendingSaveId) return + + const onResult = (event: MessageEvent) => { + const message = event.data + if (message?.type !== "settingsSaveResult" || message.requestId !== pendingSaveId) return + + const saved = pendingSaveRef.current + pendingSaveRef.current = undefined + setPendingSaveId(undefined) + + if (!message.success || !saved) return + // These have more complex logic so they aren't (yet) handled // by the `updateSettings` message. - vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration }) - vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting }) - vscode.postMessage({ type: "debugSetting", bool: cachedState.debug }) - + vscode.postMessage({ + type: "upsertApiConfiguration", + text: currentApiConfigName, + apiConfiguration: saved.apiConfiguration, + }) + vscode.postMessage({ type: "telemetrySetting", text: saved.telemetrySetting }) + vscode.postMessage({ type: "debugSetting", bool: saved.debug }) setChangeDetected(false) } - } + + window.addEventListener("message", onResult) + return () => window.removeEventListener("message", onResult) + }, [pendingSaveId, currentApiConfigName]) const checkUnsaveChanges = useCallback( (then: () => void) => { @@ -705,7 +746,7 @@ const SettingsView = forwardRef(({ onDone, t variant={isSettingValid ? "primary" : "secondary"} className={!isSettingValid ? "!border-vscode-errorForeground" : ""} onClick={handleSubmit} - disabled={!isChangeDetected || !isSettingValid} + disabled={!isChangeDetected || !isSettingValid || !!pendingSaveId} data-testid="save-button"> {t("settings:common.save")} diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx index 6704aa1cf0..9f95ee3c47 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx @@ -5,6 +5,7 @@ import { renderWithExtensionState } from "@/utils/test-utils" import { vi, describe, it, expect, beforeEach, beforeAll } from "vitest" import { QueryClient } from "@tanstack/react-query" import React from "react" +import { saveAndConfirm } from "./saveAcknowledgement" // Increase timeout for slow CI environments configure({ asyncUtilTimeout: 10000 }) @@ -505,7 +506,7 @@ describe("SettingsView - Change Detection Fix", () => { fireEvent.click(screen.getByTestId("set-reasoning-default")) expect(screen.getByTestId("save-button")).toBeEnabled() - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(mockPostMessage) expect(mockPostMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", text: "default", @@ -557,7 +558,7 @@ describe("SettingsView - Change Detection Fix", () => { expect(screen.getByTestId("provider-value")).toHaveTextContent("baseten") mockPostMessage.mockClear() - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(mockPostMessage) expect(mockPostMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", text: "default", @@ -594,7 +595,7 @@ describe("SettingsView - Change Detection Fix", () => { expect(screen.getByTestId("provider-value")).toHaveTextContent("deepseek") mockPostMessage.mockClear() - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(mockPostMessage) expect(mockPostMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx new file mode 100644 index 0000000000..71642926ba --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -0,0 +1,119 @@ +import { fireEvent, screen, waitFor } from "@testing-library/react" +import { QueryClient } from "@tanstack/react-query" +import { beforeEach, describe, expect, it, vi } from "vitest" + +import { renderWithExtensionState } from "@/utils/test-utils" +import { vscode } from "@src/utils/vscode" + +import SettingsView from "../SettingsView" +import { answerSave, lastSaveRequestId } from "./saveAcknowledgement" + +vi.mock("@src/utils/vscode", () => ({ vscode: { postMessage: vi.fn() } })) + +vi.mock("@/utils/TelemetryClient", () => ({ telemetryClient: { capture: vi.fn() } })) + +const postMessage = vi.mocked(vscode.postMessage) + +const posted = (type: string) => + postMessage.mock.calls.map((call) => call[0] as { type: string }).filter((message) => message.type === type) + +const renderUiTab = () => + renderWithExtensionState(, { + queryClient: new QueryClient({ defaultOptions: { queries: { retry: false } } }), + }) + +/** Edit a setting so Save becomes available. */ +const makeAnEdit = async () => { + const checkbox = await screen.findByTestId("collapse-thinking-checkbox") + fireEvent.click(checkbox) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) +} + +describe("SettingsView – save acknowledgement", () => { + beforeEach(() => postMessage.mockClear()) + + it("sends the settings with a request id and holds back the follow-up messages until the host confirms", async () => { + renderUiTab() + await makeAnEdit() + + fireEvent.click(screen.getByTestId("save-button")) + + const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> + expect(save.requestId).toMatch(/^settings-save-\d+$/) + // Nothing else is sent, and the unsaved flag stays on, until the host answers. + expect(posted("upsertApiConfiguration")).toHaveLength(0) + expect(posted("telemetrySetting")).toHaveLength(0) + expect(posted("debugSetting")).toHaveLength(0) + expect(screen.getByTestId("save-button")).toBeDisabled() + }) + + it("sends the rest of the save and clears the unsaved flag once the host confirms", async () => { + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + + answerSave(lastSaveRequestId(postMessage), { success: true }) + + await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + expect(posted("telemetrySetting")).toHaveLength(1) + expect(posted("debugSetting")).toHaveLength(1) + // Saved: nothing left to save. + expect(screen.getByTestId("save-button")).toBeDisabled() + }) + + it("keeps the edits and the unsaved flag when the host reports a failure, so the user can retry", async () => { + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + + answerSave(lastSaveRequestId(postMessage), { success: false, error: "disk full" }) + + // No follow-up writes after a failed save. + expect(posted("upsertApiConfiguration")).toHaveLength(0) + expect(posted("telemetrySetting")).toHaveLength(0) + // The edit is still there, still unsaved, and Save is available again. + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + // The checkbox defaults to checked; the user unchecked it, and that edit survives the failed save. + expect((screen.getByTestId("collapse-thinking-checkbox") as HTMLInputElement).checked).toBe(false) + + // Retrying sends a fresh request with a new id. + const firstId = lastSaveRequestId(postMessage) + fireEvent.click(screen.getByTestId("save-button")) + expect(lastSaveRequestId(postMessage)).not.toBe(firstId) + expect(posted("updateSettings")).toHaveLength(2) + }) + + it("does not send a second save while one is waiting for the host", async () => { + renderUiTab() + await makeAnEdit() + + fireEvent.click(screen.getByTestId("save-button")) + fireEvent.click(screen.getByTestId("save-button")) + fireEvent.click(screen.getByTestId("save-button")) + + expect(posted("updateSettings")).toHaveLength(1) + }) + + it("ignores an answer for a different save, or one that arrives with no id", async () => { + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + + answerSave("settings-save-999", { success: true }) + answerSave(undefined, { success: true }) + + expect(posted("upsertApiConfiguration")).toHaveLength(0) + expect(screen.getByTestId("save-button")).toBeDisabled() + + // The real answer still works afterwards. + answerSave(lastSaveRequestId(postMessage), { success: true }) + await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + }) + + it("ignores a save result when nothing is being saved", async () => { + renderUiTab() + await screen.findByTestId("collapse-thinking-checkbox") + answerSave("settings-save-1", { success: true }) + expect(posted("upsertApiConfiguration")).toHaveLength(0) + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx index 0835f255f9..832ba70c68 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx @@ -8,6 +8,7 @@ import { DEFAULT_CHECKPOINT_TIMEOUT_SECONDS, type ProviderSettings } from "@roo- import type { ApiOptionsProps } from "../ApiOptions" import SettingsView from "../SettingsView" +import { saveAndConfirm } from "./saveAcknowledgement" vi.mock("@src/utils/vscode", () => ({ vscode: { postMessage: vi.fn() } })) @@ -479,7 +480,7 @@ describe("SettingsView - Sound Settings", () => { // Pick a size, then Save — the boundary should forward it to the host. fireEvent.change(slider, { target: { value: "18" } }) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(vi.mocked(vscode.postMessage)) expect(vscode.postMessage).toHaveBeenCalledWith( expect.objectContaining({ @@ -490,7 +491,7 @@ describe("SettingsView - Sound Settings", () => { // Reset clears the override; it is persisted as null (not undefined). fireEvent.click(within(getSettingsContent()).getByTestId("chat-font-size-reset")) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(vi.mocked(vscode.postMessage)) expect(vscode.postMessage).toHaveBeenCalledWith( expect.objectContaining({ @@ -500,6 +501,47 @@ describe("SettingsView - Sound Settings", () => { ) }) + it("saves all four appearance values, and persists null for each after a reset", () => { + const { activateTab, getSettingsContent } = renderSettingsView() + activateTab("ui") + + const values = { + interfaceFontScale: 120, + terminalFontSize: 14, + editorFontSize: 15, + spacingScale: 80, + } + for (const [key, value] of Object.entries(values)) { + const input = within(getSettingsContent()).getByTestId(`appearance-${key}-input`) + fireEvent.change(input, { target: { value: String(value) } }) + fireEvent.blur(input) + } + saveAndConfirm(vi.mocked(vscode.postMessage)) + + expect(vscode.postMessage).toHaveBeenCalledWith( + expect.objectContaining({ + type: "updateSettings", + updatedSettings: expect.objectContaining(values), + }), + ) + + for (const key of Object.keys(values)) { + fireEvent.click(within(getSettingsContent()).getByTestId(`appearance-${key}-reset`)) + } + saveAndConfirm(vi.mocked(vscode.postMessage)) + + const saves = vi + .mocked(vscode.postMessage) + .mock.calls.map(([message]) => message as { type?: string; updatedSettings?: Record }) + .filter((message) => message.type === "updateSettings") + expect(saves.at(-1)?.updatedSettings).toMatchObject({ + interfaceFontScale: null, + terminalFontSize: null, + editorFontSize: null, + spacingScale: null, + }) + }) + it("saves fallback defaults for checkpoint and terminal settings", async () => { const { activateTab, getSettingsContent } = renderSettingsView({ enableCheckpoints: undefined, @@ -1010,7 +1052,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { fireEvent.click(screen.getByTestId("set-strict-false")) // Toggling buffers in cachedState; nothing is persisted before Save. expect(vscode.postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(vi.mocked(vscode.postMessage)) expect(posted()).toEqual( expect.objectContaining({ type: "upsertApiConfiguration", @@ -1025,7 +1067,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { // toggling on from a stored false and saving has to put true in the payload. renderWithConfig({ openAiStrictToolSchemas: false }) fireEvent.click(screen.getByTestId("set-strict-true")) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(vi.mocked(vscode.postMessage)) expect(posted()?.apiConfiguration?.openAiStrictToolSchemas).toBe(true) }) @@ -1033,7 +1075,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { renderWithConfig({ openAiStrictToolSchemas: false }) fireEvent.click(screen.getByTestId("set-strict-true")) fireEvent.click(screen.getByTestId("set-strict-false")) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(vi.mocked(vscode.postMessage)) expect(posted()?.apiConfiguration?.openAiStrictToolSchemas).toBe(false) }) @@ -1044,7 +1086,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { expect(screen.getByTestId("received-strict").textContent).toBe("undefined") // Make a change elsewhere so Save is enabled, then save. fireEvent.click(screen.getByTestId("set-other-field")) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(vi.mocked(vscode.postMessage)) expect(posted()?.apiConfiguration?.openAiBaseUrl).toBe("https://example.test") expect(posted()?.apiConfiguration?.openAiStrictToolSchemas).toBeUndefined() }) diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx index 1bc4ab1afb..ff99be5002 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx @@ -7,6 +7,7 @@ import { QueryClient } from "@tanstack/react-query" import React from "react" import SettingsView from "../SettingsView" +import { saveAndConfirm } from "./saveAcknowledgement" import { vscode } from "@src/utils/vscode" const postMessage = vi.spyOn(vscode, "postMessage").mockImplementation(() => {}) @@ -664,7 +665,7 @@ describe("SettingsView - Unsaved Changes Detection", () => { }) expect(postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(postMessage) expect(postMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", @@ -717,7 +718,7 @@ describe("SettingsView - Unsaved Changes Detection", () => { expect(configuration.openAiCustomModelInfo?.reasoningEffort).toBe("low") expect(postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(postMessage) expect(postMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", text: "default", @@ -798,7 +799,7 @@ describe("SettingsView - Unsaved Changes Detection", () => { }) expect(postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - fireEvent.click(screen.getByTestId("save-button")) + saveAndConfirm(postMessage) expect(postMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", diff --git a/webview-ui/src/components/settings/__tests__/saveAcknowledgement.ts b/webview-ui/src/components/settings/__tests__/saveAcknowledgement.ts new file mode 100644 index 0000000000..2f24c431e4 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/saveAcknowledgement.ts @@ -0,0 +1,28 @@ +import { act, fireEvent, screen } from "@testing-library/react" + +// Only the recorded calls are read, so any `vi.fn()` or `vi.mocked(fn)` works. +interface PostMessage { + mock: { calls: ReadonlyArray> } +} + +/** The request id of the most recent `updateSettings` the component posted. */ +export const lastSaveRequestId = (postMessage: PostMessage): string | undefined => { + const saves = postMessage.mock.calls + .map((call) => call[0] as { type?: string; requestId?: string }) + .filter((message) => message?.type === "updateSettings") + return saves.at(-1)?.requestId +} + +/** Plays the extension host's answer to a save. */ +export const answerSave = (requestId: string | undefined, result: { success: boolean; error?: string }) => + act(() => { + window.dispatchEvent( + new MessageEvent("message", { data: { type: "settingsSaveResult", requestId, ...result } }), + ) + }) + +/** Clicks Save, then reports the host's success, so the follow-up messages (API config, telemetry) go out. */ +export const saveAndConfirm = (postMessage: PostMessage) => { + fireEvent.click(screen.getByTestId("save-button")) + answerSave(lastSaveRequestId(postMessage), { success: true }) +} diff --git a/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx b/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx index dc33af38d1..27412ce5f6 100644 --- a/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx +++ b/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx @@ -63,6 +63,33 @@ const ChatFontSizeTestComponent = () => { ) } +const AppearanceTestComponent = () => { + const { interfaceFontScale, terminalFontSize, editorFontSize, spacingScale } = useExtensionState() + + return ( +
    + {JSON.stringify({ + interfaceFontScale: interfaceFontScale ?? null, + terminalFontSize: terminalFontSize ?? null, + editorFontSize: editorFontSize ?? null, + spacingScale: spacingScale ?? null, + })} +
    + ) +} + +const sendState = (state: Partial) => + act(() => { + window.dispatchEvent(new MessageEvent("message", { data: { type: "state", state } })) + }) + +const APPEARANCE_VARS = [ + "--zoo-ui-scale", + "--zoo-terminal-font-size", + "--zoo-editor-font-size", + "--zoo-spacing-scale", +] as const + const ApiConfigTestComponent = () => { const { apiConfiguration, setApiConfiguration } = useExtensionState() @@ -326,6 +353,79 @@ describe("ExtensionStateContext", () => { expect(document.documentElement.style.getPropertyValue("--zoo-chat-font-size")).toBe("") }) + describe("appearance settings", () => { + const clearVars = () => { + for (const name of APPEARANCE_VARS) document.documentElement.style.removeProperty(name) + document.documentElement.classList.remove("zoo-editor-font-set") + } + const appearance = () => JSON.parse(screen.getByTestId("appearance").textContent!) + const renderAppearance = () => + render( + + + , + ) + + beforeEach(clearVars) + afterEach(clearVars) + + it("leaves every value unset and the CSS variables absent before any state arrives", () => { + renderAppearance() + + expect(appearance()).toEqual({ + interfaceFontScale: null, + terminalFontSize: null, + editorFontSize: null, + spacingScale: null, + }) + for (const name of APPEARANCE_VARS) expect(document.documentElement.style.getPropertyValue(name)).toBe("") + }) + + it("hydrates all four values from the host state and applies their CSS variables", () => { + renderAppearance() + + sendState({ interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 }) + + expect(appearance()).toEqual({ + interfaceFontScale: 120, + terminalFontSize: 14, + editorFontSize: 15, + spacingScale: 80, + }) + const style = document.documentElement.style + expect(style.getPropertyValue("--zoo-ui-scale")).toBe("1.2") + expect(style.getPropertyValue("--zoo-terminal-font-size")).toBe("14px") + expect(style.getPropertyValue("--zoo-editor-font-size")).toBe("15px") + expect(style.getPropertyValue("--zoo-spacing-scale")).toBe("0.8") + }) + + it("treats a null from the host (a saved reset) as unset and removes the CSS variables", () => { + renderAppearance() + sendState({ interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 }) + + sendState({ interfaceFontScale: null, terminalFontSize: null, editorFontSize: null, spacingScale: null }) + + expect(appearance()).toEqual({ + interfaceFontScale: null, + terminalFontSize: null, + editorFontSize: null, + spacingScale: null, + }) + for (const name of APPEARANCE_VARS) expect(document.documentElement.style.getPropertyValue(name)).toBe("") + }) + + it("updates one value without disturbing the others", () => { + renderAppearance() + sendState({ interfaceFontScale: 120, terminalFontSize: 14 }) + + sendState({ terminalFontSize: 18 }) + + expect(appearance()).toMatchObject({ interfaceFontScale: 120, terminalFontSize: 18 }) + expect(document.documentElement.style.getPropertyValue("--zoo-ui-scale")).toBe("1.2") + expect(document.documentElement.style.getPropertyValue("--zoo-terminal-font-size")).toBe("18px") + }) + }) + it("updates allowedCommands through setAllowedCommands", () => { render( From 18fddb736cfd3b65119c3f36830153077ccf46d7 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 12:36:37 -0700 Subject: [PATCH 05/42] chore(knip): treat webview test helpers under __tests__ as non-production --- knip.json | 1 + 1 file changed, 1 insertion(+) diff --git a/knip.json b/knip.json index 5f93aa1438..170eb68f56 100644 --- a/knip.json +++ b/knip.json @@ -48,6 +48,7 @@ "src/**/*.{ts,tsx}!", "../src/shared/*.ts!", "!src/utils/test-utils.tsx!", + "!src/**/__tests__/**!", "!src/vite-plugins/**!", "!src/**/*.visual.tsx!", "!src/**/*.visual.{fixture,i18n}.{ts,tsx}!" From 41894ae4748eb86a8f528d2de097a979ce55e451 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 13:04:59 -0700 Subject: [PATCH 06/42] fix(ui): always report the save result, bind it to the submitted profile, keep edits made mid-save --- .../__tests__/webviewMessageHandler.spec.ts | 37 ++++ src/core/webview/webviewMessageHandler.ts | 41 ++-- .../src/components/settings/SettingsView.tsx | 199 +++++++++++------- .../SettingsView.saveResult.spec.tsx | 36 +++- 4 files changed, 212 insertions(+), 101 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 8fd3239449..b4427387a8 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2038,6 +2038,43 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() }) + it("keeps a stored save and still reports success when the state refresh fails", async () => { + vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-7", + updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, + }) + + expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-7", + success: true, + }) + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("state unavailable")) + expect(vscode.window.showErrorMessage).not.toHaveBeenCalled() + }) + + it("still reports a failed save when the state refresh also fails", async () => { + vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValue(new Error("storage unavailable")) + vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-8", + updatedSettings: { soundEnabled: true }, + }) + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-8", + success: false, + error: "storage unavailable", + }) + }) + it("does nothing when there are no settings to save", async () => { await webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId: "save-6" }) expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index fdf6bb3c9f..920324c8ae 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -878,22 +878,14 @@ export const webviewMessageHandler = async ( // restored (stored value and side effect), so a save is all-or-nothing and the webview can keep // the user's edits and let them retry. const written: Array<{ key: string; previous: unknown }> = [] + let failure: string | undefined try { for (const [key, value] of Object.entries(updatedSettings)) { written.push({ key, previous: provider.contextProxy.getValue(key as keyof RooCodeSettings) }) await applySetting(key, value) } - - await provider.postStateToWebview() - if (saveRequestId) { - await provider.postMessageToWebview({ - type: "settingsSaveResult", - requestId: saveRequestId, - success: true, - }) - } } catch (error) { - const reason = error instanceof Error ? error.message : String(error) + failure = error instanceof Error ? error.message : String(error) for (const { key, previous } of written.reverse()) { try { await applySetting(key, previous) @@ -905,17 +897,26 @@ export const webviewMessageHandler = async ( ) } } - provider.log(`[updateSettings] Save failed and was rolled back: ${reason}`) - vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: reason })) + provider.log(`[updateSettings] Save failed and was rolled back: ${failure}`) + vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) + } + + // Notification phase: the outcome is already decided by the writes above. A failed refresh must neither + // undo a stored save nor keep the webview from receiving the result (it waits on it to re-enable Save). + try { await provider.postStateToWebview() - if (saveRequestId) { - await provider.postMessageToWebview({ - type: "settingsSaveResult", - requestId: saveRequestId, - success: false, - error: reason, - }) - } + } catch (error) { + provider.log( + `[updateSettings] Could not refresh the webview state: ${error instanceof Error ? error.message : String(error)}`, + ) + } + if (saveRequestId) { + await provider.postMessageToWebview({ + type: "settingsSaveResult", + requestId: saveRequestId, + success: failure === undefined, + ...(failure === undefined ? {} : { error: failure }), + }) } } break diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index a12192ceb7..6f22ee08e5 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -133,16 +133,24 @@ const SettingsView = forwardRef(({ onDone, t const { currentApiConfigName, listApiConfigMeta, uriScheme, settingsImportedAt, mode } = extensionState const [isDiscardDialogShow, setDiscardDialogShow] = useState(false) - const [isChangeDetected, setChangeDetected] = useState(false) + const [isChangeDetected, setChangeDetectedState] = useState(false) + // Bumped on every edit, so a save can tell whether the user changed something after it was submitted. + const editRevision = useRef(0) + const setChangeDetected = useCallback((detected: boolean) => { + if (detected) editRevision.current++ + setChangeDetectedState(detected) + }, []) // The save currently waiting for the host's answer. The "unsaved changes" flag stays on until it succeeds. const [pendingSaveId, setPendingSaveId] = useState(undefined) const saveCounter = useRef(0) // What the pending save must send once its settings have been stored. const pendingSaveRef = useRef< | { + configName: typeof currentApiConfigName apiConfiguration: typeof apiConfiguration telemetrySetting: typeof telemetrySetting debug: boolean | undefined + revision: number } | undefined >(undefined) @@ -252,7 +260,7 @@ const SettingsView = forwardRef(({ onDone, t prevApiConfigName.current = currentApiConfigName prevMode.current = mode setChangeDetected(false) - }, [currentApiConfigName, mode, extensionState]) + }, [currentApiConfigName, mode, extensionState, setChangeDetected]) // Bust the cache when settings are imported. useEffect(() => { @@ -263,18 +271,21 @@ const SettingsView = forwardRef(({ onDone, t handledSettingsImportedAt.current = settingsImportedAt setCachedState((prevCachedState) => ({ ...prevCachedState, ...extensionState })) setChangeDetected(false) - }, [settingsImportedAt, extensionState]) + }, [settingsImportedAt, extensionState, setChangeDetected]) - const setCachedStateField: SetCachedStateField = useCallback((field, value) => { - setCachedState((prevState) => { - if (prevState[field] === value) { - return prevState - } + const setCachedStateField: SetCachedStateField = useCallback( + (field, value) => { + setCachedState((prevState) => { + if (prevState[field] === value) { + return prevState + } - setChangeDetected(true) - return { ...prevState, [field]: value } - }) - }, []) + setChangeDetected(true) + return { ...prevState, [field]: value } + }) + }, + [setChangeDetected], + ) const setApiConfigurationField = useCallback( (field: K, value: ProviderSettings[K], isUserAction: boolean = true) => { @@ -314,92 +325,119 @@ const SettingsView = forwardRef(({ onDone, t return { ...prevState, apiConfiguration: { ...prevState.apiConfiguration, [field]: value } } }) }, - [], + [setChangeDetected], ) - const setExperimentEnabled: SetExperimentEnabled = useCallback((id: ExperimentId, enabled: boolean) => { - setCachedState((prevState) => { - if (prevState.experiments?.[id] === enabled) { - return prevState - } - - setChangeDetected(true) - return { ...prevState, experiments: { ...prevState.experiments, [id]: enabled } } - }) - }, []) + const setExperimentEnabled: SetExperimentEnabled = useCallback( + (id: ExperimentId, enabled: boolean) => { + setCachedState((prevState) => { + if (prevState.experiments?.[id] === enabled) { + return prevState + } - const setTelemetrySetting = useCallback((setting: TelemetrySetting) => { - setCachedState((prevState) => { - if (prevState.telemetrySetting === setting) { - return prevState - } + setChangeDetected(true) + return { ...prevState, experiments: { ...prevState.experiments, [id]: enabled } } + }) + }, + [setChangeDetected], + ) - setChangeDetected(true) - return { ...prevState, telemetrySetting: setting } - }) - }, []) + const setTelemetrySetting = useCallback( + (setting: TelemetrySetting) => { + setCachedState((prevState) => { + if (prevState.telemetrySetting === setting) { + return prevState + } - const setDebug = useCallback((debug: boolean) => { - setCachedState((prevState) => { - if (prevState.debug === debug) { - return prevState - } + setChangeDetected(true) + return { ...prevState, telemetrySetting: setting } + }) + }, + [setChangeDetected], + ) - setChangeDetected(true) - return { ...prevState, debug } - }) - }, []) + const setDebug = useCallback( + (debug: boolean) => { + setCachedState((prevState) => { + if (prevState.debug === debug) { + return prevState + } - const setImageGenerationProvider = useCallback((provider: ImageGenerationProvider) => { - setCachedState((prevState) => { - if (prevState.imageGenerationProvider !== provider) { setChangeDetected(true) - } + return { ...prevState, debug } + }) + }, + [setChangeDetected], + ) - return { ...prevState, imageGenerationProvider: provider } - }) - }, []) + const setImageGenerationProvider = useCallback( + (provider: ImageGenerationProvider) => { + setCachedState((prevState) => { + if (prevState.imageGenerationProvider !== provider) { + setChangeDetected(true) + } - const setOpenRouterImageApiKey = useCallback((apiKey: string) => { - setCachedState((prevState) => { - if (prevState.openRouterImageApiKey !== apiKey) { - setChangeDetected(true) - } + return { ...prevState, imageGenerationProvider: provider } + }) + }, + [setChangeDetected], + ) - return { ...prevState, openRouterImageApiKey: apiKey } - }) - }, []) + const setOpenRouterImageApiKey = useCallback( + (apiKey: string) => { + setCachedState((prevState) => { + if (prevState.openRouterImageApiKey !== apiKey) { + setChangeDetected(true) + } - const setImageGenerationSelectedModel = useCallback((model: string) => { - setCachedState((prevState) => { - if (prevState.openRouterImageGenerationSelectedModel !== model) { - setChangeDetected(true) - } + return { ...prevState, openRouterImageApiKey: apiKey } + }) + }, + [setChangeDetected], + ) - return { ...prevState, openRouterImageGenerationSelectedModel: model } - }) - }, []) + const setImageGenerationSelectedModel = useCallback( + (model: string) => { + setCachedState((prevState) => { + if (prevState.openRouterImageGenerationSelectedModel !== model) { + setChangeDetected(true) + } - const setCustomSupportPromptsField = useCallback((prompts: Record) => { - setCachedState((prevState) => { - const previousStr = JSON.stringify(prevState.customSupportPrompts) - const newStr = JSON.stringify(prompts) + return { ...prevState, openRouterImageGenerationSelectedModel: model } + }) + }, + [setChangeDetected], + ) - if (previousStr === newStr) { - return prevState - } + const setCustomSupportPromptsField = useCallback( + (prompts: Record) => { + setCachedState((prevState) => { + const previousStr = JSON.stringify(prevState.customSupportPrompts) + const newStr = JSON.stringify(prompts) - setChangeDetected(true) - return { ...prevState, customSupportPrompts: prompts } - }) - }, []) + if (previousStr === newStr) { + return prevState + } + + setChangeDetected(true) + return { ...prevState, customSupportPrompts: prompts } + }) + }, + [setChangeDetected], + ) const isSettingValid = !errorMessage const handleSubmit = () => { if (isSettingValid && !pendingSaveId) { const saveId = `settings-save-${++saveCounter.current}` - pendingSaveRef.current = { apiConfiguration, telemetrySetting, debug: cachedState.debug } + pendingSaveRef.current = { + configName: currentApiConfigName, + apiConfiguration, + telemetrySetting, + debug: cachedState.debug, + revision: editRevision.current, + } setPendingSaveId(saveId) vscode.postMessage({ type: "updateSettings", @@ -507,17 +545,18 @@ const SettingsView = forwardRef(({ onDone, t // by the `updateSettings` message. vscode.postMessage({ type: "upsertApiConfiguration", - text: currentApiConfigName, + text: saved.configName, apiConfiguration: saved.apiConfiguration, }) vscode.postMessage({ type: "telemetrySetting", text: saved.telemetrySetting }) vscode.postMessage({ type: "debugSetting", bool: saved.debug }) - setChangeDetected(false) + // An edit made while the save was in flight is not in what was sent: it stays unsaved. + if (editRevision.current === saved.revision) setChangeDetected(false) } window.addEventListener("message", onResult) return () => window.removeEventListener("message", onResult) - }, [pendingSaveId, currentApiConfigName]) + }, [pendingSaveId, setChangeDetected]) const checkUnsaveChanges = useCallback( (then: () => void) => { @@ -543,7 +582,7 @@ const SettingsView = forwardRef(({ onDone, t } // If confirm is false (Cancel), do nothing, dialog closes automatically }, - [extensionState], // Depend on extensionState to get the latest original state + [extensionState, setChangeDetected], // extensionState is the latest original state ) // Handle tab changes with unsaved changes check diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 71642926ba..6bb396b7bc 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -1,4 +1,4 @@ -import { fireEvent, screen, waitFor } from "@testing-library/react" +import { act, fireEvent, screen, waitFor } from "@testing-library/react" import { QueryClient } from "@tanstack/react-query" import { beforeEach, describe, expect, it, vi } from "vitest" @@ -116,4 +116,38 @@ describe("SettingsView – save acknowledgement", () => { answerSave("settings-save-1", { success: true }) expect(posted("upsertApiConfiguration")).toHaveLength(0) }) + it("keeps an edit made while the save was pending unsaved, so Save stays available for it", async () => { + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + + // A second edit lands before the host answers; it is not in what was sent. + fireEvent.click(screen.getByTestId("enter-behavior-checkbox")) + answerSave(lastSaveRequestId(postMessage), { success: true }) + + await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + }) + + it("sends the API configuration under the profile name it was submitted with", async () => { + renderWithExtensionState(, { + state: { currentApiConfigName: "first-profile" }, + queryClient: new QueryClient({ defaultOptions: { queries: { retry: false } } }), + }) + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + + // The user switches profile before the host answers. + act(() => { + window.dispatchEvent( + new MessageEvent("message", { + data: { type: "state", state: { currentApiConfigName: "other-profile" } }, + }), + ) + }) + answerSave(lastSaveRequestId(postMessage), { success: true }) + + await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + expect(posted("upsertApiConfiguration")[0]).toMatchObject({ text: "first-profile" }) + }) }) From adfc6caf544432d015a159915603578ea7f76d5d Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 13:34:25 -0700 Subject: [PATCH 07/42] fix(ui): restore command lists from configuration on rollback, unique save ids across mounts, simpler edit tracking --- .../__tests__/webviewMessageHandler.spec.ts | 88 ++++++++ src/core/webview/webviewMessageHandler.ts | 26 ++- .../src/components/settings/SettingsView.tsx | 201 ++++++++---------- .../SettingsView.saveResult.spec.tsx | 22 ++ 4 files changed, 221 insertions(+), 116 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index b4427387a8..81da1bc009 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -797,6 +797,7 @@ vi.mock("vscode", () => { env: { isTelemetryEnabled: true, }, + ConfigurationTarget: { Global: 1 }, } }) @@ -2075,6 +2076,93 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) }) + describe("the command lists live in two stores", () => { + const failWriteDelay = () => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (key: string, value: unknown) => { + if (key === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") + return real(key as never, value as never) + }, + ) + } + + it.each(["allowedCommands", "deniedCommands"])( + "restores %s in VS Code's global configuration from the configuration, not from global state", + async (key) => { + const update = vi.fn() + const inspect = vi.fn(() => ({ globalValue: ["from-config", "config-only"] })) + vi.mocked(vscode.workspace.getConfiguration).mockReturnValue({ update, inspect } as never) + stored[key] = ["from-state"] + failWriteDelay() + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-9", + updatedSettings: { [key]: ["new"], writeDelayMs: 2000 }, + }) + + expect(inspect).toHaveBeenCalledWith(key) + expect(update).toHaveBeenNthCalledWith(1, key, ["new"], vscode.ConfigurationTarget.Global) + // The rollback writes back what the configuration held, including the entry only it had. + expect(update).toHaveBeenLastCalledWith( + key, + ["from-config", "config-only"], + vscode.ConfigurationTarget.Global, + ) + expect(update).toHaveBeenCalledTimes(2) + // Global state is restored from its own snapshot. + expect(stored[key]).toEqual(["from-state"]) + }, + ) + + it("clears the configuration value again when it had none before the save", async () => { + const update = vi.fn() + vi.mocked(vscode.workspace.getConfiguration).mockReturnValue({ + update, + inspect: vi.fn(() => undefined), + } as never) + failWriteDelay() + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-10", + updatedSettings: { deniedCommands: ["rm"], writeDelayMs: 2000 }, + }) + + expect(update).toHaveBeenLastCalledWith("deniedCommands", undefined, vscode.ConfigurationTarget.Global) + }) + }) + + it.each(["experiments", "customSupportPrompts"])("stores nothing for an empty %s value", async (key) => { + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-11", + updatedSettings: { [key]: undefined, soundEnabled: true }, + }) + + expect(stored).not.toHaveProperty(key) + expect(stored.soundEnabled).toBe(true) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-11", success: true }), + ) + }) + + it("logs a refresh failure that is not an Error", async () => { + vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce("plain refresh failure") + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-12", + updatedSettings: { soundEnabled: true }, + }) + + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain refresh failure")) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-12", success: true }), + ) + }) + it("does nothing when there are no settings to save", async () => { await webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId: "save-6" }) expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 920324c8ae..1ba0b2d544 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -877,18 +877,36 @@ export const webviewMessageHandler = async ( // Every key is snapshotted before it is written. If any write fails, the ones already applied are // restored (stored value and side effect), so a save is all-or-nothing and the webview can keep // the user's edits and let them retry. - const written: Array<{ key: string; previous: unknown }> = [] + // The command lists are also written to VS Code's global configuration, which is a different store from + // the one `contextProxy` reads (the webview shows a union of both). Restoring them from `contextProxy` + // would overwrite configuration-only entries, so their configuration value is snapshotted separately. + const commandListKeys = new Set(["allowedCommands", "deniedCommands"]) + const written: Array<{ key: string; previous: unknown; configGlobal?: { value: unknown } }> = [] let failure: string | undefined try { for (const [key, value] of Object.entries(updatedSettings)) { - written.push({ key, previous: provider.contextProxy.getValue(key as keyof RooCodeSettings) }) + const entry: (typeof written)[number] = { + key, + previous: provider.contextProxy.getValue(key as keyof RooCodeSettings), + } + if (commandListKeys.has(key)) { + const inspected = vscode.workspace.getConfiguration(Package.name).inspect(key) + entry.configGlobal = { value: inspected?.globalValue } + } + written.push(entry) await applySetting(key, value) } } catch (error) { failure = error instanceof Error ? error.message : String(error) - for (const { key, previous } of written.reverse()) { + for (const { key, previous, configGlobal } of written.reverse()) { try { - await applySetting(key, previous) + if (configGlobal) { + await vscode.workspace + .getConfiguration(Package.name) + .update(key, configGlobal.value, vscode.ConfigurationTarget.Global) + } else { + await applySetting(key, previous) + } // Put back exactly what was stored, whatever defaulting the side effect applied. await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) } catch (rollbackError) { diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 6f22ee08e5..a5a1ab0f86 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -95,6 +95,10 @@ export const settingsTabTrigger = "whitespace-nowrap overflow-hidden min-w-0 h-12 px-4 py-3 box-border flex items-center border-l-2 border-transparent text-vscode-foreground opacity-70 hover:bg-vscode-list-hoverBackground data-[compact=true]:w-12 data-[compact=true]:p-4" export const settingsTabTriggerActive = "opacity-100 border-vscode-focusBorder bg-vscode-list-activeSelectionBackground" +// Module scope, not per mount: an answer to a save from an earlier mount can still arrive, and it must not +// match a later mount's request id. +let saveCounter = 0 + export interface SettingsViewRef { checkUnsaveChanges: (then: () => void) => void } @@ -133,16 +137,9 @@ const SettingsView = forwardRef(({ onDone, t const { currentApiConfigName, listApiConfigMeta, uriScheme, settingsImportedAt, mode } = extensionState const [isDiscardDialogShow, setDiscardDialogShow] = useState(false) - const [isChangeDetected, setChangeDetectedState] = useState(false) - // Bumped on every edit, so a save can tell whether the user changed something after it was submitted. - const editRevision = useRef(0) - const setChangeDetected = useCallback((detected: boolean) => { - if (detected) editRevision.current++ - setChangeDetectedState(detected) - }, []) + const [isChangeDetected, setChangeDetected] = useState(false) // The save currently waiting for the host's answer. The "unsaved changes" flag stays on until it succeeds. const [pendingSaveId, setPendingSaveId] = useState(undefined) - const saveCounter = useRef(0) // What the pending save must send once its settings have been stored. const pendingSaveRef = useRef< | { @@ -150,7 +147,7 @@ const SettingsView = forwardRef(({ onDone, t apiConfiguration: typeof apiConfiguration telemetrySetting: typeof telemetrySetting debug: boolean | undefined - revision: number + editedState: typeof cachedState } | undefined >(undefined) @@ -172,6 +169,10 @@ const SettingsView = forwardRef(({ onDone, t const confirmDialogHandler = useRef<() => void>() const [cachedState, setCachedState] = useState(() => extensionState) + const latestCachedState = useRef(cachedState) + useEffect(() => { + latestCachedState.current = cachedState + }, [cachedState]) const { alwaysAllowReadOnly, @@ -260,7 +261,7 @@ const SettingsView = forwardRef(({ onDone, t prevApiConfigName.current = currentApiConfigName prevMode.current = mode setChangeDetected(false) - }, [currentApiConfigName, mode, extensionState, setChangeDetected]) + }, [currentApiConfigName, mode, extensionState]) // Bust the cache when settings are imported. useEffect(() => { @@ -271,21 +272,18 @@ const SettingsView = forwardRef(({ onDone, t handledSettingsImportedAt.current = settingsImportedAt setCachedState((prevCachedState) => ({ ...prevCachedState, ...extensionState })) setChangeDetected(false) - }, [settingsImportedAt, extensionState, setChangeDetected]) + }, [settingsImportedAt, extensionState]) - const setCachedStateField: SetCachedStateField = useCallback( - (field, value) => { - setCachedState((prevState) => { - if (prevState[field] === value) { - return prevState - } + const setCachedStateField: SetCachedStateField = useCallback((field, value) => { + setCachedState((prevState) => { + if (prevState[field] === value) { + return prevState + } - setChangeDetected(true) - return { ...prevState, [field]: value } - }) - }, - [setChangeDetected], - ) + setChangeDetected(true) + return { ...prevState, [field]: value } + }) + }, []) const setApiConfigurationField = useCallback( (field: K, value: ProviderSettings[K], isUserAction: boolean = true) => { @@ -325,118 +323,97 @@ const SettingsView = forwardRef(({ onDone, t return { ...prevState, apiConfiguration: { ...prevState.apiConfiguration, [field]: value } } }) }, - [setChangeDetected], + [], ) - const setExperimentEnabled: SetExperimentEnabled = useCallback( - (id: ExperimentId, enabled: boolean) => { - setCachedState((prevState) => { - if (prevState.experiments?.[id] === enabled) { - return prevState - } + const setExperimentEnabled: SetExperimentEnabled = useCallback((id: ExperimentId, enabled: boolean) => { + setCachedState((prevState) => { + if (prevState.experiments?.[id] === enabled) { + return prevState + } - setChangeDetected(true) - return { ...prevState, experiments: { ...prevState.experiments, [id]: enabled } } - }) - }, - [setChangeDetected], - ) + setChangeDetected(true) + return { ...prevState, experiments: { ...prevState.experiments, [id]: enabled } } + }) + }, []) - const setTelemetrySetting = useCallback( - (setting: TelemetrySetting) => { - setCachedState((prevState) => { - if (prevState.telemetrySetting === setting) { - return prevState - } + const setTelemetrySetting = useCallback((setting: TelemetrySetting) => { + setCachedState((prevState) => { + if (prevState.telemetrySetting === setting) { + return prevState + } - setChangeDetected(true) - return { ...prevState, telemetrySetting: setting } - }) - }, - [setChangeDetected], - ) + setChangeDetected(true) + return { ...prevState, telemetrySetting: setting } + }) + }, []) - const setDebug = useCallback( - (debug: boolean) => { - setCachedState((prevState) => { - if (prevState.debug === debug) { - return prevState - } + const setDebug = useCallback((debug: boolean) => { + setCachedState((prevState) => { + if (prevState.debug === debug) { + return prevState + } - setChangeDetected(true) - return { ...prevState, debug } - }) - }, - [setChangeDetected], - ) + setChangeDetected(true) + return { ...prevState, debug } + }) + }, []) - const setImageGenerationProvider = useCallback( - (provider: ImageGenerationProvider) => { - setCachedState((prevState) => { - if (prevState.imageGenerationProvider !== provider) { - setChangeDetected(true) - } + const setImageGenerationProvider = useCallback((provider: ImageGenerationProvider) => { + setCachedState((prevState) => { + if (prevState.imageGenerationProvider !== provider) { + setChangeDetected(true) + } - return { ...prevState, imageGenerationProvider: provider } - }) - }, - [setChangeDetected], - ) + return { ...prevState, imageGenerationProvider: provider } + }) + }, []) - const setOpenRouterImageApiKey = useCallback( - (apiKey: string) => { - setCachedState((prevState) => { - if (prevState.openRouterImageApiKey !== apiKey) { - setChangeDetected(true) - } + const setOpenRouterImageApiKey = useCallback((apiKey: string) => { + setCachedState((prevState) => { + if (prevState.openRouterImageApiKey !== apiKey) { + setChangeDetected(true) + } - return { ...prevState, openRouterImageApiKey: apiKey } - }) - }, - [setChangeDetected], - ) + return { ...prevState, openRouterImageApiKey: apiKey } + }) + }, []) - const setImageGenerationSelectedModel = useCallback( - (model: string) => { - setCachedState((prevState) => { - if (prevState.openRouterImageGenerationSelectedModel !== model) { - setChangeDetected(true) - } + const setImageGenerationSelectedModel = useCallback((model: string) => { + setCachedState((prevState) => { + if (prevState.openRouterImageGenerationSelectedModel !== model) { + setChangeDetected(true) + } - return { ...prevState, openRouterImageGenerationSelectedModel: model } - }) - }, - [setChangeDetected], - ) + return { ...prevState, openRouterImageGenerationSelectedModel: model } + }) + }, []) - const setCustomSupportPromptsField = useCallback( - (prompts: Record) => { - setCachedState((prevState) => { - const previousStr = JSON.stringify(prevState.customSupportPrompts) - const newStr = JSON.stringify(prompts) + const setCustomSupportPromptsField = useCallback((prompts: Record) => { + setCachedState((prevState) => { + const previousStr = JSON.stringify(prevState.customSupportPrompts) + const newStr = JSON.stringify(prompts) - if (previousStr === newStr) { - return prevState - } + if (previousStr === newStr) { + return prevState + } - setChangeDetected(true) - return { ...prevState, customSupportPrompts: prompts } - }) - }, - [setChangeDetected], - ) + setChangeDetected(true) + return { ...prevState, customSupportPrompts: prompts } + }) + }, []) const isSettingValid = !errorMessage const handleSubmit = () => { if (isSettingValid && !pendingSaveId) { - const saveId = `settings-save-${++saveCounter.current}` + const saveId = `settings-save-${++saveCounter}` pendingSaveRef.current = { configName: currentApiConfigName, apiConfiguration, telemetrySetting, debug: cachedState.debug, - revision: editRevision.current, + editedState: cachedState, } setPendingSaveId(saveId) vscode.postMessage({ @@ -551,12 +528,12 @@ const SettingsView = forwardRef(({ onDone, t vscode.postMessage({ type: "telemetrySetting", text: saved.telemetrySetting }) vscode.postMessage({ type: "debugSetting", bool: saved.debug }) // An edit made while the save was in flight is not in what was sent: it stays unsaved. - if (editRevision.current === saved.revision) setChangeDetected(false) + if (latestCachedState.current === saved.editedState) setChangeDetected(false) } window.addEventListener("message", onResult) return () => window.removeEventListener("message", onResult) - }, [pendingSaveId, setChangeDetected]) + }, [pendingSaveId]) const checkUnsaveChanges = useCallback( (then: () => void) => { @@ -582,7 +559,7 @@ const SettingsView = forwardRef(({ onDone, t } // If confirm is false (Cancel), do nothing, dialog closes automatically }, - [extensionState, setChangeDetected], // extensionState is the latest original state + [extensionState], // Depend on extensionState to get the latest original state ) // Handle tab changes with unsaved changes check diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 6bb396b7bc..31016fe1a9 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -150,4 +150,26 @@ describe("SettingsView – save acknowledgement", () => { await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) expect(posted("upsertApiConfiguration")[0]).toMatchObject({ text: "first-profile" }) }) + it("never reuses a request id across mounts, so a late answer for an earlier save is ignored", async () => { + const first = renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + const earlierId = lastSaveRequestId(postMessage) + // Leaving settings drops the view while the host has not answered yet. + first.unmount() + + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + const laterId = lastSaveRequestId(postMessage) + expect(laterId).not.toBe(earlierId) + + // The earlier save's answer arrives while the new save is pending: it must not complete it. + answerSave(earlierId, { success: true }) + expect(posted("upsertApiConfiguration")).toHaveLength(0) + expect(screen.getByTestId("save-button")).toBeDisabled() + + answerSave(laterId, { success: true }) + await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + }) }) From 7200ce143ce6706d0d2ae61dd6bf605dcd082616 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 13:51:09 -0700 Subject: [PATCH 08/42] refactor(ui): drop a redundant pending-save guard (the Save button is disabled while pending) --- webview-ui/src/components/settings/SettingsView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index a5a1ab0f86..a7efec17ce 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -406,7 +406,7 @@ const SettingsView = forwardRef(({ onDone, t const isSettingValid = !errorMessage const handleSubmit = () => { - if (isSettingValid && !pendingSaveId) { + if (isSettingValid) { const saveId = `settings-save-${++saveCounter}` pendingSaveRef.current = { configName: currentApiConfigName, From 5b90dc8f5cfde2e08a08da701c40f1fd8b551ccd Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 14:18:50 -0700 Subject: [PATCH 09/42] fix(ui): serialize settings saves across providers; keep the save-result listener past unmount; test appearance schema --- .../src/__tests__/global-settings.test.ts | 38 +++++++++ .../__tests__/webviewMessageHandler.spec.ts | 85 +++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 24 +++++- .../src/components/settings/SettingsView.tsx | 79 ++++++++--------- .../SettingsView.saveResult.spec.tsx | 43 ++++++++-- 5 files changed, 216 insertions(+), 53 deletions(-) diff --git a/packages/types/src/__tests__/global-settings.test.ts b/packages/types/src/__tests__/global-settings.test.ts index f2b2e7e8e5..175fe04e80 100644 --- a/packages/types/src/__tests__/global-settings.test.ts +++ b/packages/types/src/__tests__/global-settings.test.ts @@ -51,3 +51,41 @@ describe("collapseCommandOutputByDefault global setting", () => { expect(globalSettingsSchema.safeParse({ collapseCommandOutputByDefault: "true" }).success).toBe(false) }) }) + +describe("appearance global settings", () => { + const bounds = { + interfaceFontScale: { min: 50, max: 200 }, + terminalFontSize: { min: 8, max: 32 }, + editorFontSize: { min: 8, max: 32 }, + spacingScale: { min: 50, max: 200 }, + } as const + const keys = Object.keys(bounds) as Array + + it.each(keys)("%s is a persisted global setting", (key) => { + expect(GLOBAL_SETTINGS_KEYS).toContain(key) + }) + + it.each(keys)("%s accepts the whole range, including both bounds", (key) => { + const { min, max } = bounds[key] + for (const value of [min, Math.round((min + max) / 2), max]) { + expect(globalSettingsSchema.parse({ [key]: value })).toEqual({ [key]: value }) + } + }) + + it.each(keys)("%s accepts null (a saved reset) and an unset value", (key) => { + expect(globalSettingsSchema.parse({ [key]: null })).toEqual({ [key]: null }) + expect(globalSettingsSchema.parse({})).not.toHaveProperty(key) + }) + + it.each(keys)("%s rejects out-of-range, fractional and non-numeric values", (key) => { + const { min, max } = bounds[key] + for (const value of [min - 1, max + 1, 0, -1, min + 0.5, Number.NaN, "100"]) { + expect(globalSettingsSchema.safeParse({ [key]: value }).success).toBe(false) + } + }) + + it("keeps all four values together", () => { + const all = { interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 } + expect(globalSettingsSchema.parse(all)).toEqual(all) + }) +}) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 81da1bc009..ad90783c2f 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2076,6 +2076,91 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) }) + describe("concurrent saves", () => { + it("run one at a time across providers, so a rollback cannot undo another save's writes", async () => { + // Two providers (sidebar and editor tab) share one ContextProxy. + const editorTab = { ...mockClineProvider } as typeof mockClineProvider + let openGate!: () => void + const gate = new Promise((resolve) => (openGate = resolve)) + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (key: string, value: unknown) => { + if (key === "writeDelayMs" && value === 2000) { + await gate + throw new Error("storage unavailable") + } + return real(key as never, value as never) + }, + ) + + const failing = webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-a", + updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, + }) + await vi.waitFor(() => expect(stored.soundEnabled).toBe(true)) + + const later = webviewMessageHandler(editorTab, { + type: "updateSettings", + requestId: "save-b", + updatedSettings: { soundEnabled: true, terminalCommandDelay: 50 }, + }) + // The second save waits: it has not snapshotted or written anything while the first is in flight. + await new Promise((resolve) => setTimeout(resolve, 0)) + expect(stored).not.toHaveProperty("terminalCommandDelay") + + openGate() + await Promise.all([failing, later]) + + // The first was rolled back completely before the second ran, so the second's values stand. + expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 1000, terminalCommandDelay: 50 }) + expect(editorTab.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-b", + success: true, + }) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-a", success: false }), + ) + }) + + it("keeps saving after a save handler itself throws", async () => { + vi.mocked(mockClineProvider.postMessageToWebview).mockRejectedValueOnce(new Error("webview is gone")) + await expect( + webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-e", + updatedSettings: { soundEnabled: true }, + }), + ).rejects.toThrow("webview is gone") + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-f", + updatedSettings: { writeDelayMs: 3000 }, + }) + expect(stored.writeDelayMs).toBe(3000) + }) + + it("keeps saving after a save has failed", async () => { + vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValueOnce(new Error("boom")) + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-c", + updatedSettings: { soundEnabled: true }, + }) + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-d", + updatedSettings: { soundEnabled: true }, + }) + expect(stored.soundEnabled).toBe(true) + expect(mockClineProvider.postMessageToWebview).toHaveBeenLastCalledWith( + expect.objectContaining({ requestId: "save-d", success: true }), + ) + }) + }) + describe("the command lists live in two stores", () => { const failWriteDelay = () => { const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 1ba0b2d544..41203e2244 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -130,11 +130,31 @@ import { const handlerFor = (apiConfiguration: ProviderSettings, provider: RouterName): ApiHandler => buildApiHandler({ ...apiConfiguration, apiProvider: provider }) -export const webviewMessageHandler = async ( +/** + * Settings saves run one at a time, across every provider (the sidebar and editor tabs share one `ContextProxy` + * and one set of VS Code settings). A save snapshots what is stored, writes, and on failure restores the + * snapshot. A second save interleaved with it would snapshot the first one's half-written values, and either + * rollback could put stale values back over the other save's successful writes. + */ +let settingsSaveChain: Promise = Promise.resolve() + +export const webviewMessageHandler = ( provider: ClineProvider, message: WebviewMessage, marketplaceManager?: MarketplaceManager, -) => { +): Promise => { + if (message.type !== "updateSettings") return handleWebviewMessage(provider, message, marketplaceManager) + + const run = settingsSaveChain.then(() => handleWebviewMessage(provider, message, marketplaceManager)) + settingsSaveChain = run.catch(() => undefined) + return run +} + +const handleWebviewMessage = async ( + provider: ClineProvider, + message: WebviewMessage, + marketplaceManager?: MarketplaceManager, +): Promise => { // Utility functions provided for concise get/update of global state via contextProxy API. const getGlobalState = (key: K) => provider.contextProxy.getValue(key) const updateGlobalState = async (key: K, value: GlobalState[K]) => diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index a7efec17ce..7b7eb5e9df 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -140,17 +140,14 @@ const SettingsView = forwardRef(({ onDone, t const [isChangeDetected, setChangeDetected] = useState(false) // The save currently waiting for the host's answer. The "unsaved changes" flag stays on until it succeeds. const [pendingSaveId, setPendingSaveId] = useState(undefined) - // What the pending save must send once its settings have been stored. - const pendingSaveRef = useRef< - | { - configName: typeof currentApiConfigName - apiConfiguration: typeof apiConfiguration - telemetrySetting: typeof telemetrySetting - debug: boolean | undefined - editedState: typeof cachedState - } - | undefined - >(undefined) + // False once the view has gone: a save started here can still be answered after that. + const isMounted = useRef(true) + useEffect(() => { + isMounted.current = true + return () => { + isMounted.current = false + } + }, []) const [errorMessage, setErrorMessage] = useState(undefined) const [activeTab, setActiveTab] = useState( targetSection && sectionNames.includes(targetSection as SectionName) @@ -408,13 +405,37 @@ const SettingsView = forwardRef(({ onDone, t const handleSubmit = () => { if (isSettingValid) { const saveId = `settings-save-${++saveCounter}` - pendingSaveRef.current = { + // What the rest of this save sends once the host confirms the settings were stored. + const saved = { configName: currentApiConfigName, apiConfiguration, telemetrySetting, debug: cachedState.debug, editedState: cachedState, } + // Registered here, not from an effect, so it outlives this view: if the user leaves Settings before the + // host answers, the rest of the save must still be sent. + const onResult = (event: MessageEvent) => { + const message = event.data + if (message?.type !== "settingsSaveResult" || message.requestId !== saveId) return + + window.removeEventListener("message", onResult) + if (isMounted.current) setPendingSaveId(undefined) + if (!message.success) return + + // These have more complex logic so they aren't (yet) handled + // by the `updateSettings` message. + vscode.postMessage({ + type: "upsertApiConfiguration", + text: saved.configName, + apiConfiguration: saved.apiConfiguration, + }) + vscode.postMessage({ type: "telemetrySetting", text: saved.telemetrySetting }) + vscode.postMessage({ type: "debugSetting", bool: saved.debug }) + // An edit made while the save was in flight is not in what was sent: it stays unsaved. + if (isMounted.current && latestCachedState.current === saved.editedState) setChangeDetected(false) + } + window.addEventListener("message", onResult) setPendingSaveId(saveId) vscode.postMessage({ type: "updateSettings", @@ -499,42 +520,10 @@ const SettingsView = forwardRef(({ onDone, t }, }) - // The rest of the save (API configuration, telemetry, debug) is sent once the host confirms the - // settings were stored, and the "unsaved changes" flag is cleared only then: see the - // `settingsSaveResult` listener below. A failed save leaves the user's edits in place to retry. + // A failed save leaves the user's edits in place to retry. } } - useEffect(() => { - if (!pendingSaveId) return - - const onResult = (event: MessageEvent) => { - const message = event.data - if (message?.type !== "settingsSaveResult" || message.requestId !== pendingSaveId) return - - const saved = pendingSaveRef.current - pendingSaveRef.current = undefined - setPendingSaveId(undefined) - - if (!message.success || !saved) return - - // These have more complex logic so they aren't (yet) handled - // by the `updateSettings` message. - vscode.postMessage({ - type: "upsertApiConfiguration", - text: saved.configName, - apiConfiguration: saved.apiConfiguration, - }) - vscode.postMessage({ type: "telemetrySetting", text: saved.telemetrySetting }) - vscode.postMessage({ type: "debugSetting", bool: saved.debug }) - // An edit made while the save was in flight is not in what was sent: it stays unsaved. - if (latestCachedState.current === saved.editedState) setChangeDetected(false) - } - - window.addEventListener("message", onResult) - return () => window.removeEventListener("message", onResult) - }, [pendingSaveId]) - const checkUnsaveChanges = useCallback( (then: () => void) => { if (isChangeDetected) { diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 31016fe1a9..99fb8a1425 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -113,7 +113,8 @@ describe("SettingsView – save acknowledgement", () => { it("ignores a save result when nothing is being saved", async () => { renderUiTab() await screen.findByTestId("collapse-thinking-checkbox") - answerSave("settings-save-1", { success: true }) + // An id no save was ever issued with (earlier tests may leave their own saves unanswered). + answerSave("settings-save-never-issued", { success: true }) expect(posted("upsertApiConfiguration")).toHaveLength(0) }) it("keeps an edit made while the save was pending unsaved, so Save stays available for it", async () => { @@ -150,12 +151,42 @@ describe("SettingsView – save acknowledgement", () => { await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) expect(posted("upsertApiConfiguration")[0]).toMatchObject({ text: "first-profile" }) }) - it("never reuses a request id across mounts, so a late answer for an earlier save is ignored", async () => { + it("sends the rest of a save even when the view is gone before the host answers", async () => { + const view = renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + const id = lastSaveRequestId(postMessage) + + // The user leaves Settings (and discards) while the host is still storing the settings. + view.unmount() + expect(posted("upsertApiConfiguration")).toHaveLength(0) + + answerSave(id, { success: true }) + expect(posted("upsertApiConfiguration")).toHaveLength(1) + expect(posted("telemetrySetting")).toHaveLength(1) + expect(posted("debugSetting")).toHaveLength(1) + + // A second answer for the same save does nothing. + answerSave(id, { success: true }) + expect(posted("upsertApiConfiguration")).toHaveLength(1) + }) + + it("sends nothing more when the host reports a failure after the view is gone", async () => { + const view = renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + const id = lastSaveRequestId(postMessage) + view.unmount() + + answerSave(id, { success: false, error: "disk full" }) + expect(posted("upsertApiConfiguration")).toHaveLength(0) + }) + + it("never reuses a request id across mounts, and answers each save for itself", async () => { const first = renderUiTab() await makeAnEdit() fireEvent.click(screen.getByTestId("save-button")) const earlierId = lastSaveRequestId(postMessage) - // Leaving settings drops the view while the host has not answered yet. first.unmount() renderUiTab() @@ -164,12 +195,12 @@ describe("SettingsView – save acknowledgement", () => { const laterId = lastSaveRequestId(postMessage) expect(laterId).not.toBe(earlierId) - // The earlier save's answer arrives while the new save is pending: it must not complete it. + // The earlier save's answer completes the earlier save only: the new one is still pending. answerSave(earlierId, { success: true }) - expect(posted("upsertApiConfiguration")).toHaveLength(0) + expect(posted("upsertApiConfiguration")).toHaveLength(1) expect(screen.getByTestId("save-button")).toBeDisabled() answerSave(laterId, { success: true }) - await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + expect(posted("upsertApiConfiguration")).toHaveLength(2) }) }) From 8b6a0a977a77c802b51f91a4f56589dfbe2c8203 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 14:40:47 -0700 Subject: [PATCH 10/42] fix(ui): bound the DCG install and MCP toggle so a stuck stage cannot block the settings save queue --- .../__tests__/webviewMessageHandler.spec.ts | 82 +++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 32 +++++++- 2 files changed, 112 insertions(+), 2 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index ad90783c2f..53fa2c7149 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2076,6 +2076,88 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) }) + describe("a stage that never settles", () => { + beforeEach(() => vi.useFakeTimers()) + afterEach(() => vi.useRealTimers()) + + it("fails the save and rolls back when the MCP hub never answers, and the next save still runs", async () => { + const handleMcpEnabledChange = vi + .fn() + .mockImplementationOnce(() => new Promise(() => {})) + .mockResolvedValue(undefined) + ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue({ handleMcpEnabledChange }) + stored.mcpEnabled = true + + const stuck = webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-mcp", + updatedSettings: { soundEnabled: true, mcpEnabled: false }, + }) + await vi.advanceTimersByTimeAsync(30_000) + await stuck + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-mcp", + success: false, + error: "Changing the MCP servers timed out after 30s", + }) + expect(stored).toMatchObject({ soundEnabled: false, mcpEnabled: true }) + // The rollback asked the hub for the previous state. + expect(handleMcpEnabledChange).toHaveBeenLastCalledWith(true) + + // The queue was not left blocked. + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-next", + updatedSettings: { writeDelayMs: 3000 }, + }) + expect(stored.writeDelayMs).toBe(3000) + expect(mockClineProvider.postMessageToWebview).toHaveBeenLastCalledWith( + expect.objectContaining({ requestId: "save-next", success: true }), + ) + }) + + it("saves with the guard switched off when its install never finishes", async () => { + vi.mocked(ensureDcgInstalled).mockImplementation(() => new Promise(() => {})) + + const stuck = webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-dcg", + updatedSettings: { destructiveCommandGuardEnabled: true, soundEnabled: true }, + }) + await vi.advanceTimersByTimeAsync(180_000) + await stuck + + // A late install cannot turn the guard on: it was stored as off. + expect(stored).toMatchObject({ destructiveCommandGuardEnabled: false, soundEnabled: true }) + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith( + "common:errors.destructiveCommandGuard.enableFailed", + ) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-dcg", + success: true, + }) + }) + + it("does not time out a stage that answers in time", async () => { + const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) + ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue({ handleMcpEnabledChange }) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-fast", + updatedSettings: { mcpEnabled: false }, + }) + // No timer is left running once the stage has answered. + expect(vi.getTimerCount()).toBe(0) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-fast", success: true }), + ) + }) + }) + describe("concurrent saves", () => { it("run one at a time across providers, so a rollback cannot undo another save's writes", async () => { // Two providers (sidebar and editor tab) share one ContextProxy. diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 41203e2244..5bd3672668 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -138,6 +138,24 @@ const handlerFor = (apiConfiguration: ProviderSettings, provider: RouterName): A */ let settingsSaveChain: Promise = Promise.resolve() +/** Longest a save waits for the download and install of the destructive command guard. */ +const DCG_INSTALL_TIMEOUT_MS = 180_000 +/** Longest a save waits for the MCP hub to connect or disconnect its servers. */ +const MCP_ENABLE_TIMEOUT_MS = 30_000 + +/** + * Stops waiting for `work` after `ms`, so one stage that never settles cannot hold the save queue (and so every + * later save, for every provider) forever. `work` itself cannot be cancelled: callers must only use this where a + * late completion cannot change a setting after the save has been decided. + */ +const withTimeout = (work: Promise, ms: number, what: string): Promise => { + let timer: ReturnType | undefined + const timedOut = new Promise((_resolve, reject) => { + timer = setTimeout(() => reject(new Error(`${what} timed out after ${Math.round(ms / 1000)}s`)), ms) + }) + return Promise.race([work, timedOut]).finally(() => clearTimeout(timer)) +} + export const webviewMessageHandler = ( provider: ClineProvider, message: WebviewMessage, @@ -764,7 +782,12 @@ const handleWebviewMessage = async ( if (updatedSettings.destructiveCommandGuardEnabled === true) { try { const { ensureDcgInstalled } = await import("../../services/destructive-command-guard") - const binaryPath = await ensureDcgInstalled(provider.context.globalStorageUri.fsPath) + // A late install cannot change a setting: on a timeout the guard is switched off below. + const binaryPath = await withTimeout( + ensureDcgInstalled(provider.context.globalStorageUri.fsPath), + DCG_INSTALL_TIMEOUT_MS, + "Installing the destructive command guard", + ) if (!binaryPath) { updatedSettings.destructiveCommandGuardEnabled = false vscode.window.showErrorMessage(t("common:errors.destructiveCommandGuard.unavailable")) @@ -873,7 +896,12 @@ const handleWebviewMessage = async ( const mcpHub = provider.getMcpHub() if (mcpHub) { - await mcpHub.handleMcpEnabledChange(newValue as boolean) + // A timeout fails the save, and the rollback asks the hub for the previous state. + await withTimeout( + mcpHub.handleMcpEnabledChange(newValue as boolean), + MCP_ENABLE_TIMEOUT_MS, + "Changing the MCP servers", + ) } } else if (key === "experiments") { if (!value) { From f074050708db05bb665449368b393fbb77acdeab Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 15:15:38 -0700 Subject: [PATCH 11/42] test: avoid explicit any in the MCP timeout tests --- src/core/webview/__tests__/webviewMessageHandler.spec.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 53fa2c7149..e14258159c 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2077,6 +2077,10 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) describe("a stage that never settles", () => { + // The provider double has no `getMcpHub`; it is added here without a cast. + const useMcpHub = (handleMcpEnabledChange: (enabled: boolean) => Promise) => + Reflect.set(mockClineProvider, "getMcpHub", vi.fn().mockReturnValue({ handleMcpEnabledChange })) + beforeEach(() => vi.useFakeTimers()) afterEach(() => vi.useRealTimers()) @@ -2085,7 +2089,7 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { .fn() .mockImplementationOnce(() => new Promise(() => {})) .mockResolvedValue(undefined) - ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue({ handleMcpEnabledChange }) + useMcpHub(handleMcpEnabledChange) stored.mcpEnabled = true const stuck = webviewMessageHandler(mockClineProvider, { @@ -2143,7 +2147,7 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { it("does not time out a stage that answers in time", async () => { const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) - ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue({ handleMcpEnabledChange }) + useMcpHub(handleMcpEnabledChange) await webviewMessageHandler(mockClineProvider, { type: "updateSettings", From ef33c05f7f2506fe854e1987d5615b1b29b98b1d Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 15:44:02 -0700 Subject: [PATCH 12/42] fix(ui): restore the running terminal values when a failed save is rolled back --- .../__tests__/webviewMessageHandler.spec.ts | 58 +++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 28 ++++++++- 2 files changed, 83 insertions(+), 3 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index e14258159c..29ec2589ea 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2076,6 +2076,64 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) }) + describe("the live terminal after a failed save", () => { + const cases: Array<[string, () => unknown, unknown]> = [ + ["terminalShellIntegrationTimeout", () => Terminal.getShellIntegrationTimeout(), 9_000], + ["terminalShellIntegrationDisabled", () => Terminal.getShellIntegrationDisabled(), false], + ["terminalCommandDelay", () => Terminal.getCommandDelay(), 50], + ["terminalPowershellCounter", () => Terminal.getPowershellCounter(), true], + ["terminalZshClearEolMark", () => Terminal.getTerminalZshClearEolMark(), false], + ["terminalZshOhMy", () => Terminal.getTerminalZshOhMy(), true], + ["terminalZshP10k", () => Terminal.getTerminalZshP10k(), true], + ["terminalZdotdir", () => Terminal.getTerminalZdotdir(), true], + ] + + it.each(cases)( + "puts the running value of %s back when it was never stored", + async (key, liveValue, newValue) => { + const before = liveValue() + // Precondition: the new value really differs from what is running, so a stale value would show. + expect(newValue).not.toBe(before) + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (k: string, value: unknown) => { + if (k === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") + return real(k as never, value as never) + }, + ) + expect(stored).not.toHaveProperty(key) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-terminal", + updatedSettings: { [key]: newValue, writeDelayMs: 2000 }, + }) + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-terminal", success: false }), + ) + // Storage is restored to "never stored"... + expect(stored[key]).toBeUndefined() + // ...and so is the live terminal. + expect(liveValue()).toBe(before) + }, + ) + + it("applies the new value to the live terminal when the save succeeds", async () => { + const before = Terminal.getCommandDelay() + try { + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-terminal-ok", + updatedSettings: { terminalCommandDelay: before + 75 }, + }) + expect(Terminal.getCommandDelay()).toBe(before + 75) + } finally { + Terminal.setCommandDelay(before) + } + }) + }) + describe("a stage that never settles", () => { // The provider double has no `getMcpHub`; it is added here without a cast. const useMcpHub = (handleMcpEnabledChange: (enabled: boolean) => Promise) => diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 5bd3672668..c879752d87 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -929,7 +929,25 @@ const handleWebviewMessage = async ( // the one `contextProxy` reads (the webview shows a union of both). Restoring them from `contextProxy` // would overwrite configuration-only entries, so their configuration value is snapshotted separately. const commandListKeys = new Set(["allowedCommands", "deniedCommands"]) - const written: Array<{ key: string; previous: unknown; configGlobal?: { value: unknown } }> = [] + // The terminal settings are also applied to the live terminal, and their setters skip an unset value. + // A setting that was never stored therefore cannot be undone by restoring `undefined`: the value the + // terminal was running with is snapshotted and put back instead. + const liveTerminalValues: Record unknown> = { + terminalShellIntegrationTimeout: () => Terminal.getShellIntegrationTimeout(), + terminalShellIntegrationDisabled: () => Terminal.getShellIntegrationDisabled(), + terminalCommandDelay: () => Terminal.getCommandDelay(), + terminalPowershellCounter: () => Terminal.getPowershellCounter(), + terminalZshClearEolMark: () => Terminal.getTerminalZshClearEolMark(), + terminalZshOhMy: () => Terminal.getTerminalZshOhMy(), + terminalZshP10k: () => Terminal.getTerminalZshP10k(), + terminalZdotdir: () => Terminal.getTerminalZdotdir(), + } + const written: Array<{ + key: string + previous: unknown + configGlobal?: { value: unknown } + liveTerminal?: { value: unknown } + }> = [] let failure: string | undefined try { for (const [key, value] of Object.entries(updatedSettings)) { @@ -941,19 +959,23 @@ const handleWebviewMessage = async ( const inspected = vscode.workspace.getConfiguration(Package.name).inspect(key) entry.configGlobal = { value: inspected?.globalValue } } + if (key in liveTerminalValues) entry.liveTerminal = { value: liveTerminalValues[key]() } written.push(entry) await applySetting(key, value) } } catch (error) { failure = error instanceof Error ? error.message : String(error) - for (const { key, previous, configGlobal } of written.reverse()) { + for (const { key, previous, configGlobal, liveTerminal } of written.reverse()) { try { if (configGlobal) { await vscode.workspace .getConfiguration(Package.name) .update(key, configGlobal.value, vscode.ConfigurationTarget.Global) } else { - await applySetting(key, previous) + await applySetting( + key, + previous === undefined && liveTerminal ? liveTerminal.value : previous, + ) } // Put back exactly what was stored, whatever defaulting the side effect applied. await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) From 8c30d02f23954cdcf38e64a9754b971b10b709eb Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 17:36:33 -0700 Subject: [PATCH 13/42] fix(ui): serialize MCP changes so a rollback lands after a timed-out one; snapshot terminalProfile and execaShellPath; stronger rollback tests --- .../__tests__/webviewMessageHandler.spec.ts | 198 ++++++++++++++---- src/core/webview/webviewMessageHandler.ts | 27 ++- 2 files changed, 178 insertions(+), 47 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 29ec2589ea..b67c5678ec 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2077,45 +2077,123 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) describe("the live terminal after a failed save", () => { - const cases: Array<[string, () => unknown, unknown]> = [ - ["terminalShellIntegrationTimeout", () => Terminal.getShellIntegrationTimeout(), 9_000], - ["terminalShellIntegrationDisabled", () => Terminal.getShellIntegrationDisabled(), false], - ["terminalCommandDelay", () => Terminal.getCommandDelay(), 50], - ["terminalPowershellCounter", () => Terminal.getPowershellCounter(), true], - ["terminalZshClearEolMark", () => Terminal.getTerminalZshClearEolMark(), false], - ["terminalZshOhMy", () => Terminal.getTerminalZshOhMy(), true], - ["terminalZshP10k", () => Terminal.getTerminalZshP10k(), true], - ["terminalZdotdir", () => Terminal.getTerminalZdotdir(), true], + // `running` is what the terminal is running with (not a built-in default), `attempted` is what the save + // tries to apply. Both differ from the built-in default, so a rollback that resets to it would show. + const cases: Array<{ + key: string + get: () => unknown + set: (value: never) => void + running: unknown + attempted: unknown + }> = [ + { + key: "terminalShellIntegrationTimeout", + get: () => Terminal.getShellIntegrationTimeout(), + set: (value: number) => Terminal.setShellIntegrationTimeout(value), + running: 7_000, + attempted: 9_000, + }, + { + key: "terminalShellIntegrationDisabled", + get: () => Terminal.getShellIntegrationDisabled(), + set: (value: boolean) => Terminal.setShellIntegrationDisabled(value), + running: false, + attempted: true, + }, + { + key: "terminalCommandDelay", + get: () => Terminal.getCommandDelay(), + set: (value: number) => Terminal.setCommandDelay(value), + running: 25, + attempted: 50, + }, + { + key: "terminalPowershellCounter", + get: () => Terminal.getPowershellCounter(), + set: (value: boolean) => Terminal.setPowershellCounter(value), + running: true, + attempted: false, + }, + { + key: "terminalZshClearEolMark", + get: () => Terminal.getTerminalZshClearEolMark(), + set: (value: boolean) => Terminal.setTerminalZshClearEolMark(value), + running: false, + attempted: true, + }, + { + key: "terminalZshOhMy", + get: () => Terminal.getTerminalZshOhMy(), + set: (value: boolean) => Terminal.setTerminalZshOhMy(value), + running: true, + attempted: false, + }, + { + key: "terminalZshP10k", + get: () => Terminal.getTerminalZshP10k(), + set: (value: boolean) => Terminal.setTerminalZshP10k(value), + running: true, + attempted: false, + }, + { + key: "terminalZdotdir", + get: () => Terminal.getTerminalZdotdir(), + set: (value: boolean) => Terminal.setTerminalZdotdir(value), + running: true, + attempted: false, + }, + { + key: "terminalProfile", + get: () => Terminal.getTerminalProfile(), + set: (value: string | undefined) => Terminal.setTerminalProfile(value), + running: "Git Bash", + attempted: "PowerShell", + }, + { + key: "execaShellPath", + get: () => Terminal.getExecaShellPath(), + set: (value: string | undefined) => Terminal.setExecaShellPath(value), + running: "/bin/zsh", + attempted: "/bin/fish", + }, ] - it.each(cases)( - "puts the running value of %s back when it was never stored", - async (key, liveValue, newValue) => { - const before = liveValue() - // Precondition: the new value really differs from what is running, so a stale value would show. - expect(newValue).not.toBe(before) - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( - async (k: string, value: unknown) => { - if (k === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") - return real(k as never, value as never) - }, - ) - expect(stored).not.toHaveProperty(key) - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-terminal", - updatedSettings: { [key]: newValue, writeDelayMs: 2000 }, - }) + const failWriteDelay = () => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (k: string, value: unknown) => { + if (k === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") + return real(k as never, value as never) + }) + } - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-terminal", success: false }), - ) - // Storage is restored to "never stored"... - expect(stored[key]).toBeUndefined() - // ...and so is the live terminal. - expect(liveValue()).toBe(before) + it.each(cases)( + "puts back the running $key when it was never stored", + async ({ key, get, set, running, attempted }) => { + const original = get() + try { + // Set by something other than a stored setting (e.g. the extension API): never stored. + set(running as never) + expect(get()).toBe(running) + expect(attempted).not.toBe(running) + failWriteDelay() + expect(stored).not.toHaveProperty(key) + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-terminal", + updatedSettings: { [key]: attempted, writeDelayMs: 2000 }, + }) + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-terminal", success: false }), + ) + // Storage is restored to "never stored"... + expect(stored[key]).toBeUndefined() + // ...and the live terminal keeps the value it was running with, not a default or the attempt. + expect(get()).toBe(running) + } finally { + set(original as never) + } }, ) @@ -2142,11 +2220,17 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { beforeEach(() => vi.useFakeTimers()) afterEach(() => vi.useRealTimers()) - it("fails the save and rolls back when the MCP hub never answers, and the next save still runs", async () => { - const handleMcpEnabledChange = vi - .fn() - .mockImplementationOnce(() => new Promise(() => {})) - .mockResolvedValue(undefined) + it("fails the save when the MCP hub never answers, and never runs two hub changes at once", async () => { + const calls: boolean[] = [] + let running = 0 + let mostAtOnce = 0 + let finishFirst!: () => void + const handleMcpEnabledChange = vi.fn(async (enabled: boolean) => { + calls.push(enabled) + mostAtOnce = Math.max(mostAtOnce, ++running) + if (calls.length === 1) await new Promise((resolve) => (finishFirst = resolve)) + running-- + }) useMcpHub(handleMcpEnabledChange) stored.mcpEnabled = true @@ -2155,6 +2239,9 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { requestId: "save-mcp", updatedSettings: { soundEnabled: true, mcpEnabled: false }, }) + // The save stops waiting for the hub after 30s; its rollback then waits behind the same request, and + // stops waiting after another 30s. Neither wait blocks the save queue for longer than that. + await vi.advanceTimersByTimeAsync(30_000) await vi.advanceTimersByTimeAsync(30_000) await stuck @@ -2165,10 +2252,17 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { error: "Changing the MCP servers timed out after 30s", }) expect(stored).toMatchObject({ soundEnabled: false, mcpEnabled: true }) - // The rollback asked the hub for the previous state. - expect(handleMcpEnabledChange).toHaveBeenLastCalledWith(true) + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("Could not restore mcpEnabled")) + // The restore has not been started: it is queued behind the request that is still running. + expect(calls).toEqual([false]) + + // When the stuck request finally ends, the restore runs after it, so the hub ends in the previous state. + finishFirst() + await vi.advanceTimersByTimeAsync(0) + expect(calls).toEqual([false, true]) + expect(mostAtOnce).toBe(1) - // The queue was not left blocked. + // The save queue was not left blocked. await webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId: "save-next", @@ -2180,6 +2274,22 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { ) }) + it("keeps hub changes in the order they were made", async () => { + const calls: boolean[] = [] + useMcpHub(async (enabled) => { + calls.push(enabled) + }) + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { mcpEnabled: false }, + }) + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { mcpEnabled: true }, + }) + expect(calls).toEqual([false, true]) + }) + it("saves with the guard switched off when its install never finishes", async () => { vi.mocked(ensureDcgInstalled).mockImplementation(() => new Promise(() => {})) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index c879752d87..d5814e1abc 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -113,6 +113,7 @@ const ALLOWED_VSCODE_SETTINGS = new Set(["terminal.integrated.inheritEnv"]) let telemetrySettingQueue: Promise = Promise.resolve() import { MarketplaceManager, MarketplaceItemType } from "../../services/marketplace" +import type { McpHub } from "../../services/mcp/McpHub" import { setPendingTodoList } from "../tools/UpdateTodoListTool" import { handleListWorktrees, @@ -143,6 +144,22 @@ const DCG_INSTALL_TIMEOUT_MS = 180_000 /** Longest a save waits for the MCP hub to connect or disconnect its servers. */ const MCP_ENABLE_TIMEOUT_MS = 30_000 +/** + * MCP enable/disable requests, one at a time per hub, in the order they were made. `handleMcpEnabledChange` cannot + * be cancelled, so a request that outlives its timeout may still be running when the rollback asks for the previous + * state. Running them one after the other (not together) means the rollback lands after it and the hub ends in the + * state the save left it in, even if that is later than the save's own wait. + */ +const mcpEnableChains = new WeakMap>() +const changeMcpEnabled = (hub: McpHub, enabled: boolean): Promise => { + const run = (mcpEnableChains.get(hub) ?? Promise.resolve()).then(() => hub.handleMcpEnabledChange(enabled)) + mcpEnableChains.set( + hub, + run.catch(() => undefined), + ) + return run +} + /** * Stops waiting for `work` after `ms`, so one stage that never settles cannot hold the save queue (and so every * later save, for every provider) forever. `work` itself cannot be cancelled: callers must only use this where a @@ -896,9 +913,9 @@ const handleWebviewMessage = async ( const mcpHub = provider.getMcpHub() if (mcpHub) { - // A timeout fails the save, and the rollback asks the hub for the previous state. + // A timeout fails the save. The rollback asks the hub for the previous state, queued behind this request. await withTimeout( - mcpHub.handleMcpEnabledChange(newValue as boolean), + changeMcpEnabled(mcpHub, newValue as boolean), MCP_ENABLE_TIMEOUT_MS, "Changing the MCP servers", ) @@ -929,7 +946,7 @@ const handleWebviewMessage = async ( // the one `contextProxy` reads (the webview shows a union of both). Restoring them from `contextProxy` // would overwrite configuration-only entries, so their configuration value is snapshotted separately. const commandListKeys = new Set(["allowedCommands", "deniedCommands"]) - // The terminal settings are also applied to the live terminal, and their setters skip an unset value. + // The terminal settings are also applied to the live terminal, and most setters skip an unset value. // A setting that was never stored therefore cannot be undone by restoring `undefined`: the value the // terminal was running with is snapshotted and put back instead. const liveTerminalValues: Record unknown> = { @@ -941,6 +958,10 @@ const handleWebviewMessage = async ( terminalZshOhMy: () => Terminal.getTerminalZshOhMy(), terminalZshP10k: () => Terminal.getTerminalZshP10k(), terminalZdotdir: () => Terminal.getTerminalZdotdir(), + // Not skipped when unset, but an unset stored value is not the live one: the extension API can set + // these without storing them. + terminalProfile: () => Terminal.getTerminalProfile(), + execaShellPath: () => Terminal.getExecaShellPath(), } const written: Array<{ key: string From 0b4e2bc2315311f0e9d2516a39eef0997ad83ac7 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 17:37:54 -0700 Subject: [PATCH 14/42] refactor(ui): send the API configuration, telemetry and debug immediately again; the save result only clears the unsaved flag --- .../src/components/settings/SettingsView.tsx | 70 +++++------ .../SettingsView.saveResult.spec.tsx | 118 ++++++------------ 2 files changed, 69 insertions(+), 119 deletions(-) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 7b7eb5e9df..3292ebe98c 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -140,14 +140,8 @@ const SettingsView = forwardRef(({ onDone, t const [isChangeDetected, setChangeDetected] = useState(false) // The save currently waiting for the host's answer. The "unsaved changes" flag stays on until it succeeds. const [pendingSaveId, setPendingSaveId] = useState(undefined) - // False once the view has gone: a save started here can still be answered after that. - const isMounted = useRef(true) - useEffect(() => { - isMounted.current = true - return () => { - isMounted.current = false - } - }, []) + // The state the pending save was made from, to tell whether the user edited again while it was in flight. + const pendingSaveEditedState = useRef(undefined) const [errorMessage, setErrorMessage] = useState(undefined) const [activeTab, setActiveTab] = useState( targetSection && sectionNames.includes(targetSection as SectionName) @@ -405,37 +399,7 @@ const SettingsView = forwardRef(({ onDone, t const handleSubmit = () => { if (isSettingValid) { const saveId = `settings-save-${++saveCounter}` - // What the rest of this save sends once the host confirms the settings were stored. - const saved = { - configName: currentApiConfigName, - apiConfiguration, - telemetrySetting, - debug: cachedState.debug, - editedState: cachedState, - } - // Registered here, not from an effect, so it outlives this view: if the user leaves Settings before the - // host answers, the rest of the save must still be sent. - const onResult = (event: MessageEvent) => { - const message = event.data - if (message?.type !== "settingsSaveResult" || message.requestId !== saveId) return - - window.removeEventListener("message", onResult) - if (isMounted.current) setPendingSaveId(undefined) - if (!message.success) return - - // These have more complex logic so they aren't (yet) handled - // by the `updateSettings` message. - vscode.postMessage({ - type: "upsertApiConfiguration", - text: saved.configName, - apiConfiguration: saved.apiConfiguration, - }) - vscode.postMessage({ type: "telemetrySetting", text: saved.telemetrySetting }) - vscode.postMessage({ type: "debugSetting", bool: saved.debug }) - // An edit made while the save was in flight is not in what was sent: it stays unsaved. - if (isMounted.current && latestCachedState.current === saved.editedState) setChangeDetected(false) - } - window.addEventListener("message", onResult) + pendingSaveEditedState.current = cachedState setPendingSaveId(saveId) vscode.postMessage({ type: "updateSettings", @@ -520,10 +484,36 @@ const SettingsView = forwardRef(({ onDone, t }, }) - // A failed save leaves the user's edits in place to retry. + // These have more complex logic so they aren't (yet) handled + // by the `updateSettings` message. + vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration }) + vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting }) + vscode.postMessage({ type: "debugSetting", bool: cachedState.debug }) + + // The "unsaved changes" flag is cleared only once the host reports that `updateSettings` was stored: + // see the `settingsSaveResult` listener below. A failed save leaves the user's edits in place to retry. } } + useEffect(() => { + if (!pendingSaveId) return + + const onResult = (event: MessageEvent) => { + const message = event.data + if (message?.type !== "settingsSaveResult" || message.requestId !== pendingSaveId) return + + const editedState = pendingSaveEditedState.current + pendingSaveEditedState.current = undefined + setPendingSaveId(undefined) + + // An edit made while the save was in flight is not in what was sent: it stays unsaved. + if (message.success && latestCachedState.current === editedState) setChangeDetected(false) + } + + window.addEventListener("message", onResult) + return () => window.removeEventListener("message", onResult) + }, [pendingSaveId]) + const checkUnsaveChanges = useCallback( (then: () => void) => { if (isChangeDetected) { diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 99fb8a1425..3ab2dd3390 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -1,4 +1,4 @@ -import { act, fireEvent, screen, waitFor } from "@testing-library/react" +import { fireEvent, screen, waitFor } from "@testing-library/react" import { QueryClient } from "@tanstack/react-query" import { beforeEach, describe, expect, it, vi } from "vitest" @@ -32,7 +32,7 @@ const makeAnEdit = async () => { describe("SettingsView – save acknowledgement", () => { beforeEach(() => postMessage.mockClear()) - it("sends the settings with a request id and holds back the follow-up messages until the host confirms", async () => { + it("sends the settings with a request id, plus the API configuration, telemetry and debug as before", async () => { renderUiTab() await makeAnEdit() @@ -40,25 +40,25 @@ describe("SettingsView – save acknowledgement", () => { const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> expect(save.requestId).toMatch(/^settings-save-\d+$/) - // Nothing else is sent, and the unsaved flag stays on, until the host answers. - expect(posted("upsertApiConfiguration")).toHaveLength(0) - expect(posted("telemetrySetting")).toHaveLength(0) - expect(posted("debugSetting")).toHaveLength(0) + // These do not wait for the host's answer, exactly as before the acknowledgement existed. + expect(posted("upsertApiConfiguration")).toHaveLength(1) + expect(posted("telemetrySetting")).toHaveLength(1) + expect(posted("debugSetting")).toHaveLength(1) + // Save stays unavailable, and the edit stays unsaved, until the host answers. expect(screen.getByTestId("save-button")).toBeDisabled() }) - it("sends the rest of the save and clears the unsaved flag once the host confirms", async () => { + it("clears the unsaved flag once the host confirms, and sends nothing more", async () => { renderUiTab() await makeAnEdit() fireEvent.click(screen.getByTestId("save-button")) answerSave(lastSaveRequestId(postMessage), { success: true }) - await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) - expect(posted("telemetrySetting")).toHaveLength(1) - expect(posted("debugSetting")).toHaveLength(1) // Saved: nothing left to save. - expect(screen.getByTestId("save-button")).toBeDisabled() + await waitFor(() => expect(screen.getByTestId("save-button")).toBeDisabled()) + expect(posted("upsertApiConfiguration")).toHaveLength(1) + expect(posted("updateSettings")).toHaveLength(1) }) it("keeps the edits and the unsaved flag when the host reports a failure, so the user can retry", async () => { @@ -68,9 +68,6 @@ describe("SettingsView – save acknowledgement", () => { answerSave(lastSaveRequestId(postMessage), { success: false, error: "disk full" }) - // No follow-up writes after a failed save. - expect(posted("upsertApiConfiguration")).toHaveLength(0) - expect(posted("telemetrySetting")).toHaveLength(0) // The edit is still there, still unsaved, and Save is available again. await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) // The checkbox defaults to checked; the user unchecked it, and that edit survives the failed save. @@ -92,6 +89,7 @@ describe("SettingsView – save acknowledgement", () => { fireEvent.click(screen.getByTestId("save-button")) expect(posted("updateSettings")).toHaveLength(1) + expect(posted("upsertApiConfiguration")).toHaveLength(1) }) it("ignores an answer for a different save, or one that arrives with no id", async () => { @@ -99,24 +97,23 @@ describe("SettingsView – save acknowledgement", () => { await makeAnEdit() fireEvent.click(screen.getByTestId("save-button")) - answerSave("settings-save-999", { success: true }) + answerSave("settings-save-never-issued", { success: true }) answerSave(undefined, { success: true }) - - expect(posted("upsertApiConfiguration")).toHaveLength(0) expect(screen.getByTestId("save-button")).toBeDisabled() - // The real answer still works afterwards. - answerSave(lastSaveRequestId(postMessage), { success: true }) - await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) + // The real answer still works afterwards: the edit is saved and Save is idle. + answerSave(lastSaveRequestId(postMessage), { success: false }) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) }) it("ignores a save result when nothing is being saved", async () => { renderUiTab() - await screen.findByTestId("collapse-thinking-checkbox") - // An id no save was ever issued with (earlier tests may leave their own saves unanswered). + await makeAnEdit() answerSave("settings-save-never-issued", { success: true }) - expect(posted("upsertApiConfiguration")).toHaveLength(0) + // The unsaved edit is untouched. + expect(screen.getByTestId("save-button")).toBeEnabled() }) + it("keeps an edit made while the save was pending unsaved, so Save stays available for it", async () => { renderUiTab() await makeAnEdit() @@ -126,63 +123,27 @@ describe("SettingsView – save acknowledgement", () => { fireEvent.click(screen.getByTestId("enter-behavior-checkbox")) answerSave(lastSaveRequestId(postMessage), { success: true }) - await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) }) - it("sends the API configuration under the profile name it was submitted with", async () => { - renderWithExtensionState(, { - state: { currentApiConfigName: "first-profile" }, - queryClient: new QueryClient({ defaultOptions: { queries: { retry: false } } }), - }) - await makeAnEdit() - fireEvent.click(screen.getByTestId("save-button")) - - // The user switches profile before the host answers. - act(() => { - window.dispatchEvent( - new MessageEvent("message", { - data: { type: "state", state: { currentApiConfigName: "other-profile" } }, - }), - ) - }) - answerSave(lastSaveRequestId(postMessage), { success: true }) - - await waitFor(() => expect(posted("upsertApiConfiguration")).toHaveLength(1)) - expect(posted("upsertApiConfiguration")[0]).toMatchObject({ text: "first-profile" }) - }) - it("sends the rest of a save even when the view is gone before the host answers", async () => { - const view = renderUiTab() - await makeAnEdit() - fireEvent.click(screen.getByTestId("save-button")) - const id = lastSaveRequestId(postMessage) - - // The user leaves Settings (and discards) while the host is still storing the settings. - view.unmount() - expect(posted("upsertApiConfiguration")).toHaveLength(0) - - answerSave(id, { success: true }) - expect(posted("upsertApiConfiguration")).toHaveLength(1) - expect(posted("telemetrySetting")).toHaveLength(1) - expect(posted("debugSetting")).toHaveLength(1) - - // A second answer for the same save does nothing. - answerSave(id, { success: true }) - expect(posted("upsertApiConfiguration")).toHaveLength(1) + it("does nothing, and does not fail, when the answer arrives after the view is gone", async () => { + const consoleError = vi.spyOn(console, "error").mockImplementation(() => {}) + try { + const view = renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + const id = lastSaveRequestId(postMessage) + view.unmount() + + answerSave(id, { success: true }) + expect(posted("upsertApiConfiguration")).toHaveLength(1) + expect(consoleError).not.toHaveBeenCalled() + } finally { + consoleError.mockRestore() + } }) - it("sends nothing more when the host reports a failure after the view is gone", async () => { - const view = renderUiTab() - await makeAnEdit() - fireEvent.click(screen.getByTestId("save-button")) - const id = lastSaveRequestId(postMessage) - view.unmount() - - answerSave(id, { success: false, error: "disk full" }) - expect(posted("upsertApiConfiguration")).toHaveLength(0) - }) - - it("never reuses a request id across mounts, and answers each save for itself", async () => { + it("never reuses a request id across mounts, so an earlier save's answer cannot complete a later one", async () => { const first = renderUiTab() await makeAnEdit() fireEvent.click(screen.getByTestId("save-button")) @@ -195,12 +156,11 @@ describe("SettingsView – save acknowledgement", () => { const laterId = lastSaveRequestId(postMessage) expect(laterId).not.toBe(earlierId) - // The earlier save's answer completes the earlier save only: the new one is still pending. + // The earlier save's answer arrives while the new save is pending: it must not complete it. answerSave(earlierId, { success: true }) - expect(posted("upsertApiConfiguration")).toHaveLength(1) expect(screen.getByTestId("save-button")).toBeDisabled() - answerSave(laterId, { success: true }) - expect(posted("upsertApiConfiguration")).toHaveLength(2) + answerSave(laterId, { success: false }) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) }) }) From c496c6453215d900bb22ebcda942a61a02cb599a Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 17:38:55 -0700 Subject: [PATCH 15/42] test: cover a rejecting MCP hub change --- .../__tests__/webviewMessageHandler.spec.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index b67c5678ec..500654e33e 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2274,6 +2274,31 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { ) }) + it("fails the save when the hub rejects, and later hub changes still run", async () => { + const calls: boolean[] = [] + useMcpHub(async (enabled) => { + calls.push(enabled) + if (calls.length === 1) throw new Error("transport closed") + }) + stored.mcpEnabled = true + + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-hub-error", + updatedSettings: { mcpEnabled: false }, + }) + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-hub-error", + success: false, + error: "transport closed", + }) + // The failed request did not stop the rollback's request from running, in order. + expect(calls).toEqual([false, true]) + expect(stored.mcpEnabled).toBe(true) + }) + it("keeps hub changes in the order they were made", async () => { const calls: boolean[] = [] useMcpHub(async (enabled) => { From 76941c262949cf554fb90b68a6a91d4148e7989a Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 18:11:02 -0700 Subject: [PATCH 16/42] fix(ui): put the running language and speech values back when a failed save is rolled back --- .../webview/__tests__/ClineProvider.spec.ts | 2 + .../__tests__/webviewMessageHandler.spec.ts | 115 +++++++++++++++++- src/core/webview/webviewMessageHandler.ts | 25 ++-- src/i18n/index.ts | 7 ++ src/utils/tts.ts | 4 + 5 files changed, 142 insertions(+), 11 deletions(-) diff --git a/src/core/webview/__tests__/ClineProvider.spec.ts b/src/core/webview/__tests__/ClineProvider.spec.ts index 779313d385..741a4a19fd 100644 --- a/src/core/webview/__tests__/ClineProvider.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.spec.ts @@ -220,6 +220,8 @@ vi.mock("../../../utils/tts", () => ({ playTts: vi.fn().mockResolvedValue(undefined), setTtsEnabled: vi.fn(), setTtsSpeed: vi.fn(), + getTtsEnabled: vi.fn(() => false), + getTtsSpeed: vi.fn(() => 1), stopTts: vi.fn(), })) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 500654e33e..534ba4c25d 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -772,7 +772,8 @@ describe("webviewMessageHandler - theme fixture probes", () => { }) }) -import { t } from "../../../i18n" +import { changeLanguage, getLanguage, t } from "../../../i18n" +import { getTtsEnabled, getTtsSpeed, setTtsEnabled, setTtsSpeed } from "../../../utils/tts" vi.mock("vscode", () => { const showInformationMessage = vi.fn() @@ -801,7 +802,13 @@ vi.mock("vscode", () => { } }) +const i18nState = vi.hoisted(() => ({ language: "en" })) + vi.mock("../../../i18n", () => ({ + changeLanguage: vi.fn((language: string) => { + i18nState.language = language + }), + getLanguage: vi.fn(() => i18nState.language), t: vi.fn((key: string, args?: Record) => { // For the delete confirmation with rules, we need to return the interpolated string if (key === "common:confirmation.delete_custom_mode_with_rules" && args) { @@ -2212,6 +2219,112 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) }) + describe("the running language and speech after a failed save", () => { + const failWriteDelay = () => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (k: string, value: unknown) => { + if (k === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") + return real(k as never, value as never) + }) + } + const failedSave = (updatedSettings: Record) => + webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-runtime", + updatedSettings: { ...updatedSettings, writeDelayMs: 2000 }, + }) + + it("keeps the running language when none was stored (not English, and not the attempted one)", async () => { + const original = getLanguage() + try { + changeLanguage("es") + delete stored.language // never stored: the running language came from the host, not a setting + failWriteDelay() + expect(stored).not.toHaveProperty("language") + + await failedSave({ language: "fr" }) + + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-runtime", success: false }), + ) + expect(stored.language).toBeUndefined() + expect(getLanguage()).toBe("es") + } finally { + changeLanguage(original ?? "en") + } + }) + + it("keeps speech off when it was never turned on, although the attempt turned it on", async () => { + const original = getTtsEnabled() + try { + setTtsEnabled(false) + failWriteDelay() + expect(stored).not.toHaveProperty("ttsEnabled") + + await failedSave({ ttsEnabled: true }) + + expect(stored.ttsEnabled).toBeUndefined() + expect(getTtsEnabled()).toBe(false) + } finally { + setTtsEnabled(original) + } + }) + + it("keeps the running speech speed when none was stored", async () => { + const original = getTtsSpeed() + try { + setTtsSpeed(1.5) + failWriteDelay() + expect(stored).not.toHaveProperty("ttsSpeed") + + await failedSave({ ttsSpeed: 2 }) + + expect(stored.ttsSpeed).toBeUndefined() + expect(getTtsSpeed()).toBe(1.5) + } finally { + setTtsSpeed(original) + } + }) + + it("restores a stored language and speech value as before", async () => { + const originalLanguage = getLanguage() + const originalEnabled = getTtsEnabled() + try { + stored.language = "de" + stored.ttsEnabled = true + changeLanguage("de") + setTtsEnabled(true) + failWriteDelay() + + await failedSave({ language: "fr", ttsEnabled: false }) + + expect(stored).toMatchObject({ language: "de", ttsEnabled: true }) + expect(getLanguage()).toBe("de") + expect(getTtsEnabled()).toBe(true) + } finally { + changeLanguage(originalLanguage ?? "en") + setTtsEnabled(originalEnabled) + } + }) + + it("applies a successful save to the running language and speech", async () => { + const originalLanguage = getLanguage() + const originalEnabled = getTtsEnabled() + try { + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + requestId: "save-runtime-ok", + updatedSettings: { language: "ja", ttsEnabled: true }, + }) + expect(getLanguage()).toBe("ja") + expect(getTtsEnabled()).toBe(true) + } finally { + changeLanguage(originalLanguage ?? "en") + setTtsEnabled(originalEnabled) + } + }) + }) + describe("a stage that never settles", () => { // The provider double has no `getMcpHub`; it is added here without a cast. const useMcpHub = (handleMcpEnabledChange: (enabled: boolean) => Promise) => diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index d5814e1abc..948a9108eb 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -58,7 +58,7 @@ import { handleOpenRuleFile, handleOpenRulesDirectory, } from "./rulesMessageHandler" -import { changeLanguage, t } from "../../i18n" +import { changeLanguage, getLanguage, t } from "../../i18n" import { Package } from "../../shared/package" import { type RouterName, toRouterName } from "../../shared/api" import { MessageEnhancer } from "./messageEnhancer" @@ -75,7 +75,7 @@ import { selectImages } from "../../integrations/misc/process-images" import { getTheme } from "../../integrations/theme/getTheme" import { searchWorkspaceFiles } from "../../services/search/file-search" import { fileExistsAtPath } from "../../utils/fs" -import { playTts, setTtsEnabled, setTtsSpeed, stopTts } from "../../utils/tts" +import { getTtsEnabled, getTtsSpeed, playTts, setTtsEnabled, setTtsSpeed, stopTts } from "../../utils/tts" import { searchCommits } from "../../utils/git" import { exportSettings, importSettingsWithFeedback } from "../config/importExport" import { getOpenAiModels } from "../../api/providers/openai" @@ -946,10 +946,15 @@ const handleWebviewMessage = async ( // the one `contextProxy` reads (the webview shows a union of both). Restoring them from `contextProxy` // would overwrite configuration-only entries, so their configuration value is snapshotted separately. const commandListKeys = new Set(["allowedCommands", "deniedCommands"]) - // The terminal settings are also applied to the live terminal, and most setters skip an unset value. - // A setting that was never stored therefore cannot be undone by restoring `undefined`: the value the - // terminal was running with is snapshotted and put back instead. - const liveTerminalValues: Record unknown> = { + // Some settings are also applied to the running extension (the terminal, the host language, speech). + // Restoring `undefined` for one that was never stored does not put the running value back: most + // terminal setters skip it, and the others apply their own fallback, which is not the runtime + // default (for example speech would turn on, and the language would switch to English). The value + // it was running with is snapshotted and put back instead. + const liveRuntimeValues: Record unknown> = { + language: () => getLanguage(), + ttsEnabled: () => getTtsEnabled(), + ttsSpeed: () => getTtsSpeed(), terminalShellIntegrationTimeout: () => Terminal.getShellIntegrationTimeout(), terminalShellIntegrationDisabled: () => Terminal.getShellIntegrationDisabled(), terminalCommandDelay: () => Terminal.getCommandDelay(), @@ -967,7 +972,7 @@ const handleWebviewMessage = async ( key: string previous: unknown configGlobal?: { value: unknown } - liveTerminal?: { value: unknown } + liveRuntime?: { value: unknown } }> = [] let failure: string | undefined try { @@ -980,13 +985,13 @@ const handleWebviewMessage = async ( const inspected = vscode.workspace.getConfiguration(Package.name).inspect(key) entry.configGlobal = { value: inspected?.globalValue } } - if (key in liveTerminalValues) entry.liveTerminal = { value: liveTerminalValues[key]() } + if (key in liveRuntimeValues) entry.liveRuntime = { value: liveRuntimeValues[key]() } written.push(entry) await applySetting(key, value) } } catch (error) { failure = error instanceof Error ? error.message : String(error) - for (const { key, previous, configGlobal, liveTerminal } of written.reverse()) { + for (const { key, previous, configGlobal, liveRuntime } of written.reverse()) { try { if (configGlobal) { await vscode.workspace @@ -995,7 +1000,7 @@ const handleWebviewMessage = async ( } else { await applySetting( key, - previous === undefined && liveTerminal ? liveTerminal.value : previous, + previous === undefined && liveRuntime ? liveRuntime.value : previous, ) } // Put back exactly what was stored, whatever defaulting the side effect applied. diff --git a/src/i18n/index.ts b/src/i18n/index.ts index a98fce9720..8455fb1a84 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -18,6 +18,13 @@ export function changeLanguage(language: string): void { i18next.changeLanguage(language) } +/** + * The language the extension host is currently using + */ +export function getLanguage(): string | undefined { + return i18next.language +} + /** * Translate a string using i18next * diff --git a/src/utils/tts.ts b/src/utils/tts.ts index a81e35a1cd..4b0693cec2 100644 --- a/src/utils/tts.ts +++ b/src/utils/tts.ts @@ -17,10 +17,14 @@ let isTtsEnabled = false export const setTtsEnabled = (enabled: boolean) => (isTtsEnabled = enabled) +export const getTtsEnabled = () => isTtsEnabled + let speed = 1.0 export const setTtsSpeed = (newSpeed: number) => (speed = newSpeed) +export const getTtsSpeed = () => speed + let sayInstance: Say | undefined = undefined let queue: QueueItem[] = [] From 681a72116a2443a4b15d14ef8dd4d3065e9570a8 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 19:19:34 -0700 Subject: [PATCH 17/42] fix(ui): roll back to the running value, not only when the stored one is unset --- .../__tests__/webviewMessageHandler.spec.ts | 17 +++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 14 ++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 534ba4c25d..7fb40c9e4c 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2307,6 +2307,23 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { } }) + it("puts back the running language when it differs from the stored one", async () => { + const original = getLanguage() + try { + stored.language = "de" + changeLanguage("es") + failWriteDelay() + + await failedSave({ language: "fr" }) + + // The stored value is restored as it was; the running language is the one from before the save. + expect(stored.language).toBe("de") + expect(getLanguage()).toBe("es") + } finally { + changeLanguage(original ?? "en") + } + }) + it("applies a successful save to the running language and speech", async () => { const originalLanguage = getLanguage() const originalEnabled = getTtsEnabled() diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 948a9108eb..9f01533976 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -947,10 +947,11 @@ const handleWebviewMessage = async ( // would overwrite configuration-only entries, so their configuration value is snapshotted separately. const commandListKeys = new Set(["allowedCommands", "deniedCommands"]) // Some settings are also applied to the running extension (the terminal, the host language, speech). - // Restoring `undefined` for one that was never stored does not put the running value back: most - // terminal setters skip it, and the others apply their own fallback, which is not the runtime - // default (for example speech would turn on, and the language would switch to English). The value - // it was running with is snapshotted and put back instead. + // Restoring the stored value does not put the running one back: when nothing was stored, most terminal + // setters skip `undefined` and the others apply their own fallback, which is not the runtime default + // (speech would turn on, the language would switch to English); and when something was stored, the + // running value can still differ from it. The value it was running with is snapshotted and put back + // instead. The stored value is restored separately. const liveRuntimeValues: Record unknown> = { language: () => getLanguage(), ttsEnabled: () => getTtsEnabled(), @@ -998,10 +999,7 @@ const handleWebviewMessage = async ( .getConfiguration(Package.name) .update(key, configGlobal.value, vscode.ConfigurationTarget.Global) } else { - await applySetting( - key, - previous === undefined && liveRuntime ? liveRuntime.value : previous, - ) + await applySetting(key, liveRuntime ? liveRuntime.value : previous) } // Put back exactly what was stored, whatever defaulting the side effect applied. await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) From 283fe7375ea0ed694387100ba0e8902a3f4120b4 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 20:19:31 -0700 Subject: [PATCH 18/42] refactor(ui): apply the MCP setting to the hub after the save, not inside it; test getLanguage --- .../__tests__/webviewMessageHandler.spec.ts | 276 ++++++++++++------ src/core/webview/webviewMessageHandler.ts | 65 +++-- src/i18n/__tests__/language.spec.ts | 26 ++ 3 files changed, 254 insertions(+), 113 deletions(-) create mode 100644 src/i18n/__tests__/language.spec.ts diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 7fb40c9e4c..5d2ab5f07d 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2343,144 +2343,244 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) describe("a stage that never settles", () => { - // The provider double has no `getMcpHub`; it is added here without a cast. - const useMcpHub = (handleMcpEnabledChange: (enabled: boolean) => Promise) => - Reflect.set(mockClineProvider, "getMcpHub", vi.fn().mockReturnValue({ handleMcpEnabledChange })) - beforeEach(() => vi.useFakeTimers()) afterEach(() => vi.useRealTimers()) - it("fails the save when the MCP hub never answers, and never runs two hub changes at once", async () => { - const calls: boolean[] = [] - let running = 0 - let mostAtOnce = 0 - let finishFirst!: () => void - const handleMcpEnabledChange = vi.fn(async (enabled: boolean) => { - calls.push(enabled) - mostAtOnce = Math.max(mostAtOnce, ++running) - if (calls.length === 1) await new Promise((resolve) => (finishFirst = resolve)) - running-- - }) - useMcpHub(handleMcpEnabledChange) - stored.mcpEnabled = true + it("saves with the guard switched off when its install never finishes", async () => { + vi.mocked(ensureDcgInstalled).mockImplementation(() => new Promise(() => {})) const stuck = webviewMessageHandler(mockClineProvider, { type: "updateSettings", - requestId: "save-mcp", - updatedSettings: { soundEnabled: true, mcpEnabled: false }, + requestId: "save-dcg", + updatedSettings: { destructiveCommandGuardEnabled: true, soundEnabled: true }, }) - // The save stops waiting for the hub after 30s; its rollback then waits behind the same request, and - // stops waiting after another 30s. Neither wait blocks the save queue for longer than that. - await vi.advanceTimersByTimeAsync(30_000) - await vi.advanceTimersByTimeAsync(30_000) + await vi.advanceTimersByTimeAsync(180_000) await stuck + // A late install cannot turn the guard on: it was stored as off. + expect(stored).toMatchObject({ destructiveCommandGuardEnabled: false, soundEnabled: true }) + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith( + "common:errors.destructiveCommandGuard.enableFailed", + ) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", - requestId: "save-mcp", - success: false, - error: "Changing the MCP servers timed out after 30s", + requestId: "save-dcg", + success: true, }) - expect(stored).toMatchObject({ soundEnabled: false, mcpEnabled: true }) - expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("Could not restore mcpEnabled")) - // The restore has not been started: it is queued behind the request that is still running. - expect(calls).toEqual([false]) - - // When the stuck request finally ends, the restore runs after it, so the hub ends in the previous state. - finishFirst() - await vi.advanceTimersByTimeAsync(0) - expect(calls).toEqual([false, true]) - expect(mostAtOnce).toBe(1) + }) + + it("does not time out a stage that answers in time", async () => { + vi.mocked(ensureDcgInstalled).mockResolvedValue("/mock/global/storage/dcg") - // The save queue was not left blocked. await webviewMessageHandler(mockClineProvider, { type: "updateSettings", - requestId: "save-next", - updatedSettings: { writeDelayMs: 3000 }, + requestId: "save-fast", + updatedSettings: { destructiveCommandGuardEnabled: true }, + }) + // No timer is left running once the stage has answered. + expect(vi.getTimerCount()).toBe(0) + expect(stored.destructiveCommandGuardEnabled).toBe(true) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-fast", success: true }), + ) + }) + }) + + describe("the MCP hub follows the stored setting", () => { + // The provider double has no `getMcpHub`; it is added here without a cast. + const useMcpHub = (handleMcpEnabledChange: (enabled: boolean) => Promise) => + Reflect.set(mockClineProvider, "getMcpHub", vi.fn().mockReturnValue({ handleMcpEnabledChange })) + const save = (updatedSettings: Record, requestId = "save-mcp") => + webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId, updatedSettings }) + const flush = () => new Promise((resolve) => setTimeout(resolve, 0)) + + it("does not wait for the hub: a hub that never answers cannot hold up the save or the next one", async () => { + const handleMcpEnabledChange = vi.fn(() => new Promise(() => {})) + useMcpHub(handleMcpEnabledChange) + + await save({ mcpEnabled: false }) + + expect(stored.mcpEnabled).toBe(false) + expect(handleMcpEnabledChange).toHaveBeenCalledWith(false) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-mcp", + success: true, }) + + // The queue is free for the next save. + await save({ writeDelayMs: 3000 }, "save-next") expect(stored.writeDelayMs).toBe(3000) expect(mockClineProvider.postMessageToWebview).toHaveBeenLastCalledWith( expect.objectContaining({ requestId: "save-next", success: true }), ) }) - it("fails the save when the hub rejects, and later hub changes still run", async () => { + it("never touches the hub when the save fails, so there is nothing to roll back", async () => { + const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) + useMcpHub(handleMcpEnabledChange) + stored.mcpEnabled = true + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (key: string, value: unknown) => { + if (key === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") + return real(key as never, value as never) + }, + ) + + await save({ mcpEnabled: false, writeDelayMs: 2000 }) + await flush() + + expect(handleMcpEnabledChange).not.toHaveBeenCalled() + expect(stored.mcpEnabled).toBe(true) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-mcp", success: false }), + ) + }) + + it("does not call the hub when the save does not include the setting", async () => { + const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) + useMcpHub(handleMcpEnabledChange) + + await save({ soundEnabled: true }) + await flush() + + expect(handleMcpEnabledChange).not.toHaveBeenCalled() + }) + + it("treats an unset value as enabled, as the stored value is", async () => { + const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) + useMcpHub(handleMcpEnabledChange) + + await save({ mcpEnabled: undefined }) + + expect(handleMcpEnabledChange).toHaveBeenCalledWith(true) + }) + + const slowHub = () => { const calls: boolean[] = [] + const releases: Array<() => void> = [] + let running = 0 + let mostAtOnce = 0 useMcpHub(async (enabled) => { calls.push(enabled) - if (calls.length === 1) throw new Error("transport closed") + mostAtOnce = Math.max(mostAtOnce, ++running) + await new Promise((resolve) => releases.push(resolve)) + running-- }) - stored.mcpEnabled = true + return { calls, releases, mostAtOnce: () => mostAtOnce } + } - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-hub-error", - updatedSettings: { mcpEnabled: false }, - }) + it("changes the hub one request at a time and ends on the last stored value", async () => { + const hub = slowHub() - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ - type: "settingsSaveResult", - requestId: "save-hub-error", - success: false, - error: "transport closed", - }) - // The failed request did not stop the rollback's request from running, in order. - expect(calls).toEqual([false, true]) + await save({ mcpEnabled: false }, "save-1") + // The hub is still busy with the first change; another save arrives meanwhile. + await save({ mcpEnabled: true }, "save-2") + expect(hub.calls).toEqual([false]) + + // When the first finishes, the latest stored value is applied, after it and not alongside it. + hub.releases.shift()!() + await vi.waitFor(() => expect(hub.calls).toEqual([false, true])) + hub.releases.shift()!() + await flush() + + expect(hub.mostAtOnce()).toBe(1) expect(stored.mcpEnabled).toBe(true) }) - it("keeps hub changes in the order they were made", async () => { + it("skips a value that a later save superseded, and a change that would end where the hub is", async () => { + const hub = slowHub() + + await save({ mcpEnabled: false }, "save-1") + await save({ mcpEnabled: true }, "save-2") + await save({ mcpEnabled: false }, "save-3") + hub.releases.shift()!() + await flush() + + // The hub already ended on the value that was stored last, so nothing more is asked of it. + expect(hub.calls).toEqual([false]) + expect(stored.mcpEnabled).toBe(false) + }) + + it("applies a changed value after an earlier change has finished", async () => { const calls: boolean[] = [] useMcpHub(async (enabled) => { calls.push(enabled) }) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - updatedSettings: { mcpEnabled: false }, - }) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - updatedSettings: { mcpEnabled: true }, - }) + + await save({ mcpEnabled: false }) + await flush() + await save({ mcpEnabled: true }) + await flush() + expect(calls).toEqual([false, true]) }) - it("saves with the guard switched off when its install never finishes", async () => { - vi.mocked(ensureDcgInstalled).mockImplementation(() => new Promise(() => {})) - - const stuck = webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-dcg", - updatedSettings: { destructiveCommandGuardEnabled: true, soundEnabled: true }, + it("logs a hub failure without failing the save, and the next save applies its value again", async () => { + const calls: boolean[] = [] + useMcpHub(async (enabled) => { + calls.push(enabled) + if (calls.length === 1) throw new Error("transport closed") }) - await vi.advanceTimersByTimeAsync(180_000) - await stuck - // A late install cannot turn the guard on: it was stored as off. - expect(stored).toMatchObject({ destructiveCommandGuardEnabled: false, soundEnabled: true }) - expect(vscode.window.showErrorMessage).toHaveBeenCalledWith( - "common:errors.destructiveCommandGuard.enableFailed", + await save({ mcpEnabled: false }) + await vi.waitFor(() => + expect(mockClineProvider.log).toHaveBeenCalledWith( + expect.stringContaining("Could not disable the MCP servers: transport closed"), + ), ) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", - requestId: "save-dcg", + requestId: "save-mcp", success: true, }) + + // The hub state is unknown after the failure, so the same value is applied again. + await save({ mcpEnabled: false }, "save-retry") + await flush() + expect(calls).toEqual([false, false]) }) - it("does not time out a stage that answers in time", async () => { - const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) - useMcpHub(handleMcpEnabledChange) + it("logs a hub failure that is not an Error", async () => { + useMcpHub(async () => { + throw "plain failure" + }) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-fast", - updatedSettings: { mcpEnabled: false }, + await save({ mcpEnabled: true }) + + await vi.waitFor(() => + expect(mockClineProvider.log).toHaveBeenCalledWith( + expect.stringContaining("Could not enable the MCP servers: plain failure"), + ), + ) + }) + + it("applies a value saved while a failing change is still running", async () => { + const calls: boolean[] = [] + let failFirst!: () => void + useMcpHub(async (enabled) => { + calls.push(enabled) + if (calls.length === 1) { + await new Promise((_resolve, reject) => (failFirst = () => reject(new Error("boom")))) + } }) - // No timer is left running once the stage has answered. - expect(vi.getTimerCount()).toBe(0) + + await save({ mcpEnabled: false }, "save-1") + await save({ mcpEnabled: true }, "save-2") + failFirst() + + await vi.waitFor(() => expect(calls).toEqual([false, true])) + }) + + it("skips the hub when there is none", async () => { + Reflect.set(mockClineProvider, "getMcpHub", vi.fn().mockReturnValue(undefined)) + + await save({ mcpEnabled: false }) + + expect(stored.mcpEnabled).toBe(false) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-fast", success: true }), + expect.objectContaining({ requestId: "save-mcp", success: true }), ) }) }) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 9f01533976..3976d673d4 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -141,23 +141,41 @@ let settingsSaveChain: Promise = Promise.resolve() /** Longest a save waits for the download and install of the destructive command guard. */ const DCG_INSTALL_TIMEOUT_MS = 180_000 -/** Longest a save waits for the MCP hub to connect or disconnect its servers. */ -const MCP_ENABLE_TIMEOUT_MS = 30_000 - /** - * MCP enable/disable requests, one at a time per hub, in the order they were made. `handleMcpEnabledChange` cannot - * be cancelled, so a request that outlives its timeout may still be running when the rollback asks for the previous - * state. Running them one after the other (not together) means the rollback lands after it and the hub ends in the - * state the save left it in, even if that is later than the save's own wait. + * The MCP hub follows the stored `mcpEnabled` setting, but it is not part of a save. Connecting and disconnecting + * servers is slow and cannot be cancelled, so it cannot be rolled back, and waiting for it would hold up the save + * queue. A save therefore only stores the value; once the save has succeeded, this reconciles the hub with the + * latest stored value, one change at a time per hub. A later save only changes what the loop applies next, so + * changes never overlap and the hub always ends on the last value that was stored. */ -const mcpEnableChains = new WeakMap>() -const changeMcpEnabled = (hub: McpHub, enabled: boolean): Promise => { - const run = (mcpEnableChains.get(hub) ?? Promise.resolve()).then(() => hub.handleMcpEnabledChange(enabled)) - mcpEnableChains.set( - hub, - run.catch(() => undefined), - ) - return run +const mcpReconcilers = new WeakMap() +const reconcileMcpEnabled = (provider: ClineProvider, hub: McpHub, enabled: boolean): void => { + const state = mcpReconcilers.get(hub) ?? { desired: enabled, running: false } + mcpReconcilers.set(hub, state) + state.desired = enabled + if (state.running) return + + state.running = true + void (async () => { + try { + while (state.applied !== state.desired) { + const target = state.desired + try { + await hub.handleMcpEnabledChange(target) + state.applied = target + } catch (error) { + // Unknown state now: the next save applies its value even if it equals the last one. + state.applied = undefined + provider.log( + `[updateSettings] Could not ${target ? "enable" : "disable"} the MCP servers: ${error instanceof Error ? error.message : String(error)}`, + ) + if (state.desired === target) return + } + } + } finally { + state.running = false + } + })() } /** @@ -910,16 +928,7 @@ const handleWebviewMessage = async ( Terminal.setExecaShellPath(value as string | undefined) } else if (key === "mcpEnabled") { newValue = value ?? true - const mcpHub = provider.getMcpHub() - - if (mcpHub) { - // A timeout fails the save. The rollback asks the hub for the previous state, queued behind this request. - await withTimeout( - changeMcpEnabled(mcpHub, newValue as boolean), - MCP_ENABLE_TIMEOUT_MS, - "Changing the MCP servers", - ) - } + // Only stored here. The hub is reconciled after the save has succeeded. } else if (key === "experiments") { if (!value) { return false @@ -1013,6 +1022,12 @@ const handleWebviewMessage = async ( vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) } + // The save is decided. Bring the MCP hub in line with the value that was stored; not awaited. + if (failure === undefined && "mcpEnabled" in updatedSettings) { + const hub = provider.getMcpHub() + if (hub) reconcileMcpEnabled(provider, hub, updatedSettings.mcpEnabled ?? true) + } + // Notification phase: the outcome is already decided by the writes above. A failed refresh must neither // undo a stored save nor keep the webview from receiving the result (it waits on it to re-enable Save). try { diff --git a/src/i18n/__tests__/language.spec.ts b/src/i18n/__tests__/language.spec.ts new file mode 100644 index 0000000000..0c8278b0de --- /dev/null +++ b/src/i18n/__tests__/language.spec.ts @@ -0,0 +1,26 @@ +// npx vitest i18n/__tests__/language.spec.ts + +import { afterEach, describe, expect, it } from "vitest" + +import { changeLanguage, getLanguage, initializeI18n } from "../index" + +describe("getLanguage", () => { + const original = getLanguage() + + afterEach(() => { + changeLanguage(original ?? "en") + }) + + it("reports the language that was last set", () => { + changeLanguage("fr") + expect(getLanguage()).toBe("fr") + + changeLanguage("ja") + expect(getLanguage()).toBe("ja") + }) + + it("follows initializeI18n", () => { + initializeI18n("de") + expect(getLanguage()).toBe("de") + }) +}) From 7574094ae777e2e9cda71f4b49639ea5bca0a7d0 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Wed, 28 Oct 2026 20:56:45 -0700 Subject: [PATCH 19/42] fix(ui): apply the MCP setting on every save that includes it; coalesce changes that arrive meanwhile --- .../__tests__/webviewMessageHandler.spec.ts | 46 +++++++++++++++++-- src/core/webview/webviewMessageHandler.ts | 26 +++++++---- 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 5d2ab5f07d..222d7cafbf 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2489,20 +2489,60 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { expect(stored.mcpEnabled).toBe(true) }) - it("skips a value that a later save superseded, and a change that would end where the hub is", async () => { + it("applies the latest value once after the running change, for saves that arrived meanwhile", async () => { const hub = slowHub() await save({ mcpEnabled: false }, "save-1") await save({ mcpEnabled: true }, "save-2") await save({ mcpEnabled: false }, "save-3") + expect(hub.calls).toEqual([false]) + + hub.releases.shift()!() + await vi.waitFor(() => expect(hub.calls).toEqual([false, false])) hub.releases.shift()!() await flush() - // The hub already ended on the value that was stored last, so nothing more is asked of it. - expect(hub.calls).toEqual([false]) + // One more change, not two: the superseded value is never applied, and the changes never overlap. + expect(hub.calls).toEqual([false, false]) + expect(hub.mostAtOnce()).toBe(1) expect(stored.mcpEnabled).toBe(false) }) + it("applies the setting on every save that includes it, even when the value is unchanged", async () => { + // Applying it also reconnects servers that failed to start, or were disconnected while the stored value + // stayed the same (for example by the refresh button), so a repeat save is not a no-op. + const calls: boolean[] = [] + useMcpHub(async (enabled) => { + calls.push(enabled) + }) + + await save({ mcpEnabled: true }, "save-1") + await flush() + await save({ mcpEnabled: true }, "save-2") + await flush() + await save({ mcpEnabled: true }, "save-3") + await flush() + + expect(calls).toEqual([true, true, true]) + }) + + it("applies a later mcpEnabled save once a change that never finishes ends, not before and not alongside", async () => { + const hub = slowHub() + + await save({ mcpEnabled: false }, "save-hung") + await save({ mcpEnabled: true }, "save-later") + await save({ writeDelayMs: 3000 }, "save-other") + await flush() + + // Saves are not held up, and the hub is not asked for a second change while the first is running. + expect(stored).toMatchObject({ mcpEnabled: true, writeDelayMs: 3000 }) + expect(hub.calls).toEqual([false]) + + hub.releases.shift()!() + await vi.waitFor(() => expect(hub.calls).toEqual([false, true])) + expect(hub.mostAtOnce()).toBe(1) + }) + it("applies a changed value after an earlier change has finished", async () => { const calls: boolean[] = [] useMcpHub(async (enabled) => { diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 3976d673d4..7563ea665e 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -144,32 +144,38 @@ const DCG_INSTALL_TIMEOUT_MS = 180_000 /** * The MCP hub follows the stored `mcpEnabled` setting, but it is not part of a save. Connecting and disconnecting * servers is slow and cannot be cancelled, so it cannot be rolled back, and waiting for it would hold up the save - * queue. A save therefore only stores the value; once the save has succeeded, this reconciles the hub with the - * latest stored value, one change at a time per hub. A later save only changes what the loop applies next, so - * changes never overlap and the hub always ends on the last value that was stored. + * queue. A save therefore only stores the value; once the save has succeeded, the hub is asked to apply it, one + * change at a time per hub. + * + * Every save that includes the setting applies it, even when the value did not change, as before: applying it + * also reconnects servers that failed to start. A save that arrives while a change is running is applied once + * more afterwards, with the latest stored value, so changes never overlap and the hub ends on the last value + * that was stored. + * + * There is no time limit on a change. `handleMcpEnabledChange` cannot be cancelled, and a change that is given + * up on could still finish and undo a newer one. A change that never finishes therefore delays later changes + * to the hub until the extension reloads; it does not delay saves, which only store the value. */ -const mcpReconcilers = new WeakMap() +const mcpReconcilers = new WeakMap() const reconcileMcpEnabled = (provider: ClineProvider, hub: McpHub, enabled: boolean): void => { - const state = mcpReconcilers.get(hub) ?? { desired: enabled, running: false } + const state = mcpReconcilers.get(hub) ?? { desired: enabled, pending: false, running: false } mcpReconcilers.set(hub, state) state.desired = enabled + state.pending = true if (state.running) return state.running = true void (async () => { try { - while (state.applied !== state.desired) { + while (state.pending) { + state.pending = false const target = state.desired try { await hub.handleMcpEnabledChange(target) - state.applied = target } catch (error) { - // Unknown state now: the next save applies its value even if it equals the last one. - state.applied = undefined provider.log( `[updateSettings] Could not ${target ? "enable" : "disable"} the MCP servers: ${error instanceof Error ? error.message : String(error)}`, ) - if (state.desired === target) return } } } finally { From 394bb68b7aef507110a94ea6ee6060fe4efc7600 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 07:43:32 -0700 Subject: [PATCH 20/42] refactor(ui): narrow the save transaction to stored values; drop the side-effect handling, MCP reconcile and save queue --- .../webview/__tests__/ClineProvider.spec.ts | 2 - .../__tests__/webviewMessageHandler.spec.ts | 943 +++--------------- src/core/webview/webviewMessageHandler.ts | 253 ++--- src/i18n/__tests__/language.spec.ts | 26 - src/i18n/index.ts | 7 - src/utils/tts.ts | 4 - 6 files changed, 192 insertions(+), 1043 deletions(-) delete mode 100644 src/i18n/__tests__/language.spec.ts diff --git a/src/core/webview/__tests__/ClineProvider.spec.ts b/src/core/webview/__tests__/ClineProvider.spec.ts index 741a4a19fd..779313d385 100644 --- a/src/core/webview/__tests__/ClineProvider.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.spec.ts @@ -220,8 +220,6 @@ vi.mock("../../../utils/tts", () => ({ playTts: vi.fn().mockResolvedValue(undefined), setTtsEnabled: vi.fn(), setTtsSpeed: vi.fn(), - getTtsEnabled: vi.fn(() => false), - getTtsSpeed: vi.fn(() => 1), stopTts: vi.fn(), })) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 222d7cafbf..d6466fde16 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -772,8 +772,7 @@ describe("webviewMessageHandler - theme fixture probes", () => { }) }) -import { changeLanguage, getLanguage, t } from "../../../i18n" -import { getTtsEnabled, getTtsSpeed, setTtsEnabled, setTtsSpeed } from "../../../utils/tts" +import { t } from "../../../i18n" vi.mock("vscode", () => { const showInformationMessage = vi.fn() @@ -798,17 +797,10 @@ vi.mock("vscode", () => { env: { isTelemetryEnabled: true, }, - ConfigurationTarget: { Global: 1 }, } }) -const i18nState = vi.hoisted(() => ({ language: "en" })) - vi.mock("../../../i18n", () => ({ - changeLanguage: vi.fn((language: string) => { - i18nState.language = language - }), - getLanguage: vi.fn(() => i18nState.language), t: vi.fn((key: string, args?: Record) => { // For the delete confirmation with rules, we need to return the interpolated string if (key === "common:confirmation.delete_custom_mode_with_rules" && args) { @@ -1861,77 +1853,41 @@ describe("webviewMessageHandler - message dialog preferences", () => { }) }) -describe("webviewMessageHandler - mcpEnabled", () => { - let mockMcpHub: any - - beforeEach(() => { - vi.clearAllMocks() - - // Create a mock McpHub instance - mockMcpHub = { - handleMcpEnabledChange: vi.fn().mockResolvedValue(undefined), - } - - // Ensure provider exposes getMcpHub and returns our mock - ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue(mockMcpHub) - }) - - it("delegates enable=true to McpHub and posts updated state", async () => { - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - updatedSettings: { mcpEnabled: true }, - }) - - expect((mockClineProvider as any).getMcpHub).toHaveBeenCalledTimes(1) - expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledTimes(1) - expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledWith(true) - expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) - }) +describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { + const stored: Record = {} - it("delegates enable=false to McpHub and posts updated state", async () => { - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - updatedSettings: { mcpEnabled: false }, + /** Makes the write of one key fail (and runs `beforeThrow`, e.g. to simulate another save writing meanwhile). */ + const failWriteOf = (key: string, value: unknown, beforeThrow?: () => void) => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (k: string, v: unknown) => { + if (k === key && v === value) { + beforeThrow?.() + throw new Error("storage unavailable") + } + return real(k as never, v as never) }) + } - expect((mockClineProvider as any).getMcpHub).toHaveBeenCalledTimes(1) - expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledTimes(1) - expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledWith(false) - expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) - }) - - it("handles missing McpHub instance gracefully and still posts state", async () => { - ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue(undefined) - - await webviewMessageHandler(mockClineProvider, { + const save = (updatedSettings: Record, requestId: string | null = "save-1") => + webviewMessageHandler(mockClineProvider, { type: "updateSettings", - updatedSettings: { mcpEnabled: true }, + requestId: requestId ?? undefined, + updatedSettings, }) - expect((mockClineProvider as any).getMcpHub).toHaveBeenCalledTimes(1) - expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) - }) -}) - -describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { - const stored: Record = {} - beforeEach(() => { vi.clearAllMocks() for (const key of Object.keys(stored)) delete stored[key] - Object.assign(stored, { soundEnabled: false, writeDelayMs: 1000, language: "en" }) + Object.assign(stored, { soundEnabled: false, writeDelayMs: 1000, terminalCommandDelay: 0 }) vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => stored[key] as never) vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { stored[key] = value }) + vi.mocked(mockClineProvider.postStateToWebview).mockResolvedValue(undefined as never) }) it("stores every setting and confirms the save by request id", async () => { - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-1", - updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, - }) + await save({ soundEnabled: true, writeDelayMs: 2000 }) expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() @@ -1943,24 +1899,16 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { expect(vscode.window.showErrorMessage).not.toHaveBeenCalled() }) - it("restores the settings already written when a later one fails, and reports the failure", async () => { - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { - if (key === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") - return real(key as never, value as never) - }) + it("puts back the values already stored when a later one fails, and reports the failure", async () => { + failWriteOf("writeDelayMs", 2000) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-2", - updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, - }) + await save({ soundEnabled: true, writeDelayMs: 2000 }) - // soundEnabled was written first, then rolled back; writeDelayMs never changed. + // soundEnabled was stored first, then restored; writeDelayMs never changed. expect(stored).toMatchObject({ soundEnabled: false, writeDelayMs: 1000 }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", - requestId: "save-2", + requestId: "save-1", success: false, error: "storage unavailable", }) @@ -1973,32 +1921,40 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() }) - it("rolls back in reverse order, so the first-written value is restored last", async () => { + it("restores in reverse order, so the first stored value is restored last", async () => { const order: string[] = [] const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { - order.push(`${key}=${String(value)}`) + order.push(key) if (key === "terminalCommandDelay" && value === 50) throw new Error("boom") return real(key as never, value as never) }) - stored.terminalCommandDelay = 0 - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-3", - updatedSettings: { soundEnabled: true, writeDelayMs: 2000, terminalCommandDelay: 50 }, - }) + await save({ soundEnabled: true, writeDelayMs: 2000, terminalCommandDelay: 50 }) expect(stored).toMatchObject({ soundEnabled: false, writeDelayMs: 1000, terminalCommandDelay: 0 }) + // Three writes forward (the last one fails), then the restores in the opposite order. + expect(order).toEqual(["soundEnabled", "writeDelayMs", "terminalCommandDelay", "writeDelayMs", "soundEnabled"]) + }) - // Writes go forward in order; restores come back in the opposite order. - const failedAt = order.indexOf("terminalCommandDelay=50") - const restoreOrder = order - .slice(failedAt + 1) - .map((entry) => entry.split("=")[0]) - .filter((key, index, all) => all.indexOf(key) === index) - expect(restoreOrder.indexOf("writeDelayMs")).toBeGreaterThanOrEqual(0) - expect(restoreOrder.indexOf("soundEnabled")).toBeGreaterThan(restoreOrder.indexOf("writeDelayMs")) + it("keeps a newer value: a key is only restored while it still holds what this save wrote", async () => { + // Another save stores its own value for soundEnabled while this one is failing. + failWriteOf("writeDelayMs", 2000, () => { + stored.soundEnabled = "from another save" + }) + + await save({ soundEnabled: true, writeDelayMs: 2000 }) + + expect(stored.soundEnabled).toBe("from another save") + expect(stored.writeDelayMs).toBe(1000) + }) + + it("clears a key again that had no stored value before the save", async () => { + failWriteOf("writeDelayMs", 2000) + + await save({ terminalProfile: "bash", writeDelayMs: 2000 }) + + expect(stored.terminalProfile).toBeUndefined() }) it("keeps going and still reports the failure when a restore itself fails", async () => { @@ -2009,798 +1965,163 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { return real(key as never, value as never) }) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-4", - updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, - }) + await save({ soundEnabled: true, writeDelayMs: 2000 }) expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("Could not restore soundEnabled")) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ type: "settingsSaveResult", requestId: "save-4", success: false }), + expect.objectContaining({ requestId: "save-1", success: false }), ) }) + it("reports a restore failure that is not an Error", async () => { + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { + if (key === "writeDelayMs") throw new Error("writeDelayMs is broken") + if (key === "soundEnabled" && value === false) throw "plain restore failure" + return real(key as never, value as never) + }) + + await save({ soundEnabled: true, writeDelayMs: 2000 }) + + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain restore failure")) + }) + it("reports a non-Error failure by its text", async () => { vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValue("plain string failure") - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-5", - updatedSettings: { soundEnabled: true }, - }) + await save({ soundEnabled: true }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( expect.objectContaining({ success: false, error: "plain string failure" }), ) }) - it("still saves and re-syncs, without a result message, when the request has no id", async () => { - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - updatedSettings: { soundEnabled: true }, - }) + it("still saves and refreshes, without a result message, when the request has no id", async () => { + await save({ soundEnabled: true }, null) expect(stored.soundEnabled).toBe(true) expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() }) - it("keeps a stored save and still reports success when the state refresh fails", async () => { - vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) + it("does not report a failure to a request without an id either", async () => { + failWriteOf("soundEnabled", true) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-7", - updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, - }) + await save({ soundEnabled: true }, null) - expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ - type: "settingsSaveResult", - requestId: "save-7", - success: true, - }) - expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("state unavailable")) - expect(vscode.window.showErrorMessage).not.toHaveBeenCalled() + expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() + expect(vscode.window.showErrorMessage).toHaveBeenCalled() }) - it("still reports a failed save when the state refresh also fails", async () => { - vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValue(new Error("storage unavailable")) - vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-8", - updatedSettings: { soundEnabled: true }, - }) + it("does nothing when there are no settings to save", async () => { + await webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId: "save-6" }) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ - type: "settingsSaveResult", - requestId: "save-8", - success: false, - error: "storage unavailable", - }) + expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() + expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() }) - describe("the live terminal after a failed save", () => { - // `running` is what the terminal is running with (not a built-in default), `attempted` is what the save - // tries to apply. Both differ from the built-in default, so a rollback that resets to it would show. - const cases: Array<{ - key: string - get: () => unknown - set: (value: never) => void - running: unknown - attempted: unknown - }> = [ - { - key: "terminalShellIntegrationTimeout", - get: () => Terminal.getShellIntegrationTimeout(), - set: (value: number) => Terminal.setShellIntegrationTimeout(value), - running: 7_000, - attempted: 9_000, - }, - { - key: "terminalShellIntegrationDisabled", - get: () => Terminal.getShellIntegrationDisabled(), - set: (value: boolean) => Terminal.setShellIntegrationDisabled(value), - running: false, - attempted: true, - }, - { - key: "terminalCommandDelay", - get: () => Terminal.getCommandDelay(), - set: (value: number) => Terminal.setCommandDelay(value), - running: 25, - attempted: 50, - }, - { - key: "terminalPowershellCounter", - get: () => Terminal.getPowershellCounter(), - set: (value: boolean) => Terminal.setPowershellCounter(value), - running: true, - attempted: false, - }, - { - key: "terminalZshClearEolMark", - get: () => Terminal.getTerminalZshClearEolMark(), - set: (value: boolean) => Terminal.setTerminalZshClearEolMark(value), - running: false, - attempted: true, - }, - { - key: "terminalZshOhMy", - get: () => Terminal.getTerminalZshOhMy(), - set: (value: boolean) => Terminal.setTerminalZshOhMy(value), - running: true, - attempted: false, - }, - { - key: "terminalZshP10k", - get: () => Terminal.getTerminalZshP10k(), - set: (value: boolean) => Terminal.setTerminalZshP10k(value), - running: true, - attempted: false, - }, - { - key: "terminalZdotdir", - get: () => Terminal.getTerminalZdotdir(), - set: (value: boolean) => Terminal.setTerminalZdotdir(value), - running: true, - attempted: false, - }, - { - key: "terminalProfile", - get: () => Terminal.getTerminalProfile(), - set: (value: string | undefined) => Terminal.setTerminalProfile(value), - running: "Git Bash", - attempted: "PowerShell", - }, - { - key: "execaShellPath", - get: () => Terminal.getExecaShellPath(), - set: (value: string | undefined) => Terminal.setExecaShellPath(value), - running: "/bin/zsh", - attempted: "/bin/fish", - }, - ] - - const failWriteDelay = () => { - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (k: string, value: unknown) => { - if (k === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") - return real(k as never, value as never) - }) - } + it.each(["experiments", "customSupportPrompts"])("stores nothing for an empty %s value", async (key) => { + await save({ [key]: undefined, soundEnabled: true }) - it.each(cases)( - "puts back the running $key when it was never stored", - async ({ key, get, set, running, attempted }) => { - const original = get() - try { - // Set by something other than a stored setting (e.g. the extension API): never stored. - set(running as never) - expect(get()).toBe(running) - expect(attempted).not.toBe(running) - failWriteDelay() - expect(stored).not.toHaveProperty(key) - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-terminal", - updatedSettings: { [key]: attempted, writeDelayMs: 2000 }, - }) - - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-terminal", success: false }), - ) - // Storage is restored to "never stored"... - expect(stored[key]).toBeUndefined() - // ...and the live terminal keeps the value it was running with, not a default or the attempt. - expect(get()).toBe(running) - } finally { - set(original as never) - } - }, + expect(stored).not.toHaveProperty(key) + expect(stored.soundEnabled).toBe(true) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-1", success: true }), ) - - it("applies the new value to the live terminal when the save succeeds", async () => { - const before = Terminal.getCommandDelay() - try { - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-terminal-ok", - updatedSettings: { terminalCommandDelay: before + 75 }, - }) - expect(Terminal.getCommandDelay()).toBe(before + 75) - } finally { - Terminal.setCommandDelay(before) - } - }) - }) - - describe("the running language and speech after a failed save", () => { - const failWriteDelay = () => { - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (k: string, value: unknown) => { - if (k === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") - return real(k as never, value as never) - }) - } - const failedSave = (updatedSettings: Record) => - webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-runtime", - updatedSettings: { ...updatedSettings, writeDelayMs: 2000 }, - }) - - it("keeps the running language when none was stored (not English, and not the attempted one)", async () => { - const original = getLanguage() - try { - changeLanguage("es") - delete stored.language // never stored: the running language came from the host, not a setting - failWriteDelay() - expect(stored).not.toHaveProperty("language") - - await failedSave({ language: "fr" }) - - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-runtime", success: false }), - ) - expect(stored.language).toBeUndefined() - expect(getLanguage()).toBe("es") - } finally { - changeLanguage(original ?? "en") - } - }) - - it("keeps speech off when it was never turned on, although the attempt turned it on", async () => { - const original = getTtsEnabled() - try { - setTtsEnabled(false) - failWriteDelay() - expect(stored).not.toHaveProperty("ttsEnabled") - - await failedSave({ ttsEnabled: true }) - - expect(stored.ttsEnabled).toBeUndefined() - expect(getTtsEnabled()).toBe(false) - } finally { - setTtsEnabled(original) - } - }) - - it("keeps the running speech speed when none was stored", async () => { - const original = getTtsSpeed() - try { - setTtsSpeed(1.5) - failWriteDelay() - expect(stored).not.toHaveProperty("ttsSpeed") - - await failedSave({ ttsSpeed: 2 }) - - expect(stored.ttsSpeed).toBeUndefined() - expect(getTtsSpeed()).toBe(1.5) - } finally { - setTtsSpeed(original) - } - }) - - it("restores a stored language and speech value as before", async () => { - const originalLanguage = getLanguage() - const originalEnabled = getTtsEnabled() - try { - stored.language = "de" - stored.ttsEnabled = true - changeLanguage("de") - setTtsEnabled(true) - failWriteDelay() - - await failedSave({ language: "fr", ttsEnabled: false }) - - expect(stored).toMatchObject({ language: "de", ttsEnabled: true }) - expect(getLanguage()).toBe("de") - expect(getTtsEnabled()).toBe(true) - } finally { - changeLanguage(originalLanguage ?? "en") - setTtsEnabled(originalEnabled) - } - }) - - it("puts back the running language when it differs from the stored one", async () => { - const original = getLanguage() - try { - stored.language = "de" - changeLanguage("es") - failWriteDelay() - - await failedSave({ language: "fr" }) - - // The stored value is restored as it was; the running language is the one from before the save. - expect(stored.language).toBe("de") - expect(getLanguage()).toBe("es") - } finally { - changeLanguage(original ?? "en") - } - }) - - it("applies a successful save to the running language and speech", async () => { - const originalLanguage = getLanguage() - const originalEnabled = getTtsEnabled() - try { - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-runtime-ok", - updatedSettings: { language: "ja", ttsEnabled: true }, - }) - expect(getLanguage()).toBe("ja") - expect(getTtsEnabled()).toBe(true) - } finally { - changeLanguage(originalLanguage ?? "en") - setTtsEnabled(originalEnabled) - } - }) - }) - - describe("a stage that never settles", () => { - beforeEach(() => vi.useFakeTimers()) - afterEach(() => vi.useRealTimers()) - - it("saves with the guard switched off when its install never finishes", async () => { - vi.mocked(ensureDcgInstalled).mockImplementation(() => new Promise(() => {})) - - const stuck = webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-dcg", - updatedSettings: { destructiveCommandGuardEnabled: true, soundEnabled: true }, - }) - await vi.advanceTimersByTimeAsync(180_000) - await stuck - - // A late install cannot turn the guard on: it was stored as off. - expect(stored).toMatchObject({ destructiveCommandGuardEnabled: false, soundEnabled: true }) - expect(vscode.window.showErrorMessage).toHaveBeenCalledWith( - "common:errors.destructiveCommandGuard.enableFailed", - ) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ - type: "settingsSaveResult", - requestId: "save-dcg", - success: true, - }) - }) - - it("does not time out a stage that answers in time", async () => { - vi.mocked(ensureDcgInstalled).mockResolvedValue("/mock/global/storage/dcg") - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-fast", - updatedSettings: { destructiveCommandGuardEnabled: true }, - }) - // No timer is left running once the stage has answered. - expect(vi.getTimerCount()).toBe(0) - expect(stored.destructiveCommandGuardEnabled).toBe(true) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-fast", success: true }), - ) - }) }) - describe("the MCP hub follows the stored setting", () => { - // The provider double has no `getMcpHub`; it is added here without a cast. - const useMcpHub = (handleMcpEnabledChange: (enabled: boolean) => Promise) => - Reflect.set(mockClineProvider, "getMcpHub", vi.fn().mockReturnValue({ handleMcpEnabledChange })) - const save = (updatedSettings: Record, requestId = "save-mcp") => - webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId, updatedSettings }) - const flush = () => new Promise((resolve) => setTimeout(resolve, 0)) - - it("does not wait for the hub: a hub that never answers cannot hold up the save or the next one", async () => { - const handleMcpEnabledChange = vi.fn(() => new Promise(() => {})) - useMcpHub(handleMcpEnabledChange) + describe("when the state refresh fails", () => { + it("keeps a stored save and still reports success", async () => { + vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) - await save({ mcpEnabled: false }) + await save({ soundEnabled: true, writeDelayMs: 2000 }) - expect(stored.mcpEnabled).toBe(false) - expect(handleMcpEnabledChange).toHaveBeenCalledWith(false) + expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", - requestId: "save-mcp", + requestId: "save-1", success: true, }) - - // The queue is free for the next save. - await save({ writeDelayMs: 3000 }, "save-next") - expect(stored.writeDelayMs).toBe(3000) - expect(mockClineProvider.postMessageToWebview).toHaveBeenLastCalledWith( - expect.objectContaining({ requestId: "save-next", success: true }), - ) + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("state unavailable")) + expect(vscode.window.showErrorMessage).not.toHaveBeenCalled() }) - it("never touches the hub when the save fails, so there is nothing to roll back", async () => { - const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) - useMcpHub(handleMcpEnabledChange) - stored.mcpEnabled = true - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( - async (key: string, value: unknown) => { - if (key === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") - return real(key as never, value as never) - }, - ) + it("logs a refresh failure that is not an Error", async () => { + vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce("plain refresh failure") - await save({ mcpEnabled: false, writeDelayMs: 2000 }) - await flush() + await save({ soundEnabled: true }) - expect(handleMcpEnabledChange).not.toHaveBeenCalled() - expect(stored.mcpEnabled).toBe(true) + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain refresh failure")) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-mcp", success: false }), + expect.objectContaining({ requestId: "save-1", success: true }), ) }) - it("does not call the hub when the save does not include the setting", async () => { - const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) - useMcpHub(handleMcpEnabledChange) + it("still reports a failed save", async () => { + failWriteOf("soundEnabled", true) + vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) await save({ soundEnabled: true }) - await flush() - - expect(handleMcpEnabledChange).not.toHaveBeenCalled() - }) - - it("treats an unset value as enabled, as the stored value is", async () => { - const handleMcpEnabledChange = vi.fn().mockResolvedValue(undefined) - useMcpHub(handleMcpEnabledChange) - - await save({ mcpEnabled: undefined }) - expect(handleMcpEnabledChange).toHaveBeenCalledWith(true) - }) - - const slowHub = () => { - const calls: boolean[] = [] - const releases: Array<() => void> = [] - let running = 0 - let mostAtOnce = 0 - useMcpHub(async (enabled) => { - calls.push(enabled) - mostAtOnce = Math.max(mostAtOnce, ++running) - await new Promise((resolve) => releases.push(resolve)) - running-- - }) - return { calls, releases, mostAtOnce: () => mostAtOnce } - } - - it("changes the hub one request at a time and ends on the last stored value", async () => { - const hub = slowHub() - - await save({ mcpEnabled: false }, "save-1") - // The hub is still busy with the first change; another save arrives meanwhile. - await save({ mcpEnabled: true }, "save-2") - expect(hub.calls).toEqual([false]) - - // When the first finishes, the latest stored value is applied, after it and not alongside it. - hub.releases.shift()!() - await vi.waitFor(() => expect(hub.calls).toEqual([false, true])) - hub.releases.shift()!() - await flush() - - expect(hub.mostAtOnce()).toBe(1) - expect(stored.mcpEnabled).toBe(true) - }) - - it("applies the latest value once after the running change, for saves that arrived meanwhile", async () => { - const hub = slowHub() - - await save({ mcpEnabled: false }, "save-1") - await save({ mcpEnabled: true }, "save-2") - await save({ mcpEnabled: false }, "save-3") - expect(hub.calls).toEqual([false]) - - hub.releases.shift()!() - await vi.waitFor(() => expect(hub.calls).toEqual([false, false])) - hub.releases.shift()!() - await flush() - - // One more change, not two: the superseded value is never applied, and the changes never overlap. - expect(hub.calls).toEqual([false, false]) - expect(hub.mostAtOnce()).toBe(1) - expect(stored.mcpEnabled).toBe(false) - }) - - it("applies the setting on every save that includes it, even when the value is unchanged", async () => { - // Applying it also reconnects servers that failed to start, or were disconnected while the stored value - // stayed the same (for example by the refresh button), so a repeat save is not a no-op. - const calls: boolean[] = [] - useMcpHub(async (enabled) => { - calls.push(enabled) - }) - - await save({ mcpEnabled: true }, "save-1") - await flush() - await save({ mcpEnabled: true }, "save-2") - await flush() - await save({ mcpEnabled: true }, "save-3") - await flush() - - expect(calls).toEqual([true, true, true]) - }) - - it("applies a later mcpEnabled save once a change that never finishes ends, not before and not alongside", async () => { - const hub = slowHub() - - await save({ mcpEnabled: false }, "save-hung") - await save({ mcpEnabled: true }, "save-later") - await save({ writeDelayMs: 3000 }, "save-other") - await flush() - - // Saves are not held up, and the hub is not asked for a second change while the first is running. - expect(stored).toMatchObject({ mcpEnabled: true, writeDelayMs: 3000 }) - expect(hub.calls).toEqual([false]) - - hub.releases.shift()!() - await vi.waitFor(() => expect(hub.calls).toEqual([false, true])) - expect(hub.mostAtOnce()).toBe(1) - }) - - it("applies a changed value after an earlier change has finished", async () => { - const calls: boolean[] = [] - useMcpHub(async (enabled) => { - calls.push(enabled) - }) - - await save({ mcpEnabled: false }) - await flush() - await save({ mcpEnabled: true }) - await flush() - - expect(calls).toEqual([false, true]) - }) - - it("logs a hub failure without failing the save, and the next save applies its value again", async () => { - const calls: boolean[] = [] - useMcpHub(async (enabled) => { - calls.push(enabled) - if (calls.length === 1) throw new Error("transport closed") - }) - - await save({ mcpEnabled: false }) - await vi.waitFor(() => - expect(mockClineProvider.log).toHaveBeenCalledWith( - expect.stringContaining("Could not disable the MCP servers: transport closed"), - ), - ) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", - requestId: "save-mcp", - success: true, + requestId: "save-1", + success: false, + error: "storage unavailable", }) - - // The hub state is unknown after the failure, so the same value is applied again. - await save({ mcpEnabled: false }, "save-retry") - await flush() - expect(calls).toEqual([false, false]) - }) - - it("logs a hub failure that is not an Error", async () => { - useMcpHub(async () => { - throw "plain failure" - }) - - await save({ mcpEnabled: true }) - - await vi.waitFor(() => - expect(mockClineProvider.log).toHaveBeenCalledWith( - expect.stringContaining("Could not enable the MCP servers: plain failure"), - ), - ) - }) - - it("applies a value saved while a failing change is still running", async () => { - const calls: boolean[] = [] - let failFirst!: () => void - useMcpHub(async (enabled) => { - calls.push(enabled) - if (calls.length === 1) { - await new Promise((_resolve, reject) => (failFirst = () => reject(new Error("boom")))) - } - }) - - await save({ mcpEnabled: false }, "save-1") - await save({ mcpEnabled: true }, "save-2") - failFirst() - - await vi.waitFor(() => expect(calls).toEqual([false, true])) - }) - - it("skips the hub when there is none", async () => { - Reflect.set(mockClineProvider, "getMcpHub", vi.fn().mockReturnValue(undefined)) - - await save({ mcpEnabled: false }) - - expect(stored.mcpEnabled).toBe(false) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-mcp", success: true }), - ) }) }) +}) - describe("concurrent saves", () => { - it("run one at a time across providers, so a rollback cannot undo another save's writes", async () => { - // Two providers (sidebar and editor tab) share one ContextProxy. - const editorTab = { ...mockClineProvider } as typeof mockClineProvider - let openGate!: () => void - const gate = new Promise((resolve) => (openGate = resolve)) - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( - async (key: string, value: unknown) => { - if (key === "writeDelayMs" && value === 2000) { - await gate - throw new Error("storage unavailable") - } - return real(key as never, value as never) - }, - ) - - const failing = webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-a", - updatedSettings: { soundEnabled: true, writeDelayMs: 2000 }, - }) - await vi.waitFor(() => expect(stored.soundEnabled).toBe(true)) - - const later = webviewMessageHandler(editorTab, { - type: "updateSettings", - requestId: "save-b", - updatedSettings: { soundEnabled: true, terminalCommandDelay: 50 }, - }) - // The second save waits: it has not snapshotted or written anything while the first is in flight. - await new Promise((resolve) => setTimeout(resolve, 0)) - expect(stored).not.toHaveProperty("terminalCommandDelay") - - openGate() - await Promise.all([failing, later]) - - // The first was rolled back completely before the second ran, so the second's values stand. - expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 1000, terminalCommandDelay: 50 }) - expect(editorTab.postMessageToWebview).toHaveBeenCalledWith({ - type: "settingsSaveResult", - requestId: "save-b", - success: true, - }) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-a", success: false }), - ) - }) - - it("keeps saving after a save handler itself throws", async () => { - vi.mocked(mockClineProvider.postMessageToWebview).mockRejectedValueOnce(new Error("webview is gone")) - await expect( - webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-e", - updatedSettings: { soundEnabled: true }, - }), - ).rejects.toThrow("webview is gone") - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-f", - updatedSettings: { writeDelayMs: 3000 }, - }) - expect(stored.writeDelayMs).toBe(3000) - }) +describe("webviewMessageHandler - mcpEnabled", () => { + let mockMcpHub: any - it("keeps saving after a save has failed", async () => { - vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValueOnce(new Error("boom")) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-c", - updatedSettings: { soundEnabled: true }, - }) - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-d", - updatedSettings: { soundEnabled: true }, - }) - expect(stored.soundEnabled).toBe(true) - expect(mockClineProvider.postMessageToWebview).toHaveBeenLastCalledWith( - expect.objectContaining({ requestId: "save-d", success: true }), - ) - }) - }) + beforeEach(() => { + vi.clearAllMocks() - describe("the command lists live in two stores", () => { - const failWriteDelay = () => { - const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! - vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( - async (key: string, value: unknown) => { - if (key === "writeDelayMs" && value === 2000) throw new Error("storage unavailable") - return real(key as never, value as never) - }, - ) + // Create a mock McpHub instance + mockMcpHub = { + handleMcpEnabledChange: vi.fn().mockResolvedValue(undefined), } - it.each(["allowedCommands", "deniedCommands"])( - "restores %s in VS Code's global configuration from the configuration, not from global state", - async (key) => { - const update = vi.fn() - const inspect = vi.fn(() => ({ globalValue: ["from-config", "config-only"] })) - vi.mocked(vscode.workspace.getConfiguration).mockReturnValue({ update, inspect } as never) - stored[key] = ["from-state"] - failWriteDelay() - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-9", - updatedSettings: { [key]: ["new"], writeDelayMs: 2000 }, - }) - - expect(inspect).toHaveBeenCalledWith(key) - expect(update).toHaveBeenNthCalledWith(1, key, ["new"], vscode.ConfigurationTarget.Global) - // The rollback writes back what the configuration held, including the entry only it had. - expect(update).toHaveBeenLastCalledWith( - key, - ["from-config", "config-only"], - vscode.ConfigurationTarget.Global, - ) - expect(update).toHaveBeenCalledTimes(2) - // Global state is restored from its own snapshot. - expect(stored[key]).toEqual(["from-state"]) - }, - ) - - it("clears the configuration value again when it had none before the save", async () => { - const update = vi.fn() - vi.mocked(vscode.workspace.getConfiguration).mockReturnValue({ - update, - inspect: vi.fn(() => undefined), - } as never) - failWriteDelay() - - await webviewMessageHandler(mockClineProvider, { - type: "updateSettings", - requestId: "save-10", - updatedSettings: { deniedCommands: ["rm"], writeDelayMs: 2000 }, - }) + // Ensure provider exposes getMcpHub and returns our mock + ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue(mockMcpHub) + }) - expect(update).toHaveBeenLastCalledWith("deniedCommands", undefined, vscode.ConfigurationTarget.Global) + it("delegates enable=true to McpHub and posts updated state", async () => { + await webviewMessageHandler(mockClineProvider, { + type: "updateSettings", + updatedSettings: { mcpEnabled: true }, }) + + expect((mockClineProvider as any).getMcpHub).toHaveBeenCalledTimes(1) + expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledTimes(1) + expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledWith(true) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) }) - it.each(["experiments", "customSupportPrompts"])("stores nothing for an empty %s value", async (key) => { + it("delegates enable=false to McpHub and posts updated state", async () => { await webviewMessageHandler(mockClineProvider, { type: "updateSettings", - requestId: "save-11", - updatedSettings: { [key]: undefined, soundEnabled: true }, + updatedSettings: { mcpEnabled: false }, }) - expect(stored).not.toHaveProperty(key) - expect(stored.soundEnabled).toBe(true) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-11", success: true }), - ) + expect((mockClineProvider as any).getMcpHub).toHaveBeenCalledTimes(1) + expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledTimes(1) + expect(mockMcpHub.handleMcpEnabledChange).toHaveBeenCalledWith(false) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) }) - it("logs a refresh failure that is not an Error", async () => { - vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce("plain refresh failure") + it("handles missing McpHub instance gracefully and still posts state", async () => { + ;(mockClineProvider as any).getMcpHub = vi.fn().mockReturnValue(undefined) await webviewMessageHandler(mockClineProvider, { type: "updateSettings", - requestId: "save-12", - updatedSettings: { soundEnabled: true }, + updatedSettings: { mcpEnabled: true }, }) - expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain refresh failure")) - expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( - expect.objectContaining({ requestId: "save-12", success: true }), - ) - }) - - it("does nothing when there are no settings to save", async () => { - await webviewMessageHandler(mockClineProvider, { type: "updateSettings", requestId: "save-6" }) - expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() - expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() + expect((mockClineProvider as any).getMcpHub).toHaveBeenCalledTimes(1) + expect(mockClineProvider.postStateToWebview).toHaveBeenCalledTimes(1) }) }) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 7563ea665e..de86fb032e 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -2,6 +2,7 @@ import { safeWriteJson } from "../../utils/safeWriteJson" import * as path from "path" import * as os from "os" import * as fs from "fs/promises" +import deepEqual from "fast-deep-equal" import { getRooDirectoriesForCwd } from "../../services/roo-config/index.js" import pWaitFor from "p-wait-for" import * as vscode from "vscode" @@ -58,7 +59,7 @@ import { handleOpenRuleFile, handleOpenRulesDirectory, } from "./rulesMessageHandler" -import { changeLanguage, getLanguage, t } from "../../i18n" +import { changeLanguage, t } from "../../i18n" import { Package } from "../../shared/package" import { type RouterName, toRouterName } from "../../shared/api" import { MessageEnhancer } from "./messageEnhancer" @@ -75,7 +76,7 @@ import { selectImages } from "../../integrations/misc/process-images" import { getTheme } from "../../integrations/theme/getTheme" import { searchWorkspaceFiles } from "../../services/search/file-search" import { fileExistsAtPath } from "../../utils/fs" -import { getTtsEnabled, getTtsSpeed, playTts, setTtsEnabled, setTtsSpeed, stopTts } from "../../utils/tts" +import { playTts, setTtsEnabled, setTtsSpeed, stopTts } from "../../utils/tts" import { searchCommits } from "../../utils/git" import { exportSettings, importSettingsWithFeedback } from "../config/importExport" import { getOpenAiModels } from "../../api/providers/openai" @@ -113,7 +114,6 @@ const ALLOWED_VSCODE_SETTINGS = new Set(["terminal.integrated.inheritEnv"]) let telemetrySettingQueue: Promise = Promise.resolve() import { MarketplaceManager, MarketplaceItemType } from "../../services/marketplace" -import type { McpHub } from "../../services/mcp/McpHub" import { setPendingTodoList } from "../tools/UpdateTodoListTool" import { handleListWorktrees, @@ -131,89 +131,11 @@ import { const handlerFor = (apiConfiguration: ProviderSettings, provider: RouterName): ApiHandler => buildApiHandler({ ...apiConfiguration, apiProvider: provider }) -/** - * Settings saves run one at a time, across every provider (the sidebar and editor tabs share one `ContextProxy` - * and one set of VS Code settings). A save snapshots what is stored, writes, and on failure restores the - * snapshot. A second save interleaved with it would snapshot the first one's half-written values, and either - * rollback could put stale values back over the other save's successful writes. - */ -let settingsSaveChain: Promise = Promise.resolve() - -/** Longest a save waits for the download and install of the destructive command guard. */ -const DCG_INSTALL_TIMEOUT_MS = 180_000 -/** - * The MCP hub follows the stored `mcpEnabled` setting, but it is not part of a save. Connecting and disconnecting - * servers is slow and cannot be cancelled, so it cannot be rolled back, and waiting for it would hold up the save - * queue. A save therefore only stores the value; once the save has succeeded, the hub is asked to apply it, one - * change at a time per hub. - * - * Every save that includes the setting applies it, even when the value did not change, as before: applying it - * also reconnects servers that failed to start. A save that arrives while a change is running is applied once - * more afterwards, with the latest stored value, so changes never overlap and the hub ends on the last value - * that was stored. - * - * There is no time limit on a change. `handleMcpEnabledChange` cannot be cancelled, and a change that is given - * up on could still finish and undo a newer one. A change that never finishes therefore delays later changes - * to the hub until the extension reloads; it does not delay saves, which only store the value. - */ -const mcpReconcilers = new WeakMap() -const reconcileMcpEnabled = (provider: ClineProvider, hub: McpHub, enabled: boolean): void => { - const state = mcpReconcilers.get(hub) ?? { desired: enabled, pending: false, running: false } - mcpReconcilers.set(hub, state) - state.desired = enabled - state.pending = true - if (state.running) return - - state.running = true - void (async () => { - try { - while (state.pending) { - state.pending = false - const target = state.desired - try { - await hub.handleMcpEnabledChange(target) - } catch (error) { - provider.log( - `[updateSettings] Could not ${target ? "enable" : "disable"} the MCP servers: ${error instanceof Error ? error.message : String(error)}`, - ) - } - } - } finally { - state.running = false - } - })() -} - -/** - * Stops waiting for `work` after `ms`, so one stage that never settles cannot hold the save queue (and so every - * later save, for every provider) forever. `work` itself cannot be cancelled: callers must only use this where a - * late completion cannot change a setting after the save has been decided. - */ -const withTimeout = (work: Promise, ms: number, what: string): Promise => { - let timer: ReturnType | undefined - const timedOut = new Promise((_resolve, reject) => { - timer = setTimeout(() => reject(new Error(`${what} timed out after ${Math.round(ms / 1000)}s`)), ms) - }) - return Promise.race([work, timedOut]).finally(() => clearTimeout(timer)) -} - -export const webviewMessageHandler = ( +export const webviewMessageHandler = async ( provider: ClineProvider, message: WebviewMessage, marketplaceManager?: MarketplaceManager, -): Promise => { - if (message.type !== "updateSettings") return handleWebviewMessage(provider, message, marketplaceManager) - - const run = settingsSaveChain.then(() => handleWebviewMessage(provider, message, marketplaceManager)) - settingsSaveChain = run.catch(() => undefined) - return run -} - -const handleWebviewMessage = async ( - provider: ClineProvider, - message: WebviewMessage, - marketplaceManager?: MarketplaceManager, -): Promise => { +) => { // Utility functions provided for concise get/update of global state via contextProxy API. const getGlobalState = (key: K) => provider.contextProxy.getValue(key) const updateGlobalState = async (key: K, value: GlobalState[K]) => @@ -817,24 +739,26 @@ const handleWebviewMessage = async ( break case "updateSettings": { - const updatedSettings = message.updatedSettings - const saveRequestId = message.requestId - if (updatedSettings) { - if (updatedSettings.destructiveCommandGuardEnabled === true) { + // A save is all-or-nothing as far as the stored values go. If a write fails, the values this save already + // stored are put back, so the webview can keep the user's edits and let them retry. Only stored values + // are restored: side effects that ran in place (the language, speech, the terminal, ...) are not undone. + // A value is put back only while it is still the one this save wrote, so a newer save's value is kept. + const written: Array<{ key: string; previous: unknown; wrote: unknown }> = [] + let failure: string | undefined + + try { + if (!message.updatedSettings) break + + if (message.updatedSettings.destructiveCommandGuardEnabled === true) { try { const { ensureDcgInstalled } = await import("../../services/destructive-command-guard") - // A late install cannot change a setting: on a timeout the guard is switched off below. - const binaryPath = await withTimeout( - ensureDcgInstalled(provider.context.globalStorageUri.fsPath), - DCG_INSTALL_TIMEOUT_MS, - "Installing the destructive command guard", - ) + const binaryPath = await ensureDcgInstalled(provider.context.globalStorageUri.fsPath) if (!binaryPath) { - updatedSettings.destructiveCommandGuardEnabled = false + message.updatedSettings.destructiveCommandGuardEnabled = false vscode.window.showErrorMessage(t("common:errors.destructiveCommandGuard.unavailable")) } } catch (error) { - updatedSettings.destructiveCommandGuardEnabled = false + message.updatedSettings.destructiveCommandGuardEnabled = false vscode.window.showErrorMessage( t("common:errors.destructiveCommandGuard.enableFailed", { error: error instanceof Error ? error.message : String(error), @@ -843,8 +767,8 @@ const handleWebviewMessage = async ( } } - /** Applies one setting (its side effect, then the stored value). Returns whether a value was stored. */ - const applySetting = async (key: string, value: unknown): Promise => { + for (const [key, value] of Object.entries(message.updatedSettings)) { + const previous = provider.contextProxy.getValue(key as keyof RooCodeSettings) let newValue = value if (key === "language") { @@ -934,10 +858,14 @@ const handleWebviewMessage = async ( Terminal.setExecaShellPath(value as string | undefined) } else if (key === "mcpEnabled") { newValue = value ?? true - // Only stored here. The hub is reconciled after the save has succeeded. + const mcpHub = provider.getMcpHub() + + if (mcpHub) { + await mcpHub.handleMcpEnabledChange(newValue as boolean) + } } else if (key === "experiments") { if (!value) { - return false + continue } newValue = { @@ -946,112 +874,51 @@ const handleWebviewMessage = async ( } } else if (key === "customSupportPrompts") { if (!value) { - return false + continue } } - await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue as never) - return true + await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) + written.push({ key, previous, wrote: newValue }) } + } catch (error) { + failure = error instanceof Error ? error.message : String(error) - // Every key is snapshotted before it is written. If any write fails, the ones already applied are - // restored (stored value and side effect), so a save is all-or-nothing and the webview can keep - // the user's edits and let them retry. - // The command lists are also written to VS Code's global configuration, which is a different store from - // the one `contextProxy` reads (the webview shows a union of both). Restoring them from `contextProxy` - // would overwrite configuration-only entries, so their configuration value is snapshotted separately. - const commandListKeys = new Set(["allowedCommands", "deniedCommands"]) - // Some settings are also applied to the running extension (the terminal, the host language, speech). - // Restoring the stored value does not put the running one back: when nothing was stored, most terminal - // setters skip `undefined` and the others apply their own fallback, which is not the runtime default - // (speech would turn on, the language would switch to English); and when something was stored, the - // running value can still differ from it. The value it was running with is snapshotted and put back - // instead. The stored value is restored separately. - const liveRuntimeValues: Record unknown> = { - language: () => getLanguage(), - ttsEnabled: () => getTtsEnabled(), - ttsSpeed: () => getTtsSpeed(), - terminalShellIntegrationTimeout: () => Terminal.getShellIntegrationTimeout(), - terminalShellIntegrationDisabled: () => Terminal.getShellIntegrationDisabled(), - terminalCommandDelay: () => Terminal.getCommandDelay(), - terminalPowershellCounter: () => Terminal.getPowershellCounter(), - terminalZshClearEolMark: () => Terminal.getTerminalZshClearEolMark(), - terminalZshOhMy: () => Terminal.getTerminalZshOhMy(), - terminalZshP10k: () => Terminal.getTerminalZshP10k(), - terminalZdotdir: () => Terminal.getTerminalZdotdir(), - // Not skipped when unset, but an unset stored value is not the live one: the extension API can set - // these without storing them. - terminalProfile: () => Terminal.getTerminalProfile(), - execaShellPath: () => Terminal.getExecaShellPath(), - } - const written: Array<{ - key: string - previous: unknown - configGlobal?: { value: unknown } - liveRuntime?: { value: unknown } - }> = [] - let failure: string | undefined - try { - for (const [key, value] of Object.entries(updatedSettings)) { - const entry: (typeof written)[number] = { - key, - previous: provider.contextProxy.getValue(key as keyof RooCodeSettings), - } - if (commandListKeys.has(key)) { - const inspected = vscode.workspace.getConfiguration(Package.name).inspect(key) - entry.configGlobal = { value: inspected?.globalValue } - } - if (key in liveRuntimeValues) entry.liveRuntime = { value: liveRuntimeValues[key]() } - written.push(entry) - await applySetting(key, value) - } - } catch (error) { - failure = error instanceof Error ? error.message : String(error) - for (const { key, previous, configGlobal, liveRuntime } of written.reverse()) { - try { - if (configGlobal) { - await vscode.workspace - .getConfiguration(Package.name) - .update(key, configGlobal.value, vscode.ConfigurationTarget.Global) - } else { - await applySetting(key, liveRuntime ? liveRuntime.value : previous) - } - // Put back exactly what was stored, whatever defaulting the side effect applied. + for (const { key, previous, wrote } of written.reverse()) { + try { + if (deepEqual(provider.contextProxy.getValue(key as keyof RooCodeSettings), wrote)) { await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) - } catch (rollbackError) { - provider.log( - `[updateSettings] Could not restore ${key}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`, - ) } + } catch (rollbackError) { + provider.log( + `[updateSettings] Could not restore ${key}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`, + ) } - provider.log(`[updateSettings] Save failed and was rolled back: ${failure}`) - vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) } - // The save is decided. Bring the MCP hub in line with the value that was stored; not awaited. - if (failure === undefined && "mcpEnabled" in updatedSettings) { - const hub = provider.getMcpHub() - if (hub) reconcileMcpEnabled(provider, hub, updatedSettings.mcpEnabled ?? true) - } + provider.log(`[updateSettings] Save failed and was rolled back: ${failure}`) + vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) + } - // Notification phase: the outcome is already decided by the writes above. A failed refresh must neither - // undo a stored save nor keep the webview from receiving the result (it waits on it to re-enable Save). - try { - await provider.postStateToWebview() - } catch (error) { - provider.log( - `[updateSettings] Could not refresh the webview state: ${error instanceof Error ? error.message : String(error)}`, - ) - } - if (saveRequestId) { - await provider.postMessageToWebview({ - type: "settingsSaveResult", - requestId: saveRequestId, - success: failure === undefined, - ...(failure === undefined ? {} : { error: failure }), - }) - } + // The outcome is decided above. A failed refresh must neither undo a stored save nor keep the webview + // from receiving the result: it waits for it to re-enable Save. + try { + await provider.postStateToWebview() + } catch (error) { + provider.log( + `[updateSettings] Could not refresh the webview state: ${error instanceof Error ? error.message : String(error)}`, + ) } + + if (message.requestId) { + await provider.postMessageToWebview({ + type: "settingsSaveResult", + requestId: message.requestId, + success: failure === undefined, + ...(failure === undefined ? {} : { error: failure }), + }) + } + break } diff --git a/src/i18n/__tests__/language.spec.ts b/src/i18n/__tests__/language.spec.ts deleted file mode 100644 index 0c8278b0de..0000000000 --- a/src/i18n/__tests__/language.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -// npx vitest i18n/__tests__/language.spec.ts - -import { afterEach, describe, expect, it } from "vitest" - -import { changeLanguage, getLanguage, initializeI18n } from "../index" - -describe("getLanguage", () => { - const original = getLanguage() - - afterEach(() => { - changeLanguage(original ?? "en") - }) - - it("reports the language that was last set", () => { - changeLanguage("fr") - expect(getLanguage()).toBe("fr") - - changeLanguage("ja") - expect(getLanguage()).toBe("ja") - }) - - it("follows initializeI18n", () => { - initializeI18n("de") - expect(getLanguage()).toBe("de") - }) -}) diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 8455fb1a84..a98fce9720 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -18,13 +18,6 @@ export function changeLanguage(language: string): void { i18next.changeLanguage(language) } -/** - * The language the extension host is currently using - */ -export function getLanguage(): string | undefined { - return i18next.language -} - /** * Translate a string using i18next * diff --git a/src/utils/tts.ts b/src/utils/tts.ts index 4b0693cec2..a81e35a1cd 100644 --- a/src/utils/tts.ts +++ b/src/utils/tts.ts @@ -17,14 +17,10 @@ let isTtsEnabled = false export const setTtsEnabled = (enabled: boolean) => (isTtsEnabled = enabled) -export const getTtsEnabled = () => isTtsEnabled - let speed = 1.0 export const setTtsSpeed = (newSpeed: number) => (speed = newSpeed) -export const getTtsSpeed = () => speed - let sayInstance: Say | undefined = undefined let queue: QueueItem[] = [] From ae117d1205122c8254673053e3c725baf7921968 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 09:27:41 -0700 Subject: [PATCH 21/42] fix(ui): roll back only the appearance values, journal before the write, track the last writer instead of comparing values --- .../__tests__/webviewMessageHandler.spec.ts | 185 +++++++++++++----- src/core/webview/webviewMessageHandler.ts | 41 +++- 2 files changed, 170 insertions(+), 56 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index d6466fde16..1470fab99e 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -1853,15 +1853,20 @@ describe("webviewMessageHandler - message dialog preferences", () => { }) }) -describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { +describe("webviewMessageHandler - the appearance settings are saved all-or-nothing", () => { const stored: Record = {} - /** Makes the write of one key fail (and runs `beforeThrow`, e.g. to simulate another save writing meanwhile). */ - const failWriteOf = (key: string, value: unknown, beforeThrow?: () => void) => { + type WriteHook = (key: string, value: unknown) => Promise | void + + /** + * Makes the write of one key fail. `beforeThrow` can hold the failure back (to let another save run) or + * change what is stored, as a store whose cache was already updated when the write failed. + */ + const failWriteOf = (key: string, value: unknown, beforeThrow?: WriteHook) => { const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (k: string, v: unknown) => { if (k === key && v === value) { - beforeThrow?.() + await beforeThrow?.(k, v) throw new Error("storage unavailable") } return real(k as never, v as never) @@ -1878,7 +1883,7 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { beforeEach(() => { vi.clearAllMocks() for (const key of Object.keys(stored)) delete stored[key] - Object.assign(stored, { soundEnabled: false, writeDelayMs: 1000, terminalCommandDelay: 0 }) + Object.assign(stored, { interfaceFontScale: 100, terminalFontSize: 12, soundEnabled: false }) vi.mocked(mockClineProvider.contextProxy.getValue).mockImplementation((key: string) => stored[key] as never) vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { stored[key] = value @@ -1887,9 +1892,14 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) it("stores every setting and confirms the save by request id", async () => { - await save({ soundEnabled: true, writeDelayMs: 2000 }) + await save({ interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 }) - expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) + expect(stored).toMatchObject({ + interfaceFontScale: 120, + terminalFontSize: 14, + editorFontSize: 15, + spacingScale: 80, + }) expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", @@ -1900,12 +1910,11 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) it("puts back the values already stored when a later one fails, and reports the failure", async () => { - failWriteOf("writeDelayMs", 2000) + failWriteOf("editorFontSize", 15) - await save({ soundEnabled: true, writeDelayMs: 2000 }) + await save({ interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15 }) - // soundEnabled was stored first, then restored; writeDelayMs never changed. - expect(stored).toMatchObject({ soundEnabled: false, writeDelayMs: 1000 }) + expect(stored).toMatchObject({ interfaceFontScale: 100, terminalFontSize: 12 }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", requestId: "save-1", @@ -1921,53 +1930,123 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() }) + it("puts back the value whose own write failed after it had changed the stored value", async () => { + // As a store whose cache is updated before its write to disk fails. + failWriteOf("terminalFontSize", 14, (key, value) => { + stored[key] = value + }) + + await save({ terminalFontSize: 14 }) + + expect(stored.terminalFontSize).toBe(12) + }) + it("restores in reverse order, so the first stored value is restored last", async () => { const order: string[] = [] const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { order.push(key) - if (key === "terminalCommandDelay" && value === 50) throw new Error("boom") + if (key === "spacingScale" && value === 80) throw new Error("boom") return real(key as never, value as never) }) - await save({ soundEnabled: true, writeDelayMs: 2000, terminalCommandDelay: 50 }) + await save({ interfaceFontScale: 120, terminalFontSize: 14, spacingScale: 80 }) - expect(stored).toMatchObject({ soundEnabled: false, writeDelayMs: 1000, terminalCommandDelay: 0 }) - // Three writes forward (the last one fails), then the restores in the opposite order. - expect(order).toEqual(["soundEnabled", "writeDelayMs", "terminalCommandDelay", "writeDelayMs", "soundEnabled"]) + expect(stored).toMatchObject({ interfaceFontScale: 100, terminalFontSize: 12 }) + // Three writes forward (the last one fails), then the restores in the opposite order, failed key first. + expect(order).toEqual([ + "interfaceFontScale", + "terminalFontSize", + "spacingScale", + "spacingScale", + "terminalFontSize", + "interfaceFontScale", + ]) }) - it("keeps a newer value: a key is only restored while it still holds what this save wrote", async () => { - // Another save stores its own value for soundEnabled while this one is failing. - failWriteOf("writeDelayMs", 2000, () => { - stored.soundEnabled = "from another save" - }) + it("clears a value again that had no stored value before the save", async () => { + failWriteOf("terminalFontSize", 14) - await save({ soundEnabled: true, writeDelayMs: 2000 }) + await save({ editorFontSize: 15, terminalFontSize: 14 }) - expect(stored.soundEnabled).toBe("from another save") - expect(stored.writeDelayMs).toBe(1000) + expect(stored.editorFontSize).toBeUndefined() }) - it("clears a key again that had no stored value before the save", async () => { - failWriteOf("writeDelayMs", 2000) + describe("two saves at once", () => { + it("a failed save does not undo another save's different value", async () => { + let releaseFailure!: () => void + const held = new Promise((resolve) => (releaseFailure = resolve)) + failWriteOf("terminalFontSize", 14, () => held) + + const a = save({ interfaceFontScale: 120, terminalFontSize: 14 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + await save({ interfaceFontScale: 150 }, "save-b") + + releaseFailure() + await a + + expect(stored.interfaceFontScale).toBe(150) + }) + + it("a failed save does not undo another save that wrote the same value", async () => { + let releaseFailure!: () => void + const held = new Promise((resolve) => (releaseFailure = resolve)) + failWriteOf("terminalFontSize", 14, () => held) + + // Save A stores interfaceFontScale 120, then waits at its failing write. + const a = save({ interfaceFontScale: 120, terminalFontSize: 14 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + + // Save B stores the same value for the same key, and finishes. + await save({ interfaceFontScale: 120 }, "save-b") + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-b", + success: true, + }) - await save({ terminalProfile: "bash", writeDelayMs: 2000 }) + // Save A now fails and rolls back. B's write of the same value must stand. + releaseFailure() + await a - expect(stored.terminalProfile).toBeUndefined() + expect(stored.interfaceFontScale).toBe(120) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-a", success: false }), + ) + }) + + it("a later failure of the other save still puts its own writes back", async () => { + let releaseFailure!: () => void + const held = new Promise((resolve) => (releaseFailure = resolve)) + failWriteOf("editorFontSize", 15, () => held) + + // Save A holds at its failing write, and has not touched spacingScale. + const a = save({ terminalFontSize: 14, editorFontSize: 15 }, "save-a") + await vi.waitFor(() => expect(stored.terminalFontSize).toBe(14)) + // Save B writes a different key and finishes. + await save({ spacingScale: 80 }, "save-b") + + releaseFailure() + await a + + expect(stored.terminalFontSize).toBe(12) // A's own write is put back + expect(stored.spacingScale).toBe(80) // B's is untouched + }) }) it("keeps going and still reports the failure when a restore itself fails", async () => { const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { - if (key === "writeDelayMs") throw new Error("writeDelayMs is broken") - if (key === "soundEnabled" && value === false) throw new Error("cannot restore") + if (key === "terminalFontSize" && value === 14) throw new Error("terminalFontSize is broken") + if (key === "interfaceFontScale" && value === 100) throw new Error("cannot restore") return real(key as never, value as never) }) - await save({ soundEnabled: true, writeDelayMs: 2000 }) + await save({ interfaceFontScale: 120, terminalFontSize: 14 }) - expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("Could not restore soundEnabled")) + expect(mockClineProvider.log).toHaveBeenCalledWith( + expect.stringContaining("Could not restore interfaceFontScale"), + ) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( expect.objectContaining({ requestId: "save-1", success: false }), ) @@ -1976,12 +2055,12 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { it("reports a restore failure that is not an Error", async () => { const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { - if (key === "writeDelayMs") throw new Error("writeDelayMs is broken") - if (key === "soundEnabled" && value === false) throw "plain restore failure" + if (key === "terminalFontSize" && value === 14) throw new Error("terminalFontSize is broken") + if (key === "interfaceFontScale" && value === 100) throw "plain restore failure" return real(key as never, value as never) }) - await save({ soundEnabled: true, writeDelayMs: 2000 }) + await save({ interfaceFontScale: 120, terminalFontSize: 14 }) expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain restore failure")) }) @@ -1989,25 +2068,37 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { it("reports a non-Error failure by its text", async () => { vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValue("plain string failure") - await save({ soundEnabled: true }) + await save({ interfaceFontScale: 120 }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( expect.objectContaining({ success: false, error: "plain string failure" }), ) }) - it("still saves and refreshes, without a result message, when the request has no id", async () => { - await save({ soundEnabled: true }, null) + it("leaves every other setting as it was written: it is not put back when a later write fails", async () => { + failWriteOf("terminalFontSize", 14) + + await save({ soundEnabled: true, terminalFontSize: 14 }) + // Not an appearance value, so it keeps its existing behaviour. The failure is still reported. expect(stored.soundEnabled).toBe(true) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ requestId: "save-1", success: false }), + ) + }) + + it("still saves and refreshes, without a result message, when the request has no id", async () => { + await save({ interfaceFontScale: 120 }, null) + + expect(stored.interfaceFontScale).toBe(120) expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() }) it("does not report a failure to a request without an id either", async () => { - failWriteOf("soundEnabled", true) + failWriteOf("interfaceFontScale", 120) - await save({ soundEnabled: true }, null) + await save({ interfaceFontScale: 120 }, null) expect(mockClineProvider.postMessageToWebview).not.toHaveBeenCalled() expect(vscode.window.showErrorMessage).toHaveBeenCalled() @@ -2021,10 +2112,10 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) it.each(["experiments", "customSupportPrompts"])("stores nothing for an empty %s value", async (key) => { - await save({ [key]: undefined, soundEnabled: true }) + await save({ [key]: undefined, interfaceFontScale: 120 }) expect(stored).not.toHaveProperty(key) - expect(stored.soundEnabled).toBe(true) + expect(stored.interfaceFontScale).toBe(120) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( expect.objectContaining({ requestId: "save-1", success: true }), ) @@ -2034,9 +2125,9 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { it("keeps a stored save and still reports success", async () => { vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) - await save({ soundEnabled: true, writeDelayMs: 2000 }) + await save({ interfaceFontScale: 120, terminalFontSize: 14 }) - expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: 2000 }) + expect(stored).toMatchObject({ interfaceFontScale: 120, terminalFontSize: 14 }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", requestId: "save-1", @@ -2049,7 +2140,7 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { it("logs a refresh failure that is not an Error", async () => { vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce("plain refresh failure") - await save({ soundEnabled: true }) + await save({ interfaceFontScale: 120 }) expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain refresh failure")) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( @@ -2058,10 +2149,10 @@ describe("webviewMessageHandler - updateSettings is all-or-nothing", () => { }) it("still reports a failed save", async () => { - failWriteOf("soundEnabled", true) + failWriteOf("interfaceFontScale", 120) vi.mocked(mockClineProvider.postStateToWebview).mockRejectedValueOnce(new Error("state unavailable")) - await save({ soundEnabled: true }) + await save({ interfaceFontScale: 120 }) expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ type: "settingsSaveResult", diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index de86fb032e..5ac28befab 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -2,7 +2,6 @@ import { safeWriteJson } from "../../utils/safeWriteJson" import * as path from "path" import * as os from "os" import * as fs from "fs/promises" -import deepEqual from "fast-deep-equal" import { getRooDirectoriesForCwd } from "../../services/roo-config/index.js" import pWaitFor from "p-wait-for" import * as vscode from "vscode" @@ -131,6 +130,24 @@ import { const handlerFor = (apiConfiguration: ProviderSettings, provider: RouterName): ApiHandler => buildApiHandler({ ...apiConfiguration, apiProvider: provider }) +/** + * The settings a save puts back if it fails: the four appearance values, which are saved together and must not be + * left half changed. Every other setting keeps the way it is written, and the way a failure is handled, as before. + */ +const ROLLBACK_SETTING_KEYS = new Set([ + "interfaceFontScale", + "terminalFontSize", + "editorFontSize", + "spacingScale", +]) + +/** + * Which save wrote each of those settings last. A failed save puts a setting back only while it is still the one + * that wrote it. Comparing values instead would not tell two saves apart when they write the same value, and the + * failed one would undo the other's successful write. The store is shared by every provider (sidebar, editor tab). + */ +const lastWriterOfSetting = new Map() + export const webviewMessageHandler = async ( provider: ClineProvider, message: WebviewMessage, @@ -739,11 +756,11 @@ export const webviewMessageHandler = async ( break case "updateSettings": { - // A save is all-or-nothing as far as the stored values go. If a write fails, the values this save already - // stored are put back, so the webview can keep the user's edits and let them retry. Only stored values - // are restored: side effects that ran in place (the language, speech, the terminal, ...) are not undone. - // A value is put back only while it is still the one this save wrote, so a newer save's value is kept. - const written: Array<{ key: string; previous: unknown; wrote: unknown }> = [] + // The appearance values are saved all-or-nothing: if a write fails, the ones this save already stored are + // put back, so the webview can keep the user's edits and let them retry. A key is recorded before it is + // written, so a write that failed after changing the stored value is put back too. A key is put back only + // while this save is still the last one that wrote it, so a newer save's value is kept. + const written: Array<{ key: string; previous: unknown; writer: object }> = [] let failure: string | undefined try { @@ -878,15 +895,21 @@ export const webviewMessageHandler = async ( } } + if (ROLLBACK_SETTING_KEYS.has(key)) { + const writer = {} + written.push({ key, previous, writer }) + lastWriterOfSetting.set(key, writer) + } + await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) - written.push({ key, previous, wrote: newValue }) } } catch (error) { failure = error instanceof Error ? error.message : String(error) - for (const { key, previous, wrote } of written.reverse()) { + for (const { key, previous, writer } of written.reverse()) { try { - if (deepEqual(provider.contextProxy.getValue(key as keyof RooCodeSettings), wrote)) { + if (lastWriterOfSetting.get(key) === writer) { + lastWriterOfSetting.delete(key) await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) } } catch (rollbackError) { From ee7205a2f6a5a27838d63504f94b1dca5d99d494 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 09:46:14 -0700 Subject: [PATCH 22/42] test(ui): cover the reset telemetry value, and every consumer of the appearance values in a real browser --- webview-ui/playwright/gallery/stories.tsx | 5 ++ .../AppearanceConsumers.visual.fixture.tsx | 81 +++++++++++++++++++ .../__tests__/AppearanceConsumers.visual.tsx | 68 ++++++++++++++++ .../settings/__tests__/UISettings.spec.tsx | 19 +++++ 4 files changed, 173 insertions(+) create mode 100644 webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx create mode 100644 webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx diff --git a/webview-ui/playwright/gallery/stories.tsx b/webview-ui/playwright/gallery/stories.tsx index 5847933877..7198b17c32 100644 --- a/webview-ui/playwright/gallery/stories.tsx +++ b/webview-ui/playwright/gallery/stories.tsx @@ -415,6 +415,11 @@ export const stories: Record = { ) }, + "appearance-consumers": async () => { + const { AppearanceConsumersStory } = + await import("@/components/settings/__tests__/AppearanceConsumers.visual.fixture") + return + }, "appearance-preview": async () => { const { AppearancePreviewStory } = await import("@/components/settings/__tests__/AppearancePreview.visual.fixture") diff --git a/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx new file mode 100644 index 0000000000..79433d74e7 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx @@ -0,0 +1,81 @@ +import { useState } from "react" + +import { applyAppearanceVariables, type AppearanceValues } from "@src/utils/appearance" +import { AppProviders } from "../../../../playwright/AppProviders" +import { QueuedMessages } from "../../chat/QueuedMessages" +import { TerminalOutput } from "../../chat/TerminalOutput" +import CodeBlock from "../../common/CodeBlock" +import DiffView from "../../common/DiffView" +import MarkdownBlock from "../../common/MarkdownBlock" + +const VALUES: AppearanceValues = { + interfaceFontScale: 150, + terminalFontSize: 20, + editorFontSize: 22, + spacingScale: 150, +} + +const diff = `@@ -1,3 +1,3 @@ + export function greet(name: string) { +- return "Hello " + name ++ return \`Hello \${name}\` + }` + +/** + * The parts of the UI that read the appearance variables, with two buttons that apply the saved values to + * (through the same function the app uses) or remove them again. + */ +export function AppearanceConsumersStory() { + const [applied, setApplied] = useState(false) + const apply = (values: AppearanceValues) => applyAppearanceVariables(document.documentElement, values) + + return ( + +
    +
    + + + {applied ? "set" : "unset"} +
    + +
    + +
    +
    + {}} + onUpdate={() => {}} + /> +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + ) +} diff --git a/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx new file mode 100644 index 0000000000..c185727d81 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx @@ -0,0 +1,68 @@ +import type { Locator } from "@playwright/test" + +import { expect, test } from "../../../../playwright/coverage-fixture" +import { mountedStory } from "../../../../playwright/mounted-story" +import { applyVisualTheme, visualThemes } from "../../../../playwright/themes" + +const px = (locator: Locator, property: string) => + locator.evaluate((element, name) => Number.parseFloat(getComputedStyle(element).getPropertyValue(name)), property) + +// Real layout, so the computed values are the ones a user would get: the saved values are applied to through +// the app's own function, then removed again, and every consumer must follow both ways. +for (const theme of visualThemes) { + test(`the appearance values reach every consumer, and removing them restores the defaults (${theme.name})`, async ({ + mount, + page, + }) => { + const component = mountedStory(await mount("appearance-consumers")) + await applyVisualTheme(page, theme) + const story = component.getByTestId("appearance-consumers-story") + + const markdownText = story.getByTestId("consumer-markdown").locator("p").first() + const queued = story.getByTestId("queued-messages") + const terminal = story + .getByTestId("consumer-terminal") + .locator("pre, code, div") + .filter({ hasText: "Tests passed" }) + .last() + const diffCode = story.getByTestId("consumer-diff").locator(".diff-view").first() + await expect(markdownText).toBeVisible() + await expect(queued).toBeVisible() + await expect(diffCode).toBeVisible() + + // Unset: the historical look. + await expect(story.getByTestId("appearance-state")).toHaveText("unset") + const before = { + chat: await px(markdownText, "font-size"), + padX: await px(queued, "padding-left"), + padY: await px(queued, "padding-top"), + terminal: await px(terminal, "font-size"), + diff: await px(diffCode, "font-size"), + } + expect(before.padX).toBe(15) + expect(before.padY).toBe(10) + expect(before.terminal).not.toBe(20) + expect(before.diff).not.toBe(22) + await expect(page.locator("html")).not.toHaveClass(/zoo-editor-font-set/) + + // Set: interface 150%, terminal 20px, editor 22px, spacing 150%. + await story.getByTestId("apply-appearance").click() + await expect(story.getByTestId("appearance-state")).toHaveText("set") + await expect(page.locator("html")).toHaveClass(/zoo-editor-font-set/) + await expect.poll(() => px(queued, "padding-left")).toBe(22.5) // 15px at 150% + expect(await px(queued, "padding-top")).toBe(15) // 10px at 150% + expect(await px(markdownText, "font-size")).toBeCloseTo(before.chat * 1.5, 1) + expect(await px(terminal, "font-size")).toBe(20) + expect(await px(diffCode, "font-size")).toBe(22) + + // Removed again: every consumer is back on its default. + await story.getByTestId("remove-appearance").click() + await expect(story.getByTestId("appearance-state")).toHaveText("unset") + await expect(page.locator("html")).not.toHaveClass(/zoo-editor-font-set/) + await expect.poll(() => px(queued, "padding-left")).toBe(15) + expect(await px(queued, "padding-top")).toBe(10) + expect(await px(markdownText, "font-size")).toBeCloseTo(before.chat, 1) + expect(await px(terminal, "font-size")).toBeCloseTo(before.terminal, 1) + expect(await px(diffCode, "font-size")).toBeCloseTo(before.diff, 1) + }) +} diff --git a/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx b/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx index 245d50a05a..727ab84698 100644 --- a/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/UISettings.spec.tsx @@ -223,6 +223,25 @@ describe("UISettings", () => { expect(setCachedStateField).toHaveBeenCalledWith("terminalFontSize", undefined) }) + it.each([ + ["interfaceFontScale", 120], + ["terminalFontSize", 20], + ["editorFontSize", 18], + ["spacingScale", 80], + ] as const)("records a reset of %s as a null value, not a number", (key, current) => { + vi.mocked(telemetryClient.capture).mockClear() + const props = { ...defaultProps, [key]: current } + const { getByTestId } = render() + + fireEvent.click(getByTestId(`appearance-${key}-reset`)) + + expect(telemetryClient.capture).toHaveBeenCalledTimes(1) + expect(telemetryClient.capture).toHaveBeenCalledWith("ui_settings_appearance_changed", { + key, + value: null, + }) + }) + it("records telemetry for changes", () => { const { getByTestId } = render() fireEvent.click(getByTestId("appearance-editorFontSize-increment")) From fd9d98f64c5a729045467609974759c9f73f81e9 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 10:02:51 -0700 Subject: [PATCH 23/42] fix(ui): unwind overlapping failed saves in any order, keep imports, follow the existing error path for other keys, honest failure text --- .../__tests__/webviewMessageHandler.spec.ts | 133 +++++++++++++++++- src/core/webview/webviewMessageHandler.ts | 95 ++++++++++--- src/i18n/locales/ca/common.json | 2 +- src/i18n/locales/de/common.json | 2 +- src/i18n/locales/en/common.json | 2 +- src/i18n/locales/es/common.json | 2 +- src/i18n/locales/fr/common.json | 2 +- src/i18n/locales/hi/common.json | 2 +- src/i18n/locales/id/common.json | 2 +- src/i18n/locales/it/common.json | 2 +- src/i18n/locales/ja/common.json | 2 +- src/i18n/locales/ko/common.json | 2 +- src/i18n/locales/nl/common.json | 2 +- src/i18n/locales/pl/common.json | 2 +- src/i18n/locales/pt-BR/common.json | 2 +- src/i18n/locales/ru/common.json | 2 +- src/i18n/locales/tr/common.json | 2 +- src/i18n/locales/vi/common.json | 2 +- src/i18n/locales/zh-CN/common.json | 2 +- src/i18n/locales/zh-TW/common.json | 2 +- 20 files changed, 224 insertions(+), 40 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 1470fab99e..62a467bcb9 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -1925,9 +1925,11 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi expect.objectContaining({ success: true }), ) expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("common:errors.settings_save_failed") - expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("rolled back")) - // The webview is re-synced with what is really stored. + expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("Save failed")) + // The webview is re-synced with what is really stored: after the values were put back, not before. expect(mockClineProvider.postStateToWebview).toHaveBeenCalled() + const lastWrite = Math.max(...vi.mocked(mockClineProvider.contextProxy.setValue).mock.invocationCallOrder) + expect(vi.mocked(mockClineProvider.postStateToWebview).mock.invocationCallOrder[0]).toBeGreaterThan(lastWrite) }) it("puts back the value whose own write failed after it had changed the stored value", async () => { @@ -1953,12 +1955,12 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi await save({ interfaceFontScale: 120, terminalFontSize: 14, spacingScale: 80 }) expect(stored).toMatchObject({ interfaceFontScale: 100, terminalFontSize: 12 }) - // Three writes forward (the last one fails), then the restores in the opposite order, failed key first. + // Three writes forward (the last one fails and never changed the stored value, so there is nothing to put + // back for it), then the restores in the opposite order. expect(order).toEqual([ "interfaceFontScale", "terminalFontSize", "spacingScale", - "spacingScale", "terminalFontSize", "interfaceFontScale", ]) @@ -2015,6 +2017,104 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi ) }) + /** Two saves that both write the same key and then fail, each held at its own failing write. */ + const twoFailingSaves = async (releaseFirst: "a" | "b") => { + const gates: Record<"a" | "b", () => void> = { a: () => {}, b: () => {} } + const heldA = new Promise((resolve) => (gates.a = resolve)) + const heldB = new Promise((resolve) => (gates.b = resolve)) + failWriteOf("terminalFontSize", 14, () => heldA) + failWriteOf("editorFontSize", 15, () => heldB) + + const a = save({ interfaceFontScale: 120, terminalFontSize: 14 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + const b = save({ interfaceFontScale: 150, editorFontSize: 15 }, "save-b") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(150)) + + const [first, second] = releaseFirst === "a" ? (["a", "b"] as const) : (["b", "a"] as const) + gates[first]() + await (first === "a" ? a : b) + const afterFirst = stored.interfaceFontScale + gates[second]() + await (second === "a" ? a : b) + return { afterFirst, final: stored.interfaceFontScale } + } + + it("puts back the value from before both saves when both fail, the earlier one failing first", async () => { + const { afterFirst, final } = await twoFailingSaves("a") + + // The later save is still pending with 150, so the first failure leaves it. Then it restores 100. + expect(afterFirst).toBe(150) + expect(final).toBe(100) + }) + + it("puts back the value from before both saves when both fail, the later one failing first", async () => { + const { afterFirst, final } = await twoFailingSaves("b") + + // The later save restores the earlier one's pending value, and the earlier one then restores 100. + expect(afterFirst).toBe(120) + expect(final).toBe(100) + }) + + it("puts back the original value when three overlapping saves all fail, the middle one first", async () => { + const release: Record<"a" | "b" | "c", () => void> = { a: () => {}, b: () => {}, c: () => {} } + const gate = (name: "a" | "b" | "c") => new Promise((resolve) => (release[name] = resolve)) + const gates = { a: gate("a"), b: gate("b"), c: gate("c") } + failWriteOf("terminalFontSize", 14, () => gates.a) + failWriteOf("editorFontSize", 15, () => gates.b) + failWriteOf("spacingScale", 80, () => gates.c) + + const a = save({ interfaceFontScale: 120, terminalFontSize: 14 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + const b = save({ interfaceFontScale: 150, editorFontSize: 15 }, "save-b") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(150)) + const c = save({ interfaceFontScale: 180, spacingScale: 80 }, "save-c") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(180)) + + // The middle save fails first: the newest is still pending, so the value stays. + release.b() + await b + expect(stored.interfaceFontScale).toBe(180) + + // The newest fails: it goes back to the oldest save's pending value, not to the middle one's. + release.c() + await c + expect(stored.interfaceFontScale).toBe(120) + + // The oldest fails: back to the value from before all three. + release.a() + await a + expect(stored.interfaceFontScale).toBe(100) + }) + + it("keeps the earlier save's value when the later one fails and the earlier one succeeds", async () => { + let releaseFailure!: () => void + const held = new Promise((resolve) => (releaseFailure = resolve)) + failWriteOf("editorFontSize", 15, () => held) + + const later = (async () => { + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + return save({ interfaceFontScale: 150, editorFontSize: 15 }, "save-b") + })() + // The earlier save writes first and finishes while the later one is held. + await save({ interfaceFontScale: 120 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(150)) + + releaseFailure() + await later + + expect(stored.interfaceFontScale).toBe(120) + }) + + it("keeps a value changed outside a save, such as an import, when a failed save rolls back", async () => { + failWriteOf("terminalFontSize", 14, () => { + stored.interfaceFontScale = 90 // an import writes the same key meanwhile + }) + + await save({ interfaceFontScale: 120, terminalFontSize: 14 }) + + expect(stored.interfaceFontScale).toBe(90) + }) + it("a later failure of the other save still puts its own writes back", async () => { let releaseFailure!: () => void const held = new Promise((resolve) => (releaseFailure = resolve)) @@ -2065,6 +2165,31 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain restore failure")) }) + describe("a failure while writing another setting", () => { + it("puts the appearance values back, tells the webview, and then follows the existing error path", async () => { + failWriteOf("soundEnabled", true) + + await expect(save({ terminalFontSize: 14, soundEnabled: true })).rejects.toThrow("storage unavailable") + + expect(stored.terminalFontSize).toBe(12) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-1", + success: false, + error: "storage unavailable", + }) + // No toast: the existing path did not show one for these settings. + expect(vscode.window.showErrorMessage).not.toHaveBeenCalled() + }) + + it("does not reject for a failure of an appearance value, which is reported to the user instead", async () => { + failWriteOf("terminalFontSize", 14) + + await expect(save({ terminalFontSize: 14 })).resolves.toBeUndefined() + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("common:errors.settings_save_failed") + }) + }) + it("reports a non-Error failure by its text", async () => { vi.mocked(mockClineProvider.contextProxy.setValue).mockRejectedValue("plain string failure") diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 5ac28befab..be404308b8 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -141,12 +141,52 @@ const ROLLBACK_SETTING_KEYS = new Set([ "spacingScale", ]) +/** One write of a rolled-back setting by a save, linked to the writes of other saves that overlap it. */ +interface SettingWrite { + key: string + /** What was stored when this save wrote it. With overlapping saves, this can be another save's pending value. */ + previous: unknown + wrote: unknown + /** The write before this one that has not finished yet, and the one after it. */ + prev?: SettingWrite + next?: SettingWrite + /** The save has finished: it succeeded, or it has been rolled back. */ + done: boolean +} + /** - * Which save wrote each of those settings last. A failed save puts a setting back only while it is still the one - * that wrote it. Comparing values instead would not tell two saves apart when they write the same value, and the - * failed one would undo the other's successful write. The store is shared by every provider (sidebar, editor tab). + * The latest write of each of those settings. The store is shared by every provider (sidebar, editor tab), so saves + * can overlap, and writes to the same key form a chain. Rolling back a write puts the key back only while it is the + * latest one and the stored value is still what it wrote, so a newer save's value, or a change made outside a save + * (an import), is kept. A write that is rolled back while a newer one is pending is taken out of the chain, so that + * if the newer one fails too, it restores what was stored before either of them. */ -const lastWriterOfSetting = new Map() +const lastWriteOfSetting = new Map() + +const undoSettingWrite = async (provider: ClineProvider, write: SettingWrite) => { + const { key } = write + write.done = true + + if (lastWriteOfSetting.get(key) !== write) { + // A newer write exists. Make it restore the value from before this one if it fails as well. + const { next } = write + if (next && !next.done) { + next.previous = write.previous + next.prev = write.prev + if (write.prev) write.prev.next = next + } + + return + } + + // The write before this one is pending again: it is the latest, and the value now stored is its value. + if (write.prev && !write.prev.done) lastWriteOfSetting.set(key, write.prev) + else lastWriteOfSetting.delete(key) + + if (provider.contextProxy.getValue(key as keyof RooCodeSettings) === write.wrote) { + await provider.contextProxy.setValue(key as keyof RooCodeSettings, write.previous as never) + } +} export const webviewMessageHandler = async ( provider: ClineProvider, @@ -758,10 +798,13 @@ export const webviewMessageHandler = async ( case "updateSettings": { // The appearance values are saved all-or-nothing: if a write fails, the ones this save already stored are // put back, so the webview can keep the user's edits and let them retry. A key is recorded before it is - // written, so a write that failed after changing the stored value is put back too. A key is put back only - // while this save is still the last one that wrote it, so a newer save's value is kept. - const written: Array<{ key: string; previous: unknown; writer: object }> = [] + // written, so a write that failed after changing the stored value is put back too (see `undoSettingWrite` + // for when a key is left alone). A failure while writing any other setting is not handled here: it + // follows the existing error path, after the appearance values have been put back. + const written: SettingWrite[] = [] let failure: string | undefined + let failedKey: string | undefined + let unhandledFailure: unknown try { if (!message.updatedSettings) break @@ -785,6 +828,7 @@ export const webviewMessageHandler = async ( } for (const [key, value] of Object.entries(message.updatedSettings)) { + failedKey = key const previous = provider.contextProxy.getValue(key as keyof RooCodeSettings) let newValue = value @@ -896,31 +940,44 @@ export const webviewMessageHandler = async ( } if (ROLLBACK_SETTING_KEYS.has(key)) { - const writer = {} - written.push({ key, previous, writer }) - lastWriterOfSetting.set(key, writer) + const before = lastWriteOfSetting.get(key) + const write: SettingWrite = { + key, + previous, + wrote: newValue, + prev: before && !before.done ? before : undefined, + done: false, + } + if (write.prev) write.prev.next = write + written.push(write) + lastWriteOfSetting.set(key, write) } await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) } + + for (const write of written) write.done = true } catch (error) { failure = error instanceof Error ? error.message : String(error) - for (const { key, previous, writer } of written.reverse()) { + for (const write of written.reverse()) { try { - if (lastWriterOfSetting.get(key) === writer) { - lastWriterOfSetting.delete(key) - await provider.contextProxy.setValue(key as keyof RooCodeSettings, previous as never) - } + await undoSettingWrite(provider, write) } catch (rollbackError) { provider.log( - `[updateSettings] Could not restore ${key}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`, + `[updateSettings] Could not restore ${write.key}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`, ) } } - provider.log(`[updateSettings] Save failed and was rolled back: ${failure}`) - vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) + provider.log(`[updateSettings] Save failed: ${failure}`) + + if (failedKey !== undefined && ROLLBACK_SETTING_KEYS.has(failedKey)) { + vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) + } else { + // Not an appearance value: handled as it always was, once the webview has been told. + unhandledFailure = error + } } // The outcome is decided above. A failed refresh must neither undo a stored save nor keep the webview @@ -942,6 +999,8 @@ export const webviewMessageHandler = async ( }) } + if (unhandledFailure !== undefined) throw unhandledFailure + break } diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index bc6f64b125..16561c5bf7 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -62,7 +62,7 @@ "cannot_access_path": "No es pot accedir a la ruta {{path}}: {{error}}", "path_outside_workspace": "La ruta és fora de l'espai de treball", "settings_import_failed": "Ha fallat la importació de la configuració: {{error}}.", - "settings_save_failed": "No s'ha pogut desar la configuració i s'han restaurat els valors anteriors: {{error}}", + "settings_save_failed": "No s'ha pogut desar la configuració. Alguns valors poden haver quedat parcialment canviats: {{error}}", "mistake_limit_guidance": "Això pot indicar un error en el procés de pensament del model o la incapacitat d'utilitzar una eina correctament, que es pot mitigar amb orientació de l'usuari (p. ex. \"Prova de dividir la tasca en passos més petits\").", "violated_organization_allowlist": "Ha fallat l'execució de la tasca: el perfil actual no és compatible amb la configuració de la teva organització", "condense_failed": "Ha fallat la condensació del context", diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 8ac78a072f..4eac519f9b 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Zugriff auf Pfad {{path}} nicht möglich: {{error}}", "path_outside_workspace": "Pfad liegt außerhalb des Arbeitsbereichs", "settings_import_failed": "Fehler beim Importieren der Einstellungen: {{error}}.", - "settings_save_failed": "Die Einstellungen konnten nicht gespeichert werden und wurden auf die vorherigen Werte zurückgesetzt: {{error}}", + "settings_save_failed": "Die Einstellungen konnten nicht gespeichert werden. Einige könnten teilweise geändert geblieben sein: {{error}}", "mistake_limit_guidance": "Dies kann auf einen Fehler im Denkprozess des Modells oder die Unfähigkeit hinweisen, ein Tool richtig zu verwenden, was durch Benutzerführung behoben werden kann (z.B. \"Versuche, die Aufgabe in kleinere Schritte zu unterteilen\").", "violated_organization_allowlist": "Aufgabe konnte nicht ausgeführt werden: Das aktuelle Profil ist nicht kompatibel mit den Einstellungen deiner Organisation", "condense_failed": "Fehler beim Verdichten des Kontexts", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index a16574650b..ea4ca74c7d 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Cannot access path {{path}}: {{error}}", "path_outside_workspace": "Path is outside the workspace", "settings_import_failed": "Settings import failed: {{error}}.", - "settings_save_failed": "Settings could not be saved and were restored to their previous values: {{error}}", + "settings_save_failed": "Settings could not be saved. Some may be left partly changed: {{error}}", "mistake_limit_guidance": "This may indicate a failure in the model's thought process or inability to use a tool properly, which can be mitigated with some user guidance (e.g. \"Try breaking down the task into smaller steps\").", "violated_organization_allowlist": "Failed to run task: the current profile isn't compatible with your organization settings", "condense_failed": "Failed to condense context", diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index f5d2d1b060..4f4b6fd4c6 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "No se puede acceder a la ruta {{path}}: {{error}}", "path_outside_workspace": "La ruta está fuera del espacio de trabajo", "settings_import_failed": "Error al importar la configuración: {{error}}.", - "settings_save_failed": "No se pudieron guardar los ajustes y se restauraron los valores anteriores: {{error}}", + "settings_save_failed": "No se pudieron guardar los ajustes. Algunos pueden haber quedado parcialmente modificados: {{error}}", "mistake_limit_guidance": "Esto puede indicar un fallo en el proceso de pensamiento del modelo o la incapacidad de usar una herramienta correctamente, lo cual puede mitigarse con orientación del usuario (ej. \"Intenta dividir la tarea en pasos más pequeños\").", "violated_organization_allowlist": "Error al ejecutar la tarea: el perfil actual no es compatible con la configuración de tu organización", "condense_failed": "Error al condensar el contexto", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index 3cfeeb4664..dcdb3c1dd3 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Impossible d'accéder au chemin {{path}} : {{error}}", "path_outside_workspace": "Le chemin est à l'extérieur de l'espace de travail", "settings_import_failed": "Échec de l'importation des paramètres : {{error}}", - "settings_save_failed": "Impossible d'enregistrer les paramètres ; les valeurs précédentes ont été rétablies : {{error}}", + "settings_save_failed": "Impossible d'enregistrer les paramètres. Certains peuvent être restés partiellement modifiés : {{error}}", "mistake_limit_guidance": "Cela peut indiquer un échec dans le processus de réflexion du modèle ou une incapacité à utiliser un outil correctement, ce qui peut être atténué avec des conseils de l'utilisateur (par ex. \"Essaie de diviser la tâche en étapes plus petites\").", "violated_organization_allowlist": "Échec de l'exécution de la tâche : le profil actuel n'est pas compatible avec les paramètres de votre organisation", "condense_failed": "Échec de la condensation du contexte", diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index d77a44f18e..d4572871f7 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "पाथ {{path}} तक पहुंच नहीं पा रहे हैं: {{error}}", "path_outside_workspace": "पथ वर्कस्पेस से बाहर है", "settings_import_failed": "सेटिंग्स इम्पोर्ट करने में विफल: {{error}}।", - "settings_save_failed": "सेटिंग्स सहेजी नहीं जा सकीं और पिछले मान बहाल कर दिए गए: {{error}}", + "settings_save_failed": "सेटिंग्स सहेजी नहीं जा सकीं। कुछ सेटिंग्स आंशिक रूप से बदली रह सकती हैं: {{error}}", "mistake_limit_guidance": "यह मॉडल की सोच प्रक्रिया में विफलता या किसी टूल का सही उपयोग न कर पाने का संकेत हो सकता है, जिसे उपयोगकर्ता के मार्गदर्शन से ठीक किया जा सकता है (जैसे \"कार्य को छोटे चरणों में बांटने की कोशिश करें\")।", "violated_organization_allowlist": "कार्य चलाने में विफल: वर्तमान प्रोफ़ाइल आपके संगठन की सेटिंग्स के साथ संगत नहीं है", "condense_failed": "संदर्भ को संक्षिप्त करने में विफल", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index a9a78a8c28..85abdfaa8b 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Tidak dapat mengakses path {{path}}: {{error}}", "path_outside_workspace": "Path berada di luar workspace", "settings_import_failed": "Impor pengaturan gagal: {{error}}.", - "settings_save_failed": "Pengaturan tidak dapat disimpan dan dikembalikan ke nilai sebelumnya: {{error}}", + "settings_save_failed": "Pengaturan tidak dapat disimpan. Sebagian mungkin tetap berubah sebagian: {{error}}", "mistake_limit_guidance": "Ini mungkin menunjukkan kegagalan dalam proses pemikiran model atau ketidakmampuan untuk menggunakan tool dengan benar, yang dapat diatasi dengan beberapa panduan pengguna (misalnya \"Coba bagi tugas menjadi langkah-langkah yang lebih kecil\").", "violated_organization_allowlist": "Gagal menjalankan tugas: profil saat ini tidak kompatibel dengan pengaturan organisasi kamu", "condense_failed": "Gagal mengompres konteks", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index ead87cfa11..2f570174c6 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Impossibile accedere al percorso {{path}}: {{error}}", "path_outside_workspace": "Il percorso è fuori dall'area di lavoro", "settings_import_failed": "Importazione delle impostazioni fallita: {{error}}.", - "settings_save_failed": "Impossibile salvare le impostazioni; sono stati ripristinati i valori precedenti: {{error}}", + "settings_save_failed": "Impossibile salvare le impostazioni. Alcune potrebbero essere rimaste modificate in parte: {{error}}", "mistake_limit_guidance": "Questo può indicare un fallimento nel processo di pensiero del modello o l'incapacità di utilizzare correttamente uno strumento, che può essere mitigato con la guida dell'utente (ad es. \"Prova a suddividere l'attività in passaggi più piccoli\").", "violated_organization_allowlist": "Impossibile eseguire l'attività: il profilo corrente non è compatibile con le impostazioni della tua organizzazione", "condense_failed": "Impossibile condensare il contesto", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index d5532ea227..2fb1c19478 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "パス {{path}} にアクセスできません:{{error}}", "path_outside_workspace": "パスはワークスペースの外にあります", "settings_import_failed": "設定のインポートに失敗しました:{{error}}", - "settings_save_failed": "設定を保存できなかったため、以前の値に戻しました:{{error}}", + "settings_save_failed": "設定を保存できませんでした。一部の設定が部分的に変更されたままになっている可能性があります:{{error}}", "mistake_limit_guidance": "これは、モデルの思考プロセスの失敗やツールを適切に使用できないことを示している可能性があり、ユーザーのガイダンスによって軽減できます(例:「タスクをより小さなステップに分割してみてください」)。", "violated_organization_allowlist": "タスクの実行に失敗しました: 現在のプロファイルは組織の設定と互換性がありません", "condense_failed": "コンテキストの圧縮に失敗しました", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index ff55cfc8f9..32f003633a 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "경로 {{path}}에 접근할 수 없습니다: {{error}}", "path_outside_workspace": "경로가 작업 영역 밖에 있습니다", "settings_import_failed": "설정 가져오기 실패: {{error}}.", - "settings_save_failed": "설정을 저장할 수 없어 이전 값으로 복원했습니다: {{error}}", + "settings_save_failed": "설정을 저장할 수 없습니다. 일부 설정이 부분적으로 변경된 상태로 남아 있을 수 있습니다: {{error}}", "mistake_limit_guidance": "이는 모델의 사고 과정 실패나 도구를 제대로 사용하지 못하는 것을 나타낼 수 있으며, 사용자 가이드를 통해 완화할 수 있습니다 (예: \"작업을 더 작은 단계로 나누어 시도해보세요\").", "violated_organization_allowlist": "작업 실행 실패: 현재 프로필이 조직 설정과 호환되지 않습니다", "condense_failed": "컨텍스트 압축에 실패했습니다", diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index a3a5b61595..823b12b657 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Kan pad {{path}} niet openen: {{error}}", "path_outside_workspace": "Pad is buiten de werkomgeving", "settings_import_failed": "Importeren van instellingen mislukt: {{error}}.", - "settings_save_failed": "De instellingen konden niet worden opgeslagen en zijn teruggezet naar de vorige waarden: {{error}}", + "settings_save_failed": "De instellingen konden niet worden opgeslagen. Sommige zijn mogelijk gedeeltelijk gewijzigd gebleven: {{error}}", "mistake_limit_guidance": "Dit kan duiden op een fout in het denkproces van het model of het onvermogen om een tool correct te gebruiken, wat kan worden verminderd met gebruikersbegeleiding (bijv. \"Probeer de taak op te delen in kleinere stappen\").", "violated_organization_allowlist": "Taak uitvoeren mislukt: het huidige profiel is niet compatibel met de instellingen van uw organisatie", "condense_failed": "Comprimeren van context mislukt", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index cfdd0b67e0..9f4b955cab 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Nie można uzyskać dostępu do ścieżki {{path}}: {{error}}", "path_outside_workspace": "Ścieżka znajduje się poza obszarem roboczym", "settings_import_failed": "Nie udało się zaimportować ustawień: {{error}}.", - "settings_save_failed": "Nie udało się zapisać ustawień; przywrócono poprzednie wartości: {{error}}", + "settings_save_failed": "Nie udało się zapisać ustawień. Niektóre mogły pozostać częściowo zmienione: {{error}}", "mistake_limit_guidance": "To może wskazywać na błąd w procesie myślowym modelu lub niezdolność do prawidłowego użycia narzędzia, co można złagodzić poprzez wskazówki użytkownika (np. \"Spróbuj podzielić zadanie na mniejsze kroki\").", "violated_organization_allowlist": "Nie udało się uruchomić zadania: bieżący profil nie jest kompatybilny z ustawieniami Twojej organizacji", "condense_failed": "Nie udało się skondensować kontekstu", diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index bbe3a0193b..451dfa6cfe 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -62,7 +62,7 @@ "cannot_access_path": "Não é possível acessar o caminho {{path}}: {{error}}", "path_outside_workspace": "O caminho está fora do espaço de trabalho", "settings_import_failed": "Falha ao importar configurações: {{error}}", - "settings_save_failed": "Não foi possível salvar as configurações; os valores anteriores foram restaurados: {{error}}", + "settings_save_failed": "Não foi possível salvar as configurações. Algumas podem ter ficado parcialmente alteradas: {{error}}", "mistake_limit_guidance": "Isso pode indicar uma falha no processo de pensamento do modelo ou incapacidade de usar uma ferramenta adequadamente, o que pode ser mitigado com orientação do usuário (ex. \"Tente dividir a tarefa em etapas menores\").", "violated_organization_allowlist": "Falha ao executar a tarefa: o perfil atual não é compatível com as configurações da sua organização", "condense_failed": "Falha ao condensar o contexto", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index a020b49dcd..f26457612a 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Невозможно получить доступ к пути {{path}}: {{error}}", "path_outside_workspace": "Путь находится вне рабочего пространства", "settings_import_failed": "Не удалось импортировать настройки: {{error}}.", - "settings_save_failed": "Не удалось сохранить настройки; восстановлены прежние значения: {{error}}", + "settings_save_failed": "Не удалось сохранить настройки. Некоторые могли остаться частично изменёнными: {{error}}", "mistake_limit_guidance": "Это может указывать на сбой в процессе мышления модели или неспособность правильно использовать инструмент, что можно смягчить с помощью руководства пользователя (например, \"Попробуйте разбить задачу на более мелкие шаги\").", "violated_organization_allowlist": "Не удалось выполнить задачу: текущий профиль несовместим с настройками вашей организации", "condense_failed": "Не удалось сжать контекст", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index a60d5ff7a9..83d54b62a0 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "{{path}} yoluna erişilemiyor: {{error}}", "path_outside_workspace": "Yol çalışma alanının dışında", "settings_import_failed": "Ayarlar içe aktarılamadı: {{error}}.", - "settings_save_failed": "Ayarlar kaydedilemedi ve önceki değerlere geri döndürüldü: {{error}}", + "settings_save_failed": "Ayarlar kaydedilemedi. Bazıları kısmen değişmiş olarak kalmış olabilir: {{error}}", "mistake_limit_guidance": "Bu, modelin düşünce sürecindeki bir başarısızlığı veya bir aracı düzgün kullanamama durumunu gösterebilir, bu da kullanıcı rehberliği ile hafifletilebilir (örn. \"Görevi daha küçük adımlara bölmeyi deneyin\").", "violated_organization_allowlist": "Görev yürütülemedi: Geçerli profil kuruluşunuzun ayarlarıyla uyumlu değil", "condense_failed": "Bağlam sıkıştırılamadı", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index 8c072c9b5b..f1bce7743f 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "Không thể truy cập đường dẫn {{path}}: {{error}}", "path_outside_workspace": "Đường dẫn nằm ngoài không gian làm việc", "settings_import_failed": "Nhập cài đặt thất bại: {{error}}.", - "settings_save_failed": "Không thể lưu cài đặt và đã khôi phục về giá trị trước đó: {{error}}", + "settings_save_failed": "Không thể lưu cài đặt. Một số cài đặt có thể vẫn bị thay đổi một phần: {{error}}", "mistake_limit_guidance": "Điều này có thể cho thấy sự thất bại trong quá trình suy nghĩ của mô hình hoặc không thể sử dụng công cụ đúng cách, có thể được giảm thiểu bằng hướng dẫn của người dùng (ví dụ: \"Hãy thử chia nhỏ nhiệm vụ thành các bước nhỏ hơn\").", "violated_organization_allowlist": "Không thể chạy tác vụ: hồ sơ hiện tại không tương thích với cài đặt của tổ chức của bạn", "condense_failed": "Không thể nén ngữ cảnh", diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 7ed9f1b617..1ddac8f209 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -63,7 +63,7 @@ "cannot_access_path": "无法访问路径 {{path}}:{{error}}", "path_outside_workspace": "路径位于工作区之外", "settings_import_failed": "设置导入失败:{{error}}。", - "settings_save_failed": "无法保存设置,已恢复为之前的值:{{error}}", + "settings_save_failed": "无法保存设置。部分设置可能仍处于部分更改的状态:{{error}}", "mistake_limit_guidance": "这可能表明模型思维过程失败或无法正确使用工具,可通过用户指导来缓解(例如\"尝试将任务分解为更小的步骤\")。", "violated_organization_allowlist": "执行任务失败:当前配置文件与您的组织设置不兼容", "condense_failed": "压缩上下文失败", diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index 3d9c8d9858..d78e73aab1 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -58,7 +58,7 @@ "cannot_access_path": "無法存取路徑 {{path}}:{{error}}", "path_outside_workspace": "路徑位於工作區之外", "settings_import_failed": "設定匯入失敗:{{error}}。", - "settings_save_failed": "無法儲存設定,已還原為之前的值:{{error}}", + "settings_save_failed": "無法儲存設定。部分設定可能仍處於部分變更的狀態:{{error}}", "mistake_limit_guidance": "這可能表明模型思維過程失敗或無法正確使用工具,可透過使用者指導來緩解(例如「嘗試將工作分解為更小的步驟」)。", "violated_organization_allowlist": "執行工作失敗:目前設定檔與您的組織設定不相容", "condense_failed": "壓縮上下文失敗", From dbf3d1cf6aee3c9996262ea0d7895ea97c9a9704 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 10:18:12 -0700 Subject: [PATCH 24/42] test(ui): add screenshot and CodeBlock assertions to the appearance consumers test --- .../settings/__tests__/AppearanceConsumers.visual.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx index c185727d81..85394b3ea0 100644 --- a/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx +++ b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.tsx @@ -26,9 +26,12 @@ for (const theme of visualThemes) { .filter({ hasText: "Tests passed" }) .last() const diffCode = story.getByTestId("consumer-diff").locator(".diff-view").first() + const code = story.getByTestId("consumer-code").locator("code").first() await expect(markdownText).toBeVisible() await expect(queued).toBeVisible() await expect(diffCode).toBeVisible() + // The code block highlights asynchronously: wait for it, so the picture is the same on every run. + await expect(code.locator("span[style]").first()).toBeVisible({ timeout: 20_000 }) // Unset: the historical look. await expect(story.getByTestId("appearance-state")).toHaveText("unset") @@ -38,12 +41,15 @@ for (const theme of visualThemes) { padY: await px(queued, "padding-top"), terminal: await px(terminal, "font-size"), diff: await px(diffCode, "font-size"), + code: await px(code, "font-size"), } expect(before.padX).toBe(15) expect(before.padY).toBe(10) expect(before.terminal).not.toBe(20) expect(before.diff).not.toBe(22) + expect(before.code).not.toBe(22) await expect(page.locator("html")).not.toHaveClass(/zoo-editor-font-set/) + await expect(story).toHaveScreenshot(`appearance-consumers-${theme.name}-unset.png`) // Set: interface 150%, terminal 20px, editor 22px, spacing 150%. await story.getByTestId("apply-appearance").click() @@ -54,6 +60,8 @@ for (const theme of visualThemes) { expect(await px(markdownText, "font-size")).toBeCloseTo(before.chat * 1.5, 1) expect(await px(terminal, "font-size")).toBe(20) expect(await px(diffCode, "font-size")).toBe(22) + expect(await px(code, "font-size")).toBe(22) + await expect(story).toHaveScreenshot(`appearance-consumers-${theme.name}-set.png`) // Removed again: every consumer is back on its default. await story.getByTestId("remove-appearance").click() @@ -64,5 +72,8 @@ for (const theme of visualThemes) { expect(await px(markdownText, "font-size")).toBeCloseTo(before.chat, 1) expect(await px(terminal, "font-size")).toBeCloseTo(before.terminal, 1) expect(await px(diffCode, "font-size")).toBeCloseTo(before.diff, 1) + expect(await px(code, "font-size")).toBeCloseTo(before.code, 1) + // ...and it looks the way it did before: the same picture as the unset state. + await expect(story).toHaveScreenshot(`appearance-consumers-${theme.name}-unset.png`) }) } From 47ceffe930e5108a2afd30151bd2d781693e12cf Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 10:25:18 -0700 Subject: [PATCH 25/42] test(ui): add appearance consumers screenshot baselines --- .../appearance-consumers-dark-set.png | Bin 0 -> 36323 bytes .../appearance-consumers-dark-unset.png | Bin 0 -> 22694 bytes ...arance-consumers-high-contrast-light-set.png | Bin 0 -> 35232 bytes ...ance-consumers-high-contrast-light-unset.png | Bin 0 -> 20729 bytes .../appearance-consumers-high-contrast-set.png | Bin 0 -> 34494 bytes ...appearance-consumers-high-contrast-unset.png | Bin 0 -> 19963 bytes .../appearance-consumers-light-set.png | Bin 0 -> 36291 bytes .../appearance-consumers-light-unset.png | Bin 0 -> 22153 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-set.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-unset.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-set.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-unset.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-set.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-unset.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-set.png create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-unset.png diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-set.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9b991d4c0d70685b476d560122921f1d911754 GIT binary patch literal 36323 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 BbO-y?$ABk$mC#) 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 W1Fvz;#45oOz|E@`SMZnbM*bJhv8iPM literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-set.png new file mode 100644 index 0000000000000000000000000000000000000000..67a1c101f3f47216c576c9c608a9ffd7d05f1f5b GIT binary patch literal 35232 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

    FxhwDyIDZINLx#}bIx0P2!( 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

    mCjoCvZ2li+P$W5;`42 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-unset.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-unset.png new file mode 100644 index 0000000000000000000000000000000000000000..0a96bebb3143fbc348b8eb4ca7be7a0ed376bc31 GIT binary patch literal 20729 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-set.png new file mode 100644 index 0000000000000000000000000000000000000000..f098611098576dfc225afd52937f62f9c2b7ee99 GIT binary patch literal 34494 zcmd42RZv|~nCDAyx8Sb9CBfY-xCQqh!QCaeTS#yX2@oK-1$PN{2=4Cg4zuW~zI7kw zR^RHHhkgT!UA50TYp?Gwza6QfB!h-bgbW1*g(fE}sRjl0Y6S`kng$UX{6&t=;SmZ7 z6G~1}Ov5wtAPXt;_2y%*5l;U~M;wAZ&H+3IqNi=q6e--Sr9%+0+~(9PAUP&0 zKFxQ;rL8d=3swyC@o#ddx$|4oNylr*P6+xUw%YF;spOBO&RzGF$h9W0|A#1g~Fy&Ad2TF zh`t6lfP-xXK5VQwv?3;Ko~mpv61WKY|8S8x{XQXGreo)6ANli`40+4-k`Hr0ru*Ed z!W{oQqvyNnyF2e>ftk9B3ieB`L|Nav-9o)O+u0T$9&jH76c-w~DJ**KBYfLmQ&KX9 zEs{mRchrB3W-SX-DvFA%_9lLHg=0A6+@zYtiQO2fsI)u7{wC$- zBtT`BQSoe0AT1-}cP$$D$iH7&tuhcp5fLaI59>Wus$*_$9xw9Lz&v=9*=l{d)??&* z+JoVL6704=rKzRWl~?xrcPLH)c00a1f7Z0Vi=v|9FjIMRm04e$X32-zWjJV|npavz zer|W2FQ21CtK5Q5O-JYUb~~qV|KPh+H0D#=)7?HUE-o4x8fywuEwWUPf1zT=RiVh^ zr~RqlY%Leqf4vSW`^2TEOLc-r9o>Wg2)1;uXN%{UB0bsaOU&<@^jsnjEk+iad*7TittO z2pyMr9F`u=2HDnk9I0}rwd13UYu4ZuHCI?Y1#kY?s7ktX9*DjPb!_=q%)E(yTSL?nRj~H(8uoXP1{Wm z8|It*G%-`yJf;t&j!laRo%!*?-m9IVGNf)3)bWB}-Z%R{-mS+89D(K9O?_)--*P!c z{Ms)1c#D9>3aUVeo4GVF`bj) ze09P9{!l)dS?pDXz=dkI-<3`b0xt==8w)oEEHpi%F7yRd1&IX?5pn6+{Ug4S@7pVA zr#4=s1utpLkgJ_1iq(VJ>eK7vfM0SU=pqk}AxR7a!Ad4EN6$~k z&-P7++-^wRfxf;cfoIZ^RJVC4ud@NV=M6d$vD6q(!i*g6yE6!#llMkF79a@|s>}!>np<+*CRu^~sSOLv}@ zq1VqlTxWO*!p`AFQ#+0bUrJ4ga1nv`qjsnxc5f&7^NoyVmS*QF`vhK|y>%qfYOy30 zmiFN;TG#z?TYMX$vCcnb(T4P+f9qJ>lWEZA<^?*}cdl)Hyvp5!U?_Zsbz`Fu1@wRReTa!~}xGQg6u{Jx$GThS(&`ovTAIVUFR(Ld#y;S(VzT z+?)?K1n>43QBkWt$|q+R@~e`%BmD1MkA^{pHo4RJa~md7S^J!7 zb0UJ)6%}(t=b=Pk0|iTCzP9BhZ-B+u%E;j^N>;Lb8TMcf1r1wB^ufjAF&~59F%Ds+ z(I@kR6?3c;)N+YCUIvbB>zQj66Y76HVQlG2D75uj=*NVdjLz-QI*v($QtX(;r zs${R6DvAmWo`O5v0=~Ofj(iZL&*$iEQU+yzZT@B%52W7JP8$viB1dgGju$BIy2wH* z#Nys!M=!Zq z3x8Z3{%qo*elNZ&fv%LU@O`|TE<~s!`1>L-4(peXoc~m;)_fYrv_T0vnQnXH>N*t2inzA?`Vw%_>QZl#hDFp(S=$EZ3d*27gC zeO10NbU5FGQ}O3s`QVV}?(UAg?X=v1?$m}|Orlc`t1;&`DQ{SdqRa7hKA5RQeAG4+ z`y9~z3SndalW%BfDERxk@4NP%f31G5bp24q8Gx6BRJ>dHxaF0zv;lKAji|^LhDHDf`9<$VO+EJgQZH-;dIJaz!ZrPi9YQh8 zZea-rDF{$gyp5BDWM?PqW!-}E4_Z|!es+YnWx;w2v z8;I)v-&*&-C6NDzUt~^CjYx%mb+kAbp+xZRBO>(~g4F-p4FG|z%)1I(GU>e*Nmu2U zkw`7`oeU@<-ej$WL!s-1YS-O=Mvr@1f9z+7Hwkld8Ao{6V@9Ub3@*9V3zb?{f>5+Q zc2~Dx(zB5-s>}z0R=Ypx!l?GkAb(gvC_-4+W)2|n+DHU4<%kr>IiRR>fXL&sn?FB` z_#RGXc3(X;5WoORdedAi0_)1rd=ZIPYU=92!>h!mlq0Op z_c!bDJoXDWInNIW^MbJw_%bBk*;Gg@u8&R4|BxdetK#`3G#gW5uAl ziY}4__@A9e!go8=6B0_ByQNq9toTR(0#;k{cQv7m44A^#M~=G#W{3} z=^^R$v$pk1-oOItIaT+WzOA3n8s3`KPYaGYLgCy%U80{r<}sni2}+C?U_XDOqFKa8 z)b+<@TljK9y)fIGv9-7)H@F{`?)b$esLGIrzJ{7?0E)}$x`10ICXyIi&H1o)8hD=i z8ItP^8aYh11!s0W;l~SgPt83(33Oop7I>C@gFmWRN5Eah32?Uv?(B(|168&B42)d& zG;p_zj$LS&HrmL7qh@@pp+3hgJbp1xHm$Ifrt zuKbnPBi1lj-s}XDX)JhyH>c}brP_h(Y8l8oTxT7+R*)V!epD!@l@q&{XJH<=CH%G< zxDbp&YN4+qD%q&D+t>G%lX?y&O1r0vo|`C}D9aY({ab ziX`|S@+dpd!l(@z9P@NPd!27l3Z?7W#zmPABqQYv4i4&QtuW`3_TZ-K1~Fl3M!6LF zx14mMj6JuvWVPa^zuH)ynTas#3x`9&`>3v!73AM0R?GZP$cllU2<=0?3@7o5)roX8 z2jnLQMQGL=u0mG~B6+yr*;Oa)nEptPR4Jn$d~^(J>K^U8irmV)#LGk(GjK44Uk7Ym z5Y#jJRohba%PeSXnPt3%!h3>91?>6Y`S4uz6uoKbaM&Pd%P@KEz@CQ;!odO^Au=_;@jH6!6GJ<+^Z)K;rm0 zeO1~2?DfnVJ+=~^bMIl)$zHOay&T)v00}+ zy$RzZaGY_Tuc?CE;cODIUtK;wEy5e<%;j)iNf&vx?T*IbP$ zQCT^oRFpGSTy-k`5Is=*J(>hkUx-6s1MK8x19d9};t`}$B6{=+g>1cu5;O;q-3n@#I@`W@Oo za!x-J#x1T(2JHk}BlcJ~BKnR_D&<8->U+j$SW{4uI=aBoJh&?D`tUcY1 z28ioTjy8xSfx_DwmSkmDsS_EDQ{+fK*buH&iEda?Dqqv#@ZzpnU}Y#zws9Z{B?7 za!T7}Hm1FaykK&Qy>YEHcwRvYfuTgP6fe75d_O)5I=&4pS_YX1@?VqSx!;L5H0~O4q|ix#g|6KQ zko{+Y+eoyB&|T5MH|8P6xwv)W0!K>9>0q@D24+|Z*6K-yLu(`+&NN0D?SoWsil6;# zPLnN!aCqxYN!mK!n;u$v?fOzngG8uciQ$NCUY!BCI2ki+hme5;eS1uWW*)Mx;mKQ3 zb3yDVXX&P2hfqIg#7-|6j7YY^1OHGvMeeS@P2)+MG~j3%vt>kmqp2MwWjbWcaiU0! zD2*4nr@AE1 z))I1q<@EL{dLFkfxNp6~P72_c7E@@Ba5D zb)!Olc$G?Q_rXMg>r%%KqpV>Knc!%LrjiUQ1=SFb|CQsYF}*~-$=`fB4Sz_h$_Js-y}hSAslrigBR zAn1NDa}i3wDA`7{sCyVQR68xCaZG@V?ov_B31S9@7zf@P_JXmeU(|$)@Gv7gu(^v; z4{-5oCFQN+<%nqKAa1Mv6=E1-b~|P%YjIye@O>B;N6EuG3pz*lBd0T=%WB&9KXy`r z49(8(jc`qp`GO6xtcAYn+UtyEN)Ht0&TKi&t5vJAH}LKhz*~nLxvn{Ktn^B^XS8Bw z`MGJ3vdUNzn_9`bWoni+9q}h;<`yMP$4Y{!qzfG|Iyk)-eP60Yg{He z;zrdVXkmg(f;+>qOei^q{w;m_pN!=hyzTXWKF@g;&C+q+aJ;+NwYulX#P?J;7~$RX^FEQl zm5TKu6fYi{Q^!)ci(!FwVBh;`#m-zi`nSD@D)G&0ov1L=6AsL37sLhH8>&5cHD;3E zNg2*TnG?_n2?^Vu)(*3ZXc8@dd01>Das z6A=^p2^(?GTa*cX-a`B933R?WWQY3`r2g~Y7bn`lt?=fxzB7TM73mm!$=)qQ0wXVE zPnOO75jYj9z&+0*yYtRal<@%08g97^e`$Vt_A-*}?ZLl)Cuk$`PjS(d;RB`7%pmW$ zGH3c6o5e6XqAB@%5aqA^Da!BOHut;yd+0QKPaAf;z-8k~lc)?@CmHcRTs&1MDFYEuxCKY_efw{8ycg zaQq~od^wE3qK15+?A5ROh(z?|LPpwkAPJSA}hbglB5PmnspJEnp zVcz#M^xDL&@hLtQ^g8=kM0`;{T#D){h~;H6gd8T9JWB@h6GRawz3(L%x}M!wGP!R> zCo-R4;gd6sKX<&17%NcB;2%Oe6^Jp8@X0_TWA@ULP=VA31yR`dAXxFQiA|Yd4t#G{ zsX={h{4V%TQX_TqV%3$uv;`-kz$7DgKr(o4Hqkv9J_|KwxF8_+imw6bZke$xkSsqJr&rx`9{kD9_#Dc%>f0MQf2kX|+vEsXlD=to;3H%#1 zJUfM<&((ogA@LX$H0MR={1EAz8YFKH$K-pjckp5tOn#P5x$^IPZ%%}pmgD&M=n*d_ zeyOYH8-mD&#a1Rp!rh^l37&h^R`7bkCHQIjr=&&yT0c}v5_`O8=DkublBuI8bk-~E z9YJWP0uOAEGg^J^*cE#%c`PPIHD;*-`(M=P|HD(l|J%10R`q1D1Ic?$r^HDVdwF^J zVwq^=Oy>$38a#mkebM{jHgpQ9Dk>@ovNYTdOAG#odEsRI;PCd1kj|eIQF|#L{PA|k zpH9Mg7G1|p!buDKA3^f+(oBKMAz-@9K%pe!`wRrK;>s_e@6&^;m8wwC;&V*}%%9(s z#UbdoZEJN;S3x%+X44JwVE#f87IZO8f6$}zaC5U7G`b!w{E5b6@jm*q{YEj}^|fcA0WKTiikNpWCpsO|F@;ci%oUiBj{my!VK4X~M|G^U!w(vX3fpznT%U~*j*q{l3 z1-C$;c!TSoKyNI3e^3qT`%uH}ueg0qCwLmyxx@!;&rf|MEU1fe2&~ozzL_(`&i8 zeYu(my3%}3+2h0T616IzR)239!EEM5pN z$Kzn;6pYeJW=}wDyp-na^qs4Y)~h;}S-6ps#>(p);s+CFsGA6wA10uPSbU`&)-OR& z2DF2E&-ni3OLw1JVPyuH>mUp`=|E6ba$^Z04iYfyMa@zwWDVqanqPi$2X*G2R!t(f zPkydbpu`)k>r&KC80|VL=UA+nT>ttKi1aPc+A>R9>j_$(C1*$4Gf}B zCqZ9^!5H%&I(P0jpbxOoFs^>SapWbz*LUntR~8C2rJe_D3w-h2c+QiCK{Rzbm(A4Q zZ%j@rJ59zVSk%%#CjQXDfi$1(LJ!uCo#3SYkv+W;Q;Ac2nw3Lr1_dj!$8;y7q;kGk zv!r4bBrXPqhS^cCIiN1Zl0KWr)zTzTx~&4|Xr!sh<+i86NrOln+(D6CZq!B=+vfn1 zSX4rExgfC-5F4UI`GQ3+fyoAXi}gKXVCzBEU=`c*r^2i-$PFNY!tH`;BTTRk3w#M` zXv0aI5vQow`(CgMG%?OzgUJzuFL{aWbG0_p#k+YuAQmyZ0ZJ8B-4w{wosI{f13DQW zLidAUL{>vyFM*_v3=cGy%@7By8f#Z^mAP`Y;D!;BN!MHz#5->Lh18|$va+%;=4{u0 zat8KsAEon8K|!wIKxZ6U{llnq3*+_)$ci-Gj5GR1SaEn43N8)A-+gg&HG~Gq&%lj# z7{OK`kh&%`;;o*%Ru;_j|L~K%(gieFjj(Zl0TEIh_2w${Mpx6)_5~(--jNXrax8JN zfMBS&3DzzHi~%Pgo`0_>8!%u0ag!HdqYi&TXEXiBT>`P}Teh_jAo05xyAfcM%h1f1 zj@@&1nG_M?0KXJR<>89)X}*0Angyc@X0UH~_V)MX<>di8^{I$VT&rz))R|cX+UsU8 zqWk%xPz3zDPuLZV5{jTv=_3fhS9RM9K0Be-zcNLZcm{ZgPw}234!(iw*luAC`aboy z>f%3+ZXm}_;0VDLkN-?`Ys`0tCd3BFH?O>9SR&|-^z|KX;}w*Ed6atOm}%~uv9S;N zZLVs;QH0Ja;cdnO?Vs$D;OG8+sTOElw3FFEiw%Q|f#9xkG{S-8FMyv}F6=Dd>+>WE zLnhE9AxN)RQk64#u~rWaJQjb#uRF3B`kqR0!u0g?IL1OKMNOa;rd)xsUt+sLFi@c+c!%PLG zA7A4TLBF_QQCMICUvlQ)H|&M6e3?S*5B@+a?f@GEhX~bD} zamIw52(kAdhgAS@ilLs=D(sIK$V|8@75Bu-3$bxDc>X+3P@P|&y} z3BK%AvVRU_7a*pO_8~qC-+AZ9Cob49YBN=;+D5fwHoyn7r)7mHJ+Bstb=xVWXarpb z+Kv}U=9F4Kjz>ITQqGz2*Ny71AWa&;_?rndq1a4jWDf}Nh9>$ zj=;}~mz=zmRmu?aTZg8@I?!oQ)FL~T%w^-^;H#i5&+;(@)8VZ1sgo-%>f4}pzzNt*#QYIZukYZN2}gRr zX&FW?@!uV=t4(r7Xucf@JK{i9Z$N`YWC?hP>n{P+Dn=)dCwArvtZ*N;)!QHEQA}l@ zv&GRSAsCgbNOYN>EuiM9Uf}>46cUd4_2no)0xf+Ip6TDO48>nZQ{PJ9NOk`x`S9CR zE(31Sy)?8o>Wi@qcLtgh&sDUzyQd16+T1aT6S|0a{IChT6R2xRUyKp4d=9D}z&Im` zLeP}b3xYQ8x;@{fRxV-;GOA&MsNi6@1--JmTg+`r6vN*-?pxYZ$`pU^!9*_{ zAu%3sbhzA`1kI7SH&Mta5D9AQVi$e*Y=$u=^%u+86k9FeL`<;lPoTtH2FF~%Xw&B? z7X1cHqV6v+@s3Ik06I9Jzm&k0o#C3+han7&ptcQhrONzju452gbPmSo2Rb-$gqNxz zf?!zAa&+xx*ufvhMxYiigPJD*+YRZfJ%FKhN7wrG{dd^719bvxA;TELH&Ef_BPB39 zB<T*9Go_syjiBSdkALKYrNMgV~l&Rk)-cB@sU&=_!LY7XwZ!d5{sB8BV{ZP_nyDUP4Vre( z))v!gEm4LH$%xj^REIyI@cVbFRBX~GJoI6hOjx%t3AV&P4~R;tf&}kK(L3@!1xlOE zUv2R+qN%d;Bar)DsNS6!J*?qdW;(%lE?s=a@4Er{@%LoNo6VnqV|68taCsK7#|gU8 z`2q@oRXjz?n<do@oLtEZcn2C2Uu5jL5&=LRi?u>TH5 zoH@XCVG>Al{7D)%i_732 zEx{>860{PLo~h)5HIDOm#T;jE3}iMBCSpZL&kwnzIM9c_=sj>q8p`na8&Vw9p6m`j zVELRqiw;dS%OXbwxk~+FOj(~>}1$&aI6wi`= zt$HuqHDYNmIwUjMU(1sFGwj_LdDh##lJW_R7y@2>_gQmbi2;ztLMey6e%V}>@5Wy$ z`vw99BbS>4xFSH@=!4>T_6PY}(+~Jre4)bkL!y!vr_F8Hx9aHJS&~r>KGsX0n<4lp zQRQsG+oJrq&fibv0gou;#vUJ)0zmHnQiW%5+j(z((>i%&db$#f@dPMB)#={#(}0I{ z^4;AR^44y??q{pG*plzLA}9Q)$nygrN>8um9iD-!ko|qQx<%3_^mMbXS8wkJ2x#X^xarFiC#3=3~X%VT-F-NaH1s@rae)2 zcXw4)RgH~}#l?(PPRTYMeA}79LN6MLn8#kys}&%>7jMqPK_9m@obiHS0wWG1l)Ycp zWDm&amtMY#fk5nnu!?yg(@=FgvS#Q%vj8i@_zd}Y4E-~h@}27JF6*>Up93i&FGdPX z0r*h0mN^i!b4r+YyFyNTd!=o;KqL8$Nz3#>k<@qy-WGkAP{jWM4qyK>rZXt2RJtzr zr^#I*VqUWghwesRo8LfOxC~@!0Pr63w%oFYDYN37Z~2k=d^QqgAo_r2X?xMw8<*bE zQBl6a%ODBJTi3yBKfVULTXn;WObE4zy;vU2vq|4)?^j_fD0X)qI~ran5un{fK<7DG zqE)iW9=8MNjQgz&hXmC3u~%jr{fSK;$0PDR*pkADrthH5%V6Rq3Yk;P(j9r>BSfjC zyG|&CDOjU>Ozj$n>|SVU%8wB#d0U9KCZDO|$OPP(2jhUIAbz}laV5IJ^cZQPJ6K<+ z=d&H+f?kMdqVV=xpjX9d(DPS5!=U$P(tXzr`3a!k$@9*3 zXn%O)rlGI{$LTUE#6y7kB3}R}ZgpM;@BvwNY3WA&!7tdTiBe%e`YHj*R%ga%Z4kD=_Q%`1&ecej9-{gOddzf5~1{? ztB_h5^aE@IiF$#;F0&A{=)yB*`2==9+91(PK1A$h@fYow70&7X#qPLID_;~^G|XGj z??>tC=**heVb)G;gCH2=eN+QiEv&TU-+#mUP~Fw+3dTDU(v!6bo`|%%t*q0~2d*!~ zxdrBfcq!IBIiNbV<3tS~n=D7OCwBe8OI)UAQoN&NA7*FuZ34cXj~^}qUr$D-Tas8EAe$|zcB)T@P?ydtC(t~DgjQ%wV ztIsFZk|X!P0c#EuPnt5MaEWv1*d|hG%Z$(t2jG|A%~^r7j6U4R0`I=2RFs>$=0JlrtyvO0+YdY<^^H9@^vYi z2l*9?$1D^*OQ z>Wy+$JfL$&(8BOE_u-}iFn0;L7%^5* zBFBxqXHhL2)?8}m3@m{2HvIxnq#B*Lr!xSMD0lzXp7$>S?+JB(20%Y}OXKsJKESGe zr5Q4U2lg639H`+JphNNlnL~Nolee$z@6ccTc5|E|KH!BMsK&h)J&}m?5wX(5kozT} ziLAwBU=D{l0R~wFq;1RrA6cQ&%jA;YP$sm2=!RCV(`paoAAW#BYS%wa#4Pa5azJWMVWPz?UsOlwKBoI`|m|?XEqqzGTw#UVj!{siy zzwH=9;4?LBQ_Mv*N+6>5AB1gn7Imh~opBqY>R99pRooXtsII363a6(l&>g=2O)BKg z*}Vh0t$hUw%xlH8ceL1%fO)8XoFlW3Gf|$|KY{o-L@>L&YJaiv5`2E#vdK1BI$iGJ zmx_AcQab_{-hkQG0mc&^xuw{w-QxiX4m$xj)st1Ci4l9 zV;BFnAO#mrol6uhuSDO!buqYC{lbkBD@|=`>89(-9~&EcgCfs(4}!70cd2mcJMx$+ z`5aClkw_o5(4KtB&goz(uRubHn#3p}FNY~xK746tGwaNcy3|9w5o6Zo_@9^aSk zg#PjxS*mD>S{4fqvqwuou5z0U^&lq06 zUpJDIhl9yv9;tC?lC7v^Ui3F;W?hPP<8ds;-NNVw7+D;iu#FJMxqtGbS(XHE*`?&A zc-FeTwil`{YF?vo{2=sBt+Z-(8j|Y`MzC&3yjg?0p2PT9z@eCCO_JPdadY!YnOper zX)BtpW&t$H%tpx)o|=vicAAKN>Ccn;9u_8XNOw?+MSSKZdVdq{raiYa*Gx*;#z@&s zj(X((;)U;hBXC!r%(`agT|GHkme?Ec9^$zFOv1hQ;61ZV_!k~Y;?nGWcQtBaqla&$ zG`BI|jpTg{U%`xJYyEP`eH@yhd*~q9nezEupMf#)V|~;NYqH1&o8hG}$3IVs_4ril z49)^#q`S}EJep6JO!)|P^m+aV3i}O-XGd9QWK$j_#?FhEKU_$nPNiJWQSuhUiTe!p z1ov^D@7bm*TYun}hX)SlV(s{acb8pq;Qh9Q$qc!O@)>5DA}-W@qwLzlNTj_aD~mgr zUD_W0ePEDZ?+RNu9jwvhYAOFNmZ_Wz*eocrzE$`X_wEKd#{jw4v);5r}3sQ$EZ0?>g?H zU=*$xUjK1m)W;B+C>=5OSgdc-5fPo1klCOOBIAF$!S4G?o*vIbAXDY(tM_A%YrBz$ zDWhqpF*y3bQn6AolOl$Y(ryv^ZpF@Fc7C&IVp2k$t&x_~F620|FUV{t?n@Hv}rY(Ge=+T z_WFeK`i^Tge7|j83Y#u0aBM}<7G|I;N|qR&2;OrxIsSC$43Ar0tT|xX^k(7TT{;mnHk(cx*W7P^H1??+ig@p`BlgiFMBk zNXW6*(p$>oB}nmYTxadS_hkN9SDt8}vr2z0YgxaZDv(&jy?E?y^zvbR4jP*de;yra z@y~c94fZ@z7(9i4njfVan~W=b*o>Vev&cEK`#5Gt$85T|a`F%5=wc|-TF{iH&%M{i z@U-;ix23${PrI4bpGk*nI@@V|q=NzHPB)ME5Bq+tEG<8>^I7mSEsX^vM$6FyGUN%p zKlBGtzYn2KZT9jzi5^k*(`tgm@=v>T9dehN>rrP+`%FpCnI~Qj>^)twdkzGP#*28l zpEP2_%)g#j+g$EM%}3ixq9e!&s8-|pB8~H>ylvpEMJmoRwyzDHh#ZdvUl^oGwgGM@Wi>tWJFkB42Ua*?Una95 zKUJf-eC^u!QDp0RP<^F}1Me)q`wxxt4-|FsAGqfUXXjE6A6+*N29K{FPw0KWc)UTS z8$BiU@cwbSa<$vgnbzvEtu5_~cU!bz#Fc5IU@+SiJ$j?L@`d9@C?|B;i%GcCn9o05 zPcVk1<)-=Hk0ibVLsJF8OiBCCNbOtsZP zjqjpkfN0`EJ6DEeyBTNi!LI)qVc%w6V_%lX6n2`XRU%qBjWUi9FJREp|G|!S1-uy0 zT;gzwmtjEHmW{WBK2BaY{w$NTo@Ib^WntA9al%E1@;aWrs8}j2)Xd*%jKgb?Xf<&< zBX|<4CyaVV>2lEH+ws@Y086XWui}F2rOf!EVYUwNrmI*xCiXeSw`5wnn+_Fx*z#^yXc<*tQ$j}IZ_fF7$z%E~Fu!(yn={R+{);fKT`hR8t z+cw(jmb`Y^mJ>>UcK7Meu|DnJoa?73Z?<_!HEZghN>#ln^pZF)h_X~XD;tXU_(d!< z&gDX-^&He-B{t4FG#JE_O*fLgt5?+b(XDX`W9exlOQn!Pz>bME zv{!u9&l;D)3Fl{?553k*=Uh5w4IL`hM7?XrWoN}<66-!kwaPO53IYd%?dl#)x+NUy zL0B9L$)1xOfp7ASJudRk`s)=O2rLQGHG`Tf3+IfUKG>a^eXrz>>fKwR>gr$pLu%3I zJ57M(aFQH4_k12=rY206b+T?TS7=1Z{U|V+%H0;nlSxMsgmUB%$d+#7e2$Xnkm|nx zE0JwswTq^%*rjveW@L^3&EXDOkC4Z{cvm#p$n`

    8#S$BlP%o*zM2PyzS5pPf}Rj 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 UTA#!KpZp~+ts+$?VHWa#0rK1$;Q#;t literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-unset.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-unset.png new file mode 100644 index 0000000000000000000000000000000000000000..f48b850a869e05957725b2ca91226d302f5a1509 GIT binary patch literal 19963 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

    5kVxUdOAZhfwLx_GCobFchtQ$kv@3@A^9X_QRh% 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 literal 0 HcmV?d00001 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-set.png new file mode 100644 index 0000000000000000000000000000000000000000..b262ced89bac5a4eb55b4cf0374c7259503b96ba GIT binary patch literal 36291 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 J$~0}B{} Date: Thu, 29 Oct 2026 10:37:47 -0700 Subject: [PATCH 26/42] fix(ui): validate the appearance values in the extension host before anything is applied or stored --- .../__tests__/webviewMessageHandler.spec.ts | 89 +++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 25 ++++++ 2 files changed, 114 insertions(+) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 62a467bcb9..e19048a0e6 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2165,6 +2165,95 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi expect(mockClineProvider.log).toHaveBeenCalledWith(expect.stringContaining("plain restore failure")) }) + describe("values from the webview are checked before anything is done", () => { + const bounds = { + interfaceFontScale: { min: 50, max: 200 }, + terminalFontSize: { min: 8, max: 32 }, + editorFontSize: { min: 8, max: 32 }, + spacingScale: { min: 50, max: 200 }, + } as const + const keys = Object.keys(bounds) as Array + + it.each( + keys.flatMap((key) => + [ + ["below the minimum", bounds[key].min - 1], + ["above the maximum", bounds[key].max + 1], + ["zero", 0], + ["negative", -10], + ["fractional", bounds[key].min + 0.5], + ["not a number", Number.NaN], + ["infinite", Number.POSITIVE_INFINITY], + ["a string", "20"], + ["a boolean", true], + ["an object", { value: 20 }], + ["an array", [20]], + ].map(([name, value]) => [key, name, value] as const), + ), + )("rejects %s when it is %s", async (key, _name, value) => { + await save({ [key]: value }) + + expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-1", + success: false, + error: `Invalid value for ${key}`, + }) + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("common:errors.settings_save_failed") + }) + + it("changes nothing at all when one value is invalid, not even the valid ones sent with it", async () => { + vi.mocked(ensureDcgInstalled).mockClear() + + await save({ + interfaceFontScale: 120, + terminalFontSize: 500, + soundEnabled: true, + destructiveCommandGuardEnabled: true, + }) + + expect(mockClineProvider.contextProxy.setValue).not.toHaveBeenCalled() + expect(stored).toMatchObject({ interfaceFontScale: 100, soundEnabled: false }) + // No side effect ran either. + expect(ensureDcgInstalled).not.toHaveBeenCalled() + }) + + it("does not echo the invalid value back", async () => { + await save({ terminalFontSize: "x".repeat(10_000) }) + + const posted = JSON.stringify(vi.mocked(mockClineProvider.postMessageToWebview).mock.calls) + expect(posted).not.toContain("xxxxxxxxxx") + }) + + it.each(keys.flatMap((key) => [bounds[key].min, bounds[key].max].map((value) => [key, value] as const)))( + "accepts %s at its bound %s", + async (key, value) => { + await save({ [key]: value }) + + expect(stored[key]).toBe(value) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ success: true }), + ) + }, + ) + + it.each(keys)("accepts a reset of %s (null)", async (key) => { + await save({ [key]: null }) + + expect(stored[key]).toBeNull() + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith( + expect.objectContaining({ success: true }), + ) + }) + + it("does not check settings that are not appearance values", async () => { + await save({ soundEnabled: true, writeDelayMs: -5 }) + + expect(stored).toMatchObject({ soundEnabled: true, writeDelayMs: -5 }) + }) + }) + describe("a failure while writing another setting", () => { it("puts the appearance values back, tells the webview, and then follows the existing error path", async () => { failWriteOf("soundEnabled", true) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index be404308b8..90fe7885ce 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -30,6 +30,7 @@ import { RouterModelsMessageType, VsCodeLmModelsMessageType, isTelemetryOptedIn, + globalSettingsSchema, } from "@roo-code/types" import { customToolRegistry } from "@roo-code/core" import { CloudService } from "@roo-code/cloud" @@ -141,6 +142,18 @@ const ROLLBACK_SETTING_KEYS = new Set([ "spacingScale", ]) +/** + * What the webview may send for each appearance value: the schema the setting is defined with (an integer within + * its bounds, or null/unset for a reset). The webview is not trusted, and its own limits (the stepper clamps the + * numbers) do not bind a message that was written by hand. + */ +const APPEARANCE_VALUE_SCHEMAS = { + interfaceFontScale: globalSettingsSchema.shape.interfaceFontScale, + terminalFontSize: globalSettingsSchema.shape.terminalFontSize, + editorFontSize: globalSettingsSchema.shape.editorFontSize, + spacingScale: globalSettingsSchema.shape.spacingScale, +} + /** One write of a rolled-back setting by a save, linked to the writes of other saves that overlap it. */ interface SettingWrite { key: string @@ -809,6 +822,18 @@ export const webviewMessageHandler = async ( try { if (!message.updatedSettings) break + // Checked before anything else happens, so an invalid value changes nothing: no side effect runs and + // no setting is stored, not even the valid ones sent with it. + for (const [key, schema] of Object.entries(APPEARANCE_VALUE_SCHEMAS)) { + if ( + key in message.updatedSettings && + !schema.safeParse(Reflect.get(message.updatedSettings, key)).success + ) { + failedKey = key + throw new Error(`Invalid value for ${key}`) + } + } + if (message.updatedSettings.destructiveCommandGuardEnabled === true) { try { const { ensureDcgInstalled } = await import("../../services/destructive-command-guard") From 76edd8c1fe69810314e23dc01e4f59b96198a483 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 10:43:27 -0700 Subject: [PATCH 27/42] test(ui): render ChatRow in the appearance consumers test --- .../__tests__/AppearanceConsumers.visual.fixture.tsx | 12 ++++++++++++ .../__tests__/AppearanceConsumers.visual.tsx | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx index 79433d74e7..59b3bbf9d0 100644 --- a/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx +++ b/webview-ui/src/components/settings/__tests__/AppearanceConsumers.visual.fixture.tsx @@ -2,6 +2,7 @@ import { useState } from "react" import { applyAppearanceVariables, type AppearanceValues } from "@src/utils/appearance" import { AppProviders } from "../../../../playwright/AppProviders" +import ChatRow from "../../chat/ChatRow" import { QueuedMessages } from "../../chat/QueuedMessages" import { TerminalOutput } from "../../chat/TerminalOutput" import CodeBlock from "../../common/CodeBlock" @@ -59,6 +60,17 @@ export function AppearanceConsumersStory() {

    +
    + {}} + onHeightChange={() => {}} + isFollowUpAnswered={false} + /> +
    - {unit} + + {unit} +
    div").first() const terminal = story .getByTestId("consumer-terminal") .locator("pre, code, div") @@ -29,6 +31,7 @@ for (const theme of visualThemes) { const code = story.getByTestId("consumer-code").locator("code").first() await expect(markdownText).toBeVisible() await expect(queued).toBeVisible() + await expect(chatRowWrapper).toContainText("A chat row with an assistant reply.") await expect(diffCode).toBeVisible() // The code block highlights asynchronously: wait for it, so the picture is the same on every run. await expect(code.locator("span[style]").first()).toBeVisible({ timeout: 20_000 }) @@ -45,6 +48,8 @@ for (const theme of visualThemes) { } expect(before.padX).toBe(15) expect(before.padY).toBe(10) + expect(await px(chatRowWrapper, "padding-left")).toBe(15) + expect(await px(chatRowWrapper, "padding-top")).toBe(10) expect(before.terminal).not.toBe(20) expect(before.diff).not.toBe(22) expect(before.code).not.toBe(22) @@ -57,6 +62,8 @@ for (const theme of visualThemes) { await expect(page.locator("html")).toHaveClass(/zoo-editor-font-set/) await expect.poll(() => px(queued, "padding-left")).toBe(22.5) // 15px at 150% expect(await px(queued, "padding-top")).toBe(15) // 10px at 150% + expect(await px(chatRowWrapper, "padding-left")).toBe(22.5) + expect(await px(chatRowWrapper, "padding-top")).toBe(15) expect(await px(markdownText, "font-size")).toBeCloseTo(before.chat * 1.5, 1) expect(await px(terminal, "font-size")).toBe(20) expect(await px(diffCode, "font-size")).toBe(22) @@ -69,6 +76,8 @@ for (const theme of visualThemes) { await expect(page.locator("html")).not.toHaveClass(/zoo-editor-font-set/) await expect.poll(() => px(queued, "padding-left")).toBe(15) expect(await px(queued, "padding-top")).toBe(10) + expect(await px(chatRowWrapper, "padding-left")).toBe(15) + expect(await px(chatRowWrapper, "padding-top")).toBe(10) expect(await px(markdownText, "font-size")).toBeCloseTo(before.chat, 1) expect(await px(terminal, "font-size")).toBeCloseTo(before.terminal, 1) expect(await px(diffCode, "font-size")).toBeCloseTo(before.diff, 1) From 539231b3825a8e9ac840d0dc4a8e9c3d7dd94fc5 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 10:51:07 -0700 Subject: [PATCH 28/42] test(ui): update the appearance consumers default-state baselines (with ChatRow) --- .../appearance-consumers-dark-unset.png | Bin 22694 -> 26837 bytes ...ce-consumers-high-contrast-light-unset.png | Bin 20729 -> 24939 bytes ...pearance-consumers-high-contrast-unset.png | Bin 19963 -> 24104 bytes .../appearance-consumers-light-unset.png | Bin 22153 -> 26309 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-unset.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-unset.png index 9e08ba2a378bc1a676f1e7c643e9b2ce13051d7d..b488da073f99b99867efc5389474b70378e93bbc 100644 GIT binary patch literal 26837 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 W1Fvz;#45oOz|E@`SMZnbM*bJhv8iPM diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-unset.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-light-unset.png index 0a96bebb3143fbc348b8eb4ca7be7a0ed376bc31..56cce7bd8e40d2e00e3fd7c06104b79483c91901 100644 GIT binary patch literal 24939 zcmce-bx_q&yf3O!(w)-X2yD8$yIVlIM7j~A1w^`Ax|EV`q`RfNyX!5^oAYY!JMZ2* zbKf7%II`up_g-s#Ke@t`6{V072oPSqdW9?_Ew1|N)$0}TXYcJB@Goji2zjqwp}mq3 z7g2XlJ6J>%R&#k4Ix*ebvg;fe{pj%;IV9g5YDidN65|4X>*0K6+`B zx^@1n1SDQPOSKRy6KnkIpfcv!8*5~>pM6_FP{|`+d<|%@DA0U+_m|I)KDEcg!;$Wp zBe!Xen%ifa105Q;2ocLVb*9(tnD?I*GkCoWNy&3kW||y3hYxj~om>!556VjQdU*{8 z2u2`|>3ss3W1t$%{Q`p84yp|MpSbO;q?iv{I=B^G_cOT0O`L z`_=NC?_YE>SfJpBhVCq%cfH#WzB)qNn81%d#$c>DpVnwV!o; z6>XE=sy%5x*@1b=0xvF3i5e9>JXPUW<=TlN7=7Vm<&Ay%+yg^6r z!+=T&mHvr0DlX2}?N3eqgANvg9wX116&Ct2{I!BOr5chYIeD^)FeZ8**8llZjZ6RO z{YxS~SN#U(B4v*e!TW=)q13}n-{lq`qKdt-+}?V}^(Z1f>VHSB2eYTWBz|wjoePRR zh5hai>xg)rXMdSRd{X1)<|eG1ZSnECzdDqPCT99~gu|%a=1<)ayQnPO`gFIiqoZ?s zdpj;ID%w%e`o!yVcY$l<&C1UHJ3s_}snKeJdVd0&L38%^KUib}{^y5t*ud4nWOnzv z?My#r!zOMBm(6ySY-)YrA~M zO%!NjL`C7RBb6mlT=yo6+>V!~ze~&xC9}gByfrdfw#e`>zdl;rM3yDsvi}yEDC$%Z zBoOhmU(uStq&MB*vj0;dmE5~Gib$`~^^j}X8`CM3&8&af@7azm*~G+Tlq57NO7g7b zqyup$gfv|#ga5W2j^qQ%-+u7PTqX-uCVndDRa>H;sppQ7GNY%vYhZO#$t6In#y=kY z`;!FUL*luUU8Gi^sXth5*sRO@p>4*9>-|w9ughLmZX~}1 z&$qAfs>Bks2(C0VG+4#ll%%=)QzaqTH@DlFr+fFut zRWC&{UzJQ7EX0>!4h&@ikv*9T6Y=60m8F~rCS-EnXcD0)II$3v$F&F+Vy}a$jg61h z9HWN9-^iKE7*;knsnnMQuK!U8DAQt%kLTv(C=dHxj7izs+yAx1I^(PpCC%Y8)Ogd7 zmG$a&Dqjw_ef+28R55n3Vp`d{m5NFXWT-m=cgnivVsrMiO8up}SHQh|j`fi%#cC1lA!Y1P41?wx9-l#Yhj!h_>ByIr#pPp~{hx0YR|6q%YYgjpEc}rrF z9?+|&Pcy?Y_hu`Ki>{s#m=uCjExQOu;*A!mD8zuj0AznPJzQUlZXGMpmwJ*RG0q=zYP7bZ-A1dL*w=l%=Ms`blNr4lC?x znD01E$d5RB%ux6tJ8g2;SxM-z8uDdGgkb|+6q)HmyS+AV6auXfy0P{}o=oiCOhq&` zhbO7_vxx1XP%dT*$le$;RKx4Pr!TSKuK%mxiuTIe$sM$w~Pa-n14TJVuE zU%x^_X!DMm6n5&qe*OBeE%Yp6f$udqF@f1^^(}D`0clN~jGWwLs#v3*HoVvfEUP>d z+%k^^m&Dtt*JK>#gLoHkqdz2}M0gwPc(gIBXP15N?ans(L^ZN;1V3-Q^@QPuoqc9j zFRgzSDqrf(=FI;IPZ&<8Qq0`kyg)I%-`RA$%f{9T7S{kx1A#`t5qw7U&vrt?1fy>R!&5OEoQ?@A3 z=*Ljm2MFe3U-9n%$$}iSfrK4&BRA#GcNbP4A>sRykpuwC)I~Y8M!{ZnMUk~lm;%_g zx_A)!U&77*05bird8vjJX>lGbvFTU6xu9=KFgbd!8U7DgRG)&ir@D1NfEEjLa|CgY(!JM@hjq)YJEQG)dOny~xVV0Iy9Gi|H@Tmj zR^2{>p$-tL{R&~~V|xG$r&>+ZDg9tSac3~{J0V|wVp99HwY9IZpLaN|mCh~-7A9*h zO%{hmMvfoW9-Ca&gCX}8qZAucY0)J6rD)cg6pMN!!Aj0$HY3&S=7T#E1xoopyZkT! z*kFWOYae=E-^u%R=oL2AEqU(O%oyIEbfS`g2?ZXO;K@Nowp!kJl)~k(1dwSWMp{Iwe+Ma<)MbueFJb6Q?qT@84Ksl7XH#&n6+@syU)Vx5B#cyH?TQ(&ZN zmFZ5EXjRlL`@WMf8AxEtuc6<4xIHKFdthB^bUQXoBY{|se&`Oze#d3s+8Ec zoGz!B787&2!5%6~Vy3prfO6T9^e{X;v66*4SvZ|LEX8cKrPLhp%v%ZVj*R1Glxs zx7O#Udv2As05D~PnFO47MgeF)f=RRTDYUHIsMWX6V>nDEjyROM^UI)^&?X)NbG*UX zGR^g|?xmWe!w9U9-7vrVY5&Tt+Fg3G6iNm+4FZQuHa_>?nh)FM-zNMLeH_gT{rU>{ z+>V?-eX^Xdrt|fl9WN}Teb}Cx&p>mI)$Gn$*dl8UXtfoO z8?iSoqKqhn+@CtW!iQ20y3PSAh|AIgty_j;@e^zT8dwRHhlAfEhTf+VlOk$A<=egF z$~gOFK0>Am5eeAMk*M2rSKWSraXvfyL(SaGEIXs)C*U5d+|Da)uT#(K{&>14=H{-S ztaes8$qxUXyaBwR3a(O#_!@1vZA(6xao;SC*HTH|1Yh7VUsULV~O=wITKTUd^4{_Oz%w1+< zlPE@~p3k-=Y>C!LEIaaPHQy~3@07Y!RJ^s^{;*EuVgMI)zt(wDziVhWi0uq@TvTy% zdoz{3pYvNYD8#LkkHDE2Oe zzWR2zF*o=F$M*ru0t>2<1s(_GZON?~RnC2^r>hdLX^G>9_Zu<`@h$#hjGQ>ApD0s> z{GQH7goHfKHWCdzW#+BS3J7_fX;Iv{38UU|DUue;XdqcSbE0v%zyHwYf7U?wR*I6M z!>lV5J(TGi=>XtBsSqnLKLTR+0do>b!O(a&juvk)2d|jHuLI6qRu(Bz4&pZqNl(N* z+_;g)yGyb3DAKFzYpKIPvp;|SWZ!f{<1*_DkLJ34a~TED?e|#o0iJr0goDwy_q$_Z zmt6UK^Qc@DYT-ZO%L0S1DGVB%W8M(R7<@LdMc?|C3!}*afnYiP=J87{*{6cbMpd>46|I+bGUQm?U4cD%$Jc}CXH{Uv+PJL;J z)WFqjd6KM{Yb1nqak5jtBI<_YV)1i6Di7Rd)+e%BA$_=bP^%CiFyePs-q&Pu!3>!+ zcv`b*&Umh^JQiDG8rUexxeP_C=%_hwLTHst@}|+! z@6^J!GN}EE{`~~6zmCI_1+|@BwTwrKWK9-1nQgMOv7tpsLm;oC2zdg&Gc~?Z4g1;^ z1AA(?fqquKfw100+?qUH@YaYj#f3^vMC=tD&F(4KT_o+FV@9_g2K1W4i3B{cR--5q zT)GAZ5TA2GC0EFet5gDf?yirc$q6i8jk8h@<*b!6@N$kr5faND=AU6_3N)~+?*w%u z;EIb(Xw$u&Ssq2~y(WQ%mlXO>FM!9rynbmHF`!?>$87+GNso(Is2DY1!8!Y2vfrFZ zKqL6@9w|qeajh-Oa(BM=sA8E|NJpLYfOGQQ_%DN!gh(ZlIj_5p(@a-8A=bjma z3aRFSOV%DDmYUw5pD*iPH)?riDbs%XiWB;zp#g9C5qS+NpNd$ntYIjXE4PV>LkDo? zi&s>sx@A3q0ITq6f-UvdH*^uM85kTntOpeRao~I{T5i@5ipZmfi3xeKhG8*bcu9+^|dHNnY^64#U zEPTo#P>p{kR1riafY2V$>r+M|4l2(4H(HYp~CzZ!8`rdOAcva|&a z2#i=+I7CDVfBQ0jT(**uG~6vMjN<9j6Z2&NRsB{V&U@-MDxy;VPXe?mD&n~w0lkIw zRr(OL{!~2U5ZB5NJo?!r0RwKFGz<=xqZ&Y%tIzG0ty>na{H46Se!kmhf%N95e=C)W zepiMH;mzxm>C++e28`LrIzt=6iM-BzV=R=l_ysdab>?xjh{fYmv8Jm}+#7isMM6y7 zE2}_axkVf%qBt{ZG^I>wE~~rxwfqK@A;LHb7`SMhI!C+REXx(o)}JR`VHB-=8n|-ooh(zwq*_ z^?-b9$xtat$pmj)<{5tTFWOQn(eYJRXeSI`q2Of|^WMz|ag@uM*;lf0Ac6P8EZf%;{U#Mfz-QfQEfsVGPY$B1+sKI%++G+x= zbQZb^9r@a!dj~i+Zk~ zFf^OCPsRtkI#ks%=eYcWj>=>vuB#`x2^Thm>?W2}6@KKb@0&i&c#QvER%_8_Ezh|Gxm7P^tB`(`pe}<49wM5UvF-t6ov3ciUU>NuTlO>cBYjL_KN1(hh zSktmKYputzFo2N7;SyTTkxARSN)x zym5`rg9WAiGd4jYEwA&Ae}^b(@oONQtgp;vh8Sg|vR;*P-^(ia@4eeTs}B#gv9Iq4 z{`|Q=j?QeE>au>I1KT6}$IG)reM>V0)aLb@e~sBX{mY22YJtJERVhQ%2pFn*?x0w8 z?i$V%REeKb7ha#N&>g-RrF3+2TmEfM)ufzY%cAlIAQ( zD8N)-#yWAKgxNj{r#=?DE+CVW->y7n6^*+KndPJgX5LZ$_u75`Yed!m+;5#iw{HN_ zXZ_}MJ(7Uqvx`fa+P0DQYw{euj-i2GxkTptygb|4N-_=(4T2(rMpxj?Wq2L^d3wA@ z6c=|cOPyR3<`p_0WC!BLa;fRoBGboprR@t47U1MI)Yr?WK&-$5N#?2m2N=U%Rk-zP z-bU#8!O7eE;hjU%7$EoGAa?W4ZT_zvnlClw<>fs+?-(kYOh&wOa&mYL_g~y4>)CRH z#>(P+SU~WveIM_D=;hclhrZ~KXTZe3*c!=P27>5Uh2YIfAULaAK>uN2Vpi~#gocJf zY54$8lC}*Fm6&nzeYzr$Qv6>+ceaX8i7z$>5=~7_Lr_VU3Y0R>ex9D4on2o)zYzM0 z519c00mXJdP>wW;X`h^&I-xK3 zraD)~a-|##{|*n^FVr%@0 zVTLA=Kv*Cg-oT!pon^SM!IO|=N<`prSWmuvbVSMkULT;Uy@9~@GX4eD1?Tz2fg~j_ zmf;{C-I-cj2Ew9Zt#4GJr?vIrEaC&)MLPN&CXHfT25>IV0n1-qT`i31jeO^}+7XnF zV+JQT3?1~l{eyCm`sMzNR2&O1U;>$RtA)S(D^jDG{QGtdxJVSeWez%Z_C$&>^K}l( zzs%$Y)n1;+wQK6?w&;>h@!DGZ;T~9^@H2s)oV>gQ&4~LJg(|Z-_;%@Sb91*~7Xts- z3~ubWHY$tkX zAQ=ZXBu7yX6hXTFLj2Tuwv`=1{MpT|LZbwS89RagLB+qfw>Kguw70&277cwWFLi9K zEvP;a4psAgdkTk*a&rriyd9U6R8*_Q>p(I)5Q%65N1BJ89)Zb9A4y!v1E@cR6bL#a zNeVNc<$rJ+?VfI#GR+9x`^y<4E&6z{#kwRU9`;vO{Ou)6G|S|vV=tNN8N5ts(T@PFutxo20yOMYkIfdTtuh0(1WaXjp)qO{YEY3iX1DMWxMuQYS2~Zc1=3G35@^?652t*q$}93%r5m z!9jT?B_-hN=^Kkh<0+}2``vCPuJ=Ty^12j%GF6^RKsHGYq~g(yBM?_GXxG!NwWR}J zNfQC8&&~@ z)p@Zwe8YIV)JV#rqZv|3+YKgJB4Eb;;BonD)^^Puw&#aAsD(pMjQJ43FWk znSOY>KTbL;sc7*8W82BeiB%wj)BfKquhKVC-q_gKXOQQBk+}~t1nnmGQxHXc3BU~r z2ZI-wPQW15s1)Z%@CNw=zoN7>@Y~}>v%i}M(6=b0a)SB8g@?r5uo8(k`1kMoWO;2F z{x&%~1AugW(F9|ERB zlVq-pl9HQ?OU=;(aK7J)*QNX^QFF*g;1v>j2D4iFJ9zu+iA@L4z+senV%DyF6~pSZ zC2w^CFhDBw!zbXGkK^Bgv9%2H6%f@m-EO7c#7lBs?u>Pgj8wSnPlM6#?Ci|Qqx6-} z@n2)0w`fql1Uz;cvTx*i733tO8yZ5zpt3#>T7Q1USZZpqu@xcT8GoeSTyye}|5K z+JVUOVe79E(wa1<-_rvyMtyUV4b*E1PMFaG{nClsM&7&0(JUIN2hkcajgsf zVSH@{uZYXI13F)oF4D{09f_D9FEE<_>@Q2}LqH5TNE94sy`fqU!?~6ca}jLFO2C>8 zqmvuL{}Z+&)f~10#-TMpG8Gh4bZNq-yHPRJ?0U&`_lFxtXLT0CrcgpDe8bNuN#-CR z3&_{(ZhtjJ5(S}A%IM;i#w2B~%HVGJ0He%;m=GtW5J`_g7u@j90BK~X=0ClF-5=~- z+yrdgn%S?UYI6vg>FF^T=e~AzQA0yR#~mKdd*hlAvChoCX_V-fMIzs+5~~dU+pCIA zYuLPB-dKqR!aZAbSzn0tdnc^!SzdWG9Gu{Ihw;3yh=_qoFwA_?iKXQSq-CFBR#!Yk6!-@<-%ON2=>2mu(T3kPo8-wv50T*7*g$IqdKITI2*m59&w?gW5MCdITATWF%Fh@B>b|_-N#ymt4Og-)} z7Q4fPPl4Ydl5q^~IRacW1nzp-PY8vciXFu!v>&U?2`LBC6Qk;h?U3k7dWCv7pd@gK zHI8rgYtow~`qBWq&9_HFYq!e94n|Il1P+@Kr5F3);fI#ER~Jc*SNd=2ZDLZ^CA-=ag$9Md7>i@qANB_%z>*6k8G8`PKtf#0ASn9Akg3s8J~d|VdAgbgW!+YylPACal(qc5*t z?F@MdzrZ5DFfl+qAHYcs@{7*RHTCptxU>T34x~1y6){XU{rmSXFOTv|=wB3J7ROe-%LB z21o2JOaMYI^?lm3>*M8UEc@wFow>^*jS|h7a)TGTy1Bh=O7QLBVnPYzDswG9jgWSb zzy$F;oDHx5PI`THWj|9+1QIuSMMY5PB8cqi?S*?bL33*Rna<<%6Ob$b{h?T=0HFT? z1qe>^Qj>=h5~ua#4*0v|T+~z#lHp@vxNe6&bgWv*+^VKs z^coPk&sf)32J_$TQdmK4yL{62RSQ~55PHaAdm2zW{7#^blr@1IY5+tfUN>A=+^v|v!7*#R%Z#-v z7I1`nJY*ebvJyB+-lLqO%3+!(-$&KEdKkC!UiTQz4&0P$mA zs^fJB3u9thrTrcvZb^TsOcEA90#DXC#g?vjLvJ?^R1n(=|dm2 zKFN#SoD?U}vAs89qz?4|;~VbrRpFw`f|2WdoxcX8N&ZtXwr<~B&9s|DLh+642gWJ?T0hz9 z3{YcJDgL5NXNj3x&+L(mk{yOEobNp%aIFpJScGQa5Z9SB%Nu$kaj)mef&%;Zk;iFE znuyprpMruyMOH5JeFA-nzVc+S+5is7~ntf$44?+OjSN+;@az)#uS<-r2HFRg#`JCPoURGK^ z(PpZ6D*YUv&GrmfKBGwO)VV%iP%b0muEd=~>Wi?eq34_nG(u-TS|EN2Eo9T~2d&uu zOV#ziK%U}LA$1<#e(r~Oj*yE281kG2X}$t;_-AD6#SW1|R^VE8nwR^UrbRo9c>Tvu z$IHb!jSNz&Yy*@{!2x%qJVu&G4z(AOu1z^Yu7vx4t=s;$-h&$(D-9jnN8vBN}=H0y`<7Uj!GF%A1KL2i=YBYH% zivc5{)^?7~SQPom(w#;pyD8?BNtsSgEkFtR8s&N0HLl@ zL}%o&86ObvrfCusYeDp!sEbU92Rgkc}?s>UKwwC`jGBT2g(>5tO8kM?j6*`_J zd=1#i;W@LjZ>sq0|8bkq_NV-(7a$+j4)O>@MC-){j#@=sO>J#$KzC!Q74-G>-;?C= zlba4SfBsvE{FuA+?1Wkr{1AIdt)tdozEK?;J||4vQ}0vo(drROO>TENY0#(fx%%8O!HB_N>1z7 z1y|s4+aNMva?#DF{R$epIt)_Pf+sA$kODzW0be})BcjqtwptJ^Y8pl(o3Yz=OxYI{ zzhomv(sYL}`pVLTz$M95^8~y`kX*pqM^3wWZ7HO*kgVHPzHk3ZSi72pb`RGMX+WlA8qUspB?urld^&lPN^aSqTH!b!>pEc z3WRLTVvO9#)OJUIVp2kF@z7FC%b_Jc{ZEr1oR2{vNlczuZ;ZVeT-j@_Ai9`%t{=kz zw}i4f^js=?wNftW zi;~r_$8AZSS&IxDplTe1Aev31>i)ZWDJHG=1D*k{cHk0ne$x0IpoEVxc4_cPS*^O? z=w4P~_SfP`m*hdox7Jn=#%CWE!n_IZhC#{3%!DAWE&v(kC1W?237D8Pwx{yM?@23z zp9{F>jwD5_vj$gY7GLG-ojmCLock?xm7=3=qP_ahZ|&l?-TsU=3x8DH*+SL2xqx|r zP2)TJl3~dI*gYI;{;cCEPPus(X;SirX41KNo~Z-70qX~)=9yM>tdsr}m5K@w+uBnU z3a&4|#RBmyoO3D;N~7sbvxm5Nd=K$|&pn_27V-Fhxf1k0_tGhJ`jL-pFQssN`gqww zO3nYCi%9Am&@WjyOat?&{QMmg$uYMY?Pv{>l$PHwJ2m?%Vdr;62_H&>{mV5<5n`iAJhUYh}!y507V}ge4T@_!{rV{r`}A5ukGxq-vmZ<#h>rgv^C5A9;O{Ehw?_nPiC@Z|7;b zpSSm1bW*K(vx4r3JAL@WuL_828r3JAJ)alqT!ZRt%In!yMy<5>jAq&}g{`WXpENmTdd^RNfaJ8Yx5(6uY1m%g%K;$QO8mTw#Nx5W^rs zz*59=?CAH@>#=kP+Vg|8jjO?|JF7;ezPtgIPoGAp)l&VB6oTmK_*2q9S_^r|(`YFm zMiblV(FW1mj5Uv_5%`Q(;KGp8uS!BS>?C%j2i|wr?LNA=pLy`JOg?ko7ggvt`eEN} zIkc|kY4JDiCC9Dc*4;i#yRvG*3p&)szG_brj_HyPd19eyj5K-AD&UN3^rj2ur;tHR0r zS9Kb;%Chv>wy)&<`6jRVoKf&bqttDg&J9(U-%Be0ju`jaCzi_f`eHOG6YF5%stau( zM~kF+UXe~fHQZg-sL*O%_w4A+TC#%5v9tRJ*^uv3sb_;U2tgkA<{>Sv*H9Ia+O9Wo zW`-Kfxov=H4qy*5iGt=)-pq1Fgn`fZULRthOKdqGNxMWrB$@ zg9-J=dMk>Q!8L}1t_VT3$6EfW_jZdOjcwqwn2nPUcrKQ!bW$z2k+7b-$VtOx2`D)2qF; zf-R+G!CZ-+@kl+SfMz7Ab+?&IpV{%0_e78GDh-`q!*(+T*G?4HdheO%@#u2fE)qwj z%NSL-NuKT3`8*DVbOj!BeJz%Bs<-R4y?0XMkOQ{wlmZ{+L$1?%D0`}vT4ijmPVT1K zU;iXJ_I8sb%{c?N5{>SB9KOuXc@#>C!6|fV?#%~OeTZ&Z9hD+n;NwH_sW$eN{PHJH zjdO=XdqP&{nAiZSU6~TWtp5q}&MKLR^*8=Zbh zg~vNyUP!Uuu|N&tumP{$aE_ey&B=mT^dVyXncx0mQ9G@3ra3~_n23%@QOzRf0Y-7+NSiY zaR{OwX{(8*D(v=A(lhoby<3k5=h!G*)41?Zj|3;~jH8K%nVN{NY||5cMx9S@+D$4} zo11y7NjQG$6-aXbOhHL6T<2&?l?u7?eN4e2+_caQrB{t#h}1P;O9_u7=oWHRSGQ$s zkSl^Dw#k|qjH%nwQSI|`me>%pYEAed_V-X2wme^Rx!#qkBl{dZ^#!KRJGt!s>wY8g z=()wFHI`GfCL1BF(yF#CIqmwzz2#6(xOAg(`MyD6!$lmSM(?Ap#Hg3*0jp@2l4IenOQ!>mwdp-h~ zwdCr^yXipU7OlIvbaw2O!!0S7Jq}C+CENu(x=s-dDcT0@wU4V6Z`7((Rc4yl!tZ3W z>sS66nWz|qm~UOG6sK_0D%_xMOzt+J(ujLodWe;f`J7y(EaZ#VHM~REnYWG?9b~%O zPLx;CD!b9c8dCVE!l+riXE=0Z(|~hXtvDfM%gRY%v$dbRpMKA8S5lxNn|p_{&2$LU zogct15j0dWSd+1qS;q@0n%Vubblf^!ei{EI=NomTx2TWcyXlKy^0up-iZ3|5)1ws? z=Gq~y@R@UZ;)z-6(+;b9RrXJXuLh} zFKe3*Es=Y-IZ!KG=A}1D(|$oxp6U6SCY_3HO!E#9>TD-E@`S7~bd9XUW*n8Lup`2& z*e(a#4Q8@ch^k^pb))cec1PY+p#(H~3~5~_$R()k zG2wBV88PyEd=|TsNM$lKD``y4j}TEFJGJV$U-%QRaiv%2EOaOP*^z_++` z4S|9yRFfbkKToyqZfAMg%Qb3`>&rxv`?ohoK5!g|`WlzVhsqYqb$G06%YoaKOnZuU z5fjrEL|jHfoH!>=F5=h?RS{oNjt+ZWx!;*TT}Y_T&ioV=;n=al-E27Ky?#1kZ{M7I zqJIZZhC`x#*{sy6@FmvXIu0o9z~3#tnP5=_)X@>!|=3AxnxxC9W7^5LrW(E z+*`OgH3C$_!>X0H%#AfWtAY|1No?k3>+So&ei;r$aMuj4-yslLjrNwF3KD=uIW@iC$JO?yRc(x)-YCDFnT4 zC5IvZX60@+6w^lt!G`4=o2nsK{feOiG{+W|QSZ#@`L!q^s*`|x4mc$0UNjdG4f;8b zX{gS)bWQBTkT+~D(!cg$J&bk8T+*Cul6h2Y5wPzudh9b916Pe3H+2cc#q09utGV4- zQ2rbD@Ba(3UEH7PsdaU192#1Ppe^!$zqbEh{I~z-4gde*rNvSHIG1!|A_9#!5(V$< znr#PVL*MRY?6Lw|-u;`0@RRS+!07#q3|1>{Umdx(?Lu8wbHq^GSb5AsJ$ZyUKFiO_ z=Ef@KV%cMxXv!-qUtEr(hve5I9Zq7O4*c}wMVM;hR>{O^55?e`Kl#Vt*-!QqgiS_fG~n#g==$2i_>Nj2pfX4gIJB6WU_v zI~2?Oi4`52wQU9G8Cu)sQdjsi+*WFOf zF(9CWqEqb6=+{u`N_k2SsypZ1*$D^LQuU8vJdW8S=#EvZz5Im!T5KRM( z(N#_SW1;#}crq&)*_b11?E5;wY)5V3xpb>t9hnHku-ZKIT6^JTtG+os3lvBNZ>{3I z2VI!w;`?ZZZPYCTG*CRY^e1t>jVDUWBz}iZ@DabNG+)qIRan_l+TTc7T>c`Dv^7h5 zuyt^)^u9h~IRGKt_uOAG3HopHQjGG^s zo}BrMlvjeocdiF}ox@6QP$nY4cc9iI(B*O4wnx`K`i!$8#qzH_u8ZODb6SsSq6Nbv zF31b6*{FKVwo(_~9IbDahAvlI>12^p4L6}k1oH@jC*r zDt;BDp7AxUL4q=Nt=F3m2lB}b>lcDfoOa7>%MY=t)=*jxO&*GVb}&M83ymm~!-l-9 z0*yIKv9wsmjXHvAF7+@_x{!@6groMSC3}0r&L&7O;kiS^yukZW9;f!fApH3@VK+H* zT7xE7FUxpqTow`q`-UaULB)ZI8(7ajmWyz3o^O+rwIVnoN4knS|5>kmQ_sFUx&EwD z%rQJ1P97Vo%1SY`fxdHGq`_xh6LrN&8~JCKhdxu7gsbe`lZIKr7J=Ph)8K-*m}~70 z@$B+M_mG?ZhiyMkR#}>7I!vFuhq@~E?k3yjc^dc1f(S1^Khz*YBgFzu2%fy`A%{%f zr01=daU$Oz8*E9jm_MDH_B^es*3QfXvF%Mu^cG6#lKJD@jXXA!)*}4ZjfdUIr~yI_ zDSL)XhN|=s0+Gy=FAP513Qi@3138nC8R$D@Wgq+!=aYNRT#2^w$LS-GdJx{sCz(#( z#qrytYv>TIPE!!b|LHUKiOshd&W$)($myCZXl>*sTl5K^nHrbQPDo*pjep~kTlKb8 zgFar=3V-Y^bzt9_Uhu)Eilt?08|}439n;%Q&6IumhgS0D(0B}b8Ax(?oK~^OIklN- zw}zRy{kqQuo;_ zR9w_Dc%Q>~6}iiJwcTh#I!A5vib-3^0ToFr(=E=W0u>w?nsxGGgY|gj_S9|+2gXMB zZpNCQ=R1XF?EDOZaimf4+&f`Zwapg<_!GF|jOb7n^2pBPEbw}thag%sW&c}k=NZ&Q z+x2lff&v0cAQTmlUZq4qssW{in=V~yLKgzk)te?Aq(kU6fD~yVK|rNRPpHywDS^-- zL8|bs@60{(e0e`SAKq^}vom|`UUTi)bN<)={B{K2+Buo`nvMC+c7=`wqeQ^#EOOMY zTcb~eN|}MVyHW95JsF?uupWe->G_BNt^N7ygQ7|6Pd(Vb-L`}aNNTgeB6P(@EBW7J zrk#!w$|S5bL~R}PvgU$jItaL|rY0fKg?*BGzk_^7e4&RvHX_a$?iSi9M~6lWGnQo@ zuNmu*LWk%~MDJL%>|HUR$^=xR?qIU_c4JG^x+Tx;eSqA0x{E6=LDd)@St?dk%1viA+&o9%Mt56`}J$`f=8KGF-yty!KVt{*sl>e0CS)(3Q8 ztze@Ovs@dex6aiO_G?4hGjjD#OzZn$`<;%LhBN6o98`mYTqRpol*4Pi z*He2n_~&Fk+ImZ-?#HF?_rH#ptg7iyK9NVPowDENA-n1UPiTMtsOXCqpk1A^pKOj?Z&CHqsDe*cx3@bz(8lOgUVO2IUvMqG5IQLa#|dHt1?X?h+zBtd55>QwgntlXEi?vI@P8R~&9|o++Gvi*&G&(vAnD@l=-@~=f zzM=<%Izd`{>yyQ{I_n~0&$%*dlNJ-}ka~+Y#U~z_+farayQ3c$IFD1XkgPBXc?Z1& zt6b3_-Uk-H-zmS*@B)(39E)oPxH8A@un5hb0a&Ewckw;=Q?Cl_?sV+hJ~$UGjq1ll zzG&sCoZ5~tAAzOVREZXc})BVSlxw`gBp=t3Lq9YS4MA}cMX8>1f zJU~d5M_rmarJBre60`DoBOdb{R$fUZ!py48bxB=@7@J-w#PbrsWjC^?pYykiK@qfIk()0~-9*>$r^*e3%c z`~tMK7Yh*vFkqDwn7yUd8?Cb;_R z+QyPg%K1n1%j_2omE2r)PABa35|Y~09%9?ooo5^qb8x+Wb;~B65&Pb#*yu~qjA=X$ zkwmrtx49>Mnk#LHX~0V+Gr+$cf+%()IC2u;>$C8{sKGb~cbBNyx4(^&lb%$%KVx}> ztXSqvmD&2`81LzpZ5q-$Giy*bel#RLukO_ebyYJTCU6moAS7PcW)>=|1SLD$mz`15@fcQTT@FIn|3_TO|bw zk^%w(BHWU4a>lEQG-7Ber?6$wY~yV}s41@GE)Xi`&LfYciS^)P&6XZuG_`=i8P!Yn z(;vbo_uYqd?Wpq@F>XTM(XhVHVNTX3<7E>;X(|?jmHN)GGB(f5Hg;aw5%}8Z8eu5%^9WX03RS3$j3G~+MQU4SWT~!tT8w0Bp==!Wh z2EF%n8Vip}cA1vX!HKxKaWG7hfZ{VDCq1#nXZcEBarH%lXRCb7ID7#bKQl?(mfw`M zbIbhMi#EnG|b6 z{o(!_dAZjlCdTZ7wsr-0@hFbGWlS?_@5$)D2{WLbb2GR# zy7jeC4y89Nh|Jw^`aFw91En`hU7-7Go6z|$>f_DcY<0jJD|i_`&_>W%NeLb^mzwQn z!4xe)kU|!LymaGse4F+vOopbw7<%hW>>KM<-W~@WADJlr`khJ9Myvyc5s$FE%T^G6o9*T?}?{bgIRs4~_;w%~z z>))ckbNj7_bFJshN2UAn59IiSME$XIw&R(!0`s(g>zgz~wm)8lD*e&Fj zLo|cs`_%asvcJIC!0ovd?f~x%Mkn$mQ~UqD3*41KE2ia&9_=h~-f!Uit|u+uN|(|~ z(O$$-jfUvvq?h9J;_ZZi+1g?!zU(>`DP~XxWMagm(8xJ!wgD(y_yuLtP$oq;Zc;pv zWXb^nTw6UjOK6|4z>`}GpkqHB0xKZ?`I?N{mUV%GYyM8}MNa(EC6LO9`bV~tHxHZy z8vL4d`(`sOyewr^{k6;+Ck$375%-xGX>o+yGs&wZ9%pbdlg7#Pq{OWB#7v+$&J~Z# z0AhuaKnkyNK2Fac1j^8Q>?rx(E8Eepe3$+dewRhhfzAXwbGk3J^|2(<4LU$o|2QXY z#ZN11*$;WbcF7&$Z*QZV?=iue82f|0!Dp1{8UolLw0ipwD6O^q!>GjEhY&89PfQ39ZDk-guVj{%BHypSNP6L%&(aqPa2i zn9Y9H5m-sM!#bTFB`I9ggd;pj(4WXkb)Q%BlQG&Gn{skJ*Fr%3dEMj z4(h~|3e<)?lOYhvC^CG+j{7tPxu z07>9Rc@FdY^dy#+j(?K zBJYrKYWe<-x6Cr@6~K~e;2qQtBcaJV2CNVJu;(b#3bGe7WpZpvl6gPU`m)@$&b@Ya zz$9AUb)t-FGb#&i<}pS_MIFa1%?#GbK(FFa^@ai|ua$NJTyN3e`#{o|bW z0*~#zNo(~0T5$XqR>{xhWQ8p*#qY{cOv4}LHQIfNX8!x0rBU-$wMyC;#`0{0isEz_ zwKfz}ZMJL44yeCMX$m8?-hW$~@=7txHoA3T{EZ>S(}#z--9S4%1~NAg_uu(w{`2el z|7VE-&>d|0+{a$RWjfGu-KG{2lge)u8zdBP9LtUxC{?r+Hr{>!yI~LkBgg!!R|qaJnx=msOaHh*lObJH$Ibk~~!? zl-G_m%yY#Ni68HcK2AoEUjRGb9+O-ZL0shu5C{<5o3J-(y+@2)X2dIyTYIZb!kR36 zVv%D3gOl~H3FDt>)Lh5 z2eghRVLcdrgmb1s1lYr{&955VISy=eb>Z;z)n;SWLw+v*@ch9y=8*Z^@ zCDc9Ie-fC!7cn&`{5!EcO zH*G+OXF8in@IBytf>6?NB&pi?k?W-q$Yt&H>RuCP6F|5qF%m$wBHIzxCZ|8`A zBv3BAsv}Hh9(^cXcTGrtC609!^dV0Sqx14SxiQsME1nLO&41YcqS0?UoWwarLv(b; z6MM}r9rc>>--&^9m8(Id^HKyshPrMgb85R4qyBWLPrd^MO7{L5CHvlCFSXm&wM@bh zy?ujqpIv$hY=&TI|Jw*9U#)C~xo(RJ;o&qF&~z5OOc^Cqt>>6rBGkt~I~mReEJxhT z%)4>_!!<1+Uo0gqtxM`JEDR6iR^0-2ay-;C{KEL|I2od279wM8SxNQ)J+v_@Aubhl zi#+d_+2gv;V2DEbf4J3Rac+X7)UCkSYT0+uB*kta{1fx!J0OXGM(nY{qmyT`K5cs- zk+`ihg>rmNYh>^@TmRGAmua4*^$q-RF)>#S-!Cp9CFi3@i~aiLC-LOS8*GooVJjP3 zgf^sGj#P21Uz7~U&Uu-mrBv%6S4Pg|dDgh|&P)2IRRHrr`(LC`Qwxh^VK<4J+Qr06ZjmDoE{=7XY)QcG3Kw0PS+(CDYN;u0NUuA+Y;&HQCwS zIXRbcZe{*BRV7FdF(j%iVRBmN!j*^x-$2+pn45?5`p$*Zl7l*yu1Y*;{SEEch*6ig ze$E)Cwz5?=V)W|r;rOaIwXgzUh6>t>d9*aGgrTyT+TGaE06J0O{=}l z)yLi$rAknq0O=ngjdPB$QB+j&nvhOsR;7?+*5%8yLdUJ;na6s{wocHyWZDC{vylZn zU+D4GuxFu}C<*z?T#QvQE2W~>KM4m62dD46d$-#Emh=kf@v6yed(IE8t)mspu3OVM zVrPR>XnuL#q_!Iqg%g=`Q~Gjpe?PSHj{YVi_p@ z`EP3`!A0?<(#y?>k0L3dVcLB1b^W$QjGhFMeBsLBrnjCbL$8FGP#G zoM(KkAkUN+Nx~gVEYSFZ`WBlNkFN@%rpl6Y5D9Kozy(Qi!Ud~!vZI{05b0!A5FOJ^ z&hPTY9P_k>n}4nm)}>nUfm0wwHJnRV3Jh&95^Np=XEU`qCPbXkO0(g+D9cEUAe9cq zNAg(~dZ>S<*=IT366l=D-0^d>TnM#HIcl1weOvYtYXCN*O%vMwi=TA}N~uQoyc>MR z2QgVz3@Rw4WXJ$tqXy$vkNx+>@p1sp>bLc#FJ^C{daBI;|3;%h&9Q$BB`n>nEM~X{ zg+fdQu6n&$+r#!m5hT0(jCQ%Z$9@+F|I(K`@kQ4ecNN)@B$?7Wwti12)M-O~>cP#= z5&hcgJu*x7@f!{J(^1l{&LX$aoiXX1;^5;@{JRXtRP!O0Iq&6vRN06pKg=7af@UZL zECWM3leFdE3YLSc8=kia1AHUfJjp|8G*QQ)HF!IK!gI+YeHiLRmiiTqlW)^q4rfK` zNm87$VYXV)CK;9BC#rp3yalM(i>^uOsL%I=B|yI!N(Wn+;8$=Gxsj_SNsfOcJ-YYI zRNMbu8_R$1CdF0wErtWEeZE@^A6!m7i009}wA*VlRh@I(e1DkuvHGDe0AIj`AAkNM z08sCnFl{GQZdI^n6ga?INsN8kmb*nzHmj&XH;qLcmA3kt0MvXxgshaT;_h;DviG`h z#>1sZ$T*Nr@LX1|Q#@aNa6Z+r{qSwn;-@zUw40lz2UfZM>ohmI~W-j3+4xp8D9s?t>m*u$gPv0?zTDa)emV#YELG8d~@T5 zeJcUph8drrU~ByjnM0AYzx`^5K70rm*??>+<+wU`=4O89=G)H@S+?^_d00-CpJmcjH-(Orbv=>zaCAzjfqB#1_FUFWo168fj|gi{qx%v;EhF^GYnKn}-Gj)qJ3d{{0X z5wD1UFL?ZlYN&ZpYkHqIo4nIT#(%el>WAg(;(oA_ga8Vz_u9UWM2*eitKhr7f;=l` z2%M%(#HJ3|A>BommpDbnlxK^C0>>@xGBuwTl6{U z4Y-fV47}+g#{hv&!uBPEf^M4fC1mH*#8_hf$FItskxI-uJa~b}T2Vy>bu!@%o?E zy@Cl0QeNl22z-U}wu?!5{RYRnfIwN<-<@`0m?YeOR|g4n%Isb(hAp0tSBp*|MRij9pObiM2~mMtVtO~`7bL64`A_dP63t>3WCmy3?hYWq(bMbLwbqGGfUC2+TS ziV+bJciS0GyA^unE5AO6Sm5jG>ef1^w>mC2rx*v`j_|B5bp!>$^y@4~h!@_UAC6@3 zPzZSb5%j*;ok&f6yYP3p#VaGo_x8+Up@h$E`{91|8C>xC+@!~f&2FX)mriMX*o*>h4-XGdw_`y^iw%`kVl}{ZReLie&U3?= zOP@AkMYJjm=3Bgu$%TAXZrX3wBM%oFp2vcoB;+#$ypD2$o}jb)Fc=If@-s2<)9-tD zX{DOTx5?W-X&e**7jKxqRG*bMtfUJE+_n0gtEsCqDEFDN_0dSuJtl56*4EY@Ew|9o z(ZR&6AHwOff5gN%Hm3riEBE;>*8X^Y_ESSgO6Mop=#MTSF&l^}U)=J(+k;4m zi_=elm9p;o2#q<}WPC5-mnS{g85t8AwcJ^sYDHeMyUq%+PE zhd#^cxDBblkwb1tNWjG}sg=)-I-0AZcIb>1d6E%%1Wv)=yu7@8f3YWlOE1Nc3$1fl zfsJ29QHU5pU;(#VDT$-CB;If+B-{V&H?Wk_ZG?S?Y6%DlQz#|ENcr7=NX3xyxvmCW zPq+lf#$wmmS@)C)qbn*Guvl7?cu@S z)=tImi)rHeWHrLd%8J6d(9PeFZ4$&Uovl~By`LC&L~b{6d3bn+tQj}Uh0#$!M?TE2 zc1ubahyJBR{}kAJH}88fys*Hd+3w@pKW-HUO;kAHe;UfM(iKxbej$D{#SSd7+N>-? zT&5yox0{nS_mEKqwKs~C^3y!isqQJ=6-Nqa0$|z1%c=al?;PN;FrQg*{c7hmaWp$$ z+gj>8TGtlOL*e@a4!Gb)?%dzWC_F-n!@NcQZE3M-U`HhW@fsc2(0R$irvyF?& zt%723v0X8|)}3$Hopd@pQN`Ui+O#-ajDykRUy9mJ-QC|WHhM15s4TbnUfMP*Rt5g; zL^y|X!{4Y6sukRZ$-m{W#PHB~y4z=MZnJ^W`m(r(Sm?sd#$O4YC#!@j_Ek3Ri5VXM z`t=LES}Bg-*3_mn9Uv}?TY>(P!$wz}CPJ6I!CWdbBbj^&cSuw5V3e=7yDM-LLyev%AYFmPC5EYKpi_th zX8I!6V*h$n)u@_$B|6j#hNupNcp^=SS=#5SK~XS?r%w20BnEKZOMbGaTm5u>H z`^uIy2~=^j=3Bb@llPx-ebeXIWdc?%_h;4jO%508{wU^ts>!^l$@)Z9Wudp)9zc}w z+nik=Jh3O|hT6eWI)*rb;mm3`f|kyY4@5Da{1g*)1gQSfM2dYLvlWI!AW(5Z5|cHs zbV*Q0%95u+Ad|4td4&J1#`M3@!~V}4T7rZ$u8<{U#qL!-+?T@v@YqFhX(% zTt62K-aa1_d0zWYk*Xj0L<>>QX?I-a_ia~T(ycZRpVn}&Z$*x*?%VvG(9_+$i_#Y@ zo@bK&J89(roZcg_;FU#+QsiouYmub&IxX?5C1x7&W0nBO%Sz!^*7;wCi`chj! zf4jf0@AmGF+m7}zVXnoC6=}SG!OLHV{5}&K=6~FFy|U=k@pw8wA#(nQ!?4*MdJQ`` zIJiG*aXMY^18QqlLBR$RwqR!}4mS{KYU+@u`&r{4p@)+mPMI!g+~P#o{$;@Zl>_e@ zBquOGClDyxKzl3X18O|)bcx8*&Bh)K!jO^e3x}c;vXmKjWRq*^=y*RrUc)ALRoxqa zF5}d8sRbl=N8sZ(@wFr-?U^!N4%6Nr*Q-G}5xqujzG)3574j)80YE3Zm~Q<*YG-)ORd0xde1Hw33n%AWzF#hQ4l>0nPN}Z&wsU z=w9Q%@87>4(0ze2tdzwsS;r9_bhGx|Jy(>8nBDxP5UfBt7FZTJ!^zAA%alUBLS_8T9SZs$b!+L*f^OEw>5p90ZT!cpCH$^Mo+p#KBaYLj)DTuz1$~?! z1JPdP3vCTIOF5W9ydr|RN6UafSzKJa-kk^u47gCh#l_vrF>Y{N-o1ogi=O{c7QX!! z*kN0j9%D$WlsO2hjoz$7W-iO!bGljYiwptk0-x*qM>|K}wG5|rT|lr{Wai|oiag(r z0r8sn+wuJ9G=w;msBIi@8G&E54F;ru0H!PH zHJ}+z27rgx_WwYmv};T#l`ds z*kr=~bMUirM{=Q|uCC8Ri3}I(Q-+ppr<=S^?%)cYt3xU9bj6*#Q=Kn+OP3uDH724{xPd$MfxM1YVR zzFe944;Fww;r_y8WdJXobJ?RPCi)iTkR0A77hT%qoL_j;y9GB&;ged5wn!xrnHYv( zk%_ogfj63lqsEOcL@N>6e7(>!j^w+_JC>Ze7i&^dR9b324YP5P9=?6iW^ljo*t#`E zB!OR}yy#+D8Hjxe_dL4ka!XM@Tx~hOxUm(u7p_Z7-Dii@Z2!q45kd9!8R2<> zh;W!k6uekMgP^D@aVl0sv&`K9uXkLQ+j3~LK?&*d50T@JlljE6;(xBl|FN*1i_9RS zr_GbPLein<)zo@!M_Oh3U4)zoBMwwj<(Lv5A74Yh9cYn>@l!~7B{S6si61n~(s_cr z;~Z5sxt?mHEU4=o;f^9nlhKOc_L`=Y?$j%$?e9DWfw&p7oD0l#cC$w{W5NYUKbkjc zuk(8$8?P2@MpD^&k|l+%=FFxj^LpIi(i8hqJjFHkf#*_Y>4AB~Jw&!8(a&~fxg=Iv zIUK@;W{1ne(|78nFf9k+fu&mF3QrDOrNEr~p*wZ%`d0m`UW5f1`6oWLTfxAGn_|0N zAe1c9N=jJM@9<*WiGQ+x#j1irr7Iu0*O6*cHuN@ezSf%`WrRF=njDiCq8!$=vt$Dvvxe%Z$~pzU#%& z(jHaY+-y>yxz#Exn@fX?PZc&$m(rG7vtO_dhe2YWUGK!l0*{2CuF1Yv2TN68xXkY@ zVF^DH{T0JQvX+Hr8lF#;O}n;MdABGR61w{D$XI zulo4$FKgM7$q^r4O~ibYQqe9MC z&x#4n*M|o+H%X4@B6?;HIFfLNE{-(2I|sw0H`$t8ELTOh5`LJ@rdp3Vk0j@ACHo`7 z#_`p1cShz1UyMxe6PggtU9o5E;@>JcC_GpCZOX4oU%3i8WU3_A718tmEsZ@a8H1*< z@&#Tk?In^;dacF=Jh>-9GoLs9&SXZ3Aux$xI(wAdT7EvuB-2!|%O(7&WUB6!?U}6M z4(m{c>t@7Gg7j1c{5m8FT{qHZq+TgiNd~CdD#Iu`wg%%O#2C4mnMcFmiZ=jCfTBRi zD{ha#iW$3qC@-P=LUIt83#pY2e}XhcfIG0l@f@}1C%ha$|@JHw< zY&S{}rogi#jvf)XAgFJtx7->wVehe&99<>&O=(W8ZnXBL5ZR)#AR<}J+|44YbyYo@ zHUEWO61A{x{GfR?5-QgC+ItVBy+U1Fx+D1A1x(pV=haF8SUG1D)VZ8rj<|3(+LR$3 zZto+Jaj54xj|l=jbzbJ?%{vQO1nVOm-@W*6A>scSgY{q0#FyM|83Dil_K$Y78AQ(Ud zwViaMAGe+>

    5kVxUdOAZhfwLx_GCobFchtQ$kv@3@A^9X_QRh% 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 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-unset.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-unset.png index 0a55c6a589b0d094ae185d9c3c1534ddbd14eb15..337ab6f498ae4ce0fbd72aa7662838fdbef87749 100644 GIT binary patch literal 26309 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 J$~0}B{} Date: Thu, 29 Oct 2026 10:56:47 -0700 Subject: [PATCH 29/42] test(ui): update the appearance consumers configured-state baselines (with ChatRow) --- .../appearance-consumers-dark-set.png | Bin 36323 -> 42503 bytes ...ance-consumers-high-contrast-light-set.png | Bin 35232 -> 41378 bytes ...appearance-consumers-high-contrast-set.png | Bin 34494 -> 40690 bytes .../appearance-consumers-light-set.png | Bin 36291 -> 42423 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-dark-set.png index 9a9b991d4c0d70685b476d560122921f1d911754..ae21d756a25b860e214ecbc009a175cf26142551 100644 GIT binary patch literal 42503 zcmd43byQqk*C&V+PBBqU zJ2Smj%j#a=nrT-4sZf`?bN_9{iY0BpoMCs4R}crlDVHzKX&%EN_`+QTVf$ zb-TUvy_ROGMO%_dQl*8K-fP7v_HO*w>=G!6kvj0W$jINu@fp+iqx&6AtW~>RNXYkX zG>HfAq-2eF3uZwh>UBbeTW+x_&`=TlM>=yrQs-xG+NxHiWFn~9tkwAJ{m>B~0 z$8wMvFS9IZ@>)>`cprbGML0(aP0slqMPk1AQy(G$3qtUtl}zHGgICg)aDkWE%WGSn zFuAwBw2v?RUX}`>jyt>U%&^G7AQDj20nQ#xmN7yJ0`LN3fKwzI4ujC?$YrAk&_XcK zxxq2wbpDLc02uR=G4R)sf+1i`;6YyQ#NI zXFIcObaX3w4NImQ$iKX9kNVfv)+iXqCJPlQ*!BGu6@uYMcNa^cp`ly>)p!gt8k(AW zOYK>B5IQyTr(;P;Nur{nCMG7Akh@&x%!R{#xnow((`KQ` zndwdX*ofEJwEBvA*@yPbRJecp zRj%72x#M}VV#fmv#rW*rd-HW7p69p6KiK9Ae0+Q&iCI>OXnG@`TMno343Lr&^IM8y z`?l1W4#V9!!5t~n&0r1*_r5ugj*c!bD+@x4-ooX`)=MM#;Dy)L&y?kLycR1q|MMq{ z=08$=*iwh%vNXN9*c80^MMd32-r#i4>JKlLe3O%s;IKN!eASZn_Vx-r3iSHeG;wXo z?E4gOG6(GsZT2f&;0C~HLwlZxM(rlw3*QwH z9$}?kD>;E|EcM<@IR!VK|B28+OP~N6F0~Y)u=N}}CMIUkcW7VEfYofp-N~p}HQ~ot z@7BXEOvz9jX(|{IQLriGHP)|{24S~D{oOE&CdqhI*mK$6G_RkMcdL4ig_V<oQfs`22j6QkLkv0JsE`Zy5Sy`J;#fT}H$n zZo9dCxbIOR5L)^^I`iaXlYrlxiYOrgaO_UD?fJSFWd@=gPVXzTY0IFwc!!*U`hj!M zuiSf-lvE!$`MD{VOWqc_IdAx{cUfv2g5sKrDl-P1$^ZWQnsafeVg1 zEy+GI>fr3$yHv!pRbKFGrSOZd8r@~2Q@sW@e%fTC{g^SlH`Dbjj?N%O97E zCE@Tm()gF{^!K*E8{?-Dq!D8SrV+{M=lF%`r$maKt2EV+y)Z+>nsUfbXFh#5j-m~F z4@X8J$992EGGjNLj7Nl8&ejpv{_3zt(mTjr<00vk^KbRLuRx>mf*EF{rw>JmH{8V# z;Vny+xDz1I3EcbK>@{d=YI<1dwt4;R;N7`K666hQd}qfPqb_ugtedT@YR+AT6;wSh zgMa~{JNf#q)Y5kHu&VckdPT?AzHsrkg=V9f#SO6DZpc!-4aEnu+Z+iymNrBQm{e)@ z3R1M&US6!|#EAcS4iko9&Wo`)wY@`xIT9$k0mD{BZnL83T-jN8&yvp#_FbsG01Tfu z+Y?569g?0iiL1v|iW8LceuL8h5AVdGl$e>V>s=cKEM3Htm>P2sjo@O@lkK;qk7yKL z{?NdHxt|j~`@>u0$taT^#N33jzY&5_7BaSRy$Z1Mv=Fy3=-9IL*1~O=0^VHL#TXS* z*{>cMEX-(8@9SC@oZotGZSSrcH>tUAbKaMfl<-`nWMp7>lWZeDbczSrB9OL?$vUwg z2PR*=`4P_`yIm+j!)X0G&A*DHr?+>dWBgrl1_3!ah9t5`(7b>-T6QJ=iNniz{=3Vg zwaZc}?@n&%YQx@$hnw~Xt}3A^n=QCha-j>3C6ttZ3q6P_#zGCtzQMUadO0Dd*AMGZ z%xBMqn7NFYxju7D_=zxF5MlP^|Fr zK>n-GRk^XTxE?&Mt*ztc>{UW)q0G$OP(8O56hgM=L@DwEV)@OIXAlzgeZ;+v|c5-@lk9WmPV&e+QPNxI;x!^^eU?z=Iqthfc~NMgk- z(F}{*py^We9jzhXhdVy_2H&DvpsyPw=V(;yL1*?29#WoUnQ6Jcu)RRGEc>wgXGlaW z^T)x2XFD_HlFROA+wU~E<+{lsgfw(}R+X*i38;nPC0Ax7b%$%eD5TA1Rs=5DeEY9lN#e_%6ed@82!_im*tUr2=1B(LIF4 zkJlGFKbs=^(mRo62kyQJ0Eebj2W)h)NdOMT2zzC;WNL=C%sR4kC+LyEyORY#~u>?8a^k@lxdOeh^RSK1uM-xdp6u{o5w zw!4cp+dR|R1rVoA;(3*n6_v+txj!G>y}X3yN1U-KWi(v(e+w)yNm!y#g~yqm+IEVS zJNu!5$NURqMB=UcBUF_#@I|J2o)NKqvuCC#M&1wXsH=~-E$XY;G_BI<%o31vJoq=RC7b;~{+=c(8lMFHU<*g`_vRzyHUA1y2;9aiCfagqB z@3t2bn~A>LGf%1{eAF{hAg?JouDuYYo^fcQ#zdEkPeVh~GjeHVV&Z&v?aXM6ibEOp z)$QT_u8e1_NQtJ_Zqa=+13>g@)6KS<{q9BV@4M*`^AE* zGea{#h4*K(A3y;#9*!t}dw8o}bQb@$=!9NOw}!7SppLu@d837Qn9*?9tpDWQklH=y z$~=YJ)BkZk3F0RP1FlQn7pId-OQ5RY;o-?tZ0+x}CjYQ%oObXY6xZUrzHPN<-9Y4-TBeda=To+!D%zk#1)_` zkLhm!mN9cAm;oS#d~DQsN{*Ul$}DLt%Ek2=-S6_!jp1#Y$3E#>6Kc1MZ^$wQFGZRk zO1tEC^l~QQmY5CiuKH(NoYLzg>?fxMKfEN)t94kJUKb_PyR*%%M)E%2{V8^TX|(_Q zTMF;Xu`tNW(H*F@hmszrTSowU!#};R&?(`$7j)eh_B^+?eq_eC=`=o<2D25qx2I-V z-oz9Xm~~oJ`iQEzi4oext_O>AJoSA=C1qu|TY0e~=>pvkK{7A3YQsKYAO_?cy56eR ze#%tgD^B{i7T~^-Dof){h^|aWBk=LhPGx(@M5mItTQIs0rh|h6jn^S!P>98RZ%$4Q zTk9#l4pp1!b7tmCaFUY~6Hd5}t3Ba!(0ae!6@Bp0HrWbs4ZV>hk~AFArvRz}T;Fv% zmLvJW>quI3c(K*<$aVVbJFvK}!z@u`T&URMYR^;pg73dGWszoOHNCc*$bZFUIyAN* zG=wJNJ0qS32$~VzzKB9{a&n&FAA;;Oopv9QG)=aaL!@^4^B4~*t|gBh79X4ur27iZ znhnr>j8P@z&Hzge2@SPdXiCfq#6;E`s~Ht7RrHhQ_f|GjSUzZS-qAPdh&4^aL;ze- zjII6l9}W`}Vl@+i5)#LkbAAzVGBU%t80e)|AzPNpEsajrV#$+|YvqL{T8SwN9U6iKq5sWR`fEkCiK9=!p5z8>DihR(rky#KRyK_j-iHgO` z3;Z!p!DW*%ZwGGz{FI){ekLL^QiUl;c>Hhg=y`voLcv;2Z{+$}Z_BwYXJQ z34Xi@ym2(h1)&oiyegOH=jULpQSfJLskUDS3S!mmR<_?q+@Nhb%~csNi&IirIwar^ z5;u?$-gfvS4|Hse=Q-r92CeF=D8f0wEgfmxG@RGevH$7QCuKk??5kC#zcn@*o0+XK z`8L&&;No&3DE1pg=N9#$;b93>OWE>(+n<=sxdJP(o5y%rU=@Y2t!P_5uzJH6lYG&)vvvO>ishoBuC zu5_ClVbh3G7DNwZFWTB0RSfaUbPJ*5-7K@U2;WABhfBahJ% z$_o2}goG4Fx*b~+7RUbL#m@2ik2nEHN*wCKtvDV`b)~SE1)HZ+rrzdPNZ7$(;)^++ zGKwvdeMcJ)3JMBl(Nn^!epTjYE$sY7^AKi#AQ;eG2Vm194*uyxqbV!prVTFscz?6> zV8{mZ?g<>@(J6u14scsOBYjz{waPO!FCc0*LYXfm0x1`8*(L2kaeksUnsQ6ZEK-YA zB^%Vl4DmVeSj3#HrM4`TxDvjV6}p*Jk-kbH?+w+h148G8ilKZ0Jv0Zd9?z(n0%xhludW%C+D#=?o;Zk*wdL zCQ?4_HV5CMR2jdj>g=?A-caf)q;C&3RBsd!HcK)kDW;McN#hnzb2J>ikma%ofm~FV zXm#e!<`-=QH6~>IdbrE{e1#)fIE>}Q%QF@z&LG&ij)>SP9k!$6xr(Jfl=!pHyiq)F zmVys~Mi|cLd=T9v{vXSk{o}C&sTX>ith8WAIpy#K!-?$)}RX-YV3{_(|%gX=hlVPOMl; zv_z?{C+C_@r|I_TPkiGFXen-$W!w1hLzu+9T6wB>p>V}!x@+IN6G#tFgSM{1>rUba{^3Dl#75@^k|Vdjfmitnpk@ch_qDIwVd0d>854V&zz zF`QEr^WSM`i8&aSY4~NTDuqr!Eo~CR-s~3#mtI|6{nlG6aFKor@fKpJksc42ajr*c zDejD%{cf?716A(pjt|9LZv=Cl+kAT8_3#};^;|ldVd>~?OSkoms zc6MEmO7ag+5^@*zaFP^sOt(ox?T;~`<+-v-O6muWo<5o9h9=H?aO1W8#qjm4p_kM0 zbS_&HuXN(mzJHWad)P7fQGvGqsJQ97P!xGvktT2Y0ze&xXBl&JX^JL)AD092s4T zAog;NY9zq`QZfk|Tc2Vk^4&P=_k6|Cmwle)0^A5o!%zuQv2(9d7>Y{9;pBY5S|%BfNF)mitQ*5KdL;sK=j!FTrQ zylc-HKfUgycUJ7sEiKlPxP!$;l*mFOQV5yG)>oeH*y2jFvedDw$Sqs2cR|Tn$ISJ+ zR;EWJF2jW&ZJ~(%GuY9Z&Ky-4Er}HQj)Pel zz6OMLG-x+i{|wlg@H?mDfUAc^R)nk6{0ug&tfxY7kO~NiMucyn(RBR$sp-l{LpW>A zJXMEMc%!&l&<;^H6 zA>xcuev%X!>`+>AA}-c)Vlv?h$u+gBm_7UJU#o;f&)*=VXW1|Zy|W0K zMIH1pqpkcZF1>0>SAlcrPN#1FyrLHVlvq=(oEBfcx8=Ql|JX^FCjH)5tqdgaQM!k(NFbSbQy4W8;2jnxwgc;Tns4!S+ud?rt8y=pW@t8Vy7xZ)EJ$>DAD04cIeLz@8V(7TQ z4TSMqfHJS@k+$`N_V`H-`ShK#+3RMJmpsO5yzh8O&7aa5hmateVc8P3qv#~T%=!5E zkT+3+f9J+pl{%NJtZBb1_*q5Wv#Yh;Yxz|%LU49ql$A*6!eR2F>s!|?=SWv?`DfF% zfx^fyfsNb`S|~xyuoF+`m9>xgTlDKf=r1bPlRp}&Se*C%5*n>EkMo{nx714wyInT0 zM2o6_N=`p!4$qB$JGm^WfW60iIPh}5W~;g1CVa6R0C@&1*{N>6(9tZhQEp_4DwNar zbl5{u=5dHLFp&uJ@9?P<#<+A*Zx0}N>!%!+rt>=>$s2qc$`tXODbtJyPL*3nL z>&YKv`o^%sNXeul`FG2pnuq8Wzh+AxGTt}Z93rEk6#h7$ZgKbW zSSd?}T`!)@HD}CVpiFbkQ>Yn5iCQdMP(#%uOEi^Xo6mjzQhc~AP&NkF$=0nu`0rE; zr^AQ5eu__B^OV>n1LM)C>tC<*`MB{4S=2US#qNuprJXQV>b>^AZC;9_Q~YdnU})b0 z*b>MIIWU^s+|-Aoewwu+f2||n)QC$9sw2}&Fyp+L01WtQo@hQajhIjD>-$3Yd)Pgv z;Hmvm*KWl(9yL_p?0nCaj=YqWR!*kf4^ds?m8mLm=BmcbU*W-f-2{{oR55QfE;C>y zK004_XS1n&9wE(0n2VPz;+H@w5K5R}h!yVQzRMlRjPEO5nJ`M@!Y3r;2Kt+>R3{Ig zDi`*=B=h;Rw}lu6M^ z6&Z{5y{7Z|ad8%RJrP|~12#*tme)7WRdKDC7%~KSPk+t^)F{y`_zJqc^tCAdnA>)h zu9$gsSay}8ppuf|PPdx=4U5W%9S};c+CT)JQ6X;H$l{Ajw1zR#{<{)BB!3HPUdc7W z?WnoIfnoRzaInU^rior#qZOW1=r*68?uRpFx^3lz0=F_PGgEJ8=F%(yPi|&+BY>H~ zWg|-mJ`m21Es`2i*Da@i4=2ufiHh1min`9dh9~)NEdbrI?{Z9AzPz9arH;JI63R+g zQ^8RF0-KzSz1cF;u=`M{HBbMFRYgxyZvv;Pp_POzUU0q!*EyAYsr(HhC+@qK` z(cd_KA;40Tu5u$5FL_xG3EV5Y-TsiDn&zHhS93iOmaw*9k&z1cLFzp1=`hb;ESeq99~?ov9Ku0%a=M^fG`O7_XYeUC-*}G8nrFl{o8=c4A?QZ zVNaN!pP$R#yg|(Cf&iI=`MMn-h4Fr5P!hYVt*LP=k2D=lLm4+iS_8&%RBWs-&>yXI zfovPE4`KsCuKUIiiQnb5RpOEvA3$vavXiW|bn8(c#rN;ufdPCeU_1~9vH^QQExKKe zWE=ePV`pIml)KXnTB%-C->Y>J#IIa_+zbJxKsa}v>_Unjn4O$-JX-CYuNO9cA=3?1 zsSltonPs}0o^4MLNxfuY$@1L)c6)mZgu`u??V0i~b#=~`mX_tL5y8RIvD6|TKYj#a zN~%NSw{JNZ-#pGN%jMmd3W0}#R;>2C?gUSCry!_&yw&q!aPT!hMHDSG*9665cdpu= z7sLo!wK8UE%tk9dwEO)0$D}(1J5Yn`twy6gothg^)0)zt>(Yt{-+H(=WMyP*=WAaz z6IKfk#f4IPgf(bpkAr0y9vEP+O8$?aL7cwAhh`V-7zmQfo@y=f#z;nF#<5sV3yt^b zcq*6KWmd63_Bilq)_kuoFIzwu0mLOz-n@GCn5!U@fVqn7fy(3ju1vuFZ$a{#OyMga zq0J^DbS->y+|16-W{{0x&qK$-$>cN{yuZ6~HfeoZ^yX1TG$xsE0M`DaUj#g>lSfFw z+;F0 z27g;G7JnSh-rvkljb-z zon(1zKdaWbU3$1D`GmH!_RFpv^twlh8*8O+0-zkYeJs%G4wofTDA+Z!Q^tM+!)mH7 z&mS2LZlHplkdV-^G}q$J^}e6GozTHUM~8BV?9>q+k4MO$bud@WAPBdz#rWAl-?*oN z@&(?XUBZGIKs*10g>g*TET}p}1QM5-Il{dU;fev7j%x5UfyNx3+55ZQ_W@j0B4T38 z&1^LMdbTd(LKSU=oxWrB3LS~XF?G$^m}Q~n#zutiAY8!kf-|c4Si$wJB)W&V5TB{X*($YRi>!#%iJ~v^Uq+^e!VK zBQqJePo<3z{cH9WM6rpFeB%ki{;@^M4|Rg;S?wX*?l&J)%>X|cBV2Y2nWt;NJF3Gzfh(r}Jp?NV~)0)21VWEvKZGCXU?3s8dYupb| zG>ojkZ8ELhv(uc(e>^cN)*Wz2mQ$hje46TWfAi?`#E9v5U$-r2H8L{tN}QXAM^~Hu z$B*;C;7;nYeY{-^iaLIZE5;=zqU5!k_PJHLPSG?uUd~6-hBc=X6POPW3;zZ&mX0d% z(4e56zP=eDW76Ymkhw831jYbQGCi%dU)jYI%rcwzRI(@Ca$_~FN2}5{NX0CxtGT(k zO)e2O_a*)oloVTM-MC^=wvuH;SY=^-eGv!rB*^=V`pW!i)2jDRo0@XOTCEe zWso1J$y zHaA^?!mj0NW@U8)O2Kf3kh&0>&j84&j5CU}J)Jy#m#aGN-9!0lcpD*x%VoCmgVE1&8n`(*@ePgvs=fhh zNI$Ru?$@OoG+<10i^Tp)3=m!{oK9e?@LEGwAi)924zAa$em zq)%Av6-??^VK0Qdjiqbo^z;+}J&D*cdDN$^AR?ETNaO>r8oNSmM(}nxvmNZ~D{MuT z(;hB>eF$TeatF{;`4&j@85U)mK#r2kuKUhwJvRn?v7T>UrxEXfb47*xJiGu!`=Vd%3ahetvN88~Vgb$J6reJybF9TOsJo|6tbI_6gS5t@o{l@)2h${Xk zA2d-2ng4)n1;G!8Xvcjw-nGruZm{LIEK$=^M*@6TOiXM>rsU%A7xm1{OrC74i-Utf zP?d!c(%$;|Ss^NLDQA>vhv(oRyky1P*473haND4KT8TuFav;f;x9VC^cLBa}+=aLeaOoIosKZNa5t_YBnqfvPqzjmjEEZ1)r;>@^3q6yBQoDWals*fX#f&&P-u9 zfbZaMf#6gtcm{s{{CPV%;|7hEI5@;MI`8rqHwvt%sEDGq9CLvP0-c?claq<5U+!Oc zWxw@84>?{QJRJ^vU8f)su>T@xyRmZnwZ1X+DW~5CuS>*L8QHgw>#x1MTHrbCj2t+> zzkd%W3k?oN>8b@C#4xvln_q8@&%AL?#da>OpunVjXQr-pru$$lC(yrU$*%>mS|e%# zbS1NB1eeeI>;AknE|zmyojj;Yfq3OGJSzfmBthqGLMke6kYnv(XsiQI7<7&dQxAw`;69;L0Zyhf77v`lK`vC^{l_!gPZ)Re$4!l68 zjUh56rO|h#?~k}Zg3jtz7hG?E>ogq?vb@hVt*v)Kt0#V`;n%kT%1JeewLO4Fz?hUq zx|K4iv6y63z@-+xOjOtFOaj)IozGdF)ofu=(PIj0-4}q``9NETb)@Z3C9Nq=Y4ZFn_ z%~{l)=Pvg}a!mi3ETjI87XZu+=5pNa%w51_mpsL$wZvfIb zPoF+T9jWwhaXwh2Dt(Oi&2H9OOkQpq{9lN(rw7<4ZZ^94D-5MQ0rZe|GbjpVkNzm3IGU*B)RA2p#6i6&QRqsh_+-8b{0h9%k;(3^6(Hn)u|!x zlc2+GA|{4VHM?!3nq4B%X~mt##Kd^;xmf+l38fC8w_a$fYiaTNGY}6Vr}NqkjAQG# zqL+SajfaPa-J!T^AyT2Qw6wHrZCTZ<0gP;?|ASyq%yP4%1 zGlS`QD!qG((0?5ZkKOByNSE11tn$FAW>?Gb0BI2)i-G*xpyGD0L+jd zAmy5U9BAFi*U!_TPWQO3G$gnIlORMbnS4a@my44#1cyq{>+n{9dXP`OAgH5 z*#HSG>>c={Vo-i`X+2YOKThP{Ks;mV!Dm&<|tvX2f;3^Oe)!nn7Z8lf*{P)JDb zVET=~?X{8rs3BaFavm84zFXr}o6+Lnnl&V9jV% z8=|aA=p@WT#u#)i8U;9LI(d9^P9k9|tLNfg{*e@}RJK?>-{#0Ge0mtopPe8jq@;vd z>=At+Amwa)Ckos(kTyVeCG@Z!yO&muBB~Ash?Y2l-Tl~jfa9x@bl32oe`^5)NiHyy zRg>S=jh*(*$Bwijbu%&=m=S>mw@T))_dPC`sGNU@26Lka-LWW<&cm)6Eplj~OZH-U z3EP%Gx{EtOByDwTOxzzIWKCIecSLhc{LJwRNC*g!sX|>SNd1kn=TiHcI}G4tbTV^4 z3gnYvwe+E0hqi7d)Ga9fbjK%$^*q6(5nDcygEk~$NsL#mKTvGxEapAEwQC{?!9q3eiw&^ZJ={o?YXRib# zJ^lL5_~UYiemKEA(YpHEu#F-XD7Tg|AO+)ks*Ni-R$6yo(QmPX zo|CZY{qcp<05d%X;q?~;iKO=__M^+F9jJ8_p)Mym#N0R+H2|+{FpQZNA~^e|_6h&zJ3Cp}Fs3EPiXn3Hy*h6XHaQsrTJ)r4)jUW+yfG99HgUzh+ievPsdb;EN5S zydz(g9bo243q-@UEK>2zfmH2iy@lImlZ^2zNWQmc&BmOgB7ZT@4dWy%JZB=uXp%o; z*V*M)Wo9!DW+U*ML?haW9XV7LxkPXQSqf%*9~>uwvrzx0nG|`XYOcy%g|!bWQWX4i zS`xo-rg>?oxQ0;z@h1~iYQI-$F1*G;zjRAQbKt(;eorwk*_R6U8-0+1_<84;ngk)3 zV^VYPi~ObzbGR)1d_m7nP^~)L(-=9%K7}cedtl+aiXoFn#EBNFB{V6{ zq*1=r_nMWJ6)IiFS7nRjvrE!d0RjYcw^9h08Pd)H6hvr|VOWBZL^}~JFkbqRV5_J& zY-g-8rF_|YJeL)jU@xvb32i;T(3ZFyjFJ~3E$VK~w+j^+B|DlsGcpJ(Uv1rIdhDya zW8BVvnmrcYOX)ZxYf7BJ8Fr2qHIj4>4eS8{yVJb%nt%RLw)ObN^UO{mFVO?dYMUQc zmg_0f&Dqr!H=XvqcGAOzOM$e|0)6^7KYSM?u*mWFSh41)m{YYfh;y$jFp;8X=#jel zmb~7&GXBBBlO67f(;A2{U@4yF-|%k;lP6=*;Wna+Z1lu~O}8j*OS_U(DQjSdhenTZ zi*im%dBHGyM#8RhT%kX!-kxsLss<{o6@Im13mdFP89{LI71D3LT3|Jw-VUhF@0WjWF9DCRNOG9!dPrK_NKoxS2}n^NlluaKpE+bbsD)I z0ZH$Pj6VYhrDf3KA@QlD^4duscZOS;!+R3EE3HvKP6=_JoHTmWfO?e$>yo%|Sx8Li^r)iqB2WkE0g{Q83rvqU?{lp1aBQ z>EC%H?iMv%^CMR56lyM0tTZ;z-r2>93k}@4gu=GQEf8;d#mQT9oNtwPv`Wc}#aP+7 z>tXo}0Rj%I5QZR$(u-`By}Y~P(ho}6Gv~Ebv<&K2nEYY<=>;|)YL3V}B8>C5Ism`H z(lvHVqBcu}5R@21VeGw5xP81$?JFyrT1)?bPKYrocgOGuao+#&oq64jBLTX&_jXCq zasllq5GJHC$7KXdM?NCl6bx}N({8BT(3$8J~_78x~lnX#@tFy50>~NP| zaowAD23WH(cPzDxWYAn{!ZRqB&OiuhovkP|rY`lS(vt6bPqW zTykRP_A--9sWd(!qua{Z4Q68qdj(uCiy6ya_QE zZx{lKVARi-WqtrO0I});=ssrTWWf%I$m)F9gk(l_bKh=Q5G6D&W$h1E}Z}QtYk=fu zQKaJm7zhzjBJ{20S5WHy3K`(fq#JjDSGkS(W@mZDXAVLxte&xUL(!oUo%-! z;YrmJ?u}^%5mPq5kkIkdz|UYAlFAmfuQr&QK8sQU?6=CqDTZvzu8e3dxv~1H6SYj* z;*icf0{efBQnF{nyI?E300R=?<-~+6*V>WE$xpqc`M==4tFjDDPrAc zVN2M;>6#>mmG+%mdn6gP19aP@h3+H7G8nwJZbHRU<0Qkg1VJ$I$-N3<^8oYGEsR=@ z>~dr-H1DE1oHtLkAW$a?cM=d^#$NkdlqG|;zrBq?kv64iUK{V~0E6UU4v}5{?Mo3j z95xWo!$lRDj;5(pOu;*?{@g18Chw&59me?3|C1*6{*!6&|96D@|EEui2&>};DjJZF zzeGm7R5++1l;{)<+6* z>I*=(2T9Vqcv)&dC)Rxzo18JpTU`(Ipp*p9aYas*-QBMM*Rs?l$Hxbm`^v{KDd1;d zw9!L86pM`0X-iqb3k=Srrlvm1=(buDtM;z0St6di@C}gr2889hw6aam{TNKaZ9WbS z$bGKU!ob8Fe+h*`i@y!b&Z@H}bLALXScE_C86S@a1C$6_s@Y)lB0BC0@R)YDBSUFv z6s@~QX6)ot`}y-^7#@Sdyc&=I45$W-IcJms8;2CFXL?$)!Gwf_7Sq^6K%B9xtPIHE zJHxJyjy3i5qQ3XSg?NTLtY7&aR74p4_HSO-+GVGvXQj!-*IOMS)4w(1Mh=T3Qj)7kj^o_E60g`k(>k!ay3ojgFrC zwn3kQQ00J^JUu^Jh^B@ce+h(RIvV9xkQso#)xT$CWaMP<3lKY>Guk=|EW$D)yXl=# zehSKLm=c1s%q2QcXkoWcDrn|^u%2Pt5gTyU2ew$CkaKRXuRAYyAeOJ#D%@9Fk%H`E zx<6ZNDoA0c;up-(D5-E}Q4w`ClVM2mo&j{NKf~ZI zvmC&veI_iNo^=AIU-hNKdV?`ZY8`SBfh!Vf%-(s0BNF5fW7s06w=L!+By(5=rVar< zeigT<=>7I|sj_(YuO4C;qa;C&hhcTf!C_DkkaG!C!>Xn(ZyAv7b-_p(UohOiU?5Qg zIg4}#g5+x)%f@_KnOp9cD@lap-xqO7frobl&iLdnm`aZ6mZ)&^mw96^1=CbmW78p_ zhGlUNK1{8^+Zhjfrzz%i?JHoD(Q>O&w zik&$3)tpYU#|iFVsVqIvti8OvU?bg)vV>SBkLJszJ|$B0t38 zOS;Xf@D+Iw%b^D&lbjK$KpWZ&Cfx-Ux}+#GAab~wLoQrTwC&o$>)%fon6TR_KR!E~ zj$}z}{rq%!tF>HiT5+ooDiSyUTji;e+4~vZwVJp1l_gZ53n3#}|Kl}$B zI|T;{_1i;02PF*ZMBvXZMZ6K{^0rAg0ay4CVIHljR|Tn9ez``nXE=o;fR_AKr2AN7 zH7GgRy)d?gD-ePYxG8Z)cKa@#U#OUUg8&sQTh84U!3RIb0EwQ&v#m<>cr=wtver%B zc5oUacutK-J!u4UZ;KYvEM43g7V`yRN_1mG{4nd>LWy%&`mwiz$JCbx;G&v?A&Plv ze&R)vjT3hBG1~m8VO+tTW!-Fi!)dKDtAT9Oi6q{%XOH#QX>05;?>-^(kn=u+A`6`9 zP{1`FDuZY15Dpw@3ks@Gj3~^WZ*d4I^;@$OsNT?3T7s>?W{wh{Rcsn)3S0w_QU*jUjADV0oQ6Hnp`b~vNum}1Uw&Se$?$7DHTqHzD8Ho? z6@wPzUCn%XVAXBvppnf$bR=^JcCXAi=vKhNahQqo>F`4w5IznWM9{++?C@v8XJguT&ZX&dW+Cs+P{jX zZfOexl?Gj3AzqS(ZJdU%=V7FZdJEFv=8CidvlombNM8ITs9g`mra)Z*MUiT0F|;9D zmkJ-I)C2mEV(H}!KNnSFrGL*`7rShwo<@{g? z7cW$Q`ivFFnCRCytMuSg`6Sxc(rDyjXodYio^@X8HQ;|J?xyxSlpw@Q0t+pdP2~r@ z3vNKzArlJ5$YT^=C}a`u`2h?C=tBa=^ZKwbXvz=e2_CB%{kH^+3gW-uzsMp3Ru_CP z2U>I&Q=;%7<8rVg09;OJT|$uFfT*ro>0s2E1kw?)1U@FFqKX1oe^b)TnW@@o-EnNvmH7Kam-U_WBpAS*(G$jq%z`R4R%JEjB5@jR;gr>75X$5Tb}~p~d;Juen`+^X z+r$Wi%AuBF(Y50@+4!}+KBeDoTg7S3vp>IzcLcjSyo4V;?xFz|p&dI_g#S!>pc-&hACWNbf_FI&!10y3)P5>Hl zp9z6tVuE>)IbcXU9*&btaJ2IA=*#H0(Dr7!`o<)POJJ5K*GnVG*6rU|wd9d&AfWf+ z#f$D9P+>^NJxBpw1Wxu46fSPRzP_&Ty!=j4*05S_Fisq5>Qsui1yUUY0|V*llnf|Z zPw>ArH(zW|V-l1}0I+*0rkY;LsIf3JLu`Ze_GDvwdwXNUWmKeLlw3;#$bQ%Z2)qGU z8d_Ss`p^8B0;3tk@Wb;rCcsSvHakHk0Q`3j%>Nd;4w7qDLB`$qg99|Rz5*)Sd9swg zv{YefST!G*wA`i63>nv)6MPv13^SMQsb_+M*E8kX;8FB*dBVg*A-4o*FVTzlbH9EW zH5C_cfsx*J;5;S1UI)QAb~E4vk+AAq0>)kY_k;U75iV{lur5x-a%dw-*v?N+drrZ- zzhq{{un>}{^MsIp^8i>L96^eYAMiIKA_Cx2e=UF#XK z)72wMRndO~{3UP$PD}XXk%^Zd_7Es_s8v^0btv(h17~Y0sc5Aj8}J%1G`4<5qW1p1 z&*`|V7BUr4-($|Q!2C#j3+N^#x|aM#ka25fJX-nPd_%_iTF3oe^CFyrf|!hqy_dZT z&+0zY_Ppmr922BB4;lpnQ_W!B5y0v2EM;xvaJ)&d{RURo5g5!7f9-R3rhXeF*%gIc z+I})31QHxT>OTk2{eC5s2CiC-!tmi%>tGxDJZHr7d{?tdzZ1;GQM)bs``lemH*1<7 zfsDap4is<(cp;Nw8sxjE*CqSLGQ!>MEvUoR#;CNXPzy1@O+e-)+tOdOYi1UsVx{15 z^dCaP(+RdC&`)C!Yy%MhFn4-o-w3{Xu>jaR!9Tj?ay1foC1IVwjk8D!cnam}N+exLdrDm;W(3%J*^%C{)f)PLJ>lY|!yeRW%^Ir>6&8 z0nW7)P7@4#UtknL<#VLwp!tw4ZtyvMm9}PPd|;5Wv9U2j$aQf27%Ve|<#diDTK6xh zfT*ab!$bRl^&}Q;S})iZ*u^Fbq?a9GD;w+U5_!?z5#aLxZ5k~+?jhn#x-G1RFE

    QE!JU6I$VP%tE}m`hw0rUo3OP9Yj(xwsD(W7^0>+rD1sRUOjxgm`W|j(`U+@nI z2mrX#C+-7-`o;Nq$UL=>i$XJ@YGP`t=7A|)+J9l~9itrv z-)0=hrTVa-sv|t$gH9ML8ihL(rNz>L_WcLLm&h-7H^)#P9eSB*X)oLUh#w%`#g4_# zr#)K(eFKBY@gMvw1m>u#3RVKtcgZ1z&Pf8bpv(IW+Ft&lLdFN90p~Fb8q`gTcOi85 zBBG|6K&P+FN-o%|4W6&goh(p}{Z9+e30Dw~n7Qo{sWJeIg>-MB9#B2%A0c2q!|5B5 zH}Q1|EK9Ic5_DCtY`96t8SqN(A?q{uWeZv@J6D|3klz4BkD?^#hAD)3)5gL;wt_l%IEdd{GOMKU<1y zE_1F@lWikAhV@TRn}cpHunHlR?W#lHKqc6BlEtp!q6MasOAiACjpripIY11!h*1tR z$nAFA0fD29jg76Lq|~54@Xcz8V2f?PM4SOk_C2nG&K3gf_=LeoTHj z{1^HJ6V@pCFWRV!*TUk|E%_#$ik5c4oNi96$r*d2zQlL>zF8WaM4Qd16ExB$pj8nF z<{ftPb2~52C==S?5$ula?E_{+DL^%*jq*gY5(x>(Z?XnFb+@;xKE&y1&@9~t#V@)D zGTYt<+3NaVNg@9rLJD%`1FijSJgV)^=K`o+BXOi9Uvw+~Gk?O~Dy_{er!43deg1P% z!^iOK!<%ioomOhBeT5&ig{snO1!MbsKFSWJ(I-p8PVu4ts+qr8D8&r%Ph15L2WODx z3{G^a-RWkBJH*H3?VYa@!3oZCx(x zoT|P#Gknlf(n0+upV&28s2(&rVOr_^!YHWE0~Ckqe+H808S$3$*TG_-=x96ytTA zCx~ivpg;hhKe?C}AQLU{j+udCKidFC6JQ#14O_v#+$7hqQP_+cdem0Bs>a_o z^%m@^|8g)+{9&T7ARa7GD-o=i-WuA}8DhTXl&6r!bz)VbEy3=H>W+=jUgTzyma5 z{%MXYk%Us;*y7TnKuGrAU6e*gf?%w&ApZa71iJr6Wc|Navu{2_ZvHnH@c*jD-Y|38L(?mU z?|3S>`#73{4vnw=78YL_&?pj?Pt+Ye0>A4aEkP4(|m!%DQ!eglEa-;ZG_6O?9wPK9PRrx(E0eE;3BhQ=VA(cP44*#g9G=R4;| zmme;J9Er}M%bwes?t|_|LT_6cB@s+s+M-)VvYn45fL`cNPZM`W)yu(30RE@-M*;o< zpMy*%&)(6KfFcSDI7+*`4)5o94mNoW)BPY5~U5BQrl!v;o*LIaqR= z!|Wb6zukt`q<^X}Z6j|~QYjyd9wrn=WlfE{*=V~M=2P(8?^7mrwvS!8e%J*w8>BT4 zn)jaOI?Xu~0o$RBgy-ip^VO(DU3o4}hg)`{At0VxHIGP>80&L8vRd9viOAZXyD*f} zKNiz-I9g)sPEAM8vxy$bkG>Q1gyrp_I;hp_ahL*o)i+2BvD}j{K3LmMq%HJ=qbgF@ zP%9{_gBRglr-k5pj7ZMc6U)zbcp7X(os;*rncS#)m)B9@A2G0hi%tc5x;vJLJ-roY z&NOfNkDzasfE+$xK(`Y3dZFp_jds_`vpI*DdILntcuaIMKv&I!p@h8?DnNgSJ=Z3i zv1;RWl*H&}T~R&RIa88Lxrg4GkHWS$$p_&T;RA*AHvQmWajHwu%*@O2Et^1#VtR3J z(b-xS;f!x^rAM8rtU_sj_*NFsR>Q-=CD;i+0*n#mdq}#W1X-PDT0XDh%M`ocYkoer z#V)n?-|uYdDR#bfRJKH%rC2e>(%7!J)2S1jY1F^By||q_U-shVgYA1)X~j^c|6+Ii z!-j}!A#)fdJVaEEIPV;D8KL@y^hJz|Ay6x;hSq$j$qyy-9YCE@wngYen?)pJcQsb^~iwP3i@t#QY+RX+BT^myq) z?qmD@V0q-?gh71cdV6A{jX}y&HSii77Q;>I$LIDnO()%@gVyUcugwnHwTfA?I-Gqj zuQKoLpP*VEXXS{=0O8X~SH~H(wAkRv(|7XhrBqRLa+84+F>s>gb_M}u|yu-6C!YSD) z({N?GyOxA~pmA;gb)g;NL|mvuc$H8gm8Idv5QHPah56&%$MRZT4~-weAJd2uTb=dn zSK*DK7x&2LDgQ(x_sxz9aY8#cySoz6b3*YO#nOR7yowE@i)bjP;g+~``R_Yzsj+s4 z(1n>5;cFpuv$JoK-3QcE3+2irW04oM36TieciOUz+$vNOZLNV_NBhYI35!zXwQycG z0;V-WSqV5UPjzZ}^V%!=)tk4xom*2Pql$DG)&Nm82Zo zW?Q_?xjvCtXBuY7Dh#8l3ZLw0TjobwfdDNkrwjZama0Rsj@j3x#q4|fPi<(|Ih%S0 zZj*mhQ@Mz#a;Fpe&{*}Wed#?oS^ox&@wqd~Z_bb|djciv&z6&1x+a-b@eDX9_ABXw zh}y<^osNafL?8LR;-Oq$+ihHL`z&wQ@=?^c=d&Iv&iWC>IV4bTrkABO#xm?E_xBHm zPo)&L=!7on$>`kX0qe|7)` z2yO7hN#YQcRW;nJv%rf-g>L3`j)aOz!8adN6h&pUE-oG;ULiBDR7mPe**%_?5SghH zXbzN8_uFGHJOSqw^q9K-2z6OKB|wLd6lAYjPPN289IK3wpL@pk#=WEC589q*e(hpR zaWd5{y5$Q;K zJ|<94D-2`R?4edA?dicTcH>9h!X!&) zBps>l`)5(aQrPpGT+3C?dgr>d@#NJyFRJV4gAaft$s#)3nTe@(Pk}q>J;ZvtRn3X- z?sv*Z8dX>snIk)x%;O7{l*fziv(yg33OMN zk;j*^dqD8S9zepdXX^X$Ozzo!ST%3es_-YN4lk3Tx!4u&En;mAE{mxnAEV^w>u~8Q z*?#U!Dw?L|ii_@OU0&WOr^0+Y9CUMVkwE6yF7NWg^+Sh!Mw+TIt?T@8({HxE5%WEk zMgJf-ggSmq+nYnlz||WSs>Fpk6dTncgbLtt;Fz+@<;3aGBw$pJi2jj|Df3)ul-{yk zs|T*UgW@qPY^0*{8A2lQMW0$xDPg1QGjRkGa^%q5IxMpt;!kJ_H?s$(4LikL*9SFI z>0(1(oPm5gU$Z&#j5ZdL)e!rF~-)F1^C0T34Fsf=}6({kpWl0?ZIT>I^iYn36 zz;?WMWJSPoRc~=p+Q|Oqm|!xq{Mkm+p1+g>I&;~PfKzW8C|dpjf1JyVJJEI;G@KG2z-+SXwN0PpChA-^^`r;CgC;&o1RvW2~3ZRVk>y~#c~?QIEo zFOGwg9ueGQUg^>J?yFLE5@C3{7HAZ$9WtTzlA8JYYmY8r$)JnZO@IyGCMbSk(9Dps zF?nUBG+kVkDc(F$GSo?@9YIPtMc&!nPFU^in{Z&lGzq)=Y=`k#I%vh}ckQ^0aUWW7UHyLZZAy$1#-WuwaV590dy$s< z8b(EJ%m`HLlQQjjPL(#NSmsst{tIeK^lku9-|D@m^gQ-KKeRMh9ePx8#6%{Qx!&oV zyfn#f`VFyG>ac`PJa#W9>qD7zMV<#G-#;;2s(&1LQ-jkbIKND)OT&??zg<4T_fXp; zxyw1}wK{#~0IB^o3Lz+f6qkeMNNNP!;zepP9omkKD6**5tFf4}nu@xrprm^2`!m5&hv)+y zGB{&I@ZfllhYRC+^4y`6rNQYqsKB|(t~gq}|L7x=s3y6~sUfEAW$ zdF?e-u)L3$pQaRN%9pmOn@PN2lOGuu&c=uUTHluTD@~wUUwJsD>6g1+D`Gc>?jp2o zSx8qRCd}W*8Y-Hsk}1)l5Ln1vhgKWbxyq;t-zsJUAR>zuN-3C?s6_CL0b)?D_gJ*$ z!c$}WlxuNt>2`OPGH-{Cuq!SJ>ydu-B7AMe5W5I2>p0Rka-M9>GsK+rqY=cf7MF|V zY>1Jg1vhSXl&5+dSTc?>8%sG@qq)bjDr<$cU;tP?zt9RRB+>d+nK}h4X$da1aK~Pu z*nW*XZN=v3952sqb-NRVvr@@o5a8jx{rhgP4n292r2cC>Ki1X=-4q~Uq|k^ix6w*@ zu5#)>?=-A_AT8qw!R8=qM2^Nv!9Qm(s<$ZP9-6%5BWiI;LbDmoD(%4is-|84?|OXVG7$)(T zcc3B@H?qf<8aBiWrleQVM4em2(BZ4=Xg5S->YHdh6IYU;oco19>+n z>FJW{ttUZRUke?%wHk0?5p~k~=7%PW>c|B{=MCFv)g<&$9DBa4@fQ2*+dq#xeVHBS z6{N{<_m`nicP*6m-y9@U1pHAjbAlf@G9}a?CyuFB!B71$a&*OOc??aM)oEX zBk}i`9Ah?YM(nG;9@q+d4o7VQ@G6Z& zX|bJksTcXY{H8Xw~A~((f{S*$p@ICdWTX+pbcvqV*4+<2F4Ymraovv325UrNDh2uOZjgzMY z>(>e1tR=D)?eG1m{Li?QM)&x-4bMyu5HL21qVBwv3Hj1>GIHgdYfgEg$Tef_THMs| zW!0|}zbj99ZRS6$>hP8Wx2;`noAbLXn9CL_JMf#&^;K-WmqdrWIQiujC>tB)6Ze&v zO!k!Ph;~kwQ?`+PiA5@|9;7){L$WwEFE6S_nJqB1=2Ir`$+jKx#(7kSBY_xCnyJs#mdl?~qosOeOgDGFkIjCc3>+!-x38%G%>}sL z_cwK;R{x0oP5EiHF|woc9k0$~r;RZc>jau*9bnmVXC><0KKHH0=G&UT9N%~w~yPj|2UCHlLFQ5xX%LUVP=&(iVDwYzxX`6w*&I_l(4 zj~Cm68$vJtwid4Pq3M!&gG021(GnUp_kGNVzu=01_Q;x}KhVvss z*@xrJDZpZMHnFVs>udJw#o3l0Tno|c#e%PAOeFGCWlP7{A2?xTPq+8Dhg$3gU{stUX5&oE{08yeOjgrsL!GrRYFq8-SZgqIq{lsA4^a`u7Aq77v*zZ2IQa1t ze|sIkQ+{W@UWJX|uYlk9JU;yhbr194BL6u_`*|+4i=M~`J1Q$&<>pW828-!rbDuYw z7huI#ty8{~xHMC1qZ$yk(mha|VqK$Q&bd|5@h)=8s!yd@k4RpGhMfq#$7F_NWH%4W zlavYMj@o=g{?Lv9aRlrSYdWh6Wj2^)e(!vhCpj8-5jN4fHe>bT?#Uu#ZL%IyuMhsh zgIP3r&a2N)Pg>p98uvCJPG^-9rQ3y^Hfx&Kc%~|{yKyJ%gN|doh@Z&abgb8P(^d1x z@;O#pPikHkJRxb*SQST~zBy)Rv7+H8VLt8HBEUXHI#BBHfTqifuIuo}cRvPH!$pf4 zJp2wImW3K%{sEfEhOR_2wPi{*N;t;X`2n}#@`UK|Y zzp&WR5v3Bd)k0pL`i~zdkQR#Tq`~4yR)Hd}(~+Mg>>w&m6B6Vuh=!M26%n2$nE)|L z(!p3X2)t3o1xuhe#)(4AFf7MRpiN&4W(gwrdQh{8|D^{6i%?D@2Ixo-df(yWCxRSN z6srIAn79VQhp=WrMeXK@DuEhQMC39i34%zhWMk~FAR0=Z+BkLyL~@lP(txa@`oGA(LSOo`BeSipPBj|qYF}i~aTeC+|Jvbx)CJAj`d%#8<_i(& zfj$+2e;P(7DpjHaC0_Sn3xPwf_V$7-B>&oMdppt*5kFNN=dwgZX*Nr7xyylK z5~q=XtHzp+h-pmj5+T8~W06m~2a|^W_krS}ml&3A5P?vf2ZKUF#mRM01~cfwI2hYI zhSY}=b^1+JpPXGWzlaBM1D6*U78b=DqjAQca@IRF0Ftkw*rLVSkS#2Um^Ls59SS(2bu^?9ShV}=>dbK!Q*DofJ zwSak8n^23tC>iybh%{CCR2j#A-qqWL|;;h5PXbchh1jf@+7|?5#sElz{^K^wQhI)xv`Zd!)(mc@{k7j)+-zqV_ zJK?rkO=im4m6~g84g-;r?D+4yg%l$aFk5YVrj3^-d$0R-13gT5)LQeN`@2TW9g=yA z6>priO7l+3yXf@*RMx8XApx=g$d}etCQBmyp+&)w=1RfXNL5=?Fska-hM5}cllD`)&AMw$-h?-!m(nAFUsB82O zPRP$rV=?=67Lvlgvf5N_N^}O7Zpud=k0k|iGTxC@YPB+Fy2X!6FqauhemzfXHVw*7 zh%Y83Nes#C=ma;RX)+?H;BZs-q)s3U3?_#de}F@P4-pF&Dbe4HMb#Fsb#QetG^KgJ-ZbpS9py2m)kYlf3e`uTdBLH_az1P8U8$!!}%LUC=!^) zwUtk;P02PzW18ki3B=-HMhPisUjF@3oc79AMgnhA$BX-BLa*_ILh-1gKnMe=ZF-Gf zT3$0)43E5gle%mZVldMhj-1a1D_*qVpbXo#jwS<)TnZ+ZQZA6JAdx|n9MJ}m1~a*0 z{m0l+h{7f8t(IintUbEdre1hb;C6xj=jP^DR5A#%lJYz^#CTJ;)vn)b+kUt4L@JuC zyc&2J+jW`^mQ6ZhHKJ$)jO91_y~KiVyw{2&f{HIFaKhnPn2AJ z?|Bh)fx<59coO8=69$NKLjDnRFnBm;H@A7>8*I3+4C$)KCX z?l6*mcPY?uaeAVm^))UI?&UI($umF zUjN!)a(W0u$Ohh8kurReBq(m3mLYgW8gDK!+WYGZA>LRdY;;=%516uW;Bzmff#mFO zvQvJ;Q)C}N0!e`A6_m2D+y2FHg~r^XUEN7%UPSBuiKyi%L@G_}nB<9!K?yF^jpMxf zyJi-dYRRv6XO5BhID6_Jr=mSqR@ zad8K@1HCyI$kvLAxHbMCs&Rqs18XCFi$qOwM`eL6q%iG$&@OsOtbG}W&XsP)N`|Kp z)G9n)^yQ%!f^Y_sbr({L&{|kph+zQ%G*<>08y)$sCDei=v6xNT_xCLIK>q5wrzY)7f`h?egoeJ&J&fs-EYV_ajhrS$5oKD z*7$$FBi+FN%x!b{-ngtnixsvWSA?xj%UVYQZ&cR>Fm1~Bx!Bl*ES4LJ`32Ed6|a1W zZnRHoqU8loTTzWm(+1rW{NRwdGHO}AL6SMcgX`js9;FDZw4TiWi9HUO7B3OOuQw1? zy1+}$5y&$3Q@L5yqwwv?RyOtf(UXHCt=zYf8`U_okJvS@6L)U{I^&Og#voahPE{oX zdJf)gbR4(&SzV6hC%%u9JS6h|5m?4pWHZy?mY@l^+i3tmGzUxd)z#`QQjjHzm3|uc zlOmIdjgoQZuM_DBJ~yG9N*o%o3;g#CB-~g>G5V0C)f3jUeg!8nzZ{KDt17B~|5jC= zDw+Opg5qrml3}TQ=hgg})z!2I26ELrGvYBR)8cffr90A*@~RiZum)&(CovJ5ye{g| zVack^jgoXK8KzWPNw$sONcS+ANV^4Mt9I_=f&T15)iCfFrLIwarX*IK@p8&>>6&>L zo=od}dq_waCp~rZ(bN6=VLSqTV7PY*!_%#X^6!0v3$j*8N&CI{!sL>4XIz`1RU#+* zJ0v0%x#GG+(zj{9t41lOt=9w&&-E-uG0MUeR2F_|Ai{Heb4WI%RZ1vvM=X%}+8n*n zJ2E9`{D$%GY3bN6D=p7aBE8yO2&S*sCG-CPOK}1UN=--2`1jB==L)dyP|)DIJ(V5r zO#5V@1ex9Dvs2aW#_fMk<07mnpG+jHn|{{YK}W$bEf)(58K;s8i;&o}1n(2*xT|6< z2F;s1^S45*U8qP_dpFUNiY|2}5^=kA>}0oa4-VUGR43R-XC~ngu;NAE1ysyDtZT=W z7a^)CeP=ZCF7{m-4{lBOkhRv>4F#1721rZ7nMi21o#n%5ENL!U{Bi8ijH$)J6ADU$ ziI!gi17B849`$C34JAU#DK$$T!sPR=gX zGLLS57S`1RBc1JOEhQuX?ENCryrPcn^JdnTN8&;Te*t4Uq|GudQVz*llLGD zL66XfuL41CR7y~N8qoiDDmKsJRZA+6amgo^Y~* zFd$iw^Pe^IL2Oyq^?adN3{?C~ZN0%b7CD4KyB&FTuiUEKa6Wi`9YPO$X`S@(C!g;B ztiAV`3C4Wl^02KvgkOE}caDn?xap+B#i?OoU^01x@w56zI{X(9BOUG?In(~62r=7Y zdVt33k9MbtK`|$m-5tyyxF~+pv17uL%_l1cmo*H0l*t$%$`4y!@bka90CnXQB&_7I z0xvziP1e;&+tygkW)Xg-`ICwma$!rY?$-xt#n=v;_rVa7*5whdpA3K3#4E&Wrsmrv zoH*=H4?`fNMZm#20EM_Fyol{YJRY}EB{YZFKUm#GLgKkS-d{Y`i@Iv_S-ehP?sq&8 zz!#>FB_(GYNX`1?|7ya(!^6&GfH$fvyFmv91O!2;4&5J8i3=)`TxxgYx66s9G${zH z%r92P0-*%)BWX|Fswjw2u1Zh1HqgzGW5vG}|DFB<9S>gG+k&S_Jj=cmvjT@XnV#pB z*mF1$+e!wI9>jy3DQLL8zHaq;ZxcTS`Acfrp+9Ib@zuGKyloS}f}27DFF}hbbhyDH z{U=cu^5u>-3Qb25y(TV|bct6(oasbDQkt_TNFO+(+8Nr8v%F5|#Z)vbF^sZ}^JOM) zxr1IBm%+fO(#5?kHMvx$yoi2`0iOoU%@?{Ta! z=`-qVMMm6SN=7%JU|H;vdq(Q_X&4w%K9wL;Tvy7EsVOM44g?2a_2E)4qtF#nM| zPkjB)ixu?$eZ#_BJ!cm}j16en6ehxH&3FD3tqGT|W6wB{y;3Y^A~f=HKTr{@fE2c! z?NW;6RD1^8)xrO4-~WqwILkdE$J;1o!&o= z_jhA44{82S%{H>oH?sIv?Wlr2c)8rdHNon*(_71feXAj=scJ)BOGN20G?_nh9eNyC zFaSdOcZLiG0Z^t3Kwsm~f(Sw~4_`yTrxY(4p(Uut>6X*PWnEL$+7Fapz{L`Ru# z`FyUdX}<`|dQ;XcXCdLX7WL3C%>_L6zF=U2bS1x$9jOIDLl-%o^d15BI%i51 zNeJhtDkMi3@D9SKaCZ)g;sY6ZLRslaXsB5DsU@z=DUqLZAk?Jd2~y4umQ@>H#cRzj z9xP->O&7ra&jQKRhfT|vOm?}}*z>-bG)8|R?{C>uJOv6X{U^!GLo%;04_UPu23eF= zH)9VhYgl%3yb|G*M96a6J@EV*74*}C5`rL}T!&lM15&O$V=a5@0=?9mndPO0HI$@O zh7){rFRu)HI=fST!Z6!o!ZbuKMF^isvYiQBQXi5CB_uU^9qCJu>b+% zQ*0!lo@N{d>QFaEieiD$u{V?~2KVd2^p{d@T1q+*LJVq0EihqgE%qj&#(RW{(>a@_ zugstUU7y$M(jU_4-{%LaWR&)+-jWDnceeT5XL^6%H%qq0p{V}`3fOeB2;*hvD|mNG zObT?qXVC0QN?-1xu7wSp$PUL1fjUYRpTji-TI6J-Dw3S5xvn)d0#6P`%l1_hF}+Pq zI!aE(ioYP5S&w(&IjOhnFKx@I(wRL%H+quEC1Sdpn$Xl=xvg{kEp^sIUmKOkTeNvo z!MhhBA1i+bRB$+83-vE;~YZs6#uSF<3MyuylRn?TY z{|(jCG`2E6o|Zhi?Y-5+?`Oa$V4L59_b#YK=}6HW-F0Nd6+VPVa<|Dk%JfPRPfJD0 zP$7|AJ}#Y1)!R_B2>%yR-93ygdVO5LRfyrlP1xP=My$G%jW}U4_0K1==tI<%JD4ma z{q!cAa`o;TPy^4o=?BO*A~r(lNlWnJas1=8M!R?OR>sJevmg+(mZT16z{+{@F$p-?6S0(D^xl=2&_b2UCvh=Lp^?sQoe5o zoLk4mPaYHR>@yC&&td!tLHOq)OwYOSnrq8#ComDG4>dQ%z#r7-)7M;8t^#}S zOQavQZzmC%D;dnr+ykV>{x%=Y@YrF~56R4VfIW<+Q=e?2z}z|69F4iN#O&^@oXHai zNSHI3{|84{07`|;{ryJbQGh&-5Hn3?uObD@i^PuF%V(78;_9vTtpaEJm@ux2BtoRa zPJ6P#)(RMy+juRusWg=3LNpHgjOi9QS6bA0RsMp49Y*?R<7+C+`fj6p_@rSCDOaZX zO*vE%aM7bTa8B@mH#3-*Z&p@?X>`KsR(4f^qP98Z>}*U_q4>lkAx+Y2n82|0mMgJn z*q+TzFJ(r`Wb{S@kVcFPdc2fQ)Ov#^osqPEs!#TuHi1M4>$3uHJ#>2dcO_qsWhb~` z2i8#n4tl)xdOQjGNc&Q?$*uA4Lo2I+Z~L}7*2BG&G8rHBR7B9-)4x@PXQM(Ipa!SX zzIrvK`4Xe~q6Xxc9qsKofNY%ci?y}LQjZ#I1HF$U=;8hYjHk(x=iA`LmM8t^$6hWD=6n7Izw;C2s8uBDBQfHw@S_R~A5i z3O$L76mcG`K*_YOnx5|7=Tjc6%uR(BBze-P zmfp}Z6CJI<(TMOpc{PU2b&ROx`kxZJEhHuMLGRba`gW@}E{>J3R;?3r5|~^8j9`Wu zAg|>^2c>V-+Ygi~5;j^ok0B6iM3MzDqhjhazz@pxg_yyOf&Ta6{PVy1_`)BPICi=v z!lu-@mn;&(2-qg1eFQuA?MrMYWjPLFC?6 zxEk_Rq#Te+(V|x%$jlkjhOP}<3V|MUe~nc9sjrBGjFZ&1H4YO|2*vq`g?)I7o|C=wx_$R`Cxx zr0kl-%lWu#OlC-2PRz;EU>vkGa9u?G0i{Yi=Bjl#R>cdZNA3G_t%6|)be>!@c5fxu zg4`WimTF$Jht1s_artF3H-9@^5g}R}>*D^NjD)V$o7_%)qMcTJ`0#w@A1UJSxrJpb zX}`P$N}teP!G=ZAs$*yMQbSsQJnE#Jf5IKbwpeo=lh|2h`5r} ztfcvoeB&Z|{UddbmwXzY5tEZqCvi#`fHAQrgVRGkl<@MZ0G~6@>?|OwYg;$h>(Sqn z%pn^2GyiuQ$vtPU&*Q1jD|o*mK1?CSIS8k2BTO#$#vWCz%|*Xz8DdbD@f%XOM@TP$ z8H#vd6O;h-DqOYf58Z(Sa&l6PP%RI4-m7^J_lK1=J{|dFe%GE*@a|-;)w>_Nmqt2i zZ=(8bhfuqtpW=X z<43Z2@4qp}x{dbWs=WktzCU=oiBZ*|#(hvU19wjOR;Jkg+Rfo?6=B&ZvfMCC_~*ti z%(wzejtw{yO^yuv-xd2S03B{_JPdlJ1&+rj%pF#y2W%&hkFyc`em7rv$h$v!O^Zgw zCn;}EISgM)TG*X3H@+YFnYxYBPvf<}IyIVTDfo4SG*XiAKt*2WN-V!Tzq)_6D#BIR zseZ31WAD6}d-R@rx|)3K>~b6RVf63tTFVY8(BdE8d}q`j3fA)Iq=EZbZoNFpfO1Az z%!Kx;l}^rEepI;(?UDY_RPa5BD-`4g)8ZUNPe&43ivKFQC4S4Pe5ql0xg>6)=Xo&w zr$0)tcxy{g!Oec7xZIn1_Dp|z_OTcdi_aWbD=liTv9JXFJ+lIbW2nnp?~;#WRiOS( zt>tBfv8!Zz3QcKYBrl_LZIkaWS*12pYq0e5&eZ0n+V*SjE}IB@+gi9+2l&uY{S4&EI@DDhakERja}DVqxM{x>1j9Txp$P z6~u_jw#Vcj5*1;|V|DS>l&O*R`GFj-U={25KO8<&%Dnx9TY#4BSff2%nm+9*M&$S* zlx3^JGQGa>ODX*vIl;dyjDB#cA8>GMHLklEp>L;b6{Tu5KW zQ>AE$2_fxs=KF!}@t^8&bVcKRv<+uxC1I?XrYt&b)+F+_IX7@lx_ApU;y78SatN!QMr*;lP0ABz^M>TS>C40R`F0mF zziA2EyOqKw>wA)q&3aDX9X~?0xYV8M8z}#hJ$i-DIC%j7DZES*$2du9QS2R&v|EEU)QpW2u z@)e*a{BZn44E-@evAs?%n|)T;&RKlB;HrFXV`2K@z|X>HjA|MSN-UV-)t#dIykGc? zyQs?L9%Yh#QjCpHSuZ(?BTe&uJ2y15vKi69I;0A2+etXNwndS2lI(8VAVJa8$XN~> zQ?@Fe67;xyI(}@|>b_gRN%yLX^K!p7<@u$GW&ZQmd+X0MNM!y(!G7pI_do6d3u7^SRN^ z?g51!`t!=t>UfKLZD)QvamB+^%bB@+)7k#QKtOdhTi?GE)x$IZrdH???vs>A-fXrO zTiP$*aSl{v$g~Ymny=^HGo8}5^vAd^;j6&p@#7usT`KH~DXG69A?-Fb?5Wm1VDB9D zYT$?@ftOds=u#{h;Vi}aP)l%yB8<{)5`&fDE249~M#0qRjb^k2)Ul%SJ7B*G=x>eG zl?`HWK=Cs47r^yCIq<_^J9N;D*o*>efgSC1^!8_buc;qzT2do3K6Ndb z(4SYHZ@z?ceD7~v0sCN%AIp!x<0|flhc)kGb|3T=SdLLb9s;!&f#iS;B5`s|jP8r~ zErt1a$rD0FiR!GmWSM5ZIHi4F(;FChFXYqNQ7r`GG5(D&QzC);2VAd#W?vzxw5Z7+ z-eT1(g}|z|n=`#5uCN*R2S~G{S`wlkyu=eE@xFA>d11QvQbA0 z1%tS+#`l&U$jWd%p(6?A<`m50HmvVje?mm6YbP0Q$-jG-Um!*-U>VBKGwv)EoVE8| zY=4`y^hi(SW3~>+Uh|=|K2cw~l_j8TsTY(@v@@J429R;{uC7`5xS49q94jt(KC&r1 zT&!F2y<@fC@P11zd6hHT zfE`8kcJ*!q2D(1JKAT}>#W)6hPoc}>s6OA->ZK27 zmX0400a2wyKe~AF{#e`W@v9c^ZIlVDQuuAuXL6ILUI9&6Pwhre^D5d1hmIk;mF;UNO1XX=61HCGRH=$ks=05sct{SIkMA~7iaFf zatMd_2$IdSD%ydTO$gR0Pi3;9LbG7V4JEfZ!9#qkSK1~xaD&QdhU7t)9JUm9Sc}*w%#2=g6WSP>V)K2i3?Ek36v@1<_DF~lb@66bf zUH|y8Z+l>k%`c9%KkK$XjtyEdBdr{lCxwS}jEn`eybil)XKyEIC+2K&UtLr_JtbS9wg*Jw?p`h| zD9ES8{%AGRG&Bz!85*Nv>ejs8b*cFJg9`fgXWauVHm|*{PBuRKV8{HvgM9a=Gxv(A z>jBk#c6#Ia?xF5#yKCbQ`FRX$e?LL!$J^u0!umGc79!V&XPw8-%cc3c1f~U5m8NqNYlY%o$)#) zwfx9!@MY~@79lzuMc1lSEy~Sn0-~_+(kQ9K#wU7`btbGhgQDN@xvi=S4DVMJmsl($ zJqM@ksYhf+Dz6^Dy>~D9V5PbdF(Rx<)#Ge_9{$NS#(bReG_mfk zxdta%62Vd}GctL&hye1k&5sNqcUx{iy*iI@$Lk0N3OfVZSM360k8Ul{O$CJku>`F~ z3$n-0tAa^x(wdEqB~!XC?TSlfO=OdwpvDQd7%v~1xff07$mM)%32Ub-%@_fWPPLfz z)C&2M3W?rioeY+?swSH9=7f>6rVb5f@c|0WAO3AjMuVx#Z;Q58p^^s8W|}$8wWl*n zLrLfZ+3bqH=B1o|U0a6vIbH1Ne?)IC#RgNgoB_8K%XbgrI?yICtyR`9XhR`zm6#;icx_q3Zbz=VS}$@@>1ceUapOw? zdBGj3J3mb?xw6U8R_=c=-Se?hLU(N?uKVOwwdCbb{wAEFkjvpbb#$)?|g z8-7QXSr>M%<%1Uns@|L`JUxY08ja7Uw?OxcEk081ax8OkqZ4F}0sUZY-p=wQi3MUL zk|qGnz#%@QoI8G5tWLl&^e)ELp1#+$t6lKsUhlGugPI2YR`a-T_?8ce4f zGu(IUx7v9bD`h|RJUNHT3nSyRH|nb9CrpO>W8XanWzuaA_dXXEwM(l@XxA?YxbFEp z*9}>tnr6#fIVGz1t*i6)(cH?@72+^D2c^=1M)~9KTyIy$%*o7Eah%Ph8WK4JnJ+wy zSUV2<`ycrx5h3nqsos~vZ|P=1E3NnKOSGSFT|BW9Z-!{aB@9t^Un z3fPt(VTDQh@wYyOw7j^3;|FqZZcCQL13JnXZ!Sf7(cS)oZ^Fl=qfGHrMr1l-lpf9t zG%f_yGP`#fY08;Bc}@5%w*#s{PDWuJPs=4&cV}ReM!V~BvKtE=7Z0vVrRF@vB8deh z@zKfPidxGzE39s7A~+zJrZI1|Um?zqKy%a#&NT_!?OubQP?(l39qaPpk)I`*WZECp zP53`ryY6VXzIL4^5<;Q}gOKQD^j;!S5;ch4dnX8j!4HWxdKkp$L@%RvKhfKaL~juz zMjLhXdXIeHch_C(TlcQJ?z;b;HD{eOXYc(!`+fKGJ`cCEQ(kG3dAWNbZ4%2w4dSgI z-uTk`BkhvT^&jp@@q5ompJW`8O!Nv?*b7IY~TOR+03ZSg_YE6bPr z{eBu4(!CT7e{mq(K|N4*pP3yt!&uDIKbZJgyk6cQ=X0fHMWrG=?rj?F74#J)){s3) zK^vY{LBB9F-%!pQ|4P#`qw0m!z#GVHPR%NI*#>1m#R7Zz@)yCL(qL*s^$b8TnCY%A zNntNv?u*vaNR!4Tx9wmrT)ZIWP>F-Uci{zkOLS|mLAnI}!t?1Q)1IDgA2sOx7z=zu zG*g>%?;n)eGqaO)K4Z@p`B8g|@WSH1vk}Bv`2=0w`$fA6=D~)|y+1-N?@=evvSSC=w_A zJ4Q6QpHFdt@q+F+IE7bm{#~B?^5^5(?Z$c&!q-S0nL_mVcmlA^ z`unwI7|&ayxqal>Zf9ud@u6nLAi+|s0#*XD*K*SI1v;u;0NbaPbUz*X7LGGw&CFWN zHlb9C{$$Oiko@d>kNssb^Rzu$QTgaHd#m1-No~kiCkK z8eNh@^pbR`r@4{Xb6XGfD{=|<&|LR_@d9@8pHN*rQGLl+&vc5c$4sVYq0fWBlaaQ= z)R?tgdn>kOcKr5*I?m}tlfFo}R#>|X#r#osJ>?xvwQZn}&!9xqgQ8GkGmnxq1VuaX zVsV;#HlR99Lh}8@+#Bhz1vvy?bx&&LeM{v829aS74i&$AiSGt>e@-)+?6>2$W?qgk z4CDZ*R*zXH;rlMfZES^c7Ps$k;70eG-D$AQtdFE|T!kj7{t?aB04BIZn@hi!uU7gm zcK&~)WdLhh13w3O!FshYm%a5xIFnb#2XCNS&FR<)#qNtVJdS%_!WhId6!FRUhzBWb zVQu2&kS!MGAwmpAN*Teq<&5kD29_OvE7cRzJQ*3|R(W){h^>w5Z}miNBUN>ZpJ5I6 zJf5!V0q3}Am(V+3uDu51o&zcd_Yy-tj1V+ZTobNUauZYU$zR(5-OAsLMOUu!`Ak>w zvi2nXX6eSxwt^3<-t{N}RPM)Ft$-w&ru~dZ4xRXWvoieg=<}$&ys@DTx_Nv&{ANz% zd8&ag6!@heI4LRV&k=-8c$V{drU`L+cZj}u{WoiW4PLrdrmMTJdSz>3JB(iJbBZi|eL3-7J%z(jSP6V$jYj)vA z<#hE+ctg!jv;=yCP)k)w<%RZ$wd4YHIe*?D?<2o~Va79($NEK=`+_`|Ekykuj(^^4tFL(%E5m5--B>uduQc z(zM%9dh_be7U#yfl%3&?No@G%(LNF&$5+vsLPV1K+_x;RQ;;IH&_pXRCIBsrDNN?Q zr^CItS84ZyA4#hIFx5GT5G>MIVpdU_d)%dIh)7BLZKLrU(7h|kVmA@tP!N5vsNF|_ zQJZ^}g#zimFr9jKFUQl2IH+!QeY{gvLPu>(h*$8rR47l`#GCQFE@0+)^Vw92%GLcO zqeLCPv0}DfcGqM*I72`F+$$$%Q$&;cX9D+tz{&}%AGe_oi1u+igl{GK;ecc>q&H^O zp!r-y$;qTk^MIIwph^_b@}*131xQ9IANFUva#iD|AmISlKlH2PL4XT}T18k#y@` zxlFJQ|JHgc+}-AG7t)+lI%8H0_B-QAc%9Pc`+~`2XQMDZl~;blYj{D@441=SaRds0 zFw5in{}5ix?`N`m8h1!wSZM}tZ_Z`bqO|VX0?hcr-#SNeZ_UZP$K)=Z&x5#`m*uCa zS5R{F=W8Dv5HoZ4{BcWoZKSGIzjWJ(F}iHW)+gxV$E{nQ8-pWoZHABJfz|F*RQy6* zQTX>rh=s67iv;GxLYb547!F1| zaDcvM^IzAUElT+bLUb1RSNIJ3R`&6|YNq3B-$|Q4wO$_11;wC)yV}8&HQsxBtrZoP zYS{k4mM(Fb<8M_3w{LiXGlGJy)*LfQ>C(J!57M0%pzb63 z#R5-bE!!2ClcwJvJ$!Ju`GGHCp=$ABqI&F&eYnI!KbLN;+t#JL%iD<-VQrT5`<|6G ziR2kE$4|?!luz&Fs4~UBGT;b?`G$s`8o+w5j%pvquDnxO$4y0wFzi0u-3HO#q^6oZ zd2m?66*;rxqW$pK?#_1ItNf@~Hj1L&cI9X?(t!U4 z14&wr5ds~5nJw*Qn}aATLD0hFJjVG0CB+et@km7o1m10{xiMJ1n15IKC010lYazj! z0diE!ZO8b$+|=Lz^2BjKDe1{Q*^w9YHB;Y5N8>4&6*3lkBiJ=#6m2-T)1}h8*E2z! zVV8R1;H*@K^gRCd0&%6m#z4@WG*;ks0 zBg99|e=WZ^^uT+RMChsAP?N&|VL8mvv%#pWW8F#n0w#_xbr@J8J%7H51O$Ksb|sk% z5mTBLT>vv$NRP%MBE9u->OhfKQ) z2XmrQ`iyNg-4ip&sG>HUe*g2K2R|F#=Z)A0UT57$^JIOxW1wG7tO>Pfnh={|U!EVT9HO{43aAR^w1%Cc4vv7=F@0 z)k#XGMIvh;-ZZ=HboCC3(I=D0j2O%~0;@+vM~i1#u27SM&^+wnQNv^R<)I#$9*IG1 zWGh1?y*4wAjTDO81e0BL3Z;&ZtmCa$IZGs$1P18*FXqRWX1^_s&n^=nd%v=+gbt;q zo{ainsL3g5>6$=7^d-EurGCkD1hvxX%btS`rDuKi zVu;8A4%T$@VJmp&GU&Envlo}NzohU=sM`k3ki!Y$AnmdWOD8%qneQ))UL<00mC*5IC zcZOWf^@OMT%xsd@79gK<05qKVSI;&9C3C>r7!t3GfDmT3B1l zgO!>79n`KlJdAREA=h}v^S=}|Q&MgnF4um#Ng>WRm1-?_`F?KI`!}!^PEq6OcMpHE$Iet5(enEeHcB_dGf)+4;AOOB-wZj4_{Tm zYt@c;63&vd#zl z`zVBA=NGtLj+t^igS)qb@F&EDSNYt2@URc0jMDH}x#L-WI_6jrff~LKl)q8o>O=9z zDF5ZgH@3>a$Z3cSQ^*?n5_?r!;jL&9)EEqfp(0E}Gr{#Z+pkQ2;Ey(&Slv=9kyA(V zhs;>-mWm+L{6F!pS&Tkiug#(RskAf_El>pFAjs^ST~on=&6p4y_)8 z@>`o@1sK-c;ail80iAPkQ-%&q`Y}nI8pfjHv-9+7-`IpZA_ z_Tb;MB}-OC)v;+(gE7%6Eyb^OAks`s`Rp>|K&D5VrO&jAywqYnHK6PUwMY>dkV#jQ zA7A-by}NM(Pwusx>|3(%xA{Zw|3K)cY5+oGyu4uAba9$1SrM_(wAeMQoom10th|MC zoA=)ONqFIdD-A7E-`A&Fa{H;c)b6G|#}7p$q$iA`3e%lH@hDBDK{ez3$@&9 zHu1~ZSPN2o0PbG6xc%KA*lCm>*OWzmG|_z=Zbq>q=dR1K&ih zynOxexTu$EPivi6)7s}`b1H)q%rVKsd@s206AP6cVzw|fnH4lwmbWRF)QPS3q@veW#(cxPeqX^H>7yp7uhVByT|FNw9 z-gV1)MF7`WRLNf#cmmxr`r>{Mz!M7_U=V^-ib? zNi`OWVY7h<^3-9muYla=qwJTe&u`{@rp}Xl8k2jSrr*8UrT|64akegGneMelQXjdQ zcZW_uPd~juQ`4Yxsr6XB=t06$@f6ED8}8l9N^%8|%qPF6y^Sgd=~CCn2T$tO%3?kw z_3${0M#7KBZefC>_Hwtdke+B^j?U$_R>H;o|HO`j-O}eM5rW~jF4;o zV!jJc33FX2S7E1BpX^i-7ar z&6&mAHl51dF4=@Sl4z4w_9G2cJAWkg38{4V$tHt8Q-F(2ctLx+wG#HQHr`7sS?WbP z;JrTfpN`f#A2Ax+Zga5}ZHLAV8~&38HCG;vFgyxZ)2j0V_=F!hfIid!Ghtso2`0O~ zwJ;b@v0_CYFHQzj#DHryFR+w{1Hl~waJa?6UlJ0ijv$_asLl2~L5FvMys0w{=_)4Y z+~KANJ%#3h&iG!`F@v|W*eh@qkcGGyWM5;r8`bkaqNeZuPpRww+f8#GfMb;xK;8v% z_!qp-VT?!zz}=ZXGWXg>?2Z*RnybkN$MUBD7ksO#RI_MnQM4Rzy#xGaf*(DIv#xz^ zxehq=!~zE7zz|5)3+^zLN?cvtym8~|%5Tp) i?#7K9cdz5=?HjfXi6e(xO>px?##~2oT_`P&b2f5 z$MnDMuDxr^_pSA=cRedgNkIzb1HlIf2nduf(&8!*5Rh9C5KtcxpnzY#P&>RrK!6~= zh>NIsW}Rds>0znA4<)oUjyW%4OC$Dl47G z#eAQq=Q@jx?VGMc*N^mGC%xf#Vh5I9gkZABlmiE7Ug(nRPeY#%oe!q6YxUatulc{d zUH=w}B|`|d^x}0r3{1ldI6XaOGU)cbJytjJZx)tCR#R7J2_{1*a1#-xk7T7dRLJHv z5`8GYXW=CXv}FVS*$Iatgx+RlPe+7e;3oWcE)XQhbcB`a<01A(H!9#OwkVMw5|q_3 z+Q)xi63zUE$=Xrh-<};LK`9_B}U`}Qq^3OrjPPss1-SeT`c) z23*$5aZ#(uqu16S{n8{S~tO{ba`7165Qxc%AfOmiQS(jD2pKWbz zNy3<+X;vxl0=7%cFR#aywf1d$DXR`WUHPW#9Uc*wGvJwcV!pf6)zn??g>OVc{x2bD zg1v*_d@=b0*1g=*cdm_#u}MMcxE4-lV3Kz1?a5@66_GPUB{)8E=iITm7KVmm!{zbDsXmB$IT z-@VZ2uAQx|57{0YqZ1QY7`=8&?QS;O+W1w-hs3|Hm!^hE1N3Zg#ln%j-X0G&1KwXL zrQ-1{1n<{eF6b6&^vA2nnV4#un$#Y!3VRDFj4UGdYmbiHEP?6#QGo+fl6#>O)0OS5MTFU1;o7}5(39Eun1Df6?|RL zb+BS5n1jsZw3GSr#q0HUF|On8@>0aA^JYdi;O&u`l{w(;MY&KCF@{mE_2Q^Bw|~Rx zCi1N9Am{nKhg2P^gz0N%tIc8!X~4^LD?2y0=X8NY@J^wpvP89ZBOJci0F)F%5qiAG zLX|d+q9iDE#L^okj?Aey5E2m)QL{!b2tMu*jm5BI0T6Rjxms}afs->Xq-@G|hsefKBQKYjX? z*66e=NwXUaixeAW;Cm^-jztz+R@42kgA}^-ejo52fu~V9PenylP$ic@jDjjnJBL5J zL_g>C`gDsX^uqj+kS7#;e>^|_vK>pvWj~e0Q#V)N5%B)Jd3kxM^vGf|gdkhbdlgc} z__Y&nRPgzP?U3V}5qk7l^WxX>krCnHBOAC3^BYW<=^1u`U>yE9U;z*ZX<#QKC^s=BB~U{IvvwqY5|{WHf`5{Lk>zlU-Krs$@JZr)rDp91 zItrSvUEUm2s3iPLjTVZQ6i^4627cHs-S2Nc;(fq+Y-(&2ON%umihkMfIe)!dbGgnvFlg*wUr>Sz)(%9L^OLWx2Uxr!N ziv|HKA*69V`T6;gkxmFh#iHqCKPQxe^7E9$5MsP<4k2x{q>;0$)s;XRFw+R0>DqN7 zwlL}$PN?w;H26dWs25B1Cc(T&z0O8%^q#?FgL0UZmM}I-GihmfCf_r1bJ663&W#A( z`?Hx93X2msIfAu!iA2`odS}eS6Q0F9f@1;wz9H61#SuQQ&>9!v$};9b|imR?W`Lq`{`O zY}Qji`O-8SLXmwO-el@|Vddibxu65&Nw&tx@b18P6bk!l4$NU2qURt+C7RFd1R8Mt zS|*ebu)&F5^A+lDKdtY0kMROfM`USR%6^QPrg)jA2pa8@P_{y;m8BR z;LP^{kv)ZH<J-zhInL(F~Z@z5#n6HsKN%H_II^nou0M_ zA}$xXpMvqDjekXB|BFu+<{o9M;IK$W`CXzp5VIo~6G4$^whV8}J~N)M@3UA8BtFRh zYqu}HKrx^%&}XrNB$0?2Jd9q#KS!45uOnc@xqz+}a`^Fsu0!C+l1fa9(RUaOx`|j% z&(Gh72pxpA{{;cps`(DpGBg-i0XKR7qv5yLXY^^LE_bDa1i`0~#l?G}_eV5}`y2ru zK_JFrQY#FKAS%Q(lO2>vIK~2r3~dfm1FjJeVs`*9L6nhTExQUK`?SE5C9SSuExs~>^2KOlxC0CPWJ=_l%r%b@cwBb#4f zYSezUvu1g}9419b{}=DKx6wm~fW)IO#wURgi(22_9K6@N7f8~_jw^>jBUmuqE|$$>kRMSei8CgtcwW@)}SDL^;!%>+Im4nh&b7-wN_A(J6w&$T+f zuYR}cM&K~~M7STM3pzdi0{$8r8U>{PBxJven#p(ygU`cu#3gPsRXYfcm>0%prIojW zZcd#I*-&|1Dik5Ob=y^VWC7zG97rQ37%DYqn83@;ou}_WKgkTf0($Hm{@ACup#b!iW-N(bptDmJ!7qDwY^YKcB& z!7rJ#^Lw}7b3uxzJ)w0g2*#-}Fpd4*&OJrRG%vqcv-T^;T@eS28r(M9i%n)F8#CMY zYQ(%28}8?CV^qJTVhKJHy)Qf+5I<=R_ z@-rHsRD&&1FY=BuL;nlX^}nQd|93qoi8+|8Dj#?wv6g{={AKBPSAzLJh;|t%E-tQW zjq!}=jt-yAZa)V={*H~wxMNcOkby_W%bPu#v*u_dUOIWb-xTt^*b?-6dU-s^)u>*= zc(f`E4GmpdT}@3%S?HKsX>fLTHy4LiQ&XGEJ~}u!*xm-D|6qnVo2Em@)|jn5%s*-0 z4d}z`gWnchT+VGodms{$Dcgv`!d-Y$UuLs0tdWS?+FJF$oI*l{QVHGX-Om}hL!!aK z!RC`0^KC8`3s8A9C5pNBFHuKE1L61qoV8USH+Bu4E(W;vksVDZ#b^Bf?A#0bKG$C` zR%Ksa44^UTw}0pOp;NhfQGqEmdHhja4FeA^atS|xn23l`zkP6UGLc+N3HyA#Befa! z>Ha+7ZnCnr+xvL#^TP3(`>Nei$74go$GEVE=V!$<=IxI2?hfBa)<%xnuDc8?Q!e+D zrGKjXaJsNcJ;_yhBEViJAl<*6c|U}sgN?mvatn|5;L%E9+D4F9ugGNKs^|T+mPg&8 zdfv`+J}MWeRY2jsxAU6sZ}&a_l=$JHC6eaN<)w1D+HE_9ySw|w#s>dy;8EJJ-|F?% zsoHnlE}Wd$?q=2KcibILL+jGf(^uInx}I+kV}H@mSO7{Bgbp$Rfv$z}U+sH)dqaL- zK4Q4eQW7q${EETV_A|^JkrWXT>5}DhKS7X!;%Nf&9WOUh2k*tk#`e6wtpZ8g9at%L zYT0~l$DtTvUMb(dvy%($%hp=uS%tHT@4GlVry)qo$TTn)Hy^~a=udSo<}6t#k3}c@ z2+>73om6JwC>yj^)A4rhrw>#S2WQr7JQ5A(H#u!{{1Hqycs0*!gYvujGing<>UOr) zmd42hj)d91^t+zqx)AfeKYRTx^e+5Oqejn){jJ^YFQ?C)t!=4T1Zsa)ZO@xGP*wNe zNRj$|PfUbp)~PduR4Mooty^Z$U1>QvU*KxU*(bn^8ni!t z^Is$D5$BuJGBWxDx`maEO&-l5OsDPsun9-a9r3EKUG1`|j6m5v zpdOUo;eNW(Vy9bJsq1Xk!j{1ZZjE;m^1WNOXsu69PKHM%ifkA{u`Ni{vm-S#l`ukAdO)GG$$dSyAz-~PQq|v zhvEA4307B_Kzy&2XIouF*lCJvr}Y&5k8wg7vLnUxJe72H60i*k1+rSP6Nq?%b3rym zePPZgODy7rKp{OujHJKOU>4(qeMrSimluMdGaN_wb1?9-jNHBT+gBiKH$i~vOpwad z@}O>0;26Q0U%g=SUxCF2)Tx0Jz1nnibYj_|SK^gKJ25I@gJez&%hieQqpGVXkCEwyB&iTe#7v{AWCDU_h~;*ydA-&mI|l-M+a=FispGBn+_>Or010eA8wc(JBR*={W3XMUYYI&4st-tnNE8yn&!fEDuW zZieku>c7-2z&Q+FaJeDj@yfv9+nNirK=to>G?Xmtx^ds2w3t%6JKqjvFe7?5dfrgQ zMM-bCR+7u)XgMpnxju*`T@x!|YS~1%_KmJFd-_H}bWrdCi3u%WcXti=Jn3r*jv)1qv_I^4}KZD)Df34&D({ObVb6`__*X;$kfqh~c>#$CbylM23+kch-456)pp< z5=naiM02J)sA(yF1pR>@AGX8g3R8mnf-63a3U_7iy6jJg$jpg>Gl1|VqNgM!dP_f= zkUk?e4&ftS79$F}`#SDp6uuy~&Q6mXLE??@bFDPjKN^OH?t3-3SM<`Dfruo09Cg_a?TjHcN0hNeBixv}(FGsB>TGleq-yd4c4YIA)m~x6UVnE

    l70|bpA+V@soiaT{bj-7#czB4lXsZfgtzS##25FInp2;5Q@`^}F9Vb8@81}= z*$x!Xem9u3IBfW_cLaZ_z+QCfEqY9@D^ELBvW>gCWjV!sq)n?@#=S~7686}~c4&mAElt_#tZDX@F z#XB8PLTjzFL-)@0;9z9JIYqX`?gT#*d4;Srz~Ql5CW0ym5AyVx#Iq-$97jOfX>3Ex zppK0?qmXh;W2*n2Ck-hrKa$Iq{6r}tb&hrX@(@LZJCoNPnq!>70ZjzOwst(hoQSH4 zv}5+Yq7I9ra{8nJrgAD97HjBC@WEpGSC%SEK#FwxGdD+9wT`pzIa<^s?zQ4C5(Z;^ z{tidEoj>cplgDG$8_e#vmqJ#54*prbB|b6H$R|HS_gfx4C3RTCB_!=Q|I0AX(p5Ar z{0pL^la$j~kh9t8`O5+q#hPlcBcHG1eRN@F&jUfnQiGGGq=cK#YK>1%w>}5;z5RwW z^WDW_rbqUiE9qKK$B&2z&wg%O)NqWmU>z<3a`50dT$eD2s;LTA3N23&4U)AAQOzEu zT78_MpY|b!Tk|0bj;cU;O|vyO&PvV)EwrTavvh1A3o|qLkbo^DDYz$c4g~r7*WkUs zxEDDDCJ((8QC?GOcjczEv5`#=NnGXZ>})8#Sr2_y8V47L!cUEQh^INn1^Z9JJiN{h z&47*=Ul{Ztg*jwD^f1DmyafrrC-|oH5s1ZICEI&@VLk7hN;c@n5Jpfe^iw1H9_wMp z)%k*2NPYE%Gr!y-X(0phr?`(I7s8&fHIu-djiB-0*`F@L@B=d6;(?UhyLe~98CVYQlUpo4mk>x~0^_yxD{{Ekj$#rAl?&MBamq-24@%w6X zGJS5R8)37ie-O+gYAA$CL+_6^ekrI-&qvK-nW_2UVm}7pls^+t0d8=F6o$daH3V!4 zo=^0hNCkg=ZBWtbGmaDoRT$X&8>(l;gTk*N{MuFnk9;3Ul6p-(RRCLZC{D z5r#5XYt=*X2IJw2klOo~Q4^db+Ac7c#f1*}bn&o(WzkI`=H1)6LL^Pz`vMAUmLTWpKryaPYkjUG;{wu1gC8S%A%jGP9w10aNJ`kk@>=c1 z^79#(L+-74G2`H*^UIr8K>u9{3-lo?#H1V9m3@|q#k>54YtSnk@Fz*ikgnbwLdfD| zss2#!S6eT;H8;$3S(=m8dSc%$6}#e(+Er8oAKgx!!rghtI5cxh>k3GD<(xKNRKOIUYg0VbYikNfF@4BsQh{ib~K zb-U;i_8k!4z;c-zW=d+R7%rJh$?2Ys@Va3LUciUxpBJ5hhOTL2ECgHocAu-D2Kv-o z$a#mX)_x}XKdfY;;02aVd zdQwtS+B+aGwHja%SXQFS(Bl}K@a`>HU|?aj8`>XdOu{2EJ{kH`HqYdpV>RO%yUel! z!T1I6+QV9)jtxUkxp6PJ3|;e>;}%1}-eqRb;dsomGQuOsOi)vJYqUm4t@Pwzpwcm) zLi+F+E?85&*lZr>Ft7fn&wFd>SFDgt8Ovt^y+WGW;OoP4{Z*s`*=SlXKE-p!@JEc& zvkm>W=z$ir`k8`yDj493p>AJ(8DQ@(K7~06?4tQgHV>Byekvo z%qiGMV$mW=B$`agttUXzKog`3FjAQ1Le=8|6IGRjNIT->63e|b@RA2yAn zo@fAq({3fS%)m1eA78h@6tU>wAUB}JRR6ko7@2`k@BUvyt1(H(DsPI^?NI|TNBO#fI?8`Jo*r;-|i7;(;x(4a5mVl^BPS9zT%!U zk0?30xCGlf&@k&$WNY4`&h-tBcCCRF4^|?|DgvaoVwrxvUzwHDb)mIc_yO8BQ=u5z zJ;TIVyRMko1yGVP>NH7vs=>G+?%30C*qgv)N^)U#2os24<`)6Y4*RQF4`vsjvBn29 zw{X9D2H{s(w9?gWF>FGGo&&yt=;w974VVBkMW1L}c4jaMm~&GOM4;swK}<6iY_$`X zXTqJ5V?BTWth%M|dI*MO5sYODosi}??1gxk0^IKgC1a)Q_t*0PMSAG8S}t^xn-7U zHoC5MtM*8HW+tIdYl&#oX|L->y@?b<*FP8Zyz73WST@z%%xu1cV;kQL=9^nb8`)T7 zb{KUk$eBV;OtHl4v<{SJp&|0+KfHjRLJqgPyXrQPtFQb0 z|J?$F`2LWua`D0gC*=huZ0&%v8l3f{_yM7@#r9_vRTz9$HfIRLV?Xm+90|CzI2z{O z3=y%tWt!WR9CVocxH~S+?QEMN~}|JPxF|6R?||0Te|z3>RY0D!0ud;p)(_3mVuPP2yDX?J_u z>GpWOzrWu*6>#YWrl#T#9y>cb+kut?BD1oRlH=o*8NgsnGjnO>`P?46y}#b`@$n%E z{bMsM0WhM2+)=J-&F8#JU0pqs%b~`@N?cqV@Mhlu;}tM+dKwxU7G?kgG!Bmi3iF@S zqM(3E2^ijKgjP-u4-XSL0)*t(Q`vlgmG`=AkxMM#J@@}MdwxM^+r`sFRP>D z8L&F5SJVI}&WLzq&v`)&U>l%H_fm9^nLxO>xP2LQp;uQ|Yinx&D=?pN4p1$Jhn`P2 zR&tbsoceQ?Z)U9N>B!O_G4Pm{q`PEUNHdTyNBjEnH;T1>s+KBb^Lh9KWu5XBx0bG1 zELr5f;{ZMC+BMLBl$DdCr=w%b4mbqo1Cjpz@8UV&-0^1Hk0g?t495c@^Ica*$6D{Q zewgI>?fJaEhMAh4{$z^pJXG30$eUuDoLfsUT8Go^)wN$p2vMcb4Y5%oKVbQDp7a$7AJFQX=!uw z5{*hTxPx`>O}RHncLDPWJT;v(Nt@lda@FVibFN7e_qh%ahpPCA_uEB-5pqrn`d@O~ zwAc$vFi|%qj(~q$%AmjCPx!W z_nHm_DhOM>L9^St#(AiU2U$w_^U$Xn-WdC8 zY*U8e|F8{D4mpRvO+81Hf%Q9SyT}vJS}j}&ER4H@KZd5+Uu$#uw-O>bFxCLzV(IfS{~WKD ze!h}$E%_K=eQNPK{}}-sSYoM+l$3B&pb6>Jq@10Z41i3w{V150`TD+>JHOgvV1gvY zI+TOL)lsyAI3*+`5MBIVZ#AnB>bYI^V_6i~2U?wW6OpM}!TAx)AY&MPu|bsia0*HV ze$NX-XJ^(Fs!yNvTOA=kSo&u!LG_zjQm7^Da_0|VVz>kNlr(w2%J_8xaF%6`ei^XppUBLE2cmm)cbKYy*8 zH?bNV9;Ph9E(r_rMu^te*AL@CSjry>wxl=!kS6Ro{K^3W(a1QI59X*J@gQrDlzMh{ zjLjVrGjjjOQ;o@kP3;{WMP#_qi6J9;&>hdL!EIf7;M)+cmRNEwtV9~Xh9f9zmR4dx zARSbwLyDc7bnGI_2|E+ZBX?OMaFvhLtsWDC(tQ|*goFfShuW7fh|W-mg5Eb}iJ#ax z{2%vl5pMd!kkC&lU?eY)eqdR1n=2XNfiG_4eI7$)&~sRA{pQ4^nFb%~_|ineGXLjg zVOo+~hCzLZHjD=8aj_H0A2wouh8X_U1fn+<(dpB+L-_>##|UoQwsSI+bEMMRT#2mpCMYfWgy%TecdBl zQGgXE&ejI3IQx@{2{}ua!Ex8Ob&pMy``JS{gl|F8lWDy-kRVsBK8fmEX=!osL4fi2 zEZ!XnkN!8k2DOb{0SS6M5%Of38#8GOXmrDtVmBkOxt8FkQV50#vyBVaMPtum3AkW{46J6iPByFw`!T6XQpS5{9SdSP{}-?h%;w zE5Kcc7!WB}qc{``A*gn?Bo!5E>We@j3|B(OWUe(D0kA+K-M}Zd5Ms#k+uPe;Ffh{0 zruo`REac$v$w^{nLx`0lAXF&f4+bWZoFFYgvLUnf9ZN%mKv~CU#gYgRux&RjxJkfl zagyZ@6({<`{1~wYG8VJc2pW{Ncz4`>53rpshLtUP^(1oy`1unB;Nc_6%4o7Uib(lA znOPG$^H~E^gRd@cZeD<_;K+SAEEdj!X%?0Ovyjbd_JI}6YG~TXW(1EjK36ML-_W2; zx(3hEeCS`CmZbgR-g|0yqH662n(d>;ZZCrHMHY8y4rea>kS^#4H0TQix&hV=*T8rB zW*M_-Pb!`War-YgKLorH@zYR`7z5ELSYQm9{B(aZ6Ua2NrbFl*7mA=3v1+9+!Zu{t z0Eov*P(HFfk5mE`<0YQzxv}@1@UbcpQ+&oFd2r+b98wd6u?5W*P@K4*Z!qv9>LW=* zh;mvcrazO$+0Z0SSJc27i{*p&zb!~kxW zE*OahYUM;*TYCtmAA#=I*GxzaY{rYFDjn7b*RLX!Q#k_TkvPx{aN^)P8?d{` zO`Mf$Zog3kbz{K$TRW4?Cxn6@ZI>jj`edL)WG#GS|4**Z5Pm-nCD{Fb5qnE*pCC~l z0K`RoM}29-EqVEn(rWd9Ro{GITwp-9)h?bqaFTsO2lfW=Bw&VOxn%->)# zSdAv60t0#o=u%bQ?yv)Zaf>K`grJ+X9O_0oqzMB^s)|K0*$SglUCJHA$iK_^|H|*S z8KG7D1B4-_O#TE@o1@;F^El}WzT7wp{uYOk08rqy!B!Z_`0J^!J*J~iw&zZmVtQ$1 zhafyW&!d@73&%Id^M8SSs8Nl9ff3yE<;#~Uzo3G{mFB-unAE^-VL&~|_jR8S20crD zQ~w0e1iI64Fmv)?mT@OXM@u%G2tbp_GIfPU0Zv}7pkGEaB?TqWM=GuEgn7VH8ShUhyCI-i*s@AXN5{ef5WSL3#No*J&H$ss z5)4B31<2Rr(c^$w^x;ucWW+&3$)ET^B!a%4a&mJ1{@r0v3`x?yzP?X)r!j~NAOAS> zypZBgsUuaLot(sS1~q$K1Jd^Hu6r-V#sY+I29~zMjn)%d3BD^;7E}nI=j9s0g5!+~*ayUd&r7 zyW+H<#1ty#3IcURR7}i2u}UqM25~AaE6bMLZSgyYPNT}v&Fz<~mDLfUL#Na8=}(*H z6=FVj!zm#30qE#8U|tZ+3O%1Rc6WCJfCa9ajbMwAS0I0c*qR#Q$Pq+BTLGUa+1C}4MK0qeC#})Ku{rU3; zz&-zlKq0XP>TCnGM0mNeg+)ZJBN*u0TF@(A%Zl{)zwS?E(;YIk{*Oky9XnXrh#oLh zw4!m)Lj3{uYN&W0$Zgf(IFJo<5<@Ig8@~!OGh+n5r?k0UJJuhhY3x%-L{^(ooZf*{i^uI~SeO}RG$)txA6@_sset!Q zk`&1!P&km!0^VA%>G@_4sf%M^Utb^4Q*L2~26=}z0an{I(7{(~7A7_NO9;F8G6UfL z*ugOwhCqX#c@mx2pw-dnXr@?{d#zfRYmO+D$zVtlzyOYJZd?bq0JYfsr4J(%WxF!E zIjgd(soPA&M^izU{zF7z9D=K-XDiucdU`sLYpi{n4L|GjSbtj*6KtViUtK>hL^yOGDM|V>+ct}Z2E*REX`*LCae0l>IzZCvLj@m ztbnlu@S#c|1Lbw(LXu0)K~ge+!2-Ag571SWRbI}U4-Vwz;=;}6qLnta1y0EMSu41X zymP}irETt9q+=v>k0K8RfxXJqGb30y-6HY+$fJ?b5`DgY0#>x-;jGLgRct0 z33*-1>afgUu_Y%L4^_-*eA6&S*oufQSx->m;o&Ew;%Hvxk6bV8LI;<0L_~t>A~`w? z5&Kgvj#)#;X1uX725dE`P?6dhJi-5R3c+-Lc5I$jTGT_$#tp(OIMtGunu#ev8+m05 z3r zcy$yXuYd}5C@E$?HMlPXz7Rd|tKe*}0do}_E9<`=asbc;6GeduAhMSe6%7u za}ZtqD{tv``YCJT*H?NRS6$FyT^+MldOw*Z<;9mC0Q>NsrEIU_;O$=$bwEhVFPR0G zFzB`bRI{WMy@9?oqGGQrdi!|VEqjwj;iD9mFTgR4&=lcRV~)_Q5IHhz@vyhw)O4H$ z6QYhIOuroAuB%ygy(Nb1pcy{gIe zhTc6HT-ylg4_{cL^B6?%B*PV`*N%tM6CuQ{6VbRE-84nO)T!h02RA3nvp3X5C|~Q2 zh_q-*D#dmt`D>T5=8f{$#E9&88T$_vmO>@3eqFo9Bq0jz^;m9saJ`*x%1zQR{&_3k(W0ES}b#<32 z?Gxi{4;&oC6ecL$K*eoTv@?}UD=37^;qf(C|1$!_#14Mvq7lLnYXb~>4M!+6VW>rP zFDQt)=@|&g%%^QD^(OEc7qThzBCrrPu%bQAdopRILpekHRj6#Qz}!QSL*NOygY@;) zIMd=PswL|_nwdO3AvG+7l?7Et@|q0${8jYGY~8s&?T~+XSx$V3 zJ3kvyVpArwj)CrvCiGuzv2()(j3%slLJZ*;8-{j(lH;HCy51K-+7c}M@{e{BMT$jq z!~tOdQvh9#Ka>6qwIF`@fRXb6kx2M4htK1TGJzlJ8d69xhd)aA9B9LEY7^hW)29MM z3SymLq@NC(g04^L_}`5g_SqnEA^p*DONvTwx#8rq zIWmW!fQox~x&ECW+n*c?1x5fWygz-h!Viy+`3AC;)x!za`^PHfSR_x&jTZ9q5Sb=a z&=8XHK!_G!UMY^OT3=gB^qOU$qzONY#n@=JNwwMmpcT9y%Rn90*w8>ffhW?0eQ4({ ze-IoLo+9c8>SJl_^|#BP&zIlN)%b~M&I%!iJzG&s3*BtqZy69DM+m%|Gu^5_B4mGtYvT&m{qa zGM~5ovl^mi&fCWoG1!veMqc#)Vc_dOQL_JYO3ZlxCgb2y$H1Qg5Z_|LeL7D9_*^H- z=LH260Pb(U-VRt9k(>wxa@&;d48tgxhk#%yEl!97=wEp;lK$IhpP1TE81j&f!&r!OlXb0 z|Mk;Y1KZTe=LKtRLJ8X2Y%tTB6lM>(Kx0upJ8`z(TBo;%N^WZNyrY;d&ii9hRsPrp zWFNU;fNAaweyXFO*w+n?4I#d#_x(Y0%@5bS@C-gTxA1!3Heb#wb;lkgxy}wB!J609 zw>6LH0VhB3H$VN*O3uShY+rjlN=`tjc7duj_2oBNO|ar!u$Ja~j>UIA5A_#$>uTq_ zEY{|^_9(^cW!&1gS0O%<^fqQnAcx- zIn=S{X*E-`HU6Qs=~2t(ulIWg<5Jxaut>h`miN<|^VNL+bjEFbKAXPKz5Mqp5oKYf{#bhu&pqnc`q#Kkui>lTC}V2wew!)gLKEIega}(>F~SRPA$9 zcKv~GCY|0WiL!L+u*1&3&$xeh$x+guakKmO4}leYy5CteNchJ$ee!HdqoWI2i#9j- zRc)(=iS;{4@mVcnr8Lpf|BPX~byplNEwky)Ts7RTCT?I}_VPiplJE5f2qZo*8L4=j z9Ms|#={H<>r+Tk1GC5ZSI0i!JX5;qo2!@9-`K+_uPZHa-=*<|^3OMMu-kvGVJJ8|& z8LfPwpPY*YxkeF9G^Sr*gscu-v_nIBndHvqN+1Wh?N9n6zf3$nEAK2&5 zl*t@4vjjhslW&U&2oN(JWRFE{zCU*hcrg^^*hjDS3oI3z45Mas+RBq;q<)b~-GZ!f z>`E9+ce*274V(M)vK)mLcX{J#EKzP@!bSR}vJo*xQDe3?;w}aSW@XrCklN%$AdOMz zeeKP6L3P8g%!4U+@P<9ksDAD=-RXYnn=Gx&?_u+@>_1&Yp?3s(dspXOh>NBn%b(9$ zJz|SY6?YtbJ_(eDKO{UZW^2-Vbh%C?iXOk+2zUr>efXk6JWf-2_~(%F-pkOl^yC_L z*$h-uxx7r>z0f|=;gfL2SV_bC?2_~p?av{fF}AZI`X~@BQF}i1^3rq%^&^S&T6!ERWIcwZT%zi4qx{}sbb18b-@dX5UhFo! z$9fB86Rt2h%jM$NS|OPaQl)CSr0s-XlU~iin}}sU6eI_fl=1q|`bzS%jfdI!-d>C9 z&a>Q!QGR_hg((>CG_gofbG^eS;J30Aj{H58x-r(+B|!TlLh*EWj5fhHJEOLl0&Q}# zsBjHBRn*_8yQ1%7+^Ogeo6SxEyzdR^MOoSRr<=^1b`NDi_B|br*$>o}`m?q{DeXe6 zM902+OH7*#ys8vhQYz(5s<%HDrh9%TmODq$?w0bfq(24zEF75Ypklm7^q)A0{o+ZN z#AkJP{(e+V6qiy=TKV1IE%i496Yj9fuO&lGFH%_ArxybY@mFokDw)@Hy)>N%Ck_T` zFEa(H_czAqvze2*UAieP!UO5-5Ymg3M!IyuyV_Sg^6I&JtGyjB0rb#CnUUK&)w}MD zcBAu^d)c`~yFSL7`o2De<3HFw3uoYnf~=m+f;h^M(!2ZhOCRfESVY?GzSkTYH;pIH zXSnab0$zMvb=DR7D`DXk>;-yF2l(J<^p0^C6ylxLS5}I9sBe7I>ETUT8j+xm8Tfr)o}`BY&xnRHByO ziFR{1p<(;}ClQx39!;XT+oZ>?Q?^|1a;a`3n>L~5;UxQ5A6e(>=yjk(lICv7KQinU zoPUq}M{9u;K3=~8cw18+orTLN|HBJ7INVx^vZ9lftz}OvnAUf_?e?IZYh%5foIJPv zT-9Ih<-YI@eytYKl`gBwUBN}bvg|;K+7+_Yj$7B5-l1AUmyH4C!uju@3|cmirr-V7 zF4x1kWnZex`y(K-OkvNbPad!b*Hy?MP5n(Pn+|el^H|(W&iNt?Pl)nL+(npmhHk4Q4t3v`0Q)Ef=%Ud zeY`wf0K+Mk+9CAmw$n(ZQi3qV!u^cIJREXVU5yb_@qDJ%)4iZIMmbxMo;Uo^GwZ7`SMLah z^evfw1^8b?TJdiH3qE^xLgkpo!)cl;dFr5Ofi6{L7?LqNt>$CL)ymG;7{=kb5-t~- z)&66~@?+aU?Byc%DfXccb@_LZ_L>H|9|!U3$Z6pFJByf_&RmT|I~T&lc1RDm974+22nU|$b=X*M02?n}~l8!#w6< zVWSY2NZoEFY{rIsV{gWm{l47`)vq0M9R{Dzf1$3l5B7L=a$a^fnTTkwdeqr766f^N_pF<&}A zTM=D(=Zun=Y~|?l!=fsr2MS&_UV^HDvbX&?=_SIF9Vb?#%N%@~^*r|5iiqC)yQ$mv z$^v?ho^I)SRVf(CiGhG2zPCjtuyZzYvs@vf?Jw-=ivEXP+S;xbGdfh&3A`P_eRTfw z?5)4JdJDgQ!e*IRV5zD9awE`G_rm`*#N*a-G$4}wT8fHtHh6VMB+KhyMv{>`O82Bd zQLZ+lv?F;f=x@|FGTiub8kCbF(7T=3q79UJ=fG@#jIORKSim!i zT7^(VYg(WipHZx+sOlj2L{eyvlvEh9ujN}Ybmm1e?5P49pIn!ht2xCPhd>pjoz12p8`Yy`{S2y!5{X|&X4F6H4z!) zrG^b%?X~zjAs4-aq94aPyuDoIY7|QdC}F;0&+Pu8)fuo&`7i?P)q?ev}%& zU6BZqd@K5f!@|;BfmE!SMopwOEOb?AR@`_XjQe>OYmq>6bKYm=I6~5=PPTrNzfsyO z`}FV9F3Bq>5((ZttNPhFc<9>Di;A#7<%eg*RSruIWqA8bR>@AL66(Qi#0d^~V3MV@ zeV|vFr0RU8EWS%;+qBsugD<*J-0e>5^WQlE&zyvi`deVYvGUa{v}^g3W?CUdU1|bZ zHZd_Xg9Yym{U2Q_u!_|0biXyZAzo>}c0Sh`t||F}v&tXVt!Nl%Z6UX{11i{`a@zZ| zIw?sn**i%Uj-N;D&>rH2X~j??gZQE`>wUe zdB;9$ob%zFPZ_`@GxyA#_htXZl?JfPs!kh7kg*COKo*pH>q}~w9diTiO72~bVVL? zKIf-)#d%FK5&%oGO_ZYtsa_=NpSFbJK5^yk>~8Q3>VBG&a#x9q`yD-+`{K(9(f&6r zmb3R|J{#M_@fl3n-pTsP3;t1?P)xE}pJ9D$%=eBgb^d%!ZWL=;*DE|Cwrqlu(Qe${ z(rc|XUdIpCvd<>nxT)`+PORbAnOERu>6bU6F6c1BIoD(3YDn&;CTNt2M~zi*7a zz3ZR~FQSrKefIt{7ONK2gFj4@85MQiUxM+}2$d^qi4AG|{9!F?mM(bP(0lE%n+PqP?z3-jQ~_Q_-QC*gtnQ0);Z{K$hOGi}cCt=ebk&4R zbg-V&=QPjd3zvrECVo4!j^8766LL)b0X<2aU#6?57O!u#`Dt&9mRD{_`BP?P$cuMj z#XdO(2EyDEyDYNjZa%4`=booRHiYn=?RW0`xSXP@sXBYa-yR1(?)RZ^&EEmrA3@J? zurB`)x0|!EsI2k5zTqO9SQXue6+eo3GI#l_eZB>NR`TUcMPHP*ms@$PnLQtkPp(ge zpYXX~Cn;b7)c#Pv1Ak&}^kp>GODCD2n13I+x(^g!YEYhX>YHWR<2_08enHN@qp0b8 z(|xS+iaB+sQ#VykSO7SQly5+u|9(zrP8qW_o5>?&AheN|mXG=g8iQ@$;znA-V90Ubug4C#CHuOPr|0jetun$o1hhoI>c^8V5fZ;aS$FQ zDHynNGfw&RgLPz3`10bUSJm2<5VFy_TE3sFd#R=DAnE%!FtsdaqUuH4M(%jj@lj5R zKt+TM>E%mS{pxbKyQAZ`BQmQ~n-~J6-S_R5eUOYrCrO_eQuCn?ajVTv>n*;W3P5h} zFBP9@i3`wW15cF&;nJtwMSk`WnHHqT%dww#*jAn2@LXOO@L1p*^2_=U0F2Cy98+Z1k~DZ~l*W z{{H|x^&go#&a^LOAvs)aY^#7G zqX^SgElrWWtrM+=_mzUrIxI-mqa$oGD7l?z{95!AR?g;0dzk=8`5KY9!`X$KFJ2J~ zn_b7E8Cq!IJZ=x#S(zVTl)PPK;=Lj-$8={6jruuM{7s>^95tMqeQI_&X>$m;$y4?y zSQJ?IF`o3*&LN_;n?7LKVASn#kD0B&)t@W=dXlE8-&l-P$4BUaIhKl083MMv`dU* zavF&$3o{QN=!R3)hUo0)-sye~n$Ndd`1+aztyceJARU-5rmu9Sl{K^9$AKZ4J zLgVx_r3d|JDYUeuK`{foy%#WRsan@VuQ=Qn)&9G?645&;_=q#o9)u`WGc6|r!t8=$ zp7lA*KLsqqa9CYE?476b%TR5+L<%yc0Y zM{zCoFmeJmN_N4yp(G=`ab2FrUv4A(vAlPTvAFA5FWMY6Fxb`bHchfkCd=#e(!`%y zja4k~pm8>DVT0(hV1A2y*%gTSkrAgpmRwg_Q0@y34KVkY#4R-*W<%gybbZ;cAzxzY z*#>ixUS_oBPf|m&Er=)$|5Q)9BQ#bQM|z13jhs35VtC4E`@K3D|xDC-Vce zX@!uZ%f(*jeH5H?{0H``si}xfz`ZwZa*EW%MA}cHgdj+BQFng}YiKpHd4-ZkH=4k_ z8u!pMNK#5F5aoXG&VTE+P>9X8vpT4wsaG#qM7z@{u_>Ea;oJJ2+iPXy=8GnQO^yT7 zn5v{31YHBet z%iw@k@dBnT03#1IT2^G*b8JsUoIxt&0~enG^TlhlC`>f0_zDl8X4#5TlkqihP&rAq zLcsc`n&y3%_2oOs5*XAVYrPE$OF9c{3jQZi(_%Ybmq1`|5NMK2`Ov#8YHIy1bCCvRN{f~!Q8km7Cd2=o3%Jq;zv$>V z7xEX?b$Pe%-~EX?nh!NF1TwqaE=gl091}UtWqO?*wC)Us4i3Sx27_L7B<;ibC5U;o zBMnp{X)6z17MoB}`;!>>YeZ)QW6XBQg^k1m^&%NK`D#-6n(t9=jrla&ob~;csRof~ zhc6gLN0^jRQ6*S(2>fEgA5oD56%%pNODn>Oh2*ngR?kRBffy`W!CH2(1zxbD|B(H7 z^?V2J>s2jE;~D&3=^hDW>0kz`mbdOO{t&6)L8A?+9z(*WL2y$d*ANzAJ95Jz_XmkVvpokXL%JKwjc_+&%?7EX;kwfi3|v zlT1yLEwW71HyUUKKZo_vf_^CNRRA@Cl9f3{2YB~R1~FgCb6lU!7$xT9a+J* zOpGC>v(}pDMdJuvNnJTL7k8B}o4cW57j2+-lfOg`ppdb<_H{$!%A2M)mZSMt%ak!N27pJG)o@%u{+LACRXZSwq0V5kA})r3 zt4_4*dt95Ha(Yr}27)>_{rH}MA}IfZXBV*$NjApU20H~%R3;5OuVdo_Z)3hVFda*XK=5 zuv!1lZGwdEa=y(KHTvRV0{{#sIRf_(?Bh;7lVFdoBb~?L!tQx8jZ*Ii1AC0+5V!bv z)2<|2%trP`@~MG=rd|Veg%{aV{R;qkn_W{bPf2aJ0j_klFAfeKO-(A%8gVb0_q#1MBo!WJEhFEhBi!HOC=nz2C%sb+Uv4V6{S zl?Pm;!Y-8wOWMbJo3u$kj@R#ON={oKGyC;|ud@f1kkbM^)z5SrdI|L0(Tf2|8kTvP zWZQ2OAGISXLvgY4$JMbOT=%son4i|@`ru!Zb>Hm{edH3 zfhbCR`_Oi|E7hwhE0U=pJI$WVYbYT%69SK+XCs%mqSS5)>n;C;!P+F{p5sv5I0S<- z4SBv4o6zN>?9@+#TrDI=54om6|HD6a1zCf3w;GvM_sKRfm{k9BBT zL>$lX&m9BRm*yE+O6i?w{Sj=sif^sjItKrM-lZ|UsysoagP6*gjHZA&WQm?MN!l1%Tj?hzN)9((D2e+Pf9$mdX% z?jh^0YNv!}?d9n`h#|vYuV1`}FKor5KK#q-TDD|j-pfQPuqaCe z2H#7WX$zb-e&i6Y5#&_o1BEj%#3i79y2OsWh;-rC@ko?lbj0(DQPzyEv>JiD2Xk(a zkd}vrithFkX6ETW9y*DdnpXZ8{ej5zl`_iwlwtZ-z1H9V58bBJt$(6IiZLaTr>jPZ zYR+ugvd2;Wco=mZ7p%xG3K@lRpd71ej|b|mBM}^@l$r9#x6bd&eST_bq+2n`VEjZ{@mD3nHR46} zEOUH=78R<@fY0UBS|&R|np~S^Giyu;N1N2nhej^f(xWVY>(9wETkgj<6GNf|m=x&7 z5Rt_cyJ2evyVddkVvt#a(DTRKgeSH-uD8&`HHmEJaMZp{Pn*uG;4sUE{Q2_-!TZs! z`xz61*X)6_;=G>H?0T1iO7CbHHTO!W+PKO;!m#-vCfB?rq*=1^BBRZ=N;O{Z!jfh@ zzNoPB81C%om|5Y8$HP%+fZ9!39WHZkY$F>QCb=3F2> zUgyh8ia`3$UOOo(bTT-`fyfK-h)3IimquM9y#?4+|Bgh2i)oLT-DJGQk)YXL;i8^- z51$Q`J|P$PzJ`mfF7rczFts#}aS+o_>r_wd3_B`cY<=;wbr+8~x<3w=sncBazauQ>&~j?;gPAci41BzIY&OXc z&O%?lvz9wJ;UcSGzY}X7n){}ugwzard6GB1VO27ewXu-7rT*hBl0Ja(SOI7>YkhZmdm!Z9g{ z!Q&vgj%zhuG#n7oSt6p8t+-P8u-s^42#>u?Z!y-UCaiJOuNJV4UHiv9NhdCawAE^| z!)BB2e+XY@*;N8)Ik<&+jAaWyeqc~=Ibo$m>kM8(MmpLOG5P&;e^J`-Eo%&=wTgFv(}p-U@q%WNF7}6)7BV_w7|lfrFyo5;Mt0Mr1>8>P zQ?J5Q=E8^hKD1;hwey8QwMy5VO>*jcfiJ?pO5Xkm+V_t$d`-m;2_816{jB$Vq}tY^ zM_#P=9w)WPehsJ&uh1+?WdAU?%u>_|XAy=bZC+;lqKOLl(5-k+Xem%}`prFGaT#)+ zY-KaswHg5!swn@w7h)$9P43nkv=vS#9GS3R=%&a<*;A?UGl zkZ)+nWVZZXmEx+Gro@zyAb6jP`xP{SxOqjWtCu0r+JVpW;-XB;9%Di}haXuZObJqd=yyvKGvf0Y5Qw5{*dgbpMg^;zK|8v*V8(I6kq zc4l_<>PQJri=%kFFMECRL$0cA!t2!1Q;MynmIe|^%CUrIl63y~PZSRg-P!DqmH@1E zA>I6dk8n;N2^xaaYTy3(->p`dXkwx1DaMKVk`wg_8J^ZKNTF$A45-q19dW-(={#d8 zf=7vM__dY~Q4fMF7uYeQ?e)D~@OLJnH{8l}o4EiZTQ6QX6C)|%81Lj0p_Y~O%g$XL zV?;4)*KoD@y1)7P1CwARq!~F6mTI=dHNItf9*l*VL`wGC%R{W`3O`seE=Bj};2&)% z7F4m&w3H(;e0>?&VW?&IFL(#0tI1cJY^}vC`cWojjwDcF1#pB(;O3j5$CtgMEx6Mh ztjV?ag$}ae8&D9H2QAv!t^_PZ}rOLu-`ce5| zi8Nf&B20GEsdD%3ShR{@Rk=%)S892*lb~I+Z1Ch$lM(NE2$v zmzAl3ssV<{TQ&V($wMJ1fvkG8N+ZlWTgOb^U%)TZ445M~{6MU&67O zv%$3BU;dv~I4#XAm_^b9>{Oms@o_1FF*HmeuMZ9V@0nlesQr46zbPPwi-V&_7IWTI zrOR{lquKjU>apH%KGr#r+DCtIz}1SlhjS@xbfF_nnV~E42^okmc4*&PKw`FD@n%ZV zmJ@CWr1|!U@34RX(0a>JNvyk*{@Clt0zj=F5VvlyKUFrKr0^pH>*Yf#)=TM6NOWi_ zla!x7pCYuE8fBYX)XB$n*Ae<-REz|Sjkk3O-_2t^IQQVxV`w`lUK){M&{d=0s=Dy8 z>;dBHZRFRbL{41K{C6(ExQ1cZL)_nzhJm5f<`RKY9a}t<2+NhWL`J$hNY@`91q`RZ zh30Xeh>0qgPt7FivAA4UV+$`fo<$CDeoX$*{TeG6A61bOn>l%{e2`iBB31tQl|XOO zS<*PI63f1bN1bDM1%u}@gd+I{OH5y8B7s$;ZL%n#xtXJnP+5~oEEK<*x7$y@;&;uC z0{YF{-e0GPCpSz*7m+QZI-?G~7RO_H^B2k=I^!$&_vQNKzZw2kvUFLqK^XGg>MP=P zZ^Ur2b2{NXOuyn0SSx zl4~zx8luL`9FQz_MBqQqo_z4hWMx_Lb{Idqcom_P(KA130QTvMWjzjbG|kspX^)?K zR$@$48^*@L5FScDJInPhYP1ximwxec&H9QDtJ}{L5&hM&eKuSGo%|j{^Dhi)ZHp=X&&`;gl(hzrcAS0+mV1b|(=`fEAx(%D zS$w)KubEcRds02ms@ZuD++FF4Yg-tf8QV{Ju)Mv{F{sdM@%FD1u>~gTjmng)E;QJT zQ&a3))9Ik;>gfpj=m+SROs`wdRu3H&Oz*y}-3n;xl5IDH%Z4xBHuqs)T;2TDiIEuG zZHTs&(+(h#BFnh@^F3m(OXx(LX3Mcw9|7joaI*5wDB-Ab(7lS0D(HH%VCJCV1NA4N zT2m`^Nanl7yVdX3^`nN<=)@xdYb(y}t!@0%zz4FNFZbX1EyJr-Z@?`V&6h*N#@~iE zE<2LU04R@dnRE`qi`ShivEC+RW^JCJ6A^fo6tvQ^GGFZeUcDw8WU8Uf84(#aH|iLu zz9DjndU`J;xO7QV#N3*g_HdAo)t(;0M9RRD6VJQrWfDL=gf8aA2Ggd zuzOx>ZVyBe8_K}Q&a?7^thO~rl&q{VmRLJf=hR&&n66o0R&E`CU(8 z;GqbdN?H}s=e-@x6m}QnUyTD_4!ZALnJELjOjlU}_KK|`LAT8sxsS=wW{rNg#qHIl z+&Lt}0pzop9u=5z<`j!{lrqGEE)%=Iq!X;q6OLtTZ}UrK=dX56jo6O@q%+JkCcg5` zA>C*8YZ}~XIuy~e@?Fg`G_QzJ#smb2FVD2!n&rc|B{{Gsxf2Dn(}bj!guwC%#Vrqq z-R-hTIR!ox&jPeeaT-keVDU;UGXE3r!GezhWsTO383U|>uGo{X0$2jd4H5U_akm6G zZTa;MVy1{K>sT7-)s3T>mvwbToK5s^Pt4N zXOs4suWrtJV8W;^D?JTws1z-mWWZN>)5y&ktwkhPF)P$Yq*KmAO$}M zOp7ECyRo_KkxYg}wu8E}u29bxr)E)y(@KZ#Lh428?kl`ZvgYqu^d4^$Kd7J5g_j(d zB02{~91cxlG+2|C7K^N(r7KDq-*{S|MdU1d>CrH)miLUl8YiB6kP!!s;&wsU>{cqI z0Y~N8+p?zb9S#1*w2I_UQNcBL$a7QLqGea+{E0*(^8?x5^T=J|| zGHsHsrGer>9u<18lL#Ao~^A7hJ3~u9(Bfvw`?N^3M4KIi@-9F!dvE$ zNTv90;9R8uBxm(AO;vyII_3_+XA>!9_o6*P{qc&B26ASbvgFL&{_-hE7ntv!W%-DR z5w`U3_@yLap@|I~x>eMkW~=+=Y9}i=B22nsc~+PG;9cdaG_L#@t6B=k(L1$|nv*lk-<|$f)bVWLJ`N>;|OB4x6f$1_w zhmk|9_!fp2eGCzDS0yAFyf(`=(UyF+jAJZd^WoitKP(TG95kad#q_RMZAB&ACg zPrP9wb@yEsttAF7r%TFY*nRD9XX$`t*U~1uv~U>JPD5oXgN%3ljvUG&w~mvu!BCtw z6!E#69UcBWk?;PiU1@xL8RTZ6Yj|j`6fbwX#beO29AkCN7d* z5mNy@*!R)>@^|A2s!9@-^XirV{_sZA?f7Q&DZvwn1sm5O?xaxgmer|Amy0KULT`v^ z%_$MGF_|kSB@Uk5@9UB|x?+Azc8dwDY4}nV2iRLs%0P8LxZP_28SvlFM;x@5#CvNV zr|VdkbIgib-vPyHUvuwM*WOUv-F69k0yk^sx>Ia(X$&=DHH%LWd(^$8suIcMX(RIH z;SagPWv@ql?ZwVPXUo?M8ygdH@~`ROI!9(ZdndGJ$=NLtN9IdHJNw(4C?!JlY!yddR zpH|kmLeCRxBcgQE1Qbf>r9?v)CnU9c#(i8W>1=GYwBD5Fi~DCS{jysUMQY=`_{9II z8TH4TGH>~~3p8S~{qEYkuz|QETK{dV>!7K+2(T-HGKbM_k_aFSgzX?A-umy_s;9A_ z-t3Fx=;A56vBN$Tbl}}a&HYXOc3p;f0TBaU1Nhly?29{Q%2P*Q15E*b&P89HI|ap2 z7GmpN?tU?~MYCfQa@AzAr?wn(A(y8ws6BD-@Q_-5VmN`FGy%U!YIA`c_)V#1WW`9! zh0AK+aBn*!J~$lZJ2?aObLPB~0tWNUx(;9U!E7u$#@o{#5r=!%+UH#(CDyxdm-9>r zQ4Cm+?6y>25}oFLqsQumLU51CBKd+x)ZedLfv0m&T#PM3#7;cK0eL$`?0 zSCrPa=hf7+Q24XJCB&q3;6ua&bU-9;dzsV?)zHg$89|+@a>@y4MRmWK8HK33JcyoM zk$FN6Up5Qx3a@8@kRDJELh|FtMKmVeefYpP^;qST6vSlgcU8VETU+`L5`bla=e=(; z^_8WhiDHg1QcPF}LcGH`gam*`xNi8~mpClCLfN~s$m!^U?PYROTT4?*R@#%ri;nu? zYcqs^eYw&m9qK=d^#2|y6`LhSEXJK z`I&UNmIl^;kMM*&-CrB|Z)Wnz84|C=o$Y0`!N)r~-5%Gmv~Skkf2tO`qK9x0!(A#$ zXV;2idf(iftPfT_P-uueEBs6jdns^&YN*9Oo@Oh-uzSz)itwrT_KcF?dfHpYWwV( zdG1DASc!0+>K;~TCe3p23eQsqWrHX0Jez@9YQoz(n^kN+o(>E0)E4O#zPX&!?^6zZ z+2D|OhTpCG)?5BmrLTOs2a!TYoASR#r$2i>q-hJ^HEXt4wr{&yx`8RY*Y}*9{bz}Z;e}!OYaJxT!?UKtg`;z|MqaSa-b8gwt>vHG{5e8jj zy6hBBWb=5F`S^uljRcj7oSkSTFLXUqiufocJl?r-%%9FvFQAnji7k34e1{J_li;td zcgr$z>Oi3*7Q3mhV(cA&8K(8*iraWjvxWWZ!t5&dvdKR(vNzP__XSKF6CwoyJf@R& z1EjODDZ*qJt#pudzs`5p9zK70$JS%dt043h?f-V)Lqx!=d7v%*F7XG@T!~z@n(>Uo&w(*5aEpA*#dLT< zyRpI_J-#`VFq5@Y755-4w8Kafrs1yw`1eDjA(Kq;ng%(~OQk^flk%C?l-bZ%l6E^n z>RFg1@8?QDJYc@lyyBKgk)y{|B_gxwovP=%qZAVmeL=8Cb!p;FJ1;{s@H}-Ld^9wA zIM>L>AU79&BwM{_5z{!nwEKCgT$gZe6jB|L%#G9TLdNa0SNK_5#&cm{j#IIi+nk8Z z68mwr_UYP7##2^`XjW*Qju^^N?pF;L#yiZ=m|u$4{h?e}K(kGAI=`<;aK5A!Of9C=U)Se2XJy3$_Uw(l%w?026NOpF4M;n=DCPx8@iy>*S$9^f~5scLvOB;s33-~8$i2zK|nZ`+~o7C8H@ad|V= zbG&XZnM-C*1`z&zs-xjmgJ#CvX`~YN0V>DZu}-D6h7asWn9cA&U&JN<W3vROj(0Sd-DyqtM|KlZ`mevM9W+VNg|koHZj^dPTFN)6c#^K_S{oBNAsB{lfsjH2KW@#b=mw%pgy0Qfw_~+ez>A(oJ8=|sbjop z?AWJBx4uYlwDPu)r6qR$i12UaDS~q5@{dL}Rj)j;5>{R!rDsflsYh|Ar+ zJU$YrPL16RxpK|6PeQCrFfZEPC{Zbozkam?#&yZYVCKY!i$bH0^}}f@qI5 z?t0i;IZ0aIG0H`oT&KpYp6-UhUj8lUzR&}o4khYH{z9?fHx~JOT zF@Bu3ng!ne(mk5?=^+y_%xgaf0vUAnJehZnDCW!qEd_Pz8ynn*%?hK3vjB==WGW*!!Ggp+? zLAYqFX5EKt!=4lu{6(^_DMXxD?vaXspbaT>&RMgyt{7Zl!oEYH@16dQ(rFicGpQnp zMu}-Re-NV}6;I~zCkK_J&a5MoEH)zW-0XfZwj3)?>d8A)-wh2M@|9fp=J9y({`gmf zqF*!e&PQK+fr4-UiBcbHn^jgxGbzT6f$m7&b6~T?{0Yb>lNnaPrE?%93 zxY#5#!>VU!zXO}iN|w*HzK_88Mn#?GY0kS4!#b* z+|&hW&*0Pk{(3MxX?>Z4*~$F z)7Pf);prcnEE@Q47%EukH@W%gPrsqg>_>%{gH?}9Nz`y z-XFMUt*MU|&0^&K=CaZp!T+WnhguzR*w2DGw-z0%H1Gj#B;42IMxA=gK^*PUX^?L+ z@BZxcwcNU3;^E_4xE(%GId=T2Y#Q}Bt@v@-`Id`%W;JH@dEBNw@kh2~#1$#Uw#Zfz zAtYT`lk#XGjcoB@#`}>m*yAyiab?u!kOP>Ot;XOL%qZ^CCRxf5 z!|rOfnqKWHbU8WI_dFw<#0Lg@inaLs$S5cV5YuH)F6ffrDx`WhB`}bN7afW0@u38C zKxo` zURPX5@(R07o^yrRw0~JD?yg6SZHV*tktwpi@%3nXVE`3LWi%q9hmVGir%ncUt^^^&&;z5J5PoO5DY z+H+tKhj`i$9*^BzOkS0lF``_Pf|DXS7F|wRvm@#0^olKoyN7FL(E?zs+i_vdHR=R4 zbw;d|yAptW^p4-mtueLAAIX3mXQ~V8hLA;<|1H7_G&c)OGCm;Ak1=OSTH9Uc5a|4? zg$n3$gGKInpZ3~N_+CQlWp6b?M~#pS2%Qw4j4gtnphLrqt>OV$h~-Hpe}1zdh4grn zm)dx8eHFi!axgN>;f7!v$!Gkn|cd#*8$m}DG? zm=s-Wx7w368EZ;Iwo*e^mFi@W)dsDXv&BFNn4mu~9k&tsBJNWC8ZH${Drp3kj)U2# zuXqRm`{BW-d-*jK5S9`oL5}mmVt=d5hKH1e+Kv`Y{Id3|kMDrskQ=cSk~#6rBhTBLV{1}Ix;@-- z%;~7Cp;8`ogi>7$r(59%7So$B;Ge*r8t`;eQPZoIVg2Ve-d^>yakeIiIW2;f(U?@# zGZd{ppaL?EUGHe?Sofq$(lqOpwp%9FbV$fRTtf`H$rI%=+K2!Ig3phcA01&VP}}7Z zss1p#knSS)?-IToj7m(O3bfJ?Y?F?Wivh+=Xyp96I2i}?k7(I;WAFUhJg=+~AZ2Y5 zgnG4ReMFt8FM-fBJ*Of0EwU4puPyrlLhxJmyagZzZ-##eC6Sp#hR}B%eou$bBN&6F znO4>F@BE|y-;VC%5I@`Nd`K)K6yxZ!NqTxpSwWUY+%9Op28R+@YiP$29T^C8(I^63 zyCwl7ogM!NL5u!i-Dv#}RBF=L!p|J52G98q;#Z*rnKTCR5{Nd5xqtp22Ymm>1OESZ zD)|4O{}dirhr?nt+Hz6aSqDXw;Tqyw5|n#G^EcUd!vI6Ugg%h1x?L{>YJJ?mip{Tl zFe(DxR!q{D%i`VD1=cd~TH0f0-egVfuQ2BJy$IDigD%;lQ{Vh;m(h{Wyn6_A;Gz8{ zKI5)vh<3SG$U2ju@plY+r}%$C7MTgebbU)5w)|ghihC^`Ce?Ea81)roNLjo$u`OTx z02@Z_4f@_ZFIOUaQLU5_diS*0MP%j){Bk!TfZ?ATY#MGMqKU@%?zz#+$@Ry|DJ0U& z5?ahdHQ1)r6cCk2T!ePMRX!T;-HaC(E-HepqzO)s04hrRw4UALnR%Ib)PK-4m+PW& z+`zk_L-Aa=@Q|rm_4Y}|MRvj)8y^`_D4DK~4>%xp-bwRj;@BQL!=M$?Np;`CKvZ!z zdhrV$&Mcgy-JdfTQ5s=%q(XFGOZ(E4m_eK^K&Q@ihnuJGkS&LXKZ_`f1<#%>zbt$V zTZ3F%^fWplo~}n)sh2i~MVG_F!&95+GDJc9?IRU7Vj2N04=C8j09V2N`&Eo1cwor0 zjjxTTp7^>M(+M#YTg98S+&H&LYdwee%&MFv}E{K!ee@4Ric z%fIhE{R;hMk3Rm(2}<*Mc(jf4x@)!=^bfW)xK4%EL|mc>%KHG2N|nx4N~DmBTB&}5 zD~ewn==jFM9K7y@x^6=QU5>)>Z?IKSAgQ5U^(@q0jnqFYe&2OD(F01jF7B%*QnNqcI1?SmfG{>|C>~>} z2s$YVqe2)T0V2S_JT(d``V=v%)-9k2{*@*V6D8N%*wd$8% z8eT$dh3ggis2u!KT9i^EyfiCi0H zD>~q|faiD*OrO(d4RGc9kX^I;$20}^fgR3faO_~Sy0`Em!Z$i(ci`?AZ*?jcIj2N+Wl%1qTOf+lpBdhDOeRS zG)rc5#Yd)WL0t6*`85n@9^A} zc$O<50`6>|TTNDSvFodhO!!B@3PEBQp{wVjgjLtbV;6xr%zdo#KnRu&m-p`eFE z#{y!{We}pIymo1eSap;PjH>0OrR<}A$2>IJKO2mykjfDv*Y9+8%@VPQYZhw9tToHD zpbCQ3lsrUNmn`{mU*E z-H}Jd3nAIJ*-`1uOLN{MtX#UpTHp88lTucFDH~SFk9X8b8_r5n4U7yDlt{Bt0chEe zALC>N{^hj0gyELLRZg59ct(Yu0Vu7#F$g;z9uV-dl_~54nt1MiTFrlv&ffn^#46tM zpMUzFrK~*rc5ZgW+J-QRAk?9sch{9YC;bTPUKvk-Z<%z{p9G{0zVm>{Y6F}+I~y{* zarL9Jn*xO{pf#^&Hz*QV4SXP2XyiNlglzVy6dAD;WC=O>4GahqDPEh})8X+cL;q}R zSs+>r6^;B-_0yHgwC1a^ZhYo)*GEdbZ>jx^JuZ4 zl;5kKRZ(W$-~V5cg7|^!TW9ui#Y|hYjJrw0?stp<{!CaoSQXPzpYDxeZ-kAlb3gXS zFpenBo$VEjPygndwfp6qt%|$5v%Y6NTASCySCG@ba{CyTd=iAnY)n0qxVmx-^kk_OELvG6~H$!yvf<+L3&IiTzdn14MEndmc3=+ds z^82e066_t#f?pntgo12b!+mk1a$%2daz7r2&4BvG=^$?t6j#o-$SM?NT*E(sXQxgk z3)QI`#Wok1$3TP9Z~j^#t*b9bh4J>H$*+0{S2MQ3?=YS?+_V=)g6ImL1@oyg} zJ>Rb~v+?OT^bEgJds!mVH|Qbpp)6Y$pn6G&7!5SbR^V~6jz`tPtTTwYiu&->M`5BS zdoUWWJLjK}j%GrS2xH&IIGniOEb(2B0Rq1}a3t?&1q(^Yr&NSWjZ@-4Vl1`K(d-xFkYeaa`8YqN7mMO8H)Xrb%jx0?lj!0ega2(H zaX#v&^DKW{a!4dm)dYQ^9;#trF2>-&PO#~c`R+QR#djgcJUFwL80fVww+y(u%lqY} z2~K6YK)ZA^^FU{#C&U~WRFsx3XxJ+7M8pxOwX(>|%%=O@AMPh^Pbwn)xdTU;$exft z0*GqTi#IR;QtPD?HkBz6hzdokwHS0>+FRy#?!~q5&@%Sqho+&6Gv@ zZ!ig&`-Y2RQqe=Qq4kTN`FSooWCQ(Po4iyE)T##ez3p&*n$O4VWbB3#7qbw<5uPOh-bQ0ku zq-nK3++89zftAOt>U(W~+u^Kky+lUgK+;_v!PdUNRaAzzSJvmelMmAx0R4!gyW$Ck zO;to7;A!dPx7~7*UUV5K=ySGNH~xB;-Q_nsPftw-qkQyAtMSEh4;v$)47P6howKG49>Z*K7*$I6H=#IT?J@8UxV2oU4kla%Cx;;LYi6bh&@MU(B1 zj%KB7UbQzW&?F*gbbaZwu#m`dwU`A9`RDMG5U7*=iv4wIZK*s(4CL}ZY;WGv`rFg; z|EuXP1TZHWTGMZbt=}B zcQS;XB6BY>0B}m%J$gFD9o3*nMU8pc5n%ZwtHnSf?N@1m^oW5O9|(klv8ot zLq8vWebxBCmR9vzId1Jz@7aA;_L_@lR4Oe#w8DD&fx^d58B=5(1=2Eia?E;dR&(x7 zL3r4#bJgzWX6Da09{yCt#dZF+GkOO7+pfg@e5190$s4Wh3k2k=r+u#tnN+vC=Hp9X zJM~V7rE&2-+p~Y#+_etJ`j}n=_5wDkJFmJVER^K`eD@FDa0$2lsv+SD&!)fndi(t0 zd6Rej*jaF)?)`xYj;Tw>ea0hZwl>yO8k{V{)E_cgcoXilBx z^R+P>9@WjC<@@u_-zS^Pjk)6wEw|hI^lkZ0^)$C1tt~f}tLIeeA4`3;>G#UX6BIhy zUcyeCZ!@rYW!v}v+0N(tPi5?W|7!|wRnpl_4^yM3>HIg_|5lC_Sl_e(E8W__r^ggN zbH03i?9`{t-kx)T`J3U_A}{TOmF{-C6?|sTk6$KV@cfau*t?Zy?|n+H+RWAt>_o3q zY|PVLr6*$Czgv0L{Z&y@=YBcc*L(kR_ZwgmoniI@I1&bIkWOF+o}8c<2OK;D-kL@2 zLkx&*3vB=M_xpWWtC9p@4cn5@pyNE}D^u-hT@iPn6FWFg7#)c$0$z~Q1$HBAO62m( zcMpB80p7XDL_$P-K~lAF%71j-axDqLN15j3PHqgd9alN_aV zMyT$_?c4Fd>(+rcr#D*m?gt%{kWu--VsW@Yed~=#ffV4~LTMLXtXiej>2j#>jxHO> zf{UO2UjF%?pMl~3f4Ti8ObiSRY@j|AGlSD<9jD!CC$oVf44$rjF6*2UngGXw BbO-qVuKm-y-#%17`f~@y1_}_C^&%_;=E2D1 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%0D!VQ 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 literal 35232 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

    FxhwDyIDZINLx#}bIx0P2!( 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

    mCjoCvZ2li+P$W5;`42 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 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-set.png index f098611098576dfc225afd52937f62f9c2b7ee99..04dc5e3aef9cce947d026619d50fb0593c918c1e 100644 GIT binary patch literal 40690 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

    8#S$BlP%o*zM2PyzS5pPf}Rj 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 UTA#!KpZp~+ts+$?VHWa#0rK1$;Q#;t diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-set.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-light-set.png index b262ced89bac5a4eb55b4cf0374c7259503b96ba..c9d28e7172bf8740c1d02205d36d854e1529b612 100644 GIT binary patch literal 42423 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 lKlimwECT}r8>o-O%y8{Lcd|`az Date: Thu, 29 Oct 2026 11:00:57 -0700 Subject: [PATCH 30/42] refactor(ui): only a save that changes an appearance value waits for the host's answer --- .../src/components/settings/SettingsView.tsx | 20 +++-- .../SettingsView.change-detection.spec.tsx | 7 +- .../SettingsView.saveResult.spec.tsx | 73 +++++++++++++++++-- .../settings/__tests__/SettingsView.spec.tsx | 12 +-- .../SettingsView.unsaved-changes.spec.tsx | 7 +- 5 files changed, 95 insertions(+), 24 deletions(-) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 3292ebe98c..b37be59d2f 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -43,6 +43,7 @@ import { } from "@roo-code/types" import { vscode } from "@src/utils/vscode" +import { APPEARANCE_SETTINGS, type AppearanceKey } from "@src/utils/appearance" import { cn } from "@src/lib/utils" import { useAppTranslation } from "@src/i18n/TranslationContext" import { ExtensionStateContextType, useExtensionState } from "@src/context/ExtensionStateContext" @@ -398,9 +399,16 @@ const SettingsView = forwardRef(({ onDone, t const handleSubmit = () => { if (isSettingValid) { - const saveId = `settings-save-${++saveCounter}` - pendingSaveEditedState.current = cachedState - setPendingSaveId(saveId) + // Only a save that changes an appearance value waits for the host's answer: those are saved + // all-or-nothing, and a failed save has to keep the edits. Every other save behaves as it always did. + const appearanceEdited = (Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]).some( + (key) => (cachedState[key] ?? null) !== (extensionState[key] ?? null), + ) + const saveId = appearanceEdited ? `settings-save-${++saveCounter}` : undefined + if (saveId) { + pendingSaveEditedState.current = cachedState + setPendingSaveId(saveId) + } vscode.postMessage({ type: "updateSettings", requestId: saveId, @@ -490,8 +498,10 @@ const SettingsView = forwardRef(({ onDone, t vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting }) vscode.postMessage({ type: "debugSetting", bool: cachedState.debug }) - // The "unsaved changes" flag is cleared only once the host reports that `updateSettings` was stored: - // see the `settingsSaveResult` listener below. A failed save leaves the user's edits in place to retry. + // With an appearance edit, the "unsaved changes" flag is cleared only once the host reports that + // `updateSettings` was stored: see the `settingsSaveResult` listener below. A failed save leaves the + // user's edits in place to retry. Any other save clears it at once. + if (!saveId) setChangeDetected(false) } } diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx index 9f95ee3c47..6704aa1cf0 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx @@ -5,7 +5,6 @@ import { renderWithExtensionState } from "@/utils/test-utils" import { vi, describe, it, expect, beforeEach, beforeAll } from "vitest" import { QueryClient } from "@tanstack/react-query" import React from "react" -import { saveAndConfirm } from "./saveAcknowledgement" // Increase timeout for slow CI environments configure({ asyncUtilTimeout: 10000 }) @@ -506,7 +505,7 @@ describe("SettingsView - Change Detection Fix", () => { fireEvent.click(screen.getByTestId("set-reasoning-default")) expect(screen.getByTestId("save-button")).toBeEnabled() - saveAndConfirm(mockPostMessage) + fireEvent.click(screen.getByTestId("save-button")) expect(mockPostMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", text: "default", @@ -558,7 +557,7 @@ describe("SettingsView - Change Detection Fix", () => { expect(screen.getByTestId("provider-value")).toHaveTextContent("baseten") mockPostMessage.mockClear() - saveAndConfirm(mockPostMessage) + fireEvent.click(screen.getByTestId("save-button")) expect(mockPostMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", text: "default", @@ -595,7 +594,7 @@ describe("SettingsView - Change Detection Fix", () => { expect(screen.getByTestId("provider-value")).toHaveTextContent("deepseek") mockPostMessage.mockClear() - saveAndConfirm(mockPostMessage) + fireEvent.click(screen.getByTestId("save-button")) expect(mockPostMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 3ab2dd3390..2062954356 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -22,10 +22,15 @@ const renderUiTab = () => queryClient: new QueryClient({ defaultOptions: { queries: { retry: false } } }), }) -/** Edit a setting so Save becomes available. */ +/** Edit an appearance value (the terminal font size, 12 by default) so Save becomes available. */ const makeAnEdit = async () => { - const checkbox = await screen.findByTestId("collapse-thinking-checkbox") - fireEvent.click(checkbox) + fireEvent.click(await screen.findByTestId("appearance-terminalFontSize-increment")) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) +} + +/** Edit a setting that is not an appearance value, so Save becomes available. */ +const makeAnOtherEdit = async () => { + fireEvent.click(await screen.findByTestId("collapse-thinking-checkbox")) await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) } @@ -70,8 +75,8 @@ describe("SettingsView – save acknowledgement", () => { // The edit is still there, still unsaved, and Save is available again. await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) - // The checkbox defaults to checked; the user unchecked it, and that edit survives the failed save. - expect((screen.getByTestId("collapse-thinking-checkbox") as HTMLInputElement).checked).toBe(false) + // The stepper started at 12; the user raised it, and that edit survives the failed save. + expect((screen.getByTestId("appearance-terminalFontSize-input") as HTMLInputElement).value).toBe("13") // Retrying sends a fresh request with a new id. const firstId = lastSaveRequestId(postMessage) @@ -80,6 +85,64 @@ describe("SettingsView – save acknowledgement", () => { expect(posted("updateSettings")).toHaveLength(2) }) + describe("a save that changes no appearance value", () => { + it("is sent without a request id and behaves as it always did: nothing to wait for", async () => { + renderUiTab() + await makeAnOtherEdit() + + fireEvent.click(screen.getByTestId("save-button")) + + const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> + expect(save.requestId).toBeUndefined() + expect(posted("upsertApiConfiguration")).toHaveLength(1) + // The unsaved flag is cleared at once, so Save is idle straight away. + expect(screen.getByTestId("save-button")).toBeDisabled() + // ...and a further edit enables it again, with no answer from the host needed in between. + fireEvent.click(screen.getByTestId("collapse-thinking-checkbox")) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + }) + + it("ignores any save result, since it did not ask for one", async () => { + renderUiTab() + await makeAnOtherEdit() + fireEvent.click(screen.getByTestId("save-button")) + fireEvent.click(screen.getByTestId("collapse-thinking-checkbox")) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + + answerSave("settings-save-1", { success: false, error: "nope" }) + + expect(screen.getByTestId("save-button")).toBeEnabled() + }) + + it("also waits for the host when an appearance value is edited together with other settings", async () => { + renderUiTab() + await makeAnOtherEdit() + fireEvent.click(await screen.findByTestId("appearance-spacingScale-increment")) + + fireEvent.click(screen.getByTestId("save-button")) + + const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> + expect(save.requestId).toMatch(/^settings-save-\d+$/) + expect(screen.getByTestId("save-button")).toBeDisabled() + answerSave(save.requestId, { success: false }) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + }) + + it("treats a reset of an appearance value as an appearance edit", async () => { + renderWithExtensionState(, { + state: { terminalFontSize: 20 }, + queryClient: new QueryClient({ defaultOptions: { queries: { retry: false } } }), + }) + fireEvent.click(await screen.findByTestId("appearance-terminalFontSize-reset")) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + + fireEvent.click(screen.getByTestId("save-button")) + + const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> + expect(save.requestId).toMatch(/^settings-save-\d+$/) + }) + }) + it("does not send a second save while one is waiting for the host", async () => { renderUiTab() await makeAnEdit() diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx index 832ba70c68..9003665a64 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx @@ -480,7 +480,7 @@ describe("SettingsView - Sound Settings", () => { // Pick a size, then Save — the boundary should forward it to the host. fireEvent.change(slider, { target: { value: "18" } }) - saveAndConfirm(vi.mocked(vscode.postMessage)) + fireEvent.click(screen.getByTestId("save-button")) expect(vscode.postMessage).toHaveBeenCalledWith( expect.objectContaining({ @@ -491,7 +491,7 @@ describe("SettingsView - Sound Settings", () => { // Reset clears the override; it is persisted as null (not undefined). fireEvent.click(within(getSettingsContent()).getByTestId("chat-font-size-reset")) - saveAndConfirm(vi.mocked(vscode.postMessage)) + fireEvent.click(screen.getByTestId("save-button")) expect(vscode.postMessage).toHaveBeenCalledWith( expect.objectContaining({ @@ -1052,7 +1052,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { fireEvent.click(screen.getByTestId("set-strict-false")) // Toggling buffers in cachedState; nothing is persisted before Save. expect(vscode.postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - saveAndConfirm(vi.mocked(vscode.postMessage)) + fireEvent.click(screen.getByTestId("save-button")) expect(posted()).toEqual( expect.objectContaining({ type: "upsertApiConfiguration", @@ -1067,7 +1067,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { // toggling on from a stored false and saving has to put true in the payload. renderWithConfig({ openAiStrictToolSchemas: false }) fireEvent.click(screen.getByTestId("set-strict-true")) - saveAndConfirm(vi.mocked(vscode.postMessage)) + fireEvent.click(screen.getByTestId("save-button")) expect(posted()?.apiConfiguration?.openAiStrictToolSchemas).toBe(true) }) @@ -1075,7 +1075,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { renderWithConfig({ openAiStrictToolSchemas: false }) fireEvent.click(screen.getByTestId("set-strict-true")) fireEvent.click(screen.getByTestId("set-strict-false")) - saveAndConfirm(vi.mocked(vscode.postMessage)) + fireEvent.click(screen.getByTestId("save-button")) expect(posted()?.apiConfiguration?.openAiStrictToolSchemas).toBe(false) }) @@ -1086,7 +1086,7 @@ describe("SettingsView - openAiStrictToolSchemas save round trip", () => { expect(screen.getByTestId("received-strict").textContent).toBe("undefined") // Make a change elsewhere so Save is enabled, then save. fireEvent.click(screen.getByTestId("set-other-field")) - saveAndConfirm(vi.mocked(vscode.postMessage)) + fireEvent.click(screen.getByTestId("save-button")) expect(posted()?.apiConfiguration?.openAiBaseUrl).toBe("https://example.test") expect(posted()?.apiConfiguration?.openAiStrictToolSchemas).toBeUndefined() }) diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx index ff99be5002..1bc4ab1afb 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx @@ -7,7 +7,6 @@ import { QueryClient } from "@tanstack/react-query" import React from "react" import SettingsView from "../SettingsView" -import { saveAndConfirm } from "./saveAcknowledgement" import { vscode } from "@src/utils/vscode" const postMessage = vi.spyOn(vscode, "postMessage").mockImplementation(() => {}) @@ -665,7 +664,7 @@ describe("SettingsView - Unsaved Changes Detection", () => { }) expect(postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - saveAndConfirm(postMessage) + fireEvent.click(screen.getByTestId("save-button")) expect(postMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", @@ -718,7 +717,7 @@ describe("SettingsView - Unsaved Changes Detection", () => { expect(configuration.openAiCustomModelInfo?.reasoningEffort).toBe("low") expect(postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - saveAndConfirm(postMessage) + fireEvent.click(screen.getByTestId("save-button")) expect(postMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", text: "default", @@ -799,7 +798,7 @@ describe("SettingsView - Unsaved Changes Detection", () => { }) expect(postMessage).not.toHaveBeenCalledWith(expect.objectContaining({ type: "upsertApiConfiguration" })) - saveAndConfirm(postMessage) + fireEvent.click(screen.getByTestId("save-button")) expect(postMessage).toHaveBeenCalledWith({ type: "upsertApiConfiguration", From 7af492f57f52e95f4136e9db801e5f8afd12bff2 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 11:28:40 -0700 Subject: [PATCH 31/42] fix(ui): order writes of one appearance value down to durable storage; keep nothing after the saves; test the provider mapping --- .../webview/__tests__/ClineProvider.spec.ts | 82 ++++++++ .../__tests__/webviewMessageHandler.spec.ts | 193 +++++++++++++++++- src/core/webview/webviewMessageHandler.ts | 68 +++++- 3 files changed, 331 insertions(+), 12 deletions(-) diff --git a/src/core/webview/__tests__/ClineProvider.spec.ts b/src/core/webview/__tests__/ClineProvider.spec.ts index 779313d385..8f448635a9 100644 --- a/src/core/webview/__tests__/ClineProvider.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.spec.ts @@ -2119,6 +2119,88 @@ describe("ClineProvider", () => { expect(state.allowedReadFiles).toEqual([]) }) + describe("appearance settings", () => { + const keys = ["interfaceFontScale", "terminalFontSize", "editorFontSize", "spacingScale"] as const + const values = { interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 } + + /** Saves through the real `updateSettings` handler, as the settings view does. */ + const save = async (updatedSettings: Record) => { + await provider.resolveWebviewView(mockWebviewView) + const messageHandler = vi.mocked(mockWebviewView.webview.onDidReceiveMessage).mock.calls[0][0] + await messageHandler({ type: "updateSettings", updatedSettings }) + } + + test.each(keys)("%s is unset when it was never saved, in both states", async (key) => { + await provider.resolveWebviewView(mockWebviewView) + + expect((await provider.getState())[key]).toBeUndefined() + expect((await provider.getStateToPostToWebview())[key]).toBeUndefined() + }) + + test.each(keys)("%s that was stored is returned by both states", async (key) => { + await provider.resolveWebviewView(mockWebviewView) + await provider.contextProxy.setValue(key, values[key]) + + expect((await provider.getState())[key]).toBe(values[key]) + expect((await provider.getStateToPostToWebview())[key]).toBe(values[key]) + }) + + test("all four are returned together, each with its own value", async () => { + await provider.resolveWebviewView(mockWebviewView) + for (const key of keys) await provider.contextProxy.setValue(key, values[key]) + + expect(await provider.getState()).toMatchObject(values) + expect(await provider.getStateToPostToWebview()).toMatchObject(values) + }) + + test.each(keys)("a reset of %s (null) is kept, not replaced by a default", async (key) => { + await provider.resolveWebviewView(mockWebviewView) + await provider.contextProxy.setValue(key, values[key]) + await provider.contextProxy.setValue(key, null) + + expect((await provider.getState())[key]).toBeNull() + expect((await provider.getStateToPostToWebview())[key]).toBeNull() + }) + + test("saving through updateSettings stores the values and tells the open webview", async () => { + mockPostMessage.mockClear() + + await save(values) + + for (const key of keys) expect(mockContext.globalState.update).toHaveBeenCalledWith(key, values[key]) + expect(await provider.getStateToPostToWebview()).toMatchObject(values) + expect(mockPostMessage).toHaveBeenCalledWith( + expect.objectContaining({ type: "state", state: expect.objectContaining(values) }), + ) + }) + + test("saving a reset stores null and tells the open webview", async () => { + await save(values) + mockPostMessage.mockClear() + + await save({ interfaceFontScale: null, terminalFontSize: null, editorFontSize: null, spacingScale: null }) + + expect(await provider.getStateToPostToWebview()).toMatchObject({ + interfaceFontScale: null, + terminalFontSize: null, + editorFontSize: null, + spacingScale: null, + }) + expect(mockPostMessage).toHaveBeenCalledWith( + expect.objectContaining({ + type: "state", + state: expect.objectContaining({ interfaceFontScale: null, spacingScale: null }), + }), + ) + }) + + test("a value the webview should not be able to store is refused, and nothing changes", async () => { + await save({ interfaceFontScale: 999 }) + + expect((await provider.getState()).interfaceFontScale).toBeUndefined() + }) + }) + test("getState returns the saved allowed write files", async () => { await provider.contextProxy.setValue("allowedWriteFiles", ["notes.md"]) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index e19048a0e6..091e80eab7 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -81,7 +81,7 @@ import type { ModelRecord } from "@roo-code/types" import * as vsCodeLmProvider from "../../../api/providers/vscode-lm" import * as copilotProvider from "../../../api/providers/github-copilot" -import { webviewMessageHandler } from "../webviewMessageHandler" +import { settingWriteBookkeepingSize, webviewMessageHandler } from "../webviewMessageHandler" import { registerCopilotModelBroadcast } from "../../../services/language-models/copilotModelBroadcast" import type { ClineProvider } from "../ClineProvider" import { flushModels, getModels } from "../../../api/providers/fetchers/modelCache" @@ -2134,6 +2134,197 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi }) }) + describe("writes to one setting are ordered, down to durable storage", () => { + /** + * A store whose writes reach durable storage later than they are started: each write holds until it is + * released, and the events record when it started and when it reached storage. + */ + const slowStore = () => { + const events: string[] = [] + const gates = new Map void>() + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (key: string, value: unknown) => { + events.push(`start ${key}=${String(value)}`) + await new Promise((resolve) => gates.set(`${key}=${String(value)}`, resolve)) + stored[key] = value + events.push(`end ${key}=${String(value)}`) + }, + ) + const release = async (what: string) => { + await vi.waitFor(() => expect(gates.has(what)).toBe(true)) + gates.get(what)!() + } + return { events, release } + } + + it("does not start a newer save's write of a key before the older one has reached storage", async () => { + const { events, release } = slowStore() + + const a = save({ interfaceFontScale: 120 }, "save-a") + await vi.waitFor(() => expect(events).toContain("start interfaceFontScale=120")) + const b = save({ interfaceFontScale: 150 }, "save-b") + // Give the second save every chance to start its write: it must wait for the first. + await new Promise((resolve) => setTimeout(resolve, 20)) + expect(events).not.toContain("start interfaceFontScale=150") + + await release("interfaceFontScale=120") + await vi.waitFor(() => expect(events).toContain("start interfaceFontScale=150")) + await release("interfaceFontScale=150") + await Promise.all([a, b]) + + // The newer value reached storage last, so it is the one that stays, and both saves succeeded. + expect(events).toEqual([ + "start interfaceFontScale=120", + "end interfaceFontScale=120", + "start interfaceFontScale=150", + "end interfaceFontScale=150", + ]) + expect(stored.interfaceFontScale).toBe(150) + expect(mockClineProvider.postMessageToWebview).toHaveBeenCalledWith({ + type: "settingsSaveResult", + requestId: "save-b", + success: true, + }) + }) + + it("does not make writes of different keys wait for each other", async () => { + const { events, release } = slowStore() + + const a = save({ interfaceFontScale: 120 }, "save-a") + await vi.waitFor(() => expect(events).toContain("start interfaceFontScale=120")) + const b = save({ terminalFontSize: 14 }, "save-b") + + await vi.waitFor(() => expect(events).toContain("start terminalFontSize=14")) + await release("terminalFontSize=14") + await b + expect(stored.terminalFontSize).toBe(14) + + await release("interfaceFontScale=120") + await a + }) + + it("lets the next write through when one has failed", async () => { + let first = true + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (key: string, value: unknown) => { + if (first && key === "interfaceFontScale") { + first = false + throw new Error("storage unavailable") + } + return real(key as never, value as never) + }, + ) + + await save({ interfaceFontScale: 120 }, "save-a") + await save({ interfaceFontScale: 150 }, "save-b") + + expect(stored.interfaceFontScale).toBe(150) + expect(mockClineProvider.postMessageToWebview).toHaveBeenLastCalledWith( + expect.objectContaining({ requestId: "save-b", success: true }), + ) + }) + + it("also queues the write that puts a value back, behind the writes before it", async () => { + const events: string[] = [] + const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! + let releaseRestore!: () => void + const restoreHeld = new Promise((resolve) => (releaseRestore = resolve)) + vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation( + async (key: string, value: unknown) => { + events.push(`start ${key}=${String(value)}`) + if (key === "terminalFontSize" && value === 14) throw new Error("storage unavailable") + // Putting interfaceFontScale back is slow to reach storage. + if (key === "interfaceFontScale" && value === 100) await restoreHeld + await real(key as never, value as never) + events.push(`end ${key}=${String(value)}`) + }, + ) + + // Save A writes interfaceFontScale, then fails: its restore of 100 is held. + const a = save({ interfaceFontScale: 120, terminalFontSize: 14 }, "save-a") + await vi.waitFor(() => expect(events).toContain("start interfaceFontScale=100")) + // Save B writes the same key while the restore is still on its way to storage. + const b = save({ interfaceFontScale: 150 }, "save-b") + await new Promise((resolve) => setTimeout(resolve, 20)) + expect(events).not.toContain("start interfaceFontScale=150") + + releaseRestore() + await Promise.all([a, b]) + + expect(events.indexOf("end interfaceFontScale=100")).toBeLessThan( + events.indexOf("start interfaceFontScale=150"), + ) + expect(stored.interfaceFontScale).toBe(150) + }) + }) + + describe("nothing is kept about writes once the saves are over", () => { + const settled = () => new Promise((resolve) => setTimeout(resolve, 0)) + + it("keeps nothing after a save that succeeded", async () => { + await save({ interfaceFontScale: 120, terminalFontSize: 14 }) + await settled() + + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + + it("keeps nothing after a save that failed and was rolled back", async () => { + failWriteOf("terminalFontSize", 14) + + await save({ interfaceFontScale: 120, terminalFontSize: 14 }) + await settled() + + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + + it("keeps nothing after overlapping saves, whichever way they end", async () => { + let releaseFailure!: () => void + const held = new Promise((resolve) => (releaseFailure = resolve)) + failWriteOf("editorFontSize", 15, () => held) + + // The older save succeeds first; the newer one then fails. + const newer = (async () => { + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + return save({ interfaceFontScale: 150, editorFontSize: 15 }, "save-b") + })() + await save({ interfaceFontScale: 120 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(150)) + releaseFailure() + await newer + await settled() + + expect(stored.interfaceFontScale).toBe(120) + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + + it("keeps nothing after three overlapping saves that all fail", async () => { + const release: Record<"a" | "b" | "c", () => void> = { a: () => {}, b: () => {}, c: () => {} } + const gate = (name: "a" | "b" | "c") => new Promise((resolve) => (release[name] = resolve)) + const gates = { a: gate("a"), b: gate("b"), c: gate("c") } + failWriteOf("terminalFontSize", 14, () => gates.a) + failWriteOf("editorFontSize", 15, () => gates.b) + failWriteOf("spacingScale", 80, () => gates.c) + + const a = save({ interfaceFontScale: 120, terminalFontSize: 14 }, "save-a") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(120)) + const b = save({ interfaceFontScale: 150, editorFontSize: 15 }, "save-b") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(150)) + const c = save({ interfaceFontScale: 180, spacingScale: 80 }, "save-c") + await vi.waitFor(() => expect(stored.interfaceFontScale).toBe(180)) + release.b() + await b + release.c() + await c + release.a() + await a + await settled() + + expect(stored.interfaceFontScale).toBe(100) + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + }) + it("keeps going and still reports the failure when a restore itself fails", async () => { const real = vi.mocked(mockClineProvider.contextProxy.setValue).getMockImplementation()! vi.mocked(mockClineProvider.contextProxy.setValue).mockImplementation(async (key: string, value: unknown) => { diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 90fe7885ce..644976339b 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -172,32 +172,72 @@ interface SettingWrite { * can overlap, and writes to the same key form a chain. Rolling back a write puts the key back only while it is the * latest one and the stored value is still what it wrote, so a newer save's value, or a change made outside a save * (an import), is kept. A write that is rolled back while a newer one is pending is taken out of the chain, so that - * if the newer one fails too, it restores what was stored before either of them. + * if the newer one fails too, it restores what was stored before either of them. A write that has finished is taken + * out of the chain too, so nothing is kept after the saves are over. */ const lastWriteOfSetting = new Map() +/** + * The writes to one key, one at a time, from every save (and every rollback), across providers. A write is only + * started once the one before it has reached durable storage, so a slower write cannot complete after a newer one + * and overwrite it. A write that fails does not hold up the ones behind it. + */ +const settingWriteQueues = new Map>() + +const queuedSettingWrite = (key: string, write: () => Promise): Promise => { + const run = (settingWriteQueues.get(key) ?? Promise.resolve()).then(async () => { + await write() + }) + const tail = run.catch(() => undefined) + settingWriteQueues.set(key, tail) + void tail.then(() => { + if (settingWriteQueues.get(key) === tail) settingWriteQueues.delete(key) + }) + return run +} + +/** @internal test hook: how much is kept about writes. It is nothing once the saves are over. */ +export const settingWriteBookkeepingSize = () => ({ + latestWrites: lastWriteOfSetting.size, + queuedKeys: settingWriteQueues.size, +}) + +/** Takes a write out of its chain, joining the writes on either side of it. */ +const unlinkSettingWrite = (write: SettingWrite) => { + if (write.prev) write.prev.next = write.next + if (write.next) write.next.prev = write.prev + write.prev = undefined + write.next = undefined +} + +/** The save that made this write succeeded. */ +const finishSettingWrite = (write: SettingWrite) => { + write.done = true + if (lastWriteOfSetting.get(write.key) === write) lastWriteOfSetting.delete(write.key) + unlinkSettingWrite(write) +} + const undoSettingWrite = async (provider: ClineProvider, write: SettingWrite) => { const { key } = write write.done = true if (lastWriteOfSetting.get(key) !== write) { // A newer write exists. Make it restore the value from before this one if it fails as well. - const { next } = write - if (next && !next.done) { - next.previous = write.previous - next.prev = write.prev - if (write.prev) write.prev.next = next - } - + if (write.next && !write.next.done) write.next.previous = write.previous + unlinkSettingWrite(write) return } // The write before this one is pending again: it is the latest, and the value now stored is its value. - if (write.prev && !write.prev.done) lastWriteOfSetting.set(key, write.prev) + const { prev } = write + if (prev && !prev.done) lastWriteOfSetting.set(key, prev) else lastWriteOfSetting.delete(key) + unlinkSettingWrite(write) if (provider.contextProxy.getValue(key as keyof RooCodeSettings) === write.wrote) { - await provider.contextProxy.setValue(key as keyof RooCodeSettings, write.previous as never) + await queuedSettingWrite(key, () => + provider.contextProxy.setValue(key as keyof RooCodeSettings, write.previous as never), + ) } } @@ -976,12 +1016,18 @@ export const webviewMessageHandler = async ( if (write.prev) write.prev.next = write written.push(write) lastWriteOfSetting.set(key, write) + + // One write of this key at a time, until it has reached durable storage. + await queuedSettingWrite(key, () => + provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue), + ) + continue } await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) } - for (const write of written) write.done = true + for (const write of written) finishSettingWrite(write) } catch (error) { failure = error instanceof Error ? error.message : String(error) From 215b09832a197d4f17365f04ee8266a30e8fa03d Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 11:30:21 -0700 Subject: [PATCH 32/42] fix(ui): save request ids unique across webview reloads --- .../src/components/settings/SettingsView.tsx | 7 ++-- .../SettingsView.saveResult.spec.tsx | 8 ++--- .../settings/__tests__/saveRequestId.spec.ts | 34 +++++++++++++++++++ .../src/components/settings/saveRequestId.ts | 10 ++++++ 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 webview-ui/src/components/settings/__tests__/saveRequestId.spec.ts create mode 100644 webview-ui/src/components/settings/saveRequestId.ts diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index b37be59d2f..dcebaae2e7 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -83,6 +83,7 @@ import { SlashCommandsSettings } from "./SlashCommandsSettings" import { SkillsSettings } from "./SkillsSettings" import { RulesSettings } from "./RulesSettings" import { UISettings } from "./UISettings" +import { nextSaveRequestId } from "./saveRequestId" import ModesView from "../modes/ModesView" import McpView from "../mcp/McpView" import { WorktreesView } from "../worktrees/WorktreesView" @@ -96,10 +97,6 @@ export const settingsTabTrigger = "whitespace-nowrap overflow-hidden min-w-0 h-12 px-4 py-3 box-border flex items-center border-l-2 border-transparent text-vscode-foreground opacity-70 hover:bg-vscode-list-hoverBackground data-[compact=true]:w-12 data-[compact=true]:p-4" export const settingsTabTriggerActive = "opacity-100 border-vscode-focusBorder bg-vscode-list-activeSelectionBackground" -// Module scope, not per mount: an answer to a save from an earlier mount can still arrive, and it must not -// match a later mount's request id. -let saveCounter = 0 - export interface SettingsViewRef { checkUnsaveChanges: (then: () => void) => void } @@ -404,7 +401,7 @@ const SettingsView = forwardRef(({ onDone, t const appearanceEdited = (Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]).some( (key) => (cachedState[key] ?? null) !== (extensionState[key] ?? null), ) - const saveId = appearanceEdited ? `settings-save-${++saveCounter}` : undefined + const saveId = appearanceEdited ? nextSaveRequestId() : undefined if (saveId) { pendingSaveEditedState.current = cachedState setPendingSaveId(saveId) diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 2062954356..393f79aab7 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -44,7 +44,7 @@ describe("SettingsView – save acknowledgement", () => { fireEvent.click(screen.getByTestId("save-button")) const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> - expect(save.requestId).toMatch(/^settings-save-\d+$/) + expect(save.requestId).toMatch(/^settings-save-[a-z0-9]+-\d+$/) // These do not wait for the host's answer, exactly as before the acknowledgement existed. expect(posted("upsertApiConfiguration")).toHaveLength(1) expect(posted("telemetrySetting")).toHaveLength(1) @@ -109,7 +109,7 @@ describe("SettingsView – save acknowledgement", () => { fireEvent.click(screen.getByTestId("collapse-thinking-checkbox")) await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) - answerSave("settings-save-1", { success: false, error: "nope" }) + answerSave("settings-save-never-issued", { success: false, error: "nope" }) expect(screen.getByTestId("save-button")).toBeEnabled() }) @@ -122,7 +122,7 @@ describe("SettingsView – save acknowledgement", () => { fireEvent.click(screen.getByTestId("save-button")) const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> - expect(save.requestId).toMatch(/^settings-save-\d+$/) + expect(save.requestId).toMatch(/^settings-save-[a-z0-9]+-\d+$/) expect(screen.getByTestId("save-button")).toBeDisabled() answerSave(save.requestId, { success: false }) await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) @@ -139,7 +139,7 @@ describe("SettingsView – save acknowledgement", () => { fireEvent.click(screen.getByTestId("save-button")) const [save] = posted("updateSettings") as Array<{ type: string; requestId?: string }> - expect(save.requestId).toMatch(/^settings-save-\d+$/) + expect(save.requestId).toMatch(/^settings-save-[a-z0-9]+-\d+$/) }) }) diff --git a/webview-ui/src/components/settings/__tests__/saveRequestId.spec.ts b/webview-ui/src/components/settings/__tests__/saveRequestId.spec.ts new file mode 100644 index 0000000000..531f3f423a --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/saveRequestId.spec.ts @@ -0,0 +1,34 @@ +import { describe, expect, it, vi } from "vitest" + +describe("nextSaveRequestId", () => { + it("never repeats within a load", async () => { + const { nextSaveRequestId } = await import("../saveRequestId") + + const ids = Array.from({ length: 1000 }, () => nextSaveRequestId()) + + expect(new Set(ids).size).toBe(1000) + for (const id of ids) expect(id).toMatch(/^settings-save-[a-z0-9]+-\d+$/) + }) + + it("does not repeat after the webview reloads, although the counter starts again", async () => { + vi.resetModules() + const beforeReload = (await import("../saveRequestId")).nextSaveRequestId() + + vi.resetModules() + const afterReload = (await import("../saveRequestId")).nextSaveRequestId() + + // Both are the first save of their load, so only the part that is different on every load tells them apart. + expect(beforeReload.endsWith("-1")).toBe(true) + expect(afterReload.endsWith("-1")).toBe(true) + expect(afterReload).not.toBe(beforeReload) + }) + + it("would repeat without the part that differs per load", async () => { + // The reason the part exists: with the counter alone, the first save after a reload has the first save's id. + const counterOnly = () => { + let counter = 0 + return () => `settings-save-${++counter}` + } + expect(counterOnly()()).toBe(counterOnly()()) + }) +}) diff --git a/webview-ui/src/components/settings/saveRequestId.ts b/webview-ui/src/components/settings/saveRequestId.ts new file mode 100644 index 0000000000..95265e693a --- /dev/null +++ b/webview-ui/src/components/settings/saveRequestId.ts @@ -0,0 +1,10 @@ +// Different on every load of the webview. A reload starts the counter again, and an answer to a save that was sent +// before the reload can still arrive, so a counter alone could give a new save the id of an old, unanswered one. +const loadId = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}` + +// Module scope, not per mount: an answer to a save from an earlier mount can still arrive, and it must not match a +// later mount's request id. +let counter = 0 + +/** An id for a settings save that no other save has used: not in this mount, an earlier one, or before a reload. */ +export const nextSaveRequestId = () => `settings-save-${loadId}-${++counter}` From a5706e7908a69f74ccdd0f28879ed5d4f7ada86b Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 13:09:53 -0700 Subject: [PATCH 33/42] fix(ui): read what a write replaces when it starts, after the writes before it --- .../__tests__/webviewMessageHandler.spec.ts | 24 +++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 16 +++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 091e80eab7..ad06daf2fe 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2153,6 +2153,7 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi const release = async (what: string) => { await vi.waitFor(() => expect(gates.has(what)).toBe(true)) gates.get(what)!() + gates.delete(what) } return { events, release } } @@ -2187,6 +2188,29 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi }) }) + it("a failed save restores what the save before it wrote, even if that was still queued when it registered", async () => { + const { events, release } = slowStore() + + // Q is writing, P waits behind it, and A registers while P has not started its write. + const q = save({ interfaceFontScale: 110 }, "save-q") + await vi.waitFor(() => expect(events).toContain("start interfaceFontScale=110")) + const p = save({ interfaceFontScale: 130 }, "save-p") + await new Promise((resolve) => setTimeout(resolve, 10)) + failWriteOf("terminalFontSize", 14) + const a = save({ interfaceFontScale: 150, terminalFontSize: 14 }, "save-a") + await new Promise((resolve) => setTimeout(resolve, 10)) + + await release("interfaceFontScale=110") + await release("interfaceFontScale=130") + await release("interfaceFontScale=150") + // A fails on terminalFontSize, and its restore of the interface font scale is a write too. + await release("interfaceFontScale=130") + await Promise.all([q, p, a]) + + // P succeeded, so A's failure puts back P's value, not Q's. + expect(stored.interfaceFontScale).toBe(130) + }) + it("does not make writes of different keys wait for each other", async () => { const { events, release } = slowStore() diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 644976339b..cf1eecac54 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -159,6 +159,8 @@ interface SettingWrite { key: string /** What was stored when this save wrote it. With overlapping saves, this can be another save's pending value. */ previous: unknown + /** `previous` was handed over by a write that was rolled back, so it is not read again when this write starts. */ + inherited?: boolean wrote: unknown /** The write before this one that has not finished yet, and the one after it. */ prev?: SettingWrite @@ -223,7 +225,10 @@ const undoSettingWrite = async (provider: ClineProvider, write: SettingWrite) => if (lastWriteOfSetting.get(key) !== write) { // A newer write exists. Make it restore the value from before this one if it fails as well. - if (write.next && !write.next.done) write.next.previous = write.previous + if (write.next && !write.next.done) { + write.next.previous = write.previous + write.next.inherited = true + } unlinkSettingWrite(write) return } @@ -1018,9 +1023,12 @@ export const webviewMessageHandler = async ( lastWriteOfSetting.set(key, write) // One write of this key at a time, until it has reached durable storage. - await queuedSettingWrite(key, () => - provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue), - ) + // What it replaces is read when it starts, after the writes before it have reached storage. + await queuedSettingWrite(key, () => { + if (!write.inherited) + write.previous = provider.contextProxy.getValue(key as keyof RooCodeSettings) + return provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) + }) continue } From 7783aae13890f0acd98d3108965af6a76baa480a Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Thu, 29 Oct 2026 14:32:53 -0700 Subject: [PATCH 34/42] refactor(ui): move the appearance write chain into its own module, with unit tests --- .../__tests__/appearanceSettingWrites.spec.ts | 134 +++++++++++++++++ src/core/config/appearanceSettingWrites.ts | 130 ++++++++++++++++ .../__tests__/webviewMessageHandler.spec.ts | 3 +- src/core/webview/webviewMessageHandler.ts | 139 ++---------------- 4 files changed, 280 insertions(+), 126 deletions(-) create mode 100644 src/core/config/__tests__/appearanceSettingWrites.spec.ts create mode 100644 src/core/config/appearanceSettingWrites.ts diff --git a/src/core/config/__tests__/appearanceSettingWrites.spec.ts b/src/core/config/__tests__/appearanceSettingWrites.spec.ts new file mode 100644 index 0000000000..7c50c87c32 --- /dev/null +++ b/src/core/config/__tests__/appearanceSettingWrites.spec.ts @@ -0,0 +1,134 @@ +import { + APPEARANCE_SETTING_KEYS, + beginSettingWrite, + finishSettingWrites, + isAppearanceSetting, + performSettingWrite, + undoSettingWrite, +} from "../appearanceSettingWrites" +import type { ContextProxy } from "../ContextProxy" + +describe("appearanceSettingWrites", () => { + let stored: Map + // Only the two methods the module uses. The cast says so: the real ContextProxy has far more. + let contextProxy: ContextProxy + + beforeEach(() => { + stored = new Map([["interfaceFontScale", 100]]) + contextProxy = { + getValue: (key: string) => stored.get(key), + setValue: async (key: string, value: unknown) => { + stored.set(key, value) + }, + } as unknown as ContextProxy + }) + + /** Stores the value, as the write that was just recorded would have. */ + const store = (key: string, value: unknown) => stored.set(key, value) + + describe("which settings are tracked", () => { + it.each(APPEARANCE_SETTING_KEYS)("tracks %s", (key) => { + expect(isAppearanceSetting(key)).toBe(true) + }) + + it.each(["soundEnabled", "language", "", "TimeFormat"])("does not track %j", (key) => { + expect(isAppearanceSetting(key)).toBe(false) + }) + }) + + describe("two saves writing the same setting", () => { + it("a failed save does not undo a later save that wrote the same value afterwards", async () => { + const save = beginSettingWrite("interfaceFontScale", 100, 120) + store("interfaceFontScale", 120) + const other = beginSettingWrite("interfaceFontScale", 120, 120) + store("interfaceFontScale", 120) + finishSettingWrites([other]) + + await undoSettingWrite(contextProxy, save) + + expect(stored.get("interfaceFontScale")).toBe(120) + }) + + it("a failed earlier save does not undo a later save that wrote the same value afterwards", async () => { + const other = beginSettingWrite("interfaceFontScale", 100, 150) + store("interfaceFontScale", 150) + const save = beginSettingWrite("interfaceFontScale", 150, 150) + store("interfaceFontScale", 150) + finishSettingWrites([save]) + + await undoSettingWrite(contextProxy, other) + + expect(stored.get("interfaceFontScale")).toBe(150) + }) + + it("when both fail, each restores what was stored before either of them", async () => { + const save = beginSettingWrite("interfaceFontScale", 100, 120) + store("interfaceFontScale", 120) + const other = beginSettingWrite("interfaceFontScale", 120, 150) + store("interfaceFontScale", 150) + + await undoSettingWrite(contextProxy, save) // superseded by the other save: nothing changes yet + expect(stored.get("interfaceFontScale")).toBe(150) + + await undoSettingWrite(contextProxy, other) + expect(stored.get("interfaceFontScale")).toBe(100) + }) + }) + + describe("performSettingWrite", () => { + it("reads what the write replaces when it starts", async () => { + const write = beginSettingWrite("interfaceFontScale", "stale", 120) + store("interfaceFontScale", 150) // an earlier write reached storage after this one registered + + await performSettingWrite(contextProxy, write) + + expect(write.previous).toBe(150) + expect(stored.get("interfaceFontScale")).toBe(120) + }) + + it("keeps the value handed over by a write that was rolled back before this one started", async () => { + const first = beginSettingWrite("interfaceFontScale", 100, 150) + store("interfaceFontScale", 150) + const second = beginSettingWrite("interfaceFontScale", 150, 120) + + await undoSettingWrite(contextProxy, first) // superseded: hands 100 to the second write + await performSettingWrite(contextProxy, second) + expect(second.previous).toBe(100) + + await undoSettingWrite(contextProxy, second) + expect(stored.get("interfaceFontScale")).toBe(100) + }) + }) + + it("puts a failed write back to what was stored before it", async () => { + const write = beginSettingWrite("interfaceFontScale", 100, 120) + store("interfaceFontScale", 120) + + await undoSettingWrite(contextProxy, write) + + expect(stored.get("interfaceFontScale")).toBe(100) + }) + + it("leaves a value alone that was changed by something else after the write", async () => { + const write = beginSettingWrite("interfaceFontScale", 100, 120) + store("interfaceFontScale", 150) + + await undoSettingWrite(contextProxy, write) + + expect(stored.get("interfaceFontScale")).toBe(150) + }) + + it("does not link a new write to one that has finished", async () => { + const first = beginSettingWrite("interfaceFontScale", 100, 120) + store("interfaceFontScale", 120) + finishSettingWrites([first]) + const second = beginSettingWrite("interfaceFontScale", 120, 150) + store("interfaceFontScale", 150) + + await undoSettingWrite(contextProxy, second) + + // Back to the finished write's value, not past it. + expect(stored.get("interfaceFontScale")).toBe(120) + expect(second.prev).toBeUndefined() + }) +}) diff --git a/src/core/config/appearanceSettingWrites.ts b/src/core/config/appearanceSettingWrites.ts new file mode 100644 index 0000000000..998d7b773d --- /dev/null +++ b/src/core/config/appearanceSettingWrites.ts @@ -0,0 +1,130 @@ +import type { RooCodeSettings } from "@roo-code/types" + +import type { ContextProxy } from "./ContextProxy" + +/** The appearance settings, whose writes are tracked so a failed save can be put back without undoing another one. */ +export const APPEARANCE_SETTING_KEYS = [ + "interfaceFontScale", + "terminalFontSize", + "editorFontSize", + "spacingScale", +] as const + +export type AppearanceSettingKey = (typeof APPEARANCE_SETTING_KEYS)[number] + +export const isAppearanceSetting = (key: string): key is AppearanceSettingKey => + (APPEARANCE_SETTING_KEYS as readonly string[]).includes(key) + +/** One write of an appearance setting by a save, linked to the writes of other saves that overlap it. */ +export interface SettingWrite { + key: AppearanceSettingKey + /** What was stored when this write was made. With overlapping writes, this can be another write's pending value. */ + previous: unknown + /** `previous` was handed over by a write that was rolled back, so it is not read again when this write starts. */ + inherited?: boolean + wrote: unknown + /** The write before this one that has not finished yet, and the one after it. */ + prev?: SettingWrite + next?: SettingWrite + /** The save has finished: it succeeded, or it has been rolled back. */ + done: boolean +} + +/** + * The latest write of each appearance setting. The store is shared by every provider (sidebar, editor tab), so saves + * can overlap, and the writes to one key form a chain. Rolling a write back puts the key + * back only while it is the latest one and the stored value is still what it wrote, so another write's value is kept + * even when it is the same value. A write that is rolled back while a newer one is pending is taken out of the chain, + * so that if the newer one fails too, it restores what was stored before either of them. + */ +const lastWriteOfSetting = new Map() + +/** Records a write that is about to be made, as the latest one of its key. */ +export const beginSettingWrite = (key: AppearanceSettingKey, previous: unknown, wrote: unknown): SettingWrite => { + const before = lastWriteOfSetting.get(key) + const write: SettingWrite = { key, previous, wrote, prev: before && !before.done ? before : undefined, done: false } + if (write.prev) write.prev.next = write + lastWriteOfSetting.set(key, write) + return write +} + +/** + * The writes to one key, one at a time, from every save and rollback, across providers. A write is only + * started once the one before it has reached durable storage, so a slower write cannot complete after a newer one + * and overwrite it, and a rollback cannot land after a newer write has started. A write that fails does not hold up + * the ones behind it. + */ +const settingWriteQueues = new Map>() + +const queuedSettingWrite = (key: AppearanceSettingKey, write: () => Promise): Promise => { + const run = (settingWriteQueues.get(key) ?? Promise.resolve()).then(async () => { + await write() + }) + const tail = run.catch(() => undefined) + settingWriteQueues.set(key, tail) + void tail.then(() => { + if (settingWriteQueues.get(key) === tail) settingWriteQueues.delete(key) + }) + return run +} + +/** @internal test hook: how much is kept about writes. It is nothing once the saves are over. */ +export const settingWriteBookkeepingSize = () => ({ + latestWrites: lastWriteOfSetting.size, + queuedKeys: settingWriteQueues.size, +}) + +/** + * Stores a recorded write, in line behind the writes of its key. What it replaces is read when it starts, after the + * writes before it have reached storage, unless a rolled-back write handed its own value over. + */ +export const performSettingWrite = (contextProxy: ContextProxy, write: SettingWrite): Promise => + queuedSettingWrite(write.key, () => { + if (!write.inherited) write.previous = contextProxy.getValue(write.key as keyof RooCodeSettings) + return contextProxy.setValue(write.key as keyof RooCodeSettings, write.wrote as never) + }) + +/** Takes a write out of its chain, joining the writes on either side of it. */ +const unlinkSettingWrite = (write: SettingWrite) => { + if (write.prev) write.prev.next = write.next + if (write.next) write.next.prev = write.prev + write.prev = undefined + write.next = undefined +} + +/** The save that made these writes succeeded. Nothing is kept about them once they are over. */ +export const finishSettingWrites = (writes: SettingWrite[]) => { + for (const write of writes) { + write.done = true + if (lastWriteOfSetting.get(write.key) === write) lastWriteOfSetting.delete(write.key) + unlinkSettingWrite(write) + } +} + +/** Puts a failed write back, unless another write has superseded it (see `lastWriteOfSetting`). */ +export const undoSettingWrite = async (contextProxy: ContextProxy, write: SettingWrite) => { + const { key } = write + write.done = true + + if (lastWriteOfSetting.get(key) !== write) { + // A newer write exists. Make it restore the value from before this one if it fails as well. + if (write.next && !write.next.done) { + write.next.previous = write.previous + write.next.inherited = true + } + unlinkSettingWrite(write) + return + } + + // The write before this one is pending again: it is the latest, and the value now stored is its value. + const { prev } = write + if (prev && !prev.done) lastWriteOfSetting.set(key, prev) + else lastWriteOfSetting.delete(key) + unlinkSettingWrite(write) + + await queuedSettingWrite(key, async () => { + if (contextProxy.getValue(key as keyof RooCodeSettings) === write.wrote) { + await contextProxy.setValue(key as keyof RooCodeSettings, write.previous as never) + } + }) +} diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index ad06daf2fe..2792bf4517 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -81,7 +81,8 @@ import type { ModelRecord } from "@roo-code/types" import * as vsCodeLmProvider from "../../../api/providers/vscode-lm" import * as copilotProvider from "../../../api/providers/github-copilot" -import { settingWriteBookkeepingSize, webviewMessageHandler } from "../webviewMessageHandler" +import { webviewMessageHandler } from "../webviewMessageHandler" +import { settingWriteBookkeepingSize } from "../../config/appearanceSettingWrites" import { registerCopilotModelBroadcast } from "../../../services/language-models/copilotModelBroadcast" import type { ClineProvider } from "../ClineProvider" import { flushModels, getModels } from "../../../api/providers/fetchers/modelCache" diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index cf1eecac54..247c80034d 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -38,6 +38,14 @@ import { TelemetryService } from "@roo-code/telemetry" import { type ApiMessage } from "../task-persistence/apiMessages" import { saveTaskMessages } from "../task-persistence" +import { + beginSettingWrite, + finishSettingWrites, + isAppearanceSetting, + performSettingWrite, + undoSettingWrite, + type SettingWrite, +} from "../config/appearanceSettingWrites" import { importRooTaskHistory } from "../task-persistence/importRooTaskHistory" import { ClineProvider } from "./ClineProvider" @@ -131,17 +139,6 @@ import { const handlerFor = (apiConfiguration: ProviderSettings, provider: RouterName): ApiHandler => buildApiHandler({ ...apiConfiguration, apiProvider: provider }) -/** - * The settings a save puts back if it fails: the four appearance values, which are saved together and must not be - * left half changed. Every other setting keeps the way it is written, and the way a failure is handled, as before. - */ -const ROLLBACK_SETTING_KEYS = new Set([ - "interfaceFontScale", - "terminalFontSize", - "editorFontSize", - "spacingScale", -]) - /** * What the webview may send for each appearance value: the schema the setting is defined with (an integer within * its bounds, or null/unset for a reset). The webview is not trusted, and its own limits (the stepper clamps the @@ -154,98 +151,6 @@ const APPEARANCE_VALUE_SCHEMAS = { spacingScale: globalSettingsSchema.shape.spacingScale, } -/** One write of a rolled-back setting by a save, linked to the writes of other saves that overlap it. */ -interface SettingWrite { - key: string - /** What was stored when this save wrote it. With overlapping saves, this can be another save's pending value. */ - previous: unknown - /** `previous` was handed over by a write that was rolled back, so it is not read again when this write starts. */ - inherited?: boolean - wrote: unknown - /** The write before this one that has not finished yet, and the one after it. */ - prev?: SettingWrite - next?: SettingWrite - /** The save has finished: it succeeded, or it has been rolled back. */ - done: boolean -} - -/** - * The latest write of each of those settings. The store is shared by every provider (sidebar, editor tab), so saves - * can overlap, and writes to the same key form a chain. Rolling back a write puts the key back only while it is the - * latest one and the stored value is still what it wrote, so a newer save's value, or a change made outside a save - * (an import), is kept. A write that is rolled back while a newer one is pending is taken out of the chain, so that - * if the newer one fails too, it restores what was stored before either of them. A write that has finished is taken - * out of the chain too, so nothing is kept after the saves are over. - */ -const lastWriteOfSetting = new Map() - -/** - * The writes to one key, one at a time, from every save (and every rollback), across providers. A write is only - * started once the one before it has reached durable storage, so a slower write cannot complete after a newer one - * and overwrite it. A write that fails does not hold up the ones behind it. - */ -const settingWriteQueues = new Map>() - -const queuedSettingWrite = (key: string, write: () => Promise): Promise => { - const run = (settingWriteQueues.get(key) ?? Promise.resolve()).then(async () => { - await write() - }) - const tail = run.catch(() => undefined) - settingWriteQueues.set(key, tail) - void tail.then(() => { - if (settingWriteQueues.get(key) === tail) settingWriteQueues.delete(key) - }) - return run -} - -/** @internal test hook: how much is kept about writes. It is nothing once the saves are over. */ -export const settingWriteBookkeepingSize = () => ({ - latestWrites: lastWriteOfSetting.size, - queuedKeys: settingWriteQueues.size, -}) - -/** Takes a write out of its chain, joining the writes on either side of it. */ -const unlinkSettingWrite = (write: SettingWrite) => { - if (write.prev) write.prev.next = write.next - if (write.next) write.next.prev = write.prev - write.prev = undefined - write.next = undefined -} - -/** The save that made this write succeeded. */ -const finishSettingWrite = (write: SettingWrite) => { - write.done = true - if (lastWriteOfSetting.get(write.key) === write) lastWriteOfSetting.delete(write.key) - unlinkSettingWrite(write) -} - -const undoSettingWrite = async (provider: ClineProvider, write: SettingWrite) => { - const { key } = write - write.done = true - - if (lastWriteOfSetting.get(key) !== write) { - // A newer write exists. Make it restore the value from before this one if it fails as well. - if (write.next && !write.next.done) { - write.next.previous = write.previous - write.next.inherited = true - } - unlinkSettingWrite(write) - return - } - - // The write before this one is pending again: it is the latest, and the value now stored is its value. - const { prev } = write - if (prev && !prev.done) lastWriteOfSetting.set(key, prev) - else lastWriteOfSetting.delete(key) - unlinkSettingWrite(write) - - if (provider.contextProxy.getValue(key as keyof RooCodeSettings) === write.wrote) { - await queuedSettingWrite(key, () => - provider.contextProxy.setValue(key as keyof RooCodeSettings, write.previous as never), - ) - } -} - export const webviewMessageHandler = async ( provider: ClineProvider, message: WebviewMessage, @@ -1009,39 +914,23 @@ export const webviewMessageHandler = async ( } } - if (ROLLBACK_SETTING_KEYS.has(key)) { - const before = lastWriteOfSetting.get(key) - const write: SettingWrite = { - key, - previous, - wrote: newValue, - prev: before && !before.done ? before : undefined, - done: false, - } - if (write.prev) write.prev.next = write + if (isAppearanceSetting(key)) { + const write = beginSettingWrite(key, previous, newValue) written.push(write) - lastWriteOfSetting.set(key, write) - - // One write of this key at a time, until it has reached durable storage. - // What it replaces is read when it starts, after the writes before it have reached storage. - await queuedSettingWrite(key, () => { - if (!write.inherited) - write.previous = provider.contextProxy.getValue(key as keyof RooCodeSettings) - return provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) - }) + await performSettingWrite(provider.contextProxy, write) continue } await provider.contextProxy.setValue(key as keyof RooCodeSettings, newValue) } - for (const write of written) finishSettingWrite(write) + finishSettingWrites(written) } catch (error) { failure = error instanceof Error ? error.message : String(error) for (const write of written.reverse()) { try { - await undoSettingWrite(provider, write) + await undoSettingWrite(provider.contextProxy, write) } catch (rollbackError) { provider.log( `[updateSettings] Could not restore ${write.key}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`, @@ -1051,7 +940,7 @@ export const webviewMessageHandler = async ( provider.log(`[updateSettings] Save failed: ${failure}`) - if (failedKey !== undefined && ROLLBACK_SETTING_KEYS.has(failedKey)) { + if (failedKey !== undefined && isAppearanceSetting(failedKey)) { vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) } else { // Not an appearance value: handled as it always was, once the webview has been told. From d3f793794cd591c8249b79a2f133b12ab9bb7d11 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Fri, 30 Oct 2026 22:30:41 -0700 Subject: [PATCH 35/42] fix(ui): a finished write is the base of a later queued one; an untouched stepper stores nothing; pin the appearance bounds --- .../__tests__/appearanceSettingWrites.spec.ts | 46 +++++++++++++++++++ src/core/config/appearanceSettingWrites.ts | 22 ++++++++- .../src/components/settings/NumberStepper.tsx | 23 ++++++++-- .../settings/__tests__/NumberStepper.spec.tsx | 41 +++++++++++++++++ .../src/utils/__tests__/appearance.spec.ts | 35 ++++++++++++-- 5 files changed, 157 insertions(+), 10 deletions(-) diff --git a/src/core/config/__tests__/appearanceSettingWrites.spec.ts b/src/core/config/__tests__/appearanceSettingWrites.spec.ts index 7c50c87c32..62a3d7d420 100644 --- a/src/core/config/__tests__/appearanceSettingWrites.spec.ts +++ b/src/core/config/__tests__/appearanceSettingWrites.spec.ts @@ -100,6 +100,52 @@ describe("appearanceSettingWrites", () => { }) }) + describe("a write that finished between two that fail", () => { + it("keeps its value when the earlier one fails and then the later one", async () => { + const first = beginSettingWrite("interfaceFontScale", 100, 150) + await performSettingWrite(contextProxy, first) + const second = beginSettingWrite("interfaceFontScale", 150, 120) + await performSettingWrite(contextProxy, second) + const third = beginSettingWrite("interfaceFontScale", 120, 80) // registered while the second is pending + finishSettingWrites([second]) // committed, between the other two + await performSettingWrite(contextProxy, third) + + await undoSettingWrite(contextProxy, first) // superseded: the committed value is not its to restore + await undoSettingWrite(contextProxy, third) + + expect(stored.get("interfaceFontScale")).toBe(120) + }) + + it("keeps its value for a later write that has not started when the earlier one fails", async () => { + const first = beginSettingWrite("interfaceFontScale", 100, 150) + await performSettingWrite(contextProxy, first) + const second = beginSettingWrite("interfaceFontScale", 150, 120) + await performSettingWrite(contextProxy, second) + const third = beginSettingWrite("interfaceFontScale", 120, 80) // queued, not started + + await undoSettingWrite(contextProxy, first) + finishSettingWrites([second]) + await performSettingWrite(contextProxy, third) + await undoSettingWrite(contextProxy, third) + + expect(stored.get("interfaceFontScale")).toBe(120) + }) + + it("leaves what a write read when it started, if it had started when the earlier one finished", async () => { + const first = beginSettingWrite("interfaceFontScale", 100, 150) + await performSettingWrite(contextProxy, first) + const second = beginSettingWrite("interfaceFontScale", 150, 120) + await performSettingWrite(contextProxy, second) + const third = beginSettingWrite("interfaceFontScale", 120, 80) + await performSettingWrite(contextProxy, third) // started: it read 120 + + finishSettingWrites([second]) + await undoSettingWrite(contextProxy, third) + + expect(stored.get("interfaceFontScale")).toBe(120) + }) + }) + it("puts a failed write back to what was stored before it", async () => { const write = beginSettingWrite("interfaceFontScale", 100, 120) store("interfaceFontScale", 120) diff --git a/src/core/config/appearanceSettingWrites.ts b/src/core/config/appearanceSettingWrites.ts index 998d7b773d..ad6c37fad0 100644 --- a/src/core/config/appearanceSettingWrites.ts +++ b/src/core/config/appearanceSettingWrites.ts @@ -22,6 +22,8 @@ export interface SettingWrite { previous: unknown /** `previous` was handed over by a write that was rolled back, so it is not read again when this write starts. */ inherited?: boolean + /** Its store has been issued, so `previous` has been read. */ + started?: boolean wrote: unknown /** The write before this one that has not finished yet, and the one after it. */ prev?: SettingWrite @@ -81,6 +83,7 @@ export const settingWriteBookkeepingSize = () => ({ export const performSettingWrite = (contextProxy: ContextProxy, write: SettingWrite): Promise => queuedSettingWrite(write.key, () => { if (!write.inherited) write.previous = contextProxy.getValue(write.key as keyof RooCodeSettings) + write.started = true return contextProxy.setValue(write.key as keyof RooCodeSettings, write.wrote as never) }) @@ -92,12 +95,27 @@ const unlinkSettingWrite = (write: SettingWrite) => { write.next = undefined } -/** The save that made these writes succeeded. Nothing is kept about them once they are over. */ +/** + * The save that made these writes succeeded. Nothing is kept about them once they are over. The value is committed, + * so it is what a later write that has not started yet replaces, and the writes on either side of it no longer hand + * values to each other: an earlier write that fails now has nothing left to put back behind it. + */ export const finishSettingWrites = (writes: SettingWrite[]) => { for (const write of writes) { write.done = true if (lastWriteOfSetting.get(write.key) === write) lastWriteOfSetting.delete(write.key) - unlinkSettingWrite(write) + + const { next } = write + if (next && !next.done) { + if (!next.started) { + next.previous = write.wrote + next.inherited = true + } + next.prev = undefined + } + if (write.prev) write.prev.next = undefined + write.prev = undefined + write.next = undefined } } diff --git a/webview-ui/src/components/settings/NumberStepper.tsx b/webview-ui/src/components/settings/NumberStepper.tsx index d4b915bc0d..4420e912b6 100644 --- a/webview-ui/src/components/settings/NumberStepper.tsx +++ b/webview-ui/src/components/settings/NumberStepper.tsx @@ -32,8 +32,20 @@ export const NumberStepper = ({ const { min, max, step, fallback, unit } = setting const current = value ?? fallback const [draft, setDraft] = useState(String(current)) + // Whether the user typed in the box. Leaving or confirming an untouched box must not turn what it shows (the + // fallback, while nothing is set) into a stored value. + const [typed, setTyped] = useState(false) - useEffect(() => setDraft(String(current)), [current]) + useEffect(() => { + setDraft(String(current)) + setTyped(false) + }, [current]) + + const commitTyped = () => { + if (!typed) return + setTyped(false) + commit(Number(draft)) + } const commit = (next: number) => { if (!Number.isFinite(next)) { @@ -77,10 +89,13 @@ export const NumberStepper = ({ className="w-16 text-center bg-vscode-input-background text-vscode-input-foreground border-x border-vscode-input-border outline-none focus:border-vscode-focusBorder tabular-nums" inputMode="numeric" value={draft} - onChange={(e) => setDraft(e.target.value.replace(/[^\d]/g, ""))} - onBlur={() => commit(Number(draft))} + onChange={(e) => { + setDraft(e.target.value.replace(/[^\d]/g, "")) + setTyped(true) + }} + onBlur={commitTyped} onKeyDown={(e) => { - if (e.key === "Enter") commit(Number(draft)) + if (e.key === "Enter") commitTyped() if (e.key === "ArrowUp") { e.preventDefault() commit(current + step) diff --git a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx index 4dd59d54b6..3721b957cc 100644 --- a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx @@ -53,6 +53,8 @@ describe("NumberStepper", () => { it("stores a typed value that equals the displayed default as that number", () => { const { onChange, input } = setup() + // As typed over the shown 12: the box goes through "1" on the way to "12". + fireEvent.change(input, { target: { value: "1" } }) fireEvent.change(input, { target: { value: "12" } }) fireEvent.blur(input) expect(onChange).toHaveBeenCalledTimes(1) @@ -95,6 +97,45 @@ describe("NumberStepper", () => { expect(onChange).toHaveBeenLastCalledWith(15) }) + describe("leaving the box without typing", () => { + it("stores nothing when the setting is unset and the box is only focused and left", () => { + const { onChange, input } = setup() // unset: shows the fallback, 12 + fireEvent.focus(input) + fireEvent.blur(input) + expect(onChange).not.toHaveBeenCalled() + expect(input.value).toBe("12") + }) + + it("stores nothing when Enter is pressed in an untouched box", () => { + const { onChange, input } = setup() + fireEvent.keyDown(input, { key: "Enter" }) + expect(onChange).not.toHaveBeenCalled() + }) + + it("stores nothing when a set value is only focused and left", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.focus(input) + fireEvent.blur(input) + expect(onChange).not.toHaveBeenCalled() + }) + + it("still stores what the user typed, even when it equals the shown fallback", () => { + const { onChange, input } = setup() + fireEvent.change(input, { target: { value: "1" } }) + fireEvent.change(input, { target: { value: "12" } }) + fireEvent.blur(input) + expect(onChange).toHaveBeenCalledWith(12) + }) + + it("treats a second blur after a commit as untouched", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "20" } }) + fireEvent.blur(input) + fireEvent.blur(input) + expect(onChange).toHaveBeenCalledTimes(1) + }) + }) + it("reverts an empty entry to the current value", () => { const { onChange, input } = setup({ value: 16 }) fireEvent.change(input, { target: { value: "" } }) diff --git a/webview-ui/src/utils/__tests__/appearance.spec.ts b/webview-ui/src/utils/__tests__/appearance.spec.ts index 8a22685fa3..f2a34217e2 100644 --- a/webview-ui/src/utils/__tests__/appearance.spec.ts +++ b/webview-ui/src/utils/__tests__/appearance.spec.ts @@ -1,4 +1,6 @@ -import { APPEARANCE_SETTINGS, applyAppearanceVariables, clampAppearance } from "../appearance" +import { globalSettingsSchema } from "@roo-code/types" + +import { applyAppearanceVariables, clampAppearance } from "../appearance" describe("clampAppearance", () => { it("passes through in-range integers", () => { @@ -6,9 +8,34 @@ describe("clampAppearance", () => { expect(clampAppearance("terminalFontSize", 14)).toBe(14) }) - it("clamps to the setting's range", () => { - expect(clampAppearance("interfaceFontScale", 10)).toBe(APPEARANCE_SETTINGS.interfaceFontScale.min) - expect(clampAppearance("editorFontSize", 999)).toBe(APPEARANCE_SETTINGS.editorFontSize.max) + // The bounds are written out here, not read from APPEARANCE_SETTINGS (the thing under test), and the host checks + // the same bounds with globalSettingsSchema: a drift in either place fails one of these. + const bounds = [ + ["interfaceFontScale", 50, 200], + ["terminalFontSize", 8, 32], + ["editorFontSize", 8, 32], + ["spacingScale", 50, 200], + ] as const + + it.each(bounds)("%s is clamped to %i..%i", (key, min, max) => { + expect(clampAppearance(key, min - 1)).toBe(min) + expect(clampAppearance(key, 0)).toBe(min) + expect(clampAppearance(key, min)).toBe(min) + expect(clampAppearance(key, max)).toBe(max) + expect(clampAppearance(key, max + 1)).toBe(max) + expect(clampAppearance(key, 99999)).toBe(max) + }) + + it.each(bounds)("%s: the host's schema accepts the bounds and refuses a value outside them", (key, min, max) => { + const schema = globalSettingsSchema.shape[key] + expect(schema.safeParse(min).success).toBe(true) + expect(schema.safeParse(max).success).toBe(true) + expect(schema.safeParse(min - 1).success).toBe(false) + expect(schema.safeParse(max + 1).success).toBe(false) + // And what the stepper can produce is always accepted. + for (const value of [min - 10, min, max, max + 10]) { + expect(schema.safeParse(clampAppearance(key, value)).success).toBe(true) + } }) it("rounds fractional input", () => { From 434d7b17583ca0b7e603ec49dc927cffc9629bf2 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 10:40:06 -0700 Subject: [PATCH 36/42] fix(ui): import appearance values through the write chain; link the stepper's unit and description; step arrows from the typed value --- .../config/__tests__/importExport.spec.ts | 82 +++++++++++++++++++ src/core/config/importExport.ts | 34 +++++++- .../src/components/settings/NumberStepper.tsx | 16 +++- .../settings/__tests__/NumberStepper.spec.tsx | 42 ++++++++++ 4 files changed, 169 insertions(+), 5 deletions(-) diff --git a/src/core/config/__tests__/importExport.spec.ts b/src/core/config/__tests__/importExport.spec.ts index 90db81d8a1..14bba247b1 100644 --- a/src/core/config/__tests__/importExport.spec.ts +++ b/src/core/config/__tests__/importExport.spec.ts @@ -19,6 +19,12 @@ import { } from "../importExport" import { ProviderSettingsManager } from "../ProviderSettingsManager" import { ContextProxy } from "../ContextProxy" +import { + beginSettingWrite, + performSettingWrite, + settingWriteBookkeepingSize, + undoSettingWrite, +} from "../appearanceSettingWrites" import { CustomModesManager } from "../CustomModesManager" import { safeWriteJson } from "../../../utils/safeWriteJson" @@ -274,6 +280,82 @@ describe("importExport", () => { expect(mockContextProxy.setValues).not.toHaveBeenCalled() }) + describe("appearance settings go through the write chain of the saves", () => { + const stored = new Map() + + const importWith = (globalSettings: Record) => { + ;(fs.readFile as Mock).mockResolvedValue( + JSON.stringify({ + providerProfiles: { + currentApiConfigName: "test", + apiConfigs: { + test: { apiProvider: providerIdentifiers.openai, apiKey: "test-key", id: "test-id" }, + }, + }, + globalSettings, + }), + ) + return importSettingsFromPath("/mock/path/settings.json", { + providerSettingsManager: mockProviderSettingsManager, + contextProxy: mockContextProxy, + customModesManager: mockCustomModesManager, + }) + } + + beforeEach(() => { + stored.clear() + stored.set("interfaceFontScale", 100) + mockProviderSettingsManager.export.mockResolvedValue({ + currentApiConfigName: "default", + apiConfigs: { default: { apiProvider: providerIdentifiers.anthropic, id: "default-id" } }, + }) + mockProviderSettingsManager.import.mockResolvedValue(undefined) + mockProviderSettingsManager.listConfig.mockResolvedValue([]) + mockContextProxy.setProviderSettings.mockResolvedValue(undefined) + mockContextProxy.getValue.mockImplementation(((key: string) => + stored.get(key)) as unknown as typeof mockContextProxy.getValue) + mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { + stored.set(key, value) + }) as unknown as typeof mockContextProxy.setValue) + mockContextProxy.setValues.mockResolvedValue(undefined) + }) + + it("stores an appearance value as a recorded write, and the rest through setValues", async () => { + const result = await importWith({ interfaceFontScale: 120, mode: "code" }) + + expect(result).toMatchObject({ success: true }) + expect(stored.get("interfaceFontScale")).toBe(120) + expect(mockContextProxy.setValues).toHaveBeenCalledWith({ mode: "code" }) + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + + it("keeps an imported value when a save that wrote the same value fails afterwards", async () => { + const save = beginSettingWrite("interfaceFontScale", 100, 120) + await performSettingWrite(mockContextProxy as unknown as ContextProxy, save) + + await importWith({ interfaceFontScale: 120 }) // the same value, while the save is pending + await undoSettingWrite(mockContextProxy as unknown as ContextProxy, save) // the save fails + + expect(stored.get("interfaceFontScale")).toBe(120) + }) + + it("finishes its writes, and reports the failure, when a write fails", async () => { + mockContextProxy.setValue.mockRejectedValue(new Error("storage unavailable")) + + const result = await importWith({ interfaceFontScale: 120 }) + + expect(result).toEqual({ success: false, error: "storage unavailable" }) + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + + it("writes everything through setValues when the file has no appearance value", async () => { + await importWith({ mode: "code" }) + + expect(mockContextProxy.setValues).toHaveBeenCalledWith({ mode: "code" }) + expect(mockContextProxy.setValue).not.toHaveBeenCalledWith("interfaceFontScale", expect.anything()) + }) + }) + it("should import settings successfully from a valid file", async () => { ;(vscode.window.showOpenDialog as Mock).mockResolvedValue([{ fsPath: "/mock/path/settings.json" }]) diff --git a/src/core/config/importExport.ts b/src/core/config/importExport.ts index 9882039ad3..ea94dc8a36 100644 --- a/src/core/config/importExport.ts +++ b/src/core/config/importExport.ts @@ -19,6 +19,13 @@ import { TelemetryService } from "@roo-code/telemetry" import { ProviderSettingsManager, providerProfilesSchema } from "./ProviderSettingsManager" import { ContextProxy } from "./ContextProxy" import { CustomModesManager } from "./CustomModesManager" +import { + APPEARANCE_SETTING_KEYS, + beginSettingWrite, + finishSettingWrites, + isAppearanceSetting, + performSettingWrite, +} from "./appearanceSettingWrites" import { downgradeLegacyRooConfig, ROUTER_REMOVAL_IMPORT_WARNING } from "./routerRemoval" import { resolveDefaultSaveUri, saveLastExportPath } from "../../utils/export" import { t } from "../../i18n" @@ -228,7 +235,7 @@ export async function importSettingsFromPath( // They will be imported automatically with the config - no special handling needed await providerSettingsManager.import(providerProfiles) - await contextProxy.setValues(sanitizedGlobalSettings) + await setValuesThroughWriteChain(contextProxy, sanitizedGlobalSettings) // Set the current provider. const currentProviderName = providerProfiles.currentApiConfigName @@ -264,6 +271,31 @@ export async function importSettingsFromPath( } } +/** + * Writes global settings. The appearance values go through the same per-key write chain as saves, so a save that + * fails and rolls back does not undo a value the import stored meanwhile, even when it is the same value. The import + * itself is not rolled back, as before: its writes are final once they have been stored or have failed. + */ +async function setValuesThroughWriteChain(contextProxy: ContextProxy, settings: GlobalSettings) { + const keys = APPEARANCE_SETTING_KEYS.filter((key) => key in settings) + if (keys.length === 0) return contextProxy.setValues(settings) + + const writes = keys.map((key) => beginSettingWrite(key, contextProxy.getValue(key), settings[key])) + const others = Object.fromEntries( + Object.entries(settings).filter(([key]) => !isAppearanceSetting(key)), + ) as GlobalSettings + + // Every write is awaited before the writes are finished, so none is still running when it leaves the chain. + const results = await Promise.allSettled([ + contextProxy.setValues(others), + ...writes.map((write) => performSettingWrite(contextProxy, write)), + ]) + finishSettingWrites(writes) + + const failed = results.find((result): result is PromiseRejectedResult => result.status === "rejected") + if (failed) throw failed.reason +} + /** * Import settings from a file using a file dialog * @param options - Import options containing managers and proxy diff --git a/webview-ui/src/components/settings/NumberStepper.tsx b/webview-ui/src/components/settings/NumberStepper.tsx index 4420e912b6..af61cbbaea 100644 --- a/webview-ui/src/components/settings/NumberStepper.tsx +++ b/webview-ui/src/components/settings/NumberStepper.tsx @@ -41,6 +41,9 @@ export const NumberStepper = ({ setTyped(false) }, [current]) + // Arrow keys step from what is in the box when the user has typed a number, so the typed value is not lost. + const stepBase = typed && draft.trim() !== "" && Number.isFinite(Number(draft)) ? Number(draft) : current + const commitTyped = () => { if (!typed) return setTyped(false) @@ -89,6 +92,7 @@ export const NumberStepper = ({ className="w-16 text-center bg-vscode-input-background text-vscode-input-foreground border-x border-vscode-input-border outline-none focus:border-vscode-focusBorder tabular-nums" inputMode="numeric" value={draft} + aria-describedby={`${testId}-unit ${testId}-description`} onChange={(e) => { setDraft(e.target.value.replace(/[^\d]/g, "")) setTyped(true) @@ -98,11 +102,11 @@ export const NumberStepper = ({ if (e.key === "Enter") commitTyped() if (e.key === "ArrowUp") { e.preventDefault() - commit(current + step) + commit(stepBase + step) } if (e.key === "ArrowDown") { e.preventDefault() - commit(current - step) + commit(stepBase - step) } }} data-testid={`${testId}-input`} @@ -117,7 +121,9 @@ export const NumberStepper = ({

    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 diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-unset.png b/webview-ui/src/components/settings/__tests__/__screenshots__/appearance-consumers-high-contrast-unset.png index f48b850a869e05957725b2ca91226d302f5a1509..ddff203f447c092c927df39f5f2f24c7622360fb 100644 GIT binary patch literal 24104 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 RISHSwmG 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

-
{description}
+
+ {description} +
) } diff --git a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx index 3721b957cc..bbe26b7225 100644 --- a/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/NumberStepper.spec.tsx @@ -97,6 +97,48 @@ describe("NumberStepper", () => { expect(onChange).toHaveBeenLastCalledWith(15) }) + describe("arrow keys", () => { + it("step from the stored value when nothing was typed", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.keyDown(input, { key: "ArrowUp" }) + expect(onChange).toHaveBeenLastCalledWith(17) + fireEvent.keyDown(input, { key: "ArrowDown" }) + expect(onChange).toHaveBeenLastCalledWith(15) + }) + + it("step from the number typed in the box, not the stored value", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "20" } }) + fireEvent.keyDown(input, { key: "ArrowUp" }) + expect(onChange).toHaveBeenLastCalledWith(21) + }) + + it("step down from the typed number", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "20" } }) + fireEvent.keyDown(input, { key: "ArrowDown" }) + expect(onChange).toHaveBeenLastCalledWith(19) + }) + + it("step from the stored value when the box was emptied", () => { + const { onChange, input } = setup({ value: 16 }) + fireEvent.change(input, { target: { value: "" } }) + fireEvent.keyDown(input, { key: "ArrowUp" }) + expect(onChange).toHaveBeenLastCalledWith(17) + }) + }) + + describe("accessibility", () => { + it("announces the unit and the description with the value", () => { + const { input } = setup({ description: "Size of the terminal text" }) + + const described = (input.getAttribute("aria-describedby") ?? "").split(" ") + const texts = described.map((id) => document.getElementById(id)?.textContent) + + expect(texts).toEqual([setting.unit, "Size of the terminal text"]) + }) + }) + describe("leaving the box without typing", () => { it("stores nothing when the setting is unset and the box is only focused and left", () => { const { onChange, input } = setup() // unset: shows the fallback, 12 From cee90237afcc01b59b0eff8f38e5911dbc4cbf3a Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 13:10:54 -0700 Subject: [PATCH 37/42] fix(ui): undo an import write that failed instead of finishing it --- .../config/__tests__/importExport.spec.ts | 47 ++++++++++++++++++- src/core/config/importExport.ts | 28 ++++++++--- 2 files changed, 68 insertions(+), 7 deletions(-) diff --git a/src/core/config/__tests__/importExport.spec.ts b/src/core/config/__tests__/importExport.spec.ts index 14bba247b1..fea407ed4e 100644 --- a/src/core/config/__tests__/importExport.spec.ts +++ b/src/core/config/__tests__/importExport.spec.ts @@ -339,7 +339,52 @@ describe("importExport", () => { expect(stored.get("interfaceFontScale")).toBe(120) }) - it("finishes its writes, and reports the failure, when a write fails", async () => { + it("undoes a write that failed, so an earlier save still pending keeps its own rollback", async () => { + const proxy = mockContextProxy as unknown as ContextProxy + const save = beginSettingWrite("interfaceFontScale", 100, 150) + await performSettingWrite(proxy, save) // a save has stored 150 and is still pending + + mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { + if (value === 120) throw new Error("storage unavailable") // the import's write fails + stored.set(key, value) + }) as unknown as typeof mockContextProxy.setValue) + const result = await importWith({ interfaceFontScale: 120 }) + expect(result).toEqual({ success: false, error: "storage unavailable" }) + + await undoSettingWrite(proxy, save) // the save fails afterwards + + expect(stored.get("interfaceFontScale")).toBe(100) + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + + it("puts back a value that was stored before its write failed, and still reports the failure", async () => { + mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { + stored.set(key, value) + if (value === 120) throw new Error("failed after storing") + }) as unknown as typeof mockContextProxy.setValue) + + const result = await importWith({ interfaceFontScale: 120 }) + + expect(result).toEqual({ success: false, error: "failed after storing" }) + expect(stored.get("interfaceFontScale")).toBe(100) + }) + + it("reports the failure even when putting a value back fails as well", async () => { + const consoleError = vi.spyOn(console, "error").mockImplementation(() => {}) + mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { + if (value === 100) throw new Error("restore failed") + stored.set(key, value) + if (value === 120) throw new Error("failed after storing") + }) as unknown as typeof mockContextProxy.setValue) + + const result = await importWith({ interfaceFontScale: 120 }) + + expect(result).toEqual({ success: false, error: "failed after storing" }) + expect(consoleError).toHaveBeenCalled() + consoleError.mockRestore() + }) + + it("leaves nothing in the chain, and reports the failure, when a write fails", async () => { mockContextProxy.setValue.mockRejectedValue(new Error("storage unavailable")) const result = await importWith({ interfaceFontScale: 120 }) diff --git a/src/core/config/importExport.ts b/src/core/config/importExport.ts index ea94dc8a36..4c0701dc42 100644 --- a/src/core/config/importExport.ts +++ b/src/core/config/importExport.ts @@ -25,6 +25,7 @@ import { finishSettingWrites, isAppearanceSetting, performSettingWrite, + undoSettingWrite, } from "./appearanceSettingWrites" import { downgradeLegacyRooConfig, ROUTER_REMOVAL_IMPORT_WARNING } from "./routerRemoval" import { resolveDefaultSaveUri, saveLastExportPath } from "../../utils/export" @@ -274,7 +275,9 @@ export async function importSettingsFromPath( /** * Writes global settings. The appearance values go through the same per-key write chain as saves, so a save that * fails and rolls back does not undo a value the import stored meanwhile, even when it is the same value. The import - * itself is not rolled back, as before: its writes are final once they have been stored or have failed. + * is not rolled back as a whole, as before: a write that succeeded is final. A write that failed is undone, not + * finished, so it leaves the chain the way a failed save does and an earlier save that is still pending keeps its own + * rollback. */ async function setValuesThroughWriteChain(contextProxy: ContextProxy, settings: GlobalSettings) { const keys = APPEARANCE_SETTING_KEYS.filter((key) => key in settings) @@ -285,15 +288,28 @@ async function setValuesThroughWriteChain(contextProxy: ContextProxy, settings: Object.entries(settings).filter(([key]) => !isAppearanceSetting(key)), ) as GlobalSettings - // Every write is awaited before the writes are finished, so none is still running when it leaves the chain. - const results = await Promise.allSettled([ + // Every write is awaited before any is finished or undone, so none is still running when it leaves the chain. + const [othersResult, ...writeResults] = await Promise.allSettled([ contextProxy.setValues(others), ...writes.map((write) => performSettingWrite(contextProxy, write)), ]) - finishSettingWrites(writes) - const failed = results.find((result): result is PromiseRejectedResult => result.status === "rejected") - if (failed) throw failed.reason + let failure = othersResult.status === "rejected" ? othersResult : undefined + for (const [index, write] of writes.entries()) { + const result = writeResults[index] + if (result.status === "fulfilled") { + finishSettingWrites([write]) + continue + } + failure ??= result + try { + await undoSettingWrite(contextProxy, write) + } catch (restoreError) { + console.error(`Failed to restore setting "${write.key}" after import failure:`, restoreError) + } + } + + if (failure) throw failure.reason } /** From f82060bdee6c4ebab90feff889131596d8dbd3e3 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 13:11:08 -0700 Subject: [PATCH 38/42] test: other settings failing to store in an import --- src/core/config/__tests__/importExport.spec.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/core/config/__tests__/importExport.spec.ts b/src/core/config/__tests__/importExport.spec.ts index fea407ed4e..23157de5e4 100644 --- a/src/core/config/__tests__/importExport.spec.ts +++ b/src/core/config/__tests__/importExport.spec.ts @@ -357,6 +357,16 @@ describe("importExport", () => { expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) }) + it("keeps the appearance values that were stored when the other settings fail to store", async () => { + mockContextProxy.setValues.mockRejectedValue(new Error("other settings failed")) + + const result = await importWith({ interfaceFontScale: 120, mode: "code" }) + + expect(result).toEqual({ success: false, error: "other settings failed" }) + expect(stored.get("interfaceFontScale")).toBe(120) + expect(settingWriteBookkeepingSize()).toEqual({ latestWrites: 0, queuedKeys: 0 }) + }) + it("puts back a value that was stored before its write failed, and still reports the failure", async () => { mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { stored.set(key, value) From fcf747a3eeed5ab9a68b2192c3e3530debc6f258 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 15:46:00 -0700 Subject: [PATCH 39/42] test: assert which setting and error the restore log names --- src/core/config/__tests__/importExport.spec.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/config/__tests__/importExport.spec.ts b/src/core/config/__tests__/importExport.spec.ts index 23157de5e4..0e8e5f46a0 100644 --- a/src/core/config/__tests__/importExport.spec.ts +++ b/src/core/config/__tests__/importExport.spec.ts @@ -390,7 +390,11 @@ describe("importExport", () => { const result = await importWith({ interfaceFontScale: 120 }) expect(result).toEqual({ success: false, error: "failed after storing" }) - expect(consoleError).toHaveBeenCalled() + expect(consoleError).toHaveBeenCalledTimes(1) + expect(consoleError).toHaveBeenCalledWith( + 'Failed to restore setting "interfaceFontScale" after import failure:', + expect.objectContaining({ message: "restore failed" }), + ) consoleError.mockRestore() }) From 9ecfd00ddde1661a31e294f5de45484edddf3c0a Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 16:24:50 -0700 Subject: [PATCH 40/42] test: a rolled-back import write puts an unset appearance value back as unset --- src/core/config/__tests__/importExport.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/core/config/__tests__/importExport.spec.ts b/src/core/config/__tests__/importExport.spec.ts index 0e8e5f46a0..35bd28865d 100644 --- a/src/core/config/__tests__/importExport.spec.ts +++ b/src/core/config/__tests__/importExport.spec.ts @@ -379,6 +379,20 @@ describe("importExport", () => { expect(stored.get("interfaceFontScale")).toBe(100) }) + it("puts back an unset value as unset when the write failed after storing", async () => { + stored.delete("interfaceFontScale") // cold start: nothing was ever stored for it + mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { + stored.set(key, value) + if (value === 120) throw new Error("failed after storing") + }) as unknown as typeof mockContextProxy.setValue) + + const result = await importWith({ interfaceFontScale: 120 }) + + expect(result).toEqual({ success: false, error: "failed after storing" }) + expect(stored.get("interfaceFontScale")).toBeUndefined() + expect(mockContextProxy.setValue).toHaveBeenCalledWith("interfaceFontScale", undefined) + }) + it("reports the failure even when putting a value back fails as well", async () => { const consoleError = vi.spyOn(console, "error").mockImplementation(() => {}) mockContextProxy.setValue.mockImplementation((async (key: string, value: unknown) => { From d390d61c2a4b474c9607dd52e3dfabd4be384358 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 16:31:18 -0700 Subject: [PATCH 41/42] fix(ui): send only the appearance values the form changed; validate chatFontSize on the host and in the preview --- .../__tests__/webviewMessageHandler.spec.ts | 2 + src/core/webview/webviewMessageHandler.ts | 7 +- .../components/settings/AppearancePreview.tsx | 6 +- .../src/components/settings/SettingsView.tsx | 16 +++-- .../__tests__/AppearancePreview.spec.tsx | 21 ++++++ .../settings/__tests__/SettingsView.spec.tsx | 64 +++++++++++++++---- .../src/utils/__tests__/appearance.spec.ts | 28 +++++++- webview-ui/src/utils/appearance.ts | 4 ++ 8 files changed, 124 insertions(+), 24 deletions(-) diff --git a/src/core/webview/__tests__/webviewMessageHandler.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.spec.ts index 2792bf4517..659e60e7a3 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.spec.ts @@ -2387,6 +2387,8 @@ describe("webviewMessageHandler - the appearance settings are saved all-or-nothi terminalFontSize: { min: 8, max: 32 }, editorFontSize: { min: 8, max: 32 }, spacingScale: { min: 50, max: 200 }, + // Not an appearance value of the transaction, but shown by the same preview and checked in the same pass. + chatFontSize: { min: 8, max: 32 }, } as const const keys = Object.keys(bounds) as Array diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 247c80034d..136febeda4 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -149,6 +149,8 @@ const APPEARANCE_VALUE_SCHEMAS = { terminalFontSize: globalSettingsSchema.shape.terminalFontSize, editorFontSize: globalSettingsSchema.shape.editorFontSize, spacingScale: globalSettingsSchema.shape.spacingScale, + // Shown by the appearance preview next to these, so it is checked in the same pass. + chatFontSize: globalSettingsSchema.shape.chatFontSize, } export const webviewMessageHandler = async ( @@ -940,7 +942,10 @@ export const webviewMessageHandler = async ( provider.log(`[updateSettings] Save failed: ${failure}`) - if (failedKey !== undefined && isAppearanceSetting(failedKey)) { + if ( + failedKey !== undefined && + (isAppearanceSetting(failedKey) || failedKey in APPEARANCE_VALUE_SCHEMAS) + ) { vscode.window.showErrorMessage(t("common:errors.settings_save_failed", { error: failure })) } else { // Not an appearance value: handled as it always was, once the webview has been told. diff --git a/webview-ui/src/components/settings/AppearancePreview.tsx b/webview-ui/src/components/settings/AppearancePreview.tsx index eff255e47b..754c07edc8 100644 --- a/webview-ui/src/components/settings/AppearancePreview.tsx +++ b/webview-ui/src/components/settings/AppearancePreview.tsx @@ -1,7 +1,7 @@ import type { CSSProperties } from "react" import { useAppTranslation } from "@/i18n/TranslationContext" -import { APPEARANCE_SETTINGS, clampAppearance, type AppearanceKey } from "@/utils/appearance" +import { APPEARANCE_SETTINGS, clampAppearance, isChatFontSize, type AppearanceKey } from "@/utils/appearance" interface AppearancePreviewProps { values: Partial> @@ -29,7 +29,9 @@ export const AppearancePreview = ({ values, chatFontSize }: AppearancePreviewPro const v = clampAppearance(key, values[key]) vars[setting.cssVar] = v === undefined ? "initial" : setting.toCss(v) } - vars["--zoo-chat-font-size"] = chatFontSize ? `${chatFontSize}px` : "initial" + // Only a whole number of pixels in the range the host accepts is written into the style; anything else (a + // corrupted stored value, a string) is left out, like an unset value. + vars["--zoo-chat-font-size"] = isChatFontSize(chatFontSize) ? `${chatFontSize}px` : "initial" const uiText: CSSProperties = { fontSize: "calc(var(--zoo-chat-font-size, var(--vscode-font-size)) * var(--zoo-ui-scale, 1))", diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index efb7beece0..efc10a55e1 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -398,9 +398,15 @@ const SettingsView = forwardRef(({ onDone, t if (isSettingValid) { // Only a save that changes an appearance value waits for the host's answer: those are saved // all-or-nothing, and a failed save has to keep the edits. Every other save behaves as it always did. - const appearanceEdited = (Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]).some( - (key) => (cachedState[key] ?? null) !== (extensionState[key] ?? null), + // Only the appearance values this form changed are sent, and null (not undefined) for a reset so it + // survives JSON and clears the stored value. A save that changes none sends none of them, so it neither + // waits for the host nor puts an appearance value into the host's all-or-nothing save. + const changedAppearance = Object.fromEntries( + (Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]) + .filter((key) => (cachedState[key] ?? null) !== (extensionState[key] ?? null)) + .map((key) => [key, cachedState[key] ?? null]), ) + const appearanceEdited = Object.keys(changedAppearance).length > 0 const saveId = appearanceEdited ? nextSaveRequestId() : undefined if (saveId) { pendingSaveEditedState.current = cachedState @@ -467,11 +473,7 @@ const SettingsView = forwardRef(({ onDone, t includeTaskHistoryInEnhance: includeTaskHistoryInEnhance ?? true, reasoningBlockCollapsed: reasoningBlockCollapsed ?? true, chatFontSize: chatFontSize ?? null, - // null (not undefined) so a reset survives JSON and clears the stored value - interfaceFontScale: interfaceFontScale ?? null, - terminalFontSize: terminalFontSize ?? null, - editorFontSize: editorFontSize ?? null, - spacingScale: spacingScale ?? null, + ...changedAppearance, enterBehavior: enterBehavior ?? "send", includeCurrentTime: includeCurrentTime ?? true, includeCurrentCost: includeCurrentCost ?? true, diff --git a/webview-ui/src/components/settings/__tests__/AppearancePreview.spec.tsx b/webview-ui/src/components/settings/__tests__/AppearancePreview.spec.tsx index 57e1ad2991..0412ce11f0 100644 --- a/webview-ui/src/components/settings/__tests__/AppearancePreview.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/AppearancePreview.spec.tsx @@ -58,6 +58,27 @@ describe("AppearancePreview", () => { expect(root().style.getPropertyValue("--zoo-chat-font-size")).toBe("16px") }) + it.each([8, 16, 32])("writes a chat font size of %i into the style", (size) => { + render() + expect(root().style.getPropertyValue("--zoo-chat-font-size")).toBe(`${size}px`) + }) + + it.each([ + ["below the range", 7], + ["above the range", 33], + ["zero", 0], + ["negative", -12], + ["fractional", 12.5], + ["not a number", Number.NaN], + ["infinite", Number.POSITIVE_INFINITY], + ["a string that would break out of the declaration", "12px; background: url(x)"], + ["an object", { size: 12 }], + ])("leaves a chat font size that is %s out of the style", (_name, size) => { + render() + expect(root().style.getPropertyValue("--zoo-chat-font-size")).toBe("initial") + expect(root().getAttribute("style")).not.toContain("background") + }) + it("sizes the editor sample like the live code block when no editor size is set (0.95em of the chat text)", () => { const { container } = render() const sample = container.querySelector("pre")! diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx index 9003665a64..0269124efa 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.spec.tsx @@ -501,7 +501,17 @@ describe("SettingsView - Sound Settings", () => { ) }) - it("saves all four appearance values, and persists null for each after a reset", () => { + const appearanceKeys = ["interfaceFontScale", "terminalFontSize", "editorFontSize", "spacingScale"] as const + const savedUpdates = () => + vi + .mocked(vscode.postMessage) + .mock.calls.map( + ([message]) => + message as { type?: string; requestId?: string; updatedSettings?: Record }, + ) + .filter((message) => message.type === "updateSettings") + + it("saves the four appearance values that were changed", () => { const { activateTab, getSettingsContent } = renderSettingsView() activateTab("ui") @@ -518,23 +528,20 @@ describe("SettingsView - Sound Settings", () => { } saveAndConfirm(vi.mocked(vscode.postMessage)) - expect(vscode.postMessage).toHaveBeenCalledWith( - expect.objectContaining({ - type: "updateSettings", - updatedSettings: expect.objectContaining(values), - }), - ) + expect(savedUpdates().at(-1)?.updatedSettings).toMatchObject(values) + }) + + it("persists null for each appearance value that was reset", () => { + const values = { interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 } + renderWithExtensionState(, { state: values }) + const getSettingsContent = () => screen.getByTestId("settings-content") - for (const key of Object.keys(values)) { + for (const key of appearanceKeys) { fireEvent.click(within(getSettingsContent()).getByTestId(`appearance-${key}-reset`)) } saveAndConfirm(vi.mocked(vscode.postMessage)) - const saves = vi - .mocked(vscode.postMessage) - .mock.calls.map(([message]) => message as { type?: string; updatedSettings?: Record }) - .filter((message) => message.type === "updateSettings") - expect(saves.at(-1)?.updatedSettings).toMatchObject({ + expect(savedUpdates().at(-1)?.updatedSettings).toMatchObject({ interfaceFontScale: null, terminalFontSize: null, editorFontSize: null, @@ -542,6 +549,37 @@ describe("SettingsView - Sound Settings", () => { }) }) + it("sends only the appearance values this form changed", () => { + const values = { interfaceFontScale: 120, terminalFontSize: 14, editorFontSize: 15, spacingScale: 80 } + renderWithExtensionState(, { state: values }) + const getSettingsContent = () => screen.getByTestId("settings-content") + + const input = within(getSettingsContent()).getByTestId("appearance-terminalFontSize-input") + expect((input as HTMLInputElement).value).toBe("14") // the saved value is what the form starts from + fireEvent.change(input, { target: { value: "16" } }) + fireEvent.blur(input) + saveAndConfirm(vi.mocked(vscode.postMessage)) + + const sent = savedUpdates().at(-1)?.updatedSettings ?? {} + expect(sent.terminalFontSize).toBe(16) + for (const key of appearanceKeys.filter((k) => k !== "terminalFontSize")) { + expect(sent).not.toHaveProperty(key) + } + }) + + it("sends none of the appearance values, and asks for no acknowledgement, when the save changes none", () => { + renderWithExtensionState(, { + state: { interfaceFontScale: 120 }, + }) + fireEvent.click(within(screen.getByTestId("settings-content")).getByTestId("sound-enabled-checkbox")) + fireEvent.click(screen.getByTestId("save-button")) // no acknowledgement is asked for + + const save = savedUpdates().at(-1) + expect(save).toBeDefined() + for (const key of appearanceKeys) expect(save?.updatedSettings).not.toHaveProperty(key) + expect(save?.requestId).toBeUndefined() + }) + it("saves fallback defaults for checkpoint and terminal settings", async () => { const { activateTab, getSettingsContent } = renderSettingsView({ enableCheckpoints: undefined, diff --git a/webview-ui/src/utils/__tests__/appearance.spec.ts b/webview-ui/src/utils/__tests__/appearance.spec.ts index f2a34217e2..400306b042 100644 --- a/webview-ui/src/utils/__tests__/appearance.spec.ts +++ b/webview-ui/src/utils/__tests__/appearance.spec.ts @@ -1,6 +1,6 @@ import { globalSettingsSchema } from "@roo-code/types" -import { applyAppearanceVariables, clampAppearance } from "../appearance" +import { applyAppearanceVariables, clampAppearance, isChatFontSize } from "../appearance" describe("clampAppearance", () => { it("passes through in-range integers", () => { @@ -88,3 +88,29 @@ describe("applyAppearanceVariables", () => { expect(root.style.getPropertyValue("--zoo-spacing-scale")).toBe("2") }) }) + +describe("isChatFontSize", () => { + it("accepts exactly what the host's schema accepts", () => { + const schema = globalSettingsSchema.shape.chatFontSize + for (const value of [ + 7, + 8, + 9, + 16, + 31, + 32, + 33, + 12.5, + 0, + -1, + Number.NaN, + Number.POSITIVE_INFINITY, + "12", + null, + undefined, + {}, + ]) { + expect(isChatFontSize(value)).toBe(typeof value === "number" && schema.safeParse(value).success) + } + }) +}) diff --git a/webview-ui/src/utils/appearance.ts b/webview-ui/src/utils/appearance.ts index af83084b39..c327fc9976 100644 --- a/webview-ui/src/utils/appearance.ts +++ b/webview-ui/src/utils/appearance.ts @@ -60,6 +60,10 @@ export const APPEARANCE_SETTINGS = { export type AppearanceKey = keyof typeof APPEARANCE_SETTINGS export type AppearanceValues = Partial> +/** The chat font size the host accepts (`globalSettingsSchema`): an integer from 8 to 32 px. */ +export const isChatFontSize = (value: unknown): value is number => + typeof value === "number" && Number.isInteger(value) && value >= 8 && value <= 32 + /** Clamps to the setting's range and snaps to an integer; non-finite → undefined. */ export function clampAppearance(key: AppearanceKey, value: number | null | undefined): number | undefined { if (typeof value !== "number" || !Number.isFinite(value)) return undefined From 6e15f268873ff700f0d74a92908059d8d22fbe28 Mon Sep 17 00:00:00 2001 From: Karthick Mahalingam Date: Sat, 31 Oct 2026 21:44:27 -0700 Subject: [PATCH 42/42] fix(ui): track which appearance values the form edited, not which differ from the live state --- .../src/components/settings/SettingsView.tsx | 32 +++++- .../SettingsView.saveResult.spec.tsx | 98 ++++++++++++++++++- 2 files changed, 126 insertions(+), 4 deletions(-) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index efc10a55e1..e10e6ed68d 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -140,6 +140,12 @@ const SettingsView = forwardRef(({ onDone, t const [pendingSaveId, setPendingSaveId] = useState(undefined) // The state the pending save was made from, to tell whether the user edited again while it was in flight. const pendingSaveEditedState = useRef(undefined) + // The appearance values this form has edited. A value that only differs from the live state because the live state + // changed (another webview, a reset from the host) is not an edit and is never sent. A ref, not state: it is read + // when saving and needs no render of its own. + const editedAppearance = useRef(new Set()) + // What the pending save sent for each appearance value, to tell which edits it has saved when it succeeds. + const pendingAppearanceSent = useRef>({}) const [errorMessage, setErrorMessage] = useState(undefined) const [activeTab, setActiveTab] = useState( targetSection && sectionNames.includes(targetSection as SectionName) @@ -249,6 +255,7 @@ const SettingsView = forwardRef(({ onDone, t setCachedState((prevCachedState) => ({ ...prevCachedState, ...extensionState })) prevApiConfigName.current = currentApiConfigName prevMode.current = mode + editedAppearance.current.clear() setChangeDetected(false) }, [currentApiConfigName, mode, extensionState]) @@ -260,6 +267,7 @@ const SettingsView = forwardRef(({ onDone, t handledSettingsImportedAt.current = settingsImportedAt setCachedState((prevCachedState) => ({ ...prevCachedState, ...extensionState })) + editedAppearance.current.clear() setChangeDetected(false) }, [settingsImportedAt, extensionState]) @@ -269,6 +277,7 @@ const SettingsView = forwardRef(({ onDone, t return prevState } + if (field in APPEARANCE_SETTINGS) editedAppearance.current.add(field as AppearanceKey) setChangeDetected(true) return { ...prevState, [field]: value } }) @@ -401,8 +410,8 @@ const SettingsView = forwardRef(({ onDone, t // Only the appearance values this form changed are sent, and null (not undefined) for a reset so it // survives JSON and clears the stored value. A save that changes none sends none of them, so it neither // waits for the host nor puts an appearance value into the host's all-or-nothing save. - const changedAppearance = Object.fromEntries( - (Object.keys(APPEARANCE_SETTINGS) as AppearanceKey[]) + const changedAppearance: Record = Object.fromEntries( + [...editedAppearance.current] .filter((key) => (cachedState[key] ?? null) !== (extensionState[key] ?? null)) .map((key) => [key, cachedState[key] ?? null]), ) @@ -410,6 +419,7 @@ const SettingsView = forwardRef(({ onDone, t const saveId = appearanceEdited ? nextSaveRequestId() : undefined if (saveId) { pendingSaveEditedState.current = cachedState + pendingAppearanceSent.current = changedAppearance setPendingSaveId(saveId) } vscode.postMessage({ @@ -500,7 +510,11 @@ const SettingsView = forwardRef(({ onDone, t // With an appearance edit, the "unsaved changes" flag is cleared only once the host reports that // `updateSettings` was stored: see the `settingsSaveResult` listener below. A failed save leaves the // user's edits in place to retry. Any other save clears it at once. - if (!saveId) setChangeDetected(false) + if (!saveId) { + // Nothing was sent, so no appearance edit is left to save (an edit that was undone equals the live value). + editedAppearance.current.clear() + setChangeDetected(false) + } } } @@ -512,9 +526,20 @@ const SettingsView = forwardRef(({ onDone, t if (message?.type !== "settingsSaveResult" || message.requestId !== pendingSaveId) return const editedState = pendingSaveEditedState.current + const sent = pendingAppearanceSent.current pendingSaveEditedState.current = undefined + pendingAppearanceSent.current = {} setPendingSaveId(undefined) + // What was stored is no longer an unsaved edit, unless the user changed that value again meanwhile. + if (message.success) { + for (const [key, value] of Object.entries(sent)) { + if ((latestCachedState.current[key as AppearanceKey] ?? null) === value) { + editedAppearance.current.delete(key as AppearanceKey) + } + } + } + // An edit made while the save was in flight is not in what was sent: it stays unsaved. if (message.success && latestCachedState.current === editedState) setChangeDetected(false) } @@ -542,6 +567,7 @@ const SettingsView = forwardRef(({ onDone, t if (confirm) { // Discard changes: Reset state and flag setCachedState(extensionState) // Revert to original state + editedAppearance.current.clear() setChangeDetected(false) // Reset change flag confirmDialogHandler.current?.() // Execute the pending action (e.g., tab switch) } diff --git a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx index 393f79aab7..60a33a8ce7 100644 --- a/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/SettingsView.saveResult.spec.tsx @@ -1,4 +1,4 @@ -import { fireEvent, screen, waitFor } from "@testing-library/react" +import { act, fireEvent, screen, waitFor } from "@testing-library/react" import { QueryClient } from "@tanstack/react-query" import { beforeEach, describe, expect, it, vi } from "vitest" @@ -34,6 +34,18 @@ const makeAnOtherEdit = async () => { await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) } +/** The extension host reports a new state, as when another webview or the host changes a saved value. */ +const liveStateChange = (state: Record) => + act(() => { + window.dispatchEvent(new MessageEvent("message", { data: { type: "state", state } })) + }) + +const lastUpdatedSettings = () => + (posted("updateSettings").at(-1) as { updatedSettings?: Record } | undefined)?.updatedSettings ?? + {} + +const appearanceKeys = ["interfaceFontScale", "terminalFontSize", "editorFontSize", "spacingScale"] as const + describe("SettingsView – save acknowledgement", () => { beforeEach(() => postMessage.mockClear()) @@ -227,3 +239,87 @@ describe("SettingsView – save acknowledgement", () => { await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) }) }) + +describe("SettingsView – which appearance values a save sends", () => { + beforeEach(() => postMessage.mockClear()) + + it("does not send a value that only differs because the live state changed, and asks for no acknowledgement", async () => { + renderUiTab() + await screen.findByTestId("appearance-terminalFontSize-input") + + liveStateChange({ terminalFontSize: 20 }) // another webview changed it; the user did not + await makeAnOtherEdit() + fireEvent.click(screen.getByTestId("save-button")) + + const sent = lastUpdatedSettings() + for (const key of appearanceKeys) expect(sent).not.toHaveProperty(key) + expect((posted("updateSettings").at(-1) as { requestId?: string }).requestId).toBeUndefined() + }) + + it("sends only the value the user edited, not another that the live state changed meanwhile", async () => { + renderUiTab() + await screen.findByTestId("appearance-terminalFontSize-input") + + liveStateChange({ editorFontSize: 18 }) // not edited here + await makeAnEdit() // the terminal font size + fireEvent.click(screen.getByTestId("save-button")) + + const sent = lastUpdatedSettings() + expect(sent.terminalFontSize).toBe(13) + expect(sent).not.toHaveProperty("editorFontSize") + expect((posted("updateSettings").at(-1) as { requestId?: string }).requestId).toBeDefined() + }) + + it("sends nothing for a value that was edited and then put back to what is saved", async () => { + renderWithExtensionState(, { + state: { terminalFontSize: 14 }, + }) + fireEvent.click(await screen.findByTestId("appearance-terminalFontSize-increment")) // 15 + fireEvent.click(screen.getByTestId("appearance-terminalFontSize-decrement")) // back to the saved 14 + await makeAnOtherEdit() + fireEvent.click(screen.getByTestId("save-button")) + + for (const key of appearanceKeys) expect(lastUpdatedSettings()).not.toHaveProperty(key) + }) + + it("stops treating a value as an edit once its save was stored, so a later save does not send it again", async () => { + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + answerSave(lastSaveRequestId(postMessage), { success: true }) + liveStateChange({ terminalFontSize: 25 }) // later, someone else changes it + postMessage.mockClear() + + await makeAnOtherEdit() + fireEvent.click(screen.getByTestId("save-button")) + + expect(lastUpdatedSettings()).not.toHaveProperty("terminalFontSize") + }) + + it("keeps a value edited again while the save was pending as an edit, and sends it with the next save", async () => { + renderUiTab() + await makeAnEdit() // 13 + fireEvent.click(screen.getByTestId("save-button")) + fireEvent.click(screen.getByTestId("appearance-terminalFontSize-increment")) // 14, after what was sent + answerSave(lastSaveRequestId(postMessage), { success: true }) + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + postMessage.mockClear() + + fireEvent.click(screen.getByTestId("save-button")) + + expect(lastUpdatedSettings().terminalFontSize).toBe(14) + }) + + it("keeps the edit after a failed save, so a retry sends it again", async () => { + renderUiTab() + await makeAnEdit() + fireEvent.click(screen.getByTestId("save-button")) + answerSave(lastSaveRequestId(postMessage), { success: false, error: "nope" }) + postMessage.mockClear() + + await waitFor(() => expect(screen.getByTestId("save-button")).toBeEnabled()) + fireEvent.click(screen.getByTestId("save-button")) + + expect(lastUpdatedSettings().terminalFontSize).toBe(13) + }) +})