Compare commits

...
Author SHA1 Message Date
Andrei Edell 33e4a0bce1 remove useless comments 2025-04-18 12:54:32 -10:00
Andrei Edell bbdcedec3f clean up a string 2025-04-18 12:45:00 -10:00
Andrei Edell 1ef5d6a8fd gRPC-ized discoverBrowser 2025-04-18 12:39:07 -10:00
7 changed files with 76 additions and 44 deletions
+1
View File
@@ -7,6 +7,7 @@ import "common.proto";
service BrowserService {
rpc getBrowserConnectionInfo(EmptyRequest) returns (BrowserConnectionInfo);
rpc testBrowserConnection(StringRequest) returns (BrowserConnection);
rpc discoverBrowser(EmptyRequest) returns (BrowserConnection);
}
message BrowserConnectionInfo {
@@ -0,0 +1,47 @@
import { BrowserConnection } from "../../../shared/proto/browser"
import { EmptyRequest } from "../../../shared/proto/common"
import { Controller } from "../index"
import { getAllExtensionState } from "../../storage/state"
import { BrowserSession } from "../../../services/browser/BrowserSession"
import { discoverChromeInstances } from "../../../services/browser/BrowserDiscovery"
/**
* Discover Chrome instances
* @param controller The controller instance
* @param request The request message
* @returns The browser connection result
*/
export async function discoverBrowser(controller: Controller, request: EmptyRequest): Promise<BrowserConnection> {
try {
const discoveredHost = await discoverChromeInstances()
if (discoveredHost) {
// Don't update the remoteBrowserHost state when auto-discovering
// This way we don't override the user's preference
// Test the connection to get the endpoint
const { browserSettings } = await getAllExtensionState(controller.context)
const browserSession = new BrowserSession(controller.context, browserSettings)
const result = await browserSession.testConnection(discoveredHost)
return {
success: true,
message: `Successfully discovered and connected to Chrome at ${discoveredHost}`,
endpoint: result.endpoint || "",
}
} else {
return {
success: false,
message:
"No Chrome instances found. Make sure Chrome is running with remote debugging enabled (--remote-debugging-port=9222).",
endpoint: "",
}
}
} catch (error) {
return {
success: false,
message: `Error discovering browser: ${error instanceof Error ? error.message : String(error)}`,
endpoint: "",
}
}
}
+2
View File
@@ -3,12 +3,14 @@
// Import all method implementations
import { registerMethod } from "./index"
import { discoverBrowser } from "./discoverBrowser"
import { getBrowserConnectionInfo } from "./getBrowserConnectionInfo"
import { testBrowserConnection } from "./testBrowserConnection"
// Register all browser service methods
export function registerAllMethods(): void {
// Register each method with the registry
registerMethod("discoverBrowser", discoverBrowser)
registerMethod("getBrowserConnectionInfo", getBrowserConnectionInfo)
registerMethod("testBrowserConnection", testBrowserConnection)
}
-35
View File
@@ -311,41 +311,6 @@ export class Controller {
await this.postStateToWebview()
}
break
case "discoverBrowser":
try {
const discoveredHost = await discoverChromeInstances()
if (discoveredHost) {
// Don't update the remoteBrowserHost state when auto-discovering
// This way we don't override the user's preference
// Test the connection to get the endpoint
const { browserSettings } = await getAllExtensionState(this.context)
const browserSession = new BrowserSession(this.context, browserSettings)
const result = await browserSession.testConnection(discoveredHost)
// Send the result back to the webview
await this.postMessageToWebview({
type: "browserConnectionResult",
success: true,
text: `Successfully discovered and connected to Chrome at ${discoveredHost}`,
endpoint: result.endpoint,
})
} else {
await this.postMessageToWebview({
type: "browserConnectionResult",
success: false,
text: "No Chrome instances found on the network. Make sure Chrome is running with remote debugging enabled (--remote-debugging-port=9222).",
})
}
} catch (error) {
await this.postMessageToWebview({
type: "browserConnectionResult",
success: false,
text: `Error discovering browser: ${error instanceof Error ? error.message : String(error)}`,
})
}
break
case "togglePlanActMode":
if (message.chatSettings) {
await this.togglePlanActModeWithChatSettings(message.chatSettings, message.chatContent)
-1
View File
@@ -39,7 +39,6 @@ export interface WebviewMessage {
| "deleteMcpServer"
| "autoApprovalSettings"
| "browserSettings"
| "discoverBrowser"
| "browserRelaunchResult"
| "togglePlanActMode"
| "checkpointDiff"
+8
View File
@@ -227,6 +227,14 @@ export const BrowserServiceDefinition = {
responseStream: false,
options: {},
},
discoverBrowser: {
name: "discoverBrowser",
requestType: EmptyRequest,
requestStream: false,
responseType: BrowserConnection,
responseStream: false,
options: {},
},
},
} as const
@@ -107,10 +107,16 @@ export const BrowserSettingsSection: React.FC = () => {
setIsCheckingConnection(false)
})
} else {
// Use old message passing for discoverBrowser (not yet migrated)
vscode.postMessage({
type: "discoverBrowser",
})
BrowserServiceClient.discoverBrowser({})
.then((result) => {
setConnectionStatus(result.success)
setIsCheckingConnection(false)
})
.catch((error) => {
console.error("Error discovering browser:", error)
setConnectionStatus(false)
setIsCheckingConnection(false)
})
}
}
}, 1000),
@@ -179,10 +185,14 @@ export const BrowserSettingsSection: React.FC = () => {
setConnectionStatus(false)
})
} else {
// Use old message passing for discoverBrowser (not yet migrated)
vscode.postMessage({
type: "discoverBrowser",
})
BrowserServiceClient.discoverBrowser({})
.then((result) => {
setConnectionStatus(result.success)
})
.catch((error) => {
console.error("Error discovering browser:", error)
setConnectionStatus(false)
})
}
}, [browserSettings.remoteBrowserHost])