Plugins mit Seitenpanel: gemeinsames Panel-Kit (panel_kit.py/.js) statt Eigenbau — comfyui-workflows, iris-solidcraft, iris-gamebox umstellen #278

Closed
opened 2026-10-26 12:12:37 +00:00 by alf · 3 comments
Owner

Ziel

Plugins mit Seitenpanel-Reiter (side_panel, iris/Iris#169) sprechen über einen genormten Baukasten mit dem Chat, statt jedes für sich dieselbe Technik nachzubauen. Die drei Bestandsplugins comfyui-workflows, iris-solidcraft und iris-gamebox werden darauf umgestellt; neue Plugins nehmen das Kit als Vorlage.

Befund (2026-10-26)

Der Wire-Vertrag steht (Entwicklerdokumentation/02-Wire-Protokoll.md, Abschnitt „Plugin-Reiter im Seitenpanel“): side_panel, chat_id in URL und Body, Pflichtbefehl status → {ok, chat_id, summary, detail}, Marker [PLUGIN-PANEL: …]. Es fehlt die Plugin-Seite darunter. Jedes der drei Plugins baut sie selbst:

  • Skript-Seite: eigenes panel_api.py mit eigenem Dispatch, JSON-Ausgabe, Fehlerbehandlung, chat_id-Prüfung (solidcraft mit eigener _SAFE_CHAT_ID), summary-Kürzung (solidcraft mit eigenem Soft-Limit 240).
  • Gemeinsame Auswahl (selection.json, select/selection): in comfyui-workflows erfunden, in gamebox kopiert, in solidcraft nicht vorhanden.
  • Seiten-Seite: jede HTML-Datei liest cfg_token/chat_id aus der URL, hängt chat_id an jeden Aufruf und pollt status selbst.
  • Fehlerfall: ein die() im Skript erreicht das Panel nur als Exit-Zahl ("2"); in gamebox war das ein echter Bug (find_row).

Umfang

  1. panel_kit.py (Skript-Seite): Befehls-Dispatch, Fehler immer als {ok:false, error} (nie nur Exit-Code), chat_id lesen und validieren, status-Helfer (chat_id zurückgeben, summary auf eine Zeile und ≤ 300 Zeichen kappen), Auswahl lesen/schreiben (selection.json, select/selection, select antwortet wie status). Ein Plugin liefert nur seine eigenen Befehle und eine summary-Funktion.
  2. panel_kit.js (Seiten-Seite): cfg_token/chat_id aus der URL, panel_api-Aufruf mit angehängtem chat_id, status-Polling (~5 s) mit Abbruch bei geschlossenem Reiter, einheitliche Fehleranzeige, chat_id-Abweichung als Fehler.
  3. Verteilung beim Bauen, nicht als Kopie im Repo: Quelle plugins/_shared/iris-panel-kit/, jedes build-irisplugin.sh kopiert panel_kit.py neben panel_api.py und panel_kit.js neben die Seite ins Paket (Muster _shared/iris-nextcloud-client) — kein Drift, kein Abgleich-Tool. publish-plugins.sh (registry_index.py) lehnt ein Plugin mit side_panel ohne status in panel_api.commands ab.
  4. plugins/CLAUDE.md: ein kurzer Absatz — wer side_panel baut, nimmt das Kit; status und select/selection sind Pflicht; Einzelheiten stehen im Wire-Protokoll (nicht wiederholen, sonst steht es an zwei Stellen). Gleichzeitig plugins/README.md und 07-Plugin-System.md auf das Kit verweisen lassen.
  5. plugins/README.md erweitern: neues Kapitel „Seitenpanel und Chat“ aus Sicht des Plugin-Autors — wie Reiter, Seite, panel_api, Agent und Chat zusammenspielen, mit Mermaid-Diagrammen (mindestens: Sequenzdiagramm eines Lebenszyklus — Reiter öffnen, status-Polling, Nutzer wählt, Nachricht mit [PLUGIN-PANEL: …], Agent holt Detail per Skill; Komponentenbild Client ↔ Server ↔ panel_api ↔ Seite ↔ Agent; Zustände des Reiters bei Fehler/chat_id-Abweichung/Zeitlimit) und ein Mini-Beispiel mit dem Kit. Die Protokolldetails (Routen, Felder, Zeitlimits) bleiben allein im Wire-Protokoll; die README erklärt das Zusammenspiel und verlinkt dorthin, wiederholt die Tabellen nicht. Diagramme mit dem Skill mermaid-validate prüfen. Inhaltsverzeichnis und Verweise aus 07-Plugin-System.md nachziehen.
  6. Umstellung der drei Bestandsplugins (je eigene Version, reiner Umbau ohne Funktionsänderung): comfyui-workflows, iris-gamebox, iris-solidcraft. Solidcraft bekommt dabei die gemeinsame Auswahl, falls sinnvoll (siehe offene Frage).

Offen

  • select-Semantik für alle Pflicht oder nur Muster? Bei solidcraft ist „was hat der Nutzer angeschaut“ ein anderes Ding (Körper/Baugruppe im 3D-Viewer) als bei Workflows und Spielen — vor der Entscheidung viewer.html und den status-Stand lesen.
  • Muss das Kit Linux-Server und Mac gleich bedienen? (panel_api läuft auf beiden; Kit nur Standardbibliothek halten.)

Vorgehen

Umgesetzt in PR #280 (gamebox 0.9.1, solidcraft 0.3.3, comfyui-workflows 3.4.1, nicht veröffentlicht, status/zu-testen). Offen: Test in der echten App, iris-plugin-dev (Thema + Gerüst-Option), Verweise im Wurzel-Repo. Ursprünglicher Plan: Kit zuerst mit Tests (tests/test_panel_api.py in solidcraft und test_selection_and_panel.py in comfyui-workflows sind die Vorlagen), dann die drei Umstellungen. Stand-Kommentar am PR mit Geprüft/Nicht geprüft (Panel in der echten App).

## Ziel Plugins mit Seitenpanel-Reiter (`side_panel`, iris/Iris#169) sprechen über einen **genormten Baukasten** mit dem Chat, statt jedes für sich dieselbe Technik nachzubauen. Die drei Bestandsplugins **comfyui-workflows**, **iris-solidcraft** und **iris-gamebox** werden darauf umgestellt; neue Plugins nehmen das Kit als Vorlage. ## Befund (2026-10-26) Der **Wire-Vertrag steht** (`Entwicklerdokumentation/02-Wire-Protokoll.md`, Abschnitt „Plugin-Reiter im Seitenpanel“): `side_panel`, `chat_id` in URL und Body, Pflichtbefehl `status` → `{ok, chat_id, summary, detail}`, Marker `[PLUGIN-PANEL: …]`. Es fehlt die **Plugin-Seite** darunter. Jedes der drei Plugins baut sie selbst: - Skript-Seite: eigenes `panel_api.py` mit eigenem Dispatch, JSON-Ausgabe, Fehlerbehandlung, `chat_id`-Prüfung (solidcraft mit eigener `_SAFE_CHAT_ID`), `summary`-Kürzung (solidcraft mit eigenem Soft-Limit 240). - Gemeinsame Auswahl (`selection.json`, `select`/`selection`): in comfyui-workflows erfunden, in gamebox kopiert, in **solidcraft nicht vorhanden**. - Seiten-Seite: jede HTML-Datei liest `cfg_token`/`chat_id` aus der URL, hängt `chat_id` an jeden Aufruf und pollt `status` selbst. - Fehlerfall: ein `die()` im Skript erreicht das Panel nur als Exit-Zahl (`"2"`); in gamebox war das ein echter Bug (`find_row`). ## Umfang 1. **`panel_kit.py`** (Skript-Seite): Befehls-Dispatch, Fehler immer als `{ok:false, error}` (nie nur Exit-Code), `chat_id` lesen und validieren, `status`-Helfer (`chat_id` zurückgeben, `summary` auf eine Zeile und ≤ 300 Zeichen kappen), Auswahl lesen/schreiben (`selection.json`, `select`/`selection`, `select` antwortet wie `status`). Ein Plugin liefert nur seine eigenen Befehle und eine `summary`-Funktion. 2. **`panel_kit.js`** (Seiten-Seite): `cfg_token`/`chat_id` aus der URL, `panel_api`-Aufruf mit angehängtem `chat_id`, `status`-Polling (~5 s) mit Abbruch bei geschlossenem Reiter, einheitliche Fehleranzeige, `chat_id`-Abweichung als Fehler. 3. **Verteilung beim Bauen**, nicht als Kopie im Repo: Quelle `plugins/_shared/iris-panel-kit/`, jedes `build-irisplugin.sh` kopiert `panel_kit.py` neben `panel_api.py` und `panel_kit.js` neben die Seite ins Paket (Muster `_shared/iris-nextcloud-client`) — kein Drift, kein Abgleich-Tool. `publish-plugins.sh` (`registry_index.py`) lehnt ein Plugin mit `side_panel` ohne `status` in `panel_api.commands` ab. 4. **`plugins/CLAUDE.md`**: ein kurzer Absatz — wer `side_panel` baut, nimmt das Kit; `status` und `select`/`selection` sind Pflicht; Einzelheiten stehen im Wire-Protokoll (nicht wiederholen, sonst steht es an zwei Stellen). Gleichzeitig `plugins/README.md` und `07-Plugin-System.md` auf das Kit verweisen lassen. 5. **`plugins/README.md` erweitern**: neues Kapitel „Seitenpanel und Chat“ aus Sicht des Plugin-Autors — wie Reiter, Seite, `panel_api`, Agent und Chat zusammenspielen, mit **Mermaid-Diagrammen** (mindestens: Sequenzdiagramm eines Lebenszyklus — Reiter öffnen, `status`-Polling, Nutzer wählt, Nachricht mit `[PLUGIN-PANEL: …]`, Agent holt Detail per Skill; Komponentenbild Client ↔ Server ↔ `panel_api` ↔ Seite ↔ Agent; Zustände des Reiters bei Fehler/`chat_id`-Abweichung/Zeitlimit) und ein Mini-Beispiel mit dem Kit. Die Protokolldetails (Routen, Felder, Zeitlimits) bleiben allein im Wire-Protokoll; die README erklärt das Zusammenspiel und verlinkt dorthin, wiederholt die Tabellen nicht. Diagramme mit dem Skill `mermaid-validate` prüfen. Inhaltsverzeichnis und Verweise aus `07-Plugin-System.md` nachziehen. 6. **Umstellung** der drei Bestandsplugins (je eigene Version, reiner Umbau ohne Funktionsänderung): comfyui-workflows, iris-gamebox, iris-solidcraft. Solidcraft bekommt dabei die gemeinsame Auswahl, falls sinnvoll (siehe offene Frage). ## Offen - **`select`-Semantik für alle Pflicht oder nur Muster?** Bei solidcraft ist „was hat der Nutzer angeschaut“ ein anderes Ding (Körper/Baugruppe im 3D-Viewer) als bei Workflows und Spielen — vor der Entscheidung `viewer.html` und den `status`-Stand lesen. - Muss das Kit Linux-Server und Mac gleich bedienen? (`panel_api` läuft auf beiden; Kit nur Standardbibliothek halten.) ## Vorgehen Umgesetzt in PR #280 (gamebox 0.9.1, solidcraft 0.3.3, comfyui-workflows 3.4.1, nicht veröffentlicht, `status/zu-testen`). Offen: Test in der echten App, `iris-plugin-dev` (Thema + Gerüst-Option), Verweise im Wurzel-Repo. Ursprünglicher Plan: Kit zuerst mit Tests (`tests/test_panel_api.py` in solidcraft und `test_selection_and_panel.py` in comfyui-workflows sind die Vorlagen), dann die drei Umstellungen. Stand-Kommentar am PR mit **Geprüft**/**Nicht geprüft** (Panel in der echten App).
Author
Owner

PR #280 gemergt: feat(plugins): geteiltes Panel-Kit für Seitenpanel-Reiter, comfyui-workflows/solidcraft/gamebox umgestellt, README Kapitel 22 (#278)
#280

Commits:

  • feat(plugins): geteiltes Panel-Kit für Seitenpanel-Reiter, comfyui-workflows/solidcraft/gamebox umgestellt, README Kapitel 22 (#278)

Stand (PR zu #278)

Befund. Der Wire-Vertrag des Seitenpanel-Reiters (iris/Iris#169) stand, die Plugin-Seite darunter bauten comfyui-workflows, iris-solidcraft und iris-gamebox je selbst (Dispatch, Fehlerbehandlung, chat_id-Prüfung, summary-Kürzung, selection.json, fetch mit chat_id).

Geändert.

  • Neu _shared/iris-panel-kit/ — panel_kit.py (run, status_reply, Selection, safe_chat_id, one_line, out, fail; Fehler als {ok:false, error}) und panel_kit.js (PanelKit.create → api, call, poll). Abweichung vom Issue: keine Kopie im Repo samt Abgleich-Tool, sondern Verteilung beim Bauen (build-irisplugin.sh kopiert beide Dateien ins Paket, Muster _shared/iris-nextcloud-client) — kein Drift möglich. Der Python-Teil hat im Repo einen sys.path-Fallback.
  • Alle drei Plugins umgestellt (panel_api.py, Seiten, Build-Skripte): gamebox 0.9.1, solidcraft 0.3.3, comfyui-workflows 3.4.1 — Umbau ohne Funktionsänderung, nur Fehlertexte erreichen den Reiter jetzt als Text. gamebox' und comfyui' Auswahl liegen auf pk.Selection (atomares Schreiben, Dateiformat unverändert). solidcraft: die Seiten nutzen panel.call (kein Wurf bei {ok:false}, wie bisher).
  • registry_index.py: side_panel ohne status in panel_api.commands wird beim Veröffentlichen abgelehnt (+2 Tests).
  • README.md Kapitel 22 „Seitenpanel und Chat“ mit drei Mermaid-Diagrammen (Komponenten, Sequenz, Zustände der status-Auslegung nach PluginSidePanelCore.swift), Baukasten-Beispiel, Checkliste; CLAUDE.md ein Absatz; Kit-README.

Geprüft. Kit: 28 Python-Tests + 10 Node-Tests grün. comfyui-workflows 12 Tests (einer an das neue Fehlerformat angepasst, einer neu), solidcraft 44 Tests, registry-tools 62 Tests grün. node --check auf allen vier Seitenskripten. Alle drei Pakete gebaut, entpackt und panel_api.py status aus dem Paket (ohne Repo-Fallback) gegen eine Fake-Heimat ausgeführt. publish-plugins.sh … --dry-run für alle drei grün (inkl. Privacy-Scan). Mermaid-Diagramme mit mermaid-validate geprüft (3 gültig).

Nicht geprüft. Die Seiten in der echten Iris-App (Reiter öffnen, Auswahl treffen, Marker beim Senden) — insbesondere dass <script src="panel_kit.js"> neben der HTML-Seite vom Mac- und Linux-Server ausgeliefert wird (Vorbild: iris-claude-sessions lädt memory-logik.js so, aber nicht gegen beide Server geprüft). settings.html und viewer.html von solidcraft nur per Syntaxcheck. Kein Linux-Server-Lauf.

Grenzen / offen.

  • Nicht veröffentlicht (Versionen nur gebaut, wie 0.8.0 zuvor).
  • iris-plugin-dev: Thema „seitenpanel“ in DOKU_THEMEN und eine Gerüst-Option für neue Plugins mit Reiter fehlen noch — eigener Schritt.
  • select bleibt Muster, keine Pflicht: solidcraft hat keinen (Stand = Designs des Chats, geöffnet wird in der App).
  • Verweise in Entwicklerdokumentation/07-Plugin-System.md und Wire-Protokoll auf Kapitel 22 gehen als separater docs:-PR ins Wurzel-Repo.
PR #280 gemergt: feat(plugins): geteiltes Panel-Kit für Seitenpanel-Reiter, comfyui-workflows/solidcraft/gamebox umgestellt, README Kapitel 22 (#278) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/280 Commits: - feat(plugins): geteiltes Panel-Kit für Seitenpanel-Reiter, comfyui-workflows/solidcraft/gamebox umgestellt, README Kapitel 22 (#278) --- ## Stand (PR zu #278) **Befund.** Der Wire-Vertrag des Seitenpanel-Reiters (iris/Iris#169) stand, die Plugin-Seite darunter bauten comfyui-workflows, iris-solidcraft und iris-gamebox je selbst (Dispatch, Fehlerbehandlung, `chat_id`-Prüfung, `summary`-Kürzung, `selection.json`, `fetch` mit `chat_id`). **Geändert.** - Neu `_shared/iris-panel-kit/` — `panel_kit.py` (`run`, `status_reply`, `Selection`, `safe_chat_id`, `one_line`, `out`, `fail`; Fehler als `{ok:false, error}`) und `panel_kit.js` (`PanelKit.create` → `api`, `call`, `poll`). **Abweichung vom Issue:** keine Kopie im Repo samt Abgleich-Tool, sondern Verteilung beim Bauen (`build-irisplugin.sh` kopiert beide Dateien ins Paket, Muster `_shared/iris-nextcloud-client`) — kein Drift möglich. Der Python-Teil hat im Repo einen `sys.path`-Fallback. - Alle drei Plugins umgestellt (`panel_api.py`, Seiten, Build-Skripte): gamebox 0.9.1, solidcraft 0.3.3, comfyui-workflows 3.4.1 — Umbau ohne Funktionsänderung, nur Fehlertexte erreichen den Reiter jetzt als Text. gamebox' und comfyui' Auswahl liegen auf `pk.Selection` (atomares Schreiben, Dateiformat unverändert). solidcraft: die Seiten nutzen `panel.call` (kein Wurf bei `{ok:false}`, wie bisher). - `registry_index.py`: `side_panel` ohne `status` in `panel_api.commands` wird beim Veröffentlichen abgelehnt (+2 Tests). - `README.md` Kapitel 22 „Seitenpanel und Chat“ mit drei Mermaid-Diagrammen (Komponenten, Sequenz, Zustände der `status`-Auslegung nach `PluginSidePanelCore.swift`), Baukasten-Beispiel, Checkliste; `CLAUDE.md` ein Absatz; Kit-README. **Geprüft.** Kit: 28 Python-Tests + 10 Node-Tests grün. comfyui-workflows 12 Tests (einer an das neue Fehlerformat angepasst, einer neu), solidcraft 44 Tests, registry-tools 62 Tests grün. `node --check` auf allen vier Seitenskripten. Alle drei Pakete gebaut, entpackt und `panel_api.py status` **aus dem Paket** (ohne Repo-Fallback) gegen eine Fake-Heimat ausgeführt. `publish-plugins.sh … --dry-run` für alle drei grün (inkl. Privacy-Scan). Mermaid-Diagramme mit `mermaid-validate` geprüft (3 gültig). **Nicht geprüft.** Die Seiten in der echten Iris-App (Reiter öffnen, Auswahl treffen, Marker beim Senden) — insbesondere dass `<script src="panel_kit.js">` neben der HTML-Seite vom Mac- und Linux-Server ausgeliefert wird (Vorbild: `iris-claude-sessions` lädt `memory-logik.js` so, aber nicht gegen beide Server geprüft). `settings.html` und `viewer.html` von solidcraft nur per Syntaxcheck. Kein Linux-Server-Lauf. **Grenzen / offen.** - Nicht veröffentlicht (Versionen nur gebaut, wie 0.8.0 zuvor). - `iris-plugin-dev`: Thema „seitenpanel“ in `DOKU_THEMEN` und eine Gerüst-Option für neue Plugins mit Reiter fehlen noch — eigener Schritt. - `select` bleibt Muster, keine Pflicht: solidcraft hat keinen (Stand = Designs des Chats, geöffnet wird in der App). - Verweise in `Entwicklerdokumentation/07-Plugin-System.md` und Wire-Protokoll auf Kapitel 22 gehen als separater `docs:`-PR ins Wurzel-Repo.
Author
Owner

PR #113 gemergt: docs(plugins): Seitenpanel-Reiter verweist auf geteiltes Panel-Kit und README-Kapitel 22 (iris/iris-plugins#278)
alf/2ndbrain#113

Commits:

  • docs(plugins): Seitenpanel-Reiter verweist auf geteiltes Panel-Kit und README-Kapitel 22 (iris/iris-plugins#278)
PR #113 gemergt: docs(plugins): Seitenpanel-Reiter verweist auf geteiltes Panel-Kit und README-Kapitel 22 (iris/iris-plugins#278) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/113 Commits: - docs(plugins): Seitenpanel-Reiter verweist auf geteiltes Panel-Kit und README-Kapitel 22 (iris/iris-plugins#278)
alf closed this issue 2026-10-27 10:36:57 +00:00
Author
Owner

Geschlossen auf ausdrücklichen Wunsch von Alf; das Label status/zu-testen wurde dabei entfernt. Getestet hat Alf nach eigener Aussage die Gamebox auf beiden Maschinen; die übrigen betroffenen Plugins sind darin nicht eigens genannt.

Geschlossen auf ausdrücklichen Wunsch von Alf; das Label status/zu-testen wurde dabei entfernt. Getestet hat Alf nach eigener Aussage die Gamebox auf beiden Maschinen; die übrigen betroffenen Plugins sind darin nicht eigens genannt.
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-plugins#278
No description provided.