mirror of
https://github.com/theniceboy/.config.git
synced 2026-04-20 19:46:32 +08:00
73 lines
2.2 KiB
Bash
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"
|