feat(hermes): v8 — Hermes Agent mit Voice-Interface

Lokaler KI-Assistent auf dem Bosgame: Text + Sprache, Tool Calling,
WebSocket-Streaming. Steuerzentrale des Agentic OS.

- hermes_agent.py: ReAct-Agent mit Tool-Set (read_file, list_dir,
  run_command, system_status, memory r/w, web_search)
- routers/hermes.py: WS /chat, POST /transcribe (Whisper),
  POST /tts (Piper), GET /status, GET /pubkey
- HermesPanel.svelte: Chat-UI mit Token-Streaming, Tool-Anzeige,
  Mikrofon-Button (MediaRecorder), Setup-Wizard (Windows SSH)
- Modell-Routing: scout fuer einfache Tasks, coder fuer komplexe
- HERMES_* Env-Vars in config.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-06-23 14:18:48 +02:00
parent e02a1889b2
commit 3679465956
10 changed files with 1140 additions and 33 deletions
+10
View File
@@ -44,6 +44,16 @@ UPDATE_CMD = os.environ.get("MC_UPDATE_CMD", "")
DEFAULT_TTL = int(os.environ.get("MC_DEFAULT_TTL", "300"))
TOKEN = os.environ.get("MC_TOKEN", "") # leer = keine Auth (nur LAN!)
# Hermes Agent
HERMES_SIMPLE_MODEL = os.environ.get("HERMES_SIMPLE_MODEL", "scout")
HERMES_COMPLEX_MODEL = os.environ.get("HERMES_COMPLEX_MODEL", "coder")
HERMES_WINDOWS_HOST = os.environ.get("HERMES_WINDOWS_HOST", "")
HERMES_WINDOWS_USER = os.environ.get("HERMES_WINDOWS_USER", "TobisPC")
HERMES_SSH_KEY = Path(os.path.expanduser(os.environ.get("HERMES_SSH_KEY", "~/.ssh/id_ed25519_hermes_agent")))
PIPER_BIN = Path(os.environ.get("PIPER_BIN", "/opt/mission-control/piper/piper"))
PIPER_VOICE = Path(os.environ.get("PIPER_VOICE", "/opt/mission-control/piper/voices/de_DE-thorsten-medium.onnx"))
WHISPER_MODEL_SIZE = os.environ.get("WHISPER_MODEL", "medium")
# Self-Update ("Mission Control aktualisieren"): Quelle = git-Repo, Prod = laufende Installation.
SOURCE_DIR = os.path.expanduser(os.environ.get("MC_SOURCE_DIR", "~/mission-control"))
PROD_DIR = str(Path(__file__).resolve().parent)