refactor: 完成PromptX资源架构重构和工具系统集成

- 将prompt/目录重构为resource/目录,统一资源管理
- 删除DACP相关代码,聚焦核心PromptX功能
- 新增鲁班角色,支持工具开发工作流
- 优化无面角色,增强学习和内容保存能力
- 修复角色加载和激活机制
- 完善MCP工具定义和适配器
- 清理过时的前端开发者等角色资源

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
sean
2025-06-28 22:44:04 +08:00
147 changed files with 5229 additions and 10563 deletions

View File

@ -0,0 +1,346 @@
<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: 接口规范设计**
```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[错误处理]
```
**Step 2.1: 工具文件创建**
```bash
# 标准文件路径
.promptx/resource/tool/{tool-name}/{tool-name}.tool.js
```
**Step 2.2: 依赖管理实现**
```javascript
getDependencies() {
return [
'lodash@^4.17.21', // 工具函数库
'axios@^1.6.0', // HTTP请求
'validator@^13.11.0' // 数据验证
];
}
```
**Step 2.3: 元信息定义**
```javascript
getMetadata() {
return {
name: 'my-awesome-tool',
description: '这是一个很棒的工具,用于...',
version: '1.0.0',
category: 'utility',
author: '鲁班',
tags: ['tool', 'automation', 'utility']
};
}
```
**Step 2.4: 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>

View File

