feat(iris-gamebox): Iris steuert den Reiter inhaltlich — Ansichtszustand (Suche, Filter, Modus), erster Treffer automatisch, Treffer weiterschalten; Muster im Panel-Kit #284

Closed
opened 2026-10-26 14:22:24 +00:00 by alf · 3 comments
Owner

Ziel

Iris (der Agent) kann den Plugin-Reiter inhaltlich steuern, nicht nur die Auswahl setzen: „Zeig mir Space Quest“ im Chat trägt „Space Quest“ ins Suchfeld des Reiters ein, zeigt den ersten Treffer und kann zwischen den Treffern weiterschalten. Der Nutzer sieht dabei dasselbe wie der Agent — und umgekehrt: was er selbst in den Reiter tippt, sieht der Agent.

Wird zuerst für iris-gamebox gebaut, das Muster kommt ins Panel-Kit (danach comfyui-workflows und iris-solidcraft, soweit sie einen Ansichtszustand haben). Companion in iris/Iris: Skill-Hinweis im Marker (Verweis unten).

Entscheidungen (mit Nutzer geklärt)

  • Ein Treffer-Suchbegriff wählt automatisch den ersten Treffer und zeigt ihn.
  • Iris kann zwischen den Suchergebnissen schalten (vor, zurück, n-ter).
  • Kein Klicken im DOM und keine Bildanalyse: der Agent ändert einen gemeinsamen Ansichtszustand, die Seite folgt über das Refresh-Ereignis (iris/Iris#178). Buttons sind schon CLI-Befehle (launch, bundle, remove); der Agent ruft denselben Befehl auf.

Entwurf

  1. Ansichtszustand (view.json im Plugin-Zustand, wie selection.json global, nicht je Chat): gamebox {mode: store|installed, query, system, sort, selection}. Kit: ViewState neben Selection (atomares Schreiben, Standardwerte, Feldprüfung), status_reply trägt ihn in detail.view und in die revision.
  2. Trefferliste = die Liste, die die Seite zeigt. Derselbe Katalogaufruf (browse mit system/query/sort) liefert Treffer und Reihenfolge für Agent und Seite; „weiterschalten“ heißt: die Auswahl auf den Nachbarn in dieser Liste setzen. Keine zweite Trefferlogik.
  3. CLI/panel_api (gamebox): gbox view --query Q [--system S] [--mode store|installed] [--sort …] setzt Suche und wählt Treffer 1 (antwortet mit hit, hits, selection); gbox view --next | --prev | --hit N; gbox view liest; gbox view --clear. status.summary nennt Suche und Position („Suche „space quest“ · Treffer 2 von 7 · Ausgewählt: …“). Keine Treffer: Auswahl bleibt, Antwort sagt es.
  4. Seite: onRefresh wendet den Ansichtszustand an (Modus, Suchfeld, System, Sortierung, Liste laden, Auswahl anzeigen, Treffer in den sichtbaren Bereich scrollen); Eingaben des Nutzers (Suche, Filter, Reiter, Auswahl) schreibt sie entprellt über panel_api view-set zurück — keine Schleife: ein Ereignis, das aus dem eigenen Schreiben entsteht, wird übergangen (Vergleich mit dem zuletzt geschriebenen Zustand).
  5. Treffer-Anzeige: „Treffer 2 von 7“ mit Vor/Zurück-Knöpfen in der Seite (dieselben Befehle wie beim Agenten).
  6. SKILL.md (Abschnitt „Plugin-Reiter“, Pflichtabschnitt für Plugins mit Ansichtszustand): Felder, Befehle, welcher Knopf welchem Befehl entspricht; ausdrücklich „Suche im Chat ⇒ gbox view --query, nicht nur gbox search“.
  7. README Kapitel 22: neuer Abschnitt „Ansichtszustand und Plugin-Befehle“ mit Sequenzdiagramm (Agent setzt Suche → revision → Ereignis → Seite füllt Suchfeld und zeigt Treffer 1 → Agent schaltet weiter).
  8. Tests: Zustand setzen/lesen, Trefferwechsel an den Rändern (erster/letzter), leere Treffer, Schleifenfreiheit (Seite schreibt, Agent liest denselben Stand), revision ändert sich bei jedem Befehl.

Nicht jetzt

UI-Befehle ohne Backend-Gegenstück (Lightbox öffnen, Beschreibung ausklappen): Warteschlange commands.json mit Quittung und panel.onCommand(name, fn) — erst bauen, wenn ein echter Bedarf auftaucht.

Offen

  • Ansichtszustand global (wie die Auswahl; zwei offene Reiter zeigen denselben Stand) oder je Chat? Vorschlag: global.
  • Was wählt --query, wenn der bisherige Treffer noch in der neuen Liste steckt — trotzdem Treffer 1 (Vorschlag: ja, der Nutzer hat gesucht).
  • Bezug: iris/Iris#178 (Aktualisierung), #176 (Zustandszeile [SEITENPANEL]), iris/iris-plugins#281.

Gegenstück: iris/Iris#181

## Ziel Iris (der Agent) kann den Plugin-Reiter **inhaltlich steuern**, nicht nur die Auswahl setzen: „Zeig mir Space Quest“ im Chat trägt „Space Quest“ ins Suchfeld des Reiters ein, zeigt den **ersten Treffer** und kann zwischen den Treffern **weiterschalten**. Der Nutzer sieht dabei dasselbe wie der Agent — und umgekehrt: was er selbst in den Reiter tippt, sieht der Agent. Wird zuerst für **iris-gamebox** gebaut, das Muster kommt ins Panel-Kit (danach comfyui-workflows und iris-solidcraft, soweit sie einen Ansichtszustand haben). Companion in iris/Iris: Skill-Hinweis im Marker (Verweis unten). ## Entscheidungen (mit Nutzer geklärt) - Ein Treffer-Suchbegriff wählt **automatisch den ersten Treffer** und zeigt ihn. - Iris kann **zwischen den Suchergebnissen schalten** (vor, zurück, n-ter). - Kein Klicken im DOM und keine Bildanalyse: der Agent ändert einen **gemeinsamen Ansichtszustand**, die Seite folgt über das Refresh-Ereignis (iris/Iris#178). Buttons sind schon CLI-Befehle (`launch`, `bundle`, `remove`); der Agent ruft denselben Befehl auf. ## Entwurf 1. **Ansichtszustand** (`view.json` im Plugin-Zustand, wie `selection.json` global, nicht je Chat): gamebox `{mode: store|installed, query, system, sort, selection}`. Kit: `ViewState` neben `Selection` (atomares Schreiben, Standardwerte, Feldprüfung), `status_reply` trägt ihn in `detail.view` und in die `revision`. 2. **Trefferliste = die Liste, die die Seite zeigt.** Derselbe Katalogaufruf (`browse` mit system/query/sort) liefert Treffer und Reihenfolge für Agent und Seite; „weiterschalten“ heißt: die Auswahl auf den Nachbarn in dieser Liste setzen. Keine zweite Trefferlogik. 3. **CLI/panel_api (gamebox):** `gbox view --query Q [--system S] [--mode store|installed] [--sort …]` setzt Suche und wählt Treffer 1 (antwortet mit `hit`, `hits`, `selection`); `gbox view --next | --prev | --hit N`; `gbox view` liest; `gbox view --clear`. `status.summary` nennt Suche und Position („Suche „space quest“ · Treffer 2 von 7 · Ausgewählt: …“). Keine Treffer: Auswahl bleibt, Antwort sagt es. 4. **Seite:** `onRefresh` wendet den Ansichtszustand an (Modus, Suchfeld, System, Sortierung, Liste laden, Auswahl anzeigen, Treffer in den sichtbaren Bereich scrollen); Eingaben des Nutzers (Suche, Filter, Reiter, Auswahl) schreibt sie entprellt über `panel_api view-set` zurück — **keine Schleife**: ein Ereignis, das aus dem eigenen Schreiben entsteht, wird übergangen (Vergleich mit dem zuletzt geschriebenen Zustand). 5. **Treffer-Anzeige:** „Treffer 2 von 7“ mit Vor/Zurück-Knöpfen in der Seite (dieselben Befehle wie beim Agenten). 6. **SKILL.md** (Abschnitt „Plugin-Reiter“, Pflichtabschnitt für Plugins mit Ansichtszustand): Felder, Befehle, welcher Knopf welchem Befehl entspricht; ausdrücklich „Suche im Chat ⇒ `gbox view --query`, nicht nur `gbox search`“. 7. **README Kapitel 22:** neuer Abschnitt „Ansichtszustand und Plugin-Befehle“ mit Sequenzdiagramm (Agent setzt Suche → revision → Ereignis → Seite füllt Suchfeld und zeigt Treffer 1 → Agent schaltet weiter). 8. Tests: Zustand setzen/lesen, Trefferwechsel an den Rändern (erster/letzter), leere Treffer, Schleifenfreiheit (Seite schreibt, Agent liest denselben Stand), `revision` ändert sich bei jedem Befehl. ## Nicht jetzt **UI-Befehle ohne Backend-Gegenstück** (Lightbox öffnen, Beschreibung ausklappen): Warteschlange `commands.json` mit Quittung und `panel.onCommand(name, fn)` — erst bauen, wenn ein echter Bedarf auftaucht. ## Offen - Ansichtszustand global (wie die Auswahl; zwei offene Reiter zeigen denselben Stand) oder je Chat? Vorschlag: global. - Was wählt `--query`, wenn der bisherige Treffer noch in der neuen Liste steckt — trotzdem Treffer 1 (Vorschlag: ja, der Nutzer hat gesucht). - Bezug: iris/Iris#178 (Aktualisierung), #176 (Zustandszeile `[SEITENPANEL]`), iris/iris-plugins#281. Gegenstück: iris/Iris#181
Author
Owner

PR #285 gemergt: feat(iris-gamebox): Ansichtszustand — Iris setzt Suche und zeigt den ersten Treffer, schaltet durch die Treffer; ViewState im Panel-Kit, Version 0.10.0 (#284)
#285

Commits:

  • feat(iris-gamebox): Ansichtszustand — Iris setzt Suche und zeigt den ersten Treffer, schaltet durch die Treffer; ViewState im Panel-Kit, Version 0.10.0 (#284)

Stand (PR zu #284): Ansichtszustand für iris-gamebox gebaut

Entscheidungen umgesetzt: neue Suche ⇒ erster Treffer wird automatisch gezeigt; Iris schaltet durch die Treffer (gbox view --next | --prev | --hit N); Zustand global (wie die Auswahl); eine Suche des Agenten sortiert nach Relevanz, solange keine Sortierung gesetzt ist (neue Sortierung „Nach Relevanz“ auch in der Seite).

Gebaut.

  • Kit: pk.ViewState(pfad, defaults, choices=, max_len=) — load (kaputte Einzelwerte fallen auf den Standard), update (prüft Feld, Auswahlliste, Länge, ganze Zahlen ≥ 0; atomar; unbekanntes Feld = Fehler), clear.
  • gamebox: view.json (mode, query, system, sort, hit, hits); view_command als gemeinsamer Kern von gbox view und panel_api view — Trefferliste = browse_rows (Store) bzw. die Filterung der Seite (Installiert), also dieselbe Liste wie in der Seite; Ränder bleiben stehen (note), kein Treffer lässt die Auswahl stehen (note), Fehler mit Klartext. view-set (nur Seite: schreibt, rechnet nichts, wählt nichts). status: summary nennt Suche und Position, detail.view, die revision schließt view.json ein.
  • Seite: übernimmt den Zustand beim Öffnen und in onRefresh (Liste neu, Auswahl nicht zurückgesetzt, Treffer in den Bildschirm gescrollt), schreibt eigene Eingaben entprellt zurück und nur bei echter Änderung (keine Schleife), Trefferleiste „Treffer 2 von 7“ mit Zurück/Weiter über denselben Befehl.
  • SKILL.md: „Suche im Chat ⇒ gbox view --query, nur gbox search reicht nicht“, Knöpfe = Befehle. README Kapitel 22.5 (Sequenzdiagramm), CLAUDE.md-Hinweis, Kit-README.

Geprüft. Kit 45 Python- + 16 Node-Tests; gamebox 16 Tests (13 neu für den Ansichtszustand: Suche zeigt Treffer 1, Relevanz-Standard, vor/zurück/n-ter, Ränder, Treffer außerhalb, keine Treffer, Systemfilter, lesen/leeren, ungültige Werte, status-Summary, Seite schreibt ohne die Auswahl zu ändern); registry-tools 62. End-to-End in einem echten Headless-Chromium (tests/e2e/): die echte search.html gegen das echte panel_api.py mit Fake-Heimat und Fake-Katalog — Agent setzt view --query ⇒ Suchfeld, Relevanz, Treffer 1 und „Treffer 1 von 3“ erscheinen; --next ⇒ Seite zeigt Treffer 2; Klick „Weiter“ ⇒ Seite und Plugin führen dieselbe Auswahl; der Nutzer tippt selbst ⇒ der Agent liest die Suche und die Trefferzahl; ein Ereignis ohne Änderung schreibt nichts; 0 Treffer blendet die Leiste aus; keine JavaScript-Fehler. Der Test hat einen echten Fehler gefunden (die Trefferleiste war trotz hidden sichtbar, CSS überschrieb es) — behoben. Paket gebaut und entpackt, view läuft aus dem Paket, --dry-run grün.

Nicht geprüft. In der echten Iris-App (Client mit iris/Iris#178 und dem Marker-Fix #180): ob das Refresh-Ereignis dort zuverlässig ankommt; ob ein Chat-Agent den neuen Skill-Text befolgt (neue Unterhaltung nötig). comfyui-workflows und iris-solidcraft haben noch keinen Ansichtszustand (nur Gamebox hat Suche/Filter). Das Kit wurde nur um ViewState ergänzt — die anderen beiden Plugins mit Reiter nicht neu gebaut.

Offen. side_panel_skill im Manifest und Marker-Hinweis (iris/Iris#181). Bei Relevanz-Gleichstand entscheidet der vorhandene Suchwert: bei „space quest“ stand im Fake-Katalog „Space Quest II“ vor „I“ — ob die Reihenfolge der echten Titel zufriedenstellt, zeigt der Alltag.

PR #285 gemergt: feat(iris-gamebox): Ansichtszustand — Iris setzt Suche und zeigt den ersten Treffer, schaltet durch die Treffer; ViewState im Panel-Kit, Version 0.10.0 (#284) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/285 Commits: - feat(iris-gamebox): Ansichtszustand — Iris setzt Suche und zeigt den ersten Treffer, schaltet durch die Treffer; ViewState im Panel-Kit, Version 0.10.0 (#284) --- ## Stand (PR zu #284): Ansichtszustand für iris-gamebox gebaut **Entscheidungen umgesetzt:** neue Suche ⇒ **erster Treffer wird automatisch gezeigt**; Iris schaltet durch die Treffer (`gbox view --next | --prev | --hit N`); Zustand **global** (wie die Auswahl); eine Suche des Agenten sortiert nach **Relevanz**, solange keine Sortierung gesetzt ist (neue Sortierung „Nach Relevanz“ auch in der Seite). **Gebaut.** - Kit: `pk.ViewState(pfad, defaults, choices=, max_len=)` — `load` (kaputte Einzelwerte fallen auf den Standard), `update` (prüft Feld, Auswahlliste, Länge, ganze Zahlen ≥ 0; atomar; unbekanntes Feld = Fehler), `clear`. - gamebox: `view.json` (mode, query, system, sort, hit, hits); `view_command` als gemeinsamer Kern von `gbox view` und `panel_api view` — Trefferliste = `browse_rows` (Store) bzw. die Filterung der Seite (Installiert), also dieselbe Liste wie in der Seite; Ränder bleiben stehen (`note`), kein Treffer lässt die Auswahl stehen (`note`), Fehler mit Klartext. `view-set` (nur Seite: schreibt, rechnet nichts, wählt nichts). `status`: `summary` nennt Suche und Position, `detail.view`, die `revision` schließt `view.json` ein. - Seite: übernimmt den Zustand beim Öffnen und in `onRefresh` (Liste neu, Auswahl nicht zurückgesetzt, Treffer in den Bildschirm gescrollt), schreibt eigene Eingaben entprellt zurück und nur bei echter Änderung (keine Schleife), Trefferleiste „Treffer 2 von 7“ mit Zurück/Weiter über denselben Befehl. - SKILL.md: „Suche im Chat ⇒ `gbox view --query`, nur `gbox search` reicht nicht“, Knöpfe = Befehle. README Kapitel 22.5 (Sequenzdiagramm), `CLAUDE.md`-Hinweis, Kit-README. **Geprüft.** Kit 45 Python- + 16 Node-Tests; gamebox 16 Tests (13 neu für den Ansichtszustand: Suche zeigt Treffer 1, Relevanz-Standard, vor/zurück/n-ter, Ränder, Treffer außerhalb, keine Treffer, Systemfilter, lesen/leeren, ungültige Werte, `status`-Summary, Seite schreibt ohne die Auswahl zu ändern); registry-tools 62. **End-to-End in einem echten Headless-Chromium** (`tests/e2e/`): die echte `search.html` gegen das echte `panel_api.py` mit Fake-Heimat und Fake-Katalog — Agent setzt `view --query` ⇒ Suchfeld, Relevanz, Treffer 1 und „Treffer 1 von 3“ erscheinen; `--next` ⇒ Seite zeigt Treffer 2; Klick „Weiter“ ⇒ Seite und Plugin führen dieselbe Auswahl; der Nutzer tippt selbst ⇒ der Agent liest die Suche und die Trefferzahl; ein Ereignis ohne Änderung schreibt nichts; 0 Treffer blendet die Leiste aus; keine JavaScript-Fehler. Der Test hat einen echten Fehler gefunden (die Trefferleiste war trotz `hidden` sichtbar, CSS überschrieb es) — behoben. Paket gebaut und entpackt, `view` läuft aus dem Paket, `--dry-run` grün. **Nicht geprüft.** In der echten Iris-App (Client mit iris/Iris#178 und dem Marker-Fix #180): ob das Refresh-Ereignis dort zuverlässig ankommt; ob ein Chat-Agent den neuen Skill-Text befolgt (neue Unterhaltung nötig). comfyui-workflows und iris-solidcraft haben noch keinen Ansichtszustand (nur Gamebox hat Suche/Filter). Das Kit wurde nur um `ViewState` ergänzt — die anderen beiden Plugins mit Reiter nicht neu gebaut. **Offen.** `side_panel_skill` im Manifest und Marker-Hinweis (iris/Iris#181). Bei Relevanz-Gleichstand entscheidet der vorhandene Suchwert: bei „space quest“ stand im Fake-Katalog „Space Quest II“ vor „I“ — ob die Reihenfolge der echten Titel zufriedenstellt, zeigt der Alltag.
Author
Owner

Stand: veröffentlicht

iris-gamebox 0.10.0 ist in der Registry (nach dem Pull des Registry-Repos geprüft). Wer aktualisiert, bekommt: „Zeig mir Space Quest“ im Chat trägt die Suche ins Seitenpanel ein und zeigt den ersten Treffer; Iris schaltet zwischen den Treffern vor und zurück, die Seite zeigt „Treffer 2 von 7“ mit Zurück/Weiter; was du selbst im Reiter suchst, sieht Iris auch; neue Sortierung „Nach Relevanz".

Wirkt vollständig nur mit einer Iris-App mit iris/Iris#178 (Aktualisierung der Ansicht) und #180 (Marker-Fix) und in einer neuen Unterhaltung (der Agent liest den Skill-Text neu). Nicht geprüft: das Zusammenspiel in der echten App; geprüft ist es End-to-End in einem Headless-Chromium (siehe Stand-Kommentar zum PR). Rückmeldung nach dem Test auf mehreren Maschinen bitte hier.

## Stand: veröffentlicht **iris-gamebox 0.10.0** ist in der Registry (nach dem Pull des Registry-Repos geprüft). Wer aktualisiert, bekommt: „Zeig mir Space Quest“ im Chat trägt die Suche ins Seitenpanel ein und zeigt den ersten Treffer; Iris schaltet zwischen den Treffern vor und zurück, die Seite zeigt „Treffer 2 von 7“ mit Zurück/Weiter; was du selbst im Reiter suchst, sieht Iris auch; neue Sortierung „Nach Relevanz". **Wirkt vollständig nur mit** einer Iris-App mit iris/Iris#178 (Aktualisierung der Ansicht) und #180 (Marker-Fix) und in einer **neuen Unterhaltung** (der Agent liest den Skill-Text neu). **Nicht geprüft:** das Zusammenspiel in der echten App; geprüft ist es End-to-End in einem Headless-Chromium (siehe Stand-Kommentar zum PR). Rückmeldung nach dem Test auf mehreren Maschinen bitte hier.
Author
Owner

Geschlossen auf ausdrücklichen Wunsch von Alf; das Label status/zu-testen wurde dabei entfernt. Stand: siehe die Kommentare oben (veröffentlicht bis iris-gamebox 0.10.5).

Geschlossen auf ausdrücklichen Wunsch von Alf; das Label status/zu-testen wurde dabei entfernt. Stand: siehe die Kommentare oben (veröffentlicht bis iris-gamebox 0.10.5).
alf closed this issue 2026-10-27 10:23:45 +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-plugins#284
No description provided.