Skip to content

Commit 01458f1

Browse files
roomote[bot]roomotejr
authored
feat: sync extension bridge settings with cloud (#7535)
- Use CloudService.getUserSettings() for remoteControlEnabled instead of global state - Update CloudService.updateUserSettings when toggling remote control - Add BridgeOrchestrator.connectOrDisconnect handling in settings update handler - Remove dependency on contentProxy/globalSettings for remote control state --------- Co-authored-by: Roo Code <[email protected]> Co-authored-by: John Richmond <[email protected]>
1 parent b22a618 commit 01458f1

File tree

3 files changed

+59
-10
lines changed

3 files changed

+59
-10
lines changed

src/core/webview/ClineProvider.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,7 +1892,7 @@ export class ClineProvider
18921892
includeDiagnosticMessages: includeDiagnosticMessages ?? true,
18931893
maxDiagnosticMessages: maxDiagnosticMessages ?? 50,
18941894
includeTaskHistoryInEnhance: includeTaskHistoryInEnhance ?? true,
1895-
remoteControlEnabled: remoteControlEnabled ?? false,
1895+
remoteControlEnabled,
18961896
}
18971897
}
18981898

@@ -2080,8 +2080,18 @@ export class ClineProvider
20802080
maxDiagnosticMessages: stateValues.maxDiagnosticMessages ?? 50,
20812081
// Add includeTaskHistoryInEnhance setting
20822082
includeTaskHistoryInEnhance: stateValues.includeTaskHistoryInEnhance ?? true,
2083-
// Add remoteControlEnabled setting
2084-
remoteControlEnabled: stateValues.remoteControlEnabled ?? false,
2083+
// Add remoteControlEnabled setting - get from cloud settings
2084+
remoteControlEnabled: (() => {
2085+
try {
2086+
const cloudSettings = CloudService.instance.getUserSettings()
2087+
return cloudSettings?.settings?.extensionBridgeEnabled ?? false
2088+
} catch (error) {
2089+
console.error(
2090+
`[getState] failed to get remote control setting from cloud: ${error instanceof Error ? error.message : String(error)}`,
2091+
)
2092+
return false
2093+
}
2094+
})(),
20852095
}
20862096
}
20872097

src/core/webview/webviewMessageHandler.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -950,7 +950,13 @@ export const webviewMessageHandler = async (
950950
await provider.postStateToWebview()
951951
break
952952
case "remoteControlEnabled":
953-
await updateGlobalState("remoteControlEnabled", message.bool ?? false)
953+
try {
954+
await CloudService.instance.updateUserSettings({
955+
extensionBridgeEnabled: message.bool ?? false,
956+
})
957+
} catch (error) {
958+
provider.log(`Failed to update cloud settings for remote control: ${error}`)
959+
}
954960
await provider.remoteControlEnabled(message.bool ?? false)
955961
await provider.postStateToWebview()
956962
break

src/extension.ts

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,36 @@ export async function activate(context: vscode.ExtensionContext) {
128128
// Initialize Roo Code Cloud service.
129129
const postStateListener = () => ClineProvider.getVisibleInstance()?.postStateToWebview()
130130
authStateChangedHandler = postStateListener
131-
settingsUpdatedHandler = postStateListener
131+
132+
settingsUpdatedHandler = async () => {
133+
const userInfo = CloudService.instance.getUserInfo()
134+
if (userInfo && CloudService.instance.cloudAPI) {
135+
try {
136+
const config = await CloudService.instance.cloudAPI.bridgeConfig()
137+
138+
const isCloudAgent =
139+
typeof process.env.ROO_CODE_CLOUD_TOKEN === "string" && process.env.ROO_CODE_CLOUD_TOKEN.length > 0
140+
141+
const remoteControlEnabled = isCloudAgent
142+
? true
143+
: (CloudService.instance.getUserSettings()?.settings?.extensionBridgeEnabled ?? false)
144+
145+
cloudLogger(`[CloudService] Settings updated - remoteControlEnabled = ${remoteControlEnabled}`)
146+
147+
await BridgeOrchestrator.connectOrDisconnect(userInfo, remoteControlEnabled, {
148+
...config,
149+
provider,
150+
sessionId: vscode.env.sessionId,
151+
})
152+
} catch (error) {
153+
cloudLogger(
154+
`[CloudService] Failed to update BridgeOrchestrator on settings change: ${error instanceof Error ? error.message : String(error)}`,
155+
)
156+
}
157+
}
158+
159+
postStateListener()
160+
}
132161

133162
userInfoHandler = async ({ userInfo }: { userInfo: CloudUserInfo }) => {
134163
postStateListener()
@@ -146,11 +175,15 @@ export async function activate(context: vscode.ExtensionContext) {
146175

147176
cloudLogger(`[CloudService] isCloudAgent = ${isCloudAgent}, socketBridgeUrl = ${config.socketBridgeUrl}`)
148177

149-
await BridgeOrchestrator.connectOrDisconnect(
150-
userInfo,
151-
isCloudAgent ? true : contextProxy.getValue("remoteControlEnabled"),
152-
{ ...config, provider, sessionId: vscode.env.sessionId },
153-
)
178+
const remoteControlEnabled = isCloudAgent
179+
? true
180+
: (CloudService.instance.getUserSettings()?.settings?.extensionBridgeEnabled ?? false)
181+
182+
await BridgeOrchestrator.connectOrDisconnect(userInfo, remoteControlEnabled, {
183+
...config,
184+
provider,
185+
sessionId: vscode.env.sessionId,
186+
})
154187
} catch (error) {
155188
cloudLogger(
156189
`[CloudService] Failed to fetch bridgeConfig: ${error instanceof Error ? error.message : String(error)}`,

0 commit comments

Comments
 (0)