feat: 实现@tool协议完整功能 - JavaScript工具执行框架
✨ 核心功能 - 新增ToolProtocol处理器,支持@tool://协议解析 - 实现PromptXToolCommand,统一MCP/CLI工具调用 - 完善ToolExecutor,支持工具实例化和参数验证 - 新增calculator和send-email示例工具 🔧 技术改进 - 优化PackageDiscovery统一资源扫描逻辑 - 增强CrossPlatformFileScanner支持.tool.js文件 - 完善ResourceManager集成ToolProtocol - 更新MCP工具定义支持promptx_tool 📋 详细变更 Core: - src/lib/core/resource/protocols/ToolProtocol.js: 新增工具协议处理器 - src/lib/commands/PromptXToolCommand.js: 新增工具命令处理器 - src/lib/tool/ToolExecutor.js: 增强工具执行器兼容性 Discovery: - src/lib/core/resource/discovery/PackageDiscovery.js: 统一资源扫描 - src/lib/core/resource/discovery/CrossPlatformFileScanner.js: 支持tool文件 - src/lib/core/resource/discovery/ProjectDiscovery.js: 增加tool验证 Integration: - src/lib/core/resource/resourceManager.js: 集成ToolProtocol - src/lib/mcp/toolDefinitions.js: 新增promptx_tool定义 - src/lib/commands/MCPServerCommand.js: 支持tool参数转换 - src/bin/promptx.js: 新增tool命令行支持 Tools: - prompt/tool/calculator.tool.js: 数学计算工具示例 - prompt/tool/send-email.tool.js: 邮件发送工具示例 Registry: - src/package.registry.json: 自动生成包含2个tool资源 🧪 测试验证 - ✅ @tool://calculator 数学计算: 25 + 37 = 62 - ✅ @tool://send-email 邮件发送演示版本 - ✅ CLI和MCP双模式支持 - ✅ 完整的错误处理和执行元数据 - ✅ 资源自动发现和注册 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -160,7 +160,7 @@ class ProjectDiscovery extends BaseDiscovery {
|
||||
const resources = []
|
||||
|
||||
// 定义要扫描的资源类型
|
||||
const resourceTypes = ['role', 'execution', 'thought', 'knowledge']
|
||||
const resourceTypes = ['role', 'execution', 'thought', 'knowledge', 'tool']
|
||||
|
||||
// 并行扫描所有资源类型
|
||||
for (const resourceType of resourceTypes) {
|
||||
@ -254,6 +254,9 @@ class ProjectDiscovery extends BaseDiscovery {
|
||||
// knowledge类型比较灵活,只要文件有内容就认为是有效的
|
||||
// 可以是纯文本、链接、图片等任何形式的知识内容
|
||||
return true
|
||||
case 'tool':
|
||||
// tool类型必须是有效的JavaScript代码
|
||||
return this._validateToolFile(content)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
@ -263,6 +266,34 @@ class ProjectDiscovery extends BaseDiscovery {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证Tool文件是否为有效的JavaScript代码
|
||||
* @param {string} content - 文件内容
|
||||
* @returns {boolean} 是否为有效的Tool文件
|
||||
*/
|
||||
_validateToolFile(content) {
|
||||
try {
|
||||
// 1. 基本的JavaScript语法检查
|
||||
new Function(content);
|
||||
|
||||
// 2. 检查是否包含module.exports(CommonJS格式)
|
||||
if (!content.includes('module.exports')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 3. 检查是否包含工具必需的方法(getMetadata, execute等)
|
||||
const requiredMethods = ['getMetadata', 'execute'];
|
||||
const hasRequiredMethods = requiredMethods.some(method =>
|
||||
content.includes(method)
|
||||
);
|
||||
|
||||
return hasRequiredMethods;
|
||||
} catch (syntaxError) {
|
||||
// JavaScript语法错误
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成项目引用路径
|
||||
* @param {string} filePath - 文件绝对路径
|
||||
|
||||
Reference in New Issue
Block a user