From 4196d902a4033c5216886bd3718d4dc34316422b Mon Sep 17 00:00:00 2001 From: kagami Date: Tue, 16 Apr 2024 22:05:50 +0800 Subject: [PATCH 01/14] Pass mamba bin path in env var --- src/toolwrapper/devchat.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index 501e36a..1ad0e1c 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -12,6 +12,8 @@ import { getFileContent } from '../util/commonUtil'; import * as toml from '@iarna/toml'; import { DevChatConfig } from '../util/config'; +import { getMicromambaUrl } from '../util/python_installer/conda_url'; + const readFileAsync = fs.promises.readFile; const envPath = path.join(__dirname, '..', '.env'); @@ -208,7 +210,9 @@ class DevChat { // eslint-disable-next-line @typescript-eslint/naming-convention "PYTHONUTF8":1, // eslint-disable-next-line @typescript-eslint/naming-convention - "PYTHONPATH": UiUtilWrapper.extensionPath() + "/tools/site-packages" + "PYTHONPATH": UiUtilWrapper.extensionPath() + "/tools/site-packages", + // eslint-disable-next-line @typescript-eslint/naming-convention + "MAMBA_BIN_PATH": getMicromambaUrl(), // TODO: important! jetbrains should set this value too. }; const pythonApp = DevChatConfig.getInstance().get('python_for_chat') || "python3"; @@ -260,6 +264,7 @@ class DevChat { // eslint-disable-next-line @typescript-eslint/naming-convention ...llmModelData.api_base? { "OPENAI_API_BASE": llmModelData.api_base, "OPENAI_BASE_URL": llmModelData.api_base } : {}, "DEVCHAT_PROXY": DevChatConfig.getInstance().get('DEVCHAT_PROXY') || "", + "MAMBA_BIN_PATH": getMicromambaUrl(), // TODO: important! jetbrains should set this value too. }; // build process options From 66da2dfc8009b86437f2d80ce941158022c38482 Mon Sep 17 00:00:00 2001 From: kagami Date: Tue, 16 Apr 2024 22:06:40 +0800 Subject: [PATCH 02/14] Add an entrypoint for workflow cli for dev --- package.json | 5 +++++ src/contributes/commands.ts | 15 +++++++++++++++ src/extension.ts | 3 +++ src/toolwrapper/devchat.ts | 20 ++++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/package.json b/package.json index b93f984..c68b4c9 100644 --- a/package.json +++ b/package.json @@ -686,6 +686,11 @@ "title": "Install slash commands", "category": "DevChat" }, + { + "command": "DevChat.TryWF", + "title": "Run workflow cli", + "category": "DevChat" + }, { "command": "DevChat.UpdataChatModels", "title": "Update Chat Models", diff --git a/src/contributes/commands.ts b/src/contributes/commands.ts index 22278cd..177b649 100644 --- a/src/contributes/commands.ts +++ b/src/contributes/commands.ts @@ -223,6 +223,21 @@ export function registerInstallCommandsCommand( context.subscriptions.push(disposable); } +export function registerTryWF( + context: vscode.ExtensionContext +) { + let disposable = vscode.commands.registerCommand( + "DevChat.TryWF", + async () => { + + const devchat = new DevChat(); + + await devchat.tryWF(); + } + ); + + context.subscriptions.push(disposable); +} export function registerDevChatChatCommand(context: vscode.ExtensionContext) { let disposable = vscode.commands.registerCommand( diff --git a/src/extension.ts b/src/extension.ts index 1b5cb6e..c65c161 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -16,6 +16,8 @@ import { registerFixCommand, registerExplainCommand, registerQuickFixCommand, + + registerTryWF, } from './contributes/commands'; import { regLanguageContext } from './contributes/context'; import { regDevChatView } from './contributes/views'; @@ -150,6 +152,7 @@ async function activate(context: vscode.ExtensionContext) { registerInstallCommandsCommand(context); + registerTryWF(context); createStatusBarItem(context); regApplyDiffResultCommand(context); diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index 1ad0e1c..262a303 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -516,6 +516,26 @@ class DevChat { return ""; } } + async tryWF(): Promise { + try { + const args = ["-m", "devchat", "workflow", "env", "remove", "--all"]; + // const args = ["-m", "mamba", "--version"]; + + const {code, stdout, stderr} = await this.runCommand(args); + + assertValue(code !== 0, stderr || `Command exited with ${code}`); + if (stderr.trim() !== "") { + logger.channel()?.warn(`${stderr}`); + } + + logger.channel()?.info(`${stdout}`); + return stdout; + } catch (error: any) { + logger.channel()?.error(`Error: ${error.message}`); + logger.channel()?.show(); + return ""; + } + } async topics(): Promise { try { From bbc6c1e4e6125a3003a8387bdad9aab6e8ce1d86 Mon Sep 17 00:00:00 2001 From: kagami Date: Mon, 22 Apr 2024 15:44:25 +0800 Subject: [PATCH 03/14] Use a temp command to trigger updating workflows --- src/toolwrapper/devchat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index 262a303..fba0a8a 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -518,7 +518,7 @@ class DevChat { } async tryWF(): Promise { try { - const args = ["-m", "devchat", "workflow", "env", "remove", "--all"]; + const args = ["-m", "devchat", "workflow", "update"]; // const args = ["-m", "mamba", "--version"]; const {code, stdout, stderr} = await this.runCommand(args); From 4549fadd986361e7f25eba26cf9e6c5ec93b4d97 Mon Sep 17 00:00:00 2001 From: kagami Date: Mon, 22 Apr 2024 15:46:57 +0800 Subject: [PATCH 04/14] Add workflow base into default PYTHONPATH for win32 --- src/util/python_installer/install_devchat.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/util/python_installer/install_devchat.ts b/src/util/python_installer/install_devchat.ts index d3faa57..c5dc094 100644 --- a/src/util/python_installer/install_devchat.ts +++ b/src/util/python_installer/install_devchat.ts @@ -36,11 +36,18 @@ export async function installDevchat(): Promise { const pythonApp = path.join(pythonTargetPath, "python.exe"); const pythonPathFile = path.join(pythonTargetPath, "python311._pth"); const sitepackagesPath = path.join(UiUtilWrapper.extensionPath(), "tools", "site-packages"); + + const userHomeDir = os.homedir(); + // TODO: temperary workflow base dir name, need to change + const WORKFLOWS_BASE_NAME = "new_wf"; + const workflow_base_path = path.join(userHomeDir, ".chat", WORKFLOWS_BASE_NAME); + + const new_python_path = [workflow_base_path, sitepackagesPath].join("\n"); // read content in pythonPathFile let content = fs.readFileSync(pythonPathFile, { encoding: 'utf-8' }); // replace %PYTHONPATH% with sitepackagesPath - content = content.replace(/%PYTHONPATH%/g, sitepackagesPath); + content = content.replace(/%PYTHONPATH%/g, new_python_path); // write content to pythonPathFile fs.writeFileSync(pythonPathFile, content); From 28504933bec909ef3e5a0d1df50bd9458007a6ae Mon Sep 17 00:00:00 2001 From: kagami Date: Thu, 9 May 2024 20:32:57 +0800 Subject: [PATCH 05/14] Update workflow base dir name --- src/toolwrapper/devchat.ts | 1 + src/util/python_installer/install_devchat.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index fba0a8a..00ff76b 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -519,6 +519,7 @@ class DevChat { async tryWF(): Promise { try { const args = ["-m", "devchat", "workflow", "update"]; + // const args = ["-m", "devchat", "workflow", "config", "--json"]; // const args = ["-m", "mamba", "--version"]; const {code, stdout, stderr} = await this.runCommand(args); diff --git a/src/util/python_installer/install_devchat.ts b/src/util/python_installer/install_devchat.ts index c5dc094..56f36a0 100644 --- a/src/util/python_installer/install_devchat.ts +++ b/src/util/python_installer/install_devchat.ts @@ -39,7 +39,7 @@ export async function installDevchat(): Promise { const userHomeDir = os.homedir(); // TODO: temperary workflow base dir name, need to change - const WORKFLOWS_BASE_NAME = "new_wf"; + const WORKFLOWS_BASE_NAME = "scripts"; const workflow_base_path = path.join(userHomeDir, ".chat", WORKFLOWS_BASE_NAME); const new_python_path = [workflow_base_path, sitepackagesPath].join("\n"); From 78ffcea30797c9e23e2d338574901f7c18f54684 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 12:41:43 +0800 Subject: [PATCH 06/14] remove registerTryWF --- package.json | 5 ----- src/extension.ts | 3 --- 2 files changed, 8 deletions(-) diff --git a/package.json b/package.json index c68b4c9..b93f984 100644 --- a/package.json +++ b/package.json @@ -686,11 +686,6 @@ "title": "Install slash commands", "category": "DevChat" }, - { - "command": "DevChat.TryWF", - "title": "Run workflow cli", - "category": "DevChat" - }, { "command": "DevChat.UpdataChatModels", "title": "Update Chat Models", diff --git a/src/extension.ts b/src/extension.ts index c65c161..1b5cb6e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -16,8 +16,6 @@ import { registerFixCommand, registerExplainCommand, registerQuickFixCommand, - - registerTryWF, } from './contributes/commands'; import { regLanguageContext } from './contributes/context'; import { regDevChatView } from './contributes/views'; @@ -152,7 +150,6 @@ async function activate(context: vscode.ExtensionContext) { registerInstallCommandsCommand(context); - registerTryWF(context); createStatusBarItem(context); regApplyDiffResultCommand(context); From 34da79b94560c4705e30f14dd8123a2a68521e92 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 12:42:26 +0800 Subject: [PATCH 07/14] copy workflow commands to ~/.chat/scripts --- src/contributes/commands.ts | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/contributes/commands.ts b/src/contributes/commands.ts index 177b649..3618868 100644 --- a/src/contributes/commands.ts +++ b/src/contributes/commands.ts @@ -192,7 +192,7 @@ export function registerInstallCommandsCommand( "DevChat.InstallCommands", async () => { const homePath = process.env.HOME || process.env.USERPROFILE || ""; - const sysDirPath = path.join(homePath, ".chat", "workflows", "sys"); + const sysDirPath = path.join(homePath, ".chat", "scripts"); const pluginDirPath = path.join( UiUtilWrapper.extensionPath(), "workflowsCommands" @@ -204,7 +204,7 @@ export function registerInstallCommandsCommand( await copyDirectory(pluginDirPath, sysDirPath); } - // Check if ~/.chat/workflows/sys directory exists + // Check if ~/.chat/scripts directory exists if (!fs.existsSync(sysDirPath)) { // Directory does not exist, wait for updateSysCommand to finish await devchat.updateSysCommand(); @@ -223,21 +223,6 @@ export function registerInstallCommandsCommand( context.subscriptions.push(disposable); } -export function registerTryWF( - context: vscode.ExtensionContext -) { - let disposable = vscode.commands.registerCommand( - "DevChat.TryWF", - async () => { - - const devchat = new DevChat(); - - await devchat.tryWF(); - } - ); - - context.subscriptions.push(disposable); -} export function registerDevChatChatCommand(context: vscode.ExtensionContext) { let disposable = vscode.commands.registerCommand( From 0c41673afb3d8b639a7e7d2abe9e2bc0851823a2 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 12:43:29 +0800 Subject: [PATCH 08/14] remove workspace workflows dir --- src/init/chatConfig.ts | 58 +++++++++++----------------------------- src/panel/devchatView.ts | 18 ------------- 2 files changed, 15 insertions(+), 61 deletions(-) diff --git a/src/init/chatConfig.ts b/src/init/chatConfig.ts index 1e0c90a..a6351d9 100644 --- a/src/init/chatConfig.ts +++ b/src/init/chatConfig.ts @@ -11,52 +11,24 @@ function copyFileSync(source: string, target: string) { if (!fs.existsSync(target)) { fs.writeFileSync(target, data); } - } - - function copyDirSync(source: string, target: string) { +} + +function copyDirSync(source: string, target: string) { // 创建目标目录 fs.mkdirSync(target, { recursive: true }); - + // 遍历目录中的所有文件和子目录 const files = fs.readdirSync(source); for (const file of files) { - const sourcePath = path.join(source, file); - const targetPath = path.join(target, file); - const stats = fs.statSync(sourcePath); - if (stats.isDirectory()) { - // 递归拷贝子目录 - copyDirSync(sourcePath, targetPath); - } else { - // 拷贝文件 - copyFileSync(sourcePath, targetPath); - } + const sourcePath = path.join(source, file); + const targetPath = path.join(target, file); + const stats = fs.statSync(sourcePath); + if (stats.isDirectory()) { + // 递归拷贝子目录 + copyDirSync(sourcePath, targetPath); + } else { + // 拷贝文件 + copyFileSync(sourcePath, targetPath); + } } - } - -export function createChatDirectoryAndCopyInstructionsSync(extensionUri: vscode.Uri) { - const workspaceRoot = UiUtilWrapper.workspaceFoldersFirstPath(); - if (!workspaceRoot) { - return; - } - - const chatWorkflowsDirPath = path.join(workspaceRoot, '.chat', 'workflows'); - const instructionsSrcPath = path.join(extensionUri.fsPath, 'workflows'); - - // if workflows directory exists, return - if (fs.existsSync(chatWorkflowsDirPath)) { - return ; - } - - try { - if (!fs.existsSync(chatWorkflowsDirPath)) { - fs.mkdirSync(chatWorkflowsDirPath, {recursive: true}); - } else { - // return; - } - - copyDirSync(instructionsSrcPath, chatWorkflowsDirPath); - } catch (error) { - logger.channel()?.error('Error occurred while creating the .chat directory and copying workflows:', error); - logger.channel()?.show(); - } -} \ No newline at end of file +} diff --git a/src/panel/devchatView.ts b/src/panel/devchatView.ts index c3bb1c2..f712d2b 100644 --- a/src/panel/devchatView.ts +++ b/src/panel/devchatView.ts @@ -1,13 +1,9 @@ import * as vscode from 'vscode'; -import * as path from 'path'; import WebviewManager from './webviewManager'; import '../handler/handlerRegister'; import handleMessage from '../handler/messageHandler'; -import { createChatDirectoryAndCopyInstructionsSync } from '../init/chatConfig'; import { ExtensionContextHolder } from '../util/extensionContext'; -import { UiUtilWrapper } from '../util/uiUtil'; -import { ChatContextManager } from '../context/contextManager'; export class DevChatViewProvider implements vscode.WebviewViewProvider { @@ -23,20 +19,7 @@ export class DevChatViewProvider implements vscode.WebviewViewProvider { return this._view; } - reloadCustomDefines() { - const workspaceDir = UiUtilWrapper.workspaceFoldersFirstPath(); - if (workspaceDir) { - const workflowsDir = path.join(workspaceDir!, '.chat', 'workflows'); - ChatContextManager.getInstance().loadCustomContexts(workflowsDir); - } - } - resolveWebviewView(webviewView: vscode.WebviewView, context: vscode.WebviewViewResolveContext, _token: vscode.CancellationToken): void { - // 创建 .chat 目录并复制 workflows - createChatDirectoryAndCopyInstructionsSync(ExtensionContextHolder.context?.extensionUri!); - - this.reloadCustomDefines(); - this._view = webviewView; this._webviewManager = new WebviewManager(webviewView.webview, this._context.extensionUri); @@ -46,7 +29,6 @@ export class DevChatViewProvider implements vscode.WebviewViewProvider { public reloadWebview(): void { if (this._webviewManager) { - this.reloadCustomDefines(); this._webviewManager.reloadWebviewContent(); } } From 4b4a575c96d5f56ee85d2ed87002367a0696bd51 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 12:43:46 +0800 Subject: [PATCH 09/14] update comments --- src/panel/statusBarView.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panel/statusBarView.ts b/src/panel/statusBarView.ts index c7291c6..9f2ada8 100644 --- a/src/panel/statusBarView.ts +++ b/src/panel/statusBarView.ts @@ -48,7 +48,7 @@ export function createStatusBarItem(context: vscode.ExtensionContext): vscode.St progressBar.update(`Checking dependencies: Success`, 0); progressBar.end(); - // download workflows from github or gitlab + // install devchat workflow commands if (!hasInstallCommands) { hasInstallCommands = true; await vscode.commands.executeCommand('DevChat.InstallCommands'); From 7e4bc4913cfc0e7970ce3fe16515eac2cb44f3d3 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 12:44:08 +0800 Subject: [PATCH 10/14] update workflow commands --- src/toolwrapper/devchat.ts | 80 ++++++++++++-------------------------- 1 file changed, 25 insertions(+), 55 deletions(-) diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index 00ff76b..e84a98e 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -427,44 +427,34 @@ class DevChat { async loadRecommendCommands(): Promise { try { - // 获取用户的主目录 - const userHomeDir = os.homedir(); - // 构建配置文件路径 - const configFilePath = path.join(userHomeDir, '.chat', 'workflows', 'sys', 'configuration.toml'); - - // 异步读取配置文件内容 - const configFileContent = await readFileAsync(configFilePath, { encoding: 'utf8' }); + const args = ["-m", "devchat", "workflow", "config", "--json"]; - // 解析TOML配置文件内容并返回命令列表 - return this.parseConfigFile(configFileContent); - } catch (err) { - console.error('Failed to load recommend commands:', err); - return []; - } - } + const {code, stdout, stderr} = await this.runCommand(args); - // 解析TOML配置文件内容 - private parseConfigFile(content: string): string[] { - interface Config { - recommend?: { - workflows?: string[]; - }; + assertValue(code !== 0, stderr || `Command exited with ${code}`); + if (stderr.trim() !== "") { + logger.channel()?.warn(`${stderr}`); + } + + let workflowConfig; + try { + workflowConfig = JSON.parse(stdout.trim()); + } catch (error) { + logger.channel()?.error('Failed to parse commands JSON:', error); + return []; + } + + return workflowConfig.recommend?.workflows || []; + } catch (error: any) { + logger.channel()?.error(`Error: ${error.message}`); + logger.channel()?.show(); + return []; } - - try { - const parsedData = toml.parse(content) as Config; - if (parsedData.recommend && parsedData.recommend.workflows) { - return parsedData.recommend.workflows; - } - } catch (err) { - logger.channel()?.error(`Error parsing TOML content: ${err}`); - } - return []; } async commands(): Promise { try { - const args = ["-m", "devchat", "run", "--list"]; + const args = ["-m", "devchat", "workflow", "list", "--json"]; const {code, stdout, stderr} = await this.runCommand(args); @@ -480,12 +470,13 @@ class DevChat { logger.channel()?.error('Failed to parse commands JSON:', error); return []; } - // 确保每个CommandEntry对象的recommend字段默认为-1 const recommendCommands = await this.loadRecommendCommands(); - commands = commands.map((cmd: CommandEntry) => ({ - ...cmd, + commands = commands.map((cmd: any) => ({ + name: cmd.name, + description: cmd.command_conf.description, + path: cmd.namespace, recommend: recommendCommands.indexOf(cmd.name), })); @@ -498,29 +489,8 @@ class DevChat { } async updateSysCommand(): Promise { - try { - const args = ["-m", "devchat", "run", "--update-sys"]; - - const {code, stdout, stderr} = await this.runCommand(args); - - assertValue(code !== 0, stderr || `Command exited with ${code}`); - if (stderr.trim() !== "") { - logger.channel()?.warn(`${stderr}`); - } - - logger.channel()?.info(`${stdout}`); - return stdout; - } catch (error: any) { - logger.channel()?.error(`Error: ${error.message}`); - logger.channel()?.show(); - return ""; - } - } - async tryWF(): Promise { try { const args = ["-m", "devchat", "workflow", "update"]; - // const args = ["-m", "devchat", "workflow", "config", "--json"]; - // const args = ["-m", "mamba", "--version"]; const {code, stdout, stderr} = await this.runCommand(args); From dd4afea7eaee318600af2d7daaf65186d46ad329 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 12:46:48 +0800 Subject: [PATCH 11/14] add DEVCHAT_PROXY env for decvhat commands --- src/toolwrapper/devchat.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index e84a98e..e1913ba 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -212,6 +212,7 @@ class DevChat { // eslint-disable-next-line @typescript-eslint/naming-convention "PYTHONPATH": UiUtilWrapper.extensionPath() + "/tools/site-packages", // eslint-disable-next-line @typescript-eslint/naming-convention + "DEVCHAT_PROXY": DevChatConfig.getInstance().get('DEVCHAT_PROXY') || "", "MAMBA_BIN_PATH": getMicromambaUrl(), // TODO: important! jetbrains should set this value too. }; From 60d2c5b808ac954d5cf94c37f7b82ba7ed5ec659 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 21:43:06 +0800 Subject: [PATCH 12/14] Update submodules and workflow commands --- gui | 2 +- src/handler/workflowCommandHandler.ts | 45 ++------------------------- src/toolwrapper/devchat.ts | 6 ++-- tools | 2 +- workflowsCommands | 2 +- 5 files changed, 7 insertions(+), 50 deletions(-) diff --git a/gui b/gui index fc781ce..fc5e916 160000 --- a/gui +++ b/gui @@ -1 +1 @@ -Subproject commit fc781cece340c22ecf301c612e64efde3313a2dc +Subproject commit fc5e916ec69fd0dcc18fe4ea92352ae8dd3d9e67 diff --git a/src/handler/workflowCommandHandler.ts b/src/handler/workflowCommandHandler.ts index 75d6866..4c99330 100644 --- a/src/handler/workflowCommandHandler.ts +++ b/src/handler/workflowCommandHandler.ts @@ -5,38 +5,6 @@ import { ApiKeyManager } from '../util/apiKey'; import DevChat from '../toolwrapper/devchat'; -export interface Command { - name: string; - pattern: string; - description: string; - path: string; - args: number; - recommend: number; - handler: (commandName: string, userInput: string) => Promise; -} - -async function getCommandListByDevChatRun(includeHide: boolean = false): Promise { - // load commands from CustomCommands - let newCommands: Command[] = []; - - const devChat = new DevChat(); - const commandList = await devChat.commands(); - commandList.forEach(command => { - const commandObj: Command = { - name: command.name, - pattern: command.name, - description: command.description, - path: command.path, - recommend: command.recommend, - args: 0, - handler: async (commandName: string, userInput: string) => { return ''; } - }; - newCommands.push(commandObj); - }); - - return newCommands; -} - let existPannel: vscode.WebviewPanel|vscode.WebviewView|undefined = undefined; regInMessage({command: 'regCommandList'}); @@ -44,17 +12,8 @@ regOutMessage({command: 'regCommandList', result: [{name: '', pattern: '', descr export async function getWorkflowCommandList(message: any, panel: vscode.WebviewPanel|vscode.WebviewView): Promise { existPannel = panel; - const commandList = await getCommandListByDevChatRun(); - const commandCovertedList = commandList.map(command => { - if (command.args > 0) { - // replace {{prompt}} with {{["",""]}}, count of "" is args - const prompt = Array.from({length: command.args}, () => ""); - command.pattern = command.pattern.replace('{{prompt}}', '{{' + JSON.stringify(prompt) + '}}'); - } - return command; - }); - - MessageHandler.sendMessage(panel, { command: 'regCommandList', result: commandCovertedList }); + const commandList = await new DevChat().commands(); + MessageHandler.sendMessage(panel, { command: 'regCommandList', result: commandList }); return; } diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index e1913ba..3ec5b80 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -453,7 +453,7 @@ class DevChat { } } - async commands(): Promise { + async commands(): Promise { try { const args = ["-m", "devchat", "workflow", "list", "--json"]; @@ -475,9 +475,7 @@ class DevChat { // 确保每个CommandEntry对象的recommend字段默认为-1 const recommendCommands = await this.loadRecommendCommands(); commands = commands.map((cmd: any) => ({ - name: cmd.name, - description: cmd.command_conf.description, - path: cmd.namespace, + ...cmd, recommend: recommendCommands.indexOf(cmd.name), })); diff --git a/tools b/tools index 1db2a69..a761c6a 160000 --- a/tools +++ b/tools @@ -1 +1 @@ -Subproject commit 1db2a69a5f1cd1576e582d9d7b3ae5a2d88392c2 +Subproject commit a761c6a462fb0d0e5eb8ec3328dba2015d455fe6 diff --git a/workflowsCommands b/workflowsCommands index daea79e..a9015f2 160000 --- a/workflowsCommands +++ b/workflowsCommands @@ -1 +1 @@ -Subproject commit daea79e719527e93a5262a2b8f1d1cb83c47ebe7 +Subproject commit a9015f2a37a25e324a8e9e41a9c12b75a8b78e37 From 0939dcd52f8a43153695b5ae6ccb7d203f37d0d3 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 21:46:35 +0800 Subject: [PATCH 13/14] Update MAMBA_BIN_PATH in DevChat class --- src/toolwrapper/devchat.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/toolwrapper/devchat.ts b/src/toolwrapper/devchat.ts index 3ec5b80..84a9c62 100644 --- a/src/toolwrapper/devchat.ts +++ b/src/toolwrapper/devchat.ts @@ -213,7 +213,7 @@ class DevChat { "PYTHONPATH": UiUtilWrapper.extensionPath() + "/tools/site-packages", // eslint-disable-next-line @typescript-eslint/naming-convention "DEVCHAT_PROXY": DevChatConfig.getInstance().get('DEVCHAT_PROXY') || "", - "MAMBA_BIN_PATH": getMicromambaUrl(), // TODO: important! jetbrains should set this value too. + "MAMBA_BIN_PATH": getMicromambaUrl(), }; const pythonApp = DevChatConfig.getInstance().get('python_for_chat') || "python3"; @@ -265,7 +265,7 @@ class DevChat { // eslint-disable-next-line @typescript-eslint/naming-convention ...llmModelData.api_base? { "OPENAI_API_BASE": llmModelData.api_base, "OPENAI_BASE_URL": llmModelData.api_base } : {}, "DEVCHAT_PROXY": DevChatConfig.getInstance().get('DEVCHAT_PROXY') || "", - "MAMBA_BIN_PATH": getMicromambaUrl(), // TODO: important! jetbrains should set this value too. + "MAMBA_BIN_PATH": getMicromambaUrl(), }; // build process options From 6db623bed8a107415f128b29c429c1580f15572d Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Mon, 13 May 2024 21:47:54 +0800 Subject: [PATCH 14/14] Refactor workflow base directory name --- src/util/python_installer/install_devchat.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/util/python_installer/install_devchat.ts b/src/util/python_installer/install_devchat.ts index 56f36a0..4e9b138 100644 --- a/src/util/python_installer/install_devchat.ts +++ b/src/util/python_installer/install_devchat.ts @@ -38,7 +38,6 @@ export async function installDevchat(): Promise { const sitepackagesPath = path.join(UiUtilWrapper.extensionPath(), "tools", "site-packages"); const userHomeDir = os.homedir(); - // TODO: temperary workflow base dir name, need to change const WORKFLOWS_BASE_NAME = "scripts"; const workflow_base_path = path.join(userHomeDir, ".chat", WORKFLOWS_BASE_NAME);