mirror-magi-meta-agent
Version:
AI-powered development planning and execution system with Supabase integration
154 lines (127 loc) ⢠4.23 kB
JavaScript
const fs = require('fs').promises;
const path = require('path');
const { spawn } = require('child_process');
const commands = {
'init': initProject,
'setup': setupProject,
'test': testAgent,
'validate': validateConfig,
'customize': customizeProject,
'help': showHelp
};
async function main() {
const command = process.argv[2] || 'help';
if (commands[command]) {
await commands[command]();
} else {
console.log(`Unknown command: ${command}`);
showHelp();
}
}
async function initProject() {
console.log('š Initializing Mirror Magi Meta-Agent in current project...\n');
const targetDir = process.cwd();
const sourceDir = __dirname + '/..';
// Create meta-agent directory
const metaAgentDir = path.join(targetDir, 'meta-agent');
try {
await fs.mkdir(metaAgentDir, { recursive: true });
// Copy essential files
const filesToCopy = [
'config',
'core',
'scripts',
'state',
'test-agent.js',
'package.json',
'README.md',
'GETTING_STARTED.md'
];
for (const file of filesToCopy) {
await copyRecursive(
path.join(sourceDir, file),
path.join(metaAgentDir, file)
);
}
console.log('ā
Meta-agent files copied to ./meta-agent/');
console.log('š Next steps:');
console.log(' cd meta-agent');
console.log(' npm install');
console.log(' npm run setup');
console.log(' npm test');
} catch (error) {
console.error('ā Error initializing project:', error.message);
process.exit(1);
}
}
async function setupProject() {
const setupScript = path.join(__dirname, '..', 'scripts', 'setup.js');
runScript(setupScript);
}
async function testAgent() {
const testScript = path.join(__dirname, '..', 'test-agent.js');
runScript(testScript);
}
async function validateConfig() {
const validateScript = path.join(__dirname, '..', 'scripts', 'validate-config.js');
runScript(validateScript);
}
async function customizeProject() {
console.log('šÆ Mirror Magi Meta-Agent Project Customization\n');
console.log('š Available Documentation:');
console.log(' CUSTOMIZATION_GUIDE.md - Comprehensive 10-question setup guide');
console.log(' CORE_SCRIPTS.md - Complete reference for all entry points and scripts');
console.log(' GETTING_STARTED.md - Installation and setup instructions');
console.log('\nš Online Resources:');
console.log(' https://github.com/franklindickinson/mirror-magi/blob/main/meta-agent/CUSTOMIZATION_GUIDE.md');
console.log(' https://github.com/franklindickinson/mirror-magi/blob/main/meta-agent/CORE_SCRIPTS.md');
console.log('\nš» Interactive Setup:');
console.log(' cd meta-agent && node scripts/customize.js');
}
function showHelp() {
console.log(`
š¤ Mirror Magi Meta-Agent CLI
Usage: mirror-magi <command>
Commands:
init Initialize meta-agent in current project
setup Set up configuration files from templates
test Test the meta-agent with sample tasks
validate Validate configuration files
customize Get customization guidance and documentation links
help Show this help message
Examples:
mirror-magi init
mirror-magi setup
mirror-magi test
š Documentation:
CORE_SCRIPTS.md
CUSTOMIZATION_GUIDE.md
GETTING_STARTED.md
`);
}
function runScript(scriptPath) {
const child = spawn('node', [scriptPath], {
stdio: 'inherit',
cwd: process.cwd()
});
child.on('exit', (code) => {
process.exit(code);
});
}
async function copyRecursive(src, dest) {
const stat = await fs.stat(src);
if (stat.isDirectory()) {
await fs.mkdir(dest, { recursive: true });
const files = await fs.readdir(src);
for (const file of files) {
await copyRecursive(
path.join(src, file),
path.join(dest, file)
);
}
} else {
await fs.copyFile(src, dest);
}
}
main().catch(console.error);