#!/bin/bash
# Aria Active Memory (V5 Sprint 2, 08.05.2026)
#
# Pre-Reply-Hook: bei einer eingehenden Aria-Frage relevante Memories
# raussuchen, BEVOR Aria die erste Reply formuliert.
#
# Aufruf:
#   aria-active-memory.sh "user-message text..."
#
# Output: stdout-Text, max 6 KB, mit Top-Treffer aus:
#   1. /root/.claude/projects/-/memory/  (grep-basiert)
#   2. /root/aria/brain/                 (aria-brain-search.py BM25 + Recency)
#
# Latency-Budget: 2 Sekunden total. Drüber → frühzeitig abbrechen.
#
# Aktuell ist das KEIN Channel-Hook — Aria muss es selbst aufrufen
# bei Inbound (Konvention via SOUL/CORRECTIONS). Echter Channel-Hook
# (analog zu LRN-20260506-001 Plugin-Patch) ist Sprint 4 Item.

set -e

QUERY="${1:-}"
if [ -z "$QUERY" ]; then
    echo "Usage: $0 <query>" >&2
    echo "Returns: top hits from memory + brain search, max 6 KB" >&2
    exit 1
fi

MEMORY_DIR="/root/.claude/projects/-/memory"
BRAIN="${ARIA_BRAIN:-/root/aria/brain}"
BRAIN_SEARCH="/root/aria/scripts/aria-brain-search.py"
MAX_BYTES=6144
MAX_HITS=3
TIMEOUT=2

# Tokenize Query: pick keywords (>3 chars), max 5
KEYWORDS=$(echo "$QUERY" | tr '[:upper:]' '[:lower:]' | tr -c '[:alnum:]' ' ' | tr ' ' '\n' | awk 'length($0) > 3' | sort -u | head -5 | tr '\n' '|' | sed 's/|$//')

if [ -z "$KEYWORDS" ]; then
    echo "[active-memory: query too short for keyword extraction]"
    exit 0
fi

echo "[active-memory query: $QUERY]"
echo "[keywords: $KEYWORDS]"
echo ""

# === 1. Memory-Index ===
if [ -d "$MEMORY_DIR" ]; then
    HITS=$(timeout "$TIMEOUT" grep -lE "$KEYWORDS" "$MEMORY_DIR"/*.md 2>/dev/null | head -"$MAX_HITS")
    if [ -n "$HITS" ]; then
        echo "=== Memory-Index Hits ==="
        for f in $HITS; do
            NAME=$(basename "$f" .md)
            DESC=$(grep -E "^description:" "$f" 2>/dev/null | head -1 | sed 's/^description: *//' | head -c 200)
            echo ""
            echo "**${NAME}**"
            if [ -n "$DESC" ]; then
                echo "  $DESC"
            fi
            # Snippet: first 3 non-frontmatter lines
            tail -n +5 "$f" 2>/dev/null | head -3 | sed 's/^/  /' | head -c 400
            echo ""
        done
    fi
fi

# === 2. Brain-Search via aria-brain-search.py ===
if [ -x "$BRAIN_SEARCH" ]; then
    BRAIN_OUTPUT=$(timeout "$TIMEOUT" python3 "$BRAIN_SEARCH" "$QUERY" --top "$MAX_HITS" 2>/dev/null || echo "")
    if [ -n "$BRAIN_OUTPUT" ]; then
        echo ""
        echo "=== Brain Hits ==="
        echo "$BRAIN_OUTPUT" | head -c $((MAX_BYTES / 2))
    fi
fi

# Cap Total-Output (defensive)
exit 0
