UNPKG

dpml-prompt

Version:

DPML-powered AI prompt framework - Revolutionary AI-First CLI system based on Deepractice Prompt Markup Language. Build sophisticated AI agents with structured prompts, memory systems, and execution frameworks.

250 lines (210 loc) 6.89 kB
# 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>