feat: Hooks (#9093)
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# Tiny hook handler that loudly announces every event goose fires at it.
|
||||
#
|
||||
# Goose pipes the event payload as JSON on stdin and sets PLUGIN_ROOT in the
|
||||
# environment. We tee a copy of the payload into a log file inside the plugin
|
||||
# directory so you can see the full structure later.
|
||||
set -euo pipefail
|
||||
|
||||
label="${1:-event}"
|
||||
log="${PLUGIN_ROOT:-.}/last-event.log"
|
||||
payload="$(cat)"
|
||||
|
||||
event_name="$(printf '%s' "$payload" | sed -n 's/.*"event":"\([^"]*\)".*/\1/p')"
|
||||
tool_name="$(printf '%s' "$payload" | sed -n 's/.*"tool_name":"\([^"]*\)".*/\1/p')"
|
||||
|
||||
emoji() {
|
||||
case "$1" in
|
||||
start) printf '\xf0\x9f\x9a\x80' ;; # rocket
|
||||
prompt) printf '\xf0\x9f\x92\xac' ;; # speech balloon
|
||||
pre-tool) printf '\xe2\x9a\xa1' ;; # zap
|
||||
post-tool) printf '\xe2\x9c\x85' ;; # check
|
||||
*) printf '\xf0\x9f\x94\x94' ;; # bell
|
||||
esac
|
||||
}
|
||||
|
||||
icon="$(emoji "$label")"
|
||||
suffix=""
|
||||
[ -n "$tool_name" ] && suffix=" tool=$tool_name"
|
||||
|
||||
# Both stderr (so it shows up alongside goose tracing) and a log file.
|
||||
printf '%s [hello-hooks] %s%s\n' "$icon" "${event_name:-$label}" "$suffix" 1>&2
|
||||
|
||||
{
|
||||
printf -- '---- %s @ %s ----\n' "${event_name:-$label}" "$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
|
||||
printf '%s\n' "$payload"
|
||||
} >> "$log"
|
||||
Reference in New Issue
Block a user