From ad4e33bee7d4df94222afb4e8e248ba06a44816f Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 12 Nov 2025 02:14:22 +0000 Subject: [PATCH] fix: persist telemetry banner dismissal state across VSCode restarts - Changed banner dismissal to set telemetry to "disabled" instead of "enabled" - Fixed backend to properly handle "unset" state when checking previous opt-in status - Ensures telemetry setting is always persisted when user dismisses the banner Fixes #9184 --- src/core/webview/webviewMessageHandler.ts | 4 ++-- webview-ui/src/components/common/TelemetryBanner.tsx | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 847ea1a161..61dfa65ce1 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -2367,13 +2367,13 @@ export const webviewMessageHandler = async ( const telemetrySetting = message.text as TelemetrySetting const previousSetting = getGlobalState("telemetrySetting") || "unset" const isOptedIn = telemetrySetting !== "disabled" - const wasPreviouslyOptedIn = previousSetting !== "disabled" + const wasPreviouslyOptedIn = previousSetting !== "disabled" && previousSetting !== "unset" // If turning telemetry OFF, fire event BEFORE disabling if (wasPreviouslyOptedIn && !isOptedIn && TelemetryService.hasInstance()) { TelemetryService.instance.captureTelemetrySettingsChanged(previousSetting, telemetrySetting) } - // Update the telemetry state + // Update the telemetry state - always persist the setting await updateGlobalState("telemetrySetting", telemetrySetting) if (TelemetryService.hasInstance()) { TelemetryService.instance.updateTelemetryState(isOptedIn) diff --git a/webview-ui/src/components/common/TelemetryBanner.tsx b/webview-ui/src/components/common/TelemetryBanner.tsx index 3d39b17115..8fb1ba90f3 100644 --- a/webview-ui/src/components/common/TelemetryBanner.tsx +++ b/webview-ui/src/components/common/TelemetryBanner.tsx @@ -13,7 +13,8 @@ const TelemetryBanner = () => { const handleClose = () => { setIsDismissed(true) - vscode.postMessage({ type: "telemetrySetting", text: "enabled" satisfies TelemetrySetting }) + // When user dismisses the banner without making a choice, default to disabled + vscode.postMessage({ type: "telemetrySetting", text: "disabled" satisfies TelemetrySetting }) } const handleOpenSettings = () => {