From 048053f18c69d19e4a3f0a44def7b72f611b42f8 Mon Sep 17 00:00:00 2001 From: sean Date: Mon, 16 Jun 2025 15:12:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0toolDefinitions.js=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E6=8F=8F=E8=BF=B0=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=B7=A5=E5=85=B7=E6=97=B6=E7=9A=84=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E9=AA=8C=E8=AF=81=E6=8F=90=E7=A4=BA=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E7=94=A8=E6=88=B7=E5=9C=A8=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=B8=93=E4=B8=9A=E8=A7=92=E8=89=B2=E9=80=89=E6=8B=A9=E5=92=8C?= =?UTF-8?q?=E5=8F=98=E8=BA=AB=E5=99=A8=E6=97=B6=E7=9A=84=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=80=A7=E5=92=8C=E5=87=86=E7=A1=AE=E6=80=A7=E3=80=82=E5=90=8C?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=9C=A8DirectoryLocator.js=E4=B8=AD?= =?UTF-8?q?=E5=BC=95=E5=85=A5AI=E9=A9=B1=E5=8A=A8=E7=9A=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=AE=A1=E7=90=86=E5=99=A8=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BA=86=E9=A1=B9=E7=9B=AE=E8=B7=AF=E5=BE=84=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=E7=AD=96=E7=95=A5=EF=BC=8C=E7=A1=AE=E4=BF=9D=E6=9B=B4=E9=AB=98?= =?UTF-8?q?=E7=9A=84=E6=9F=A5=E6=89=BE=E4=BC=98=E5=85=88=E7=BA=A7=E5=92=8C?= =?UTF-8?q?=E7=81=B5=E6=B4=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/mcp/toolDefinitions.js | 6 +-- src/lib/utils/DirectoryLocator.js | 67 ++++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/src/lib/mcp/toolDefinitions.js b/src/lib/mcp/toolDefinitions.js index 882d756..6c5f77b 100644 --- a/src/lib/mcp/toolDefinitions.js +++ b/src/lib/mcp/toolDefinitions.js @@ -27,7 +27,7 @@ const TOOL_DEFINITIONS = [ }, { name: 'promptx_hello', - description: '🎭 [专业角色选择菜单] 🔥 当你需要专业能力时必须先看这个 - 展示大量可激活的专家身份清单:产品经理/Java开发者/UI设计师/文案策划师/数据分析师/项目经理等,每个角色都有完整的专业思维模式和工作技能,看完后选择最适合当前任务的专家身份', + description: '🎭 [专业角色选择菜单] 🔥 当你需要专业能力时必须先看这个 - 展示大量可激活的专家身份清单:产品经理/Java开发者/UI设计师/文案策划师/数据分析师/项目经理等,每个角色都有完整的专业思维模式和工作技能。🛑 **重要**:使用此工具时必须首先关注并响应工具返回结果开头的项目环境验证提示,确认项目路径正确后再处理角色列表内容,看完后选择最适合当前任务的专家身份', inputSchema: { type: 'object', properties: {} @@ -36,7 +36,7 @@ const TOOL_DEFINITIONS = [ }, { name: 'promptx_action', - description: '⚡ [专家身份变身器] 🚀 让你瞬间获得指定专业角色的完整思维和技能包 - 输入角色ID立即获得该领域专家的思考方式/工作原则/专业知识,同时自动加载相关历史经验和最佳实践,3秒内完成专业化转换,每次需要专业服务时必须使用', + description: '⚡ [专家身份变身器] 🚀 让你瞬间获得指定专业角色的完整思维和技能包 - 输入角色ID立即获得该领域专家的思考方式/工作原则/专业知识,同时自动加载相关历史经验和最佳实践,3秒内完成专业化转换。🛑 **重要**:使用此工具时必须首先关注并响应工具返回结果开头的项目环境验证提示,确认项目路径正确后再处理角色激活内容,每次需要专业服务时必须使用', inputSchema: { type: 'object', properties: { @@ -53,7 +53,7 @@ const TOOL_DEFINITIONS = [ }, { name: 'promptx_learn', - description: '🧠 [专业技能学习器] 💎 让你快速掌握特定专业技能和思维方式 - 学习创意思维/最佳实践/敏捷开发/产品设计等专业能力,支持thought://(思维模式) execution://(执行技能) knowledge://(专业知识)三种学习类型,学会后立即可以运用到工作中,想要专业化成长时使用', + description: '🧠 [专业技能学习器] 💎 让你快速掌握特定专业技能和思维方式 - 学习创意思维/最佳实践/敏捷开发/产品设计等专业能力,支持thought://(思维模式) execution://(执行技能) knowledge://(专业知识)三种学习类型。🛑 **重要**:使用此工具时必须首先关注并响应工具返回结果开头的项目环境验证提示,确认项目路径正确后再处理学习内容,学会后立即可以运用到工作中,想要专业化成长时使用', inputSchema: { type: 'object', properties: { diff --git a/src/lib/utils/DirectoryLocator.js b/src/lib/utils/DirectoryLocator.js index 4b66013..0d5e39f 100644 --- a/src/lib/utils/DirectoryLocator.js +++ b/src/lib/utils/DirectoryLocator.js @@ -1,6 +1,7 @@ const fs = require('fs-extra') const path = require('path') const os = require('os') +const CurrentProjectManager = require('./CurrentProjectManager') /** * 目录定位器基础抽象类 @@ -90,13 +91,17 @@ class ProjectRootLocator extends DirectoryLocator { constructor(options = {}) { super(options) + // 初始化AI驱动的项目管理器 + this.currentProjectManager = new CurrentProjectManager() + // 可配置的查找策略优先级(按可靠性和准确性排序) this.strategies = options.strategies || [ - 'existingPromptxDirectory', // 1. 现有.promptx目录(最可靠的项目标识) - 'packageJsonDirectory', // 2. 向上查找项目标识文件(最准确的项目边界) - 'gitRootDirectory', // 3. Git根目录(通用可靠) - 'currentWorkingDirectoryIfHasMarkers', // 4. 当前目录项目标识(降级策略) - 'currentWorkingDirectory' // 5. 纯当前目录(最后回退) + 'aiProvidedProjectPath', // 1. AI提供的项目路径(最可靠,由AI告知) + 'existingPromptxDirectory', // 2. 现有.promptx目录(最可靠的项目标识) + 'packageJsonDirectory', // 3. 向上查找项目标识文件(最准确的项目边界) + 'gitRootDirectory', // 4. Git根目录(通用可靠) + 'currentWorkingDirectoryIfHasMarkers', // 5. 当前目录项目标识(降级策略) + 'currentWorkingDirectory' // 6. 纯当前目录(最后回退) ] // 项目标识文件 @@ -144,6 +149,9 @@ class ProjectRootLocator extends DirectoryLocator { */ async _executeStrategy(strategy, startDir, context) { switch (strategy) { + case 'aiProvidedProjectPath': + return await this._findByAIProvidedPath() + case 'existingPromptxDirectory': return await this._findByExistingPromptx(startDir) @@ -164,6 +172,21 @@ class ProjectRootLocator extends DirectoryLocator { } } + /** + * 通过AI提供的项目路径查找(最高优先级) + */ + async _findByAIProvidedPath() { + try { + const aiProvidedPath = await this.currentProjectManager.getCurrentProject() + if (aiProvidedPath && await this.isValidDirectory(aiProvidedPath)) { + return aiProvidedPath + } + } catch (error) { + // AI提供的路径获取失败,继续使用其他策略 + } + return null + } + /** * 检查当前目录是否包含项目标识文件 */ @@ -270,6 +293,7 @@ class PromptXWorkspaceLocator extends DirectoryLocator { constructor(options = {}) { super(options) this.projectRootLocator = options.projectRootLocator || new ProjectRootLocator(options) + this.currentProjectManager = new CurrentProjectManager() } /** @@ -284,19 +308,25 @@ class PromptXWorkspaceLocator extends DirectoryLocator { return cached } - // 策略1:IDE环境变量(最高优先级 - 用户/IDE明确指定) + // 策略1:AI提供的项目路径(最高优先级 - AI驱动的路径管理) + const workspaceFromAI = await this._fromAIProvidedPath() + if (workspaceFromAI) { + return this.setCached(cacheKey, workspaceFromAI) + } + + // 策略2:IDE环境变量(用户/IDE明确指定) const workspaceFromIDE = await this._fromIDEEnvironment() if (workspaceFromIDE) { return this.setCached(cacheKey, workspaceFromIDE) } - // 策略2:PromptX专用环境变量(用户手动配置) + // 策略3:PromptX专用环境变量(用户手动配置) const workspaceFromEnv = await this._fromPromptXEnvironment() if (workspaceFromEnv) { return this.setCached(cacheKey, workspaceFromEnv) } - // 策略3:特定上下文策略(如init命令的强制指定) + // 策略4:特定上下文策略(如init命令的强制指定) if (context.strategies) { const workspaceFromProject = await this._fromProjectRoot(context) if (workspaceFromProject) { @@ -304,22 +334,37 @@ class PromptXWorkspaceLocator extends DirectoryLocator { } } - // 策略4:现有.promptx目录(已初始化的项目) + // 策略5:现有.promptx目录(已初始化的项目) const workspaceFromExisting = await this._fromExistingDirectory(context.startDir) if (workspaceFromExisting) { return this.setCached(cacheKey, workspaceFromExisting) } - // 策略5:项目根目录(基于项目结构推断) + // 策略6:项目根目录(基于项目结构推断) const workspaceFromProject = await this._fromProjectRoot(context) if (workspaceFromProject) { return this.setCached(cacheKey, workspaceFromProject) } - // 策略6:智能回退策略(兜底方案) + // 策略7:智能回退策略(兜底方案) return this.setCached(cacheKey, await this._getSmartFallback(context)) } + /** + * 从AI提供的项目路径获取(最高优先级) + */ + async _fromAIProvidedPath() { + try { + const aiProvidedPath = await this.currentProjectManager.getCurrentProject() + if (aiProvidedPath && await this.isValidDirectory(aiProvidedPath)) { + return aiProvidedPath + } + } catch (error) { + // AI提供的路径获取失败,继续使用其他策略 + } + return null + } + /** * 从IDE环境变量获取(支持多种IDE) */