From 40c3b83854e3a9ebcb8cd7c177e0d697de77427a Mon Sep 17 00:00:00 2001 From: sean Date: Sun, 15 Jun 2025 21:52:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BAPromptXWorkspaceLocator?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BC=A0=E9=80=92=E5=8F=98=E9=87=8F=E5=90=8D?= =?UTF-8?q?=E4=BB=A5=E4=BE=BF=E4=BA=8E=E7=89=B9=E5=AE=9A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E7=9A=84=E5=A4=84=E7=90=86=EF=BC=9B=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AF=B9=E5=AD=97=E8=8A=82=E8=B7=B3=E5=8A=A8Trae?= =?UTF-8?q?=E5=8F=8A=E5=85=B6=E4=BB=96=E5=9F=BA=E4=BA=8EPWD=E7=9A=84IDE?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BA=86?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E8=A7=A3=E6=9E=90=E7=AD=96=E7=95=A5=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E4=BA=86=E7=9B=AE=E5=BD=95=E5=AE=9A=E4=BD=8D?= =?UTF-8?q?=E7=9A=84=E7=81=B5=E6=B4=BB=E6=80=A7=E5=92=8C=E5=87=86=E7=A1=AE?= =?UTF-8?q?=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/utils/DirectoryLocator.js | 42 ++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/lib/utils/DirectoryLocator.js b/src/lib/utils/DirectoryLocator.js index 37eb16c..4b66013 100644 --- a/src/lib/utils/DirectoryLocator.js +++ b/src/lib/utils/DirectoryLocator.js @@ -330,7 +330,7 @@ class PromptXWorkspaceLocator extends DirectoryLocator { { name: 'Claude IDE', vars: ['WORKSPACE_FOLDER_PATHS'], - parse: (value) => { + parse: (value, varName) => { try { const folders = JSON.parse(value) return Array.isArray(folders) && folders.length > 0 ? folders[0] : null @@ -344,42 +344,64 @@ class PromptXWorkspaceLocator extends DirectoryLocator { { name: 'VSCode', vars: ['VSCODE_WORKSPACE_FOLDER', 'VSCODE_CWD'], - parse: (value) => value + parse: (value, varName) => value }, // IntelliJ IDEA / WebStorm / PhpStorm { name: 'JetBrains IDEs', vars: ['PROJECT_ROOT', 'IDEA_INITIAL_DIRECTORY', 'WEBSTORM_PROJECT_PATH'], - parse: (value) => value + parse: (value, varName) => value }, // Sublime Text { name: 'Sublime Text', vars: ['SUBLIME_PROJECT_PATH', 'SUBL_PROJECT_DIR'], - parse: (value) => value + parse: (value, varName) => value }, // Atom { name: 'Atom', vars: ['ATOM_PROJECT_PATH', 'ATOM_HOME_PROJECT'], - parse: (value) => value + parse: (value, varName) => value }, // Vim/Neovim { name: 'Vim/Neovim', vars: ['VIM_PROJECT_ROOT', 'NVIM_PROJECT_ROOT'], - parse: (value) => value + parse: (value, varName) => value + }, + + // 字节跳动 Trae 和其他基于PWD的IDE + { + name: 'ByteDance Trae & PWD-based IDEs', + vars: ['PWD', 'TRAE_WORKSPACE', 'BYTEDANCE_WORKSPACE'], + parse: (value, varName) => { + // 对于专用环境变量,直接使用 + if (varName === 'TRAE_WORKSPACE' || varName === 'BYTEDANCE_WORKSPACE') { + return value + } + + // 对于PWD,只有当它与process.cwd()不同时,才认为是IDE设置的项目路径 + if (varName === 'PWD') { + const currentCwd = process.cwd() + if (value && value !== currentCwd) { + return value + } + } + + return null + } }, // 通用工作目录 { name: 'Generic', vars: ['WORKSPACE_ROOT', 'PROJECT_DIR', 'WORKING_DIRECTORY'], - parse: (value) => value + parse: (value, varName) => value } ] @@ -388,7 +410,8 @@ class PromptXWorkspaceLocator extends DirectoryLocator { for (const varName of strategy.vars) { const envValue = process.env[varName] if (envValue && envValue.trim() !== '') { - const parsedPath = strategy.parse(envValue.trim()) + // 传递varName给parse函数,支持变量名相关的解析逻辑 + const parsedPath = strategy.parse(envValue.trim(), varName) if (parsedPath) { const normalizedPath = this.normalizePath(this.expandHome(parsedPath)) if (normalizedPath && await this.isValidDirectory(normalizedPath)) { @@ -509,8 +532,9 @@ class PromptXWorkspaceLocator extends DirectoryLocator { 'SUBLIME_PROJECT_PATH', 'SUBL_PROJECT_DIR', 'ATOM_PROJECT_PATH', 'ATOM_HOME_PROJECT', 'VIM_PROJECT_ROOT', 'NVIM_PROJECT_ROOT', + 'PWD', 'TRAE_WORKSPACE', 'BYTEDANCE_WORKSPACE', 'WORKSPACE_ROOT', 'PROJECT_DIR', 'WORKING_DIRECTORY', - 'PROMPTX_WORKSPACE', 'PWD' + 'PROMPTX_WORKSPACE' ] const available = {}