* Develop (#66)

* 重构ActionCommand和LearnCommand,更新DPMLContentParser和SemanticRenderer的导入路径,确保模块结构一致性。删除不再使用的DPMLContentParser和SemanticRenderer文件,优化代码结构,提升可维护性。

* 重构PromptX资源协议系统,采用极简两层协议架构,删除不必要的语义层,优化路径解析和资源加载流程。引入AI协作优化,支持直接生成完整协议路径,提升系统性能和用户体验。整体架构简化60%,实现零配置启动,显著降低内存占用和启动时间。

* optimize:优化女娲提示词

* Optimize:更新记忆策略文档,增加角色专业记忆的独特价值和工作流程,强调角色记忆与客户端记忆的差异,优化记忆引导话术和决策规则,以提升用户对专业记忆系统的理解和应用。

* feature:增加 Sean 角色

* optimize:优化记忆格式化逻辑,确保完整记忆内容不被截断,同时更新工具定义中的描述,增强用户对记忆回想器的理解和使用指导。

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

* feat: 在MCPServerCommand和MCPStreamableHttpCommand中添加'promptx_dacp'参数映射,同时在DACPCommand中优化参数处理逻辑,以支持数组参数的正确解析。

* feat: 更新DACP演示服务,重命名服务和描述,简化功能,删除不必要的日历和文档操作,增强演示效果。同时,优化了API接口和README文档,确保用户更易于理解和使用。

* feat: 添加DACP邮件发送功能,支持真实发送与Demo模式,增强邮件发送的配置管理和错误提示,优化用户体验。

* feat: 更新女娲和Sean角色文档,增强角色身份、核心特质和决策框架的描述,优化内容结构,提升用户理解和使用体验。同时,更新产品哲学知识体系,明确矛盾驱动和简洁性原则的应用。

* Add product management submodule

* fix: 修复 recall 和 learn 的 bug

* refactor: 把 hello 改成 welcome

* feat: 添加DACP服务启动脚本和测试命令,更新相关依赖,优化配置文件路径处理

* fix: 更新pnpm-lock.yaml以匹配DACP依赖,解决CI中--frozen-lockfile的错误

* 更新DACP白皮书的更新日期至2025-01-19;在DACPConfigManager中优化配置管理,支持项目级和用户级配置的优先级处理,增强错误提示信息,更新相关方法以支持异步操作。

* Develop (#70)

* 重构ActionCommand和LearnCommand,更新DPMLContentParser和SemanticRenderer的导入路径,确保模块结构一致性。删除不再使用的DPMLContentParser和SemanticRenderer文件,优化代码结构,提升可维护性。

* 重构PromptX资源协议系统,采用极简两层协议架构,删除不必要的语义层,优化路径解析和资源加载流程。引入AI协作优化,支持直接生成完整协议路径,提升系统性能和用户体验。整体架构简化60%,实现零配置启动,显著降低内存占用和启动时间。

* optimize:优化女娲提示词

* Optimize:更新记忆策略文档,增加角色专业记忆的独特价值和工作流程,强调角色记忆与客户端记忆的差异,优化记忆引导话术和决策规则,以提升用户对专业记忆系统的理解和应用。

* feature:增加 Sean 角色

* optimize:优化记忆格式化逻辑,确保完整记忆内容不被截断,同时更新工具定义中的描述,增强用户对记忆回想器的理解和使用指导。

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

* feat: 在MCPServerCommand和MCPStreamableHttpCommand中添加'promptx_dacp'参数映射,同时在DACPCommand中优化参数处理逻辑,以支持数组参数的正确解析。

* feat: 更新DACP演示服务,重命名服务和描述,简化功能,删除不必要的日历和文档操作,增强演示效果。同时,优化了API接口和README文档,确保用户更易于理解和使用。

* feat: 添加DACP邮件发送功能,支持真实发送与Demo模式,增强邮件发送的配置管理和错误提示,优化用户体验。

* feat: 更新女娲和Sean角色文档,增强角色身份、核心特质和决策框架的描述,优化内容结构,提升用户理解和使用体验。同时,更新产品哲学知识体系,明确矛盾驱动和简洁性原则的应用。

* Add product management submodule

* fix: 修复 recall 和 learn 的 bug

* refactor: 把 hello 改成 welcome

* feat: 添加DACP服务启动脚本和测试命令,更新相关依赖,优化配置文件路径处理

* fix: 更新pnpm-lock.yaml以匹配DACP依赖,解决CI中--frozen-lockfile的错误

* 更新DACP白皮书的更新日期至2025-01-19;在DACPConfigManager中优化配置管理,支持项目级和用户级配置的优先级处理,增强错误提示信息,更新相关方法以支持异步操作。

* fix: 统一Pouch命令路径获取机制,解决Issue #69记忆持久化问题

修复多实例MCP环境下的路径不一致问题:
- RememberCommand: 使用ResourceManager替代DirectoryService直接调用
- RecallCommand: 使用ResourceManager替代DirectoryService直接调用
- RegisterCommand: 使用ResourceManager+DirectoryService统一路径获取

核心改进:
1. 所有命令现在使用相同的getGlobalResourceManager()初始化
2. 通过resourceManager.initializeWithNewArchitecture()确保路径一致性
3. 实现"要对一起对,要错一起错"的一致性原则

测试验证:
- 记忆写入和读取使用相同项目路径
- 多实例环境下路径解析行为完全一致
- 向后兼容,无破坏性变更

Fixes #69

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

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

---------

Co-authored-by: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Sean
2025-06-20 12:28:41 +08:00
committed by GitHub
parent f10e9218c9
commit 2954cd5354
112 changed files with 7069 additions and 9488 deletions

View File

@ -0,0 +1,45 @@
#!/usr/bin/env node
const path = require('path');
const PackageDiscovery = require('../src/lib/core/resource/discovery/PackageDiscovery');
async function generatePackageRegistry() {
try {
console.log('🏗️ 开始生成Package级别注册表...');
// 获取项目根目录
const projectRoot = process.cwd();
console.log(`📁 项目根目录: ${projectRoot}`);
// 创建PackageDiscovery实例并设置注册表路径
const discovery = new PackageDiscovery();
discovery.registryPath = path.join(projectRoot, 'src', 'package.registry.json');
console.log(`📋 注册表路径: ${discovery.registryPath}`);
// 生成注册表
const registryData = await discovery.generateRegistry(projectRoot);
console.log('✅ Package注册表生成完成');
console.log(`📊 总资源数: ${registryData.size}`);
console.log(`📂 保存位置: ${path.relative(projectRoot, discovery.registryPath)}`);
// 显示统计信息
const stats = registryData.getStats();
console.log(`📋 资源分类:`);
Object.entries(stats.byProtocol).forEach(([protocol, count]) => {
console.log(` ${protocol}: ${count}`);
});
} catch (error) {
console.error('❌ 生成Package注册表失败:', error.message);
process.exit(1);
}
}
// 如果直接运行此脚本
if (require.main === module) {
generatePackageRegistry();
}
module.exports = generatePackageRegistry;

View File

@ -29,4 +29,14 @@ fi
# 切换到项目根目录并执行命令
echo -e "${GREEN}✅ 正在启动 MCP Server...${NC}"
cd "$PROJECT_ROOT" && pnpm start mcp-server
# 设置环境变量
export PROMPTX_ENV=development
# 检查是否传入了 --with-dacp 参数
if [[ "$1" == "--with-dacp" ]]; then
echo -e "${YELLOW}🔌 将同时启动 DACP 服务...${NC}"
cd "$PROJECT_ROOT" && node src/bin/promptx.js mcp-server --with-dacp
else
cd "$PROJECT_ROOT" && node src/bin/promptx.js mcp-server
fi

52
scripts/test-dacp-calculator.js Executable file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env node
const { spawn } = require('child_process');
const path = require('path');
// 测试计算器功能
async function testCalculator() {
console.log('🧪 测试DACP计算器服务...\n');
const promptxPath = path.join(__dirname, '..', 'src', 'bin', 'promptx.js');
// 测试案例
const testCases = [
{
name: '简单加法',
command: ['node', promptxPath, 'dacp', 'dacp-promptx-service', 'calculate', '{"user_request": "2加3等于多少"}']
},
{
name: '复杂计算',
command: ['node', promptxPath, 'dacp', 'dacp-promptx-service', 'calculate', '{"user_request": "(10 + 5) * 2 - 8 / 4"}']
},
{
name: '中文运算符',
command: ['node', promptxPath, 'dacp', 'dacp-promptx-service', 'calculate', '{"user_request": "100减去25"}']
}
];
for (const testCase of testCases) {
console.log(`📝 测试: ${testCase.name}`);
console.log(`命令: ${testCase.command.join(' ')}`);
await new Promise((resolve) => {
const child = spawn(testCase.command[0], testCase.command.slice(1), {
stdio: 'inherit'
});
child.on('close', (code) => {
console.log(`\n✅ 测试完成 (退出码: ${code})\n`);
console.log('-'.repeat(60) + '\n');
resolve();
});
});
}
}
// 运行测试
testCalculator().then(() => {
console.log('🎉 所有测试完成!');
}).catch(error => {
console.error('❌ 测试失败:', error);
process.exit(1);
});

74
scripts/test-dacp.sh Executable file
View File

@ -0,0 +1,74 @@
#!/bin/bash
# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${YELLOW}🧪 DACP 集成测试${NC}"
echo "================================="
# 检查 DACP 服务是否运行
echo -e "\n${YELLOW}1. 检查 DACP 服务状态${NC}"
if curl -s http://localhost:3002/health > /dev/null; then
echo -e "${GREEN}✅ DACP 服务运行正常${NC}"
curl -s http://localhost:3002/health | jq .
else
echo -e "${RED}❌ DACP 服务未运行请先启动sh scripts/start-mcp.sh --with-dacp${NC}"
exit 1
fi
# 测试计算器
echo -e "\n${YELLOW}2. 测试计算器 Action${NC}"
echo "请求: 100 + 200"
curl -s -X POST http://localhost:3002/dacp \
-H "Content-Type: application/json" \
-d '{
"service_id": "dacp-promptx-service",
"action": "calculate",
"parameters": {
"user_request": "100 + 200"
}
}' | jq '.data.execution_result'
# 测试邮件
echo -e "\n${YELLOW}3. 测试邮件 Action${NC}"
echo "请求: 发送会议提醒邮件"
curl -s -X POST http://localhost:3002/dacp \
-H "Content-Type: application/json" \
-d '{
"service_id": "dacp-promptx-service",
"action": "send_email",
"parameters": {
"user_request": "给 team@example.com 发个明天下午3点的会议提醒"
}
}' | jq '.data.execution_result | {recipient, subject, status}'
# 测试日历
echo -e "\n${YELLOW}4. 测试日历 Action${NC}"
echo "请求: 安排会议"
curl -s -X POST http://localhost:3002/dacp \
-H "Content-Type: application/json" \
-d '{
"service_id": "dacp-promptx-service",
"action": "schedule_meeting",
"parameters": {
"user_request": "安排明天和张三讨论项目进展"
}
}' | jq '.data.execution_result | {title, time, attendees}'
# 测试文档
echo -e "\n${YELLOW}5. 测试文档 Action${NC}"
echo "请求: 创建工作报告"
curl -s -X POST http://localhost:3002/dacp \
-H "Content-Type: application/json" \
-d '{
"service_id": "dacp-promptx-service",
"action": "create_document",
"parameters": {
"user_request": "创建一份本周工作报告"
}
}' | jq '.data.execution_result | {title, type, format}'
echo -e "\n${GREEN}✅ 测试完成!${NC}"

