#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" GOOSED_ROOT="${GOOSED_ROOT:-/Users/john/Project/tkmind_go-v141-prod-prep}" RUN_SCRIPT="${GOOSED_RUN_SCRIPT:-${GOOSED_ROOT}/scripts/run-goosed-local.sh}" PORTS="${GOOSED_NATIVE_POOL_PORTS:-18006,18007}" LAUNCHD_DIR="${HOME}/Library/LaunchAgents" GUI="gui/$(id -u)" LOG_ROOT="${GOOSED_ROOT}" usage() { cat <&2 usage >&2 exit 2 ;; esac done if [[ ! -x "${RUN_SCRIPT}" ]]; then echo "run script not found: ${RUN_SCRIPT}" >&2 exit 1 fi if lsof -nP -iTCP:8081 -sTCP:LISTEN 2>/dev/null | grep -q "cn.tkmind.memind-portal"; then echo "refusing to continue: production Portal appears to own 8081" >&2 exit 1 fi mkdir -p "${LAUNCHD_DIR}" "${LOG_ROOT}" IFS=',' read -r -a port_list <<< "${PORTS}" install_port() { local port="$1" local label="com.tkmind.local-goosed-${port}" local plist="${LAUNCHD_DIR}/${label}.plist" local stdout_log="${LOG_ROOT}/goosed.local-${port}.launchd.log" local stderr_log="${LOG_ROOT}/goosed.local-${port}.launchd.err.log" cat > "${plist}" < Label ${label} ProgramArguments /bin/bash ${RUN_SCRIPT} ${port} WorkingDirectory ${GOOSED_ROOT} RunAtLoad KeepAlive StandardOutPath ${stdout_log} StandardErrorPath ${stderr_log} EOF plutil -lint "${plist}" >/dev/null launchctl bootout "${GUI}/${label}" 2>/dev/null || true launchctl bootstrap "${GUI}" "${plist}" launchctl enable "${GUI}/${label}" launchctl kickstart -k "${GUI}/${label}" echo "installed ${label} on port ${port}" } # Retire legacy single-instance label in favor of per-port labels. launchctl bootout "${GUI}/com.tkmind.local-goosed" 2>/dev/null || true legacy_plist="${LAUNCHD_DIR}/com.tkmind.local-goosed.plist" if [[ -f "${legacy_plist}" ]]; then mv "${legacy_plist}" "${legacy_plist}.bak-$(date +%Y%m%d-%H%M%S)" echo "archived legacy plist: ${legacy_plist}" fi for port in "${port_list[@]}"; do port="${port// /}" [[ -n "${port}" ]] || continue install_port "${port}" done echo "" echo "Verify:" echo " for p in ${PORTS//,/ }; do curl -kfsS https://127.0.0.1:\$p/status; echo \" <- \$p\"; done" echo " node ${ROOT}/scripts/check-local-goosed-pool.mjs"