Remote View: Menüpunkt „Hermes Dashboard“ für den verbundenen Server #74
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#74
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zweck
Im Einstellungen-Menu des Remote-View-Fensters (Zahnrad) fehlt der Zugang zum Hermes-Dashboard des
verbundenen Servers. Es soll ein Menüpunkt „Hermes Dashboard“ geben, der das Dashboard des Servers
öffnet, auf dem Iris gerade verbunden ist.
Spezifikation
Position: im Einstellungen-Menu nach „Flow-Debugger“ (bei den Fenster-Öffnen-Punkten, vor dem
Divider zu Onboard-Assistent / Iris-Server aktualisieren / iOS-Pairing).
Öffnen: in einem Iris-eigenen Fenster (WKWebView), wie das Hermes-Web-GUI-Fenster aus iris/Iris#70.
Bei erneutem Klick wird dasselbe Fenster fokussiert, nicht ein zweites geöffnet.
Sichtbarkeit: nur wenn Hermes auf dem Server verfügbar ist (
available_agents.hermesaus/health,RemoteServerClient.swift:846). Menüpunkt deaktiviert, wenn nicht verbunden — wie die Nachbarn.Login: das Fenster zeigt die Hermes-Login-Seite des Servers; die gespeicherten Credentials
(
hermesRemoteServeUsername/hermesRemoteServePassword) werden vorausgefüllt, wenn sie zurVerbindung passen.
Rahmen, der die Bauform bestimmt (live geprüft)
hermes serve --host 0.0.0.0—app.state.serves_spa = not headless(
hermes_cli/web_server.py:1326), live:GET http://127.0.0.1:9119/→302 /login, danach nurJSON-API, kein SPA.
iris-hermesstartethermes gateway restart(Compose-CMD) — das ist nur dasGateway auf 8642, bewusst nicht auf den Host gemappt, nur intern im Docker-Netzwerk
(
http://hermes:8642). Dort gibt es überhaupt keinen Webserver.Ein
hermes dashboardverweigert sich gegen einen headless Backend (exit 78) — das Dashboard brauchteinen eigenen SPA-liefernden Prozess auf dem Server.
(
should_require_auth,hermes_cli/web_server.py:481). Der Client sitzt nicht auf der Loopback desServers, also ist das Server-Dashboard immer gated — anders als Iris' lokales Fenster aus #70,
das login-frei ist.
PinnedWebViewinHTMLPreviewWindowController.swift:135prüft die ServerTrust gegen den gepinnten Fingerabdruck.
HermesWebGUIWindowController(#70) lädtbisher nur
http://127.0.0.1:<port>ohne Pinning — das muss auf eine https-URL des Serversverallgemeinert werden.
Beteiligte Dateien
Iris/RemoteClientView.swift— Einstellungen-MenuIris/HermesWebGUIWindowController.swift—showOrFocus(port:)auf URL verallgemeinern,Pinning-Delegate für https
Iris/HermesWebGUIManager.swift— lokaler Fall existiert aus #70; für Gegenstellen braucht derServer einen Start-Mechanismus
IrisRemoteServer.swiftapp/— Wire-Protokoll, beide Server im selben Zug)Iris/Localizable.xcstrings— neuer Schlüssel mit englischer ÜbersetzungEntscheidung, die den Umfang bestimmt
Wie das Server-Dashboard erreichbar wird:
hermes dashboard --no-open --port 0(genau das Muster aus #70), Linux per Exec imiris-hermes-Container — und der Client öffnet die gemeldete URL im Fenster. Der LaunchAgent und das Gateway
bleiben unberührt. Braucht eine neue Server-Route (beide Server) und Login im Fenster.
hermes dashboardumstellen,Compose-Dienst mit Port). Das ändert den etablierten headless-Betrieb und ist mehr Dauerbetrieb.
Nicht enthalten
PR #36 gemergt: feat(hermes): Hermes-Dashboard-Proxy — Start-Route und Reverse-Proxy (iris/Iris#74)
iris/iris-linux-server#36
Commits:
PR #75 gemergt: feat(remote): Menüpunkt Hermes Dashboard — Client-Fenster und Server-Proxy (iris/Iris#74)
#75
Commits:
PR #37 gemergt: docs(plan): Lessons Learned zum SPA-Präfix-Proxy (iris/Iris#74)
iris/iris-linux-server#37
Commits:
Stand (2026-10-17)
Gebaut: Client-Menüpunkt im Remote-View-Einstellungen-Menu (
RemoteClientView.swift),RemoteServerClient.startHermesDashboard()(POST /hermes/dashboard/start), FensterHermesDashboardWindowController.swift(Singleton-NSWindow mitPinnedWebView, Pinning gegen dasselbst-signierte Server-Zertifikat — anders als das loopback-Fenster aus iris/Iris#70). Mac-Server:
handleHermesDashboardStart+handleHermesDashboardProxy, ZustandhermesDashboardProxiesnur aufserverQueue(weilHermesWebGUIManager@MainActorist);HermesWebGUIManagersetzt dasSession-Token jetzt selbst und gibt Port + Token über
dashboardEndpoint(hermesPath:)zurück.Linux-Server:
app/hermes_dashboard_routes.py, eigenerhermes dashboard --isolated-Prozess imHermes-Container auf Port 9119 (nur Docker-Netzwerk), Basic-Provider-Passwort persistent per
secrets_store, einmalig gemintete Session, Cookie bei jeder weitergeleiteten Anfrage.Gemessen / geprüft:
alf@iris-server(tests/test_hermes_dashboard.py)— Start-Pfad-Form, unbekanntes Token 404, injizierter Vollpräfix, API-Call durch den Präfix,
Schreibmethode POST, Content-Type-Durchreichung, CSS-Asset-URLs umgeschrieben. Deployt per rsync +
--force-recreate, Sandbox-Container entfernt,/healthantwortet.-m "not slow": 400 grün, 18 Fehler — alle Lese-/Schreib-Timeouts gegen denlaufenden Server (Backup, Vault-Maintenance, freecad-Plugin), inhaltlich unverändert. Zwei Tests
(
test_gpu_targets.py,test_plugin_ssh_target.py) lassen sich lokal nicht sammeln, weilapp/email_config_store.pyerst beim Docker-Build ausvendored/nachapp/kopiert wird.Grenzen:
/api/wswird bewusst nicht durchgeleitet, der Chat-Tab im Dashboard funktioniert nicht.X-Device-ID; die Dashboard-Requests zählen unter dem IP-Geräte-Eintrag in„Verbundene Geräte“ (dieselbe Folge wie beim htmlserver-Proxy).
Login-POST über den Proxy) kam aus einem Live-Test im selben Zug und steht als Kommentar im Code.
Offen: Klick, Fensterfokus und Laden im laufenden Iris; iOS-Parität, falls gewünscht.