Sync extension bridge settings with cloud

This commit is contained in:
John Richmond 2025-08-28 01:51:53 -07:00
parent cd9e92fa9b
commit dace718877
3 changed files with 65 additions and 6 deletions

View file

@ -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,
}
}

View file

@ -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

View file

@ -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,