Ctrl K
ComunidadGuías…

scripts/setup.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$SCRIPT_DIR"

echo -e "\033[1;36m==========================================\033[0m"
echo -e "\033[1;36m  OpenACM Tier-1 Autonomous Agent Setup\033[0m"
echo -e "\033[1;36m==========================================\033[0m"
echo ""

# ── macOS: ensure Xcode Command Line Tools are installed ────────────────────
# Required for compiling native Python deps and by uv's Python builds.
if [ "$(uname)" = "Darwin" ]; then
    if ! xcode-select -p &>/dev/null; then
        echo -e "\033[1;33m[*] Xcode Command Line Tools not found — launching installer...\033[0m"
        echo -e "\033[1;37m    A system dialog will open. Click Install and wait for it to finish,\033[0m"
        echo -e "\033[1;37m    then come back here and press Enter.\033[0m"
        xcode-select --install 2>/dev/null || true
        read -p "Press Enter once Xcode CLT install finishes... " _
        if ! xcode-select -p &>/dev/null; then
            echo -e "\033[1;31m[ERROR] Xcode CLT still missing. Install them and re-run setup.\033[0m"
            exit 1
        fi
    fi
    echo -e "\033[1;32m[OK] Xcode Command Line Tools detected.\033[0m"
fi

# Check if uv is installed
if ! command -v uv &>/dev/null; then
    echo -e "\033[1;33m[*] Instalando 'uv' (gestor de dependencias ultrarrápido)...\033[0m"
    curl -LsSf https://astral.sh/uv/install.sh | sh
    export PATH="$HOME/.cargo/bin:$HOME/.local/bin:$PATH"
else
    echo -e "\033[1;32m[OK] 'uv' ya está instalado.\033[0m"
fi

# Install system dependencies (Linux only)
if command -v apt-get &>/dev/null; then
    echo -e "\033[1;33m[*] Instalando utilidades base del sistema...\033[0m"
    sudo apt-get update -qq
    sudo apt-get install -y build-essential python3-dev libssl-dev libffi-dev xdotool python3.12-venv
fi

# ── Node.js 20+ ────────────────────────────────────────────────────────────
echo -e "\033[1;33m[*] Verificando Node.js...\033[0m"
NODE_OK=false
if command -v node &>/dev/null; then
    NODE_VER=$(node -e "process.stdout.write(String(process.versions.node.split('.')[0]))" 2>/dev/null)
    if [ "${NODE_VER:-0}" -ge 20 ] 2>/dev/null; then
        echo -e "\033[1;32m[OK] Node.js $(node --version) encontrado.\033[0m"
        NODE_OK=true
    else
        echo -e "\033[1;33m[!] Node.js $(node --version) es muy antiguo. Se necesita v20+.\033[0m"
    fi
fi

if [ "$NODE_OK" = false ]; then
    # Try nvm
    export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
    if [ -s "$NVM_DIR/nvm.sh" ]; then
        source "$NVM_DIR/nvm.sh"
        echo -e "\033[1;33m[*] Instalando Node.js 20 via nvm...\033[0m"
        nvm install 20 && nvm use 20 && nvm alias default 20
        NODE_OK=true
    # Try Homebrew (macOS)
    elif command -v brew &>/dev/null; then
        echo -e "\033[1;33m[*] Instalando Node.js 20 via Homebrew...\033[0m"
        brew install node@20
        brew link --overwrite --force node@20
        export PATH="/opt/homebrew/opt/node@20/bin:/usr/local/opt/node@20/bin:$PATH"
        NODE_OK=true
    # Try apt (Linux)
    elif command -v apt-get &>/dev/null; then
        echo -e "\033[1;33m[*] Instalando Node.js 20 via apt...\033[0m"
        curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
        sudo apt-get install -y nodejs
        NODE_OK=true
    else
        echo -e "\033[1;31m[!] No se pudo instalar Node.js automáticamente.\033[0m"
        echo -e "\033[1;37m    Instala Node.js 20+ manualmente desde: https://nodejs.org\033[0m"
        echo -e "\033[1;37m    O usa nvm: https://github.com/nvm-sh/nvm\033[0m"
    fi
fi

# Install Python 3.12 via uv
echo -e "\033[1;33m[*] Configurando Python 3.12...\033[0m"
uv python install 3.12 2>/dev/null || echo -e "\033[1;33m[!] No se pudo instalar Python 3.12 via uv, intentando continuar...\033[0m"

