#!/bin/bash set -e PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VENV_DIR="$PROJECT_DIR/.venv" FRONTEND_DIR="$PROJECT_DIR/frontend" echo "🔧 Preparando entorno para Llama Dev Suite PRO v5 (modo completo)..." if [ ! -d "$VENV_DIR" ]; then echo "📦 Creando entorno virtual en $VENV_DIR" python3 -m venv "$VENV_DIR" fi source "$VENV_DIR/bin/activate" echo "📚 Instalando dependencias Python (FastAPI, Gradio, etc.)" pip install -r "$PROJECT_DIR/requirements.txt" hash -r 2>/dev/null || true NPM_BIN="$(command -v npm 2>/dev/null || true)" if [ -z "$NPM_BIN" ] && [ -x "/usr/bin/npm" ]; then NPM_BIN="/usr/bin/npm" fi if [ -z "$NPM_BIN" ] && [ -x "/usr/local/bin/npm" ]; then NPM_BIN="/usr/local/bin/npm" fi if [ -z "$NPM_BIN" ] && [ -x "/snap/bin/npm" ]; then NPM_BIN="/snap/bin/npm" fi if [ -z "$NPM_BIN" ]; then if [ -s "$HOME/.nvm/nvm.sh" ]; then echo "ℹ️ Detectado nvm — cargándolo para exponer npm..." export NVM_DIR="$HOME/.nvm" # shellcheck disable=SC1090 . "$NVM_DIR/nvm.sh" hash -r 2>/dev/null || true NPM_BIN="$(command -v npm 2>/dev/null || true)" fi fi if [ -z "$NPM_BIN" ]; then echo "❌ npm no está disponible en el PATH actual." echo " PATH=$PATH" if [ -x "/usr/lib/node_modules/npm/bin/npm-cli.js" ]; then echo " ⚠️ npm-cli.js encontrado pero falta ejecutable 'npm'." fi echo " Verifica que Node.js esté instalado y que el comando 'npm' esté en tu PATH." echo " Sugerencias:" echo " - Linux: reinstala con 'sudo apt install nodejs npm' o usa nvm" echo " - macOS: 'brew install node'" echo " - Windows: https://nodejs.org/" echo " Luego vuelve a ejecutar ./start_full.sh" exit 1 fi echo "🔍 npm detectado en: $NPM_BIN" if [ ! -d "$FRONTEND_DIR/node_modules" ]; then echo "📦 Instalando dependencias de frontend (npm install)" (cd "$FRONTEND_DIR" && "$NPM_BIN" install) fi cleanup() { echo -e "\n🧹 Deteniendo servicios..." if [ -n "$BACKEND_PID" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then kill "$BACKEND_PID" 2>/dev/null || true fi if [ -n "$FRONTEND_PID" ] && kill -0 "$FRONTEND_PID" 2>/dev/null; then kill "$FRONTEND_PID" 2>/dev/null || true fi wait || true echo "✅ Servicios detenidos." } trap cleanup EXIT echo "🚀 Iniciando backend FastAPI en http://127.0.0.1:8000" "$VENV_DIR/bin/uvicorn" backend.main:app --host 127.0.0.1 --port 8000 --reload & BACKEND_PID=$! echo "🎨 Iniciando frontend React en http://127.0.0.1:5173" (cd "$FRONTEND_DIR" && "$NPM_BIN" run dev -- --host 127.0.0.1 --port 5173) & FRONTEND_PID=$! echo "" echo "🟢 Todo listo. Abre http://127.0.0.1:5173 para usar la app completa." echo "ℹ️ Mantén esta ventana abierta. Pulsa Ctrl+C para detener ambos servicios." wait