Plugin-Konfiguration: Zustandsanzeige im Marktplatz (config-status) und Rechnerwahl bei „Laden“ #85

Closed
opened 2026-10-19 10:03:27 +00:00 by alf · 13 comments
Owner

Warum

Ob ein Plugin konfiguriert ist, sieht man heute nur, wenn man jedes Konfigurationsfenster einzeln öffnet. Außerdem fragt der Marktplatz bei „Laden“ nicht, auf welchem Rechner ein Plugin laufen soll, und lehnt Plugins mit Installationsfragen ab (Marker: „braucht Einrichtungsfragen …“). Folge von iris/iris-plugins#115: Plugins kennen weder SSH-Adresse noch Schlüssel, sondern wählen ihren Rechner im Konfigurationsfenster nur noch aus einem Picker (Kennung host_id).

Spezifikation (Grill-me-Runde, 2026-10-19)

Zustandsanzeige

  • Jedes Plugin mit Konfigurationsfenster (has_settings_panel) meldet seinen Zustand selbst: Befehl config-status in der panel_api; Plugins ohne Skript bekommen ein minimales.
  • Antwort {state, message}: Grün configured, Gelb needs_configuration, Rot Fehler bei der Prüfung (Skript wirft, Zeitüberschreitung, Befehl fehlt) mit dem Fehlertext sichtbar in der Kachel. Nichts passiert still.
  • Gelb nur, wenn das Plugin so, wie es steht, nicht funktioniert (Marker lokal: Grün). Ob ein Rechner erreichbar ist, gehört in den Check-Knopf aus #115, nicht hierher.
  • Neue Route GET /plugins/:id/config-status auf beiden Servern (Wire-Protokoll, Eintrag in 02-Wire-Protokoll.md). Fehler kommen als {state: "error", message}, nicht als HTTP-Fehler; das Zeitlimit (10 s je Plugin) setzt der Server.
  • Abfrage beim Öffnen des Marktplatzes, parallel je Plugin; die Kacheln erscheinen sofort, die Knöpfe füllen sich nach. Nach dem Schließen eines Konfigurationsfensters wird nur dieses Plugin neu abgefragt; „Neu prüfen“ für alle. Kein Hintergrund-Polling.
  • Der Knopf „Konfigurieren“ steht in jeder Kachel eines installierten Plugins mit Panel, in „Entdecken“ und „Installiert“, und in Einstellungen → Plugins, überall mit derselben Farbe aus derselben Abfrage. Ein Klick öffnet das Panel (Brücke irisMarketplace in der App, config-webview-url im Browser-Client).
  • publish-plugins.sh lehnt ein Plugin mit Panel ab, das config-status nicht führt. Von Hand installiert zeigt es Rot „config-status fehlt“.

Rechnerwahl bei „Laden“

  • Manifest: host_capabilities (was ein Rechner mitbringen muss) plus neu local_mode: true (das Plugin läuft auch lokal auf dem Server). Die Installations-Sperre blockiert ein Plugin mit local_mode nie.
  • Kein passender Host: Plugin mit local_mode wird lokal installiert (Marker), sonst blockiert die Sperre. Mindestens ein passender Host (auch genau einer): Plugin wird installiert, das Konfigurationsfenster öffnet sich mit dem Picker. Bis zur Wahl ist der Knopf gelb.
  • Der Picker führt bei Plugins mit local_mode zusätzlich „Dieser Iris-Server (lokal)“.
  • Hook-Vertrag: Der Server setzt vor post_install IRIS_HOST_MODE=local (Hook richtet die lokale Umgebung ein) oder pending (Hook richtet nichts ein, das Panel richtet nach der Wahl ein); ohne Host-Bezug fehlt die Variable. Beide Server gleich.
  • Marker verliert seine Installationsfrage MARKER_SERVER_URL, post_install.sh bricht auf Intel/Linux nicht mehr ab, und ein neuer Panel-Befehl richtet die lokale Umgebung nach der Wahl ein.

Reihenfolge