# Create virtual environment with seed packages (ensures pip is available)
echo -e "\033[1;33m[*] Creando entorno virtual...\033[0m"

# Remove old venv if it has no pip
if [ -f ".venv/bin/python" ] && [ ! -f ".venv/bin/pip" ]; then
    echo -e "\033[1;33m[!] venv sin pip detectado. Recreando...\033[0m"
    rm -rf .venv
fi

uv venv --seed
echo -e "\033[1;32m[OK] Entorno virtual creado con pip.\033[0m"

# Setup .env config
echo -e "\033[1;33m[*] Revisando configuración (.env)...\033[0m"
if [ ! -f "config/.env" ]; then
    if [ -f "config/.env.example" ]; then
        cp config/.env.example config/.env
        echo -e "\033[1;32m[OK] 'config/.env' creado desde el ejemplo.\033[0m"
    else
        mkdir -p config
        echo "# OpenACM Configuration" > config/.env
        echo -e "\033[1;32m[OK] 'config/.env' creado (vacío).\033[0m"
    fi
else
    echo -e "\033[1;32m[OK] 'config/.env' ya existe.\033[0m"
fi

# Install Python dependencies
echo -e "\033[1;33m[*] Instalando dependencias del proyecto (puede tardar unos minutos)...\033[0m"
uv pip install -e .
echo -e "\033[1;32m[OK] Dependencias instaladas.\033[0m"

# Install optional media-processing extras (MarkItDown converters + audio)
echo -e "\033[1;33m[*] Instalando extras de procesamiento de archivos (MarkItDown)...\033[0m"
uv pip install "markitdown[docx,xlsx,pptx,audio-transcription]" 2>/dev/null \
    && echo -e "\033[1;32m[OK] MarkItDown extras instalados.\033[0m" \
    || echo -e "\033[1;33m[!] No se pudieron instalar los extras de MarkItDown (no crítico).\033[0m"

# Install AI/ML enhancement libraries
echo -e "\033[1;33m[*] Instalando librerías de mejora (chonkie, docling, instructor)...\033[0m"
uv pip install "chonkie[sentence]>=1.0" "docling>=2.0" "instructor>=1.0" 2>/dev/null \
    && echo -e "\033[1;32m[OK] Librerías de mejora instaladas.\033[0m" \
    || echo -e "\033[1;33m[!] No se pudieron instalar algunas librerías de mejora (no crítico).\033[0m"

# Install Playwright browsers
echo -e "\033[1;33m[*] Descargando navegadores para el Agente Web (Playwright)...\033[0m"
uv run playwright install --with-deps chromium || echo -e "\033[1;33m[!] No se pudo instalar Playwright automáticamente. Puedes instalarlo después: uv run playwright install chromium\033[0m"

# Final verification
echo ""
echo -e "\033[1;33m[*] Verificando instalación...\033[0m"
if uv run python -c "import openacm; print('OK')" 2>/dev/null | grep -q "OK"; then
    echo -e "\033[1;32m[OK] OpenACM importa correctamente.\033[0m"
else
    echo -e "\033[1;33m[!] Advertencia: Hubo problemas al verificar la instalación.\033[0m"
fi

echo ""
echo -e "\033[1;32m==========================================\033[0m"
echo -e "\033[1;32m  ✅ ¡Instalación Completada con Éxito!\033[0m"
echo -e "\033[1;32m==========================================\033[0m"
echo ""
echo -e "\033[1;37m  Antes de iniciar, asegúrate de configurar\033[0m"
echo -e "\033[1;37m  tus API keys en: \033[1;36mconfig/.env\033[0m"
echo ""
echo -e "\033[1;37m  Docs:\033[0m"
echo -e "\033[0;37m  - README.md - Guía de inicio rápido\033[0m"
echo -e "\033[0;37m  - SKILLS_TOOLS_GUIDE.md - Cómo crear skills y tools\033[0m"
echo ""
echo -e "\033[1;36m==========================================\033[0m"
echo ""

read -p "¿Lanzar OpenACM ahora? (S/n): " choice
if [[ "$choice" == "" || "$choice" =~ ^[sSyY] ]]; then
    echo ""
    echo -e "\033[1;32mIniciando OpenACM...\033[0m"
    echo ""
    exec scripts/run.sh
else
    echo ""
    echo -e "\033[1;36mPara iniciar más tarde, ejecuta: openacm start\033[0m"
    echo ""
fi