|
@@ -1,4 +1,5 @@
|
|
|
import { EmptyRequest, StringRequest } from "@shared/proto/cline/common"
|
|
import { EmptyRequest, StringRequest } from "@shared/proto/cline/common"
|
|
|
|
|
+import { ShowMessageType } from "@shared/proto/host/window"
|
|
|
import { HostProvider } from "@/hosts/host-provider"
|
|
import { HostProvider } from "@/hosts/host-provider"
|
|
|
import { Logger } from "@/shared/services/Logger"
|
|
import { Logger } from "@/shared/services/Logger"
|
|
|
|
|
|
|
@@ -33,13 +34,28 @@ export async function readTextFromClipboard(): Promise<string> {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Opens an external URL in the default browser
|
|
|
|
|
|
|
+ * Opens an external URL in the default browser.
|
|
|
|
|
+ * Uses the host bridge RPC first (VS Code's openExternal which handles remote environments).
|
|
|
|
|
+ * Falls back to the `open` npm package if the host doesn't implement the RPC (e.g., JetBrains).
|
|
|
* @param url The URL to open
|
|
* @param url The URL to open
|
|
|
* @returns Promise that resolves when the operation is complete
|
|
* @returns Promise that resolves when the operation is complete
|
|
|
- * @throws Error if the operation fails
|
|
|
|
|
*/
|
|
*/
|
|
|
export async function openExternal(url: string): Promise<void> {
|
|
export async function openExternal(url: string): Promise<void> {
|
|
|
Logger.log("Opening browser:", url)
|
|
Logger.log("Opening browser:", url)
|
|
|
- // Use VS Code's openExternal which handles remote environments
|
|
|
|
|
- await HostProvider.env.openExternal(StringRequest.create({ value: url }))
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ await HostProvider.env.openExternal(StringRequest.create({ value: url }))
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ // Fallback for hosts that don't implement openExternal (e.g., JetBrains plugin)
|
|
|
|
|
+ Logger.warn(`Host openExternal RPC failed, falling back to 'open' package: ${error}`)
|
|
|
|
|
+ try {
|
|
|
|
|
+ const open = (await import("open")).default
|
|
|
|
|
+ await open(url)
|
|
|
|
|
+ } catch (fallbackError) {
|
|
|
|
|
+ Logger.error(`Fallback 'open' also failed: ${fallbackError}`)
|
|
|
|
|
+ HostProvider.window.showMessage({
|
|
|
|
|
+ type: ShowMessageType.ERROR,
|
|
|
|
|
+ message: `Failed to open URL: ${url}`,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|