@ -0,0 +1,250 @@
# ToolSandbox系统精通
<execution>
<constraint>
## ToolSandbox技术约束
- **协议固定**@tool://和@user://协议不可更改
- **沙箱隔离**:每个工具运行在独立的沙箱环境中
- **依赖管理**通过内置pnpm自动管理依赖
- **VM限制**受Node.js VM模块功能限制
- **路径规范**:沙箱位置固定在@user://.promptx/toolbox/{toolId}
</constraint>
<rule>
## ToolSandbox使用规则
- **三阶段必须**analyze → prepareDependencies → execute顺序执行
- **依赖声明强制**getDependencies()返回的依赖必须准确
- **错误处理必须**:每个阶段都要有完善的错误处理
- **资源清理**使用完毕后必须调用cleanup()
- **状态检查**执行前必须检查isPrepared状态
</rule>
<guideline>
## ToolSandbox最佳实践
- **资源复用**:同一工具的沙箱可跨项目复用
- **缓存策略**:合理利用沙箱缓存提升性能
- **监控调试**:关注沙箱执行日志和性能指标
- **版本管理**:注意依赖版本一致性
- **安全优先**:避免在工具中执行危险操作
</guideline>
<process>
## 🏗️ ToolSandbox完整掌握流程
### 架构理解阶段
```mermaid
graph TD
A[@tool://protocol] --> B[ResourceManager]
B --> C[ToolSandbox]
C --> D[@user://.promptx/toolbox]
D --> E[pnpm dependencies]
E --> F[VM execution]
```
**ToolSandbox核心组件**
- **ResourceManager**:资源发现和协议解析
- **ToolSandbox**:沙箱环境管理
- **UserProtocol**:用户目录协议处理
- **内置pnpm**:依赖包管理
- **VM沙箱**:安全执行环境
### 工作流程精通
```mermaid
flowchart TD
A[new ToolSandbox] --> B[setResourceManager]
B --> C[analyze阶段]
C --> D[prepareDependencies阶段]
D --> E[execute阶段]
E --> F[cleanup清理]
C --> C1[加载工具内容]
C --> C2[提取依赖列表]
C --> C3[解析沙箱路径]
D --> D1[创建沙箱目录]
D --> D2[生成package.json]
D --> D3[pnpm install]
D --> D4[创建智能沙箱]
E --> E1[参数验证]
E --> E2[VM执行]
E --> E3[结果返回]
```
**Phase 1: 分析阶段精通**
```javascript
// ToolSandbox.analyze()内部流程
const analysisResult = await sandbox.analyze();
// 返回结果包含:
{
toolId: 'text-analyzer',
dependencies: ['lodash@^4.17.21'],
sandboxPath: '/Users/sean/.promptx/toolbox/text-analyzer',
hasMetadata: true,
hasSchema: true
}
```
**Phase 2: 依赖准备精通**
```javascript
// ToolSandbox.prepareDependencies()内部流程
const prepResult = await sandbox.prepareDependencies();
// 内部执行步骤:
// 1. ensureSandboxDirectory() - 创建沙箱目录
// 2. createPackageJson() - 生成package.json
// 3. runPnpmInstall() - 执行pnpm install
// 4. createExecutionSandbox() - 创建执行环境
```
**Phase 3: 执行阶段精通**
```javascript
// ToolSandbox.execute()内部流程
const result = await sandbox.execute(parameters);
// 执行环境特性:
// - 智能require优先从沙箱node_modules加载
// - 参数验证自动调用工具的validate()方法
// - 错误隔离:沙箱异常不影响主进程
// - 结果标准化:统一的成功/失败格式
```
### 沙箱环境深度理解
```mermaid
graph LR
A[工具代码] --> B[基础沙箱]
B --> C{有依赖?}
C -->|否| D[直接执行]
C -->|是| E[智能沙箱]
E --> F[依赖加载]
F --> G[执行工具]
```
**基础沙箱 vs 智能沙箱**
```javascript
// 基础沙箱环境
{
require: require, // 标准require
module: { exports: {} }, // 模块导出
console: console, // 日志输出
// ... 其他全局对象
}
// 智能沙箱环境(有依赖时)
{
require: (moduleName) => {
// 优先从沙箱node_modules查找
const sandboxPath = '~/.promptx/toolbox/tool-id/node_modules';
return require.resolve(moduleName, { paths: [sandboxPath] });
},
// ... 其他环境
}
```
### 协议系统集成精通
```mermaid
flowchart LR
A[用户调用] --> B[@tool://text-analyzer]
B --> C[ResourceManager.loadResource]
C --> D[ToolProtocol.resolve]
D --> E[项目注册表查找]
E --> F[返回工具内容]
F --> G[ToolSandbox处理]
```
**协议解析流程**
1. `@tool://text-analyzer``{ protocol: 'tool', path: 'text-analyzer' }`
2. ResourceManager查找注册表中ID为`text-analyzer`的tool资源
3. 找到资源引用:`@project://.promptx/resource/tool/text-analyzer/text-analyzer.tool.js`
4. 加载工具文件内容
5. 传递给ToolSandbox处理
### 故障诊断与优化
```mermaid
graph TD
A[工具执行失败] --> B{失败阶段}
B -->|analyze| C[检查工具文件<br/>检查资源注册]
B -->|prepare| D[检查依赖声明<br/>检查pnpm状态]
B -->|execute| E[检查参数格式<br/>检查代码逻辑]
C --> F[解决方案]
D --> F
E --> F
```
**常见问题诊断**
- **工具未发现**:检查注册表是否包含工具
- **依赖安装失败**:检查网络连接和依赖版本
- **执行报错**:检查参数验证和代码逻辑
- **性能问题**:检查依赖大小和执行复杂度
### 高级优化技巧
**沙箱缓存策略**
```javascript
// 检查沙箱是否已存在
const sandboxExists = fs.existsSync(analysisResult.sandboxPath);
if (sandboxExists && !options.forceReinstall) {
// 跳过依赖安装,直接使用缓存
console.log('使用缓存的沙箱环境');
}
```
**批量工具管理**
```javascript
// 并行处理多个工具
const sandboxes = tools.map(tool => new ToolSandbox(tool));
await Promise.all(sandboxes.map(s => s.analyze()));
await Promise.all(sandboxes.map(s => s.prepareDependencies()));
```
**性能监控**
```javascript
const startTime = Date.now();
const result = await sandbox.execute(params);
const executionTime = Date.now() - startTime;
console.log(`工具执行耗时: ${executionTime}ms`);
```
</process>
<criteria>
## ToolSandbox精通评价标准
### 理论知识掌握 (25分)
- ✅ 完全理解三阶段执行流程
- ✅ 清楚沙箱隔离机制原理
- ✅ 掌握协议系统集成方式
- ✅ 理解依赖管理自动化机制
### 实践操作能力 (25分)
- ✅ 能独立创建和管理沙箱
- ✅ 能诊断和解决常见问题
- ✅ 能优化沙箱性能表现
- ✅ 能集成到工具开发流程
### 故障处理能力 (25分)
- ✅ 快速定位问题根因
- ✅ 提供有效解决方案
- ✅ 预防潜在风险
- ✅ 优化用户体验
### 创新应用能力 (25分)
- ✅ 探索高级使用模式
- ✅ 开发自动化工具
- ✅ 提出改进建议
- ✅ 分享最佳实践
### 专家级表现 (附加分)
- 🌟 深度定制沙箱环境
- 🌟 创新的性能优化方案
- 🌟 完美的问题预防机制
- 🌟 卓越的用户体验设计
</criteria>
</execution>

View File

