feat(settings): Hermes-Gateway in den Einstellungen anzeigen und neu starten (Etappe 1: Mac-App) #355

Open
opened 2026-11-12 21:08:01 +00:00 by alf · 1 comment
Owner

Warum

Das Hermes-Gateway ist nach Änderungen an Plugins (MCP-Einträge, Systemprompts) oder bei Hängern neu zu starten, und Iris zeigt weder seinen Zustand noch bietet es einen Neustart an. Die Mac-App kann das Gateway intern neu starten (HermesGatewayConfigWriter.restartGatewayAndWaitReachable), es fehlt aber jede Oberfläche. Beim ersten Chat-Durchlauf von iris-rustapp-crafter zeigte sich der Bedarf.

Entscheidungen (grill-me, bestätigt)

  1. Etappe 1 nur Mac-App, kein Wire-Protokoll. Etappe 2 (Server-Routen auf Mac- und Linux-Server, Anzeige in IrisClient, iOS, iris-web) ist ein Folge-Issue.
  2. Ort: Companion-Panel, Bereich „Server & Geräte“, Block „Hermes-Gateway“, aufgebaut wie der Git-Server-Block.
  3. Anzeige: Zustand mit Farbpunkt (läuft, startet, nicht erreichbar, Start fehlgeschlagen), Port 8642, PID, „läuft seit …“, Zahl der laufenden Hermes-Aufträge. Aktualisierung nur, solange der Bereich sichtbar ist; kein Hintergrund-Polling.
  4. Neustart: Knopf „Neu starten“ auf restartGatewayAndWaitReachable mit /health-Prüfung, Zeitlimit und Fehlermeldung. Laufen Aufträge, vorher Bestätigung mit der Zahl, sonst sofort. Kein hartes Verbot, kein Auto-Neustart.
  5. Maximale Laufzeit eines Laufs (HermesRunLimits.maxRunMinutesKey) zieht aus „Allgemein“ in diesen Block um (derselbe Schlüssel, der Wert bleibt). „Hide Steps“ bleibt in „Allgemein“.
  6. Die Logik (Zustand aus /health, gateway.lifecycle.json, laufenden Aufträgen) ist eine kleine, testbare Einheit mit Unit-Tests.

Nicht Teil

Server-Routen, Linux-Server, IrisClient, iOS, iris-web (Etappe 2); die Hermes-Logdatei im Fenster; Auto-Neustart.

## Warum Das Hermes-Gateway ist nach Änderungen an Plugins (MCP-Einträge, Systemprompts) oder bei Hängern neu zu starten, und Iris zeigt weder seinen Zustand noch bietet es einen Neustart an. Die Mac-App kann das Gateway intern neu starten (`HermesGatewayConfigWriter.restartGatewayAndWaitReachable`), es fehlt aber jede Oberfläche. Beim ersten Chat-Durchlauf von `iris-rustapp-crafter` zeigte sich der Bedarf. ## Entscheidungen (grill-me, bestätigt) 1. **Etappe 1 nur Mac-App**, kein Wire-Protokoll. Etappe 2 (Server-Routen auf Mac- und Linux-Server, Anzeige in IrisClient, iOS, iris-web) ist ein Folge-Issue. 2. **Ort:** Companion-Panel, Bereich „Server & Geräte“, Block „Hermes-Gateway“, aufgebaut wie der Git-Server-Block. 3. **Anzeige:** Zustand mit Farbpunkt (läuft, startet, nicht erreichbar, Start fehlgeschlagen), Port 8642, PID, „läuft seit …“, Zahl der laufenden Hermes-Aufträge. Aktualisierung nur, solange der Bereich sichtbar ist; kein Hintergrund-Polling. 4. **Neustart:** Knopf „Neu starten“ auf `restartGatewayAndWaitReachable` mit `/health`-Prüfung, Zeitlimit und Fehlermeldung. Laufen Aufträge, vorher Bestätigung mit der Zahl, sonst sofort. Kein hartes Verbot, kein Auto-Neustart. 5. **Maximale Laufzeit eines Laufs** (`HermesRunLimits.maxRunMinutesKey`) zieht aus „Allgemein“ in diesen Block um (derselbe Schlüssel, der Wert bleibt). „Hide Steps“ bleibt in „Allgemein“. 6. Die Logik (Zustand aus `/health`, `gateway.lifecycle.json`, laufenden Aufträgen) ist eine kleine, testbare Einheit mit Unit-Tests. ## Nicht Teil Server-Routen, Linux-Server, IrisClient, iOS, iris-web (Etappe 2); die Hermes-Logdatei im Fenster; Auto-Neustart.
Author
Owner

