learning_ai_common_plat/__LOCAL_LLMs/start-dashboard.sh
saravanakumardb1 112341e162 fix(local-llms): harden WSL setup and dashboard Ollama connectivity
Stabilize Windows+WSL setup by fixing script line-ending pitfalls, WSL Ollama host detection, and dashboard startup behavior so models are detected reliably in Mission Control.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-22 16:44:58 -08:00

133 lines
4.7 KiB
Bash
Executable File

#!/bin/bash
# ============================================================
# Start Mission Control Dashboard + Ollama
#
# Usage:
# bash start-dashboard.sh # start dashboard + ensure Ollama running
# bash start-dashboard.sh stop # stop dashboard
# bash start-dashboard.sh status # check status
# ============================================================
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DASHBOARD_DIR="$SCRIPT_DIR/dashboard"
PORT=3000
# Ollama URL: respect OLLAMA_HOST env var, auto-detect WSL2 gateway if needed
OLLAMA_URL="${OLLAMA_HOST:-http://localhost:11434}"
OLLAMA_URL="${OLLAMA_URL%/}"
if ! curl -s --max-time 2 "$OLLAMA_URL/api/tags" &>/dev/null; then
if [ -r /proc/version ] && grep -qi microsoft /proc/version 2>/dev/null; then
GW=$(ip route show default 2>/dev/null | awk '{print $3}' | head -1)
if [ -n "$GW" ] && curl -s --max-time 2 "http://${GW}:11434/api/tags" &>/dev/null; then
OLLAMA_URL="http://${GW}:11434"
fi
fi
fi
export OLLAMA_HOST="$OLLAMA_URL"
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
ok() { echo -e "${GREEN}[OK]${NC} $1"; }
warn() { echo -e "${YELLOW}[!!]${NC} $1"; }
fail() { echo -e "${RED}[FAIL]${NC} $1"; }
case "${1:-start}" in
stop)
echo "Stopping dashboard..."
PID=$(lsof -ti :$PORT 2>/dev/null)
if [ -n "$PID" ]; then
kill "$PID" 2>/dev/null
ok "Dashboard stopped (PID $PID)"
else
warn "Dashboard not running on port $PORT"
fi
exit 0
;;
status)
echo "=== Status ==="
# Ollama
if curl -s --max-time 2 "$OLLAMA_URL/api/tags" &>/dev/null; then
MODELS=$(curl -s "$OLLAMA_URL/api/tags" | python3 -c "import sys,json; print(len(json.load(sys.stdin).get('models',[])))" 2>/dev/null || echo "?")
ok "Ollama running at $OLLAMA_URL ($MODELS models)"
else
fail "Ollama not running at $OLLAMA_URL"
fi
# Dashboard
if curl -s --max-time 2 "http://localhost:$PORT" &>/dev/null; then
ok "Dashboard running at http://localhost:$PORT"
else
fail "Dashboard not running"
fi
exit 0
;;
start)
echo "=== Starting Mission Control ==="
echo ""
# 1. Check Ollama connectivity (don't try to start it -- on WSL2 it runs on Windows)
if curl -s --max-time 2 "$OLLAMA_URL/api/tags" &>/dev/null; then
ok "Ollama running at $OLLAMA_URL"
else
if command -v ollama &>/dev/null; then
echo "Starting Ollama..."
ollama serve &>/dev/null &
sleep 2
if curl -s --max-time 2 "$OLLAMA_URL/api/tags" &>/dev/null; then
ok "Ollama started"
else
warn "Could not start Ollama. It may be running on Windows already."
fi
else
warn "Ollama not reachable at $OLLAMA_URL (on WSL2, ensure it is running on Windows with OLLAMA_HOST=0.0.0.0:11434)"
fi
fi
# 2. Check if dashboard already running
if curl -s --max-time 2 "http://localhost:$PORT" &>/dev/null; then
ok "Dashboard already running at http://localhost:$PORT"
exit 0
fi
# 3. Install deps if needed
if [ ! -d "$DASHBOARD_DIR/node_modules" ]; then
echo "Installing dependencies..."
(cd "$DASHBOARD_DIR" && npm install --silent)
ok "Dependencies installed"
fi
# 4. Start dashboard (use node directly -- npx/next may lack +x on /mnt/ NTFS)
echo "Starting dashboard on port $PORT..."
LOGFILE="$DASHBOARD_DIR/.next-dev.log"
(cd "$DASHBOARD_DIR" && OLLAMA_HOST="$OLLAMA_URL" node node_modules/next/dist/bin/next dev > "$LOGFILE" 2>&1 &)
# Wait for it to be ready (Next.js on /mnt/d can be slow to compile)
echo " Waiting for Next.js to compile (this can take 1-2 min on /mnt/d)..."
for i in $(seq 1 90); do
if curl -s --max-time 1 "http://localhost:$PORT" &>/dev/null; then
ok "Dashboard ready at http://localhost:$PORT"
echo ""
echo "Open: http://localhost:$PORT"
echo "Stop: bash start-dashboard.sh stop"
exit 0
fi
sleep 1
done
warn "Dashboard did not respond within 90s."
echo " It may still be compiling. Check the log:"
echo " tail -f $LOGFILE"
echo " Or start manually:"
echo " cd $DASHBOARD_DIR && npx next dev"
exit 1
;;
*)
echo "Usage: bash start-dashboard.sh [start|stop|status]"
exit 1
;;
esac