#!/usr/bin/env bash # Start (or restart) the MODELBEAST server headless on port 8777. # NOTE: exactly ONE uvicorn worker (no --workers). The in-process asyncio job # queue + the single shared SQLite connection require a single worker; adding # workers would fork the queue and corrupt job state. Do not "optimize" this. # On first run the owner account + one-time password print to data/server.log. set -euo pipefail cd "$(dirname "$0")/.." lsof -ti:8777 | xargs kill 2>/dev/null || true sleep 1 nohup /opt/homebrew/bin/uv run uvicorn server.main:app --host 0.0.0.0 --port 8777 \ > data/server.log 2>&1 & sleep 2 curl -sf -o /dev/null http://localhost:8777/api/health \ && echo "MODELBEAST up: http://$( /Applications/Tailscale.app/Contents/MacOS/Tailscale ip -4 2>/dev/null || echo localhost):8777 (log: data/server.log)" \ || { echo "FAILED to start — tail data/server.log:"; tail -20 data/server.log; exit 1; }