diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 0c26858b61..22456b985f 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1892,7 +1892,7 @@ export class ClineProvider includeDiagnosticMessages: includeDiagnosticMessages ?? true, maxDiagnosticMessages: maxDiagnosticMessages ?? 50, includeTaskHistoryInEnhance: includeTaskHistoryInEnhance ?? true, - remoteControlEnabled: remoteControlEnabled ?? false, + remoteControlEnabled, } } @@ -1970,6 +1970,17 @@ export class ClineProvider ) } + let remoteControlEnabled: boolean = false + + try { + const cloudSettings = CloudService.instance.getUserSettings() + remoteControlEnabled = cloudSettings?.settings?.extensionBridgeEnabled ?? false + } catch (error) { + console.error( + `[getState] failed to get remote control setting from cloud: ${error instanceof Error ? error.message : String(error)}`, + ) + } + // Return the same structure as before return { apiConfiguration: providerSettings, @@ -2080,8 +2091,8 @@ export class ClineProvider maxDiagnosticMessages: stateValues.maxDiagnosticMessages ?? 50, // Add includeTaskHistoryInEnhance setting includeTaskHistoryInEnhance: stateValues.includeTaskHistoryInEnhance ?? true, - // Add remoteControlEnabled setting - remoteControlEnabled: stateValues.remoteControlEnabled ?? false, + // Add remoteControlEnabled setting - get from cloud settings + remoteControlEnabled, } } diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 6bf1320ccf..bf4a3385e8 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -950,7 +950,15 @@ export const webviewMessageHandler = async ( await provider.postStateToWebview() break case "remoteControlEnabled": - await updateGlobalState("remoteControlEnabled", message.bool ?? false) + // Update cloud settings instead of local globalState + try { + await CloudService.instance.updateUserSettings({ + extensionBridgeEnabled: message.bool ?? false, + }) + } catch (error) { + provider.log(`Failed to update cloud settings for remote control: ${error}`) + // Don't fall back to local storage - cloud settings are the source of truth + } await provider.handleRemoteControlToggle(message.bool ?? false) await provider.postStateToWebview() break diff --git a/src/extension.ts b/src/extension.ts index 6060bb341f..2d03537472 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -129,7 +129,43 @@ export async function activate(context: vscode.ExtensionContext) { // Initialize Roo Code Cloud service. const postStateListener = () => ClineProvider.getVisibleInstance()?.postStateToWebview() authStateChangedHandler = postStateListener - settingsUpdatedHandler = postStateListener + + // Enhanced settings updated handler that also updates ExtensionBridgeService + settingsUpdatedHandler = async () => { + // Update ExtensionBridgeService when settings change + const userInfo = CloudService.instance.getUserInfo() + if (userInfo && CloudService.instance.cloudAPI) { + try { + const config = await CloudService.instance.cloudAPI.bridgeConfig() + + const isCloudAgent = + typeof process.env.ROO_CODE_CLOUD_TOKEN === "string" && process.env.ROO_CODE_CLOUD_TOKEN.length > 0 + + const remoteControlEnabled = isCloudAgent + ? true + : (CloudService.instance.getUserSettings()?.settings?.extensionBridgeEnabled ?? false) + + cloudLogger(`[CloudService] Settings updated - remoteControlEnabled = ${remoteControlEnabled}`) + + ExtensionBridgeService.handleRemoteControlState( + userInfo, + remoteControlEnabled, + { + ...config, + provider, + sessionId: vscode.env.sessionId, + }, + cloudLogger, + ) + } catch (error) { + cloudLogger( + `[CloudService] Failed to update ExtensionBridgeService on settings change: ${error instanceof Error ? error.message : String(error)}`, + ) + } + } + + postStateListener() + } userInfoHandler = async ({ userInfo }: { userInfo: CloudUserInfo }) => { postStateListener() @@ -147,9 +183,13 @@ export async function activate(context: vscode.ExtensionContext) { cloudLogger(`[CloudService] isCloudAgent = ${isCloudAgent}, socketBridgeUrl = ${config.socketBridgeUrl}`) + const remoteControlEnabled = isCloudAgent + ? true + : (CloudService.instance.getUserSettings()?.settings?.extensionBridgeEnabled ?? false) + ExtensionBridgeService.handleRemoteControlState( userInfo, - isCloudAgent ? true : contextProxy.getValue("remoteControlEnabled"), + remoteControlEnabled, { ...config, provider,