diff --git a/extensions/ide/vscode/devbox/CHANGELOG.md b/extensions/ide/vscode/devbox/CHANGELOG.md index bec8e4d2259..82674762f04 100644 --- a/extensions/ide/vscode/devbox/CHANGELOG.md +++ b/extensions/ide/vscode/devbox/CHANGELOG.md @@ -6,6 +6,12 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] +## [1.3.1] - 2025-01-21 + +### Added + +- Support Windsurf and Trae. + ## [1.3.0] - 2024-12-24 ### Fixed diff --git a/extensions/ide/vscode/devbox/package.json b/extensions/ide/vscode/devbox/package.json index 5329d79ee14..664f1409868 100644 --- a/extensions/ide/vscode/devbox/package.json +++ b/extensions/ide/vscode/devbox/package.json @@ -2,7 +2,7 @@ "name": "devbox-aio", "displayName": "%displayName%", "description": "%description%", - "version": "1.3.0", + "version": "1.3.3", "keywords": [ "devbox", "remote development", diff --git a/extensions/ide/vscode/devbox/src/commands/remoteConnector.ts b/extensions/ide/vscode/devbox/src/commands/remoteConnector.ts index 82000f5e4e5..31db2b95d45 100644 --- a/extensions/ide/vscode/devbox/src/commands/remoteConnector.ts +++ b/extensions/ide/vscode/devbox/src/commands/remoteConnector.ts @@ -256,13 +256,19 @@ export class RemoteSSHConnector extends Disposable { vscode.env.uriScheme === 'vscode' || vscode.env.uriScheme === 'vscode-insiders' || vscode.env.uriScheme === 'cursor' - if (!isOfficialVscode) { + const isTrae = vscode.env.uriScheme === 'trae' + + // windsurf has remote-ssh inside already + if (!isOfficialVscode && !isTrae) { return true } - const msVscodeRemoteExt = vscode.extensions.getExtension( - 'ms-vscode-remote.remote-ssh' - ) + const remoteSSHId = isOfficialVscode + ? 'ms-vscode-remote.remote-ssh' + : 'labring.open-remote-ssh-for-trae' + + const msVscodeRemoteExt = vscode.extensions.getExtension(remoteSSHId) + if (msVscodeRemoteExt) { return true } @@ -281,16 +287,13 @@ export class RemoteSSHConnector extends Disposable { return false } - await vscode.commands.executeCommand( - 'extension.open', - 'ms-vscode-remote.remote-ssh' - ) + await vscode.commands.executeCommand('extension.open', remoteSSHId) await vscode.commands.executeCommand( 'workbench.extensions.installExtension', - 'ms-vscode-remote.remote-ssh' + remoteSSHId ) - Logger.info('"ms-vscode-remote.remote-ssh" extension is installed') + Logger.info(`"${remoteSSHId}" extension is installed`) return true } diff --git a/extensions/ide/vscode/devbox/src/providers/DBViewProvider.ts b/extensions/ide/vscode/devbox/src/providers/DBViewProvider.ts index d97f38fa830..b6fa9b077a4 100644 --- a/extensions/ide/vscode/devbox/src/providers/DBViewProvider.ts +++ b/extensions/ide/vscode/devbox/src/providers/DBViewProvider.ts @@ -123,7 +123,6 @@ export class DBViewProvider await this.refreshDatabases() } private async openWebTerminal(dbInfo: Database) { - console.log('dbInfo', dbInfo) const commandMap = { postgresql: `psql '${dbInfo.connection}'`, mongodb: `mongosh '${dbInfo.connection}'`, diff --git a/extensions/ide/vscode/devbox/src/providers/DevboxListViewProvider.ts b/extensions/ide/vscode/devbox/src/providers/DevboxListViewProvider.ts index 74d22e52292..8dbb1fb02ba 100644 --- a/extensions/ide/vscode/devbox/src/providers/DevboxListViewProvider.ts +++ b/extensions/ide/vscode/devbox/src/providers/DevboxListViewProvider.ts @@ -237,30 +237,33 @@ class ProjectTreeDataProvider } try { + const appName = vscode.env.appName + // 1. remove global state GlobalStateManager.remove(deletedHost) - // 2. remove remote-ssh config - const existingSSHHostPlatforms = vscode.workspace - .getConfiguration('remote.SSH') - .get<{ [host: string]: string }>('remotePlatform', {}) - const newSSHHostPlatforms = Object.keys(existingSSHHostPlatforms).reduce( - (acc: { [host: string]: string }, host: string) => { + // 2. remove remote-ssh config if app is not windsurf or Trae + if (appName !== 'Windsurf' && appName !== 'Trae') { + const existingSSHHostPlatforms = vscode.workspace + .getConfiguration('remote.SSH') + .get<{ [host: string]: string }>('remotePlatform', {}) + const newSSHHostPlatforms = Object.keys( + existingSSHHostPlatforms + ).reduce((acc: { [host: string]: string }, host: string) => { if (host.startsWith(deletedHost)) { return acc } acc[host] = existingSSHHostPlatforms[host] return acc - }, - {} - ) - await vscode.workspace - .getConfiguration('remote.SSH') - .update( - 'remotePlatform', - newSSHHostPlatforms, - vscode.ConfigurationTarget.Global - ) + }, {}) + await vscode.workspace + .getConfiguration('remote.SSH') + .update( + 'remotePlatform', + newSSHHostPlatforms, + vscode.ConfigurationTarget.Global + ) + } // 3. remove ssh config const content = await fs.promises.readFile( diff --git a/extensions/ide/vscode/devbox/src/utils/handleUri.ts b/extensions/ide/vscode/devbox/src/utils/handleUri.ts index 4ed00928ade..899a6d3ca32 100644 --- a/extensions/ide/vscode/devbox/src/utils/handleUri.ts +++ b/extensions/ide/vscode/devbox/src/utils/handleUri.ts @@ -20,7 +20,8 @@ export class UriHandler { uri.scheme !== 'vscode' && uri.scheme !== 'cursor' && uri.scheme !== 'vscode-insiders' && - uri.scheme !== 'windsurf' + uri.scheme !== 'windsurf' && + uri.scheme !== 'trae' ) { return } diff --git a/frontend/providers/devbox/components/IDEButton.tsx b/frontend/providers/devbox/components/IDEButton.tsx index e7c419ec657..aba7bbee794 100644 --- a/frontend/providers/devbox/components/IDEButton.tsx +++ b/frontend/providers/devbox/components/IDEButton.tsx @@ -254,6 +254,14 @@ export const ideObj = { value: 'windsurf', sortId: 3 }, + trae: { + label: 'Trae', + menuLabel: 'Trae', + icon: 'trae', + prefix: 'trae://', + value: 'trae', + sortId: 4 + }, jetbrains: { label: 'JetBrains', icon: 'jetbrains', diff --git a/frontend/providers/devbox/components/Icon/icons/trae.svg b/frontend/providers/devbox/components/Icon/icons/trae.svg new file mode 100644 index 00000000000..98d7f158a2a --- /dev/null +++ b/frontend/providers/devbox/components/Icon/icons/trae.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/providers/devbox/components/Icon/index.tsx b/frontend/providers/devbox/components/Icon/index.tsx index 27e4b859ccc..abb0d6684ad 100644 --- a/frontend/providers/devbox/components/Icon/index.tsx +++ b/frontend/providers/devbox/components/Icon/index.tsx @@ -83,7 +83,8 @@ const map = { rustover: require('./icons/jetbrains/rustover.svg').default, webstorm: require('./icons/jetbrains/webstorm.svg').default, gift: require('./icons/gift.svg').default, - fileConfig: require('./icons/fileConfig.svg').default + fileConfig: require('./icons/fileConfig.svg').default, + trae: require('./icons/trae.svg').default }; const MyIcon = ({