Erst die Infrastruktur (dieses Issue), dann Plugin für Plugin in eigenen Issues in iris-plugins (Marker: #135). Marker und iris-server-hosts bekommen config-status zuerst; die übrigen Plugins mit Panel zeigen im Übergang bewusst Rot. Eingereicht wird erst nach Alfs Test; jedes Plugin wird sofort veröffentlicht, damit er es aus dem Marktplatz installieren kann.

Stand

  • Route GET /plugins/:id/config-status auf Linux-Server und Mac-Server, Eintrag in 02-Wire-Protokoll.md — eingereicht, von Alf getestet (2026-10-19)
  • Installations-Sperre und Picker mit local_mode; IRIS_HOST_MODE für den Hook auf beiden Servern — eingereicht, von Alf getestet (2026-10-19)
  • Marktplatz-Seite (geteiltes HTML, Abgleich mit dem Linux-Server): Knopf mit Farbe, parallele Abfrage, „Neu prüfen“; „Laden“ öffnet bei passenden Hosts das Konfigurationsfenster — eingereicht, von Alf getestet (2026-10-19)
  • Einstellungen → Plugins: dieselbe Farbe am vorhandenen „Konfigurieren“ — eingereicht, von Alf getestet (2026-10-19)
  • publish-plugins.sh: Plugin mit Panel ohne config-status wird abgelehnt — eingereicht, von Alf getestet (2026-10-19)
  • Marker 1.18+: config-status, kein install_config, tolerantes post_install, Befehl für die lokale Einrichtung (iris-plugins#135) — eingereicht, von Alf getestet (2026-10-19)
  • iris-server-hosts: config-status; im Marktplatz veröffentlichen, das veraltete gpu-hosts 0.2.3 entfernen — eingereicht, von Alf getestet (2026-10-19)
  • iOS nachholen (iPhone getestet 2026-10-19): native Ansicht (MarketplaceView, PluginManagementView) bekommt den Knopf mit Farbe und die Rechnerwahl; erst nach Alfs Test am Mac, bleibt im selben Issue offen
  • Übrige Plugins mit Panel bekommen config-status (heartmula, whisper, qwen-tts-linux, comfyui-bridge in ihren Umstellungs-Issues; die anderen in einem Folge-Issue)
  • Alfs Test am Mac, danach Einreichen
  • Linux-Server deployen und die neuen Routen live prüfen (2026-10-19)

Verlauf und PRs stehen in den Kommentaren. Verwandt: iris/iris-plugins#115, iris/iris-plugins#135.

## Warum Ob ein Plugin konfiguriert ist, sieht man heute nur, wenn man jedes Konfigurationsfenster einzeln öffnet. Außerdem fragt der Marktplatz bei „Laden“ nicht, auf welchem Rechner ein Plugin laufen soll, und lehnt Plugins mit Installationsfragen ab (Marker: „braucht Einrichtungsfragen …“). Folge von iris/iris-plugins#115: Plugins kennen weder SSH-Adresse noch Schlüssel, sondern wählen ihren Rechner im Konfigurationsfenster nur noch aus einem Picker (Kennung `host_id`). ## Spezifikation (Grill-me-Runde, 2026-10-19) **Zustandsanzeige** - Jedes Plugin mit Konfigurationsfenster (`has_settings_panel`) meldet seinen Zustand selbst: Befehl `config-status` in der `panel_api`; Plugins ohne Skript bekommen ein minimales. - Antwort `{state, message}`: **Grün** `configured`, **Gelb** `needs_configuration`, **Rot** Fehler bei der Prüfung (Skript wirft, Zeitüberschreitung, Befehl fehlt) mit dem Fehlertext sichtbar in der Kachel. Nichts passiert still. - Gelb nur, wenn das Plugin so, wie es steht, nicht funktioniert (Marker lokal: Grün). Ob ein Rechner erreichbar ist, gehört in den Check-Knopf aus #115, nicht hierher. - Neue Route `GET /plugins/:id/config-status` auf beiden Servern (Wire-Protokoll, Eintrag in `02-Wire-Protokoll.md`). Fehler kommen als `{state: "error", message}`, nicht als HTTP-Fehler; das Zeitlimit (10 s je Plugin) setzt der Server. - Abfrage beim Öffnen des Marktplatzes, parallel je Plugin; die Kacheln erscheinen sofort, die Knöpfe füllen sich nach. Nach dem Schließen eines Konfigurationsfensters wird nur dieses Plugin neu abgefragt; „Neu prüfen“ für alle. Kein Hintergrund-Polling. - Der Knopf „Konfigurieren“ steht in jeder Kachel eines installierten Plugins mit Panel, in „Entdecken“ und „Installiert“, und in Einstellungen → Plugins, überall mit derselben Farbe aus derselben Abfrage. Ein Klick öffnet das Panel (Brücke `irisMarketplace` in der App, `config-webview-url` im Browser-Client). - `publish-plugins.sh` lehnt ein Plugin mit Panel ab, das `config-status` nicht führt. Von Hand installiert zeigt es Rot „config-status fehlt“. **Rechnerwahl bei „Laden“** - Manifest: `host_capabilities` (was ein Rechner mitbringen muss) plus neu `local_mode: true` (das Plugin läuft auch lokal auf dem Server). Die Installations-Sperre blockiert ein Plugin mit `local_mode` nie. - **Kein passender Host:** Plugin mit `local_mode` wird lokal installiert (Marker), sonst blockiert die Sperre. **Mindestens ein passender Host (auch genau einer):** Plugin wird installiert, das Konfigurationsfenster öffnet sich mit dem Picker. Bis zur Wahl ist der Knopf gelb. - Der Picker führt bei Plugins mit `local_mode` zusätzlich „Dieser Iris-Server (lokal)“. - Hook-Vertrag: Der Server setzt vor `post_install` `IRIS_HOST_MODE=local` (Hook richtet die lokale Umgebung ein) oder `pending` (Hook richtet nichts ein, das Panel richtet nach der Wahl ein); ohne Host-Bezug fehlt die Variable. Beide Server gleich. - Marker verliert seine Installationsfrage `MARKER_SERVER_URL`, `post_install.sh` bricht auf Intel/Linux nicht mehr ab, und ein neuer Panel-Befehl richtet die lokale Umgebung nach der Wahl ein. ## Reihenfolge Erst die Infrastruktur (dieses Issue), dann Plugin für Plugin in eigenen Issues in `iris-plugins` (Marker: #135). Marker und iris-server-hosts bekommen `config-status` zuerst; die übrigen Plugins mit Panel zeigen im Übergang bewusst Rot. Eingereicht wird erst nach Alfs Test; jedes Plugin wird sofort veröffentlicht, damit er es aus dem Marktplatz installieren kann. ## Stand - [x] Route `GET /plugins/:id/config-status` auf Linux-Server und Mac-Server, Eintrag in `02-Wire-Protokoll.md` — eingereicht, von Alf getestet (2026-10-19) - [x] Installations-Sperre und Picker mit `local_mode`; `IRIS_HOST_MODE` für den Hook auf beiden Servern — eingereicht, von Alf getestet (2026-10-19) - [x] Marktplatz-Seite (geteiltes HTML, Abgleich mit dem Linux-Server): Knopf mit Farbe, parallele Abfrage, „Neu prüfen“; „Laden“ öffnet bei passenden Hosts das Konfigurationsfenster — eingereicht, von Alf getestet (2026-10-19) - [x] Einstellungen → Plugins: dieselbe Farbe am vorhandenen „Konfigurieren“ — eingereicht, von Alf getestet (2026-10-19) - [x] `publish-plugins.sh`: Plugin mit Panel ohne `config-status` wird abgelehnt — eingereicht, von Alf getestet (2026-10-19) - [x] Marker 1.18+: `config-status`, kein `install_config`, tolerantes `post_install`, Befehl für die lokale Einrichtung (iris-plugins#135) — eingereicht, von Alf getestet (2026-10-19) - [x] iris-server-hosts: `config-status`; im Marktplatz veröffentlichen, das veraltete `gpu-hosts 0.2.3` entfernen — eingereicht, von Alf getestet (2026-10-19) - [x] **iOS nachholen (iPhone getestet 2026-10-19):** native Ansicht (`MarketplaceView`, `PluginManagementView`) bekommt den Knopf mit Farbe und die Rechnerwahl; erst nach Alfs Test am Mac, bleibt im selben Issue offen - [ ] Übrige Plugins mit Panel bekommen `config-status` (heartmula, whisper, qwen-tts-linux, comfyui-bridge in ihren Umstellungs-Issues; die anderen in einem Folge-Issue) - [x] Alfs Test am Mac, danach Einreichen - [x] Linux-Server deployen und die neuen Routen live prüfen (2026-10-19) Verlauf und PRs stehen in den Kommentaren. Verwandt: iris/iris-plugins#115, iris/iris-plugins#135.
Author
Owner

Stand des Baus (2026-10-19): gebaut, noch nicht eingereicht — wartet auf Alfs Test

Nichts davon ist in main; die Änderungen liegen ungeshippt in den Arbeitsverzeichnissen (Iris, Linux-Server, Plugins, Wurzel). Veröffentlicht sind die zwei Plugins, damit Alf sie aus dem Marktplatz installieren kann (Registry: iris-server-hosts 0.4.0, Marker 1.19.0; gpu-hosts ist entfernt).

Linux-Server — config_status.py (reine Auslegung der Antwort), GET /plugins/:id/config-status, GET /marketplace/api/plugins/:id/config-status (Lese-Token der Seite), local_mode_applies/host_mode/gate in hosts_targets.py (Sperre blockiert Plugins mit lokalem Weg nie, Picker führt self bei local_mode), host_mode im Ergebnis von install, Katalogfeld configurable. panel_api-Ausführung als _run_panel_command herausgelöst (beide Routen nutzen sie).

Mac-App — dieselben Routen und Regeln (IrisConfigStatus, IrisHostCapabilities.localModeApplies/hostMode, IrisHostProbe.gate, PluginManifest.localMode), IRIS_HOST_MODE für den post_install-Hook, host_mode im Install-Ergebnis, Katalogfeld configurable, Bridge-Aktion configure (öffnet das Konfigurationsfenster; bei host_mode == "pending" nach der Installation automatisch), gefärbter Knopf „Konfigurieren“ in Einstellungen → Plugins (lokal und Remote) mit sichtbarem Text bei Gelb/Rot.

Marktplatz-Seite (geteilt, check-marketplace-page-sync grün) — Knopf mit Farbe in jeder Kachel installierter Plugins mit Panel, parallele Abfrage beim Öffnen, „Neu prüfen“, Zustand nach dem Schließen des Konfigurationsfensters für das betroffene Plugin neu.

Plugins — publish-plugins.sh lehnt Plugins mit Konfigurationsfenster ohne config-status ab (registry_index.py); iris-server-hosts 0.4.0 mit config-status (Grün, sobald ein Rechner eingetragen ist; kein SSH); Marker 1.19.0 (kein install_config, host_capabilities + local_mode: ["macos"], tolerantes post_install mit IRIS_HOST_MODE, config-status, local-install, Picker mit „Bitte wählen …“ und lokaler Einrichtung).

Geprüft: Linux 7 neue Tests (config_status) + 7 neue in test_hosts_targets/test_plugin_install_gate (jede Datei einzeln grün); Mac-Prüfprogramm scripts/iris-hosts-harness grün (17 neue Checks), scripts/test-marketplace-core.sh 202 grün; registry_index 41 Tests grün (3 neu); iris-server-hosts 89 Tests, Mutationstest 76 von 76; Marker 13 neue Tests; JavaScript von Marktplatz-Seite und Marker-Panel per node --check.

Abweichungen von der Spezifikation (bitte prüfen):

  1. local_mode ist true oder eine Plattformliste. Marker hat ["macos"], weil die lokale Umgebung nur auf dem Mac läuft; auf dem Linux-Server bleibt die Sperre für Marker.
  2. Der Linux-Server führt keine Hooks aus (hooks_executed: false), IRIS_HOST_MODE gibt es deshalb nur auf dem Mac. Der Linux-Server meldet host_mode im Install-Ergebnis; der Client öffnet daraufhin das Konfigurationsfenster.
  3. Die Seite fragt über eine Lese-Route des Marktplatzes (/marketplace/api/plugins/:id/config-status), weil sie nur das Lese-Token hat, nie das Bearer-Token. Dieselbe Antwort wie /plugins/:id/config-status.

Nicht verifiziert: Die Mac-Dateien außerhalb des Prüfprogramms (IrisRemoteServer, PluginManager, Marktplatz-Fenster, Ansichten) sind nicht gebaut (xcodebuild ist in diesem Projekt verboten); der erste Xcode-Build kann Fehler melden. Der Linux-Server ist nicht neu deployt, die Routen dort sind nur per Unit-Test geprüft.

Offen: iOS nachholen; config-status für heartmula, whisper, qwen-tts-linux, comfyui-bridge (ihre Umstellungs-Issues) und die übrigen Plugins mit Panel (bis dahin Rot); der Remote-Verwaltungsdialog fragt den Zustand nur beim Laden ab (nicht nach dem Schließen des Fensters); Alfs Test, danach Einreichen.

## Stand des Baus (2026-10-19): gebaut, noch nicht eingereicht — wartet auf Alfs Test Nichts davon ist in `main`; die Änderungen liegen ungeshippt in den Arbeitsverzeichnissen (Iris, Linux-Server, Plugins, Wurzel). Veröffentlicht sind die zwei Plugins, damit Alf sie aus dem Marktplatz installieren kann (Registry: iris-server-hosts 0.4.0, Marker 1.19.0; `gpu-hosts` ist entfernt). **Linux-Server** — `config_status.py` (reine Auslegung der Antwort), `GET /plugins/:id/config-status`, `GET /marketplace/api/plugins/:id/config-status` (Lese-Token der Seite), `local_mode_applies`/`host_mode`/`gate` in `hosts_targets.py` (Sperre blockiert Plugins mit lokalem Weg nie, Picker führt `self` bei `local_mode`), `host_mode` im Ergebnis von `install`, Katalogfeld `configurable`. `panel_api`-Ausführung als `_run_panel_command` herausgelöst (beide Routen nutzen sie). **Mac-App** — dieselben Routen und Regeln (`IrisConfigStatus`, `IrisHostCapabilities.localModeApplies/hostMode`, `IrisHostProbe.gate`, `PluginManifest.localMode`), `IRIS_HOST_MODE` für den `post_install`-Hook, `host_mode` im Install-Ergebnis, Katalogfeld `configurable`, Bridge-Aktion `configure` (öffnet das Konfigurationsfenster; bei `host_mode == "pending"` nach der Installation automatisch), gefärbter Knopf „Konfigurieren“ in Einstellungen → Plugins (lokal und Remote) mit sichtbarem Text bei Gelb/Rot. **Marktplatz-Seite** (geteilt, `check-marketplace-page-sync` grün) — Knopf mit Farbe in jeder Kachel installierter Plugins mit Panel, parallele Abfrage beim Öffnen, „Neu prüfen“, Zustand nach dem Schließen des Konfigurationsfensters für das betroffene Plugin neu. **Plugins** — `publish-plugins.sh` lehnt Plugins mit Konfigurationsfenster ohne `config-status` ab (`registry_index.py`); iris-server-hosts 0.4.0 mit `config-status` (Grün, sobald ein Rechner eingetragen ist; kein SSH); Marker 1.19.0 (kein `install_config`, `host_capabilities` + `local_mode: ["macos"]`, tolerantes `post_install` mit `IRIS_HOST_MODE`, `config-status`, `local-install`, Picker mit „Bitte wählen …“ und lokaler Einrichtung). **Geprüft:** Linux 7 neue Tests (`config_status`) + 7 neue in `test_hosts_targets`/`test_plugin_install_gate` (jede Datei einzeln grün); Mac-Prüfprogramm `scripts/iris-hosts-harness` grün (17 neue Checks), `scripts/test-marketplace-core.sh` 202 grün; `registry_index` 41 Tests grün (3 neu); iris-server-hosts 89 Tests, Mutationstest 76 von 76; Marker 13 neue Tests; JavaScript von Marktplatz-Seite und Marker-Panel per `node --check`. **Abweichungen von der Spezifikation (bitte prüfen):** 1. **`local_mode` ist `true` oder eine Plattformliste.** Marker hat `["macos"]`, weil die lokale Umgebung nur auf dem Mac läuft; auf dem Linux-Server bleibt die Sperre für Marker. 2. **Der Linux-Server führt keine Hooks aus** (`hooks_executed: false`), `IRIS_HOST_MODE` gibt es deshalb nur auf dem Mac. Der Linux-Server meldet `host_mode` im Install-Ergebnis; der Client öffnet daraufhin das Konfigurationsfenster. 3. **Die Seite fragt über eine Lese-Route des Marktplatzes** (`/marketplace/api/plugins/:id/config-status`), weil sie nur das Lese-Token hat, nie das Bearer-Token. Dieselbe Antwort wie `/plugins/:id/config-status`. **Nicht verifiziert:** Die Mac-Dateien außerhalb des Prüfprogramms (`IrisRemoteServer`, `PluginManager`, Marktplatz-Fenster, Ansichten) sind nicht gebaut (`xcodebuild` ist in diesem Projekt verboten); der erste Xcode-Build kann Fehler melden. Der Linux-Server ist nicht neu deployt, die Routen dort sind nur per Unit-Test geprüft. **Offen:** iOS nachholen; `config-status` für heartmula, whisper, qwen-tts-linux, comfyui-bridge (ihre Umstellungs-Issues) und die übrigen Plugins mit Panel (bis dahin Rot); der Remote-Verwaltungsdialog fragt den Zustand nur beim Laden ab (nicht nach dem Schließen des Fensters); Alfs Test, danach Einreichen.
Author
Owner

iOS nachgezogen (gebaut, noch nicht auf dem iPhone getestet, nicht eingereicht)

Befund (Alf, am iPhone): In der iOS-App zeigt die Marktplatz-Seite den neuen Knopf „Konfigurieren“, ein Klick tut nichts, und nach „Laden“ öffnet sich kein Konfigurationsfenster. Ursache: Die iOS-App bettet dieselbe geteilte Seite ein und hat eine eigene Brücke (MarketplaceController), die nur install, update, remove, update_all kennt; configure wurde verworfen. (Meine frühere Annahme, iOS habe eine eigene native Ansicht, stimmte für die Marktplatz-Kacheln nicht; nativ ist nur die Plugin-Liste.)

Geändert (IrisRemote):

  • Brücke: Aktion configure (öffnet die Konfigurationsseite des Plugins vollbildig über dem Marktplatz, über config-webview-url; Rückmeldung opened/error); bei host_mode == "pending" im Install-Ergebnis öffnet sich die Seite gleich nach der Installation; beim Schließen löst die App in der Marktplatz-Seite focus aus, damit sie den Zustand des betroffenen Plugins neu abfragt.
  • Plugin-Liste (PluginManagementView): Der Knopf „Configure“ ist grün, gelb oder rot, bei Gelb/Rot steht der Text darunter; Abfrage aller Plugins gleichzeitig beim Öffnen und nach dem Schließen einer Konfigurationsseite (PluginStore.fetchConfigStatus).
  • IrisConfigStatus.swift ist eine Kopie der Mac-Quelle (dieselbe Auslegung der Antwort); tools/check-marketplace-page-sync prüft jetzt auch diese Kopie.

Geprüft: iOS-Ziel baut (xcodebuild, ohne Signatur, BUILD SUCCEEDED). Nicht geprüft: das Verhalten auf dem iPhone.

Offen: Alfs Test am iPhone (die App muss neu installiert werden); der iOS-Punkt der Checkliste bleibt offen, bis er getestet ist.

## iOS nachgezogen (gebaut, noch nicht auf dem iPhone getestet, nicht eingereicht) **Befund (Alf, am iPhone):** In der iOS-App zeigt die Marktplatz-Seite den neuen Knopf „Konfigurieren“, ein Klick tut nichts, und nach „Laden“ öffnet sich kein Konfigurationsfenster. Ursache: Die iOS-App bettet dieselbe geteilte Seite ein und hat eine eigene Brücke (`MarketplaceController`), die nur `install`, `update`, `remove`, `update_all` kennt; `configure` wurde verworfen. (Meine frühere Annahme, iOS habe eine eigene native Ansicht, stimmte für die Marktplatz-Kacheln nicht; nativ ist nur die Plugin-Liste.) **Geändert (`IrisRemote`):** - Brücke: Aktion `configure` (öffnet die Konfigurationsseite des Plugins vollbildig über dem Marktplatz, über `config-webview-url`; Rückmeldung `opened`/`error`); bei `host_mode == "pending"` im Install-Ergebnis öffnet sich die Seite gleich nach der Installation; beim Schließen löst die App in der Marktplatz-Seite `focus` aus, damit sie den Zustand des betroffenen Plugins neu abfragt. - Plugin-Liste (`PluginManagementView`): Der Knopf „Configure“ ist grün, gelb oder rot, bei Gelb/Rot steht der Text darunter; Abfrage aller Plugins gleichzeitig beim Öffnen und nach dem Schließen einer Konfigurationsseite (`PluginStore.fetchConfigStatus`). - `IrisConfigStatus.swift` ist eine Kopie der Mac-Quelle (dieselbe Auslegung der Antwort); `tools/check-marketplace-page-sync` prüft jetzt auch diese Kopie. **Geprüft:** iOS-Ziel baut (`xcodebuild`, ohne Signatur, BUILD SUCCEEDED). Nicht geprüft: das Verhalten auf dem iPhone. **Offen:** Alfs Test am iPhone (die App muss neu installiert werden); der iOS-Punkt der Checkliste bleibt offen, bis er getestet ist.
Author
Owner

PR #86 gemergt: feat(plugins): Zustand der Plugin-Konfiguration (config-status) im Marktplatz, Rechnerwahl bei „Laden“ (#85)
#86

Commits:

  • feat(plugins): Zustand der Plugin-Konfiguration (config-status) im Marktplatz, Rechnerwahl bei „Laden“ (#85)
PR #86 gemergt: feat(plugins): Zustand der Plugin-Konfiguration (config-status) im Marktplatz, Rechnerwahl bei „Laden“ (#85) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/86 Commits: - feat(plugins): Zustand der Plugin-Konfiguration (config-status) im Marktplatz, Rechnerwahl bei „Laden“ (#85)
Author
Owner

PR #17 gemergt: feat(marketplace): Konfigurieren-Knopf mit Zustand, Konfigurationsseite nach „Laden“ (iris/Iris#85)
iris/2ndbrain-ios#17

Commits:

  • feat(marketplace): Konfigurieren-Knopf mit Zustand, Konfigurationsseite nach „Laden“ (iris/Iris#85)
PR #17 gemergt: feat(marketplace): Konfigurieren-Knopf mit Zustand, Konfigurationsseite nach „Laden“ (iris/Iris#85) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/17 Commits: - feat(marketplace): Konfigurieren-Knopf mit Zustand, Konfigurationsseite nach „Laden“ (iris/Iris#85)
Author
Owner

PR #43 gemergt: feat(plugins): config-status, local_mode, host_mode und Marktplatz-Seite mit Konfigurieren-Knopf (iris/Iris#85)
iris/iris-linux-server#43

Commits:

  • feat(plugins): config-status, local_mode, host_mode und Marktplatz-Seite mit Konfigurieren-Knopf (iris/Iris#85)
PR #43 gemergt: feat(plugins): config-status, local_mode, host_mode und Marktplatz-Seite mit Konfigurieren-Knopf (iris/Iris#85) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/43 Commits: - feat(plugins): config-status, local_mode, host_mode und Marktplatz-Seite mit Konfigurieren-Knopf (iris/Iris#85)
Author
Owner

PR #136 gemergt: feat(marker): Rechnerwahl bei „Laden“, config-status, lokale Einrichtung, vereinfachtes Panel; iris-server-hosts config-status; Prüfung beim Veröffentlichen (#135, iris/Iris#85)
iris/iris-plugins#136

Commits:

  • feat(marker): Rechnerwahl bei „Laden“, config-status, lokale Einrichtung, vereinfachtes Panel; iris-server-hosts config-status; Prüfung beim Veröffentlichen (#135, iris/Iris#85)
PR #136 gemergt: feat(marker): Rechnerwahl bei „Laden“, config-status, lokale Einrichtung, vereinfachtes Panel; iris-server-hosts config-status; Prüfung beim Veröffentlichen (#135, iris/Iris#85) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/136 Commits: - feat(marker): Rechnerwahl bei „Laden“, config-status, lokale Einrichtung, vereinfachtes Panel; iris-server-hosts config-status; Prüfung beim Veröffentlichen (#135, iris/Iris#85)
Author
Owner

PR #79 gemergt: docs(wire): config-status, local_mode, host_mode, Aktion configure (iris/Iris#85)
alf/2ndbrain#79

Commits:

  • docs(wire): config-status, local_mode, host_mode, Aktion configure (iris/Iris#85)
PR #79 gemergt: docs(wire): config-status, local_mode, host_mode, Aktion configure (iris/Iris#85) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/79 Commits: - docs(wire): config-status, local_mode, host_mode, Aktion configure (iris/Iris#85)
Author
Owner

Eingereicht (2026-10-19, nach Alfs Tests am Mac und am iPhone)

Repo PR Inhalt
Iris (Mac-App) #86 Route config-status, local_mode/IRIS_HOST_MODE/host_mode, Marktplatz-Seite (Knopf, Farben), Bridge-Aktion configure, gefärbter Knopf in der Plugin-Verwaltung, Prüfprogramm
IrisRemote (iOS) 2ndbrain-ios #17 Aktion configure, Konfigurationsseite nach „Laden“, gefärbter Knopf in der Plugin-Liste
Linux-Server iris-linux-server #43 config_status.py, beide Routen, local_mode/host_mode/gate, Seite
Plugins iris-plugins #136 Marker 1.19.2, iris-server-hosts 0.4.0, Prüfung beim Veröffentlichen (config-status Pflicht)
Wurzel 2ndbrain #79 Wire-Protokoll (config-status, local_mode, host_mode, configure)

Von Alf getestet: Marktplatz-Kacheln (Rot bei fehlendem config-status, Grün nach dem Update von Hosts), „Laden“ von Marker mit Konfigurationsfenster und Picker, Installation und Aktualisierung des Marker-Servers auf dem GPU-Rechner (nach dem Entfernen der abgelaufenen Registry-Anmeldung auf iris-server), lokale Einrichtung auf dem Mac, iPhone (Konfigurieren-Knopf, Fenster nach „Laden“).

Weitere Funde in der Sitzung: gpu-hosts war nur halb aus der Registry entfernt (Index nicht mitgeführt), jetzt vollständig (Commits 8914a26 und Nachtrag); die abgelaufene docker login-Anmeldung auf iris-server blockierte das anonyme Ziehen öffentlicher Images (Logout, Sicherung ~/.docker/config.json.bak-before-logout).

Noch offen (Issue bleibt offen):

  • Linux-Server nicht neu deployt, die neuen Routen dort nur per Unit-Test geprüft.
  • config-status für die übrigen Plugins mit Panel (heartmula, whisper, qwen-tts-linux, comfyui-bridge in ihren Umstellungs-Issues; email, filmcraft, iris-nextcloud-cookbook, iris-web-automation u. a. in einem Folge-Issue): bis dahin Rot „config-status fehlt“.
  • Der Remote-Verwaltungsdialog der Mac-App fragt den Zustand nur beim Laden ab.
  • Nicht getestet: „Laden“ bei genau einem passenden Rechner; auf Alfs Wort geprüfte Sonderfälle (kein Rechner, Linux-Server als Ziel).
## Eingereicht (2026-10-19, nach Alfs Tests am Mac und am iPhone) | Repo | PR | Inhalt | |---|---|---| | Iris (Mac-App) | #86 | Route `config-status`, `local_mode`/`IRIS_HOST_MODE`/`host_mode`, Marktplatz-Seite (Knopf, Farben), Bridge-Aktion `configure`, gefärbter Knopf in der Plugin-Verwaltung, Prüfprogramm | | IrisRemote (iOS) | 2ndbrain-ios #17 | Aktion `configure`, Konfigurationsseite nach „Laden“, gefärbter Knopf in der Plugin-Liste | | Linux-Server | iris-linux-server #43 | `config_status.py`, beide Routen, `local_mode`/`host_mode`/`gate`, Seite | | Plugins | iris-plugins #136 | Marker 1.19.2, iris-server-hosts 0.4.0, Prüfung beim Veröffentlichen (`config-status` Pflicht) | | Wurzel | 2ndbrain #79 | Wire-Protokoll (`config-status`, `local_mode`, `host_mode`, `configure`) | **Von Alf getestet:** Marktplatz-Kacheln (Rot bei fehlendem `config-status`, Grün nach dem Update von Hosts), „Laden“ von Marker mit Konfigurationsfenster und Picker, Installation und Aktualisierung des Marker-Servers auf dem GPU-Rechner (nach dem Entfernen der abgelaufenen Registry-Anmeldung auf `iris-server`), lokale Einrichtung auf dem Mac, iPhone (Konfigurieren-Knopf, Fenster nach „Laden“). **Weitere Funde in der Sitzung:** `gpu-hosts` war nur halb aus der Registry entfernt (Index nicht mitgeführt), jetzt vollständig (Commits `8914a26` und Nachtrag); die abgelaufene `docker login`-Anmeldung auf `iris-server` blockierte das anonyme Ziehen öffentlicher Images (Logout, Sicherung `~/.docker/config.json.bak-before-logout`). **Noch offen (Issue bleibt offen):** - Linux-Server nicht neu deployt, die neuen Routen dort nur per Unit-Test geprüft. - `config-status` für die übrigen Plugins mit Panel (heartmula, whisper, qwen-tts-linux, comfyui-bridge in ihren Umstellungs-Issues; email, filmcraft, iris-nextcloud-cookbook, iris-web-automation u. a. in einem Folge-Issue): bis dahin Rot „config-status fehlt“. - Der Remote-Verwaltungsdialog der Mac-App fragt den Zustand nur beim Laden ab. - Nicht getestet: „Laden“ bei genau einem passenden Rechner; auf Alfs Wort geprüfte Sonderfälle (kein Rechner, Linux-Server als Ziel).
Author
Owner

Linux-Server deployt und live geprüft (2026-10-19)

rsync nach alf@iris-server:~/docker/iris-server/ (ohne .env), detect-host-env.sh, docker compose up -d --build (Container iris-server neu erzeugt), Sandbox-Container bereinigt. GET /health 200.

Anfrage (Bearer, gegen den laufenden Server) Ergebnis
GET /marketplace/api/catalog (Lese-Token) Feld configurable bei den installierten Plugins mit Panel true (comfyui-bridge, marker, iris-nextcloud-cookbook, qwen-tts-linux, iris-web-automation, whisper), sonst false
GET /plugins/{marker,whisper,comfyui-bridge,freecad-bridge}/config-status HTTP 200, {"state":"error","message":"config-status fehlt: Das Plugin führt den Befehl nicht in seiner panel_api."} — wie vorgesehen, die installierten Fassungen sind alt (marker 1.17.2 usw.)
GET /plugins/iris-gui/config-status (kein Panel), unbekanntes Plugin HTTP 404
GET /marketplace/api/plugins/marker/config-status (Lese-Token) dieselbe Antwort, HTTP 200
ohne Anmeldung HTTP 401
GET /hosts/targets, ?needs=gpu&needs=docker, ?needs=rechner self zuerst; needs=rechner leer

Nicht live geprüft: ein Plugin mit funktionierendem config-status auf dem Linux-Server (dort ist keines in der neuen Fassung installiert; Grün/Gelb ist per Unit-Test und auf dem Mac gesehen), und „Laden“ gegen den Linux-Server mit local_mode/host_mode (Unit-Tests).

Fund, nicht behoben: In ~/docker/iris-server/data/iris-app-support/iris_server_hosts.json stehen zwei Test-Einträge vom 2026-10-18 23:02 (gpu1 „Kiste“ alf@box-gpu.test.local, cloud1 „Wolke“ alf@box-cloud.test.local), vermutlich Reste eines früheren Live-Tests. Sie erscheinen im Picker und zählen mit ihren gespeicherten Fähigkeiten für die Installations-Sperre mit (der Rechner ist nicht erreichbar, behält aber die gespeicherten Fähigkeiten). Entfernen steht aus (Alfs Entscheidung).

## Linux-Server deployt und live geprüft (2026-10-19) `rsync` nach `alf@iris-server:~/docker/iris-server/` (ohne `.env`), `detect-host-env.sh`, `docker compose up -d --build` (Container `iris-server` neu erzeugt), Sandbox-Container bereinigt. `GET /health` 200. | Anfrage (Bearer, gegen den laufenden Server) | Ergebnis | |---|---| | `GET /marketplace/api/catalog` (Lese-Token) | Feld `configurable` bei den installierten Plugins mit Panel `true` (comfyui-bridge, marker, iris-nextcloud-cookbook, qwen-tts-linux, iris-web-automation, whisper), sonst `false` | | `GET /plugins/{marker,whisper,comfyui-bridge,freecad-bridge}/config-status` | HTTP 200, `{"state":"error","message":"config-status fehlt: Das Plugin führt den Befehl nicht in seiner panel_api."}` — wie vorgesehen, die installierten Fassungen sind alt (marker 1.17.2 usw.) | | `GET /plugins/iris-gui/config-status` (kein Panel), unbekanntes Plugin | HTTP 404 | | `GET /marketplace/api/plugins/marker/config-status` (Lese-Token) | dieselbe Antwort, HTTP 200 | | ohne Anmeldung | HTTP 401 | | `GET /hosts/targets`, `?needs=gpu&needs=docker`, `?needs=rechner` | `self` zuerst; `needs=rechner` leer | **Nicht live geprüft:** ein Plugin mit funktionierendem `config-status` auf dem Linux-Server (dort ist keines in der neuen Fassung installiert; Grün/Gelb ist per Unit-Test und auf dem Mac gesehen), und „Laden“ gegen den Linux-Server mit `local_mode`/`host_mode` (Unit-Tests). **Fund, nicht behoben:** In `~/docker/iris-server/data/iris-app-support/iris_server_hosts.json` stehen zwei **Test-Einträge** vom 2026-10-18 23:02 (`gpu1` „Kiste“ `alf@box-gpu.test.local`, `cloud1` „Wolke“ `alf@box-cloud.test.local`), vermutlich Reste eines früheren Live-Tests. Sie erscheinen im Picker und zählen mit ihren gespeicherten Fähigkeiten für die Installations-Sperre mit (der Rechner ist nicht erreichbar, behält aber die gespeicherten Fähigkeiten). Entfernen steht aus (Alfs Entscheidung).
Author
Owner

PR #142 gemergt: docs(readme): Rechner, Rechnerwahl und Konfigurations-Zustand (host_capabilities, local_mode, config-status, Resolver, host_mode) (iris/Iris#85)
iris/iris-plugins#142

Commits:

  • docs(readme): Rechner, Rechnerwahl und Konfigurations-Zustand (host_capabilities, local_mode, config-status, Resolver, host_mode) (iris/Iris#85)
PR #142 gemergt: docs(readme): Rechner, Rechnerwahl und Konfigurations-Zustand (host_capabilities, local_mode, config-status, Resolver, host_mode) (iris/Iris#85) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/142 Commits: - docs(readme): Rechner, Rechnerwahl und Konfigurations-Zustand (host_capabilities, local_mode, config-status, Resolver, host_mode) (iris/Iris#85)
Author
Owner

PR #89 gemergt: fix(plugins): Zustand der Plugin-Konfiguration nach dem Schließen des Konfigurationsfensters neu abfragen (iris/Iris#85)
#89

Commits:

  • fix(plugins): Zustand der Plugin-Konfiguration nach dem Schließen des Konfigurationsfensters neu abfragen (iris/Iris#85)
PR #89 gemergt: fix(plugins): Zustand der Plugin-Konfiguration nach dem Schließen des Konfigurationsfensters neu abfragen (iris/Iris#85) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/89 Commits: - fix(plugins): Zustand der Plugin-Konfiguration nach dem Schließen des Konfigurationsfensters neu abfragen (iris/Iris#85)
Author
Owner

PR #89 gemergt (main = 8baa196). Nutzertest bestanden: Im Remote-Dialog wechselt der Knopf „Konfigurieren“ nach dem Schließen des Konfigurationsfensters die Farbe, ohne neu zu laden.

  • Befund: Der Remote-Dialog (RemotePluginManagementView) fragte config-status nur in load() ab. Die lokale Verwaltung hörte auf „App wird wieder aktiv“; das Konfigurationsfenster ist aber ein Fenster von Iris selbst, beim Schließen wird die App nicht neu aktiv, nur das Listenfenster wieder Hauptfenster.
  • Änderung: Beide Ansichten fragen den Zustand auch ab, wenn ein Fenster wieder Hauptfenster wird (NSWindow.didBecomeKeyNotification). Remote: alle Plugins gleichzeitig, höchstens alle 2 Sekunden, nicht während des Ladens.
  • Geprüft: von Hand am Mac, im Remote- und im lokalen Dialog. Kein automatischer Test (reine Fenster-Oberfläche).
  • Grenze: Bleibt das Konfigurationsfenster geöffnet, ändert sich die Farbe erst beim Schließen oder beim nächsten Fensterwechsel.
  • Offen in iris/Iris#85: nichts mehr an dieser Stelle; der Rest steht in iris/iris-plugins#147 (config-status der vier nicht veröffentlichten Plugins).
**PR #89 gemergt** (main = 8baa196). Nutzertest bestanden: Im Remote-Dialog wechselt der Knopf „Konfigurieren“ nach dem Schließen des Konfigurationsfensters die Farbe, ohne neu zu laden. - **Befund:** Der Remote-Dialog (`RemotePluginManagementView`) fragte `config-status` nur in `load()` ab. Die lokale Verwaltung hörte auf „App wird wieder aktiv“; das Konfigurationsfenster ist aber ein Fenster von Iris selbst, beim Schließen wird die App nicht neu aktiv, nur das Listenfenster wieder Hauptfenster. - **Änderung:** Beide Ansichten fragen den Zustand auch ab, wenn ein Fenster wieder Hauptfenster wird (`NSWindow.didBecomeKeyNotification`). Remote: alle Plugins gleichzeitig, höchstens alle 2 Sekunden, nicht während des Ladens. - **Geprüft:** von Hand am Mac, im Remote- und im lokalen Dialog. Kein automatischer Test (reine Fenster-Oberfläche). - **Grenze:** Bleibt das Konfigurationsfenster geöffnet, ändert sich die Farbe erst beim Schließen oder beim nächsten Fensterwechsel. - **Offen** in iris/Iris#85: nichts mehr an dieser Stelle; der Rest steht in iris/iris-plugins#147 (`config-status` der vier nicht veröffentlichten Plugins).
Author
Owner

Abgeschlossen

Zustandsanzeige (config-status) und Rechnerwahl im Marktplatz sind umgesetzt (PR #89 u. a.) und vom Nutzer getestet („Nutzertest bestanden“). Die Umstellung der einzelnen Plugins laufen als eigene Issues weiter (iris-plugins #135, #138, #140, #143, #145, #147, Label status/zu-testen).

Geschlossen auf Alfs Wort (2026-10-21).

## Abgeschlossen Zustandsanzeige (config-status) und Rechnerwahl im Marktplatz sind umgesetzt (PR #89 u. a.) und vom Nutzer getestet („Nutzertest bestanden“). Die Umstellung der einzelnen Plugins laufen als eigene Issues weiter (iris-plugins #135, #138, #140, #143, #145, #147, Label `status/zu-testen`). Geschlossen auf Alfs Wort (2026-10-21).
alf closed this issue 2026-10-21 21:58:41 +00:00
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#85
No description provided.