UNPKG

agile-planner-mcp-server

Version:

Serveur MCP pour la génération d'artefacts agiles (backlogs, features, user stories) avec IA - compatible Windsurf, Claude et Cursor

96 lines (83 loc) 3.04 kB
/** * Point d'entrée principal pour l'interface CLI * @module cli */ 'use strict'; const inquirer = require('inquirer'); const chalk = require('chalk'); // fs est importé dans les sous-modules mais pas utilisé ici // Import des sous-modules const utils = require('./utils'); const backlog = require('./backlog'); const feature = require('./feature'); /** * Démarre l'interface CLI interactive * @param {Object} clientAPI - API client initialisé (OpenAI ou Groq) * @returns {Promise<void>} */ async function startCLI(clientAPI) { console.error(chalk.blue('Welcome to the Agile Planner CLI')); console.error(chalk.blue('This tool will help you generate agile artifacts for your project')); // Vérifier la disponibilité de la clé API if (!clientAPI && !(await utils.checkAndHandleApiKey())) { return; // Sortie si pas de clé API et l'utilisateur a choisi de ne pas en créer } // Initialiser le client API const clientResult = await utils.initializeApiClient(); if (!clientResult?.success) { console.error(chalk.red('Could not initialize API client. Please check your API keys.')); return; } // Afficher le menu principal await showMainMenu(clientResult.client); } /** * Affiche le menu principal et traite le choix de l'utilisateur * @param {Object} client - Client API initialisé (transmis aux générateurs) */ async function showMainMenu(client) { const actionAnswer = await inquirer.prompt([ { type: 'list', name: 'action', message: 'What would you like to generate?', choices: [ { name: 'Complete Backlog (Project level)', value: 'backlog' }, { name: 'Feature with User Stories (Feature level)', value: 'feature' } ] } ]); // Préparer les options avec le client API pour éviter une réinitialisation inutile const options = { client }; if (actionAnswer.action === 'backlog') { await backlog.generateBacklogCLI(null, null, options); } else if (actionAnswer.action === 'feature') { await feature.generateFeatureCLI(null, null, options); } } /** * Démarre un CLI interactif * @returns {Promise<void>} */ async function runInteractiveCLI() { try { await startCLI(); } catch (error) { console.error(chalk.red('Error running interactive CLI:'), error); process.exit(1); } } // IMPORTANT: Exporter les fonctions requises pour server/index.js // Ces exports sont critiques pour le routage CLI non-interactif (utilisé par les tests et la CLI automatisée) // Ne pas modifier cette structure d'export sans mise à jour correspondante dans index.js module.exports = { startCLI, runInteractiveCLI, // Ces exports directs sont nécessaires pour la rétro-compatibilité generateBacklogCLI: backlog.generateBacklogCLI, generateFeatureCLI: feature.generateFeatureCLI, // Export des sous-modules pour accès complet si nécessaire utils, backlog, feature };