aufraeumen: tote MCP-Route, Patch-Traeger-Warnung, Parakeet-Text, .aiexclude, Abhaengigkeiten gepinnt

- mcp/mcp_mc.py: Werkzeug set_route entfernt. Es rief PUT /api/routing/route, eine Route, die
  es nie gab; die Routing-Policy hat seit dem Box-Wart-Umbau keine Schreib-Route mehr (lesen
  bleibt: routing_overview). Die Datei bleibt, weil die Hermes-Config auf der Box den Server
  mission-control-stack noch eingetragen hat (enabled: false).
- deploy/hermes-postcheck.sh: Block fuer den Patch-Traeger (deploy/hermes-patches/apply.py)
  entfernt; der Traeger ist seit 1e68f62 weg, die Pruefung warnte nur noch bei jedem Lauf.
- voice_service/app.py: Kopftext nennt Parakeet-TDT (onnx-asr) als Standard und faster-whisper
  als Rueckfall, wie der Code es tut; den Verweis auf den abgebauten Mem0-Sidecar gestrichen.
- .aiexclude entfernt (galt nur dem abgeloesten Antigravity).
- requirements: gepinnt auf pip freeze der Box (Python 3.14) und des Containers 107
  (Python 3.13): gleiche Version "==", sonst ein Bereich ueber beide. Ausnahme mcp==1.28.1:
  mcp 2.x hat FastMCP entfernt (from mcp.server.fastmcp scheitert), der Container hat 2.2.0,
  nutzt mcp aber nicht. Auf der Box aendert pip damit nichts; im Container zieht einrichten.sh
  mcp beim naechsten Ausrollen auf 1.28.1 zurueck. pytest==9.1.1 (nur Box).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 20:41:50 +02:00
