Files
hermes-config/bin/timmy-watchdog.sh

42 lines
1.6 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# ── Timmy Loop Watchdog ────────────────────────────────────────────────
# Checks if the timmy-loop tmux session is alive. Restarts if dead.
# Designed to run via cron every 5 minutes.
# ───────────────────────────────────────────────────────────────────────
export PATH="/opt/homebrew/bin:$HOME/.local/bin:$HOME/.hermes/bin:$PATH"
SESSION="timmy-loop"
LAUNCHER="$HOME/.hermes/bin/timmy-tmux.sh"
WATCHDOG_LOG="$HOME/Timmy-Time-dashboard/.loop/watchdog.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$WATCHDOG_LOG"
}
# Check if tmux session exists
if tmux has-session -t "$SESSION" 2>/dev/null; then
# Session exists. Check if the loop pane (pane 0) is still running.
PANE0_PID=$(tmux list-panes -t "$SESSION:.0" -F '#{pane_pid}' 2>/dev/null)
if [ -n "$PANE0_PID" ] && kill -0 "$PANE0_PID" 2>/dev/null; then
# All good, loop is alive
exit 0
else
log "WARN: Session exists but loop pane is dead. Restarting..."
tmux kill-session -t "$SESSION" 2>/dev/null
fi
else
log "WARN: Session '$SESSION' not found."
fi
# Check for a stop file — lets Alexander or an agent halt the loop
if [ -f "$HOME/Timmy-Time-dashboard/.loop/STOP" ]; then
log "STOP file found. Not restarting. Remove .loop/STOP to resume."
exit 0
fi
log "Restarting timmy-loop session..."
export PATH="$HOME/.local/bin:$HOME/.hermes/bin:$PATH"
"$LAUNCHER"
log "Session restarted."