Skip to content

Commit 0ff2a20

Browse files
committed
chore(ui): remove nag surfaces
1 parent d2fb21e commit 0ff2a20

40 files changed

Lines changed: 33 additions & 1701 deletions

packages/types/src/global-settings.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,8 @@ export const globalSettingsSchema = z.object({
8383
listApiConfigMeta: z.array(providerSettingsEntrySchema).optional(),
8484
pinnedApiConfigs: z.record(z.string(), z.boolean()).optional(),
8585

86-
lastShownAnnouncementId: z.string().optional(),
8786
customInstructions: z.string().optional(),
8887
taskHistory: z.array(historyItemSchema).optional(),
89-
dismissedUpsells: z.array(z.string()).optional(),
9088

9189
// Image generation settings (experimental) - flattened for simplicity
9290
imageGenerationProvider: z.enum(["openrouter", "roo"]).optional(),
@@ -320,8 +318,6 @@ export const isGlobalStateKey = (key: string): key is Keys<GlobalState> =>
320318
export const EVALS_SETTINGS: RooCodeSettings = {
321319
apiProvider: "openrouter",
322320

323-
lastShownAnnouncementId: "jul-09-2025-3-23-0",
324-
325321
pinnedApiConfigs: {},
326322

327323
autoApprovalEnabled: true,

packages/types/src/vscode-extension-host.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ export interface ExtensionMessage {
8686
| "showEditMessageDialog"
8787
| "commands"
8888
| "insertTextIntoTextarea"
89-
| "dismissedUpsells"
9089
| "organizationSwitchResult"
9190
| "interactionRequired"
9291
| "customToolsResult"
@@ -175,7 +174,6 @@ export interface ExtensionMessage {
175174
context?: string
176175
commands?: Command[]
177176
queuedMessages?: QueuedMessage[]
178-
list?: string[] // For dismissedUpsells
179177
organizationId?: string | null // For organizationSwitchResult
180178
tools?: SerializedCustomToolDefinition[] // For customToolsResult
181179
skills?: SkillMetadata[] // For skills response
@@ -251,7 +249,6 @@ export type ExtensionState = Pick<
251249
| "listApiConfigMeta"
252250
| "pinnedApiConfigs"
253251
| "customInstructions"
254-
| "dismissedUpsells"
255252
| "autoApprovalEnabled"
256253
| "alwaysAllowReadOnly"
257254
| "alwaysAllowReadOnlyOutsideWorkspace"
@@ -314,7 +311,6 @@ export type ExtensionState = Pick<
314311
currentTaskTodos?: TodoItem[] // Initial todos for the current task
315312
apiConfiguration: ProviderSettings
316313
uriScheme?: string
317-
shouldShowAnnouncement: boolean
318314

319315
taskHistory: HistoryItem[]
320316

@@ -366,7 +362,6 @@ export type ExtensionState = Pick<
366362
hasOpenedModeSelector: boolean
367363
openRouterImageApiKey?: string
368364
messageQueue?: QueuedMessage[]
369-
lastShownAnnouncementId?: string
370365
apiModelId?: string
371366
mcpServers?: McpServer[]
372367
mdmCompliant?: boolean
@@ -431,7 +426,6 @@ export interface WebviewMessage {
431426
| "askResponse"
432427
| "terminalOperation"
433428
| "clearTask"
434-
| "didShowAnnouncement"
435429
| "selectImages"
436430
| "exportCurrentTask"
437431
| "shareCurrentTask"
@@ -552,8 +546,6 @@ export interface WebviewMessage {
552546
| "queueMessage"
553547
| "removeQueuedMessage"
554548
| "editQueuedMessage"
555-
| "dismissUpsell"
556-
| "getDismissedUpsells"
557549
| "openMarkdownPreview"
558550
| "updateSettings"
559551
| "allowedCommands"
@@ -648,8 +640,6 @@ export interface WebviewMessage {
648640
visibility?: ShareVisibility // For share visibility
649641
hasContent?: boolean // For checkRulesDirectoryResult
650642
checkOnly?: boolean // For deleteCustomMode check
651-
upsellId?: string // For dismissUpsell
652-
list?: string[] // For dismissedUpsells response
653643
organizationId?: string | null // For organization switching
654644
useProviderSignup?: boolean // For rooCloudSignIn to use provider signup flow
655645
codeIndexSettings?: {

src/core/webview/ClineProvider.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ export class ClineProvider
169169

170170
public isViewLaunched = false
171171
public settingsImportedAt?: number
172-
public readonly latestAnnouncementId = "apr-2026-v3.53.0-community-handoff-gpt55-opus47" // v3.53.0 Community handoff, GPT-5.5, Claude Opus 4.7, checkpoint navigation
173172
public readonly providerSettingsManager: ProviderSettingsManager
174173
public readonly customModesManager: CustomModesManager
175174

@@ -2057,7 +2056,6 @@ export class ClineProvider
20572056

20582057
const {
20592058
apiConfiguration,
2060-
lastShownAnnouncementId,
20612059
customInstructions,
20622060
alwaysAllowReadOnly,
20632061
alwaysAllowReadOnlyOutsideWorkspace,
@@ -2228,8 +2226,6 @@ export class ClineProvider
22282226
ttsSpeed: ttsSpeed ?? 1.0,
22292227
enableCheckpoints: enableCheckpoints ?? true,
22302228
checkpointTimeout: checkpointTimeout ?? DEFAULT_CHECKPOINT_TIMEOUT_SECONDS,
2231-
shouldShowAnnouncement:
2232-
telemetrySetting !== "unset" && lastShownAnnouncementId !== this.latestAnnouncementId,
22332229
allowedCommands: mergedAllowedCommands,
22342230
deniedCommands: mergedDeniedCommands,
22352231
soundVolume: soundVolume ?? 0.5,
@@ -2333,10 +2329,7 @@ export class ClineProvider
23332329
*/
23342330

23352331
async getState(): Promise<
2336-
Omit<
2337-
ExtensionState,
2338-
"clineMessages" | "renderContext" | "hasOpenedModeSelector" | "version" | "shouldShowAnnouncement"
2339-
>
2332+
Omit<ExtensionState, "clineMessages" | "renderContext" | "hasOpenedModeSelector" | "version">
23402333
> {
23412334
const stateValues = this.contextProxy.getValues()
23422335
const customModes = await this.customModesManager.getCustomModes()
@@ -2407,7 +2400,6 @@ export class ClineProvider
24072400
// Return the same structure as before.
24082401
return {
24092402
apiConfiguration: providerSettings,
2410-
lastShownAnnouncementId: stateValues.lastShownAnnouncementId,
24112403
customInstructions: stateValues.customInstructions,
24122404
apiModelId: stateValues.apiModelId,
24132405
alwaysAllowReadOnly: stateValues.alwaysAllowReadOnly ?? false,

src/core/webview/__tests__/ClineProvider.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,6 @@ describe("ClineProvider", () => {
521521
version: "1.0.0",
522522
clineMessages: [],
523523
taskHistory: [],
524-
shouldShowAnnouncement: false,
525524
apiConfiguration: {
526525
apiProvider: "openrouter",
527526
},

src/core/webview/webviewMessageHandler.ts

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -770,10 +770,6 @@ export const webviewMessageHandler = async (
770770
await provider.clearTask()
771771
await provider.postStateToWebview()
772772
break
773-
case "didShowAnnouncement":
774-
await updateGlobalState("lastShownAnnouncementId", provider.latestAnnouncementId)
775-
await provider.postStateToWebview()
776-
break
777773
case "selectImages":
778774
const images = await selectImages()
779775
await provider.postMessageToWebview({
@@ -3225,41 +3221,6 @@ export const webviewMessageHandler = async (
32253221
break
32263222
}
32273223

3228-
case "dismissUpsell": {
3229-
if (message.upsellId) {
3230-
try {
3231-
// Get current list of dismissed upsells
3232-
const dismissedUpsells = getGlobalState("dismissedUpsells") || []
3233-
3234-
// Add the new upsell ID if not already present
3235-
let updatedList = dismissedUpsells
3236-
if (!dismissedUpsells.includes(message.upsellId)) {
3237-
updatedList = [...dismissedUpsells, message.upsellId]
3238-
await updateGlobalState("dismissedUpsells", updatedList)
3239-
}
3240-
3241-
// Send updated list back to webview (use the already computed updatedList)
3242-
await provider.postMessageToWebview({
3243-
type: "dismissedUpsells",
3244-
list: updatedList,
3245-
})
3246-
} catch (error) {
3247-
// Fail silently as per Bruno's comment - it's OK to fail silently in this case
3248-
provider.log(`Failed to dismiss upsell: ${error instanceof Error ? error.message : String(error)}`)
3249-
}
3250-
}
3251-
break
3252-
}
3253-
case "getDismissedUpsells": {
3254-
// Send the current list of dismissed upsells to the webview
3255-
const dismissedUpsells = getGlobalState("dismissedUpsells") || []
3256-
await provider.postMessageToWebview({
3257-
type: "dismissedUpsells",
3258-
list: dismissedUpsells,
3259-
})
3260-
break
3261-
}
3262-
32633224
case "openMarkdownPreview": {
32643225
if (message.text) {
32653226
try {

webview-ui/src/App.tsx

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ const App = () => {
5555
didHydrateState,
5656
showWelcome,
5757
settingsImportedAt,
58-
shouldShowAnnouncement,
5958
telemetrySetting,
6059
telemetryKey,
6160
machineId,
@@ -66,7 +65,6 @@ const App = () => {
6665
// Create a persistent state manager
6766
const marketplaceStateManager = useMemo(() => new MarketplaceViewStateManager(), [])
6867

69-
const [showAnnouncement, setShowAnnouncement] = useState(false)
7068
const [tab, setTab] = useState<Tab>("chat")
7169
const handledImportRef = useRef<number | undefined>(undefined)
7270

@@ -164,13 +162,6 @@ const App = () => {
164162

165163
useEvent("message", onMessage)
166164

167-
useEffect(() => {
168-
if (shouldShowAnnouncement && tab === "chat") {
169-
setShowAnnouncement(true)
170-
vscode.postMessage({ type: "didShowAnnouncement" })
171-
}
172-
}, [shouldShowAnnouncement, tab])
173-
174165
useEffect(() => {
175166
const isRecoverableTab = tab === "settings" || tab === "marketplace"
176167

@@ -246,12 +237,7 @@ const App = () => {
246237
targetTab={currentMarketplaceTab as "mcp" | "mode" | undefined}
247238
/>
248239
)}
249-
<ChatView
250-
ref={chatViewRef}
251-
isHidden={tab !== "chat"}
252-
showAnnouncement={showAnnouncement}
253-
hideAnnouncement={() => setShowAnnouncement(false)}
254-
/>
240+
<ChatView ref={chatViewRef} isHidden={tab !== "chat"} />
255241
{deleteMessageDialogState.hasCheckpoint ? (
256242
<MemoizedCheckpointRestoreDialog
257243
open={deleteMessageDialogState.isOpen}

webview-ui/src/__tests__/App.spec.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ describe("App", () => {
166166
mockUseExtensionState.mockReturnValue({
167167
didHydrateState: true,
168168
showWelcome: false,
169-
shouldShowAnnouncement: false,
170169
experiments: {},
171170
language: "en",
172171
telemetrySetting: "enabled",
@@ -191,7 +190,6 @@ describe("App", () => {
191190
const createSetupIncompleteState = () => ({
192191
didHydrateState: true,
193192
showWelcome: true,
194-
shouldShowAnnouncement: false,
195193
experiments: {},
196194
language: "en",
197195
telemetrySetting: "enabled",
@@ -209,7 +207,6 @@ describe("App", () => {
209207
mockUseExtensionState.mockReturnValue({
210208
didHydrateState: true,
211209
showWelcome: true,
212-
shouldShowAnnouncement: false,
213210
experiments: {},
214211
language: "en",
215212
telemetrySetting: "enabled",
@@ -242,7 +239,6 @@ describe("App", () => {
242239
mockUseExtensionState.mockReturnValue({
243240
didHydrateState: true,
244241
showWelcome: true,
245-
shouldShowAnnouncement: false,
246242
experiments: {},
247243
language: "en",
248244
telemetrySetting: "enabled",
@@ -262,7 +258,6 @@ describe("App", () => {
262258
mockUseExtensionState.mockReturnValue({
263259
didHydrateState: true,
264260
showWelcome: true,
265-
shouldShowAnnouncement: false,
266261
experiments: {},
267262
language: "en",
268263
telemetrySetting: "enabled",

0 commit comments

Comments
 (0)