MetaCraft/scripts/run-prompt.js

84 lines
2.5 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
/**
* run-prompt.js - 执行一个prompt文件
*
* 用法node run-prompt.js <prompt文件路径>
*/
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
async function main() {
const args = process.argv.slice(2);
if (args.length < 1) {
console.error('请指定prompt文件路径');
console.log('用法node run-prompt.js <prompt文件路径>');
process.exit(1);
}
const promptPath = path.resolve(args[0]);
if (!fs.existsSync(promptPath)) {
console.error(`文件不存在:${promptPath}`);
process.exit(1);
}
console.log(`📄 读取prompt文件${promptPath}`);
const promptContent = fs.readFileSync(promptPath, 'utf-8');
// 提取元数据
const targetMatch = promptContent.match(/<!-- target: (.+?) -->/);
const target = targetMatch ? targetMatch[1].trim() : 'unknown';
console.log(`🎯 任务目标:${target}`);
// 检查Claude Code是否可用
try {
execSync('claude --version', { stdio: 'ignore' });
} catch (e) {
console.error('❌ 未检测到Claude Code CLI请确保已安装并配置。');
console.log('提示可以手动复制以下prompt内容到Claude Code中执行');
console.log('---');
console.log(promptContent);
console.log('---');
process.exit(1);
}
// 构建临时文件路径
const tempDir = path.join(__dirname, '../.temp');
if (!fs.existsSync(tempDir)) {
fs.mkdirSync(tempDir, { recursive: true });
}
const tempPromptFile = path.join(tempDir, `prompt-${Date.now()}.md`);
fs.writeFileSync(tempPromptFile, promptContent);
console.log(`🤖 正在调用Claude Code执行prompt...`);
try {
// 使用Claude Code执行临时文件
// 注意这里假设claude命令可以直接执行文件实际可能需要调整
const command = `claude --file "${tempPromptFile}"`;
console.log(`执行命令:${command}`);
const output = execSync(command, { encoding: 'utf-8' });
console.log('✅ AI响应');
console.log(output);
} catch (error) {
console.error('❌ 执行失败:', error.message);
console.log('建议请手动使用Claude Code打开该prompt文件进行交互。');
}
// 清理临时文件
try {
fs.unlinkSync(tempPromptFile);
} catch (e) {
// 忽略清理错误
}
}
if (require.main === module) {
main().catch(err => {
console.error('未预期的错误:', err);
process.exit(1);
});
}
module.exports = { main };