Files
PromptX/resource/role/luban/execution/tool-development-workflow.execution.md
Sean d1d38e046b fix: 鲁班工具开发体验优化 - 五组件架构升级与智能错误处理 (#116)
* feat: 为promptx_tool增加forceReinstall选项支持

解决工具沙箱缓存机制问题,允许强制重新安装工具依赖。

## 修改内容

### 1. 工具定义更新 (toolDefinitions.js)
- 增加 context.options.forceReinstall 参数支持
- 增加 context.options.timeout 参数支持
- 完善参数描述,说明context用途
- 移除暂时不需要的role_id和session_id参数

### 2. 执行逻辑优化 (ToolCommand.js)
- 支持从context.options提取执行选项
- 将选项传递给ToolSandbox构造函数
- 增加调试日志输出沙箱选项
- 完善JSDoc注释

## 解决的问题

- Issue #107: PromptX工具沙箱缓存机制不支持工具集更新
- 鲁班等AI角色在调试工具时遇到的缓存问题
- 工具依赖更新后无法自动重新安装的问题

## 使用方式

```javascript
// 强制重新安装依赖
{
  tool_resource: "@tool://tool-name",
  parameters: { /* 工具参数 */ },
  context: {
    options: {
      forceReinstall: true
    }
  }
}
```

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: 简化context参数,移除暂时不需要的role_id和session_id

按照奥卡姆剃刀原则,移除当前没有实际用途的参数:
- 移除 context.role_id
- 移除 context.session_id
- 保留 context.options 用于执行配置
- 简化API接口,降低复杂度

未来如需要可重新添加这些参数。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: 简化promptx_tool参数结构,移除context层级

## 主要改进

### 1. 扁平化参数结构
- 移除复杂的context嵌套,直接使用顶级参数
- forceReinstall 和 timeout 作为可选的顶级参数
- 遵循MCP协议惯例,降低AI理解成本

### 2. 参数说明优化
- forceReinstall: 明确默认值为false
- 详细说明使用场景:工具开发和调试中的缓存问题
- timeout: 明确默认值为30000ms

### 3. 防止盲目调用
- 增加重要提醒:要求AI先了解工具说明再调用
- 避免大模型在不了解工具的情况下盲目执行

## 新的调用方式

## 优势
- 符合MCP预训练共识,降低AI学习成本
- 参数结构简洁直观
- 保持向后兼容性

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: 修正鲁班工具开发提示词 - 更新为五组件架构并增加AI引导机制

- 更新DPML工具标签知识:从四组件升级到五组件架构(增加identity标签)
- 在工具开发工作流中增加.tool.md说明书创建步骤
- 添加AI使用提醒机制,强化工具使用前必读原则
- 完善工具标签编写模板,包含完整的五标签结构
- 更新质量检查标准,适配新的标签体系

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: 添加智能require错误过滤机制到ToolSandbox

解决工具开发中的常见问题:analyze阶段require依赖导致的错误

核心改进:
- 添加_filterRequireError()私有方法,智能识别MODULE_NOT_FOUND错误
- 通过静态分析提取getDependencies()声明的依赖列表
- 对比缺失模块与声明依赖,区分合法缺失和代码错误
- 支持版本号格式的依赖声明(如axios@^1.6.0)

开发者体验提升:
- 可以自然地在文件顶部写require()语句
- 忘记声明依赖时仍会得到明确错误提示
- 降低工具开发的认知负担和学习成本
- 遵循奥卡姆剃刀原则:用技术解决技术问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-05 09:10:43 +08:00

491 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<execution>
<constraint>
## 技术架构约束
- **单文件工具**:每个工具必须是独立的.tool.js文件
- **ToolInterface规范**必须实现execute()、getDependencies()、getMetadata()等标准接口
- **ToolSandbox兼容**:工具必须能在沙箱环境中正常运行
- **协议统一**:通过@tool://协议访问,沙箱位于@user://.promptx/toolbox/
- **依赖隔离**:每个工具的依赖安装在独立的沙箱目录中
</constraint>
<rule>
## 开发强制规则
- **接口完整性**:必须实现所有必要的接口方法
- **依赖声明**所有外部依赖必须在getDependencies()中明确声明
- **参数验证**必须实现validate()方法验证输入参数
- **错误处理**:必须有完善的异常处理机制
- **安全第一**:禁止执行危险操作,确保沙箱安全
</rule>
<guideline>
## 开发指导原则
- **用户体验优先**:接口设计简洁直观
- **性能效率**:优化执行速度和资源使用
- **可维护性**:代码结构清晰,注释完整
- **渐进式功能**:先实现核心功能,再扩展高级特性
- **测试驱动**:每个功能都要有相应的测试验证
</guideline>
<process>
## 🛠️ 标准工具开发流程
### Phase 1: 需求分析与设计 (15分钟)
```mermaid
flowchart TD
A[用户需求] --> B[功能分析]
B --> C[依赖调研]
C --> D[接口设计]
D --> E[原型验证]
```
**Step 1.1: 深度需求分析**
- 理解用户真实痛点
- 分析现有解决方案的不足
- 确定工具的核心价值主张
- 明确功能边界和使用场景
**Step 1.2: 技术方案选择**
- 选择合适的npm依赖包
- 评估依赖包的稳定性和文档质量
- 确认沙箱环境兼容性
- 设计错误处理策略
**Step 1.3: 工具说明书设计**
```xml
<!-- {tool-name}.tool.md 模板 -->
<tool>
<identity>
## 工具名称
@tool://{tool-name}
## 简介
工具功能的一句话简介
</identity>
<purpose>
⚠️ **AI重要提醒**: 调用此工具前必须完整阅读本说明书,理解工具功能边界、参数要求和使用限制。禁止在不了解工具功能的情况下盲目调用。
## 核心问题定义
明确描述工具要解决的具体问题
## 价值主张
- 🎯 **解决什么痛点**:具体描述用户痛点
- 🚀 **带来什么价值**:明确量化收益
- 🌟 **独特优势**:相比其他方案的优势
## 应用边界
- ✅ **适用场景**:详细列出适用情况
- ❌ **不适用场景**:明确使用边界
</purpose>
<usage>
<!-- 详细的使用指导 -->
</usage>
<parameter>
<!-- 完整的参数说明 -->
</parameter>
<outcome>
<!-- 返回结果格式说明 -->
</outcome>
</tool>
```
**Step 1.4: 接口规范设计**
```javascript
// 标准工具接口模板
module.exports = {
getDependencies() {
return ['package@version']; // 声明依赖
},
getMetadata() {
return {
name: 'tool-name',
description: '工具描述',
version: '1.0.0',
category: '分类'
};
},
getSchema() {
return {
type: 'object',
properties: { /* JSON Schema */ }
};
},
validate(params) {
// 参数验证逻辑
},
async execute(params) {
// 核心执行逻辑
}
};
```
### Phase 2: 核心实现 (30分钟)
```mermaid
flowchart LR
A[创建工具文件] --> B[编写说明书]
B --> C[实现接口方法]
C --> D[依赖管理]
D --> E[核心逻辑]
E --> F[错误处理]
```
**Step 2.1: 工具文件创建**
```bash
# 标准文件路径
.promptx/resource/tool/{tool-name}/{tool-name}.tool.js # 给计算机的执行代码
.promptx/resource/tool/{tool-name}/{tool-name}.tool.md # 给AI的使用说明书
```
**Step 2.2: 工具说明书编写**
基于Phase 1的设计完整编写五组件说明书
```xml
<tool>
<identity>
## 工具名称
@tool://actual-tool-name
## 简介
具体的工具功能描述
</identity>
<purpose>
⚠️ **AI重要提醒**: 调用此工具前必须完整阅读本说明书,理解工具功能边界、参数要求和使用限制。禁止在不了解工具功能的情况下盲目调用。
## 核心问题定义
[具体问题描述]
## 价值主张
- 🎯 **解决什么痛点**[具体痛点]
- 🚀 **带来什么价值**[具体价值]
- 🌟 **独特优势**[核心优势]
## 应用边界
- ✅ **适用场景**[适用情况]
- ❌ **不适用场景**[限制条件]
</purpose>
<usage>
## 使用时机
[具体使用场景]
## 操作步骤
1. **准备阶段**[准备工作]
2. **执行阶段**[执行步骤]
3. **验证阶段**[验证方法]
## 最佳实践
- 🎯 **效率提升**[效率技巧]
- ⚠️ **避免陷阱**[常见问题]
- 🔧 **故障排除**[问题解决]
## 注意事项
[重要提醒事项]
</usage>
<parameter>
## 必需参数
| 参数名 | 类型 | 描述 | 示例 |
|--------|------|------|------|
| [参数] | [类型] | [描述] | [示例] |
## 可选参数
| 参数名 | 类型 | 默认值 | 描述 |
|--------|------|--------|------|
| [参数] | [类型] | [默认值] | [描述] |
## 参数约束
- **[约束类型]**[约束说明]
## 参数示例
```json
{
"[参数名]": "[参数值]"
}
```
</parameter>
<outcome>
## 成功返回格式
```json
{
"success": true,
"data": {
"[数据字段]": "[数据说明]"
}
}
```
## 错误处理格式
```json
{
"success": false,
"error": {
"code": "[错误代码]",
"message": "[错误信息]"
}
}
```
## 结果解读指南
- **[使用方式]**[说明]
## 后续动作建议
- [成功时的建议]
- [失败时的建议]
</outcome>
</tool>
```
**Step 2.3: 依赖管理实现**
```javascript
getDependencies() {
return [
'lodash@^4.17.21', // 工具函数库
'axios@^1.6.0', // HTTP请求
'validator@^13.11.0' // 数据验证
];
}
```
**Step 2.4: 元信息定义**
```javascript
getMetadata() {
return {
name: 'my-awesome-tool',
description: '这是一个很棒的工具,用于...',
version: '1.0.0',
category: 'utility',
author: '鲁班',
tags: ['tool', 'automation', 'utility']
};
}
```
**Step 2.5: Schema定义**
```javascript
getSchema() {
return {
type: 'object',
properties: {
input: {
type: 'string',
description: '输入参数描述'
},
options: {
type: 'object',
properties: {
format: { type: 'string', default: 'json' }
}
}
},
required: ['input']
};
}
```
### Phase 3: 沙箱测试 (15分钟)
```mermaid
flowchart TD
A[ToolSandbox创建] --> B[依赖安装]
B --> C[功能测试]
C --> D[边界测试]
D --> E[性能测试]
```
**Step 3.1: 沙箱环境验证**
```javascript
// 测试代码示例
const ToolSandbox = require('./src/lib/tool/ToolSandbox');
const ResourceManager = require('./src/lib/core/resource/resourceManager');
async function testTool() {
const resourceManager = new ResourceManager();
await resourceManager.initializeWithNewArchitecture();
const sandbox = new ToolSandbox('@tool://my-awesome-tool');
sandbox.setResourceManager(resourceManager);
// 分析工具
await sandbox.analyze();
// 准备依赖
await sandbox.prepareDependencies();
// 测试执行
const result = await sandbox.execute({
input: 'test data',
options: { format: 'json' }
});
console.log('测试结果:', result);
}
```
**Step 3.2: 完整功能测试矩阵**
- ✅ 正常参数测试
- ✅ 边界值测试
- ✅ 异常参数测试
- ✅ 依赖缺失测试
- ✅ 性能压力测试
### Phase 4: 优化与发布 (10分钟)
```mermaid
flowchart LR
A[代码优化] --> B[文档完善]
B --> C[注册表更新]
C --> D[用户验收]
```
**Step 4.1: 代码质量优化**
- 重构冗余代码
- 优化性能瓶颈
- 完善错误信息
- 添加调试日志
**Step 4.2: 注册表刷新与验证**
🔄 **刷新项目级资源注册表**
**在MCP环境中使用init工具**
- 使用MCP PromptX的`promptx_init`工具刷新项目级注册表
- 该工具会重新扫描`.promptx/resource/`目录并更新资源注册表
- 调用后工具立即可用无需重启MCP服务器
**调用方式**
```
工具名称: promptx_init
参数: {"workingDirectory": "/current/project/path"}
```
🔍 **验证工具注册成功**
**使用MCP工具验证**
- 使用`promptx_welcome`工具查看是否出现新工具
- 使用`promptx_tool`工具测试新工具是否可用
- 检查工具列表中是否包含新开发的工具
🚨 **注册表刷新关键时机**
- ✅ 创建新工具后必须执行
- ✅ 修改工具metadata后需要执行
- ✅ MCP缓存问题时需要执行
- ✅ 工具无法被发现时需要执行
💡 **PromptX注册表机制解释**
- **项目级扫描**`promptx init`重新扫描`.promptx/resource/`目录
- **缓存重置**清理ResourceManager缓存重新发现资源
- **MCP同步**确保MCP服务器获取最新的工具列表
**Step 4.3: 用户接受度验证**
- 接口易用性评估
- 功能完整性确认
- 性能表现验证
- 安全性审查
## 🔧 高级开发技巧
### 依赖优化策略
```javascript
getDependencies() {
// 按需声明,避免冗余
const dependencies = [];
// 基础功能依赖
if (this.needsUtilities()) {
dependencies.push('lodash@^4.17.21');
}
// 网络功能依赖
if (this.needsHttp()) {
dependencies.push('axios@^1.6.0');
}
return dependencies;
}
```
### 智能错误处理
```javascript
async execute(params) {
try {
// 核心逻辑
return await this.processData(params);
} catch (error) {
// 分类错误处理
if (error.code === 'NETWORK_ERROR') {
throw new Error('网络连接失败,请检查网络设置');
} else if (error.code === 'VALIDATION_ERROR') {
throw new Error(`参数验证失败: ${error.message}`);
} else {
throw new Error(`工具执行失败: ${error.message}`);
}
}
}
```
### 性能优化模式
```javascript
async execute(params) {
// 缓存机制
const cacheKey = this.generateCacheKey(params);
if (this.cache.has(cacheKey)) {
return this.cache.get(cacheKey);
}
// 执行逻辑
const result = await this.processData(params);
// 缓存结果
this.cache.set(cacheKey, result);
return result;
}
```
</process>
<criteria>
## 工具质量评价标准
### 功能完整性 (25分)
- ✅ 核心功能完全实现
- ✅ 边界情况正确处理
- ✅ 错误场景优雅降级
- ✅ 用户需求完全满足
### 技术规范性 (25分)
- ✅ ToolInterface完全符合
- ✅ 依赖声明准确完整
- ✅ Schema定义标准规范
- ✅ 代码结构清晰可维护
### 沙箱兼容性 (25分)
- ✅ ToolSandbox正常运行
- ✅ 依赖自动安装成功
- ✅ 资源隔离正确工作
- ✅ 协议访问正常响应
### 用户体验质量 (25分)
- ✅ 接口简洁易用
- ✅ 错误信息友好
- ✅ 性能表现优秀
- ✅ 文档描述准确
### 卓越标准 (附加分)
- 🌟 创新功能设计
- 🌟 极致性能优化
- 🌟 出色的错误处理
- 🌟 完美的用户体验
</criteria>
</execution>