#!/usr/bin/env bash
# claude-his-fetch — pull current His context from a private host over SSH.
# The public package ships zero infrastructure context; the runbook lives on a
# host you control and is fetched into a per-user cache that ~/.claude/ symlinks
# to. Re-run periodically (cron, or on demand) to refresh.
set -euo pipefail

HOST="${HIS_CONTEXT_HOST:-hertz}"
SRC="${HIS_CONTEXT_PATH:-/opt/his-context/}"
CACHE="${HIS_CONTEXT_CACHE:-${HOME}/.cache/claude-his-agent}"

mkdir -p "${CACHE}"

echo "claude-his-fetch: ${HOST}:${SRC} -> ${CACHE}"

if ! command -v rsync >/dev/null 2>&1; then
    echo "claude-his-fetch: rsync not found; install rsync (apt/pacman) and retry" >&2
    exit 3
fi

# Reuses the user's existing SSH credentials; trust boundary is whatever
# already authorises the user on $HIS_CONTEXT_HOST.
rsync -a --delete -e ssh "${HOST}:${SRC}" "${CACHE}/"

# Sanity — these are the two files ~/.claude symlinks expect to exist.
test -r "${CACHE}/agent.md"        || { echo "fetch failed: missing agent.md"        >&2; exit 2; }
test -r "${CACHE}/skill/SKILL.md"  || { echo "fetch failed: missing skill/SKILL.md"  >&2; exit 2; }

agent_bytes=$(wc -c <"${CACHE}/agent.md")
skill_bytes=$(wc -c <"${CACHE}/skill/SKILL.md")
echo "claude-his-fetch: OK (${agent_bytes}B agent, ${skill_bytes}B skill)"