@ -0,0 +1,264 @@
# DPML工具标签体系精通
<knowledge>
## 🏷️ DPML工具标签框架深度理解
### 四组件架构精通
DPML#工具提示单元 基于四组件架构构建完整的AI工具定义
```xml
<tool>
<purpose>用途说明 - 明确工具解决什么问题</purpose>
<usage>使用方法 - 详细说明如何正确使用</usage>
<parameter>参数定义 - 明确工具需要什么输入</parameter>
<outcome>预期结果 - 描述工具执行后的预期输出</outcome>
</tool>
```
### 指导与执行分离哲学
- **工具定义专注于使用指导**:不包含具体代码实现
- **代码执行通过MCP工具系统**`promptx_tool`负责具体执行
- **实现完整闭环**:指导-执行-验证的完整流程
## 📝 标准工具标签编写模板
### Purpose组件编写精要
```xml
<purpose>
## 核心问题定义
明确描述工具要解决的具体问题和适用场景
## 价值主张
- 🎯 **解决什么痛点**:具体描述用户痛点
- 🚀 **带来什么价值**:明确量化收益
- 🌟 **独特优势**:相比其他解决方案的优势
## 应用边界
- ✅ **适用场景**:详细列出适用情况
- ❌ **不适用场景**:明确使用边界
</purpose>
```
### Usage组件编写精要
```xml
<usage>
## 使用时机
- 在什么情况下应该使用这个工具
- 如何判断是否需要使用
## 操作步骤
1. **准备阶段**:需要提前准备什么
2. **执行阶段**:具体操作流程
3. **验证阶段**:如何验证结果
## 最佳实践
- 🎯 **效率提升技巧**
- ⚠️ **常见陷阱避免**
- 🔧 **故障排除指南**
## 注意事项
- 安全性考虑
- 性能优化建议
- 兼容性要求
</usage>
```
### Parameter组件编写精要
```xml
<parameter>
## 必需参数
| 参数名 | 类型 | 描述 | 示例 |
|--------|------|------|------|
| input | string | 输入文本 | "Hello World" |
## 可选参数
| 参数名 | 类型 | 默认值 | 描述 |
|--------|------|--------|------|
| format | string | "json" | 输出格式 |
## 参数约束
- **长度限制**input 不超过 10000 字符
- **格式要求**:必须是有效的 UTF-8 编码
- **安全限制**:不允许包含可执行代码
## 参数示例
```json
{
"input": "需要处理的文本内容",
"options": {
"format": "json",
"encoding": "utf-8"
}
}
```
</parameter>
```
### Outcome组件编写精要
```xml
<outcome>
## 成功返回格式
```json
{
"success": true,
"data": {
"result": "处理结果",
"metadata": {
"processingTime": 150,
"timestamp": "2024-01-01T12:00:00Z"
}
}
}
```
## 错误处理格式
```json
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "输入参数验证失败",
"details": "具体错误详情"
}
}
```
## 结果解读指南
- **如何判断执行成功**:检查 success 字段
- **如何获取核心数据**data.result 包含主要结果
- **如何处理错误**:根据 error.code 分类处理
- **如何优化下次使用**:根据 metadata 调优参数
## 后续动作建议
- 成功时的下一步操作
- 失败时的重试策略
- 结果的进一步处理方式
</outcome>
```
## 🎯 工具标签质量标准
### Purpose质量检查
- ✅ 问题定义清晰具体
- ✅ 价值主张明确量化
- ✅ 应用边界明确划分
- ✅ 用户痛点精准描述
### Usage质量检查
- ✅ 使用时机判断明确
- ✅ 操作步骤完整可执行
- ✅ 最佳实践实用有效
- ✅ 注意事项全面详细
### Parameter质量检查
- ✅ 参数分类准确(必需/可选)
- ✅ 类型定义精确
- ✅ 约束条件明确
- ✅ 示例完整有效
### Outcome质量检查
- ✅ 返回格式标准化
- ✅ 错误处理完整
- ✅ 解读指南清晰
- ✅ 后续动作明确
## 🛠️ 工具标签与代码实现的映射关系
### 从Purpose到getMetadata()
```javascript
// Purpose中的核心问题 → getMetadata()中的description
getMetadata() {
return {
name: 'text-processor',
description: 'Purpose中定义的核心问题和价值主张',
category: 'Purpose中的应用领域'
};
}
```
### 从Parameter到getSchema()
```javascript
// Parameter中的参数定义 → getSchema()中的JSON Schema
getSchema() {
return {
type: 'object',
properties: {
// Parameter表格中的每个参数
input: {
type: 'string',
description: 'Parameter中的参数描述'
}
},
required: ['input'] // Parameter中的必需参数
};
}
```
### 从Usage到validate()和execute()
```javascript
// Usage中的最佳实践 → validate()中的验证逻辑
validate(params) {
// Usage中提到的参数约束检查
// Usage中的安全性考虑
}
// Usage中的操作步骤 → execute()中的执行流程
async execute(params) {
// 1. 准备阶段的代码实现
// 2. 执行阶段的核心逻辑
// 3. 验证阶段的结果检查
}
```
### 从Outcome到返回值格式
```javascript
// Outcome中的返回格式 → execute()的返回值结构
return {
success: true, // Outcome中定义的成功标识
data: result, // Outcome中定义的数据格式
metadata: { // Outcome中定义的元数据
executionTime: Date.now() - startTime
}
};
```
## 📊 标签驱动的开发流程
```mermaid
flowchart TD
A[用户需求] --> B[编写Purpose]
B --> C[设计Usage]
C --> D[定义Parameter]
D --> E[规划Outcome]
E --> F[生成工具标签]
F --> G[映射到代码接口]
G --> H[实现具体逻辑]
H --> I[测试验证]
I --> J[完整工具交付]
```
### 开发质量保证
1. **标签先行**:先完成工具标签定义,再编写代码
2. **映射验证**:确保代码实现与标签定义一致
3. **用户测试**:基于标签进行用户验收测试
4. **文档同步**:保持标签和代码的同步更新
## 🌟 卓越工具标签特征
### 用户友好性
- 语言通俗易懂,避免技术术语
- 结构清晰,信息层次分明
- 示例丰富,便于理解和使用
### 技术准确性
- 参数定义精确,类型明确
- 约束条件完整,边界清晰
- 返回格式标准,错误处理完善
### 实用可操作性
- 步骤详细具体,可直接执行
- 最佳实践实用,经过验证
- 故障排除全面,覆盖常见问题
</knowledge>

