Plugin-Marktplatz: Katalog mit Kategorien, Grafiken und Ein-Klick-Installation #57

Closed
opened 2026-10-16 15:40:38 +00:00 by alf · 43 comments
Owner

Idee

Ein Plugin-Marktplatz nach dem Vorbild des Apple App Store: Plugins nach Kategorien durchsuchen, grafisch ansprechend (Icons, Screenshots, animierte Bilder, Video), und mit einem Klick installieren, aktualisieren und entfernen. Anlass: Die Plugin-Liste (rund 40 Verzeichnisse, 20 in der Registry) wird unübersichtlich.

Entschieden

  • Ort: fester Teil der App. Betrifft Mac-Server, Linux-Server, Iris.app, IrisClient und IrisRemote. Das ist eine Änderung am Wire-Protokoll: beide Server und beide Clients im selben Zug prüfen.
  • Darstellung: eine HTML/CSS/JS-Seite, die beide Server gleich ausliefern und die Apps per Web-View einbetten (alles, was ein Browser darstellt).
  • Inhalte: jedes Plugin bringt ein Verzeichnis store/ im Paket mit (Icon, Screenshots, Kategorie, Langtext). Das Veröffentlichen übernimmt sie in den Katalog.
  • Umfang: Installieren, Aktualisieren und Entfernen direkt aus dem Marktplatz.
  • Clients in Version 1: macOS (Iris.app und IrisClient) und iOS (IrisRemote). Der Linux-Client folgt später.
  • Vertrauen: nur die eigene Registry iris/iris-plugin-registry; Prüfsummen werden verifiziert.

Folgen

  • Remote-Clients arbeiten gegen den Server: Installiert wird auf dem Server, mit dem der Client verbunden ist. Auf dem iPhone landet das Plugin auf dem Server, nicht auf dem Telefon; die Oberfläche muss das klar zeigen.
  • Neue Server-Endpunkte für Katalog, Installieren, Aktualisieren, Entfernen. Ein Klick in der Web-View darf nur über einen abgesicherten Weg bei diesen Endpunkten ankommen; Seiteninhalt darf nie von sich aus Installationen auslösen.
  • Bausteine, die es schon gibt: Registry mit index.json und Prüfsummen, Leseseite /plugin-registry im Linux-Server, Web-Views und panel_api im Plugin-System.
  • Noch nicht gebaut: die Leseseite im Mac-Server und in der App (README Kapitel 19).

Weitere Entscheidungen (grill-me, Stand 2026-10-16)

  • Install-Weg: Die Seite hat nur ein Lese-Token. Der Klick geht per Web-View-Brücke an die native App, die den Dialog zeigt und mit der echten Bearer-Auth installiert. Die Seite kann nie selbst installieren.
  • Dialog: Zusammenfassung vom Server aus dem Paket-Manifest (nie aus dem store/-Text); Hook-Skripte und requirements.txt ausklappbar; bei Updates die Änderungen.
  • Plattform: nicht lauffähige Plugins sind ausgegraut mit Grund.
  • Updates: Hinweis und manueller Klick, keine automatischen Updates.
  • Kategorien: feste Liste im Katalog, genau eine category je Plugin (Pflicht). Erste Liste: Medien und Kreativ, Wissen und Dokumente, Automatisierung und Alltag, Entwicklung und Analyse, Infrastruktur, Sicherheit.
  • Altbestand: store/ optional; ohne Material eine Platzhalterkarte aus plugin.json.
  • Abhängigkeiten: Manifest-Feld requires; gemeinsame Installation mit gebündeltem Dialog; Warnung beim Entfernen.
  • store/-Inhalt: Medien und Markdown; optional eigene HTML-Seite im abgeschotteten iframe ohne Zugriff auf Token und Marktplatz-Seite.
  • Entfernen: Der Dialog fragt; Standard: Einstellungen und Zugangsdaten behalten.
  • Reihenfolge: Katalog, Linux-Server mit Browser-Seite, macOS, zuletzt iOS.

Noch offen

  • Lese-Token und Web-View-Brücke im Detail (Nachrichtenformat, Ablauf, Ablaufzeit).
  • Format von store/ und der Katalog-Erweiterung (Felder, Größenlimits für Medien).
  • Wie die App erkennt, dass der verbundene Server den Marktplatz kennt (Versionsmarker; iris_min_version warnt bisher nur).

Entwicklung

Plan und Verlauf: plugins/plugin-marktplatz/PLAN.md. Dieses Issue bleibt offen; der Stand steht in den Kommentaren.

