diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index a7c59560e49..7b418d9e258 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, } } @@ -2080,8 +2080,18 @@ 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: (() => { + try { + const cloudSettings = CloudService.instance.getUserSettings() + return 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 false + } + })(), } } diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 970c9d0712c..0a314edde3c 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -950,7 +950,13 @@ export const webviewMessageHandler = async ( await provider.postStateToWebview() break case "remoteControlEnabled": - await updateGlobalState("remoteControlEnabled", message.bool ?? false) + try { + await CloudService.instance.updateUserSettings({ + extensionBridgeEnabled: message.bool ?? false, + }) + } catch (error) { + provider.log(`Failed to update cloud settings for remote control: ${error}`) + } await provider.remoteControlEnabled(message.bool ?? false) await provider.postStateToWebview() break diff --git a/src/extension.ts b/src/extension.ts index 4aa5ff11133..cb765ad718e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -128,7 +128,36 @@ export async function activate(context: vscode.ExtensionContext) { // Initialize Roo Code Cloud service. const postStateListener = () => ClineProvider.getVisibleInstance()?.postStateToWebview() authStateChangedHandler = postStateListener - settingsUpdatedHandler = postStateListener + + settingsUpdatedHandler = async () => { + 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}`) + + await BridgeOrchestrator.connectOrDisconnect(userInfo, remoteControlEnabled, { + ...config, + provider, + sessionId: vscode.env.sessionId, + }) + } catch (error) { + cloudLogger( + `[CloudService] Failed to update BridgeOrchestrator on settings change: ${error instanceof Error ? error.message : String(error)}`, + ) + } + } + + postStateListener() + } userInfoHandler = async ({ userInfo }: { userInfo: CloudUserInfo }) => { postStateListener() @@ -146,11 +175,15 @@ export async function activate(context: vscode.ExtensionContext) { cloudLogger(`[CloudService] isCloudAgent = ${isCloudAgent}, socketBridgeUrl = ${config.socketBridgeUrl}`) - await BridgeOrchestrator.connectOrDisconnect( - userInfo, - isCloudAgent ? true : contextProxy.getValue("remoteControlEnabled"), - { ...config, provider, sessionId: vscode.env.sessionId }, - ) + const remoteControlEnabled = isCloudAgent + ? true + : (CloudService.instance.getUserSettings()?.settings?.extensionBridgeEnabled ?? false) + + await BridgeOrchestrator.connectOrDisconnect(userInfo, remoteControlEnabled, { + ...config, + provider, + sessionId: vscode.env.sessionId, + }) } catch (error) { cloudLogger( `[CloudService] Failed to fetch bridgeConfig: ${error instanceof Error ? error.message : String(error)}`,