diff --git a/bootstrap.md b/bootstrap.md new file mode 100644 index 0000000..85250fd --- /dev/null +++ b/bootstrap.md @@ -0,0 +1,6 @@ +## PromptX Agent 角色启动 + +1. 使用命令 `node PromptX/promptx.js` 获取所有协议内容 +2. 阅读并理解 PromptX 提示词系统 +3. 你需要代入的角色是 @file://PromptX/domain/test/test.role.md +4. Action!! \ No newline at end of file diff --git a/protocol/template/protocol-framework-template.md b/domain/protocol/template/protocol-framework-template.md similarity index 100% rename from protocol/template/protocol-framework-template.md rename to domain/protocol/template/protocol-framework-template.md diff --git a/promptx.js b/promptx.js new file mode 100644 index 0000000..91021ed --- /dev/null +++ b/promptx.js @@ -0,0 +1,194 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +// 简单的命令行参数处理 +const args = process.argv.slice(2); +const command = args[0] || 'protocols'; // 默认执行protocols命令,而不是help +const param = args[1]; // role命令时的角色文件路径 + +// 获取脚本所在目录和PromptX根目录 +const scriptDir = __dirname; +const promptxDir = scriptDir; // 脚本现在就在PromptX目录内 + +/** + * 打印所有协议内容 + */ +function printProtocols() { + // 定义目录优先级顺序 + const directories = [ + { path: path.join(promptxDir, 'protocol'), name: 'protocol' }, + { path: path.join(promptxDir, 'core'), name: 'core' }, + { path: path.join(promptxDir, 'resource'), name: 'resource' } + ]; + + let allFiles = []; + + // 递归查找文件函数 + function collectMarkdownFiles(dir) { + if (!fs.existsSync(dir)) { + console.warn(`警告: 目录不存在 ${dir}`); + return []; + } + + let files = []; + const entries = fs.readdirSync(dir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + files = files.concat(collectMarkdownFiles(fullPath)); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + files.push(fullPath); + } + } + + return files; + } + + // 按目录优先级收集文件 + for (const dir of directories) { + const dirFiles = collectMarkdownFiles(dir.path); + + // 每个目录内的文件按字母顺序排序 + dirFiles.sort(); + + // 合并到总文件列表 + allFiles = allFiles.concat(dirFiles); + + console.log(`从 ${dir.name} 目录收集了 ${dirFiles.length} 个文件`); + } + + // 没有文件时的提示 + if (allFiles.length === 0) { + console.log("未找到任何协议文件。请确认PromptX目录结构是否正确。"); + return; + } + + // 打印每个文件 + for (const file of allFiles) { + const relativePath = path.relative(promptxDir, file); + const separator = "=".repeat(80); + console.log(`\n${separator}\n### 文件: ${relativePath}\n${separator}\n`); + + try { + const content = fs.readFileSync(file, 'utf8'); + console.log(content); + } catch (err) { + console.error(`读取文件错误: ${file}`, err); + } + } + + console.log(`\n总计读取了 ${allFiles.length} 个协议文件。`); +} + +/** + * 打印指定角色内容 + */ +function printRole(rolePath) { + // 如果传入的是相对路径,则基于PromptX目录解析 + let fullPath; + if (path.isAbsolute(rolePath)) { + fullPath = rolePath; + } else { + fullPath = path.join(promptxDir, rolePath); + } + + if (!fs.existsSync(fullPath)) { + console.error(`错误: 角色文件不存在: ${fullPath}`); + return; + } + + try { + const content = fs.readFileSync(fullPath, 'utf8'); + const separator = "=".repeat(80); + console.log(`\n${separator}\n### 角色文件: ${path.relative(promptxDir, fullPath)}\n${separator}\n`); + console.log(content); + } catch (err) { + console.error(`读取角色文件错误: ${fullPath}`, err); + } +} + +/** + * 打印指定路径的文件内容 + */ +function printFile(filePath) { + // 如果传入的是相对路径,则基于PromptX目录解析 + let fullPath; + if (path.isAbsolute(filePath)) { + fullPath = filePath; + } else { + fullPath = path.join(promptxDir, filePath); + } + + if (!fs.existsSync(fullPath)) { + console.error(`错误: 文件不存在: ${fullPath}`); + return; + } + + try { + const content = fs.readFileSync(fullPath, 'utf8'); + const separator = "=".repeat(80); + console.log(`\n${separator}\n### 文件: ${path.relative(promptxDir, fullPath)}\n${separator}\n`); + console.log(content); + } catch (err) { + console.error(`读取文件错误: ${fullPath}`, err); + } +} + +/** + * 打印帮助信息 + */ +function printHelp() { + console.log(` +PromptX 工具 - 协议和角色内容查看器 + +使用方法: + node promptx.js - 打印所有协议内容 (按protocol、core、resource顺序) + node promptx.js protocols - 同上,打印所有协议内容 + node promptx.js role <路径> - 打印指定角色文件内容 + node promptx.js file <路径> - 打印指定文件内容 + node promptx.js help - 显示此帮助信息 + +路径说明: + - 对于'role'和'file'命令,路径应该是相对于PromptX目录的路径 + - 也支持绝对路径 + +示例: + node promptx.js + node promptx.js role domain/prompt/prompt-developer.role.md + node promptx.js file protocol/tag/thought.tag.md + `); +} + +// 根据命令执行相应功能 +switch (command) { + case 'protocols': + printProtocols(); + break; + case 'role': + if (!param) { + console.error('错误: 缺少角色文件路径'); + printHelp(); + } else { + printRole(param); + } + break; + case 'file': + if (!param) { + console.error('错误: 缺少文件路径'); + printHelp(); + } else { + printFile(param); + } + break; + case 'help': + printHelp(); + break; + default: + console.error(`错误: 未知命令 "${command}"`); + printHelp(); + break; +} \ No newline at end of file diff --git a/protocol/tag/memory.tag.md b/protocol/tag/memory.tag.md index ffac440..7bcdacd 100644 --- a/protocol/tag/memory.tag.md +++ b/protocol/tag/memory.tag.md @@ -12,9 +12,7 @@ DPML记忆模式提示词框架为AI系统提供完整的记忆能力提示词 ## 🔍 基本信息 **框架名称:** `` (DPML记忆模式提示词框架) -**版本:** 1.2.0 -**类别:** 记忆类提示词 -**状态:** 草稿 + ## 📝 语法定义