#!/usr/bin/env bash
# Console v2 launcher — invoked by LaunchAgent.
# Bootstraps a venv if needed; runs uvicorn on port 8431.
set -euo pipefail

# launchd gives us a minimal PATH that omits /opt/homebrew/bin. The API uses
# shutil.which() to find auxiliary binaries (ttyd for the chat terminal,
# etc.), so without this they all "fail to install" at runtime. Mirror the
# user's interactive shell PATH.
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"

REPO=/Users/joeturnerlin/CLAUDE_PROJECTS
VENV="$HOME/.recoil/console-v2-venv"
LOG_DIR="$HOME/.recoil"
mkdir -p "$LOG_DIR"

REQ_HASH_FILE="$VENV/.req_hash"
CUR_HASH=$(shasum -a 256 "$REPO/recoil/api/requirements.txt" | cut -d' ' -f1)

if [ ! -d "$VENV" ]; then
  /usr/bin/python3 -m venv "$VENV"
  "$VENV/bin/pip" install --upgrade pip
  "$VENV/bin/pip" install -r "$REPO/recoil/api/requirements.txt"
  echo "$CUR_HASH" > "$REQ_HASH_FILE"
fi

# Re-install requirements if the lockfile is fresher than the venv stamp.
PREV_HASH=$(cat "$REQ_HASH_FILE" 2>/dev/null || echo none)
if [ "$CUR_HASH" != "$PREV_HASH" ]; then
  "$VENV/bin/pip" install -r "$REPO/recoil/api/requirements.txt"
  echo "$CUR_HASH" > "$REQ_HASH_FILE"
fi

cd "$REPO"
exec "$VENV/bin/uvicorn" recoil.api.main:app \
  --host 0.0.0.0 \
  --port 8431 \
  --log-level info
