57 lines
1.1 KiB
Bash
Executable File
57 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Poll all anvillm sessions and notify on running->idle transitions
|
|
|
|
# Track previous states: session_id=state
|
|
prev_states=""
|
|
|
|
get_sessions() {
|
|
9p read agent/list 2>/dev/null | awk '{print $1}'
|
|
}
|
|
|
|
get_state() {
|
|
9p read "agent/$1/state" 2>/dev/null
|
|
}
|
|
|
|
get_alias() {
|
|
9p read "agent/$1/alias" 2>/dev/null
|
|
}
|
|
|
|
get_cwd() {
|
|
9p read "agent/$1/cwd" 2>/dev/null
|
|
}
|
|
|
|
get_summary() {
|
|
9p read "agent/$1/summary" 2>/dev/null
|
|
}
|
|
|
|
get_prev() {
|
|
echo "$prev_states" | tr ' ' '\n' | grep "^$1=" | cut -d= -f2
|
|
}
|
|
|
|
set_prev() {
|
|
prev_states=$(echo "$prev_states" | tr ' ' '\n' | grep -v "^$1=" | tr '\n' ' ')
|
|
prev_states="$prev_states $1=$2"
|
|
}
|
|
|
|
while true; do
|
|
for id in $(get_sessions); do
|
|
[ -z "$id" ] && continue
|
|
state=$(get_state "$id")
|
|
prev=$(get_prev "$id")
|
|
|
|
if [ "$prev" = "running" ] && [ "$state" = "idle" ]; then
|
|
name=$(get_alias "$id")
|
|
[ -z "$name" ] && name=$id
|
|
cwd=$(get_cwd "$id")
|
|
heading=$(basename "$cwd")
|
|
summary=$(get_summary "$id")
|
|
[ -z "$summary" ] && summary="completed"
|
|
notify-send "$heading ($name)" "$summary"
|
|
fi
|
|
|
|
set_prev "$id" "$state"
|
|
done
|
|
sleep 1
|
|
done
|