From 50cade3feb8112cc547e635f5ef9ab6b3f04cba2 Mon Sep 17 00:00:00 2001 From: sean Date: Wed, 18 Jun 2025 18:52:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0DACP=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E5=8F=91=E9=80=81=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=9C=9F=E5=AE=9E=E5=8F=91=E9=80=81=E4=B8=8EDemo?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=EF=BC=8C=E5=A2=9E=E5=BC=BA=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=E7=9A=84=E9=85=8D=E7=BD=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=92=8C=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prompt/core/dacp-email-sending.execution.md | 156 +++++++++ prompt/domain/assistant/assistant.role.md | 1 + .../dacp-promptx-service/actions/email.js | 102 +++++- src/dacp/dacp-promptx-service/package.json | 7 +- src/lib/utils/DACPConfigManager.js | 207 ++++++++++++ src/package.registry.json | 301 +++++++++--------- 6 files changed, 623 insertions(+), 151 deletions(-) create mode 100644 prompt/core/dacp-email-sending.execution.md create mode 100644 src/lib/utils/DACPConfigManager.js diff --git a/prompt/core/dacp-email-sending.execution.md b/prompt/core/dacp-email-sending.execution.md new file mode 100644 index 0000000..85157d8 --- /dev/null +++ b/prompt/core/dacp-email-sending.execution.md @@ -0,0 +1,156 @@ + + + ## 技术和环境限制 + - **配置依赖性**:真实发送需要用户在~/.promptx/dacp/send_email.json配置邮箱信息 + - **服务可用性**:需要DACP服务运行在localhost:3002或指定端口 + - **网络连接要求**:发送真实邮件需要稳定的网络连接和SMTP服务可达性 + - **邮件服务商限制**:不同服务商有发送频率和内容限制 + - **协议格式约束**:必须符合DACP协议标准的请求格式 + + + + ## 强制执行规则 + - **服务ID固定**:必须使用"dacp-promptx-service"作为service_id + - **action名称固定**:必须使用"send_email"作为action + - **必需参数验证**:user_request是必需参数,不能为空 + - **配置错误处理**:配置缺失或无效时必须向用户说明具体解决方案 + - **安全信息保护**:不得在日志或响应中暴露用户的邮箱密码 + + + + ## 使用指导原则 + - **智能需求解析**:从用户自然语言中提取收件人、主题、内容等信息 + - **上下文感知**:根据urgency、recipient_type等上下文调整邮件语气 + - **友好降级**:无配置时自动使用Demo模式,同时提供配置指导 + - **错误信息友好化**:将技术错误转化为用户可理解的解决建议 + + + + ## 邮件发送执行流程 + + ### Step 1: 需求分析和参数准备 + ``` + 1. 解析用户输入,提取邮件要素(收件人、主题、内容) + 2. 确定邮件类型和紧急程度 + 3. 构造user_request自然语言描述 + 4. 准备context上下文信息 + 5. 验证所有必需参数完整性 + ``` + + ### Step 2: DACP服务调用 + ```json + // 标准DACP邮件请求格式 + { + "service_id": "dacp-promptx-service", + "action": "send_email", + "parameters": { + "user_request": "用户的自然语言邮件描述", + "context": { + "urgency": "high|medium|low", + "recipient_type": "colleague|superior|client" + } + } + } + ``` + + ### Step 3: 配置文件格式要求 + ```json + // ~/.promptx/dacp/send_email.json 配置文件格式 + { + "provider": "gmail|outlook|qq|163|126", + "smtp": { + "user": "your-email@gmail.com", + "password": "your-app-password" + }, + "sender": { + "name": "Your Name", + "email": "your-email@gmail.com" + } + } + ``` + + ### Step 4: 结果处理和用户反馈 + ``` + 1. 检查响应状态和demo_mode字段 + 2. Demo模式:提供配置指导和创建配置文件的详细说明 + 3. 真实发送:确认发送成功并显示message_id + 4. 错误处理:解析错误原因并提供具体解决方案 + 5. 向用户反馈执行结果和后续建议 + ``` + + ### 配置错误处理流程 + ``` + 配置缺失 → 显示配置文件路径和格式 → 指导创建配置 + 配置无效 → 指出具体错误字段 → 提供修复建议 + 认证失败 → 检查密码和服务器设置 → 应用专用密码指导 + 发送失败 → 网络和SMTP检查 → 故障排除建议 + ``` + + ### 邮件服务商配置指导 + ``` + Gmail: 需要启用两步验证并生成应用专用密码 + Outlook: 使用账户密码,确保SMTP已启用 + QQ/163/126: 需要开启SMTP服务并使用授权码 + ``` + + ### 配置指导详细说明 + ``` + 📧 DACP邮件服务配置说明 + + 📍 配置文件位置:~/.promptx/dacp/send_email.json + + 📝 完整配置示例: + { + "provider": "gmail", + "smtp": { + "user": "your-email@gmail.com", + "password": "your-app-password" + }, + "sender": { + "name": "Your Name", + "email": "your-email@gmail.com" + } + } + + 💡 支持的邮件服务商:gmail, outlook, qq, 163, 126 + + 🔐 Gmail用户专用设置: + 1. 进入 Google 账户设置 + 2. 启用两步验证 + 3. 生成应用专用密码 + 4. 使用生成的密码替换 "your-app-password" + + 📞 其他服务商设置: + - Outlook: 直接使用账户密码 + - QQ/163/126: 需要开启SMTP服务并使用授权码 + ``` + + + + ## 邮件发送质量评价标准 + + ### 功能完整性 + - ✅ 正确调用DACP邮件服务 + - ✅ 准确解析用户邮件需求 + - ✅ 妥善处理配置和发送异常 + - ✅ 提供完整的配置指导 + + ### 用户体验质量 + - ✅ 自然语言交互流畅 + - ✅ 错误提示友好明确 + - ✅ 配置指导详细实用 + - ✅ Demo模式平滑降级 + + ### 安全合规性 + - ✅ 不暴露敏感配置信息 + - ✅ 遵循邮件发送最佳实践 + - ✅ 用户级配置安全存储 + - ✅ 符合反垃圾邮件规范 + + ### 系统稳定性 + - ✅ 配置缺失时不影响系统运行 + - ✅ 合理的错误处理和重试机制 + - ✅ 完整的执行反馈和日志记录 + - ✅ 多邮件服务商兼容支持 + + \ No newline at end of file diff --git a/prompt/domain/assistant/assistant.role.md b/prompt/domain/assistant/assistant.role.md index e4715f6..c0b059c 100644 --- a/prompt/domain/assistant/assistant.role.md +++ b/prompt/domain/assistant/assistant.role.md @@ -9,5 +9,6 @@ @!execution://assistant @!execution://dacp-service-calling + @!execution://dacp-email-sending \ No newline at end of file diff --git a/src/dacp/dacp-promptx-service/actions/email.js b/src/dacp/dacp-promptx-service/actions/email.js index 1937b5d..3df22af 100644 --- a/src/dacp/dacp-promptx-service/actions/email.js +++ b/src/dacp/dacp-promptx-service/actions/email.js @@ -1,8 +1,11 @@ /** * Email Action Module for DACP PromptX Service - * 提供邮件发送功能 + * 提供邮件发送功能 - 支持Demo模式和真实发送 */ +const nodemailer = require('nodemailer') +const DACPConfigManager = require('../../../lib/utils/DACPConfigManager') + // Email action handler async function send_email(parameters) { const { user_request, context = {} } = parameters; @@ -124,7 +127,39 @@ function validateEmailData(emailData) { // 执行邮件发送 async function executeSendEmail(emailData, context) { - // Demo模式:模拟发送 + const configManager = new DACPConfigManager() + + // 检查是否有用户配置 + const hasConfig = await configManager.hasActionConfig('send_email') + + if (!hasConfig) { + // 无配置,回退到Demo模式 + return await executeDemoSendEmail(emailData, context) + } + + // 读取配置 + const config = await configManager.readActionConfig('send_email') + + // 验证配置 + const validation = configManager.validateEmailConfig(config) + if (!validation.valid) { + // 配置无效,抛出友好错误 + const errorMessage = configManager.generateConfigErrorMessage('send_email', validation) + throw new Error(errorMessage) + } + + try { + // 真实邮件发送 + return await executeRealSendEmail(emailData, config, context) + } catch (error) { + // 发送失败,提供友好提示 + console.error('邮件发送失败:', error.message) + throw new Error(`\n📧 邮件发送失败\n\n❌ 错误信息: ${error.message}\n\n💡 可能的解决方案:\n • 检查邮箱密码是否正确\n • 确认已启用SMTP服务\n • 验证网络连接状态\n • Gmail用户确保使用应用专用密码\n`) + } +} + +// Demo模式发送 +async function executeDemoSendEmail(emailData, context) { console.log('📧 [DACP Demo] Simulating email send:'); console.log(` To: ${emailData.to}`); console.log(` Subject: ${emailData.subject}`); @@ -133,15 +168,19 @@ async function executeSendEmail(emailData, context) { // 模拟网络延迟 await new Promise(resolve => setTimeout(resolve, 100)); + const configManager = new DACPConfigManager() + const configHint = configManager.generateConfigErrorMessage('send_email') + return { - message_id: `msg_${Date.now()}`, - status: 'sent', + message_id: `demo_msg_${Date.now()}`, + status: 'demo_sent', recipient: emailData.to, subject: emailData.subject, body: emailData.body, sent_at: emailData.timestamp, urgency: emailData.urgency, demo_mode: true, + config_hint: configHint, execution_metrics: { parsing_time: '10ms', validation_time: '5ms', @@ -150,6 +189,61 @@ async function executeSendEmail(emailData, context) { }; } +// 真实邮件发送 +async function executeRealSendEmail(emailData, config, context) { + const startTime = Date.now() + + // 获取提供商配置 + const configManager = new DACPConfigManager() + const providerConfig = configManager.getProviderConfig(config.provider) + + if (!providerConfig) { + throw new Error(`不支持的邮件服务提供商: ${config.provider}`) + } + + // 创建邮件传输器 + const transporter = nodemailer.createTransport({ + host: providerConfig.smtp, + port: providerConfig.port, + secure: providerConfig.secure, + auth: { + user: config.smtp.user, + pass: config.smtp.password + } + }) + + // 构建邮件选项 + const mailOptions = { + from: `"${config.sender.name}" <${config.sender.email}>`, + to: emailData.to, + subject: emailData.subject, + html: emailData.body.replace(/\n/g, '
'), + text: emailData.body + } + + // 发送邮件 + const info = await transporter.sendMail(mailOptions) + const endTime = Date.now() + + return { + message_id: info.messageId, + status: 'sent', + recipient: emailData.to, + subject: emailData.subject, + body: emailData.body, + sent_at: new Date().toISOString(), + urgency: emailData.urgency, + demo_mode: false, + provider: config.provider, + smtp_response: info.response, + execution_metrics: { + parsing_time: '10ms', + validation_time: '5ms', + sending_time: `${endTime - startTime}ms` + } + } +} + // 导出所有email相关的actions module.exports = { send_email diff --git a/src/dacp/dacp-promptx-service/package.json b/src/dacp/dacp-promptx-service/package.json index 9aa5bb1..fc6ae3b 100644 --- a/src/dacp/dacp-promptx-service/package.json +++ b/src/dacp/dacp-promptx-service/package.json @@ -9,13 +9,14 @@ "test": "jest" }, "dependencies": { - "express": "^4.18.2", "body-parser": "^1.20.2", "cors": "^2.8.5", - "joi": "^17.11.0" + "express": "^4.18.2", + "joi": "^17.11.0", + "nodemailer": "^7.0.3" }, "devDependencies": { "jest": "^29.7.0", "supertest": "^6.3.3" } -} \ No newline at end of file +} diff --git a/src/lib/utils/DACPConfigManager.js b/src/lib/utils/DACPConfigManager.js new file mode 100644 index 0000000..9a5cc31 --- /dev/null +++ b/src/lib/utils/DACPConfigManager.js @@ -0,0 +1,207 @@ +const fs = require('fs-extra') +const path = require('path') +const os = require('os') + +/** + * DACP用户级配置管理器 + * 管理 ~/.promptx/dacp/ 下的配置文件 + */ +class DACPConfigManager { + constructor() { + this.userHome = os.homedir() + this.dacpConfigDir = path.join(this.userHome, '.promptx', 'dacp') + } + + /** + * 确保DACP配置目录存在 + */ + async ensureConfigDir() { + await fs.ensureDir(this.dacpConfigDir) + } + + /** + * 获取指定action的配置文件路径 + * @param {string} action - action名称,如 'send_email' + * @returns {string} 配置文件完整路径 + */ + getConfigPath(action) { + return path.join(this.dacpConfigDir, `${action}.json`) + } + + /** + * 读取action配置 + * @param {string} action - action名称 + * @returns {Promise} 配置对象或null + */ + async readActionConfig(action) { + const configPath = this.getConfigPath(action) + + try { + if (await fs.pathExists(configPath)) { + return await fs.readJson(configPath) + } + return null + } catch (error) { + console.warn(`读取DACP配置失败 ${action}:`, error.message) + return null + } + } + + /** + * 写入action配置 + * @param {string} action - action名称 + * @param {Object} config - 配置对象 + */ + async writeActionConfig(action, config) { + await this.ensureConfigDir() + const configPath = this.getConfigPath(action) + await fs.writeJson(configPath, config, { spaces: 2 }) + } + + /** + * 检查action配置是否存在 + * @param {string} action - action名称 + * @returns {Promise} + */ + async hasActionConfig(action) { + const configPath = this.getConfigPath(action) + return await fs.pathExists(configPath) + } + + /** + * 验证邮件配置 + * @param {Object} config - 邮件配置对象 + * @returns {Object} 验证结果 {valid: boolean, errors: string[]} + */ + validateEmailConfig(config) { + const errors = [] + + if (!config) { + errors.push('配置对象不能为空') + return { valid: false, errors } + } + + // 验证provider + if (!config.provider) { + errors.push('缺少邮件服务提供商(provider)配置') + } + + // 验证SMTP配置 + if (!config.smtp) { + errors.push('缺少SMTP配置') + } else { + if (!config.smtp.user) { + errors.push('缺少SMTP用户名(smtp.user)') + } + if (!config.smtp.password) { + errors.push('缺少SMTP密码(smtp.password)') + } + } + + // 验证发件人配置 + if (!config.sender) { + errors.push('缺少发件人配置(sender)') + } else { + if (!config.sender.email) { + errors.push('缺少发件人邮箱(sender.email)') + } + if (!config.sender.name) { + errors.push('缺少发件人姓名(sender.name)') + } + } + + return { + valid: errors.length === 0, + errors + } + } + + /** + * 获取邮件服务提供商配置 + * @param {string} provider - 提供商名称 + * @returns {Object} 提供商配置 + */ + getProviderConfig(provider) { + const providers = { + gmail: { + smtp: 'smtp.gmail.com', + port: 587, + secure: false, + requireAuth: true + }, + outlook: { + smtp: 'smtp-mail.outlook.com', + port: 587, + secure: false, + requireAuth: true + }, + qq: { + smtp: 'smtp.qq.com', + port: 465, + secure: true, + requireAuth: true + }, + '163': { + smtp: 'smtp.163.com', + port: 465, + secure: true, + requireAuth: true + }, + '126': { + smtp: 'smtp.126.com', + port: 465, + secure: true, + requireAuth: true + } + } + + return providers[provider] || null + } + + /** + * 生成配置错误提示信息 + * @param {string} action - action名称 + * @param {Object} validation - 验证结果 + * @returns {string} 错误提示信息 + */ + generateConfigErrorMessage(action, validation = null) { + const configPath = this.getConfigPath(action) + + let message = `\n📧 DACP邮件服务配置缺失\n\n` + + if (!validation) { + // 配置文件不存在 + message += `❌ 配置文件不存在: ${configPath}\n\n` + message += `📝 请创建配置文件,内容如下:\n\n` + message += `{\n` + message += ` "provider": "gmail",\n` + message += ` "smtp": {\n` + message += ` "user": "your-email@gmail.com",\n` + message += ` "password": "your-app-password"\n` + message += ` },\n` + message += ` "sender": {\n` + message += ` "name": "Your Name",\n` + message += ` "email": "your-email@gmail.com"\n` + message += ` }\n` + message += `}\n\n` + message += `💡 支持的邮件服务商: gmail, outlook, qq, 163, 126\n\n` + message += `🔐 Gmail用户需要使用应用专用密码:\n` + message += ` 1. 进入 Google 账户设置\n` + message += ` 2. 启用两步验证\n` + message += ` 3. 生成应用专用密码\n` + message += ` 4. 使用生成的密码替换上面的 "your-app-password"\n` + } else { + // 配置不完整 + message += `❌ 配置文件存在但不完整: ${configPath}\n\n` + message += `缺少以下配置项:\n` + validation.errors.forEach(error => { + message += ` • ${error}\n` + }) + message += `\n请检查并完善配置文件。\n` + } + + return message + } +} + +module.exports = DACPConfigManager \ No newline at end of file diff --git a/src/package.registry.json b/src/package.registry.json index 49b1d86..c7056fd 100644 --- a/src/package.registry.json +++ b/src/package.registry.json @@ -4,9 +4,9 @@ "metadata": { "version": "2.0.0", "description": "package 级资源注册表", - "createdAt": "2025-06-18T09:27:19.817Z", - "updatedAt": "2025-06-18T09:27:19.821Z", - "resourceCount": 46 + "createdAt": "2025-06-18T10:00:59.258Z", + "updatedAt": "2025-06-18T10:00:59.263Z", + "resourceCount": 47 }, "resources": [ { @@ -17,9 +17,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/assistant/assistant.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.818Z", - "updatedAt": "2025-06-18T09:27:19.818Z", - "scannedAt": "2025-06-18T09:27:19.818Z" + "createdAt": "2025-06-18T10:00:59.259Z", + "updatedAt": "2025-06-18T10:00:59.259Z", + "scannedAt": "2025-06-18T10:00:59.259Z" } }, { @@ -30,9 +30,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/assistant/thought/assistant.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -43,9 +43,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/assistant/execution/assistant.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -56,9 +56,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/frontend-developer/frontend-developer.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -69,9 +69,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/frontend-developer/thought/frontend-developer.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -82,9 +82,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/java-backend-developer/execution/code-quality.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -95,9 +95,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/frontend-developer/execution/frontend-developer.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -108,9 +108,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/frontend-developer/execution/technical-architecture.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -121,9 +121,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/frontend-developer/execution/user-experience.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -134,9 +134,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/frontend-developer/execution/wechat-miniprogram-development.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -147,9 +147,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/java-backend-developer/java-backend-developer.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -160,9 +160,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/java-backend-developer/thought/java-backend-developer.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -173,9 +173,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/java-backend-developer/execution/database-design.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -186,9 +186,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/java-backend-developer/execution/java-backend-developer.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -199,9 +199,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/java-backend-developer/execution/spring-ecosystem.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -212,9 +212,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/java-backend-developer/execution/system-architecture.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.819Z", - "updatedAt": "2025-06-18T09:27:19.819Z", - "scannedAt": "2025-06-18T09:27:19.819Z" + "createdAt": "2025-06-18T10:00:59.260Z", + "updatedAt": "2025-06-18T10:00:59.260Z", + "scannedAt": "2025-06-18T10:00:59.260Z" } }, { @@ -225,9 +225,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/nuwa/nuwa.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -238,9 +238,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/nuwa/thought/role-creation.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -251,9 +251,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/nuwa/execution/dpml-authoring.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -264,9 +264,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/nuwa/execution/role-design-patterns.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -277,9 +277,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/nuwa/execution/role-generation.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -290,9 +290,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/nuwa/execution/visualization-enhancement.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -303,9 +303,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/product-manager/product-manager.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.261Z", + "updatedAt": "2025-06-18T10:00:59.261Z", + "scannedAt": "2025-06-18T10:00:59.261Z" } }, { @@ -316,9 +316,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/product-manager/thought/product-manager.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -329,9 +329,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/product-manager/execution/market-analysis.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -342,9 +342,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/product-manager/execution/product-manager.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -355,9 +355,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/product-manager/execution/user-research.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -368,9 +368,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/sean/sean.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -381,9 +381,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/sean/thought/sean.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -394,9 +394,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/sean/execution/sean-decision-framework.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -407,9 +407,9 @@ "description": "专业角色,提供特定领域的专业能力", "reference": "@package://prompt/domain/xiaohongshu-marketer/xiaohongshu-marketer.role.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -420,9 +420,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/domain/xiaohongshu-marketer/thought/xiaohongshu-marketer.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -433,9 +433,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/brand-marketing.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -446,9 +446,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/community-building.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -459,9 +459,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/content-creation.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -472,9 +472,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/content-optimization.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -485,9 +485,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/data-analytics.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -498,9 +498,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/ecommerce-conversion.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -511,9 +511,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/performance-optimization.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -524,9 +524,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/platform-compliance.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -537,9 +537,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/team-collaboration.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.820Z", - "updatedAt": "2025-06-18T09:27:19.820Z", - "scannedAt": "2025-06-18T09:27:19.820Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -550,9 +550,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/user-operation.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.821Z", - "updatedAt": "2025-06-18T09:27:19.821Z", - "scannedAt": "2025-06-18T09:27:19.821Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" } }, { @@ -563,9 +563,22 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/domain/xiaohongshu-marketer/execution/xiaohongshu-marketer.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.821Z", - "updatedAt": "2025-06-18T09:27:19.821Z", - "scannedAt": "2025-06-18T09:27:19.821Z" + "createdAt": "2025-06-18T10:00:59.262Z", + "updatedAt": "2025-06-18T10:00:59.262Z", + "scannedAt": "2025-06-18T10:00:59.262Z" + } + }, + { + "id": "dacp-email-sending", + "source": "package", + "protocol": "execution", + "name": "Dacp Email Sending 执行模式", + "description": "执行模式,定义具体的行为模式", + "reference": "@package://prompt/core/dacp-email-sending.execution.md", + "metadata": { + "createdAt": "2025-06-18T10:00:59.263Z", + "updatedAt": "2025-06-18T10:00:59.263Z", + "scannedAt": "2025-06-18T10:00:59.263Z" } }, { @@ -576,9 +589,9 @@ "description": "执行模式,定义具体的行为模式", "reference": "@package://prompt/core/dacp-service-calling.execution.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.821Z", - "updatedAt": "2025-06-18T09:27:19.821Z", - "scannedAt": "2025-06-18T09:27:19.821Z" + "createdAt": "2025-06-18T10:00:59.263Z", + "updatedAt": "2025-06-18T10:00:59.263Z", + "scannedAt": "2025-06-18T10:00:59.263Z" } }, { @@ -589,9 +602,9 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/core/recall.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.821Z", - "updatedAt": "2025-06-18T09:27:19.821Z", - "scannedAt": "2025-06-18T09:27:19.821Z" + "createdAt": "2025-06-18T10:00:59.263Z", + "updatedAt": "2025-06-18T10:00:59.263Z", + "scannedAt": "2025-06-18T10:00:59.263Z" } }, { @@ -602,21 +615,21 @@ "description": "思维模式,指导AI的思考方式", "reference": "@package://prompt/core/remember.thought.md", "metadata": { - "createdAt": "2025-06-18T09:27:19.821Z", - "updatedAt": "2025-06-18T09:27:19.821Z", - "scannedAt": "2025-06-18T09:27:19.821Z" + "createdAt": "2025-06-18T10:00:59.263Z", + "updatedAt": "2025-06-18T10:00:59.263Z", + "scannedAt": "2025-06-18T10:00:59.263Z" } } ], "stats": { - "totalResources": 46, + "totalResources": 47, "byProtocol": { "role": 7, "thought": 9, - "execution": 30 + "execution": 31 }, "bySource": { - "package": 46 + "package": 47 } } }