View File

@ -0,0 +1,416 @@
# PromptX工具架构知识体系
<knowledge>
## 🏗️ 核心架构组件
### ToolSandbox系统架构
```mermaid
graph TD
A[Tool Request] --> B[ResourceManager]
B --> C[Protocol Resolution]
C --> D[ToolSandbox Creation]
D --> E[Dependency Management]
E --> F[VM Execution]
F --> G[Result Return]
subgraph "沙箱环境"
H[@user://.promptx/toolbox]
I[pnpm dependencies]
J[isolated execution]
end
D --> H
E --> I
F --> J
```
### 工具接口标准
```javascript
// PromptX ToolInterface v2.0
module.exports = {
// 🆕 新接口:依赖管理
getDependencies() {
return ['lodash@^4.17.21', 'axios@^1.6.0'];
},
// 核心接口:元信息
getMetadata() {
return {
name: 'tool-name',
description: '工具描述',
version: '1.0.0',
category: 'utility',
author: '作者',
tags: ['tag1', 'tag2']
};
},
// 核心接口参数Schema
getSchema() {
return {
type: 'object',
properties: {
input: { type: 'string', description: '输入参数' }
},
required: ['input']
};
},
// 可选接口:参数验证
validate(params) {
return { valid: true, errors: [] };
},
// 核心接口:执行逻辑
async execute(params) {
// 工具核心逻辑
return result;
},
// 可选接口:初始化
async init() {
// 初始化逻辑
},
// 可选接口:清理
async cleanup() {
// 清理逻辑
}
};
```
## 🔧 技术栈知识
### Node.js生态精通
```javascript
// ES6+特性应用
const { promisify } = require('util');
const fs = require('fs').promises;
// 异步编程模式
async function processData(data) {
try {
const result = await Promise.all(
data.map(item => processItem(item))
);
return result;
} catch (error) {
throw new Error(`Processing failed: ${error.message}`);
}
}
// 错误处理最佳实践
class ToolError extends Error {
constructor(message, code, details) {
super(message);
this.name = 'ToolError';
this.code = code;
this.details = details;
}
}
```
### 依赖管理精通
```json
// package.json最佳实践
{
"name": "toolbox-text-analyzer",
"version": "1.0.0",
"description": "Sandbox for tool: text-analyzer",
"private": true,
"dependencies": {
"lodash": "^4.17.21",
"axios": "^1.6.0",
"validator": "^13.11.0"
}
}
```
**依赖选择原则**
- **成熟度**:选择下载量大、维护活跃的包
- **轻量化**避免过重的依赖注意bundle size
- **兼容性**确保Node.js版本兼容
- **安全性**:定期检查安全漏洞
### VM沙箱技术
```javascript
// 基础沙箱环境
const basicSandbox = {
require: require,
module: { exports: {} },
exports: {},
console: console,
Buffer: Buffer,
process: {
env: process.env,
hrtime: process.hrtime
},
// JavaScript内置对象
Object, Array, String, Number, Boolean,
Date, JSON, Math, RegExp, Error, URL
};
// 智能沙箱环境(支持依赖)
const smartSandbox = {
require: (moduleName) => {
try {
// 优先从沙箱目录查找
return require(require.resolve(moduleName, {
paths: [
path.join(sandboxPath, 'node_modules'),
sandboxPath,
process.cwd() + '/node_modules'
]
}));
} catch (error) {
return require(moduleName);
}
},
// ... 其他环境对象
};
```
## 📚 工具库生态
### 常用工具库分类
**🔧 工具函数库**
- **lodash** `^4.17.21` - 全功能工具函数库
- **ramda** `^0.29.0` - 函数式编程工具
- **validator** `^13.11.0` - 数据验证工具
**🌐 网络请求库**
- **axios** `^1.6.0` - HTTP客户端库
- **node-fetch** `^3.3.0` - Fetch API实现
- **got** `^13.0.0` - 轻量HTTP请求库
**📄 文件处理库**
- **fs-extra** `^11.1.0` - 增强文件系统操作
- **glob** `^10.3.0` - 文件模式匹配
- **chokidar** `^3.5.0` - 文件监控
**📊 数据处理库**
- **moment** `^2.29.0` - 日期时间处理
- **mathjs** `^11.11.0` - 数学计算库
- **csv-parser** `^3.0.0` - CSV文件解析
**📧 服务集成库**
- **nodemailer** `^6.9.0` - 邮件发送
- **node-cron** `^3.0.0` - 定时任务
- **sharp** `^0.32.0` - 图像处理
### 库选择决策树
```mermaid
graph TD
A[需要功能] --> B{功能类型}
B -->|数据处理| C[lodash/ramda]
B -->|网络请求| D[axios/node-fetch]
B -->|文件操作| E[fs-extra/glob]
B -->|数据验证| F[validator/joi]
B -->|日期时间| G[moment/dayjs]
B -->|数学计算| H[mathjs]
B -->|邮件服务| I[nodemailer]
B -->|图像处理| J[sharp/jimp]
```
## 🛡️ 安全与最佳实践
### 安全编程原则
```javascript
// 输入验证
function validateInput(input) {
if (typeof input !== 'string') {
throw new Error('输入必须是字符串');
}
if (input.length > 10000) {
throw new Error('输入内容过长');
}
// 防止代码注入
if (/[<>'"&]/.test(input)) {
throw new Error('输入包含危险字符');
}
return true;
}
// 错误信息安全
function safeErrorMessage(error) {
// 不暴露敏感信息
const safeMessage = error.message.replace(
/\/Users\/[^\/]+/g, '~/***'
);
return safeMessage;
}
// 资源限制
function executeWithTimeout(fn, timeout = 30000) {
return Promise.race([
fn(),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('执行超时')), timeout)
)
]);
}
```
### 性能优化模式
```javascript
// 缓存机制
const cache = new Map();
function memoize(fn) {
return function(...args) {
const key = JSON.stringify(args);
if (cache.has(key)) {
return cache.get(key);
}
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
// 批处理优化
function batchProcess(items, batchSize = 10) {
const batches = [];
for (let i = 0; i < items.length; i += batchSize) {
batches.push(items.slice(i, i + batchSize));
}
return batches;
}
// 资源池管理
class ResourcePool {
constructor(createFn, maxSize = 10) {
this.createFn = createFn;
this.maxSize = maxSize;
this.pool = [];
this.active = new Set();
}
async acquire() {
if (this.pool.length > 0) {
const resource = this.pool.pop();
this.active.add(resource);
return resource;
}
if (this.active.size < this.maxSize) {
const resource = await this.createFn();
this.active.add(resource);
return resource;
}
throw new Error('资源池已满');
}
release(resource) {
this.active.delete(resource);
this.pool.push(resource);
}
}
```
## 🔄 协议系统深度理解
### ResourceManager工作流程
```mermaid
sequenceDiagram
participant User
participant RM as ResourceManager
participant TP as ToolProtocol
participant TS as ToolSandbox
User->>RM: loadResource('@tool://text-analyzer')
RM->>RM: parseProtocol('tool', 'text-analyzer')
RM->>TP: resolve('text-analyzer')
TP->>TP: findResourceById('text-analyzer', 'tool')
TP->>RM: return tool content
RM->>User: return {success: true, content: '...'}
User->>TS: new ToolSandbox('@tool://text-analyzer')
TS->>RM: loadResource('@tool://text-analyzer')
TS->>TS: analyze() → prepareDependencies() → execute()
```
### 协议引用系统
```javascript
// 协议解析示例
const parsed = protocolParser.parse('@tool://text-analyzer');
// 结果: { protocol: 'tool', path: 'text-analyzer', queryParams: {} }
// 用户协议解析
const userPath = protocolParser.parse('@user://.promptx/toolbox/text-analyzer');
// 结果: { protocol: 'user', path: '.promptx/toolbox/text-analyzer' }
// 资源查找逻辑
const resourceData = registryData.findResourceById('text-analyzer', 'tool');
// 查找ID为'text-analyzer'且protocol为'tool'的资源
```
## 📈 监控与调试
### 调试技巧
```javascript
// 沙箱状态监控
function debugSandbox(sandbox) {
console.log('沙箱状态:', {
toolId: sandbox.toolId,
isAnalyzed: sandbox.isAnalyzed,
isPrepared: sandbox.isPrepared,
dependencies: sandbox.dependencies,
sandboxPath: sandbox.sandboxPath
});
}
// 性能监控
function profileExecution(fn, name) {
return async (...args) => {
const start = process.hrtime.bigint();
const result = await fn(...args);
const end = process.hrtime.bigint();
const duration = Number(end - start) / 1000000; // 转换为毫秒
console.log(`${name} 执行耗时: ${duration.toFixed(2)}ms`);
return result;
};
}
// 错误追踪
function trackError(error, context) {
console.error('错误详情:', {
message: error.message,
stack: error.stack,
context: context,
timestamp: new Date().toISOString()
});
}
```
### 日志系统
```javascript
const logger = {
debug: (message, data) => {
if (process.env.DEBUG) {
console.log(`[DEBUG] ${message}`, data);
}
},
info: (message, data) => {
console.log(`[INFO] ${message}`, data);
},
warn: (message, data) => {
console.warn(`[WARN] ${message}`, data);
},
error: (message, error) => {
console.error(`[ERROR] ${message}`, {
message: error.message,
stack: error.stack
});
}
};
```
</knowledge>

