From 629a9b4bf7dd358604173f6c4d1364f4df04a8c7 Mon Sep 17 00:00:00 2001 From: Br1an67 <932039080@qq.com> Date: Tue, 30 Dec 2025 18:19:58 +0800 Subject: [PATCH] feat: support cmd parameter to use correct IDE CLI --- src/main.ts | 16 +++++++++------- src/remote-container.ts | 12 ++++++------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main.ts b/src/main.ts index 00373ca..8db901d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -67,6 +67,7 @@ export class DevStarExtension { const accessToken = params.get('access_token'); const devstarUsername = params.get('devstar_username'); const rawDevstarDomain = params.get('devstar_domain'); + const cmd = params.get('cmd') || 'code'; // 获取 cmd 参数,默认为 code let devstarDomain = rawDevstarDomain; if (rawDevstarDomain) { try { @@ -123,11 +124,11 @@ export class DevStarExtension { // 如果没有用户登录,则直接登录; const res = await this.user.login(accessToken, devstarUsername) if (res === 'ok') { - await this.remoteContainer.firstOpenProject(containerHost, containerHostname, containerPort, containerUsername, projectPath, this.context) + await this.remoteContainer.firstOpenProject(containerHost, containerHostname, containerPort, containerUsername, projectPath, this.context, cmd) } } else if (devstarUsername === this.user.getUsernameFromLocal()) { // 如果同用户已经登录,则忽略,直接打开项目 - await this.remoteContainer.firstOpenProject(containerHost, containerHostname, containerPort, containerUsername, projectPath, this.context) + await this.remoteContainer.firstOpenProject(containerHost, containerHostname, containerPort, containerUsername, projectPath, this.context, cmd) } else { // 如果不是同用户,可以选择切换用户,或者不切换登录用户,直接打开容器 const selection = await vscode.window.showWarningMessage(`已登录用户:${this.user.getUsernameFromLocal()},是否切换用户?`, @@ -136,14 +137,14 @@ export class DevStarExtension { // 如果没有用户登录,则直接登录; const res = await this.user.login(accessToken, devstarUsername) if (res === 'ok') { - await this.remoteContainer.firstOpenProject(containerHost, containerHostname, containerPort, containerUsername, projectPath, this.context) + await this.remoteContainer.firstOpenProject(containerHost, containerHostname, containerPort, containerUsername, projectPath, this.context, cmd) } } else if (selection === 'No') { - await openProjectWithoutLogging(containerHost, containerPort, containerUsername, projectPath); + await openProjectWithoutLogging(containerHost, containerPort, containerUsername, projectPath, cmd); } } } else { - await openProjectWithoutLogging(containerHost, containerPort, containerUsername, projectPath); + await openProjectWithoutLogging(containerHost, containerPort, containerUsername, projectPath, cmd); } } else { vscode.window.showErrorMessage('Missing required parameters.'); @@ -160,6 +161,7 @@ export class DevStarExtension { const username = params.get('username'); const path = params.get('path'); const devstarDomain = params.get('devstar_domain') + const cmd = params.get('cmd') || 'code'; // 获取 cmd 参数,默认为 code if (host && hostname && port && username && path) { const container_host = host; @@ -179,10 +181,10 @@ export class DevStarExtension { // 将devstar domain存在global state中 context.globalState.update('devstarDomain', devstarDomain) - await this.remoteContainer.firstOpenProject(container_host, container_hostname, container_port, container_username, project_path, this.context) + await this.remoteContainer.firstOpenProject(container_host, container_hostname, container_port, container_username, project_path, this.context, cmd) } else { // devstarDomain参数不存在,则不存储,使用默认用户配置 - await this.remoteContainer.firstOpenProject(container_host, container_hostname, container_port, container_username, project_path, this.context) + await this.remoteContainer.firstOpenProject(container_host, container_hostname, container_port, container_username, project_path, this.context, cmd) } } } diff --git a/src/remote-container.ts b/src/remote-container.ts index 290f4b5..9790a93 100644 --- a/src/remote-container.ts +++ b/src/remote-container.ts @@ -28,7 +28,7 @@ export default class RemoteContainer { /** * 第一次打开远程项目 */ - async firstOpenProject(host: string, hostname: string, port: number, username: string, path: string, context: vscode.ExtensionContext) { + async firstOpenProject(host: string, hostname: string, port: number, username: string, path: string, context: vscode.ExtensionContext, cmd: string = 'code') { if (vscode.env.remoteName) { try { await vscode.commands.executeCommand('workbench.action.terminal.newLocal'); @@ -76,7 +76,7 @@ export default class RemoteContainer { await this.firstConnect(host, hostname, username, port, path) .then((res) => { if (res === 'success') { - this.openRemoteFolder(host, port, username, path, context); + this.openRemoteFolder(host, port, username, path, context, cmd); } else { vscode.window.showErrorMessage('首次连接容器失败,请检查网络和容器状态。'); } @@ -352,7 +352,7 @@ export default class RemoteContainer { /** * local env */ - async openRemoteFolder(host: string, port: number, _username: string, path: string, context: vscode.ExtensionContext): Promise { + async openRemoteFolder(host: string, port: number, _username: string, path: string, context: vscode.ExtensionContext, cmd: string = 'code'): Promise { try { const sshConfig = await this.getSSHConfig(host); if (sshConfig) { @@ -368,7 +368,7 @@ export default class RemoteContainer { let terminal = vscode.window.activeTerminal || vscode.window.createTerminal(`Ext Terminal`); terminal.show(true); - const command = `code --remote ssh-remote+root@${host}:${port} ${path} --reuse-window`; + const command = `${cmd} --remote ssh-remote+root@${host}:${port} ${path} --reuse-window`; terminal.sendText(command); @@ -461,8 +461,8 @@ export default class RemoteContainer { /** * 打开项目(无须插件登录) */ -export async function openProjectWithoutLogging(hostname: string, port: number, username: string, path: string): Promise { - const command = `code --remote ssh-remote+${username}@${hostname}:${port} ${path} --reuse-window`; +export async function openProjectWithoutLogging(hostname: string, port: number, username: string, path: string, cmd: string = 'code'): Promise { + const command = `${cmd} --remote ssh-remote+${username}@${hostname}:${port} ${path} --reuse-window`; try { let terminal = vscode.window.activeTerminal || vscode.window.createTerminal(`Ext Terminal`);