Skip to content

Commit 666db9a

Browse files
roomote[bot]roomotejr
authored andcommitted
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 1797b65 commit 666db9a

File tree

3 files changed

+60
-11
lines changed

3 files changed

+60
-11
lines changed

src/core/webview/ClineProvider.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1950,8 +1950,8 @@ export class ClineProvider
19501950
includeDiagnosticMessages: includeDiagnosticMessages ?? true,
19511951
maxDiagnosticMessages: maxDiagnosticMessages ?? 50,
19521952
includeTaskHistoryInEnhance: includeTaskHistoryInEnhance ?? true,
1953-
remoteControlEnabled: remoteControlEnabled ?? false,
1954-
filesChangedEnabled: this.getGlobalState("filesChangedEnabled") ?? true,
1953+
remoteControlEnabled,
1954+
filesChangedEnabled: this.getGlobalState("filesChangedEnabled") ?? true,
19551955
}
19561956
}
19571957

@@ -2139,8 +2139,18 @@ export class ClineProvider
21392139
maxDiagnosticMessages: stateValues.maxDiagnosticMessages ?? 50,
21402140
// Add includeTaskHistoryInEnhance setting
21412141
includeTaskHistoryInEnhance: stateValues.includeTaskHistoryInEnhance ?? true,
2142-
// Add remoteControlEnabled setting
2143-
remoteControlEnabled: stateValues.remoteControlEnabled ?? false,
2142+
// Add remoteControlEnabled setting - get from cloud settings
2143+
remoteControlEnabled: (() => {
2144+
try {
2145+
const cloudSettings = CloudService.instance.getUserSettings()
2146+
return cloudSettings?.settings?.extensionBridgeEnabled ?? false
2147+
} catch (error) {
2148+
console.error(
2149+
`[getState] failed to get remote control setting from cloud: ${error instanceof Error ? error.message : String(error)}`,
2150+
)
2151+
return false
2152+
}
2153+
})(),
21442154
}
21452155
}
21462156

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)