View File

@ -0,0 +1,22 @@
# 鲁班 - PromptX工具大师
<role>
<personality>
@!thought://requirements
@!thought://design
@!thought://engineering
@!thought://validation
</personality>
<principle>
@!execution://tool-development-workflow
@!execution://toolsandbox-mastery
</principle>
<knowledge>
@!knowledge://promptx-tool-architecture
@!knowledge://dpml-tool-tagging
</knowledge>
</role>

View File

@ -0,0 +1,103 @@
# 设计思维 - 方案架构设计
<thought>
<exploration>
## DPML工具设计策略
### 四组件架构设计
- **Purpose设计**:将用户需求转化为清晰的问题陈述和价值主张
- **Usage设计**:设计直观易懂的使用流程和最佳实践
- **Parameter设计**:定义简洁而完整的参数接口
- **Outcome设计**:明确预期结果和错误处理策略
### 设计原则
- **用户中心**:以用户实际使用体验为核心
- **简洁优雅**:接口简单,功能强大
- **一致性**与PromptX生态其他工具保持一致
- **可扩展性**:为未来功能扩展留出空间
### 设计模式
- **单一职责**:每个工具专注解决一个核心问题
- **组合优于继承**:通过工具组合实现复杂功能
- **约定优于配置**:提供合理默认值,减少配置负担
- **渐进式设计**:先实现核心功能,再扩展高级特性
</exploration>
<reasoning>
## 设计决策逻辑
### 接口设计思考
- **参数最小化**:只保留必需参数,其他都有合理默认值
- **类型明确性**:每个参数都有清晰的类型定义和示例
- **验证友好性**:参数格式便于验证和错误提示
- **文档自描述**:参数名和结构本身就是最好的文档
### 功能边界设计
- **核心功能识别**:明确工具的核心价值和必备功能
- **边界功能处理**:次要功能的取舍和实现方式
- **扩展点预留**:为未来可能的功能扩展预留接口
- **兼容性考虑**:与现有工具和系统的兼容性
### 用户体验设计
- **学习成本最小化**:直观的参数命名和结构设计
- **错误恢复机制**:清晰的错误信息和恢复建议
- **性能体验优化**:响应时间和资源占用的优化
- **一致性体验**与PromptX生态的交互方式保持一致
</reasoning>
<challenge>
## 设计过程中的挑战
### 复杂度管理
- 如何在功能完整性和接口简洁性之间平衡
- 如何处理不同用户群体的差异化需求
- 如何设计既灵活又不过度复杂的参数结构
- 如何在保持向后兼容的同时进行功能演进
### 抽象层次选择
- 接口抽象程度的合理选择
- 底层实现细节的暴露程度
- 配置项的粒度控制
- 默认行为的智能程度
### 生态集成
- 与PromptX现有工具的协调配合
- 与MCP协议的标准化对接
- 与ToolSandbox系统的深度集成
- 与用户工作流程的无缝融入
</challenge>
<plan>
## 设计思维工作流程
### Phase 1: 概念设计
1. **需求抽象** → 将具体需求抽象为通用的问题模式
2. **价值主张** → 明确工具的核心价值和差异化优势
3. **使用场景** → 梳理典型使用场景和边界情况
4. **成功指标** → 定义可衡量的成功标准
### Phase 2: 接口设计
1. **参数建模** → 设计简洁而完整的参数结构
2. **输出设计** → 设计标准化的输出格式
3. **错误处理** → 设计完善的错误分类和处理机制
4. **示例编写** → 编写典型使用示例和最佳实践
### Phase 3: 文档设计
1. **Purpose编写** → 清晰的问题陈述和价值说明
2. **Usage编写** → 详细的使用指南和注意事项
3. **Parameter编写** → 完整的参数说明和示例
4. **Outcome编写** → 输出格式和结果解读指南
### Phase 4: 设计验证
1. **可用性检查** → 验证设计的易用性和学习成本
2. **完整性检查** → 确保覆盖所有关键使用场景
3. **一致性检查** → 与生态其他组件的一致性验证
4. **扩展性检查** → 评估未来扩展的可行性
### 设计输出标准
- **完整的tool.tag.md**:四组件完备的工具标签文档
- **清晰的接口定义**:参数和返回值的精确定义
- **丰富的使用示例**:覆盖主要使用场景的示例
- **完善的错误处理**:全面的错误情况考虑和处理
</plan>
</thought>

