#!/usr/bin/env bash
# Chef-Gutachter-Feed (Orchestrator-Finale, User-Idee 06.07.): gpt-oss-120b als NÄCHTLICHER
# Chef-Gutachter über die autonome Arbeit der Box — bewusst NIE im heißen Pfad (Kaltladen
# ~2-5 min ist um 04:30 egal; tagsüber bleibt Lucy schnell). Muster wie dreaming-feed.sh:
# liegt in ~/.hermes/scripts/, stdout wird dem Cron-Agenten als Prompt eingespeist.
# Der eigentliche RICHTER läuft als Ein-Schuss-Completion direkt gegen llama-swap (:8080,
# fremdblick-Architektur — umgeht Hermes' Delegations-Floor und braucht keinen Subagenten).
# Richter-Kette: gpt-oss-120b; wirft der beim Laden "exited prematurely" (neben dem Warm-Set
# live gesehen, E2E 07.07.), übernimmt GLM-4.6V-Flash als gekennzeichnete VERTRETUNG.
set -uo pipefail

ENDPOINT="${CHEF_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}"
CHEF="${CHEF_MODEL:-gpt-oss-120b}"
VERTRETUNG="${CHEF_FALLBACK:-GLM-4.7-Flash}"
MC="$HOME/mission-control-v2"
VAULT="$HOME/wissens-vault"

# ---------- Versionierter Auftrag für den Boten-Agenten ----------
cat "$MC/deploy/chef-gutachter-prompt.md"
echo

# ---------- Beweismaterial der letzten 24 h (hart begrenzt, erst sammeln, dann kürzen) ----------
EVID="$(
  echo "## BEWEISMATERIAL (automatisch erhoben am $(date '+%d.%m.%Y %H:%M'))"
  echo
  echo "### Vorschlags-Branches (Werkstatt/Orchestrator, jüngste zuerst):"
  git -C "$MC" fetch -q origin 2>/dev/null || true
  git -C "$MC" for-each-ref --sort=-committerdate refs/remotes/origin \
    --format='%(committerdate:relative) | %(refname:short) | %(subject)' 2>/dev/null | head -10
  echo
  echo "### main-Commits der letzten 24 h:"
  git -C "$MC" log --since='24 hours ago' --oneline origin/main 2>/dev/null | head -12
  echo
  echo "### Wissens-Vault (neue Traum-Notizen, 24 h):"
  git -C "$VAULT" log --since='24 hours ago' --name-only --pretty='— %s' 2>/dev/null | head -20
  echo
  echo "### Ideen-Queue (natives Kanban, Stand jetzt — offene Ideen des Commanders):"
  bash -lc 'hermes kanban stats' 2>/dev/null | head -12
  echo
  echo "### Ideen-Queue: zuletzt bewegte Aufgaben:"
  bash -lc 'hermes kanban list --sort updated' 2>/dev/null | head -10
  echo
  echo "### Betriebs-Warnungen (journal, 24 h, je Dienst gezählt):"
  journalctl --user --since '24 hours ago' -p warning --no-pager 2>/dev/null \
    | grep -oE 'hermes-gateway|mission-control-2|mem0-service|voice-service|hermes-builtin-ui' \
    | sort | uniq -c | sort -rn | head -6
  echo
  echo "### Aktivitäts-Insights (1 Tag):"
  bash -lc 'hermes insights --days 1' 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g' | head -30
)"

RASTER='Du bist der CHEF-GUTACHTER über die autonome Arbeit einer lokalen KI-Box (Hermes-Agent, Werkstatt, Orchestrator, Traum-Kreislauf). Du bekommst BEWEISMATERIAL der letzten 24 Stunden. Urteile AUSSCHLIESSLICH auf Basis dieses Materials — kein Lob und keine Behauptung ohne konkreten Beleg darin; fehlt dir zu einem Punkt Material, sage das offen. Antworte auf DEUTSCH, kompakt, in exakt dieser Struktur:
VERDIKT: <ein Satz Gesamturteil über die autonome Arbeit der Nacht/des Tages>
RISIKEN: <0-3 Punkte, je mit Beleg aus dem Material; "keine erkennbar" wenn leer>
TOP-3 FUER DEN COMMANDER: <maximal 3 priorisierte, konkrete Empfehlungen — weniger ist ok, erfinde keine>'

# Ein-Schuss-Richter: $1=Modell-ID  $2=curl-Timeout  $3=max_tokens
judge() {
  local req
  req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \
    '{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}],
      max_tokens:$mt, temperature:0.2}')"
  curl -s -m "$2" "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$req" \
    | python3 -c '
import json, sys
try:
    d = json.load(sys.stdin)
    msg = d["choices"][0]["message"]
    out = (msg.get("content") or msg.get("reasoning_content") or "").strip()
    print(out)
except Exception:
    pass'
}

RICHTER="$CHEF"
VERDIKT="$(judge "$CHEF" 420 2600)"
if [ -z "${VERDIKT// /}" ]; then
  RICHTER="$VERTRETUNG (Vertretung — $CHEF hat nicht geladen)"
  VERDIKT="$(judge "$VERTRETUNG" 240 1200)"
fi

echo "$EVID"
echo
if [ -z "${VERDIKT// /}" ]; then
  echo "## CHEF-VERDIKT: AUSGEFALLEN"
  echo "Beide Richter ($CHEF, $VERTRETUNG) haben nicht geantwortet — das dem Commander ehrlich melden."
else
  echo "## CHEF-VERDIKT (Richter: $RICHTER)"
  echo "$VERDIKT"
fi

# Morgenlage für die Zentrale: das Verdikt STILL in den Briefkasten spiegeln (priority=silent —
# Lucy soll die Wand Text nicht vorlesen; die Telegram-Botschaft macht der Cron-Agent selbst).
# Cockpit („Morgenlage"-Karte) und Chronik lesen es dort mit source=chef-gutachter heraus.
if [ -n "${VERDIKT// /}" ]; then
  curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \
    -H 'Content-Type: application/json' \
    --data "$(python3 - "$RICHTER" "$VERDIKT" <<'PY'
import json, sys
print(json.dumps({"text": sys.argv[2], "subject": f"Morgenlage (Richter: {sys.argv[1]})",
                  "source": "chef-gutachter", "priority": "silent"}))
PY
)" >/dev/null 2>&1 || true
fi
