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
+21
View File
@@ -268,6 +268,27 @@ def hermes_status():
}
@router.get("/hermes/agent", dependencies=[Depends(auth)])
def hermes_agent_status():
"""Phase 4 — Live-Status des Hermes-Agent-Gateways + Cron-Tickers."""
from hermes_control import agent_status
return agent_status()
@router.get("/hermes/cron", dependencies=[Depends(auth)])
def hermes_cron():
"""Phase 4 — geplante Cron-Jobs des Hermes-Agenten (inkl. pausierter)."""
from hermes_control import cron_jobs
return {"jobs": cron_jobs()}
@router.get("/hermes/skills", dependencies=[Depends(auth)])
def hermes_skills():
"""Phase 4 — installierte Skills des Hermes-Agenten + Nutzungszaehler."""
from hermes_control import skills
return {"skills": skills()}
@router.get("/hermes/pubkey", dependencies=[Depends(auth)])
def hermes_pubkey():
"""Gibt den SSH-Public-Key des Hermes Agent zurueck (fuer Windows authorized_keys)."""