## Idee Ein **Plugin-Marktplatz** nach dem Vorbild des Apple App Store: Plugins nach Kategorien durchsuchen, grafisch ansprechend (Icons, Screenshots, animierte Bilder, Video), und mit einem Klick installieren, aktualisieren und entfernen. Anlass: Die Plugin-Liste (rund 40 Verzeichnisse, 20 in der Registry) wird unübersichtlich. ## Entschieden - **Ort:** fester Teil der App. Betrifft Mac-Server, Linux-Server, Iris.app, IrisClient und IrisRemote. Das ist eine Änderung am Wire-Protokoll: beide Server und beide Clients im selben Zug prüfen. - **Darstellung:** eine HTML/CSS/JS-Seite, die beide Server gleich ausliefern und die Apps per Web-View einbetten (alles, was ein Browser darstellt). - **Inhalte:** jedes Plugin bringt ein Verzeichnis `store/` im Paket mit (Icon, Screenshots, Kategorie, Langtext). Das Veröffentlichen übernimmt sie in den Katalog. - **Umfang:** Installieren, Aktualisieren und Entfernen direkt aus dem Marktplatz. - **Clients in Version 1:** macOS (Iris.app und IrisClient) und iOS (IrisRemote). Der Linux-Client folgt später. - **Vertrauen:** nur die eigene Registry `iris/iris-plugin-registry`; Prüfsummen werden verifiziert. ## Folgen - Remote-Clients arbeiten gegen den Server: Installiert wird auf dem Server, mit dem der Client verbunden ist. Auf dem iPhone landet das Plugin auf dem Server, nicht auf dem Telefon; die Oberfläche muss das klar zeigen. - Neue Server-Endpunkte für Katalog, Installieren, Aktualisieren, Entfernen. Ein Klick in der Web-View darf nur über einen abgesicherten Weg bei diesen Endpunkten ankommen; Seiteninhalt darf nie von sich aus Installationen auslösen. - Bausteine, die es schon gibt: Registry mit `index.json` und Prüfsummen, Leseseite `/plugin-registry` im Linux-Server, Web-Views und `panel_api` im Plugin-System. - Noch nicht gebaut: die Leseseite im Mac-Server und in der App (README Kapitel 19). ## Weitere Entscheidungen (grill-me, Stand 2026-10-16) - **Install-Weg:** Die Seite hat nur ein Lese-Token. Der Klick geht per Web-View-Brücke an die native App, die den Dialog zeigt und mit der echten Bearer-Auth installiert. Die Seite kann nie selbst installieren. - **Dialog:** Zusammenfassung vom Server aus dem Paket-Manifest (nie aus dem `store/`-Text); Hook-Skripte und `requirements.txt` ausklappbar; bei Updates die Änderungen. - **Plattform:** nicht lauffähige Plugins sind ausgegraut mit Grund. - **Updates:** Hinweis und manueller Klick, keine automatischen Updates. - **Kategorien:** feste Liste im Katalog, genau eine `category` je Plugin (Pflicht). Erste Liste: Medien und Kreativ, Wissen und Dokumente, Automatisierung und Alltag, Entwicklung und Analyse, Infrastruktur, Sicherheit. - **Altbestand:** `store/` optional; ohne Material eine Platzhalterkarte aus `plugin.json`. - **Abhängigkeiten:** Manifest-Feld `requires`; gemeinsame Installation mit gebündeltem Dialog; Warnung beim Entfernen. - **`store/`-Inhalt:** Medien und Markdown; optional eigene HTML-Seite im abgeschotteten `iframe` ohne Zugriff auf Token und Marktplatz-Seite. - **Entfernen:** Der Dialog fragt; Standard: Einstellungen und Zugangsdaten behalten. - **Reihenfolge:** Katalog, Linux-Server mit Browser-Seite, macOS, zuletzt iOS. ## Noch offen - Lese-Token und Web-View-Brücke im Detail (Nachrichtenformat, Ablauf, Ablaufzeit). - Format von `store/` und der Katalog-Erweiterung (Felder, Größenlimits für Medien). - Wie die App erkennt, dass der verbundene Server den Marktplatz kennt (Versionsmarker; `iris_min_version` warnt bisher nur). ## Entwicklung Plan und Verlauf: `plugins/plugin-marktplatz/PLAN.md`. Dieses Issue bleibt offen; der Stand steht in den Kommentaren.
Author
Owner

PR #77 gemergt: docs(plugin-marktplatz): Entwicklungsverzeichnis mit PLAN.md (iris/Iris#57)
iris/iris-plugins#77

