feat(v9): Phase 4 — Agent-Cockpit (Status/Cron/Skills) im Dashboard

Macht das "geschenkte v9" sichtbar. Read-only Control-Plane-Reads:
- hermes_control.py: gateway_state.json + cron-Heartbeat (Status),
  `hermes cron list` + `hermes skills list` via COLUMNS=400 (kein
  Rich-Truncation) als kanonische Quelle, .usage.json fuer Nutzung.
  TTL-Cache (10s) gegen Polling-Last.
- routers/hermes.py: GET /api/hermes/{agent,cron,skills}.
- HermesPanel: aufklappbares "Cockpit" — Status-Badges, Cron-Jobs,
  Skills (sortiert nach Nutzung, aktiv/inaktiv).
- config.py: HERMES_HOME, HERMES_BIN.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-06-24 16:18:00 +02:00
parent f816c0c879
commit ecf974d9c0
5 changed files with 346 additions and 41 deletions
+5
View File
@@ -69,6 +69,11 @@ def _read_hermes_api_key() -> str:
HERMES_API_KEY = _read_hermes_api_key()
# Control-Plane-Reads (Phase 4): Hermes legt Status/Cron/Skills lokal unter
# ~/.hermes ab; die `hermes`-CLI ist die kanonische Quelle fuer Cron/Skills.
# MC laeuft als hitonabi auf der Box -> direkter Lese-/Exec-Zugriff.
HERMES_HOME = Path(os.path.expanduser(os.environ.get("HERMES_HOME", "~/.hermes")))
HERMES_BIN = os.path.expanduser(os.environ.get("HERMES_BIN", "~/.local/bin/hermes"))
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")))