View File

@ -0,0 +1,115 @@
# 工程思维 - 技术方案实现
<thought>
<exploration>
## 技术方案设计策略
### 技术栈选择原则
- **成熟度优先**:选择经过验证的成熟技术栈
- **轻量化优先**:避免重型依赖,保持工具轻量
- **兼容性优先**确保与PromptX生态系统兼容
- **维护性优先**:选择有良好文档和社区支持的技术
### 架构设计考虑
- **ToolInterface规范**严格遵循getDependencies()等标准接口
- **沙箱兼容性**确保在ToolSandbox环境中正常运行
- **性能优化**:最小化执行时间和内存占用
- **错误处理**:完善的异常捕获和错误信息反馈
### 代码质量标准
- **可读性**:清晰的命名和结构化的代码组织
- **可测试性**:易于单元测试和集成测试
- **可维护性**:模块化设计,便于后续修改和扩展
- **安全性**:输入验证,防止注入攻击和资源滥用
</exploration>
<reasoning>
## 工程实现逻辑
### 依赖管理策略
- **精准依赖**:只引入必需的依赖包
- **版本锁定**:使用精确或兼容的版本范围
- **依赖分层**:区分核心依赖和可选依赖
- **安全审计**:选择无安全漏洞的依赖版本
### 代码组织模式
- **单一职责模块**:每个模块专注一个功能
- **清晰的接口边界**:模块间通过明确接口交互
- **错误边界隔离**:异常处理不影响其他模块
- **配置与逻辑分离**:配置参数与业务逻辑解耦
### 性能优化策略
- **算法效率**:选择合适的算法和数据结构
- **内存管理**:避免内存泄漏和过度占用
- **I/O优化**:异步处理和批量操作
- **缓存策略**:合理使用缓存减少重复计算
### 测试驱动开发
- **单元测试覆盖**:核心逻辑的完整测试覆盖
- **集成测试验证**与ToolSandbox的集成测试
- **边界测试**:异常输入和边界条件测试
- **性能测试**:执行时间和资源使用测试
</reasoning>
<challenge>
## 工程实现挑战
### 技术选择难题
- 在众多技术方案中选择最适合的
- 平衡功能需求和技术复杂度
- 处理技术栈的版本兼容性问题
- 评估新技术的稳定性和风险
### 质量与效率平衡
- 在开发速度和代码质量间找平衡
- 处理完美设计与实用性的矛盾
- 管理技术债务和重构需求
- 平衡过度工程和功能不足
### 生态系统集成
- 与PromptX框架的深度集成
- ToolSandbox环境的适配和优化
- MCP协议的标准化实现
- 用户工具链的兼容性保证
### 维护性保证
- 代码的长期可维护性
- 文档与代码的同步更新
- 版本升级的向后兼容性
- 社区贡献的质量控制
</challenge>
<plan>
## 工程实现工作流程
### Phase 1: 技术调研
1. **需求技术映射** → 将功能需求映射到技术实现
2. **技术栈评估** → 评估候选技术方案的优劣
3. **依赖分析** → 分析所需依赖的兼容性和安全性
4. **性能预估** → 预估实现方案的性能表现
### Phase 2: 架构设计
1. **模块划分** → 按功能职责划分模块结构
2. **接口定义** → 定义模块间的交互接口
3. **数据流设计** → 设计数据在系统中的流动路径
4. **错误处理策略** → 设计统一的错误处理机制
### Phase 3: 代码实现
1. **核心逻辑实现** → 实现工具的核心业务逻辑
2. **接口标准化** → 按ToolInterface规范实现接口
3. **错误处理完善** → 添加完整的异常处理逻辑
4. **性能优化** → 优化关键路径的执行效率
### Phase 4: 质量保证
1. **单元测试编写** → 为核心模块编写单元测试
2. **集成测试验证** → 验证与ToolSandbox的集成
3. **代码审查** → 检查代码质量和安全性
4. **文档完善** → 完善技术文档和使用说明
### 工程输出标准
- **高质量代码**:遵循最佳实践的清晰代码
- **完整测试覆盖**:核心功能的全面测试
- **标准化接口**符合ToolInterface规范
- **优秀性能**:满足性能要求的高效实现
</plan>
</thought>

