🚀 Fix: Résolution critique du flux d'authentification - NeuraTerm v2.0 opérationnel

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 <noreply@anthropic.com>
This commit is contained in:
Network Monitor Bot 2025-08-20 07:19:55 +02:00
parent f248062ef1
commit 865d0d3a48
5 changed files with 87 additions and 12 deletions

View File

@ -29,10 +29,8 @@ export class AuthManager {
export async function initAuthentication(config: any): Promise<AuthManager> { export async function initAuthentication(config: any): Promise<AuthManager> {
const authManager = new AuthManager(config); const authManager = new AuthManager(config);
// Vérifier les clés au démarrage // Ne pas forcer l'authentification au démarrage
if (!authManager.isAuthenticated()) { // L'utilisateur peut configurer les clés plus tard avec "setup"
await authManager.authenticate();
}
return authManager; return authManager;
} }

View File

@ -143,11 +143,16 @@ export class KeyManager {
// Vérifier qu'au moins une clé est disponible // Vérifier qu'au moins une clé est disponible
if (!keys.openai && !keys.mistral) { if (!keys.openai && !keys.mistral) {
console.log('\n❌ Erreur: Au moins une clé API est requise pour utiliser NeuraTerm.'); console.log('\n⚠ Aucune clé API configurée.');
console.log('Vous pouvez aussi définir les variables d\'environnement:'); console.log('NeuraTerm fonctionnera en mode limité.');
console.log(' export OPENAI_API_KEY="votre_clé"'); console.log('\nVous pouvez configurer les clés plus tard avec:');
console.log(' export MISTRAL_API_KEY="votre_clé"'); console.log(' - key set openai');
process.exit(1); 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 // Sauvegarder les nouvelles clés

View File

@ -373,6 +373,13 @@ export class CommandProcessor {
return; 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 { try {
console.log('\n📋 Création du plan d\'action...'); console.log('\n📋 Création du plan d\'action...');
const plan = await this.taskPlanner.createPlan(request); const plan = await this.taskPlanner.createPlan(request);
@ -445,6 +452,13 @@ export class CommandProcessor {
} }
private async handleSmartQuery(query: string): Promise<void> { private async handleSmartQuery(query: string): Promise<void> {
// 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 { try {
// Déterminer si la demande nécessite des commandes système // Déterminer si la demande nécessite des commandes système
const analysisPrompt = ` const analysisPrompt = `

View File

@ -129,10 +129,12 @@ export async function run(app: AppInstance): Promise<void> {
// Présentation de l'identité NeuraTerm // Présentation de l'identité NeuraTerm
console.log(app.identity.generateIntroduction()); 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()) { if (!app.auth.isAuthenticated()) {
console.log('\n🔑 Configuration des clés API requise...'); console.log('\n⚠ Aucune clé API configurée - Fonctionnement en mode limité');
await app.auth.authenticate(); 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 // Enregistrer le démarrage en mémoire

View File

@ -398,6 +398,62 @@ ${this.theme.muted('Tapez')} ${this.theme.primary('help')} ${this.theme.muted('p
return truncated + this.theme.muted('... (tronqué)'); 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 <provider>')} - 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 <nom>')} - 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 <commande>')} - Exécuter une commande système`);
console.log(` ${this.theme.accent('plan <demande>')} - 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 * Effacer l'écran avec style
*/ */