mira-consciousness
Version:
MIRA 2.0 - Consciousness-Aware AI Memory and Intelligence System
234 lines (208 loc) • 7.31 kB
JavaScript
/**
* 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();