Files
hermes-config/tmux/tower-session.sh
2026-03-18 18:55:58 -04:00

60 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# ── Tower Session ──────────────────────────────────────────────────────
# Two-pane tmux session: Hermes ↔ Timmy conversation + status dashboard
#
# Left pane (65%): Hermes loop — drives the conversation, shows both sides
# Right pane (35%): Status dashboard — loop health, message stats, infra
#
# Communication: file-based message passing via ~/.tower/
# Self-healing: watchdog checks both panes, restarts if dead
#
# Source-controlled: gitea/rockachopa/hermes-config
# ───────────────────────────────────────────────────────────────────────
set -euo pipefail
SESSION="tower"
TOWER_DIR="$HOME/.tower"
TOWER_BIN="$HOME/hermes-config/bin"
export PATH="$HOME/.local/bin:$HOME/.hermes/bin:/usr/local/bin:$PATH"
# ── Setup ─────────────────────────────────────────────────────────────
mkdir -p "$TOWER_DIR"
# If session already exists, just attach
if tmux has-session -t "$SESSION" 2>/dev/null; then
exec tmux attach -t "$SESSION"
fi
# ── Create session with two panes ─────────────────────────────────────
# Left pane: Hermes conversation loop (drives the conversation, shows both sides)
tmux new-session -d -s "$SESSION" -n "tower" -x 200 -y 50
# Right pane: Status dashboard (35% width)
tmux split-window -h -p 35 -t "$SESSION:1.1"
# Set pane titles
tmux select-pane -t "$SESSION:1.1" -T "⚡ Tower"
tmux select-pane -t "$SESSION:1.2" -T "📊 Status"
# ── Start the loops ──────────────────────────────────────────────────
# Pane 1: Hermes loop (conversation driver — shows Hermes & Timmy messages)
tmux send-keys -t "$SESSION:1.1" \
"$TOWER_BIN/tower-hermes.sh" Enter
# Pane 2: Status dashboard
tmux send-keys -t "$SESSION:1.2" \
"$TOWER_BIN/tower-status.sh" Enter
# Hidden window 2: Timmy loop (no need to watch — status pane monitors health)
tmux new-window -t "$SESSION" -n "timmy-bg"
tmux send-keys -t "$SESSION:2" \
"$TOWER_BIN/tower-timmy.sh" Enter
# Back to window 1, focus conversation pane
tmux select-window -t "$SESSION:1"
tmux select-pane -t "$SESSION:1.1"
# ── Attach ────────────────────────────────────────────────────────────
exec tmux attach -t "$SESSION"