PR #357 gemergt: feat(settings): Hermes-Gateway in Server & Geräte anzeigen und neu starten (#355)
http://docker:3000/iris/Iris/pulls/357

Commits:

  • feat(settings): Hermes-Gateway in Server & Geräte anzeigen und neu starten (#355)

Stand: Etappe 1 gebaut (Mac-App), nicht von Hand ausprobiert

Befund: Die Mac-App konnte das Hermes-Gateway intern neu starten (HermesGatewayConfigWriter.restartGatewayAndWaitReachable), zeigte aber weder Zustand noch bot sie einen Knopf. Dabei fiel auf: ai.hermes.gateway (Port 8642) ist das Gateway, com.nousresearch.hermes-serve (Port 9119) nur die Hermes-Weboberfläche.

Geändert:

  • HermesGatewayStatus.swift (neu, abhängigkeitsfrei): Zustand aus /health, gateway.lifecycle.json und „startet gerade“; Texte; „Neustart abgeschlossen“ = antwortet und neue PID.
  • HermesGatewayStatusModel.swift (neu, abhängigkeitsfrei): refresh(), restart() (gesperrt beim Hochfahren, Zeitlimit 15 Min, Fehlermeldung), Aktionen kommen als Environment.
  • HermesRunWatchdog.activeRunCount(): Zahl der laufenden oder auf Freigabe wartenden Aufträge (nur von Iris registrierte).
  • CompanionPanelView.swift: Block „Hermes-Gateway“ in „Server & Geräte“ (kompaktes Panel und abgekoppeltes Fenster) mit Zustand, Port/PID/Version/Laufzeit, Aufträgen, „Neu starten“ (Bestätigung bei laufenden Aufträgen); „Maximale Laufzeit“ aus „Allgemein“ hierher verschoben (derselbe Schlüssel). Environment.live am Dateiende.
  • Localizable.xcstrings: neue Texte; scripts/test-hermes-gateway-status.sh + hermes-gateway-status-tests/.

Geprüft: Reine Logik und Modell mit Ersatz-Umgebung: 87 Prüfungen grün; sechs Gegenproben (PID-Wechsel ignoriert, Antwort schlägt Start nicht, Neustart beim Hochfahren erlaubt, Aufträge ohne Antwort, Zeitlimit ohne Wirkung, Exit 0 als Fehler) schlagen an. Xcode-Build des Iris-Schemas (AppleScript, ohne Neustart von Iris) erfolgreich. Echte Dateien/Antworten dieses Macs gegen die Parser gehalten: /health liefert status ok und Version 0.22.4, gateway.lifecycle.json hat phase running mit PID.

Nicht geprüft: Die Oberfläche selbst (Aussehen, Aufklappen, Bestätigungsdialog, Knopf im abgekoppelten Fenster) und ein echter Neustart des Gateways aus dem Block. Der Build des IrisClient-Schemas (die neuen Dateien sind abhängigkeitsfrei und per swiftc geprüft). Ob die Zahl laufender Aufträge zu den Läufen passt, die Hermes selbst kennt (nur Iris-registrierte werden gezählt). Die Aktualisierung läuft, solange der Block aufgeklappt ist und die Ansicht lebt; ein verstecktes, aber noch aufgeklapptes Menüleisten-Panel fragt weiter alle 5 Sekunden.

Grenzen: Nur dieser Mac; Linux-Server, IrisClient, iOS und iris-web folgen in #356.

Offen: Von Hand ausprobieren (Block aufklappen, Zustand prüfen, „Neu starten“ ohne und mit laufendem Auftrag, Laufzeit-Auswahl). status/zu-testen gesetzt.

PR #357 gemergt: feat(settings): Hermes-Gateway in Server & Geräte anzeigen und neu starten (#355) http://docker:3000/iris/Iris/pulls/357 Commits: - feat(settings): Hermes-Gateway in Server & Geräte anzeigen und neu starten (#355) --- ## Stand: Etappe 1 gebaut (Mac-App), nicht von Hand ausprobiert **Befund:** Die Mac-App konnte das Hermes-Gateway intern neu starten (`HermesGatewayConfigWriter.restartGatewayAndWaitReachable`), zeigte aber weder Zustand noch bot sie einen Knopf. Dabei fiel auf: `ai.hermes.gateway` (Port 8642) ist das Gateway, `com.nousresearch.hermes-serve` (Port 9119) nur die Hermes-Weboberfläche. **Geändert:** - `HermesGatewayStatus.swift` (neu, abhängigkeitsfrei): Zustand aus `/health`, `gateway.lifecycle.json` und „startet gerade“; Texte; „Neustart abgeschlossen“ = antwortet **und** neue PID. - `HermesGatewayStatusModel.swift` (neu, abhängigkeitsfrei): `refresh()`, `restart()` (gesperrt beim Hochfahren, Zeitlimit 15 Min, Fehlermeldung), Aktionen kommen als `Environment`. - `HermesRunWatchdog.activeRunCount()`: Zahl der laufenden oder auf Freigabe wartenden Aufträge (nur von Iris registrierte). - `CompanionPanelView.swift`: Block „Hermes-Gateway“ in „Server & Geräte“ (kompaktes Panel und abgekoppeltes Fenster) mit Zustand, Port/PID/Version/Laufzeit, Aufträgen, „Neu starten“ (Bestätigung bei laufenden Aufträgen); „Maximale Laufzeit“ aus „Allgemein“ hierher verschoben (derselbe Schlüssel). `Environment.live` am Dateiende. - `Localizable.xcstrings`: neue Texte; `scripts/test-hermes-gateway-status.sh` + `hermes-gateway-status-tests/`. **Geprüft:** Reine Logik und Modell mit Ersatz-Umgebung: 87 Prüfungen grün; sechs Gegenproben (PID-Wechsel ignoriert, Antwort schlägt Start nicht, Neustart beim Hochfahren erlaubt, Aufträge ohne Antwort, Zeitlimit ohne Wirkung, Exit 0 als Fehler) schlagen an. Xcode-Build des Iris-Schemas (AppleScript, ohne Neustart von Iris) erfolgreich. Echte Dateien/Antworten dieses Macs gegen die Parser gehalten: `/health` liefert `status ok` und Version 0.22.4, `gateway.lifecycle.json` hat `phase running` mit PID. **Nicht geprüft:** Die Oberfläche selbst (Aussehen, Aufklappen, Bestätigungsdialog, Knopf im abgekoppelten Fenster) und ein echter Neustart des Gateways aus dem Block. Der Build des IrisClient-Schemas (die neuen Dateien sind abhängigkeitsfrei und per `swiftc` geprüft). Ob die Zahl laufender Aufträge zu den Läufen passt, die Hermes selbst kennt (nur Iris-registrierte werden gezählt). Die Aktualisierung läuft, solange der Block aufgeklappt ist und die Ansicht lebt; ein verstecktes, aber noch aufgeklapptes Menüleisten-Panel fragt weiter alle 5 Sekunden. **Grenzen:** Nur dieser Mac; Linux-Server, IrisClient, iOS und iris-web folgen in #356. **Offen:** Von Hand ausprobieren (Block aufklappen, Zustand prüfen, „Neu starten“ ohne und mit laufendem Auftrag, Laufzeit-Auswahl). `status/zu-testen` gesetzt.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#355
No description provided.