UNPKG

maia-cli

Version:

Command-line interface for MAIA (Modern AI Assistant)

186 lines (161 loc) • 8.01 kB
/** * MAIA Status Command - Show system status */ import { Command } from 'commander'; import chalk from 'chalk'; import { MAIAEngine, ConfigManager, getBuiltinTools } from 'maia-core'; export const statusCommand = new Command('status') .description('Show MAIA system status') .option('--detailed', 'show detailed status information') .action(async (options) => { console.log(chalk.cyan('šŸ“Š MAIA System Status\n')); try { // Check configuration const configManager = new ConfigManager(); const configExists = configManager.exists(); console.log(chalk.yellow('āš™ļø Configuration:')); if (configExists) { console.log(` ${chalk.green('āœ…')} Configuration file exists`); console.log(` ${chalk.gray(' Location:')} ${configManager.getConfigPath()}`); try { const config = configManager.load(); const validation = configManager.validate(); if (validation.valid) { console.log(` ${chalk.green('āœ…')} Configuration is valid`); } else { console.log(` ${chalk.red('āŒ')} Configuration has errors:`); validation.errors.forEach(error => { console.log(` ${chalk.red(' •')} ${error}`); }); } // AI Provider status console.log(chalk.yellow('\nšŸ¤– AI Provider:')); console.log(` Provider: ${config.ai.provider}`); console.log(` Model: ${config.ai[config.ai.provider]?.model || 'default'}`); const hasApiKey = !!config.ai[config.ai.provider]?.apiKey; console.log(` API Key: ${hasApiKey ? chalk.green('āœ… Set') : chalk.red('āŒ Missing')}`); // Test connection if API key is available if (hasApiKey && options.detailed) { try { const engine = new MAIAEngine({ config }); const connectionTest = await engine.testConnection(); console.log(` Connection: ${connectionTest ? chalk.green('āœ… Working') : chalk.red('āŒ Failed')}`); } catch (error) { console.log(` Connection: ${chalk.red('āŒ Error')} - ${error.message}`); } } // Tools status console.log(chalk.yellow('\nšŸ”§ Tools:')); const enabledTools = config.tools.enabled || []; const availableTools = getBuiltinTools(); // Check external tools let externalToolsCount = 0; let externalMethodsCount = 0; try { const engine = new MAIAEngine({ config }); const externalTools = engine.externalTools.listTools(); externalToolsCount = externalTools.length; externalMethodsCount = externalTools.reduce((count, tool) => count + tool.tools.length, 0); } catch (error) { // Ignore errors when checking external tools } console.log(` Built-in available: ${availableTools.length}`); console.log(` Built-in enabled: ${enabledTools.length}`); console.log(` External tools: ${externalToolsCount} (${externalMethodsCount} methods)`); if (options.detailed && enabledTools.length > 0) { console.log(` ${chalk.gray('Built-in enabled tools:')}`); enabledTools.forEach(toolName => { const tool = availableTools.find(t => t.name === toolName); if (tool) { console.log(` ${chalk.green(' āœ…')} ${toolName}`); } else { console.log(` ${chalk.red(' āŒ')} ${toolName} (not found)`); } }); } if (options.detailed && externalToolsCount > 0) { try { const engine = new MAIAEngine({ config }); const externalTools = engine.externalTools.listTools(); console.log(` ${chalk.gray('External tools:')}`); externalTools.forEach(toolConfig => { console.log(` ${chalk.green(' āœ…')} ${toolConfig.name} (${toolConfig.tools.length} methods)`); if (options.detailed) { toolConfig.tools.forEach(tool => { console.log(` ${chalk.gray(' •')} ${tool.name}`); }); } }); } catch (error) { console.log(` ${chalk.red(' āŒ')} Failed to load external tools details`); } } // Voice status console.log(chalk.yellow('\nšŸŽ¤ Voice:')); const voiceEnabled = config.voice?.enabled || false; console.log(` Enabled: ${voiceEnabled ? chalk.green('āœ… Yes') : chalk.gray('ā—‹ No')}`); if (voiceEnabled && options.detailed) { const ttsConfigured = !!config.voice?.tts?.apiKey; const sttConfigured = !!config.voice?.stt?.apiKey; console.log(` TTS: ${ttsConfigured ? chalk.green('āœ… Configured') : chalk.red('āŒ Not configured')}`); console.log(` STT: ${sttConfigured ? chalk.green('āœ… Configured') : chalk.red('āŒ Not configured')}`); } // User info console.log(chalk.yellow('\nšŸ‘¤ User:')); console.log(` Name: ${config.user.name || 'Not set'}`); console.log(` ID: ${config.user.id}`); // Engine stats if detailed if (options.detailed) { try { const engine = new MAIAEngine({ config }); const stats = engine.getStats(); console.log(chalk.yellow('\nšŸ“ˆ Statistics:')); console.log(` Conversations: ${stats.conversations}`); console.log(` Messages: ${stats.messages}`); console.log(` Tools loaded: ${stats.tools}`); console.log(` Memories: ${stats.memories}`); } catch (error) { console.log(chalk.yellow('\nšŸ“ˆ Statistics:')); console.log(` ${chalk.red('āŒ')} Unable to load engine stats`); } } } catch (error) { console.log(` ${chalk.red('āŒ')} Failed to load configuration: ${error.message}`); } } else { console.log(` ${chalk.red('āŒ')} Configuration not found`); console.log(` ${chalk.gray(' Run "maia init" to initialize MAIA')}`); } // System info console.log(chalk.yellow('\nšŸ’» System:')); console.log(` Node.js: ${process.version}`); console.log(` Platform: ${process.platform} ${process.arch}`); console.log(` Working directory: ${process.cwd()}`); // Overall status console.log(chalk.yellow('\nšŸŽÆ Overall Status:')); if (configExists) { try { const config = configManager.load(); const validation = configManager.validate(); const hasApiKey = !!config.ai[config.ai.provider]?.apiKey; if (validation.valid && hasApiKey) { console.log(` ${chalk.green('āœ… Ready')} - MAIA is configured and ready to use`); console.log(` ${chalk.gray(' Run "maia chat" to start chatting')}`); } else if (validation.valid && !hasApiKey) { console.log(` ${chalk.yellow('āš ļø Partially configured')} - API key missing`); console.log(` ${chalk.gray(' Run "maia config set ai.${config.ai.provider}.apiKey YOUR_KEY"')}`); } else { console.log(` ${chalk.red('āŒ Configuration errors')} - Fix configuration issues`); console.log(` ${chalk.gray(' Run "maia config validate" for details')}`); } } catch (error) { console.log(` ${chalk.red('āŒ Error')} - ${error.message}`); } } else { console.log(` ${chalk.red('āŒ Not initialized')} - Run "maia init" to get started`); } } catch (error) { console.error(chalk.red('āŒ Failed to get status:'), error.message); process.exit(1); } });