Files
mrcharles 79d93b6c49 ops(scripts): dispatch, queue gating, heartbeat, quota probe
dispatch-turn.sh (headless turn launcher with TURN_MODEL routing),
queue-after.sh (serial gate chain + quota-wall guard), pmo-heartbeat.sh
(PMO wake loop), quota-probe-then-chain.sh (post-wall relaunch).
2026-08-29 05:22:43 -05:00

42 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# pmo-loop.sh [pmo|work] — keep a crush session alive inside its screen.
ROLE="${1:-pmo}"
case "$ROLE" in
pmo) FRESH="$HOME/.coordinate/RELAUNCH-FRESH"; PIN="$HOME/.coordinate/PMO-SESSION-ID" ;;
work) FRESH="$HOME/.coordinate/RELAUNCH-FRESH-WORK"; PIN="$HOME/.coordinate/WORK-SESSION-ID" ;;
*) echo "usage: $0 [pmo|work]" >&2; exit 1 ;;
esac
LOG="$HOME/.coordinate/logs/${ROLE}-relaunch.log"
LEDGER=/home/_crossfeed/metrics/launches.jsonl
ledger() { printf '%s\n' "$1" >> "$LEDGER" 2>/dev/null || true; }
cd "$HOME"
export TERM="${TERM:-xterm-256color}"
export PATH="$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
while true; do
started=$(date +%s)
mode=continue
if [ -f "$FRESH" ]; then
rm -f "$FRESH"
mode=fresh
echo "$(date -Is) relaunch FRESH" >> "$LOG"
crush --yolo
elif [ -s "$PIN" ]; then
sid=$(cat "$PIN")
mode=pinned:$sid
echo "$(date -Is) relaunch PINNED $sid" >> "$LOG"
crush --yolo --session "$sid"
else
echo "$(date -Is) relaunch CONTINUE" >> "$LOG"
crush --yolo --continue
fi
rc=$?
rt=$(( $(date +%s) - started ))
ledger "{\"ts\":\"$(date -Is)\",\"user\":\"$USER\",\"role\":\"$ROLE\",\"mode\":\"$mode\",\"rc\":$rc,\"runtime_s\":$rt}"
if [ "$rt" -lt 60 ]; then
echo "$(date -Is) short run (${rt}s rc=$rc) - backoff 60s" >> "$LOG"
sleep 60
else
sleep 2
fi
done