KeiSeiKit-1.0/hooks/agent-heartbeat-tick.sh
Parfii-bot a4e667de10 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

61 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
# Heartbeat tick — sends agent presence to kei-ping every N seconds.
# Debounced via /tmp marker file so we don't pound the backend.
#
# Wired to PostToolUse:* (every tool call). Best-effort, never blocks.
set -euo pipefail
KEI_PING_BIN="${KEI_PING_BIN:-$HOME/.claude/bin/kei-ping}"
DEBOUNCE_S="${KEI_PING_DEBOUNCE_S:-30}"
# Bypass for sandbox / unsupported envs
if [[ "${KEI_PING_BYPASS:-0}" = "1" ]]; then
exit 0
fi
# Skip if binary missing
if [[ ! -x "$KEI_PING_BIN" ]]; then
exit 0
fi
INPUT="$(cat 2>/dev/null || true)"
SESSION_ID="$(printf '%s' "$INPUT" | jq -r '.session_id // empty' 2>/dev/null)"
[[ -z "$SESSION_ID" ]] && SESSION_ID="${CLAUDE_SESSION_ID:-unknown}"
AGENT_ID="window-${SESSION_ID:0:8}"
MARKER="/tmp/kei-ping-tick-${AGENT_ID}.last"
NOW=$(date +%s)
# Debounce
if [[ -f "$MARKER" ]]; then
LAST=$(cat "$MARKER" 2>/dev/null || echo 0)
if (( NOW - LAST < DEBOUNCE_S )); then
exit 0
fi
fi
echo "$NOW" > "$MARKER"
# Resolve current branch + cwd
BRANCH=""
if BRANCH_TRY=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); then
BRANCH="$BRANCH_TRY"
fi
CWD="$(pwd)"
# Phase from env if set, else "idle"
PHASE="${KEI_PING_PHASE:-idle}"
DNA="${KEI_PING_DNA:-}"
NOTE="${KEI_PING_NOTE:-}"
# Compose flags
FLAGS=()
[[ -n "$SESSION_ID" ]] && FLAGS+=(--session "$SESSION_ID")
[[ -n "$DNA" ]] && FLAGS+=(--dna "$DNA")
[[ -n "$BRANCH" ]] && FLAGS+=(--branch "$BRANCH")
[[ -n "$CWD" ]] && FLAGS+=(--cwd "$CWD")
[[ -n "$NOTE" ]] && FLAGS+=(--note "$NOTE")
# Best-effort, silent on failure
"$KEI_PING_BIN" send "$AGENT_ID" "$PHASE" "${FLAGS[@]}" >/dev/null 2>&1 || true
exit 0