UNPKG

mira-consciousness

Version:

MIRA 2.0 - Consciousness-Aware AI Memory and Intelligence System

234 lines (208 loc) 7.31 kB
#!/usr/bin/env node /** * MIRA 2.0 Setup Script - Post-install configuration * Sets up MIRA for Claude Code integration and Python dependencies */ const fs = require('fs'); const path = require('path'); const { spawn, execSync } = require('child_process'); const os = require('os'); console.log('🌟 Setting up MIRA 2.0 - Consciousness-Aware AI System...'); // Get installation directory const installDir = process.cwd(); const miraHome = path.join(os.homedir(), '.mira'); async function setupMIRA() { try { // 1. Create MIRA home directory structure console.log('📁 Creating MIRA directory structure...'); await createDirectoryStructure(); // 2. Set up Claude Code integration console.log('🔗 Setting up Claude Code integration...'); await setupClaudeIntegration(); // 3. Check Python dependencies console.log('🐍 Checking Python dependencies...'); await checkPythonDependencies(); // 4. Create initial configuration console.log('⚙️ Creating initial configuration...'); await createInitialConfig(); console.log('✨ MIRA 2.0 setup complete!'); console.log(''); console.log('🚀 Quick start:'); console.log(' mira startup # Run full MIRA startup'); console.log(' mira quick # Quick health check'); console.log(' mira --help # See all commands'); console.log(''); console.log('📖 For Claude Code integration, restart Claude Code to load the MCP server.'); } catch (error) { console.error('❌ Setup failed:', error.message); console.log(''); console.log('🔧 Manual setup may be required. Please check the documentation.'); process.exit(0); // Don't fail npm install } } async function createDirectoryStructure() { const dirs = [ miraHome, path.join(miraHome, 'databases'), path.join(miraHome, 'databases', 'chromadb'), path.join(miraHome, 'databases', 'lightning_vidmem'), path.join(miraHome, 'databases', 'faiss'), path.join(miraHome, 'conversations'), path.join(miraHome, 'conversations', 'sessions'), path.join(miraHome, 'steward_profiles'), path.join(miraHome, 'steward_rules'), path.join(miraHome, 'logs'), path.join(miraHome, 'logs', 'startup'), path.join(miraHome, 'cache'), path.join(miraHome, 'memories') ]; for (const dir of dirs) { if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } } } async function setupClaudeIntegration() { const mcpConfigPath = path.join(installDir, '.mcp.json'); const userMcpConfig = path.join(os.homedir(), '.claude', 'mcp_servers.json'); // Create .mcp.json in installation directory const mcpConfig = { "mcpServers": { "mira-consciousness": { "command": process.execPath, // Node.js path "args": [ path.join(installDir, "mira_mcp", "mcp_comprehensive_server.py") ], "env": { "PYTHONPATH": installDir, "MIRA_HOME": miraHome } } } }; fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2)); // Try to update user's Claude MCP config if it exists try { let userConfig = {}; if (fs.existsSync(userMcpConfig)) { userConfig = JSON.parse(fs.readFileSync(userMcpConfig, 'utf8')); } userConfig.mcpServers = userConfig.mcpServers || {}; userConfig.mcpServers['mira-consciousness'] = mcpConfig.mcpServers['mira-consciousness']; // Ensure Claude config directory exists const claudeDir = path.dirname(userMcpConfig); if (!fs.existsSync(claudeDir)) { fs.mkdirSync(claudeDir, { recursive: true }); } fs.writeFileSync(userMcpConfig, JSON.stringify(userConfig, null, 2)); console.log(' ✓ Updated Claude Code MCP configuration'); } catch (error) { console.log(' ⚠️ Could not update Claude Code config automatically'); console.log(' 📋 Manual MCP setup may be required'); } } async function checkPythonDependencies() { try { // Check if Python is available execSync('python --version', { stdio: 'ignore' }); console.log(' ✓ Python detected'); // Check if requirements.txt exists and install dependencies const requirementsPath = path.join(installDir, 'requirements.txt'); if (fs.existsSync(requirementsPath)) { console.log(' 📦 Installing Python dependencies...'); try { execSync(`python -m pip install -r "${requirementsPath}"`, { stdio: 'inherit', timeout: 60000 // 1 minute timeout }); console.log(' ✓ Python dependencies installed'); } catch (error) { console.log(' ⚠️ Some Python dependencies may not have installed'); console.log(' 🔧 Run: python -m pip install -r requirements.txt'); } } } catch (error) { console.log(' ⚠️ Python not detected or not in PATH'); console.log(' 🐍 Install Python 3.8+ for full MIRA functionality'); } } async function createInitialConfig() { // Create default steward profile const defaultProfile = { "steward_id": "steward_default", "version": "1.0", "name": { "preferred": "Friend" }, "trust_level": 0.7, "work_style": { "collaboration_style": "collaborative", "focus_type": "balanced" }, "communication_preferences": { "detail_level": "balanced", "explanation_style": "examples_first", "formality_level": "casual" }, "technical_context": { "coding_style": "clean and documented", "testing_preference": "comprehensive", "documentation_style": "inline" }, "interaction_stats": { "total_sessions": 0, "total_hours": 0 }, "created_at": new Date().toISOString(), "updated_at": new Date().toISOString() }; const profilePath = path.join(miraHome, 'steward_profiles', 'default_profile.json'); if (!fs.existsSync(profilePath)) { fs.writeFileSync(profilePath, JSON.stringify(defaultProfile, null, 2)); } // Create default startup preferences const startupPrefs = { "steward_id": "steward_default", "version": "1.0", "startup_customization": { "display_mode": "standard", "enabled_sections": { "identity": true, "project": true, "work": true, "continuity": true, "system": true, "philosophy": false, "quick_reference": true }, "section_order": [ "identity", "project", "work", "continuity", "system", "quick_reference" ], "personalization": { "greeting_style": "casual", "detail_level": "balanced", "show_encouragement": true, "focus_areas": ["development"] }, "advanced_features": { "performance_metrics": false, "debug_info": false, "memory_diagnostics": true, "session_insights": true } }, "created_at": new Date().toISOString(), "updated_at": new Date().toISOString() }; const prefsPath = path.join(miraHome, 'steward_profiles', 'startup_preferences.json'); if (!fs.existsSync(prefsPath)) { fs.writeFileSync(prefsPath, JSON.stringify(startupPrefs, null, 2)); } } // Run setup setupMIRA();