MetaCraft/scripts/run-prompt.js

84 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 };