Commits:

  • docs(plugin-marktplatz): Entwicklungsverzeichnis mit PLAN.md (iris/Iris#57)
PR #77 gemergt: docs(plugin-marktplatz): Entwicklungsverzeichnis mit PLAN.md (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/77 Commits: - docs(plugin-marktplatz): Entwicklungsverzeichnis mit PLAN.md (iris/Iris#57)
Author
Owner

PR #78 gemergt: docs(plugin-marktplatz): Entscheidungen aus grill-me in den Plan übernommen (iris/Iris#57)
iris/iris-plugins#78

Commits:

  • docs(plugin-marktplatz): Entscheidungen aus grill-me in den Plan übernommen (iris/Iris#57)
PR #78 gemergt: docs(plugin-marktplatz): Entscheidungen aus grill-me in den Plan übernommen (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/78 Commits: - docs(plugin-marktplatz): Entscheidungen aus grill-me in den Plan übernommen (iris/Iris#57)
Author
Owner

Stand 2026-10-16: Spezifikation geklärt, noch kein Code

Die zehn Fragen aus der Befragung sind beantwortet. Beschreibung des Issues und plugins/plugin-marktplatz/PLAN.md (PR #78) enthalten die Entscheidungen.

Gefunden beim Klären:

  • Bestehende Web-Views nutzen einen kurzlebigen, an ein Plugin gebundenen cfg_token. Der Marktplatz gehört zu keinem Plugin und braucht ein eigenes, nur lesendes Token-Modell.
  • Das Manifest kennt keine Abhängigkeiten zwischen Plugins, obwohl welche bestehen (comfyui-workflows gegen comfyui-bridge; blender-asset-generator gegen blender-bridge und comfyui-bridge). Ein Ein-Klick-Install würde sonst nicht funktionierende Plugins anlegen. Daher das neue Feld requires.
  • Keines der 20 Pakete in der Registry hat Marktplatz-Material; deshalb ist store/ optional und es gibt Platzhalterkarten.

Nicht geprüft: Es wurde nichts gebaut oder getestet. Annahmen (Katalog als erweiterte index.json, zuletzt geladener Katalog bei nicht erreichbarer Registry, im Browser am Linux-Server nur lesbar) stehen im Plan und sind noch nicht bestätigt.

Nächster Schritt: Schritt 1 der Reihenfolge, der Katalog (Manifest-Felder, index.json, publish-plugins.sh, Kategorie-Liste). Das Issue bleibt offen.

## Stand 2026-10-16: Spezifikation geklärt, noch kein Code Die zehn Fragen aus der Befragung sind beantwortet. Beschreibung des Issues und `plugins/plugin-marktplatz/PLAN.md` (PR #78) enthalten die Entscheidungen. **Gefunden beim Klären:** - Bestehende Web-Views nutzen einen kurzlebigen, an **ein** Plugin gebundenen `cfg_token`. Der Marktplatz gehört zu keinem Plugin und braucht ein eigenes, nur lesendes Token-Modell. - Das Manifest kennt keine Abhängigkeiten zwischen Plugins, obwohl welche bestehen (`comfyui-workflows` gegen `comfyui-bridge`; `blender-asset-generator` gegen `blender-bridge` und `comfyui-bridge`). Ein Ein-Klick-Install würde sonst nicht funktionierende Plugins anlegen. Daher das neue Feld `requires`. - Keines der 20 Pakete in der Registry hat Marktplatz-Material; deshalb ist `store/` optional und es gibt Platzhalterkarten. **Nicht geprüft:** Es wurde nichts gebaut oder getestet. Annahmen (Katalog als erweiterte `index.json`, zuletzt geladener Katalog bei nicht erreichbarer Registry, im Browser am Linux-Server nur lesbar) stehen im Plan und sind noch nicht bestätigt. **Nächster Schritt:** Schritt 1 der Reihenfolge, der Katalog (Manifest-Felder, `index.json`, `publish-plugins.sh`, Kategorie-Liste). Das Issue bleibt offen.
Author
Owner

Schritt 1 (Katalog) gebaut, PR iris/iris-plugins#80, noch nichts veröffentlicht.

  • Manifest: category (Pflicht zum Veröffentlichen, ID aus registry-tools/categories.json, 6 Kategorien) und requires (optional). Alle 20 freigegebenen Plugins haben eine Kategorie; requires nur belegt: comfyui-workflows → comfyui-bridge, comfyui-dirigent → beide.
  • Index: schema bleibt 1; neu categories (oben) sowie category, requires, store je Plugin. Linux-Server und Mac-App lesen nur benannte Felder, ältere Leser ignorieren die neuen.
  • Abweichung vom Plan: store/ liegt im Quellbaum des Plugins, nicht im Paket. Sonst hätten 20 Build-Skripte es einpacken müssen, und jeder Server würde Medien mitinstallieren. publish-plugins.sh legt es nach store/<id>/ der Registry; geänderte Medien gehen auch ohne neue Version raus. Grenzen: Icon 512 KB, Texte 64 KB, Medien 8 MB, 12 Screenshots, 25 MB je Plugin; Symlinks und Fremddateien werden abgelehnt.
  • Geprüft: 33 Tests (vorher 15); alle 20 Plugins gebaut und in eine leere Test-Registry veröffentlicht, check ohne Befund, requires lösen sich auf; ein Wegwerf-store/ lief durch das echte Skript (neu, geändert, kaputt abgelehnt). Die echte Registry lehnt die Plugins erwartungsgemäß ab (Manifest geändert, Version gleich).
  • Grenzen/offen: Zum Veröffentlichen müssen alle 20 Plugins eine neue Version bekommen. Kein store/-Material vorhanden. SF-Symbol-Namen in categories.json gelten nur nativ. Nicht in einer App geprüft, dass das Manifest mit den neuen Feldern installiert (Swift-Codable und der Python-Installer lesen tolerant).
  • Nächster Schritt: Schritt 2 (Linux-Server: Endpunkte, Lese-Token, Marktplatz-Seite).
**Schritt 1 (Katalog) gebaut, PR iris/iris-plugins#80, noch nichts veröffentlicht.** - Manifest: `category` (Pflicht zum Veröffentlichen, ID aus `registry-tools/categories.json`, 6 Kategorien) und `requires` (optional). Alle 20 freigegebenen Plugins haben eine Kategorie; `requires` nur belegt: comfyui-workflows → comfyui-bridge, comfyui-dirigent → beide. - Index: `schema` bleibt 1; neu `categories` (oben) sowie `category`, `requires`, `store` je Plugin. Linux-Server und Mac-App lesen nur benannte Felder, ältere Leser ignorieren die neuen. - **Abweichung vom Plan:** `store/` liegt im Quellbaum des Plugins, nicht im Paket. Sonst hätten 20 Build-Skripte es einpacken müssen, und jeder Server würde Medien mitinstallieren. `publish-plugins.sh` legt es nach `store/<id>/` der Registry; geänderte Medien gehen auch ohne neue Version raus. Grenzen: Icon 512 KB, Texte 64 KB, Medien 8 MB, 12 Screenshots, 25 MB je Plugin; Symlinks und Fremddateien werden abgelehnt. - Geprüft: 33 Tests (vorher 15); alle 20 Plugins gebaut und in eine leere Test-Registry veröffentlicht, `check` ohne Befund, `requires` lösen sich auf; ein Wegwerf-`store/` lief durch das echte Skript (neu, geändert, kaputt abgelehnt). Die echte Registry lehnt die Plugins erwartungsgemäß ab (Manifest geändert, Version gleich). - Grenzen/offen: Zum Veröffentlichen müssen alle 20 Plugins eine neue Version bekommen. Kein `store/`-Material vorhanden. SF-Symbol-Namen in `categories.json` gelten nur nativ. Nicht in einer App geprüft, dass das Manifest mit den neuen Feldern installiert (Swift-Codable und der Python-Installer lesen tolerant). - Nächster Schritt: Schritt 2 (Linux-Server: Endpunkte, Lese-Token, Marktplatz-Seite).
Author
Owner

PR #26 gemergt: feat(marketplace): Katalog, Lese-Token und Medien-Proxy im Linux-Server (iris/Iris#57)
iris/iris-linux-server#26

Commits:

  • feat(marketplace): Katalog, Lese-Token und Medien-Proxy im Linux-Server (iris/Iris#57)
PR #26 gemergt: feat(marketplace): Katalog, Lese-Token und Medien-Proxy im Linux-Server (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/26 Commits: - feat(marketplace): Katalog, Lese-Token und Medien-Proxy im Linux-Server (iris/Iris#57)
Author
Owner

PR #27 gemergt: feat(marketplace): Bestätigungs-Vorschau, Installation mit Abhängigkeiten und Entfernen (iris/Iris#57)
iris/iris-linux-server#27

Commits:

  • feat(marketplace): Bestätigungs-Vorschau, Installation mit Abhängigkeiten und Entfernen (iris/Iris#57)
PR #27 gemergt: feat(marketplace): Bestätigungs-Vorschau, Installation mit Abhängigkeiten und Entfernen (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/27 Commits: - feat(marketplace): Bestätigungs-Vorschau, Installation mit Abhängigkeiten und Entfernen (iris/Iris#57)
Author
Owner

PR #28 gemergt: feat(marketplace): Marktplatz-Seite (Kategorien, Suche, Details, Web-View-Brücke) (iris/Iris#57)
iris/iris-linux-server#28

Commits:

  • feat(marketplace): Marktplatz-Seite (Kategorien, Suche, Details, Web-View-Brücke) (iris/Iris#57)
PR #28 gemergt: feat(marketplace): Marktplatz-Seite (Kategorien, Suche, Details, Web-View-Brücke) (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/28 Commits: - feat(marketplace): Marktplatz-Seite (Kategorien, Suche, Details, Web-View-Brücke) (iris/Iris#57)
Author
Owner

PR #66 gemergt: docs(wire): Plugin-Marktplatz — Lese-Token, Routen, Dialog-Vorschau, Web-View-Brücke (iris/Iris#57)
alf/2ndbrain#66

Commits:

  • docs(wire): Plugin-Marktplatz — Lese-Token, Routen, Dialog-Vorschau, Web-View-Brücke (iris/Iris#57)
PR #66 gemergt: docs(wire): Plugin-Marktplatz — Lese-Token, Routen, Dialog-Vorschau, Web-View-Brücke (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/66 Commits: - docs(wire): Plugin-Marktplatz — Lese-Token, Routen, Dialog-Vorschau, Web-View-Brücke (iris/Iris#57)
Author
Owner

Schritt 2 (Linux-Server, Seite im Browser) gebaut und eingereicht (iris-linux-server PR #26, #27, #28; Wire-Doku in 2ndbrain; Plan in iris-plugins).

  • Lese-Token: GET /marketplace/webview-url (Bearer) erzeugt ein Token (8 h, nur im Speicher), das nur Katalog und Medien lesen darf. Installieren, Aktualisieren, Entfernen laufen nur über Bearer-Routen aus der App.
  • Neu: GET /marketplace (die Seite, eine Datei), /marketplace/api/catalog, /marketplace/store/{id}/{pfad} (nur Dateien aus dem Index, Prüfsumme, HTML/SVG mit sandbox-CSP), POST /plugin-registry/preview, /remove, und install mit with_requires und expected.
  • Dialog = Installation: preview leitet alles aus dem geprüften Paket ab (Hooks mit Skript, Python-Pakete, Systemprompt, Jobs, Diff bei Updates, Treiber-Gruppe). install mit expected installiert nichts, wenn die Registry sich seit dem Dialog geändert hat.
  • Linux ehrlich: Der Linux-Server führt keine Hooks aus und fragt kein install_config; preview.this_server meldet das, die App soll es anzeigen.
  • Gesperrt statt versteckt: Mac-only-Plugins bleiben sichtbar mit Grund. Registry weg: letzter Katalog mit stale, auch nach Neustart.
  • Entschieden: App erkennt den Marktplatz per GET /marketplace/webview-url (404 = Server zu alt). Brücke: irisMarketplace.postMessage({v,action,id,version}), Antwort immer irisMarketplaceDone({...}).
  • Geprüft: 100 neue Tests (Mutationsproben rot, danach grün); Lauf mit echten Paketen, echtem store/-Material und publish-plugins.sh gegen eine lokale Test-Registry: Katalog, Medien, Sperrgründe, Header, 401.
  • Nicht geprüft: die Seite im Browser (Chrome-Erweiterung war nicht verbunden; nur Skript-Syntax mit node --check), Lauf im Container auf iris-server (kein Deploy), Mac-Server, Apps.
  • Offen: Daten-Löschen beim Entfernen betrifft nur die Plugin-Konfigurationsdatei. SF-Symbole der Kategorien brauchen eine Web-Abbildung (heute kleine Emoji-Tabelle in der Seite).
  • Nächster Schritt: Deploy auf iris-server und Seite ansehen, dann Schritt 3 (Mac-Server, Iris.app, IrisClient).
**Schritt 2 (Linux-Server, Seite im Browser) gebaut und eingereicht** (iris-linux-server PR #26, #27, #28; Wire-Doku in 2ndbrain; Plan in iris-plugins). - **Lese-Token:** `GET /marketplace/webview-url` (Bearer) erzeugt ein Token (8 h, nur im Speicher), das nur Katalog und Medien lesen darf. Installieren, Aktualisieren, Entfernen laufen nur über Bearer-Routen aus der App. - **Neu:** `GET /marketplace` (die Seite, eine Datei), `/marketplace/api/catalog`, `/marketplace/store/{id}/{pfad}` (nur Dateien aus dem Index, Prüfsumme, HTML/SVG mit `sandbox`-CSP), `POST /plugin-registry/preview`, `/remove`, und `install` mit `with_requires` und `expected`. - **Dialog = Installation:** `preview` leitet alles aus dem geprüften Paket ab (Hooks mit Skript, Python-Pakete, Systemprompt, Jobs, Diff bei Updates, Treiber-Gruppe). `install` mit `expected` installiert nichts, wenn die Registry sich seit dem Dialog geändert hat. - **Linux ehrlich:** Der Linux-Server führt keine Hooks aus und fragt kein `install_config`; `preview.this_server` meldet das, die App soll es anzeigen. - **Gesperrt statt versteckt:** Mac-only-Plugins bleiben sichtbar mit Grund. Registry weg: letzter Katalog mit `stale`, auch nach Neustart. - **Entschieden:** App erkennt den Marktplatz per `GET /marketplace/webview-url` (404 = Server zu alt). Brücke: `irisMarketplace.postMessage({v,action,id,version})`, Antwort immer `irisMarketplaceDone({...})`. - **Geprüft:** 100 neue Tests (Mutationsproben rot, danach grün); Lauf mit echten Paketen, echtem `store/`-Material und `publish-plugins.sh` gegen eine lokale Test-Registry: Katalog, Medien, Sperrgründe, Header, 401. - **Nicht geprüft:** die Seite im Browser (Chrome-Erweiterung war nicht verbunden; nur Skript-Syntax mit `node --check`), Lauf im Container auf iris-server (kein Deploy), Mac-Server, Apps. - **Offen:** Daten-Löschen beim Entfernen betrifft nur die Plugin-Konfigurationsdatei. SF-Symbole der Kategorien brauchen eine Web-Abbildung (heute kleine Emoji-Tabelle in der Seite). - **Nächster Schritt:** Deploy auf iris-server und Seite ansehen, dann Schritt 3 (Mac-Server, Iris.app, IrisClient).
Author
Owner

PR #29 gemergt: fix(marketplace): lange Wörter laufen nicht mehr aus der Karte, Raster auf schmalen Fenstern (iris/Iris#57)
iris/iris-linux-server#29

Commits:

  • fix(marketplace): lange Wörter laufen nicht mehr aus der Karte, Raster auf schmalen Fenstern (iris/Iris#57)
PR #29 gemergt: fix(marketplace): lange Wörter laufen nicht mehr aus der Karte, Raster auf schmalen Fenstern (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/29 Commits: - fix(marketplace): lange Wörter laufen nicht mehr aus der Karte, Raster auf schmalen Fenstern (iris/Iris#57)
Author
Owner

PR #58 gemergt: feat(marketplace): MarketplaceCore — Katalog, Lese-Token, Installationsplan, Paket-Zusammenfassung (Port, mit swiftc-Tests) (#57)
#58

Commits:

  • feat(marketplace): MarketplaceCore — Katalog, Lese-Token, Installationsplan, Paket-Zusammenfassung (Port, mit swiftc-Tests) (#57)
PR #58 gemergt: feat(marketplace): MarketplaceCore — Katalog, Lese-Token, Installationsplan, Paket-Zusammenfassung (Port, mit swiftc-Tests) (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/58 Commits: - feat(marketplace): MarketplaceCore — Katalog, Lese-Token, Installationsplan, Paket-Zusammenfassung (Port, mit swiftc-Tests) (#57)
Author
Owner

PR #60 gemergt: feat(marketplace): Marktplatz im Mac-Server — Katalog, Medien, Vorschau, Installieren mit Abhängigkeiten, Entfernen (#57)
#60

Commits:

  • feat(marketplace): Marktplatz im Mac-Server — Katalog, Medien, Vorschau, Installieren mit Abhängigkeiten, Entfernen (#57)
PR #60 gemergt: feat(marketplace): Marktplatz im Mac-Server — Katalog, Medien, Vorschau, Installieren mit Abhängigkeiten, Entfernen (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/60 Commits: - feat(marketplace): Marktplatz im Mac-Server — Katalog, Medien, Vorschau, Installieren mit Abhängigkeiten, Entfernen (#57)
Author
Owner

PR #61 gemergt: feat(marketplace): Marktplatz-Fenster mit Web-View-Brücke und nativem Bestätigungsdialog im Client (#57)
#61

Commits:

  • feat(marketplace): Marktplatz-Fenster mit Web-View-Brücke und nativem Bestätigungsdialog im Client (#57)
PR #61 gemergt: feat(marketplace): Marktplatz-Fenster mit Web-View-Brücke und nativem Bestätigungsdialog im Client (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/61 Commits: - feat(marketplace): Marktplatz-Fenster mit Web-View-Brücke und nativem Bestätigungsdialog im Client (#57)
Author
Owner

PR #67 gemergt: docs(marketplace): Mac-Server und Client in der Wire-Doku, Abgleich der Seite zwischen den Servern (iris/Iris#57)
alf/2ndbrain#67

Commits:

  • docs(marketplace): Mac-Server und Client in der Wire-Doku, Abgleich der Seite zwischen den Servern (iris/Iris#57)
PR #67 gemergt: docs(marketplace): Mac-Server und Client in der Wire-Doku, Abgleich der Seite zwischen den Servern (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/67 Commits: - docs(marketplace): Mac-Server und Client in der Wire-Doku, Abgleich der Seite zwischen den Servern (iris/Iris#57)
Author
Owner

PR #62 gemergt: docs(claude): Marktplatz in der Code-Landkarte (#57)
#62

Commits:

  • docs(claude): Marktplatz in der Code-Landkarte (#57)
PR #62 gemergt: docs(claude): Marktplatz in der Code-Landkarte (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/62 Commits: - docs(claude): Marktplatz in der Code-Landkarte (#57)
Author
Owner

Schritt 3 (macOS: Mac-Server, Iris.app, IrisClient) gebaut und eingereicht (PRs #58, #60, #61 in iris/Iris; Wire-Doku, Seiten-Abgleich tools/check-marketplace-page-sync; Plan in iris-plugins). Noch nicht live getestet.

  • Mac-Server: MarketplaceCore.swift (reine Logik, Port der Python-Version, Antworten identisch), MarketplaceService.swift, Routen in IrisRemoteServer.swift. Seite öffentlich, Katalog und Medien nur mit Lese-Token, alles andere Bearer. Seite als Ressource, dieselbe Datei wie im Linux-Server.
  • Unterschied zum Linux-Server: Der Mac führt die Installations-Skripte aus (this_server.hooks_executed: true), der Dialog zeigt das.
  • Client: Fenster mit Zertifikat-Pinning und Brücke irisMarketplace, nativer Bestätigungsdialog (Skripte und Python-Pakete aufklappbar, Änderungen bei Updates, ersetzte Treiber-Plugins, beim Entfernen Abhängige und Schalter „Daten löschen“), Knopf „Marktplatz“ im Plugin-Manager. Gilt für Iris („Iris — Lokal“) und IrisClient.
  • Brücke streng: nur Hauptframe der Server-Seite (ein Hero-Iframe kann nichts auslösen), nur install/update/remove, saubere ID, Version der Seite wird ignoriert; installiert wird, was der Dialog zeigte (expected). Die App meldet immer irisMarketplaceDone zurück.
  • Geprüft: 147 Prüfungen im eigenständigen Harness (scripts/test-marketplace-core.sh, nur swiftc); Xcode-Builds beider Schemes mit frischem Zeitstempel, Scheme danach zurückgesetzt.
  • Nicht geprüft: Lauf des Mac-Servers mit echten Paketen, der Dialog in Echt, Installieren und Entfernen über die App. Dafür ist „Bau und starte lokal“ nötig; die laufende Iris wurde bewusst nicht neu gestartet.
  • Offen: iOS (Schritt 4); Keychain-Einträge bleiben beim „Daten löschen“ bestehen.
**Schritt 3 (macOS: Mac-Server, Iris.app, IrisClient) gebaut und eingereicht** (PRs #58, #60, #61 in iris/Iris; Wire-Doku, Seiten-Abgleich `tools/check-marketplace-page-sync`; Plan in iris-plugins). Noch **nicht live getestet**. - **Mac-Server:** `MarketplaceCore.swift` (reine Logik, Port der Python-Version, Antworten identisch), `MarketplaceService.swift`, Routen in `IrisRemoteServer.swift`. Seite öffentlich, Katalog und Medien nur mit Lese-Token, alles andere Bearer. Seite als Ressource, dieselbe Datei wie im Linux-Server. - **Unterschied zum Linux-Server:** Der Mac führt die Installations-Skripte aus (`this_server.hooks_executed: true`), der Dialog zeigt das. - **Client:** Fenster mit Zertifikat-Pinning und Brücke `irisMarketplace`, nativer Bestätigungsdialog (Skripte und Python-Pakete aufklappbar, Änderungen bei Updates, ersetzte Treiber-Plugins, beim Entfernen Abhängige und Schalter „Daten löschen“), Knopf „Marktplatz“ im Plugin-Manager. Gilt für Iris („Iris — Lokal“) und IrisClient. - **Brücke streng:** nur Hauptframe der Server-Seite (ein Hero-Iframe kann nichts auslösen), nur install/update/remove, saubere ID, Version der Seite wird ignoriert; installiert wird, was der Dialog zeigte (`expected`). Die App meldet immer `irisMarketplaceDone` zurück. - **Geprüft:** 147 Prüfungen im eigenständigen Harness (`scripts/test-marketplace-core.sh`, nur swiftc); Xcode-Builds beider Schemes mit frischem Zeitstempel, Scheme danach zurückgesetzt. - **Nicht geprüft:** Lauf des Mac-Servers mit echten Paketen, der Dialog in Echt, Installieren und Entfernen über die App. Dafür ist „Bau und starte lokal“ nötig; die laufende Iris wurde bewusst nicht neu gestartet. - **Offen:** iOS (Schritt 4); Keychain-Einträge bleiben beim „Daten löschen“ bestehen.
Author
Owner

PR #30 gemergt: fix(marketplace): Plattformname „macOS“ in der Kopfzeile (iris/Iris#57)
iris/iris-linux-server#30

Commits:

  • fix(marketplace): Plattformname „macOS“ in der Kopfzeile (iris/Iris#57)
PR #30 gemergt: fix(marketplace): Plattformname „macOS“ in der Kopfzeile (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/30 Commits: - fix(marketplace): Plattformname „macOS“ in der Kopfzeile (iris/Iris#57)
Author
Owner

PR #63 gemergt: chore(marketplace): Seite aus dem Linux-Server übernehmen (Plattformname) (#57)
#63

Commits:

  • chore(marketplace): Seite aus dem Linux-Server übernehmen (Plattformname) (#57)
PR #63 gemergt: chore(marketplace): Seite aus dem Linux-Server übernehmen (Plattformname) (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/63 Commits: - chore(marketplace): Seite aus dem Linux-Server übernehmen (Plattformname) (#57)
Author
Owner

PR #68 gemergt: chore(tools): Abgleich auch für das Dialog-Modell der iOS-App (iris/Iris#57)
alf/2ndbrain#68

Commits:

  • chore(tools): Abgleich auch für das Dialog-Modell der iOS-App (iris/Iris#57)
PR #68 gemergt: chore(tools): Abgleich auch für das Dialog-Modell der iOS-App (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/68 Commits: - chore(tools): Abgleich auch für das Dialog-Modell der iOS-App (iris/Iris#57)
Author
Owner

PR #13 gemergt: feat(marketplace): Plugin-Marktplatz in IrisRemote — Seite, Web-View-Brücke, nativer Bestätigungsdialog (iris/Iris#57)
iris/2ndbrain-ios#13

Commits:

  • feat(marketplace): Plugin-Marktplatz in IrisRemote — Seite, Web-View-Brücke, nativer Bestätigungsdialog (iris/Iris#57)
PR #13 gemergt: feat(marketplace): Plugin-Marktplatz in IrisRemote — Seite, Web-View-Brücke, nativer Bestätigungsdialog (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/13 Commits: - feat(marketplace): Plugin-Marktplatz in IrisRemote — Seite, Web-View-Brücke, nativer Bestätigungsdialog (iris/Iris#57)
Author
Owner

PR #69 gemergt: docs(wire): iOS-Client des Marktplatzes (iris/Iris#57)
alf/2ndbrain#69

Commits:

PR #69 gemergt: docs(wire): iOS-Client des Marktplatzes (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/69 Commits: - docs(wire): iOS-Client des Marktplatzes (iris/Iris#57)
Author
Owner

PR #31 gemergt: feat(marketplace): Dateiliste, SKILL.md und Einzeldateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
iris/iris-linux-server#31

Commits:

  • feat(marketplace): Dateiliste, SKILL.md und Einzeldateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
PR #31 gemergt: feat(marketplace): Dateiliste, SKILL.md und Einzeldateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/31 Commits: - feat(marketplace): Dateiliste, SKILL.md und Einzeldateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
Author
Owner

PR #64 gemergt: feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (#57)
#64

Commits:

  • feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (#57)
PR #64 gemergt: feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/64 Commits: - feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (#57)
Author
Owner

PR #14 gemergt: feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
iris/2ndbrain-ios#14

Commits:

  • feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
PR #14 gemergt: feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/14 Commits: - feat(marketplace): Skills, Skripte und Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
Author
Owner

PR #70 gemergt: docs(wire): Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
alf/2ndbrain#70

Commits:

  • docs(wire): Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
PR #70 gemergt: docs(wire): Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/70 Commits: - docs(wire): Dateien des Pakets im Bestätigungsdialog ansehen (iris/Iris#57)
Author
Owner

PR #32 gemergt: feat(marketplace): Seite — Knopf „Alle aktualisieren“ im Tab Updates (iris/Iris#57)
iris/iris-linux-server#32

Commits:

  • feat(marketplace): Seite — Knopf „Alle aktualisieren“ im Tab Updates (iris/Iris#57)
PR #32 gemergt: feat(marketplace): Seite — Knopf „Alle aktualisieren“ im Tab Updates (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/32 Commits: - feat(marketplace): Seite — Knopf „Alle aktualisieren“ im Tab Updates (iris/Iris#57)
Author
Owner

PR #65 gemergt: feat(marketplace): „Alle aktualisieren“ — gesammelter Dialog mit Änderungen und Details, nacheinander aktualisieren (#57)
#65

Commits:

  • feat(marketplace): „Alle aktualisieren“ — gesammelter Dialog mit Änderungen und Details, nacheinander aktualisieren (#57)
PR #65 gemergt: feat(marketplace): „Alle aktualisieren“ — gesammelter Dialog mit Änderungen und Details, nacheinander aktualisieren (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/65 Commits: - feat(marketplace): „Alle aktualisieren“ — gesammelter Dialog mit Änderungen und Details, nacheinander aktualisieren (#57)
Author
Owner

PR #15 gemergt: feat(marketplace): „Alle aktualisieren“ in IrisRemote — gesammelter Dialog, Details ansehen, nacheinander aktualisieren (iris/Iris#57)
iris/2ndbrain-ios#15

Commits:

  • feat(marketplace): „Alle aktualisieren“ in IrisRemote — gesammelter Dialog, Details ansehen, nacheinander aktualisieren (iris/Iris#57)
PR #15 gemergt: feat(marketplace): „Alle aktualisieren“ in IrisRemote — gesammelter Dialog, Details ansehen, nacheinander aktualisieren (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/15 Commits: - feat(marketplace): „Alle aktualisieren“ in IrisRemote — gesammelter Dialog, Details ansehen, nacheinander aktualisieren (iris/Iris#57)
Author
Owner

PR #71 gemergt: docs(wire): Brücken-Nachricht update_all (Alle aktualisieren) (iris/Iris#57)
alf/2ndbrain#71

Commits:

  • docs(wire): Brücken-Nachricht update_all (Alle aktualisieren) (iris/Iris#57)
PR #71 gemergt: docs(wire): Brücken-Nachricht update_all (Alle aktualisieren) (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/71 Commits: - docs(wire): Brücken-Nachricht update_all (Alle aktualisieren) (iris/Iris#57)
Author
Owner

PR #72 gemergt: docs(wire): Markdown der update_all-Beschreibung bereinigt (iris/Iris#57)
alf/2ndbrain#72

Commits:

  • docs(wire): Markdown der update_all-Beschreibung bereinigt (iris/Iris#57)
PR #72 gemergt: docs(wire): Markdown der update_all-Beschreibung bereinigt (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/72 Commits: - docs(wire): Markdown der update_all-Beschreibung bereinigt (iris/Iris#57)
Author
Owner

PR #33 gemergt: feat(marketplace): Detailansicht zeigt die Store-Seite des Plugins in voller Höhe (iris/Iris#57)
iris/iris-linux-server#33

Commits:

  • feat(marketplace): Detailansicht zeigt die Store-Seite des Plugins in voller Höhe (iris/Iris#57)
PR #33 gemergt: feat(marketplace): Detailansicht zeigt die Store-Seite des Plugins in voller Höhe (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/33 Commits: - feat(marketplace): Detailansicht zeigt die Store-Seite des Plugins in voller Höhe (iris/Iris#57)
Author
Owner

PR #66 gemergt: chore(marketplace): Seite aus dem Linux-Server übernehmen (Store-Seite in der Detailansicht) (#57)
#66

Commits:

  • chore(marketplace): Seite aus dem Linux-Server übernehmen (Store-Seite in der Detailansicht) (#57)
PR #66 gemergt: chore(marketplace): Seite aus dem Linux-Server übernehmen (Store-Seite in der Detailansicht) (#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/66 Commits: - chore(marketplace): Seite aus dem Linux-Server übernehmen (Store-Seite in der Detailansicht) (#57)
Author
Owner

PR #96 gemergt: feat(store): Bildtexte zu Screenshots (store/text/*.md → HTML) (iris/Iris#57)
iris/iris-plugins#96

Commits:

  • feat(store): Bildtexte zu Screenshots (store/text/*.md → HTML) (iris/Iris#57)
PR #96 gemergt: feat(store): Bildtexte zu Screenshots (store/text/*.md → HTML) (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/96 Commits: - feat(store): Bildtexte zu Screenshots (store/text/*.md → HTML) (iris/Iris#57)
Author
Owner

PR #34 gemergt: feat(marketplace): Bildtexte und Großansicht im Marktplatz (iris/Iris#57)
iris/iris-linux-server#34

Commits:

  • feat(marketplace): Bildtexte und Großansicht im Marktplatz (iris/Iris#57)
PR #34 gemergt: feat(marketplace): Bildtexte und Großansicht im Marktplatz (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/34 Commits: - feat(marketplace): Bildtexte und Großansicht im Marktplatz (iris/Iris#57)
Author
Owner

PR #67 gemergt: feat(marketplace): Bildtexte im Katalog und Seitenkopie (iris/Iris#57)
#67

Commits:

  • feat(marketplace): Bildtexte im Katalog und Seitenkopie (iris/Iris#57)
PR #67 gemergt: feat(marketplace): Bildtexte im Katalog und Seitenkopie (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/67 Commits: - feat(marketplace): Bildtexte im Katalog und Seitenkopie (iris/Iris#57)
Author
Owner

PR #73 gemergt: docs(wire): Bildtexte im Marktplatz-Katalog (iris/Iris#57)
alf/2ndbrain#73

Commits:

  • docs(wire): Bildtexte im Marktplatz-Katalog (iris/Iris#57)
PR #73 gemergt: docs(wire): Bildtexte im Marktplatz-Katalog (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/73 Commits: - docs(wire): Bildtexte im Marktplatz-Katalog (iris/Iris#57)
Author
Owner

PR #97 gemergt: feat(store): eigene Notiz store/custom.md mit _attachments statt Bildtexten (iris/Iris#57)
iris/iris-plugins#97

Commits:

  • feat(store): eigene Notiz store/custom.md mit _attachments statt Bildtexten (iris/Iris#57)
PR #97 gemergt: feat(store): eigene Notiz store/custom.md mit _attachments statt Bildtexten (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/97 Commits: - feat(store): eigene Notiz store/custom.md mit _attachments statt Bildtexten (iris/Iris#57)
Author
Owner

PR #35 gemergt: feat(marketplace): eigene Notiz des Plugins im Marktplatz (iris/Iris#57)
iris/iris-linux-server#35

Commits:

  • feat(marketplace): eigene Notiz des Plugins im Marktplatz (iris/Iris#57)
PR #35 gemergt: feat(marketplace): eigene Notiz des Plugins im Marktplatz (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/35 Commits: - feat(marketplace): eigene Notiz des Plugins im Marktplatz (iris/Iris#57)
Author
Owner

PR #68 gemergt: feat(marketplace): eigene Notiz im Katalog, Seitenkopie (iris/Iris#57)
#68

Commits:

  • feat(marketplace): eigene Notiz im Katalog, Seitenkopie (iris/Iris#57)
PR #68 gemergt: feat(marketplace): eigene Notiz im Katalog, Seitenkopie (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/68 Commits: - feat(marketplace): eigene Notiz im Katalog, Seitenkopie (iris/Iris#57)
Author
Owner

PR #74 gemergt: docs(wire): custom statt Bildtexte im Marktplatz-Katalog (iris/Iris#57)
alf/2ndbrain#74

Commits:

  • docs(wire): custom statt Bildtexte im Marktplatz-Katalog (iris/Iris#57)
PR #74 gemergt: docs(wire): custom statt Bildtexte im Marktplatz-Katalog (iris/Iris#57) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/74 Commits: - docs(wire): custom statt Bildtexte im Marktplatz-Katalog (iris/Iris#57)
Author
Owner

PR #98 gemergt: docs(plugins): Stand Marktplatz in README und Plan (iris/Iris#57)
iris/iris-plugins#98

Commits:

  • docs(plugins): Stand Marktplatz in README und Plan (iris/Iris#57)
PR #98 gemergt: docs(plugins): Stand Marktplatz in README und Plan (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/98 Commits: - docs(plugins): Stand Marktplatz in README und Plan (iris/Iris#57)
Author
Owner

Stand 2026-10-16 (Zusammenfassung)

Der Plugin-Marktplatz ist gebaut und läuft — Katalog, beide Server, alle Clients.

Fertig

  • Katalog/Registry: Kategorien, requires, platforms, store/ je Plugin; Prüfungen und Tests in plugins/registry-tools (66 Tests).
  • Linux-Server: Routen /marketplace, Katalog, Medien, /plugin-registry/preview|install|remove|package-file; Lese-Token (8 h); auf iris-server deployt und im Browser geprüft.
  • Mac-Server + Clients (Iris, IrisClient): Marktplatz-Fenster, nativer Bestätigungsdialog, in der echten Mac-App getestet: Öffnen, Update, Neuinstallation, Entfernen.
  • iOS (IrisRemote): Marktplatz plus Dialog; Alf hat ihn auf dem iPhone ausprobiert („scheint alles gut zu funktionieren“).
  • Dialog = Installation: zeigt Skripte, Skills und jede Datei des Pakets zum Ansehen; expected verhindert, dass etwas anderes installiert wird als gezeigt.
  • „Alle aktualisieren“ im Tab „Updates“: ein gesammelter Dialog, danach nacheinander; ein Fehler stoppt die anderen nicht.
  • Alle 20 freigegebenen Plugins mit Kategorie, kurzer Beschreibung, Icon, Langtext und eigener Store-Seite veröffentlicht (Registry 85346ab, b45377f).
  • Eigene Notiz store/custom.md: normale Obsidian-Notiz, Bilder/Videos in store/_attachments/ (![[Bild.png]]), beim Veröffentlichen zu HTML; nur verwendete Dateien kommen in die öffentliche Registry; Seite filtert zusätzlich per Whitelist, Klick vergrößert Bilder. Lokal im Browser mit Testbildern/Tabelle geprüft.
  • Doku: README Kapitel 20, Wire-Protokoll, plugins/plugin-marktplatz/PLAN.md, Daily Logs.

Grenzen / nicht geprüft

  • „Alle aktualisieren“ noch nicht mit echten Updates erprobt (18 auf dem Mac, 11 auf iris-server).
  • Mac-App und iPhone brauchen einen Neubau für Store-Seiten, „Alle aktualisieren“, Dateien im Dialog und die eigene Notiz.
  • Linux-Server: marketplace.py (Feld custom im Katalog) noch nicht deployt; die neue Seite liegt dort.
  • Es gibt noch keine echte custom.md samt Bildern in einem Plugin.
  • Aus früheren Schritten ungeprüft: Entfernen mit „Daten löschen“, Installation mit Abhängigkeiten/changed, Abbrechen im Dialog, Marktplatz von IrisClient gegen den Linux-Server. Beim Entfernen bleiben Keychain-Einträge bestehen.

Als Nächstes

  1. Neu bauen (Mac, iPhone), „Alle aktualisieren“ erproben.
  2. Linux-Server per rsync deployen.
  3. Erste echte custom.md schreiben, auf private Daten prüfen, --dry-run, erst nach Okay veröffentlichen.
  4. Idee, kein Auftrag: Plugin „Plugin entwickeln“ (Checkliste aus README Kap. 20 als Skript-Befehle).

Das Issue bleibt offen.

## Stand 2026-10-16 (Zusammenfassung) **Der Plugin-Marktplatz ist gebaut und läuft** — Katalog, beide Server, alle Clients. ### Fertig - **Katalog/Registry:** Kategorien, `requires`, `platforms`, `store/` je Plugin; Prüfungen und Tests in `plugins/registry-tools` (66 Tests). - **Linux-Server:** Routen `/marketplace`, Katalog, Medien, `/plugin-registry/preview|install|remove|package-file`; Lese-Token (8 h); auf `iris-server` deployt und im Browser geprüft. - **Mac-Server + Clients (Iris, IrisClient):** Marktplatz-Fenster, nativer Bestätigungsdialog, in der echten Mac-App getestet: Öffnen, Update, Neuinstallation, Entfernen. - **iOS (IrisRemote):** Marktplatz plus Dialog; Alf hat ihn auf dem iPhone ausprobiert („scheint alles gut zu funktionieren“). - **Dialog = Installation:** zeigt Skripte, Skills und **jede Datei des Pakets zum Ansehen**; `expected` verhindert, dass etwas anderes installiert wird als gezeigt. - **„Alle aktualisieren“** im Tab „Updates“: ein gesammelter Dialog, danach nacheinander; ein Fehler stoppt die anderen nicht. - **Alle 20 freigegebenen Plugins** mit Kategorie, kurzer Beschreibung, Icon, Langtext und eigener **Store-Seite** veröffentlicht (Registry `85346ab`, `b45377f`). - **Eigene Notiz `store/custom.md`:** normale Obsidian-Notiz, Bilder/Videos in `store/_attachments/` (`![[Bild.png]]`), beim Veröffentlichen zu HTML; nur verwendete Dateien kommen in die öffentliche Registry; Seite filtert zusätzlich per Whitelist, Klick vergrößert Bilder. Lokal im Browser mit Testbildern/Tabelle geprüft. - Doku: README Kapitel 20, Wire-Protokoll, `plugins/plugin-marktplatz/PLAN.md`, Daily Logs. ### Grenzen / nicht geprüft - „Alle aktualisieren“ noch **nicht** mit echten Updates erprobt (18 auf dem Mac, 11 auf `iris-server`). - Mac-App und iPhone brauchen einen **Neubau** für Store-Seiten, „Alle aktualisieren“, Dateien im Dialog und die eigene Notiz. - Linux-Server: `marketplace.py` (Feld `custom` im Katalog) noch nicht deployt; die neue Seite liegt dort. - Es gibt noch keine echte `custom.md` samt Bildern in einem Plugin. - Aus früheren Schritten ungeprüft: Entfernen mit „Daten löschen“, Installation mit Abhängigkeiten/`changed`, Abbrechen im Dialog, Marktplatz von IrisClient gegen den Linux-Server. Beim Entfernen bleiben Keychain-Einträge bestehen. ### Als Nächstes 1. Neu bauen (Mac, iPhone), „Alle aktualisieren“ erproben. 2. Linux-Server per rsync deployen. 3. Erste echte `custom.md` schreiben, auf private Daten prüfen, `--dry-run`, erst nach Okay veröffentlichen. 4. Idee, kein Auftrag: Plugin „Plugin entwickeln“ (Checkliste aus README Kap. 20 als Skript-Befehle). Das Issue bleibt offen.
Author
Owner

PR #16 gemergt: chore(i18n): neue Strings des Bulk-Update-Dialogs in IrisRemote (iris/Iris#57)
iris/2ndbrain-ios#16

Commits:

  • chore(i18n): neue Strings des Bulk-Update-Dialogs in IrisRemote (iris/Iris#57)
PR #16 gemergt: chore(i18n): neue Strings des Bulk-Update-Dialogs in IrisRemote (iris/Iris#57) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/16 Commits: - chore(i18n): neue Strings des Bulk-Update-Dialogs in IrisRemote (iris/Iris#57)
alf closed this issue 2026-10-19 20:37:42 +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#57
No description provided.