feat: 添加DACP服务支持,允许通过命令行调用DACP专业服务,增强AI角色的执行能力,同时更新相关依赖和工具定义。

This commit is contained in:
sean
2025-06-18 15:42:49 +08:00
parent 15b5e607dd
commit 47582c56c9
25 changed files with 3511 additions and 10 deletions

View File

@ -0,0 +1,122 @@
const PouchCLI = require('../../lib/core/pouch/PouchCLI');
describe('DACP Email Service E2E Tests', () => {
let pouchCLI;
beforeEach(async () => {
pouchCLI = new PouchCLI();
await pouchCLI.initialize();
});
test('应该能够调用真实的DACP邮件服务', async () => {
const args = {
service_id: 'dacp-email-service',
action: 'send_email',
parameters: {
user_request: '给产品团队发送PromptX项目进展更新',
context: {
project: 'PromptX',
urgency: 'medium',
recipient_type: 'internal'
}
}
};
try {
const result = await pouchCLI.execute('dacp', args);
// 验证DACP响应格式
expect(result).toHaveProperty('request_id');
expect(result).toHaveProperty('success');
if (result.success) {
expect(result).toHaveProperty('data');
expect(result.data).toHaveProperty('execution_result');
expect(result.data).toHaveProperty('evaluation');
expect(result.data).toHaveProperty('applied_guidelines');
expect(result.data).toHaveProperty('performance_metrics');
// 验证execution_result格式
const { execution_result } = result.data;
expect(execution_result).toHaveProperty('message_id');
expect(execution_result).toHaveProperty('status');
expect(execution_result).toHaveProperty('recipients');
expect(execution_result).toHaveProperty('subject');
expect(execution_result).toHaveProperty('body');
console.log('✅ DACP邮件服务调用成功:');
console.log(` 📧 消息ID: ${execution_result.message_id}`);
console.log(` 📬 状态: ${execution_result.status}`);
console.log(` 📝 主题: ${execution_result.subject}`);
console.log(` ⚡ 响应时间: ${result.data.performance_metrics.response_time}`);
} else {
console.log('❌ DACP邮件服务返回错误:', result.error);
// 对于E2E测试我们可能期望服务可用所以这里可以fail
// 但也可以选择跳过测试如果服务不可用
}
} catch (error) {
// 如果是连接错误说明DACP邮件服务没有运行跳过测试
if (error.message.includes('fetch failed') ||
error.message.includes('Connection refused') ||
error.message.includes('ECONNREFUSED')) {
console.log('⚠️ DACP邮件服务未运行跳过E2E测试');
console.log(' 启动服务命令: cd src/dacp/dacp-email-service && npm start');
return; // 跳过测试而不是失败
}
// 其他错误应该被报告
throw error;
}
}, 10000); // 10秒超时
test('应该正确处理用户自然语言需求', async () => {
const testCases = [
{
description: '会议提醒邮件',
request: '给张三发个明天产品评审会议的提醒邮件',
context: { urgency: 'high', recipient_type: 'internal' }
},
{
description: '客户沟通邮件',
request: '向客户汇报项目进展,包含最新的功能更新',
context: { recipient_type: 'client', project: 'PromptX' }
},
{
description: '团队通知邮件',
request: '通知团队今晚系统维护,请提前保存工作',
context: { urgency: 'high', recipient_type: 'internal' }
}
];
for (const testCase of testCases) {
try {
const args = {
service_id: 'dacp-email-service',
action: 'send_email',
parameters: {
user_request: testCase.request,
context: testCase.context
}
};
const result = await pouchCLI.execute('dacp', args);
if (result.success) {
console.log(`${testCase.description} - 成功处理`);
console.log(` 🎯 主题: ${result.data.execution_result.subject}`);
console.log(` 📋 应用指导: ${result.data.applied_guidelines.join(', ')}`);
}
} catch (error) {
if (error.message.includes('fetch failed') ||
error.message.includes('Connection refused') ||
error.message.includes('ECONNREFUSED')) {
console.log(`⚠️ 跳过测试用例: ${testCase.description} (服务未运行)`);
continue;
}
throw error;
}
}
}, 15000); // 15秒超时
});