From 865d0d3a48b300b6fc9fe202b7399e789ee68200 Mon Sep 17 00:00:00 2001 From: Network Monitor Bot Date: Wed, 20 Aug 2025 07:19:55 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Fix:=20R=C3=A9solution=20critiqu?= =?UTF-8?q?e=20du=20flux=20d'authentification=20-=20NeuraTerm=20v2.0=20op?= =?UTF-8?q?=C3=A9rationnel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrections majeures pour permettre le démarrage complet de l'application: • AUTHENTIFICATION: Suppression du process.exit(1) bloquant dans keyManager • DÉMARRAGE: Gestion gracieuse de l'absence de clés API au lancement • UX: Messages informatifs non-bloquants pour guider l'utilisateur • SÉCURITÉ: Protection des fonctions IA sans clés avec messages appropriés • INTERFACE: Aide complète intégrée dans ModernInterface ✅ NeuraTerm v2.0 démarre maintenant parfaitement avec architecture C4 ✅ Boucle de commandes interactive fonctionnelle ✅ Mode limité disponible sans clés, configuration possible via 'setup' ✅ Toutes les fonctionnalités accessibles une fois les clés configurées 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/auth/index.ts | 6 ++-- src/auth/keyManager.ts | 15 ++++++--- src/commands/index.ts | 14 +++++++++ src/index.ts | 8 +++-- src/terminal/modernInterface.ts | 56 +++++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 12 deletions(-) diff --git a/src/auth/index.ts b/src/auth/index.ts index f901ac5..0c72939 100644 --- a/src/auth/index.ts +++ b/src/auth/index.ts @@ -29,10 +29,8 @@ export class AuthManager { export async function initAuthentication(config: any): Promise { const authManager = new AuthManager(config); - // Vérifier les clés au démarrage - if (!authManager.isAuthenticated()) { - await authManager.authenticate(); - } + // Ne pas forcer l'authentification au démarrage + // L'utilisateur peut configurer les clés plus tard avec "setup" return authManager; } diff --git a/src/auth/keyManager.ts b/src/auth/keyManager.ts index bfeb11a..a508c72 100644 --- a/src/auth/keyManager.ts +++ b/src/auth/keyManager.ts @@ -143,11 +143,16 @@ export class KeyManager { // Vérifier qu'au moins une clé est disponible if (!keys.openai && !keys.mistral) { - console.log('\n❌ Erreur: Au moins une clé API est requise pour utiliser NeuraTerm.'); - console.log('Vous pouvez aussi définir les variables d\'environnement:'); - console.log(' export OPENAI_API_KEY="votre_clé"'); - console.log(' export MISTRAL_API_KEY="votre_clé"'); - process.exit(1); + console.log('\n⚠️ Aucune clé API configurée.'); + console.log('NeuraTerm fonctionnera en mode limité.'); + console.log('\nVous pouvez configurer les clés plus tard avec:'); + console.log(' - key set openai'); + console.log(' - key set mistral'); + console.log('Ou définir les variables d\'environnement:'); + console.log(' - export OPENAI_API_KEY="votre_clé"'); + console.log(' - export MISTRAL_API_KEY="votre_clé"'); + console.log('\n💡 Tapez "setup" pour configurer les clés maintenant.'); + return keys; // Retourner les clés vides au lieu de quitter } // Sauvegarder les nouvelles clés diff --git a/src/commands/index.ts b/src/commands/index.ts index 9091baa..0802454 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -373,6 +373,13 @@ export class CommandProcessor { return; } + // Vérifier si les clés API sont disponibles + if (!this.dependencies.auth.isAuthenticated()) { + console.log('\n⚠️ Planification IA non disponible - Aucune clé API configurée'); + console.log('💡 Tapez "setup" pour configurer vos clés API'); + return; + } + try { console.log('\n📋 Création du plan d\'action...'); const plan = await this.taskPlanner.createPlan(request); @@ -445,6 +452,13 @@ export class CommandProcessor { } private async handleSmartQuery(query: string): Promise { + // Vérifier si les clés API sont disponibles + if (!this.dependencies.auth.isAuthenticated()) { + console.log('\n⚠️ Fonctionnalités IA non disponibles - Aucune clé API configurée'); + console.log('💡 Tapez "setup" pour configurer vos clés API'); + return; + } + try { // Déterminer si la demande nécessite des commandes système const analysisPrompt = ` diff --git a/src/index.ts b/src/index.ts index f973717..c1616e0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -129,10 +129,12 @@ export async function run(app: AppInstance): Promise { // Présentation de l'identité NeuraTerm console.log(app.identity.generateIntroduction()); - // Authentification des clés API si nécessaire + // Vérification des clés API sans bloquer if (!app.auth.isAuthenticated()) { - console.log('\n🔑 Configuration des clés API requise...'); - await app.auth.authenticate(); + console.log('\n⚠️ Aucune clé API configurée - Fonctionnement en mode limité'); + console.log('💡 Tapez "setup" pour configurer vos clés API ou "help" pour voir les commandes disponibles'); + } else { + console.log('\n✅ Clés API configurées - Toutes les fonctionnalités disponibles'); } // Enregistrer le démarrage en mémoire diff --git a/src/terminal/modernInterface.ts b/src/terminal/modernInterface.ts index 80817aa..4241bdc 100644 --- a/src/terminal/modernInterface.ts +++ b/src/terminal/modernInterface.ts @@ -398,6 +398,62 @@ ${this.theme.muted('Tapez')} ${this.theme.primary('help')} ${this.theme.muted('p return truncated + this.theme.muted('... (tronqué)'); } + /** + * Afficher l'aide des commandes + */ + displayHelp(): void { + console.log(`\n${this.theme.primary('📚 Aide NeuraTerm v2.0.0')}`); + console.log(this.theme.primary('─'.repeat(50))); + + console.log(`\n${this.theme.info('🔧 Commandes système:')}`); + console.log(` ${this.theme.accent('help')} - Afficher cette aide`); + console.log(` ${this.theme.accent('clear')} - Effacer l'écran`); + console.log(` ${this.theme.accent('exit/quit')} - Quitter NeuraTerm`); + console.log(` ${this.theme.accent('config')} - Afficher la configuration`); + + console.log(`\n${this.theme.info('🔑 Gestion des clés API:')}`); + console.log(` ${this.theme.accent('setup')} - Configuration interactive des clés`); + console.log(` ${this.theme.accent('keys')} - Statut des clés API`); + console.log(` ${this.theme.accent('key set ')} - Configurer une clé (openai/mistral)`); + console.log(` ${this.theme.accent('key status')} - Afficher le statut des clés`); + + console.log(`\n${this.theme.info('🤖 Providers IA:')}`); + console.log(` ${this.theme.accent('providers')} - Lister les providers disponibles`); + console.log(` ${this.theme.accent('provider ')} - Changer de provider`); + console.log(` ${this.theme.accent('stats [provider]')} - Statistiques d'utilisation`); + console.log(` ${this.theme.accent('cost')} - Coût total`); + + console.log(`\n${this.theme.info('🛠️ Exécution et planification:')}`); + console.log(` ${this.theme.accent('exec ')} - Exécuter une commande système`); + console.log(` ${this.theme.accent('plan ')} - Créer un plan d'action`); + console.log(` ${this.theme.accent('run')} - Exécuter le plan actuel`); + console.log(` ${this.theme.accent('cancel')} - Annuler le plan actuel`); + + console.log(`\n${this.theme.info('🧠 Mode IA intelligent:')}`); + console.log(` ${this.theme.muted('Tapez simplement votre demande pour une analyse automatique')}`); + console.log(` ${this.theme.muted('NeuraTerm déterminera s\'il faut exécuter des commandes')}`); + + console.log(`\n${this.theme.muted('💡 Astuce: Les commandes précédées de')} ${this.theme.primary('@neura')} ${this.theme.muted('activent le mode IA')}`); + } + + /** + * Afficher un message de bienvenue + */ + displayWelcome(): void { + this.displayBanner(); + } + + /** + * Afficher le contenu d'une réponse (pour compatibilité) + */ + displayResponse(response: any): void { + this.displayAIResponse(response, { + showProvider: true, + showTokens: true, + showCost: true + }); + } + /** * Effacer l'écran avec style */