36 lines
892 B
Bash
Executable File
36 lines
892 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# PostToolUse hook on the Bash tool — if the wrapped command took longer than
|
|
# DURATION_FLOOR seconds, send a "done in Ns · <label>" completion ping so the
|
|
# user always knows when the long thing finished.
|
|
#
|
|
# Pairs with bash-heartbeat-pre.sh which writes /tmp/.bash-hb-<PPID>.
|
|
#
|
|
# Input: JSON {"tool_name":"Bash","tool_input":{...},"tool_response":{...}}
|
|
# Output: always exit 0.
|
|
|
|
set -u
|
|
INPUT=$(cat) >/dev/null
|
|
|
|
DURATION_FLOOR=5
|
|
STATE_FILE="/tmp/.bash-hb-$PPID"
|
|
|
|
if [[ ! -f "$STATE_FILE" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
START=$(cut -d'|' -f1 "$STATE_FILE")
|
|
LABEL=$(cut -d'|' -f2- "$STATE_FILE")
|
|
rm -f "$STATE_FILE"
|
|
|
|
NOW=$(date +%s)
|
|
ELAPSED=$((NOW - START))
|
|
|
|
if (( ELAPSED < DURATION_FLOOR )); then
|
|
exit 0
|
|
fi
|
|
|
|
# Fire the completion ping (no-stream so it lands instantly)
|
|
/host/root/openclaw/tg-stream --no-stream "✅ done in ${ELAPSED}s · $LABEL" >/dev/null 2>&1 &
|
|
|
|
exit 0
|