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.

114 lines (100 loc) 2.86 kB
/** * PromptX 资源文件命名管理器 * 统一管理所有资源文件的命名规范:[id].[tag].md */ class ResourceFileNaming { /** * 资源文件命名模式 * 格式:[id].[tag].md * 示例:sean-product-philosophy.thought.md */ static NAMING_PATTERN = /^(.+)\.(\w+)\.md$/; /** * 解析资源文件名 * @param {string} fileName - 文件名 * @returns {Object|null} 解析结果 {id, tag} 或 null */ static parseFileName(fileName) { const match = fileName.match(this.NAMING_PATTERN); if (match) { const [, id, tag] = match; return { id, tag }; } return null; } /** * 生成资源文件名 * @param {string} id - 资源ID * @param {string} tag - 资源标签 * @returns {string} 生成的文件名 */ static generateFileName(id, tag) { return `${id}.${tag}.md`; } /** * 验证文件名是否符合规范 * @param {string} fileName - 文件名 * @returns {boolean} 是否符合规范 */ static isValidFileName(fileName) { return this.NAMING_PATTERN.test(fileName); } /** * 检查文件是否为指定标签类型 * @param {string} fileName - 文件名 * @param {string} expectedTag - 期望的标签 * @returns {boolean} 是否匹配 */ static hasTag(fileName, expectedTag) { const parsed = this.parseFileName(fileName); return parsed && parsed.tag === expectedTag; } /** * 从文件路径提取资源ID * @param {string} filePath - 文件路径 * @param {string} expectedTag - 期望的标签 * @returns {string|null} 资源ID或null */ static extractResourceId(filePath, expectedTag) { const path = require('path'); const fileName = path.basename(filePath); const parsed = this.parseFileName(fileName); if (parsed && parsed.tag === expectedTag) { return parsed.id; } return null; } /** * 扫描目录中指定标签的所有文件 * @param {string} directory - 目录路径 * @param {string} tag - 标签类型 * @returns {Promise<Array>} 文件路径数组 */ static async scanTagFiles(directory, tag) { const fs = require('fs-extra'); const path = require('path'); try { if (!await fs.pathExists(directory)) { return []; } const files = await fs.readdir(directory); const tagFiles = []; for (const file of files) { if (this.hasTag(file, tag)) { tagFiles.push(path.join(directory, file)); } } return tagFiles; } catch (error) { return []; } } /** * 获取支持的资源标签类型 * @returns {Array<string>} 支持的标签类型 */ static getSupportedTags() { return ['role', 'thought', 'execution', 'knowledge']; } } module.exports = ResourceFileNaming;