#!/usr/bin/env python3
"""Hindsight Weekly Insight Digest — pattern recognition & synthesis.

Uses Hindsight REST API /reflect with curated prompts to produce:
1. Recurring problems / patterns
2. Infrastructure changes
3. Open TODOs and priorities
4. Recommendations

Always outputs (weekly digest is always delivered)."""
import json
import subprocess
from datetime import datetime, timezone

HINDSIGHT_URL = "http://127.0.0.1:9177/v1/default/banks/hermes"

def reflect(query, budget="mid"):
    result = subprocess.run(
        ["curl", "-s", "-X", "POST", f"{HINDSIGHT_URL}/reflect",
         "-H", "Content-Type: application/json",
         "-d", json.dumps({"query": query, "budget": budget})],
        capture_output=True, text=True, timeout=120
    )
    try:
        data = json.loads(result.stdout)
        return data.get("text", "").strip()
    except (json.JSONDecodeError, KeyError):
        return ""

def main():
    now = datetime.now(timezone.utc).strftime("%Y-%m-%d")

    print(f"🧠 Hindsight Weekly Insight Digest — KW {datetime.now().isocalendar()[1]}/{datetime.now().year}")
    print(f"Datum: {now}")
    print()

    patterns = reflect(
        "Welche wiederkehrenden Probleme oder Muster tauchen in den gespeicherten "
        "Erinnerungen auf? Welche Themen kommen regelmäßig zurück? "
        "Erkenne Patterns über alle Memories hinweg.",
        budget="high"
    )
    print("**🔍 Wiederkehrende Muster**")
    print(patterns or "Keine signifikanten Patterns erkannt.")
    print()

    changes = reflect(
        "Welche Infrastrukturänderungen, Reparaturen oder Neueinrichtungen "
        "sind in den letzten Tagen dokumentiert? "
        "Fasse zusammen was sich verändert hat.",
        budget="mid"
    )
    print("**🔧 Infrastruktur-Änderungen**")
    print(changes or "Keine Änderungen dokumentiert.")
    print()

    todos = reflect(
        "Welche offenen TODOs, blockierten Aufgaben oder ausstehenden Maßnahmen "
        "sind dokumentiert? Welche sollten prioritär angegangen werden?",
        budget="mid"
    )
    print("**📋 Offene TODOs & Prioritäten**")
    print(todos or "Keine offenen TODOs.")
    print()

    recs = reflect(
        "Basierend auf allen gespeicherten Fakten: Welche Verbesserungen, "
        "Wartungsarbeiten oder Maßnahmen würden dem System helfen? "
        "Was sollte als nächstes angegangen werden?",
        budget="mid"
    )
    print("**💡 Empfehlungen**")
    print(recs or "Keine spezifischen Empfehlungen.")
    print()

    # 5. Solution patterns from compound-learning (indexed via hindsight_retain)
    solutions = reflect(
        "Welche SOLUTION-Einträge (compound-learning) sind gespeichert? "
        "Fasse zusammen welche Probleme gelöst wurden und welche Lessons daraus "
        "für zukünftige Planungen relevant sind. "
        "Erkenne wiederkehrende Problem-Typen.",
        budget="mid"
    )
    if solutions and "Keine" not in solutions[:20]:
        print("**📚 Solution Patterns (Compound Learning)**")
        print(solutions)
        print()

    # 6. Self-improvement audit: open vs. acted-on
    si_open = reflect(
        "Welche Self-Improvement-Vorschläge (Tag: self-improvement) sind gespeichert "
        "aber noch nicht umgesetzt? Prüfe ob der entsprechende Skill oder MEMORY.md "
        "inzwischen aktualisiert wurde. Antworte KURZ: nur offene SI-Items mit "
        "Skill-Name und vorgeschlagener Änderung, oder 'Keine offenen SI-Items'.",
        budget="mid"
    )
    if si_open and "Keine offenen" not in si_open[:20] and "keine" not in si_open.lower()[:20]:
        print("**🔧 Self-Improvement Audit (Offene Vorschläge)**")
        print(si_open)
        print()

    print("---")
    print("_Generiert via hindsight_reflect · vllm/gemma-4-31b-it · noris_")

if __name__ == "__main__":
    main()
