UNPKG

ai-team-orchestrator

Version:

🧠 AI Team Advanced - Maximum Quality Agent System avec 9 agents ultra-spécialisés et collaboration intelligente

492 lines (411 loc) 19.2 kB
#!/usr/bin/env node /** * 🚀 AI Team Advanced CLI - Maximum Quality Agent System * * Interface CLI pour orchestrer le système d'agents multi-spécialisés * avec collaboration intelligente et qualité enterprise. */ import { Command } from 'commander'; import inquirer from 'inquirer'; import chalk from 'chalk'; import ora from 'ora'; import boxen from 'boxen'; import gradient from 'gradient-string'; import AdvancedAgentSystem from '../lib/advanced-agent-system.js'; import { readFile, writeFile } from 'fs/promises'; import path from 'path'; import crypto from 'crypto'; class AITeamAdvancedCLI { constructor() { this.program = new Command(); this.agentSystem = null; this.sessionId = null; this.setupProgram(); this.setupCommands(); } setupProgram() { this.program .name('ai-team-advanced') .version('3.0.0') .description(gradient.pastel('🧠 AI Team Advanced - Maximum Quality Agent System')) .configureOutput({ writeErr: (str) => process.stderr.write(`[ERROR] ${str}`), writeOut: (str) => process.stdout.write(str) }); } setupCommands() { // Commande principale d'orchestration avancée this.program .command('orchestrate') .alias('o') .description('🎯 Orchestrer un développement avec agents multi-spécialisés') .option('-t, --task <description>', 'Description de la tâche') .option('-c, --complexity <level>', 'Niveau de complexité: low|medium|high|enterprise', 'medium') .option('-q, --quality <level>', 'Niveau de qualité: standard|high|maximum|enterprise', 'maximum') .option('--interactive', 'Mode interactif avec négociation agents', false) .option('--continuous', 'Amélioration continue activée', false) .action(this.handleOrchestration.bind(this)); // Commande de collaboration agent-to-agent this.program .command('collaborate') .alias('c') .description('🤝 Collaboration intelligente entre agents spécialisés') .option('-a, --agents <list>', 'Liste des agents à faire collaborer') .option('-o, --objective <goal>', 'Objectif de collaboration') .option('--negotiation', 'Activer la négociation inter-agents', false) .action(this.handleCollaboration.bind(this)); // Commande d'audit de qualité maximale this.program .command('audit') .alias('a') .description('🔍 Audit de qualité multi-agents exhaustif') .option('-p, --path <directory>', 'Répertoire à auditer', '.') .option('-d, --depth <level>', 'Profondeur d\'analyse: basic|deep|comprehensive', 'comprehensive') .option('--fix', 'Appliquer les corrections automatiquement', false) .action(this.handleQualityAudit.bind(this)); // Commande d'optimisation performance this.program .command('optimize') .alias('opt') .description('⚡ Optimisation performance par agents spécialisés') .option('-t, --target <metric>', 'Métrique cible: speed|memory|network|bundle') .option('-b, --budget <value>', 'Budget de performance') .option('--aggressive', 'Optimisations agressives', false) .action(this.handlePerformanceOptimization.bind(this)); // Commande de sécurité enterprise this.program .command('secure') .alias('s') .description('🔒 Analyse et sécurisation enterprise par expert sécurité') .option('-l, --level <compliance>', 'Niveau compliance: basic|enterprise|government') .option('--standards <list>', 'Standards: OWASP,GDPR,SOX,HIPAA,PCI-DSS') .option('--penetration', 'Tests de pénétration automatisés', false) .action(this.handleSecurityAnalysis.bind(this)); // Commande d'apprentissage et amélioration this.program .command('learn') .alias('l') .description('🧠 Système d\'apprentissage et amélioration continue') .option('--feedback <session>', 'Feedback sur une session') .option('--retrain', 'Réentraîner les agents', false) .option('--metrics', 'Analyser les métriques de performance', false) .action(this.handleLearning.bind(this)); // Commande de monitoring en temps réel this.program .command('monitor') .alias('m') .description('📊 Monitoring en temps réel des agents et qualité') .option('-d, --dashboard', 'Lancer le dashboard interactif', false) .option('--alerts', 'Configurer les alertes qualité', false) .action(this.handleMonitoring.bind(this)); } async handleOrchestration(options) { try { await this.initializeAdvancedSystem(); console.log(boxen( gradient.rainbow('🚀 AI TEAM ADVANCED ORCHESTRATION\nQuality Level: MAXIMUM'), { padding: 1, margin: 1, borderStyle: 'double' } )); let taskDescription = options.task; if (!taskDescription) { const answer = await inquirer.prompt([ { type: 'input', name: 'task', message: '📝 Décrivez votre tâche de développement:', validate: input => input.trim().length > 10 || 'Veuillez fournir une description détaillée (>10 caractères)' } ]); taskDescription = answer.task; } // Configuration avancée const requirements = await this.gatherAdvancedRequirements(options); console.log(chalk.cyan('\n🧠 Initialisation du système d\'agents avancés...')); const spinner = ora('Orchestration en cours...').start(); try { // Processus d'orchestration complet const result = await this.agentSystem.processTask(taskDescription, requirements); spinner.succeed('Orchestration terminée avec succès!'); await this.displayResults(result); await this.handlePostProcessing(result, options); } catch (error) { spinner.fail('Erreur dans l\'orchestration'); console.error(chalk.red('Erreur:'), error.message); // Système de récupération intelligente await this.handleOrchestrationFailure(error, taskDescription, requirements); } } catch (error) { console.error(chalk.red('Erreur d\'initialisation:'), error.message); process.exit(1); } } async gatherAdvancedRequirements(options) { const questions = [ { type: 'list', name: 'priorityFocus', message: '🎯 Priorité principale:', choices: [ { name: '⚡ Performance maximale', value: 'performance' }, { name: '🔒 Sécurité enterprise', value: 'security' }, { name: '🧪 Qualité et tests', value: 'quality' }, { name: '🏗️ Architecture scalable', value: 'architecture' }, { name: '⚖️ Équilibré optimal', value: 'balanced' } ] }, { type: 'checkbox', name: 'requiredAgents', message: '🤖 Agents spécialisés requis:', choices: [ { name: '🏗️ Architecte (Vision système)', value: 'architect', checked: true }, { name: '🎨 Frontend Specialist (UI/UX)', value: 'frontend' }, { name: '⚙️ Backend Expert (API/Performance)', value: 'backend' }, { name: '🧪 QA Engineer (Tests exhaustifs)', value: 'qa', checked: true }, { name: '🔒 Security Expert (Sécurité)', value: 'security' }, { name: '📊 Performance Optimizer', value: 'performance' }, { name: '🔍 Code Reviewer (Review IA)', value: 'reviewer', checked: true }, { name: '📝 Documentation Specialist', value: 'documentation' } ] }, { type: 'list', name: 'collaborationMode', message: '🤝 Mode de collaboration:', choices: [ { name: '🚀 Parallèle optimisé', value: 'parallel' }, { name: '🔄 Séquentiel validé', value: 'sequential' }, { name: '🧠 Négociation intelligente', value: 'negotiation' }, { name: '🎯 Adaptatif (IA decide)', value: 'adaptive' } ] }, { type: 'confirm', name: 'enableLearning', message: '🧠 Activer l\'apprentissage continu?', default: true } ]; if (options.interactive) { return await inquirer.prompt(questions); } else { // Configuration par défaut optimisée return { priorityFocus: 'balanced', requiredAgents: ['architect', 'qa', 'reviewer', 'security'], collaborationMode: 'adaptive', enableLearning: true, complexity: options.complexity, qualityLevel: options.quality }; } } async handleCollaboration(options) { console.log(boxen( gradient.cristal('🤝 COLLABORATION INTER-AGENTS\nIntelligence Collective Activée'), { padding: 1, margin: 1, borderStyle: 'round' } )); await this.initializeAdvancedSystem(); const collaboration = await this.agentSystem.orchestrateCollaboration({ agents: options.agents?.split(',') || ['architect', 'frontend', 'backend'], objective: options.objective, enableNegotiation: options.negotiation, mode: 'intelligent' }); await this.displayCollaborationResults(collaboration); } async handleQualityAudit(options) { console.log(boxen( gradient.vice('🔍 AUDIT QUALITÉ MAXIMALE\nAnalyse Multi-Agents Exhaustive'), { padding: 1, margin: 1, borderStyle: 'bold' } )); await this.initializeAdvancedSystem(); const spinner = ora('Audit de qualité en cours...').start(); try { const auditResults = await this.agentSystem.performComprehensiveAudit({ path: options.path, depth: options.depth, autoFix: options.fix, agents: ['qa', 'security', 'performance', 'reviewer'] }); spinner.succeed('Audit terminé!'); await this.displayAuditResults(auditResults); if (options.fix && auditResults.autoFixableIssues.length > 0) { await this.applyAutomaticFixes(auditResults.autoFixableIssues); } } catch (error) { spinner.fail('Erreur dans l\'audit'); console.error(chalk.red('Erreur:'), error.message); } } async handlePerformanceOptimization(options) { console.log(boxen( gradient.summer('⚡ OPTIMISATION PERFORMANCE\nAgents Spécialisés Performance'), { padding: 1, margin: 1, borderStyle: 'double' } )); await this.initializeAdvancedSystem(); const optimizations = await this.agentSystem.performPerformanceOptimization({ target: options.target || 'comprehensive', budget: options.budget, aggressive: options.aggressive, agents: ['performance', 'architect', 'frontend', 'backend'] }); await this.displayOptimizationResults(optimizations); } async handleSecurityAnalysis(options) { console.log(boxen( gradient.mind('🔒 SÉCURITÉ ENTERPRISE\nAnalyse et Sécurisation Maximale'), { padding: 1, margin: 1, borderStyle: 'double' } )); await this.initializeAdvancedSystem(); const securityAnalysis = await this.agentSystem.performSecurityAnalysis({ level: options.level || 'enterprise', standards: options.standards?.split(',') || ['OWASP', 'GDPR'], penetrationTesting: options.penetration, agents: ['security', 'qa', 'reviewer'] }); await this.displaySecurityResults(securityAnalysis); } async handleLearning(options) { console.log(boxen( gradient.fruit('🧠 APPRENTISSAGE CONTINU\nAmélioration Intelligence Agents'), { padding: 1, margin: 1, borderStyle: 'round' } )); if (options.feedback) { await this.processFeedback(options.feedback); } if (options.retrain) { await this.retrainAgents(); } if (options.metrics) { await this.displayLearningMetrics(); } } async handleMonitoring(options) { console.log(boxen( gradient.atlas('📊 MONITORING TEMPS RÉEL\nTableau de Bord Qualité'), { padding: 1, margin: 1, borderStyle: 'bold' } )); if (options.dashboard) { await this.launchInteractiveDashboard(); } if (options.alerts) { await this.configureQualityAlerts(); } } async initializeAdvancedSystem() { if (this.agentSystem) return; const apiKey = await this.getAPIKey(); if (!apiKey) { throw new Error('Clé API Together AI requise. Utilisez: export TOGETHER_API_KEY=your_key'); } this.agentSystem = new AdvancedAgentSystem(apiKey); this.sessionId = crypto.randomUUID(); console.log(chalk.green('✅ Système d\'agents avancés initialisé')); console.log(chalk.gray(`Session ID: ${this.sessionId}`)); } async getAPIKey() { return process.env.TOGETHER_API_KEY || process.env.OPENAI_API_KEY; } async displayResults(result) { console.log(chalk.cyan('\n📊 RÉSULTATS DE L\'ORCHESTRATION')); console.log('='.repeat(50)); console.log(chalk.green(`✅ Score de qualité: ${result.qualityScore}/100`)); console.log(chalk.blue(`🎯 Agents utilisés: ${result.agentsUsed?.join(', ')}`)); console.log(chalk.yellow(`⏱️ Durée: ${result.duration || 'N/A'}`)); if (result.architecture) { console.log(chalk.magenta('\n🏗️ ARCHITECTURE:')); console.log(JSON.stringify(result.architecture, null, 2)); } if (result.implementation?.files) { console.log(chalk.cyan('\n📁 FICHIERS GÉNÉRÉS:')); for (const [filename, _] of result.implementation.files) { console.log(chalk.gray(` ├─ ${filename}`)); } } if (result.qualityMetrics) { console.log(chalk.blue('\n📈 MÉTRIQUES QUALITÉ:')); Object.entries(result.qualityMetrics).forEach(([metric, value]) => { console.log(chalk.gray(` ${metric}: ${value}`)); }); } } async displayCollaborationResults(collaboration) { console.log(chalk.cyan('\n🤝 RÉSULTATS COLLABORATION')); console.log('='.repeat(50)); console.log(chalk.green(`✅ Agents participants: ${collaboration.participants?.join(', ')}`)); console.log(chalk.blue(`🎯 Consensus atteint: ${collaboration.consensus ? 'Oui' : 'Non'}`)); if (collaboration.negotiations) { console.log(chalk.yellow('\n💬 NÉGOCIATIONS:')); collaboration.negotiations.forEach(neg => { console.log(chalk.gray(` ${neg.agent}: ${neg.outcome}`)); }); } } async displayAuditResults(auditResults) { console.log(chalk.cyan('\n🔍 RÉSULTATS AUDIT QUALITÉ')); console.log('='.repeat(50)); console.log(chalk.green(`✅ Score global: ${auditResults.overallScore}/100`)); Object.entries(auditResults.details || {}).forEach(([category, score]) => { const color = score >= 80 ? chalk.green : score >= 60 ? chalk.yellow : chalk.red; console.log(color(` ${category}: ${score}/100`)); }); if (auditResults.criticalIssues?.length > 0) { console.log(chalk.red('\n🚨 PROBLÈMES CRITIQUES:')); auditResults.criticalIssues.forEach(issue => { console.log(chalk.red(` ❌ ${issue}`)); }); } if (auditResults.recommendations?.length > 0) { console.log(chalk.blue('\n💡 RECOMMANDATIONS:')); auditResults.recommendations.forEach(rec => { console.log(chalk.blue(` 💡 ${rec}`)); }); } } async handlePostProcessing(result, options) { const actions = []; if (result.qualityScore < 80) { actions.push('Amélioration qualité suggérée'); } if (result.securityIssues?.length > 0) { actions.push('Correction sécurité requise'); } if (options.continuous) { actions.push('Monitoring continu activé'); } if (actions.length > 0) { console.log(chalk.yellow('\n⚠️ ACTIONS SUGGÉRÉES:')); actions.forEach(action => { console.log(chalk.yellow(` • ${action}`)); }); } // Sauvegarde des résultats await this.saveSessionResults(result); } async saveSessionResults(result) { const resultsDir = path.join(process.cwd(), '.ai-team-advanced'); const sessionFile = path.join(resultsDir, `session-${this.sessionId}.json`); try { await writeFile(sessionFile, JSON.stringify(result, null, 2)); console.log(chalk.gray(`📄 Résultats sauvegardés: ${sessionFile}`)); } catch (error) { console.log(chalk.yellow('⚠️ Impossible de sauvegarder les résultats')); } } async run() { try { await this.program.parseAsync(); } catch (error) { console.error(chalk.red('Erreur:'), error.message); process.exit(1); } } } // Lancement de l'application const cli = new AITeamAdvancedCLI(); cli.run().catch(error => { console.error(chalk.red('Erreur fatale:'), error); process.exit(1); }); export default AITeamAdvancedCLI;