79
scripts/test-mcp-dacp.js Executable file
View File

@ -0,0 +1,79 @@
#!/usr/bin/env node
/**
* 测试 MCP → PromptX → DACP 完整链路
*/
const { cli } = require('../src/lib/core/pouch');
async function testDACPIntegration() {
console.log('🧪 测试 MCP → PromptX → DACP 集成\n');
const tests = [
{
name: '计算器测试',
args: {
service_id: 'dacp-promptx-service',
action: 'calculate',
parameters: {
user_request: '(100 + 200) * 3'
}
}
},
{
name: '邮件测试',
args: {
service_id: 'dacp-promptx-service',
action: 'send_email',
parameters: {
user_request: '给 boss@company.com 发个项目进展汇报邮件',
context: {
urgency: 'normal',
recipient_type: 'superior'
}
}
}
},
{
name: '日历测试',
args: {
service_id: 'dacp-promptx-service',
action: 'schedule_meeting',
parameters: {
user_request: '下周一安排团队周会',
context: {
location: '会议室A'
}
}
}
}
];
for (const test of tests) {
console.log(`\n📍 ${test.name}`);
console.log('请求:', JSON.stringify(test.args, null, 2));
try {
// 调用 DACP 命令
const result = await cli.execute('dacp', [test.args], true);
if (result.success) {
console.log('✅ 成功!');
console.log('结果:', JSON.stringify(result.data.execution_result, null, 2));
} else {
console.log('❌ 失败:', result.error);
}
} catch (error) {
console.log('❌ 错误:', error.message);
}
}
}
// 运行测试
testDACPIntegration().then(() => {
console.log('\n✅ 所有测试完成!');
process.exit(0);
}).catch(error => {
console.error('测试失败:', error);
process.exit(1);
});