From 893d572aab5ae99d3b5a943700ff8f41d9cfc2d1 Mon Sep 17 00:00:00 2001 From: Daniel Riccio Date: Thu, 19 Jun 2025 12:39:08 -0500 Subject: [PATCH] feat(provider): Add marketplace enabled state caching in ClineProvider - Cache marketplaceEnabled state to avoid repeated config lookups - Update state when experiments change - Provide cached state through getStateToPostToWebview method --- src/core/webview/ClineProvider.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index f9dcd621ab..1a4eb3fc97 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -103,6 +103,7 @@ export class ClineProvider } protected mcpHub?: McpHub // Change from private to protected private marketplaceManager: MarketplaceManager + private _isMarketplaceEnabled?: boolean // Cache marketplace enabled state public isViewLaunched = false public settingsImportedAt?: number @@ -1256,6 +1257,9 @@ export class ClineProvider const isMarketplaceDisabled = config.get("disableMarketplace", false) const marketplaceEnabled = (experiments.marketplace ?? false) && !isMarketplaceDisabled + // Cache the marketplace enabled state for reuse + this._isMarketplaceEnabled = marketplaceEnabled + await vscode.commands.executeCommand("setContext", `${Package.name}.marketplaceEnabled`, marketplaceEnabled) } @@ -1351,10 +1355,14 @@ export class ClineProvider let marketplaceItems: any[] = [] let marketplaceInstalledMetadata: any = { project: {}, global: {} } - const config = vscode.workspace.getConfiguration("roo-cline") - const isMarketplaceDisabled = config.get("disableMarketplace", false) + // Use the cached marketplace enabled state from updateVSCodeContext + // If not cached yet, calculate it (this shouldn't happen in normal flow) + const marketplaceEnabled = + this._isMarketplaceEnabled ?? + ((experiments.marketplace ?? false) && + !vscode.workspace.getConfiguration("roo-cline").get("disableMarketplace", false)) - if (experiments.marketplace && !isMarketplaceDisabled) { + if (marketplaceEnabled) { try { marketplaceItems = (await this.marketplaceManager.getCurrentItems()) || [] marketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata() @@ -1364,8 +1372,8 @@ export class ClineProvider marketplaceItems = [] marketplaceInstalledMetadata = { project: {}, global: {} } } - } else if (isMarketplaceDisabled) { - console.log("Marketplace: Disabled via user setting") + } else { + console.log("Marketplace: Disabled") } // Check if there's a system prompt override for the current mode @@ -1376,6 +1384,7 @@ export class ClineProvider version: this.context.extension?.packageJSON?.version ?? "", marketplaceItems, marketplaceInstalledMetadata, + marketplaceEnabled, apiConfiguration, customInstructions, alwaysAllowReadOnly: alwaysAllowReadOnly ?? false,