maia-cli
Version:
Command-line interface for MAIA (Modern AI Assistant)
186 lines (161 loc) ⢠8.01 kB
JavaScript
/**
* 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);
}
});