#!/bin/bash # Agents Orchestrator — Electrobun management script # Usage: ./scripts/launch.sh [options] # # Commands: # start [--clean] Kill old, start PTY+Vite+Electrobun (--clean removes build/) # stop Kill all running instances # restart [--clean] Stop then start # clean Remove build/, node_modules/.electrobun-cache, stale processes # rebuild Full clean + npm install + vite build + rebuild PTY + rebuild C lib # status Show running processes and ports # kill-stale Kill ALL stale agor-ptyd instances (accumulate over sessions) # build-native Rebuild libagor-resize.so and agor-ptyd # logs Tail Electrobun output set -e ROOT="$(cd "$(dirname "$0")/.." && pwd)" EBUN="$ROOT/ui-electrobun" PTYD="$ROOT/agor-pty/target/release/agor-ptyd" RESIZE_SO="$ROOT/agor-pty/native/libagor-resize.so" RESIZE_C="$ROOT/agor-pty/native/agor_resize.c" LOG="/tmp/agor-electrobun.log" cmd_stop() { echo "[agor] Stopping all instances..." pkill -f "electrobun|WebKit|AgentOrch|launcher" 2>/dev/null || true fuser -k 9760/tcp 2>/dev/null || true sleep 1 echo "[agor] Stopped." } cmd_kill_stale() { echo "[agor] Killing ALL stale agor-ptyd instances..." pkill -f agor-ptyd 2>/dev/null || true sleep 1 local count=$(pgrep -fc agor-ptyd 2>/dev/null || echo 0) echo "[agor] Remaining ptyd processes: $count" } cmd_clean() { echo "[agor] Cleaning build artifacts..." rm -rf "$EBUN/build/" rm -rf "$EBUN/node_modules/.electrobun-cache/" rm -rf "$EBUN/node_modules/electrobun/.cache/" rm -f "$LOG" echo "[agor] Cleaned." } cmd_build_native() { echo "[agor] Building libagor-resize.so..." cd "$ROOT/agor-pty/native" gcc -shared -fPIC -o libagor-resize.so agor_resize.c $(pkg-config --cflags --libs gtk+-3.0) echo "[agor] Built: $RESIZE_SO" echo "[agor] Building agor-ptyd..." cd "$ROOT/agor-pty" cargo build --release 2>&1 | tail -3 echo "[agor] Built: $PTYD" } cmd_rebuild() { cmd_stop cmd_kill_stale cmd_clean echo "[agor] Installing npm dependencies..." cd "$EBUN" && npm install --legacy-peer-deps 2>&1 | tail -3 echo "[agor] Building Vite frontend..." cd "$EBUN" && npx vite build 2>&1 | tail -1 cmd_build_native echo "[agor] Full rebuild complete." } cmd_start() { local clean=false [[ "${1:-}" == "--clean" ]] && clean=true cmd_stop if $clean; then cmd_clean fi # Kill excess stale ptyd (keep max 1) local ptyd_count=$(pgrep -fc agor-ptyd 2>/dev/null || echo 0) if [ "$ptyd_count" -gt 1 ]; then echo "[agor] Killing $ptyd_count stale ptyd instances..." pkill -f agor-ptyd 2>/dev/null || true sleep 1 fi echo "[agor] Starting PTY daemon..." pgrep -f agor-ptyd > /dev/null 2>&1 || "$PTYD" &>/dev/null & sleep 1 echo "[agor] Starting Vite on :9760..." fuser 9760/tcp > /dev/null 2>&1 || (cd "$EBUN" && npx vite dev --port 9760 --host localhost &>/dev/null &) sleep 3 echo "[agor] Starting Electrobun..." cd "$EBUN" && npx electrobun dev 2>&1 | tee "$LOG" } cmd_restart() { cmd_stop sleep 1 cmd_start "$@" } cmd_status() { echo "=== Processes ===" echo "PTY daemons: $(pgrep -fc agor-ptyd 2>/dev/null || echo 0)" echo "Vite: $(fuser 9760/tcp 2>/dev/null && echo 'running' || echo 'stopped')" echo "Electrobun: $(pgrep -fc electrobun 2>/dev/null || echo 0)" echo "WebKit: $(pgrep -fc WebKitWebProcess 2>/dev/null || echo 0)" echo "" echo "=== Ports ===" echo "9760 (Vite): $(fuser 9760/tcp 2>/dev/null || echo 'free')" echo "" echo "=== Window ===" xdotool search --class "WebKit" 2>/dev/null | head -1 || echo "No window found" } cmd_logs() { if [ -f "$LOG" ]; then tail -f "$LOG" else echo "[agor] No log file at $LOG. Start with: ./scripts/launch.sh start" fi } # Dispatch case "${1:-help}" in start) shift; cmd_start "$@" ;; stop) cmd_stop ;; restart) shift; cmd_restart "$@" ;; clean) cmd_clean ;; rebuild) cmd_rebuild ;; status) cmd_status ;; kill-stale) cmd_kill_stale ;; build-native) cmd_build_native ;; logs) cmd_logs ;; *) echo "Usage: $0 [options]" echo "" echo "Commands:" echo " start [--clean] Start the app (--clean removes build first)" echo " stop Stop all instances" echo " restart [--clean] Stop then start" echo " clean Remove build artifacts and caches" echo " rebuild Full clean + npm install + vite build + native build" echo " status Show running processes and ports" echo " kill-stale Kill ALL stale agor-ptyd instances" echo " build-native Rebuild libagor-resize.so + agor-ptyd" echo " logs Tail Electrobun output" ;; esac