theniceboy/agent-tracker/scripts/focus_latest_notified.sh
2026-03-27 21:04:47 -07:00

73 lines
2.2 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
AGENT_BIN="$HOME/.config/agent-tracker/bin/agent"
[[ -x "$AGENT_BIN" ]] || exit 0
command -v jq >/dev/null 2>&1 || exit 0
state=$("$AGENT_BIN" tracker state 2>/dev/null || true)
[[ -n "$state" ]] || exit 0
target=$(echo "$state" | jq -r '
(.tasks // [])
| map(
select(
.status == "completed" and
(.acknowledged != true) and
(.session_id // "") != "" and
(.window_id // "") != ""
)
| . + {__ts: ((.completed_at // .started_at // "") | (fromdateiso8601? // 0))}
)
| if length == 0 then empty else max_by(.__ts) end
| [.session_id, .window_id, (.pane // "")] | @tsv
' 2>/dev/null || true)
[[ -n "$target" ]] || exit 0
IFS=$'\t' read -r sid wid pid <<< "$target"
[[ -n "${sid:-}" && -n "${wid:-}" ]] || exit 0
task_pid="$pid"
pane_exists() {
local pane="$1"
[[ -n "$pane" ]] || return 1
tmux list-panes -a -F "#{pane_id}" 2>/dev/null | awk -v p="$pane" '$1==p {found=1} END{exit(found?0:1)}'
}
resolve_first_pane_for_window() {
local window="$1"
tmux list-panes -t "$window" -F "#{pane_id}" 2>/dev/null | awk 'NF {print $1; exit}'
}
if pane_exists "$pid"; then
resolved=$(tmux display-message -p -t "$pid" '#{session_id}:::#{window_id}:::#{pane_id}' 2>/dev/null | tr -d '\r\n')
rsid=$(printf '%s' "$resolved" | awk -F ':::' '{print $1}')
rwid=$(printf '%s' "$resolved" | awk -F ':::' '{print $2}')
rpid=$(printf '%s' "$resolved" | awk -F ':::' '{print $3}')
if [[ -n "$rsid" && -n "$rwid" && -n "$rpid" ]]; then
sid="$rsid"
wid="$rwid"
pid="$rpid"
fi
else
pid=$(resolve_first_pane_for_window "$wid")
fi
[[ -n "${pid:-}" ]] || exit 0
RUN_DIR="$HOME/.config/agent-tracker/run"
mkdir -p "$RUN_DIR"
current=$(tmux display-message -p "#{session_id}:::#{window_id}:::#{pane_id}:::#{session_name}:::#{window_index}:::#{pane_index}" | tr -d '\r\n')
if [[ -n "$current" ]]; then
printf '%s\n' "$current" > "$RUN_DIR/jump_back.txt"
fi
if [[ -x "$AGENT_BIN" ]]; then
ack_pid="$pid"
[[ -n "${task_pid:-}" ]] && ack_pid="$task_pid"
"$AGENT_BIN" tracker command acknowledge -session-id "$sid" -window-id "$wid" -pane "$ack_pid" >/dev/null 2>&1 || true
fi
tmux switch-client -t "$sid" \; select-window -t "$wid" \; select-pane -t "$pid"