#!/usr/bin/env node /** * 获取账号专属模板文件的完整路径 * * 用法: * node get-template-path.js --account 军事账号 --type storyboard * node get-template-path.js --account 军事账号 --type image * node get-template-path.js --account 军事账号 --type video * * 输出: * 完整的绝对路径,可直接传给 Read 工具或 fs.readFileSync */ const fs = require('fs') const path = require('path') // 路径常量 const SCRIPTS_DIR = path.join(__dirname, '..') const SKILLS_DIR = path.join(SCRIPTS_DIR, '..') const PROJECT_ROOT = path.join(SKILLS_DIR, '..', '..') const ACCOUNTS_DIR = path.join(PROJECT_ROOT, 'accounts') function getTemplatePath(accountId, templateType) { // 1. 读取账号配置 const accountPath = path.join(ACCOUNTS_DIR, accountId, 'account.json') if (!fs.existsSync(accountPath)) { throw new Error(`账号不存在: ${accountPath}`) } const account = JSON.parse(fs.readFileSync(accountPath, 'utf-8')) // 2. 映射模板类型到字段名 const fieldMap = { storyboard: 'storyboardPrompt', image: 'imageStylePrompt', video: 'videoStylePrompt' } const fieldName = fieldMap[templateType] if (!fieldName) { throw new Error(`未知模板类型: ${templateType},支持: storyboard, image, video`) } // 3. 获取相对路径 const relativePath = account[fieldName] if (!relativePath) { throw new Error(`账号配置缺少字段: ${fieldName}`) } // 4. 判断是否为绝对路径 let absolutePath if (path.isAbsolute(relativePath)) { // 已经是绝对路径,直接使用 absolutePath = relativePath } else { // 相对路径,拼接账号目录(相对于账号目录) absolutePath = path.join(ACCOUNTS_DIR, accountId, relativePath) } // 5. 检查文件是否存在 if (!fs.existsSync(absolutePath)) { throw new Error(`模板文件不存在: ${absolutePath}`) } // 6. 转换为相对于项目根目录的相对路径(子 Agent 友好) const relativeToProject = path.relative(PROJECT_ROOT, absolutePath) return relativeToProject } // ============================================================================ // CLI 入口 // ============================================================================ function main() { const args = process.argv.slice(2) const accountIndex = args.indexOf('--account') const typeIndex = args.indexOf('--type') if (accountIndex === -1 || typeIndex === -1) { console.error('用法:node get-template-path.js --account <账号ID> --type ') process.exit(1) } const accountId = args[accountIndex + 1] const templateType = args[typeIndex + 1] try { const fullPath = getTemplatePath(accountId, templateType) console.log(fullPath) } catch (err) { console.error(`错误: ${err.message}`) process.exit(1) } } if (require.main === module) { main() } module.exports = { getTemplatePath }