co-authored by Claude Opus 5.5
parent 2e0ad70a85
commit 3f05263b63
6 changed files with 33 additions and 79 deletions
-27
View File
@@ -1,27 +0,0 @@
# .aiexclude — was der KI-Assistent (Antigravity/Gemini) NICHT lesen/indexieren soll.
# Gitignore-Syntax. Ziel: der Review fokussiert auf QUELLCODE, nicht auf Abhängigkeiten,
# Build-Output oder Binärdateien.
# Abhängigkeiten & Build-Output (kein Review-Ziel)
backend/.venv/
frontend/node_modules/
frontend/dist/
**/__pycache__/
*.pyc
.git/
# Große / binäre / sensible Dateien
*.vrm
*.gguf
*.onnx
*.safetensors
*.wav
*.env
.env
credentials*
*.key
*.pem
# Lokale Scratch-/Recon-Skripte
box_recon*
gemma_swap*
+2 -1
View File
@@ -1,2 +1,3 @@
# Nur fürs Prüftor (deploy/pruefen.sh) — die Dienste selbst brauchen das nicht.
pytest>=8
# Gepinnt am 24.09.2026 auf den Stand im venv der Box (der Container installiert diese Datei nicht).
pytest==9.1.1
+16 -9
View File
@@ -1,9 +1,16 @@
fastapi>=0.115
python-multipart>=0.0.9
uvicorn[standard]>=0.30
httpx>=0.27
ruamel.yaml>=0.18
psutil>=5.9
huggingface_hub>=0.27
mcp>=1.2.0
tzdata>=2024.1
# Gepinnt am 24.09.2026 auf das, was nachweislich läuft: `pip freeze` im venv der KI-Box (Python 3.14) und im
# Homelab-Container 107 (/opt/mc2/backend/.venv, Python 3.13). Gleiche Version = „==“, sonst ein Bereich, der
# beide Stände abdeckt — so installiert weder deploy.sh (Box) noch einrichten.sh (Container) etwas Neues.
# Wer eine Grenze anhebt: vorher deploy/probelauf-box.sh, und die neue Version in beiden Umgebungen prüfen.
fastapi>=0.139.0,<=0.141.1
python-multipart==0.0.32
uvicorn[standard]>=0.51.0,<=0.53.0
httpx==0.28.1
ruamel.yaml==0.19.1
psutil==7.2.2
huggingface_hub>=1.23.0,<=2.0.0
# mcp braucht nur die MCP-Server in mcp/ (Hermes startet sie mit diesem venv, auf der Box). mcp 2.x hat FastMCP
# entfernt — `from mcp.server.fastmcp import FastMCP` scheitert dort. Der Container hat 2.2.0, nutzt es aber nicht;
# deshalb hier der Stand der Box (einrichten.sh zieht den Container beim nächsten Ausrollen auf 1.28.1).
mcp==1.28.1
tzdata>=2026.3,<=2026.4
+3 -22
View File
@@ -17,28 +17,9 @@ fail=0
echo "=== Hermes Post-Update: Gehirn-Check ==="
# --- Hermes-Runtime-Patch-Traeger (20.07.2026): ein Update setzt den Quellbaum ---
# --- zurueck → unsere Fixes (needs_input-wartet, Startreife-Gate, Orphan-Guard, ---
# --- Kontext-Vererbung, Etappen-Kette) hier RE-eintragen. Exit 10 = etwas neu ---
# --- angewandt → Gateway neu laden; Exit 1 = ein Patch passt nicht mehr → ROT. ---
PATCH_APPLY="${MC2_SRC:-$HOME/mission-control-v2}/deploy/hermes-patches/apply.py"
if [ -f "$PATCH_APPLY" ]; then
python3 "$PATCH_APPLY" >/dev/null 2>&1; _prc=$?
if [ "$_prc" -eq 10 ]; then
systemctl --user try-restart hermes-gateway >/dev/null 2>&1 || true
echo "PASS · Hermes-Runtime-Patches nach Update RE-angewandt (Gateway neu geladen)"
elif [ "$_prc" -eq 0 ]; then
echo "PASS · Hermes-Runtime-Patches unveraendert vorhanden"
else
echo "FAIL · Hermes-Runtime-Patches: ein Patch passt nicht mehr zum aktualisierten Quellcode — pruefen"; fail=1
fi
else
# Kein Fehler: Der Patch-Traeger wurde mit dem MC2-Kahlschlag (1e68f62) entfernt. Seine
# Fixes zielten auf einen Hermes-Stand, der inzwischen tausende Commits zurueckliegt —
# sie wuerden auf dem heutigen Quellcode ohnehin nicht mehr greifen. WARN statt FAIL, damit
# es sichtbar bleibt, falls jemand wieder Runtime-Patches braucht.
echo "WARN · hermes-patches/apply.py nicht vorhanden (mit 1e68f62 bewusst entfernt) — uebersprungen"
fi
# Der Block fuer den Hermes-Runtime-Patch-Traeger (deploy/hermes-patches/apply.py) ist am 24.09.2026 entfallen:
# Der Traeger wurde mit 1e68f62 bewusst entfernt (Hermes-Quellcode wird nicht gepatcht, AGENTS.md), und die
# Pruefung meldete seitdem bei jedem Lauf nur noch „WARN · nicht vorhanden“.
# --- Config-Drift-Wächter (Lehre aus v0.18, 02.07.2026): Hermes fällt bei unbekannten ---
# --- Config-Werten STILL auf Defaults zurück (approvals.mode 'auto' -> manual -> alle ---
+4 -14
View File
@@ -3,7 +3,7 @@
Mission Control 2.0 — Stack-Management MCP Server (für Hermes).
Gibt dem Hermes-Agenten Werkzeuge, um den lokalen LLM-Stack SELBST zu steuern:
Modelle ansehen/entdecken/installieren/löschen, Rollen & Routing setzen, Modelle
Modelle ansehen/entdecken/installieren/löschen, Rollen setzen, Routing ansehen, Modelle
laden/entladen, Backups, Dienste prüfen/neu starten, Updates prüfen/anwenden,
System-Status lesen. Spricht die MC-2-REST-API (/api/*).
@@ -45,12 +45,6 @@ def _post(path: str, data: dict | None = None):
return r.json()
def _put(path: str, data: dict):
r = httpx.put(f"{MC_URL}{path}", headers=_h(), json=data, timeout=20)
r.raise_for_status()
return r.json()
def _delete(path: str):
r = httpx.delete(f"{MC_URL}{path}", headers=_h(), timeout=30)
r.raise_for_status()
@@ -180,13 +174,9 @@ def set_model_role(model_id: str, role: str = "") -> str:
return f"Rolle für '{model_id}': {role or '— (entfernt)'}"
@mcp.tool()
def set_route(name: str, target_alias: str) -> str:
"""Setzt das Gateway-Routing: Gateway-Modellname (fast/heavy/auto/…) → llama-swap-Alias."""
_put("/api/routing/route", {"name": name, "target_alias": target_alias})
return f"Routing gesetzt: {name} → {target_alias}"
# Kein Werkzeug zum Umstellen des Routings mehr (24.09.2026): set_route rief PUT /api/routing/route, eine Route,
# die es nie gab. Die Routing-Policy steht in mc2-routing.json und hat seit dem Box-Wart-Umbau keine Schreib-Route;
# lesen geht weiter über routing_overview.
@mcp.tool()
def routing_overview() -> str:
"""Zeigt das aktuelle Gateway-Routing + Fallbacks."""
+8 -6
View File
@@ -2,14 +2,16 @@
"""
Voice-Sidecar für Mission Control 2.0 — lokales STT + gestuftes TTS für „Mit Hermes reden".
WARUM ein eigener Dienst? Die ML-Stacks (faster-whisper, piper, chatterbox + torch) brauchen
ihr eigenes Python-3.12-venv — das MC2-Backend läuft auf Python 3.14 und kann sie nicht
importieren. Genau wie der Mem0-Sidecar (mem0_service/) kapselt dieser schlanke FastAPI-Dienst
die schwere Voice-Logik und exponiert sie auf localhost. MC2 (backend/routers/voice.py) proxyt
ihn nach außen; der Browser-Voice-Client (Frontend „Sprechen"-Tab) redet nie direkt mit ihm.
WARUM ein eigener Dienst? Die ML-Stacks (onnx-asr/Parakeet, faster-whisper, piper, chatterbox + torch)
brauchen ihr eigenes Python-3.12-venv — das MC2-Backend läuft auf Python 3.14 und kann sie nicht
importieren. Dieser schlanke FastAPI-Dienst kapselt die schwere Voice-Logik und exponiert sie auf
localhost. MC2 (backend/routers/voice.py) proxyt ihn nach außen; der Browser-Voice-Client (Frontend
„Sprechen"-Tab) redet nie direkt mit ihm.
Pipeline-Rolle:
- STT : faster-whisper (Default `medium`, int8, CPU, Sprache=de) — Mikro-Audio → Text.
- STT : Parakeet-TDT 0.6B v3 über onnx-asr (Standard, int8, CPU) — Mikro-Audio → Text.
faster-whisper (`medium`, int8, CPU, Sprache=de) nur als Rückfall, wenn Parakeet nicht lädt
oder eine Anfrage `engine=whisper` verlangt.
- TTS : GESTUFT, Engine im Request wählbar (kein Lock-in):
* `piper` — schneller Standard, CPU, quasi-sofort, robustes Deutsch (thorsten).
* `chatterbox` — Premium/Wunschstimme (MIT), Voice-Cloning, dt. über Multilingual.