#!/usr/bin/env bash # Stack-Rundumschlag (monatlich am 4. um 06:40, angelegt 22.07.2026): # Lucys freier Rundumblick über den GANZEN Stack — ergänzt die mechanischen # Wächter (Sa Trend-Radar, So Prüfstand, Mo Release-Radar, Wartungsserie 1.–3.) # um tagesaktuelle Web-Recherche + Quervergleich mit den Verdikten. # Anlass/Lehrbeispiel: Googles Gemma-4-Stealth-Update vom 15./16.07.2026 kam # OHNE Versionssprung — kein mechanischer Wächter schlug an, erst freie # Recherche fand es (Session 22.07., Claude-Desktop). # Muster wie die anderen Feeds: dieses Skript sammelt DETERMINISTISCH den # IST-Stand, der Agent recherchiert + berichtet. Er EMPFIEHLT NUR — umgesetzt # wird per Karten-Klick durch den Commander. set -uo pipefail MC="$HOME/mission-control-v2" STATE_DIR="$HOME/.hermes/state" # ---------- Versionierter Auftrag für den Agenten ---------- cat "$MC/deploy/stack-rundumschlag-prompt.md" 2>/dev/null || cat <<'EOF' (Prompt-Datei fehlt — Kurzform:) Du bist der monatliche Stack-Rundumschlag. Recherchiere tagesaktuell im Web zu allen Bausteinen unten (auch Stealth-Updates ohne Versionssprung!), gleiche mit den Verdikten ab und berichte in Lucys Stimme mit höchstens 3 konkreten Empfehlungen. Nichts selbst umsetzen. EOF echo echo "## RUNDUMSCHLAG-BEFUND (IST-Stand erhoben am $(date '+%d.%m.%Y %H:%M'))" echo echo "### Rollen laut llama-swap (:8080)" curl -sf -m 10 http://127.0.0.1:8080/v1/models 2>/dev/null \ | python3 -c 'import json,sys for m in json.load(sys.stdin).get("data", []): print("-", m.get("id"))' 2>/dev/null || echo "(llama-swap nicht erreichbar)" echo echo "### Laufende Engine(s) — Version + Startzeile" gefunden=0 for pid in $(pgrep -f 'llama-server' 2>/dev/null | head -3); do exe="$(readlink -f "/proc/$pid/exe" 2>/dev/null)" || continue [ -x "$exe" ] || continue ver="$("$exe" --version 2>&1 | head -1)" echo "- PID $pid — $ver" echo " $(tr '\0' ' ' < "/proc/$pid/cmdline" 2>/dev/null | cut -c1-320)" gefunden=1 done [ "$gefunden" = 1 ] || echo "(kein llama-server aktiv — Warm-Set prüfen)" echo echo "### Puls-Historie (letzte 2 Erhebungen des Trend-Radars)" tail -2 "$STATE_DIR/trend-radar-puls-history.jsonl" 2>/dev/null || echo "(keine Historie)" echo echo "### Watch-Stände (Trend-Radar-State)" python3 -m json.tool "$STATE_DIR/trend-radar-state.json" 2>/dev/null | head -40 || echo "(kein State)" echo echo "### Prüfstand: Queue + letzte Verdikte" echo "Queue:" ls "$STATE_DIR/pruefstand/queue" 2>/dev/null || true echo "Fertig (Zusammenfassungen):" for f in "$STATE_DIR"/pruefstand/done/*.json; do case "$f" in *.spec.json) continue ;; esac [ -f "$f" ] || continue python3 - "$f" <<'PY' 2>/dev/null || true import json, os, sys d = json.load(open(sys.argv[1])) teile = [f"{k}:{v.get('bestanden')}/{v.get('gesamt')}" for k, v in d.get("zusammenfassung", {}).items()] print(f"- {os.path.basename(sys.argv[1])} ({d.get('erhoben', '?')}): " + " ".join(teile)) PY done echo echo "### Ressourcen" free -g | sed -n '2p' df -h /srv 2>/dev/null | tail -1 df -h / | tail -1 echo echo "### Fehlerbild (best effort)" tail -5 "$HOME/.hermes/logs/monitoring/error_history.csv" 2>/dev/null || true journalctl --user -u hermes-gateway --since '-7 days' -p warning --no-pager 2>/dev/null | tail -5 || true echo echo "### Nachschlagewerke für den Abgleich (per file_read bzw. Browser lesen)" echo "- Verdikte (NICHT neu aufrollen, außer Faktenlage messbar neu): $MC/docs/wissen/VERDIKTE.md" echo "- Watch-Liste (was mechanisch schon überwacht wird): $MC/deploy/trend-radar-watchlist.json" echo "- Community-Messwerte unserer Hardware: https://github.com/hogeheer499-commits/strix-halo-guide"