feat(side-panel): Ansicht des Plugin-Reiters aktualisiert sich — revision in status, Ereignis iris:panel-refresh, automatisch und manuell #178
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#178
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?
Ziel
Die Plugin-Oberfläche im Seitenpanel zeigt Änderungen, die Iris (der Agent) vornimmt, ohne dass der Nutzer neu lädt — automatisch, und auch manuell auslösbar. Das Protokoll legt fest, woran der Client eine Änderung erkennt und wie er die Seite benachrichtigt; jedes Plugin mit
side_panelzieht nach (Umsetzung dort: iris/iris-plugins, siehe Verweis unten).Befund (2026-10-26, Code gelesen)
statusetwa alle 5 s (PluginPanelModel.runPolling), nutzt aber nursummary(für den Marker und die Statuszeile). Die Seite erfährt davon nichts — sie zeigt den Stand vom Laden an. Ändert der Agent etwas (Spiel gebaut, Workflow registriert, Design gespeichert), bleibt die Ansicht alt.reload()→reloadCounter→ die WebView lädt die URL neu). Das ist ein harter Neustart: Seitenzustand (Suche, Filter, Auswahl im JS, Scroll) ist weg, und er kommt nur auf Nutzerklick.Vorschlag (zu klären)
statusbekommt ein optionales Feldrevision(Zeichenkette), das sich ändert, wenn sich der sichtbare Stand des Plugins geändert hat — ein Hash/Zähler, den das Plugin billig berechnet (z. B. Zeitstempel und Größen der Zustandsdateien, nie ein Vollindex). Gleicherevision= nichts zu tun. Fehlt das Feld, gibt es keine automatische Aktualisierung (wie heute).statusmit der letzten gesehenenrevision. Bei Änderung (nicht beim ersten Wert) meldet er der Seite per JS-Ereignis:window.dispatchEvent(new CustomEvent("iris:panel-refresh", {detail: {revision, reason: "status"|"manual"|"agent"}}))viaevaluateJavaScript— ohne Neuladen. Kein Reload, der Seitenzustand bleibt; die Seite holt sich selbst, was sie braucht.status-Lauf aus, sobald ein Werkzeugaufruf des Agenten im Chat fertig ist und wenn der Antwort-Stream endet. Sichtbar ist dann der neue Stand ohne Wartezeit.reason: "manual", plus ein frischerstatus); ein harter Reload bleibt über ⌥-Klick bzw. Kontextmenü erreichbar. Reagiert eine Seite nicht auf das Ereignis (altes Plugin ohne Kit), lädt der Client sie nach dem Ereignis hart neu — nur bei manuellem Auslösen.02-Wire-Protokoll.mdumrevision, das Ereignis und die Auslöser erweitern. Die Server reichenrevisionnur durch (sie kennen weder Chat noch Antwortformat);PluginSidePanelCore.swift(Quelle Mac, Kopie iOS) trägt die Auslegung und den Vergleich.Betrifft
Mac-App (Iris, IrisClient), iOS (
WKWebViewkannevaluateJavaScript), Wire-Protokoll. Linux-Server unverändert (nur Durchreichen). Plugins: iris/iris-plugins (Kit + comfyui-workflows, iris-solidcraft, iris-gamebox).Offen
revisionvom Plugin berechnen lassen oder aus dem Marker/detailableiten? Vorschlag: vom Plugin, weil nur es weiß, was „sichtbarer Stand“ ist.PluginSidePanelCore.Gegenstück: iris/iris-plugins#281
PR #179 gemergt: feat(side-panel): Ansicht des Plugin-Reiters aktualisiert sich — revision in status, Ereignis iris:panel-refresh, Anstoß nach Agenten-Schritten, weicher Knopf (iris/Iris#178)
#179
Commits:
Stand: Client und Protokoll gebaut (Plugins folgen mit iris/iris-plugins#281)
Was jetzt gilt (Wire-Protokoll, Abschnitt „Plugin-Reiter im Seitenpanel“, alf/2ndbrain-PR zu diesem Issue):
statuskennt ein optionales Feldrevision. Der Client vergleicht sie je geöffneter Seite; der erste Wert nach dem Laden ist keine Änderung. Bei Änderung schickt er der Seiteiris:panel-refresh(detail: {revision, reason}) per JavaScript — ohne Neuladen.status), Agent (agent: nachtool.completeddes Hermes-Streams und am Ende eines Laufs — iOS nur am Ende, es kennt keine Werkzeug-Ereignisse) und Knopf (manual). Läuft schon eine Abfrage, folgt danach genau eine weitere.true), lädt der Client nur beimanualhart neu.PluginSidePanelCore.swift, Mac → iOS-Kopie):revision(from:),revisionChanged,RefreshReason,refreshScript,agentActivityNotification. ÜberNotificationCenter(nicht über die Registry), damit der Agenten-Anstoß nicht an einer An-/Abmeldung hängt (Verdacht aus #175).Geprüft:
scripts/test-plugin-side-panel-core.shgrün (neu: revision, Änderungsregel, Skript mit maskierter revision, Benachrichtigung).IrisClientundIris(Debug, eigenes DerivedData, ohne Signing) bauen, iOS (IrisRemote, Simulator-Generic, ohne Signing) baut.check-marketplace-page-syncmeldet alles identisch.Nicht geprüft: das Verhalten in der laufenden App — kein Plugin liefert bisher
revision, also läuft nur der Knopf; Ereignis und Auswertung des Skriptergebnisses (true/false) sind nur kompiliert, nicht gegen eine echte Seite getestet. iOS auf Gerät nicht gestartet.Offen: Kit (
revision_of,onRefresh) und die drei Plugins (iris/iris-plugins#281); #175 (Marker fehlt) bleibt eine eigene Baustelle.PR #45 gemergt: feat(side-panel): iOS — Plugin-Reiter aktualisiert sich bei neuer revision, weicher Knopf, Anstoß am Laufende (iris/Iris#178)
iris/2ndbrain-ios#45
Commits:
Stand: iOS-Seite gebaut (zu iris/Iris#178)
PluginSidePanelCore.swiftals Kopie nachgezogen (check-marketplace-page-sync: identisch).ChatPluginPanelModel:revisionvergleichen,refreshRequest, Anstoß überNotificationCenter, genau eine Wiederholung nach einem Nudge während eines Laufs.PinnedRemoteHTMLViewbekommt optionalrefreshRequest/onPageUnaware(andere Aufrufer unverändert) und führt das Skript perevaluateJavaScriptaus. Der Knopf aktualisiert weich, der harte Neustart liegt im Kontextmenü. Anstoß am Ende eines Laufs (AgentJob.startStreaming,.done); iOS kennt keine Werkzeug-Ereignisse im Stream.Geprüft:
IrisRemotebaut (Simulator-Generic, ohne Signing). Nicht geprüft: nicht auf Gerät oder Simulator gestartet; kein Plugin liefert bisherrevision(iris/iris-plugins#281).PR #114 gemergt: docs(wire): Plugin-Reiter aktualisiert sich — revision in status, Ereignis iris:panel-refresh, Auslöser (iris/Iris#178)
alf/2ndbrain#114
Commits:
PR #115 gemergt: docs(wire): Stand der Aktualisierung des Plugin-Reiters — Client, Kit und drei Plugins gebaut (iris/Iris#178, iris/iris-plugins#281)
alf/2ndbrain#115
Commits: