Añade launchers de macOS/Linux con un click y hace runtime_control cross-platform

Equivalentes .command (doble-clic en Finder) de los .bat de Windows:
- setup_mac.command: bootstrap con un click (detecta Python 3.10+, crea .venv,
  instala requirements + Chromium de Playwright, copia .env.example -> .env).
- start/stop/restart/start_persistent_profile.command: espejo de los .bat,
  lanzan el server con nohup usando el python del .venv.
- mp_common.sh: helper compartido (raíz, venv, banners).

runtime_control.py ahora es cross-platform (IS_WINDOWS): lsof/ps/pgrep/kill en
POSIX, netstat/PowerShell/taskkill en Windows. _kill_tree_posix mata el árbol
padre+worker de uvicorn con SIGTERM.

.venv/ añadido a .gitignore. Docs actualizadas (CLAUDE.md, AGENTS.md,
PLAYWRIGHT_SESSION.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 15:02:47 -06:00
parent a35d26fac0
commit 2a37a4ffbf
11 changed files with 525 additions and 26 deletions
+83
View File
@@ -0,0 +1,83 @@
#!/usr/bin/env bash
# ---------------------------------------------------------------------------
# setup_mac.command — Inicialización con UN CLICK de MP Manager en macOS/Linux.
#
# Equivalente "de arranque" que NO existe en Windows (allá se asume Python en el
# PATH). En macOS el Python del sistema suele ser 3.9 y está bloqueado para pip
# (PEP 668), así que aquí:
# 1. Detecta un Python 3.10+ del sistema.
# 2. Crea un entorno virtual aislado en .venv (no toca el Python del sistema).
# 3. Instala las dependencias de requirements.txt.
# 4. Instala el navegador Chromium para Playwright.
# 5. Crea el archivo .env a partir de .env.example si no existe.
#
# Es idempotente: puedes volver a ejecutarlo para actualizar dependencias.
# Doble clic en Finder para correrlo.
# ---------------------------------------------------------------------------
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/mp_common.sh"
banner "MP Manager - Configuración inicial (macOS / Linux)"
# --- 1. Buscar Python 3.10+ del sistema -----------------------------------
info "Buscando un Python ${PY_MIN_MAJOR}.${PY_MIN_MINOR}+ en el sistema..."
SYS_PY="$(find_system_python || true)"
if [ -z "$SYS_PY" ]; then
err "No se encontró Python ${PY_MIN_MAJOR}.${PY_MIN_MINOR} o superior."
echo
echo " Instálalo y reintenta. La forma más simple en macOS:"
echo " brew install python@3.12"
echo " (o descárgalo de https://www.python.org/downloads/macos/)"
hold_window
exit 1
fi
ok "Python encontrado: $SYS_PY ($("$SYS_PY" --version 2>&1))"
# --- 2. Crear / reutilizar el entorno virtual ------------------------------
if [ -x "$VENV_PY" ]; then
info "Entorno virtual ya existe en .venv (se reutiliza)."
else
info "Creando entorno virtual en .venv ..."
"$SYS_PY" -m venv "$VENV_DIR"
ok "Entorno virtual creado."
fi
# --- 3. Instalar dependencias ---------------------------------------------
info "Actualizando pip ..."
"$VENV_PY" -m pip install --upgrade pip >/dev/null
info "Instalando dependencias de requirements.txt (puede tardar) ..."
"$VENV_PY" -m pip install -r "$PROJECT_DIR/requirements.txt"
ok "Dependencias de Python instaladas."
# --- 4. Navegador de Playwright -------------------------------------------
# Los scripts ghl_browser_*.py automatizan la UI web con Chromium. Sin esto
# fallarían al lanzar el navegador.
info "Instalando Chromium para Playwright ..."
if "$VENV_PY" -m playwright install chromium; then
ok "Chromium instalado."
else
warn "No se pudo instalar Chromium para Playwright."
warn "El dashboard funcionará; solo los scripts de navegador (workflows) fallarán."
warn "Puedes reintentar luego con: .venv/bin/python -m playwright install chromium"
fi
# --- 5. Archivo .env -------------------------------------------------------
if [ -f "$PROJECT_DIR/.env" ]; then
info "Archivo .env ya existe (no se sobrescribe)."
elif [ -f "$PROJECT_DIR/.env.example" ]; then
cp "$PROJECT_DIR/.env.example" "$PROJECT_DIR/.env"
ok "Creado .env a partir de .env.example — revísalo y completa tus credenciales."
else
warn "No hay .env.example; omito la creación de .env."
fi
echo
banner "Configuración completada"
echo " Para arrancar el servidor: doble clic en start.command"
echo " Para detenerlo: doble clic en stop.command"
echo " Para reiniciarlo: doble clic en restart.command"
echo
echo " La primera vez, macOS puede pedir permiso para abrir un .command"
echo " descargado: clic derecho > Abrir, o Ajustes > Privacidad y seguridad."
hold_window