#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" NODE_BIN="${NODE_BIN:-/opt/homebrew/opt/node@24/bin/node}" DEFAULT_MONITOR_SCRIPT="$ROOT/scripts/monitor-goosed-fds.mjs" if [[ -x "/Users/john/Project/tkmind_go/scripts/monitor-goosed-fds.mjs" ]]; then DEFAULT_MONITOR_SCRIPT="/Users/john/Project/tkmind_go/scripts/monitor-goosed-fds.mjs" fi MONITOR_SCRIPT="${GOOSED_MONITOR_SCRIPT:-$DEFAULT_MONITOR_SCRIPT}" MONITOR_ROOT="$(cd "$(dirname "$MONITOR_SCRIPT")/.." && pwd)" PLIST="$HOME/Library/LaunchAgents/cn.tkmind.goosed-monitor.plist" LOG="$HOME/Library/Logs/goosed-monitor.log" GUI="gui/$(id -u)" mkdir -p "$HOME/Library/LaunchAgents" "$HOME/Library/Logs" if [[ ! -x "$MONITOR_SCRIPT" ]]; then echo "monitor script not found or not executable: $MONITOR_SCRIPT" >&2 echo "Set GOOSED_MONITOR_SCRIPT to a stable goosed ops script path." >&2 exit 1 fi cat > "$PLIST" < Label cn.tkmind.goosed-monitor ProgramArguments $NODE_BIN $MONITOR_SCRIPT WorkingDirectory $MONITOR_ROOT StartInterval 60 RunAtLoad StandardOutPath $LOG StandardErrorPath $LOG EnvironmentVariables PATH /opt/homebrew/bin:/opt/homebrew/opt/node@24/bin:/usr/local/bin:/usr/bin:/bin GOOSED_FD_WARN 180 GOOSED_FD_RESTART 3200 SANDBOX_MCP_MAX_TOTAL 80 SANDBOX_MCP_MAX_PER_ROOT 2 EOF plutil -lint "$PLIST" launchctl bootout "$GUI/cn.tkmind.goosed-monitor" 2>/dev/null || true launchctl bootstrap "$GUI" "$PLIST" launchctl enable "$GUI/cn.tkmind.goosed-monitor" launchctl kickstart -k "$GUI/cn.tkmind.goosed-monitor" echo "installed $PLIST" echo "script: $MONITOR_SCRIPT" echo "log: $LOG"