From bcfe82515d0bfa800e9d67dffec7cc77cb17604a Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 29 May 2025 13:29:08 -0700 Subject: [PATCH 1/3] Pass editor deeplink URI to app.roocode.com --- packages/cloud/src/AuthService.ts | 7 ++++--- packages/cloud/src/Config.ts | 10 ++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/cloud/src/AuthService.ts b/packages/cloud/src/AuthService.ts index 06ac754f09..a492ca1609 100644 --- a/packages/cloud/src/AuthService.ts +++ b/packages/cloud/src/AuthService.ts @@ -6,7 +6,7 @@ import * as vscode from "vscode" import type { CloudUserInfo } from "@roo-code/types" -import { getClerkBaseUrl, getRooCodeApiUrl } from "./Config" +import { getClerkBaseUrl, getDeepLinkUrl, getRooCodeApiUrl } from "./Config" import { RefreshTimer } from "./RefreshTimer" export interface AuthServiceEvents { @@ -93,8 +93,9 @@ export class AuthService extends EventEmitter { // Generate a cryptographically random state parameter. const state = crypto.randomBytes(16).toString("hex") await this.context.globalState.update(AUTH_STATE_KEY, state) - const uri = vscode.Uri.parse(`${getRooCodeApiUrl()}/extension/sign-in?state=${state}`) - await vscode.env.openExternal(uri) + const params = new URLSearchParams({ state, ide: getDeepLinkUrl(this.context) }) + const url = `${getRooCodeApiUrl()}/extension/sign-in?${params.toString()}` + await vscode.env.openExternal(vscode.Uri.parse(url)) } catch (error) { console.error(`[auth] Error initiating Roo Code Cloud auth: ${error}`) throw new Error(`Failed to initiate Roo Code Cloud authentication: ${error}`) diff --git a/packages/cloud/src/Config.ts b/packages/cloud/src/Config.ts index 0205e5b0e3..2ed2381805 100644 --- a/packages/cloud/src/Config.ts +++ b/packages/cloud/src/Config.ts @@ -1,2 +1,12 @@ +import * as vscode from "vscode" + export const getClerkBaseUrl = () => process.env.CLERK_BASE_URL || "https://clerk.roocode.com" export const getRooCodeApiUrl = () => process.env.ROO_CODE_API_URL || "https://app.roocode.com" + +export const getDeepLinkUrl = (context: vscode.ExtensionContext) => { + const ide = vscode.env.appName?.toLowerCase() ?? "vscode" + const packageJSON = context.extension?.packageJSON + const publisher = packageJSON?.publisher ?? "RooVeterinaryInc" + const name = packageJSON?.name ?? "roo-cline" + return `${ide}://${publisher}.${name}` +} From 39eb4b0c1bd304b16c4408242ebfb96fb3a1c16f Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 29 May 2025 13:35:54 -0700 Subject: [PATCH 2/3] Use `vscode.env.uriScheme` --- packages/cloud/src/AuthService.ts | 4 ++-- packages/cloud/src/Config.ts | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/packages/cloud/src/AuthService.ts b/packages/cloud/src/AuthService.ts index a492ca1609..01af008592 100644 --- a/packages/cloud/src/AuthService.ts +++ b/packages/cloud/src/AuthService.ts @@ -6,7 +6,7 @@ import * as vscode from "vscode" import type { CloudUserInfo } from "@roo-code/types" -import { getClerkBaseUrl, getDeepLinkUrl, getRooCodeApiUrl } from "./Config" +import { getClerkBaseUrl, getRooCodeApiUrl } from "./Config" import { RefreshTimer } from "./RefreshTimer" export interface AuthServiceEvents { @@ -93,7 +93,7 @@ export class AuthService extends EventEmitter { // Generate a cryptographically random state parameter. const state = crypto.randomBytes(16).toString("hex") await this.context.globalState.update(AUTH_STATE_KEY, state) - const params = new URLSearchParams({ state, ide: getDeepLinkUrl(this.context) }) + const params = new URLSearchParams({ state, ide: vscode.env.uriScheme }) const url = `${getRooCodeApiUrl()}/extension/sign-in?${params.toString()}` await vscode.env.openExternal(vscode.Uri.parse(url)) } catch (error) { diff --git a/packages/cloud/src/Config.ts b/packages/cloud/src/Config.ts index 2ed2381805..0205e5b0e3 100644 --- a/packages/cloud/src/Config.ts +++ b/packages/cloud/src/Config.ts @@ -1,12 +1,2 @@ -import * as vscode from "vscode" - export const getClerkBaseUrl = () => process.env.CLERK_BASE_URL || "https://clerk.roocode.com" export const getRooCodeApiUrl = () => process.env.ROO_CODE_API_URL || "https://app.roocode.com" - -export const getDeepLinkUrl = (context: vscode.ExtensionContext) => { - const ide = vscode.env.appName?.toLowerCase() ?? "vscode" - const packageJSON = context.extension?.packageJSON - const publisher = packageJSON?.publisher ?? "RooVeterinaryInc" - const name = packageJSON?.name ?? "roo-cline" - return `${ide}://${publisher}.${name}` -} From b9164bb8cd0c2a2d221e34d167a4991f173e9531 Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 29 May 2025 13:44:42 -0700 Subject: [PATCH 3/3] Rename `ide` -> `uri_scheme` --- packages/cloud/src/AuthService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cloud/src/AuthService.ts b/packages/cloud/src/AuthService.ts index 01af008592..13a6b1c98c 100644 --- a/packages/cloud/src/AuthService.ts +++ b/packages/cloud/src/AuthService.ts @@ -93,7 +93,7 @@ export class AuthService extends EventEmitter { // Generate a cryptographically random state parameter. const state = crypto.randomBytes(16).toString("hex") await this.context.globalState.update(AUTH_STATE_KEY, state) - const params = new URLSearchParams({ state, ide: vscode.env.uriScheme }) + const params = new URLSearchParams({ state, uri_scheme: vscode.env.uriScheme }) const url = `${getRooCodeApiUrl()}/extension/sign-in?${params.toString()}` await vscode.env.openExternal(vscode.Uri.parse(url)) } catch (error) {