umbau(boxwart): Backend auf Box-Wart umgestellt – Waechter, Modell-Nutzung, Zeitplan

MC2 wird Updater, Waechter und Modell-Radar (Konzept „MC2 als Box-Wart“, 23.09.2026).

- Neuer Waechter (services/waechter.py) loest sentry.py ab: Dienste, Timer-Laeufe,
  Hermes-Jobs samt Werkzeugfehlern, Kern-HTTP-Proben, Platte. Abgestuerzte Dienste
  startet er selbst neu (max. 2/h), rote Hinweise gehen an Telegram und Lucy.
  Laeuft im mc2-steward; waehrend eines Updates haelt er still.
- Neue Schnittstellen (routers/boxwart.py): /api/start, /api/hinweise (+ Aktionen),
  /api/modelle/nutzung, /api/zeitplan.
- Modell-Nutzung aus dem llama-swap-Journal (wer fragt wie oft, 24 h je Stunde).
- Entfernt: Ideen, Wissen, Chronik, Skills, Verbinden, Konsolen-Proxy, /api/events;
  Lucys Werkzeug idee_notieren; box_status nennt jetzt die offenen Hinweise.
- Behoben: projekte-sync ueberspringt leere Gitea-Repos (lief seit 07.09. stuendlich rot);
  Motor-Version kam aus dem verwaisten /opt/llamacpp statt /opt/llamacpp-vulkan.
- Erste Backend-Tests (8) fuer Waechter und Modell-Nutzung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-23 21:16:18 +02:00
co-authored by Claude Opus 5.5
parent 3669a6e7dc
commit 12dadfe6ef
25 changed files with 1131 additions and 2179 deletions
+11 -19
View File
@@ -93,27 +93,19 @@ def box_status() -> str:
lines += [f"{'' if s.get('ok') else ''} {s.get('name')}" for s in svcs]
except Exception:
lines.append("(Dienste-Liste nicht abrufbar)")
# Hinweise des Wächters (Box-Wart, 09/2026): das, was der Commander tun sollte.
try:
hinweise = _get("/api/hinweise").get("hinweise", [])
except Exception:
hinweise = []
if hinweise:
lines.append(f"Offene Hinweise ({len(hinweise)}):")
lines += [f"{'🔴' if h.get('stufe') == 'rot' else '🟡'} {h.get('titel')}" for h in hinweise[:5]]
else:
lines.append("Keine offenen Hinweise.")
return "\n".join(lines)
@mcp.tool()
def idee_notieren(titel: str, notiz: str = "") -> str:
"""Legt eine Idee/einen Auftrag des Commanders in die Ideen-Queue der Box. Nutzen, sobald
der Commander eine Idee für später äußert ('wäre cool wenn …', 'bau mal irgendwann …',
'die Box soll …') — NICHT nur versprechen. Die Box arbeitet die Idee selbst aus und baut;
das Ergebnis landet als Branch auf Gitea; gemergt wird nur vom Commander (Ampel gruen).
titel = kurze deutsche Überschrift; notiz = seine Worte plus nötiger Kontext."""
try:
r = _post("/api/ideen", {"titel": titel, "notiz": notiz})
except httpx.HTTPStatusError as e:
try:
detail = e.response.json().get("detail", "")
except Exception:
detail = e.response.text[:200]
return f"Fehlgeschlagen: {detail}"
except Exception as exc:
return f"Queue nicht erreichbar ({exc})."
return f"Idee ist in der Queue ({r.get('id', '?')}). Die Box arbeitet sie von allein ab."
# idee_notieren ist mit der Ideen-Warteschlange entfallen (Box-Wart-Umbau 09/2026).
if __name__ == "__main__":