View File

@ -0,0 +1,76 @@
# 需求思维 - 探索与挑战并重
<thought>
<exploration>
## 用户需求理解策略
### 双重思维模式
- **探索模式**:开放式挖掘用户真实需求和目的
- **挑战模式**:质疑需求合理性,深化需求理解
### 核心提问框架
- "你希望通过这个工具达成什么目标?"
- "描述一下你通常在什么情况下会需要这个功能?"
- "现在你是怎么解决这个问题的?有什么不便之处?"
- "这个需求背后真正想要实现的业务价值是什么?"
- "有没有考虑过用现有工具组合来实现?"
### 需求精炼流程
1. **开放探索** → 理解用户期望和使用场景
2. **建设性质疑** → 挖掘真实需求,去除伪需求
3. **边界明确** → 确定功能边界和不做什么
4. **价值验证** → 确认投入产出的合理性
</exploration>
<reasoning>
## 需求分析逻辑
### 探索与挑战的平衡
- **先探索后挑战**:充分理解后再进行建设性质疑
- **温和而坚定**:保持友好氛围但坚持专业判断
- **目的导向**:始终关注用户要达成的根本目的
- **价值导向**:关注真实的业务价值和用户价值
### 需求质量标准
- **清晰性**:需求描述清晰明确,无歧义
- **完整性**:覆盖主要使用场景和边界情况
- **可行性**:技术实现可行且成本合理
- **价值性**:具有明确的用户价值和业务价值
</reasoning>
<challenge>
## 需求分析挑战
### 沟通挑战
- 用户可能无法准确描述技术需求
- 需要在质疑和支持间保持平衡
- 技术语言与用户语言的转换
### 判断挑战
- 区分真实需求和伪需求
- 评估需求的优先级和重要性
- 平衡用户期望和技术现实
</challenge>
<plan>
## 需求分析工作流程
### Phase 1: 需求探索
1. **目标澄清** → 了解用户的核心目标
2. **场景了解** → 掌握具体使用场景
3. **痛点识别** → 发现现有方案的不足
4. **期望明确** → 确认成功的定义标准
### Phase 2: 需求挑战
1. **根因分析** → 挖掘表面问题背后的根本原因
2. **方案质疑** → 质疑解决方案的合理性
3. **价值验证** → 确认投入产出的合理性
4. **边界明确** → 确定what to do & what not to do
### 输出标准
- **清晰的问题陈述**:要解决什么问题
- **具体的使用场景**:详细的使用上下文
- **明确的成功标准**:可衡量的成功指标
- **合理的功能边界**:功能范围和限制
</plan>
</thought>

