#!/bin/bash # Script de Démarrage Système Complet - Visual Workflow Builder # Auteur : Dom, Alice, Kiro - 09 janvier 2026 # # Ce script démarre tous les services nécessaires pour un système # Visual Workflow Builder entièrement fonctionnel avec toutes les API connectées. set -e # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuration BACKEND_PORT=5003 FRONTEND_PORT=3000 PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" echo -e "${BLUE}============================================================${NC}" echo -e "${BLUE} DÉMARRAGE SYSTÈME COMPLET - VISUAL WORKFLOW BUILDER${NC}" echo -e "${BLUE}============================================================${NC}" echo -e "${GREEN}Auteur : Dom, Alice, Kiro - 09 janvier 2026${NC}" echo -e "${GREEN}Répertoire : ${PROJECT_ROOT}${NC}" echo "" # Fonction pour vérifier si un port est libre check_port() { local port=$1 if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then return 1 # Port occupé else return 0 # Port libre fi } # Fonction pour arrêter les processus existants stop_existing_processes() { echo -e "${YELLOW}🔍 Vérification des processus existants...${NC}" # Arrêter le backend s'il existe if pgrep -f "app_lightweight.py" > /dev/null; then echo -e "${YELLOW}⏹️ Arrêt du backend existant...${NC}" pkill -f "app_lightweight.py" || true sleep 2 fi # Arrêter le frontend s'il existe if pgrep -f "webpack.*serve" > /dev/null; then echo -e "${YELLOW}⏹️ Arrêt du frontend existant...${NC}" pkill -f "webpack.*serve" || true sleep 2 fi echo -e "${GREEN}✅ Processus existants arrêtés${NC}" } # Fonction pour vérifier l'environnement check_environment() { echo -e "${YELLOW}🔍 Vérification de l'environnement...${NC}" # Vérifier Python if ! command -v python3 &> /dev/null; then echo -e "${RED}❌ Python3 non trouvé${NC}" exit 1 fi # Vérifier l'environnement virtuel if [ ! -d "venv_v3" ]; then echo -e "${RED}❌ Environnement virtuel venv_v3 non trouvé${NC}" exit 1 fi # Vérifier Node.js if ! command -v node &> /dev/null; then echo -e "${RED}❌ Node.js non trouvé${NC}" exit 1 fi # Vérifier le répertoire frontend if [ ! -d "visual_workflow_builder/frontend" ]; then echo -e "${RED}❌ Répertoire frontend non trouvé${NC}" exit 1 fi echo -e "${GREEN}✅ Environnement validé${NC}" } # Fonction pour démarrer le backend start_backend() { echo -e "${YELLOW}🚀 Démarrage du backend Flask...${NC}" # Vérifier que le port est libre if ! check_port $BACKEND_PORT; then echo -e "${RED}❌ Port $BACKEND_PORT occupé${NC}" exit 1 fi # Démarrer le backend en arrière-plan cd "$PROJECT_ROOT" source venv_v3/bin/activate && python3 visual_workflow_builder/backend/app_lightweight.py & BACKEND_PID=$! # Attendre que le backend soit prêt echo -e "${YELLOW}⏳ Attente du démarrage du backend...${NC}" for i in {1..30}; do if curl -s http://localhost:$BACKEND_PORT/health > /dev/null 2>&1; then echo -e "${GREEN}✅ Backend démarré sur le port $BACKEND_PORT${NC}" return 0 fi sleep 1 done echo -e "${RED}❌ Timeout - Backend non démarré${NC}" kill $BACKEND_PID 2>/dev/null || true exit 1 } # Fonction pour démarrer le frontend start_frontend() { echo -e "${YELLOW}🚀 Démarrage du frontend React...${NC}" # Vérifier que le port est libre if ! check_port $FRONTEND_PORT; then echo -e "${RED}❌ Port $FRONTEND_PORT occupé${NC}" exit 1 fi # Aller dans le répertoire frontend cd "$PROJECT_ROOT/visual_workflow_builder/frontend" # Vérifier les dépendances if [ ! -d "node_modules" ]; then echo -e "${YELLOW}📦 Installation des dépendances npm...${NC}" npm install fi # Démarrer le frontend en arrière-plan npm start & FRONTEND_PID=$! # Attendre que le frontend soit prêt echo -e "${YELLOW}⏳ Attente du démarrage du frontend...${NC}" for i in {1..60}; do if curl -s http://localhost:$FRONTEND_PORT > /dev/null 2>&1; then echo -e "${GREEN}✅ Frontend démarré sur le port $FRONTEND_PORT${NC}" return 0 fi sleep 2 done echo -e "${RED}❌ Timeout - Frontend non démarré${NC}" kill $FRONTEND_PID 2>/dev/null || true exit 1 } # Fonction pour valider les connexions validate_connections() { echo -e "${YELLOW}🔍 Validation des connexions API...${NC}" cd "$PROJECT_ROOT" # Lancer le test de validation if python3 tests/integration/test_connexions_api_completes_09jan2026.py > /dev/null 2>&1; then echo -e "${GREEN}✅ Toutes les connexions API sont fonctionnelles${NC}" else echo -e "${YELLOW}⚠️ Certaines API pourraient nécessiter plus de temps pour s'initialiser${NC}" fi } # Fonction pour afficher le statut final show_final_status() { echo "" echo -e "${BLUE}============================================================${NC}" echo -e "${BLUE} SYSTÈME VISUAL WORKFLOW BUILDER DÉMARRÉ${NC}" echo -e "${BLUE}============================================================${NC}" echo "" echo -e "${GREEN}🌐 URLs d'accès :${NC}" echo -e " Frontend React : ${YELLOW}http://localhost:$FRONTEND_PORT${NC}" echo -e " Backend Flask : ${YELLOW}http://localhost:$BACKEND_PORT${NC}" echo -e " Health Check : ${YELLOW}http://localhost:$BACKEND_PORT/health${NC}" echo "" echo -e "${GREEN}📋 API disponibles :${NC}" echo -e " Capture d'écran : ${YELLOW}/api/screen-capture${NC}" echo -e " Capture réelle : ${YELLOW}/api/real-screen-capture${NC}" echo -e " Embedding visuel : ${YELLOW}/api/visual-embedding${NC}" echo -e " Gestion workflows : ${YELLOW}/api/workflows${NC}" echo "" echo -e "${GREEN}🎯 Fonctionnalités :${NC}" echo -e " ✅ Capture d'écran ultra stable (Option A)" echo -e " ✅ Détection d'éléments UI en temps réel" echo -e " ✅ Création d'embeddings visuels" echo -e " ✅ Gestion complète des workflows" echo -e " ✅ Interface utilisateur connectée" echo "" echo -e "${YELLOW}⏹️ Pour arrêter le système : Ctrl+C${NC}" echo -e "${BLUE}============================================================${NC}" } # Fonction de nettoyage à l'arrêt cleanup() { echo "" echo -e "${YELLOW}🛑 Arrêt du système...${NC}" # Arrêter le frontend if [ ! -z "$FRONTEND_PID" ]; then kill $FRONTEND_PID 2>/dev/null || true fi # Arrêter le backend if [ ! -z "$BACKEND_PID" ]; then kill $BACKEND_PID 2>/dev/null || true fi # Arrêter tous les processus liés pkill -f "app_lightweight.py" 2>/dev/null || true pkill -f "webpack.*serve" 2>/dev/null || true echo -e "${GREEN}✅ Système arrêté proprement${NC}" exit 0 } # Capturer les signaux d'arrêt trap cleanup SIGINT SIGTERM # Fonction principale main() { # Aller dans le répertoire du projet cd "$PROJECT_ROOT" # Étapes de démarrage stop_existing_processes check_environment start_backend start_frontend validate_connections show_final_status # Attendre indéfiniment (jusqu'à Ctrl+C) while true; do sleep 1 done } # Vérifier les arguments if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then echo "Usage: $0 [options]" echo "" echo "Options:" echo " --help, -h Afficher cette aide" echo " --validate Valider uniquement les connexions (sans démarrer)" echo "" echo "Ce script démarre le système Visual Workflow Builder complet avec :" echo " - Backend Flask sur le port $BACKEND_PORT" echo " - Frontend React sur le port $FRONTEND_PORT" echo " - Toutes les API connectées et fonctionnelles" exit 0 fi if [ "$1" = "--validate" ]; then echo -e "${BLUE}Mode validation uniquement${NC}" cd "$PROJECT_ROOT" python3 tests/integration/test_connexions_api_completes_09jan2026.py exit $? fi # Lancer le système main