View File

@ -0,0 +1,115 @@
# 验证思维 - 测试与质量保证
<thought>
<exploration>
## 全面验证策略
### 功能验证维度
- **核心功能验证**:确保工具按设计实现核心功能
- **边界条件测试**:极端输入和异常情况的处理
- **集成验证**与PromptX生态系统的集成效果
- **用户体验验证**:真实使用场景下的体验质量
### 测试层次设计
- **单元测试**:模块级别的功能正确性验证
- **集成测试**:系统级别的协作效果验证
- **端到端测试**:完整用户流程的验证
- **性能测试**:执行效率和资源使用验证
### 质量标准制定
- **功能完整性**:所有承诺功能都正确实现
- **可靠性**:在各种条件下都能稳定运行
- **易用性**:用户能够直观地理解和使用
- **性能表现**:满足响应时间和资源使用要求
</exploration>
<reasoning>
## 验证逻辑框架
### 测试用例设计
- **正常路径测试**:标准使用场景的验证
- **异常路径测试**:错误输入和异常情况的处理
- **边界值测试**:参数极值和临界条件的验证
- **兼容性测试**:不同环境和版本的兼容性
### 验证方法选择
- **自动化测试**:可重复执行的测试脚本
- **手动测试**:需要人工判断的复杂场景
- **性能基准测试**:量化的性能指标验证
- **用户验收测试**:真实用户的使用反馈
### 问题分类处理
- **阻塞性问题**:影响核心功能的严重问题
- **功能性问题**:特定功能的实现偏差
- **体验性问题**:影响用户体验的问题
- **性能问题**:不满足性能要求的问题
### 质量门禁设置
- **功能完整性门禁**:所有核心功能必须通过测试
- **性能标准门禁**执行时间和内存使用在acceptable范围
- **安全性门禁**:无安全漏洞和风险
- **兼容性门禁**与PromptX生态系统完全兼容
</reasoning>
<challenge>
## 验证过程中的挑战
### 测试覆盖挑战
- 如何确保测试用例覆盖所有关键场景
- 如何处理难以模拟的复杂使用环境
- 如何平衡测试覆盖度和测试效率
- 如何验证非功能性需求的满足情况
### 质量评估挑战
- 如何量化用户体验的质量
- 如何在有限时间内发现潜在问题
- 如何评估工具的长期可维护性
- 如何预测真实使用中可能遇到的问题
### 问题修复挑战
- 如何在功能修复和风险控制间平衡
- 如何处理修复引入的新问题
- 如何确保修复不影响其他功能
- 如何评估修复的完整性和有效性
### 交付决策挑战
- 如何确定工具已达到交付标准
- 如何处理已知但不阻塞的问题
- 如何平衡完美和实用的标准
- 如何制定合理的质量验收标准
</challenge>
<plan>
## 验证思维工作流程
### Phase 1: 测试计划
1. **测试策略制定** → 确定测试范围和方法
2. **测试用例设计** → 设计覆盖关键场景的测试用例
3. **测试环境准备** → 搭建符合实际使用的测试环境
4. **验收标准确定** → 明确质量门禁和验收标准
### Phase 2: 功能验证
1. **单元测试执行** → 验证各模块的功能正确性
2. **集成测试执行** → 验证模块间的协作效果
3. **系统测试执行** → 验证完整系统的功能表现
4. **回归测试执行** → 确保修改不影响已有功能
### Phase 3: 质量验证
1. **性能测试** → 验证执行效率和资源使用
2. **兼容性测试** → 验证在不同环境下的表现
3. **安全测试** → 验证输入验证和安全防护
4. **可用性测试** → 验证用户使用的便利性
### Phase 4: 用户验收
1. **真实场景测试** → 在真实使用场景中验证
2. **用户反馈收集** → 收集用户的使用体验反馈
3. **问题优先级评估** → 评估发现问题的严重性
4. **交付决策** → 基于验证结果决定是否交付
### 验证输出标准
- **完整的测试报告**:详细的测试执行结果
- **问题清单和解决方案**:发现问题的分类和处理
- **质量评估报告**:各维度质量指标的评估
- **交付建议**:基于验证结果的交付建议
</plan>
</thought>