Autonome Web-Blöcke: Manifest-Prüfung, Lock-Werkzeug und Migration von iris-claude-sessions (iris/Iris#149) #225

Closed
opened 2026-10-22 17:59:12 +00:00 by alf · 3 comments
Owner

Worum es geht

Teil des Features Autonome Web-Blöcke (Spezifikation und alle Entscheidungen: iris/Iris#149). Auf Plugin-Seite: Werkzeuge und Prüfungen für das neue Manifest, dann die Migration der Plugins, die heute einen Wächter als Umweg brauchen. Auslöser war der Praxistest von iris-plugins#203 (Memory-Editor, Wächter, Lessons Learned im PLAN.md von iris-claude-sessions).

Zu tun

  1. Manifest-Prüfung (iris-plugin-dev, registry-tools): neue Felder actions_api, autonomous_block_types, actions, launchers, runtime auf Vollständigkeit prüfen (Skript vorhanden, Name deklariert, Zeitlimit, beschreibung nicht leer, Platzhalter-Texte).
  2. Lock-Werkzeug: Befehl in plugin_dev.py, der aus den Abhängigkeiten eines Plugins die hash-gepinnte Lock-Datei erzeugt (Format nach Entscheidung in #149) und prüft, dass nichts ungepinnt ist.
  3. Datenschutz-Scan (registry-tools/privacy_scan.py) auch über beschreibung der Aktionen und über die Lock-Datei.
  4. Installationsdialog/Store-Seite: Aktionen mit beschreibung erscheinen im Klartext (Gegenstück in der App: iris/Iris#149).
  5. Migration iris-claude-sessions: Aktionen statt Wächter für Sessions-Canvas und Memory-Editor (speichern, exportieren, importieren, rename, trash, restore, open, …); Zustand über irisSaveState; launchers für „Claude-Code-Sessions“; Titel von Iris-gestarteten Sessions (aus der ersten echten Nachricht). Der Wächter bleibt, bis das Feature in einem stabilen Release steckt; danach neue Plugin-Version mit höherer iris_min_version.
  6. PLUGIN-REGISTRY-REPO.md und README Kapitel 19/20 nachziehen.

Nicht Teil

Die Umsetzung in der App und im Linux-Server (eigene Issues, siehe #149).

Abnahme

pruefen erkennt fehlerhafte Aktionen und ungepinnte Abhängigkeiten; der Memory-Editor läuft nach der Migration ohne Wächter, Speichern/Exportieren/Abbrechen ohne Modell-Lauf; Tests grün.

## Worum es geht Teil des Features **Autonome Web-Blöcke** (Spezifikation und alle Entscheidungen: **iris/Iris#149**). Auf Plugin-Seite: Werkzeuge und Prüfungen für das neue Manifest, dann die Migration der Plugins, die heute einen Wächter als Umweg brauchen. Auslöser war der Praxistest von **iris-plugins#203** (Memory-Editor, Wächter, Lessons Learned im PLAN.md von `iris-claude-sessions`). ## Zu tun 1. **Manifest-Prüfung** (`iris-plugin-dev`, `registry-tools`): neue Felder `actions_api`, `autonomous_block_types`, `actions`, `launchers`, `runtime` auf Vollständigkeit prüfen (Skript vorhanden, Name deklariert, Zeitlimit, `beschreibung` nicht leer, Platzhalter-Texte). 2. **Lock-Werkzeug:** Befehl in `plugin_dev.py`, der aus den Abhängigkeiten eines Plugins die hash-gepinnte Lock-Datei erzeugt (Format nach Entscheidung in #149) und prüft, dass nichts ungepinnt ist. 3. **Datenschutz-Scan** (`registry-tools/privacy_scan.py`) auch über `beschreibung` der Aktionen und über die Lock-Datei. 4. **Installationsdialog/Store-Seite:** Aktionen mit `beschreibung` erscheinen im Klartext (Gegenstück in der App: iris/Iris#149). 5. **Migration `iris-claude-sessions`:** Aktionen statt Wächter für Sessions-Canvas und Memory-Editor (`speichern`, `exportieren`, `importieren`, `rename`, `trash`, `restore`, `open`, …); Zustand über `irisSaveState`; `launchers` für „Claude-Code-Sessions“; Titel von Iris-gestarteten Sessions (aus der ersten echten Nachricht). Der Wächter bleibt, bis das Feature in einem stabilen Release steckt; danach neue Plugin-Version mit höherer `iris_min_version`. 6. `PLUGIN-REGISTRY-REPO.md` und README Kapitel 19/20 nachziehen. ## Nicht Teil Die Umsetzung in der App und im Linux-Server (eigene Issues, siehe #149). ## Abnahme `pruefen` erkennt fehlerhafte Aktionen und ungepinnte Abhängigkeiten; der Memory-Editor läuft nach der Migration ohne Wächter, Speichern/Exportieren/Abbrechen ohne Modell-Lauf; Tests grün.
Author
Owner

Stand iris/Iris#149: Schritte 1–4 sind gemergt, die Plugin-Seite ist damit nutzbar: Manifest (actions, autonomous_block_types, runtime), irisCall, irisSaveState, irisFinish, irisPluginInit(block, readOnly, state); Beschreibung in docs/plugin-development/06-plugin-actions.md. Offen für dieses Issue: Manifest-Prüfung im Veröffentlichungsskript, Lock-Werkzeug in iris-plugin-dev, Migration von Memory-Editor und Sessions-Canvas (das wäre der erste echte Test der Aktionen). Der Wächter in iris-claude-sessions bleibt bis dahin.

Stand iris/Iris#149: Schritte 1–4 sind gemergt, die Plugin-Seite ist damit nutzbar: Manifest (`actions`, `autonomous_block_types`, `runtime`), `irisCall`, `irisSaveState`, `irisFinish`, `irisPluginInit(block, readOnly, state)`; Beschreibung in `docs/plugin-development/06-plugin-actions.md`. Offen für dieses Issue: Manifest-Prüfung im Veröffentlichungsskript, Lock-Werkzeug in `iris-plugin-dev`, Migration von Memory-Editor und Sessions-Canvas (das wäre der erste echte Test der Aktionen). Der Wächter in iris-claude-sessions bleibt bis dahin.
Author
Owner

PR #230 gemergt: feat(plugins): Action-Contract tooling — Manifest-Prüfung, Lock-Werkzeug, Privacy-Scan, Store-Seite (iris-plugins#225)
#230

Commits:

  • feat(plugins): Action-Contract tooling — Manifest-Prüfung, Lock-Werkzeug, Privacy-Scan, Store-Seite (iris-plugins#225)

Stand — iris-plugins#225, Plugin-Seite of the Action-Contract

Befund

The plugin-side tooling for the new Manifest fields (iris/Iris#149) is built:

  • registry-tools/plugin_actions.py (new): single source of truth for the Action-Contract — validate_manifest mirrors PluginActionsCore.swift declaration(fromManifest:) (names, script paths, args, timeout/max_bytes bounds, mandatory beschreibung, autonomous_block_types ⊆ provided_block_types, launchers naming a declared action, runtime.python/runtime.lock, platforms); lock_pruefen checks that every package line of a Lock-File carries --hash=sha256:.
  • Manifest-Prüfung: pruefen (pd_pruefen) checks the new fields, that every action script exists, and that runtime.lock lies present and fully pinned. registry_index.add refuses a defective declaration before anything is written, and refuses a missing/unpinned Lock-File in the package.
  • Lock-Werkzeug: plugin_dev.py lock erzeugen resolves the requirements with uv (uv lock + uv export --frozen) and writes the pinned file to the path of runtime.lock; lock pruefen reports unpinned lines. Marker- and option-lines are refused (they cannot be pinned).
  • Datenschutz-Scan: privacy_scan.py now scans the beschreibung of every action (they stand in the consent and install dialog) and the Lock-File (.lock added to the package scan).
  • Store-Seite: store_page.py renders the Action-Beschreibungen from the Manifest in Klartext (section „Aktionen“, new CSS in the template) — the counterpart of the Installationsdialog in the App.
  • Docs: README chapter 19 (Datenschutz-Scan, Plugin-Aktionen rule), chapter 20 (Store-Seite section), PLUGIN-REGISTRY-REPO.md decision 13, iris-plugin-dev SKILL.md (lock commands, pruefen checks).

Geprüft

  • pruefen recognizes defective actions and unpinned dependencies: 8 new tests in test_pruefen.py (valid declaration passes; missing description/script, autonomous type outside provided, launcher naming an undeclared action, unpinned/missing lock block).
  • registry_index.add refuses defective declarations and unpinned/missing Lock-Files in the package: 4 new tests; privacy scan covers action beschreibungen and the Lock-File: 2 new tests.
  • Lock-Werkzeug: 11 new tests in test_lock.py (pinned/unpinned, missing file, marker lines, validate_manifest cases).
  • Store-Seite: actions section rendered, left out without actions: 2 new tests.
  • Full suites green: iris-plugin-dev 228 tests, registry-tools 89 tests.

Nicht geprüft

  • No real uv run against PyPI in the tests (the erzeugen tests stop before the network; the uv invocation itself is exercised only by the marker-line refusal). A real lock erzeugen on the dev machine with a plugin that has dependencies is not yet run.
  • The app side (iris/Iris#149) and the Linux-Server (iris-linux-server#91) are not part of this repo; the rules here mirror the Swift as of today — if the Swift changes, this module must change with it.
  • The migration of iris-claude-sessions (Actions instead of Wächter) follows in a later commit.

Grenzen / offen

  • plugin_actions.py lives in registry-tools/ (the test clones copy that directory); the skill modules import it with a fallback path, and build-irisplugin.sh copies it into the bundle so the installed plugin stays self-contained.
  • No new plugin version published; nothing in the Registry changed.
PR #230 gemergt: feat(plugins): Action-Contract tooling — Manifest-Prüfung, Lock-Werkzeug, Privacy-Scan, Store-Seite (iris-plugins#225) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/230 Commits: - feat(plugins): Action-Contract tooling — Manifest-Prüfung, Lock-Werkzeug, Privacy-Scan, Store-Seite (iris-plugins#225) --- # Stand — iris-plugins#225, Plugin-Seite of the Action-Contract ## Befund The plugin-side tooling for the new Manifest fields (iris/Iris#149) is built: - **`registry-tools/plugin_actions.py`** (new): single source of truth for the Action-Contract — `validate_manifest` mirrors `PluginActionsCore.swift` `declaration(fromManifest:)` (names, script paths, args, timeout/max_bytes bounds, mandatory `beschreibung`, `autonomous_block_types` ⊆ `provided_block_types`, launchers naming a declared action, `runtime.python`/`runtime.lock`, `platforms`); `lock_pruefen` checks that every package line of a Lock-File carries `--hash=sha256:`. - **Manifest-Prüfung:** `pruefen` (pd_pruefen) checks the new fields, that every action script exists, and that `runtime.lock` lies present and fully pinned. `registry_index.add` refuses a defective declaration before anything is written, and refuses a missing/unpinned Lock-File in the package. - **Lock-Werkzeug:** `plugin_dev.py lock erzeugen` resolves the requirements with `uv` (`uv lock` + `uv export --frozen`) and writes the pinned file to the path of `runtime.lock`; `lock pruefen` reports unpinned lines. Marker- and option-lines are refused (they cannot be pinned). - **Datenschutz-Scan:** `privacy_scan.py` now scans the `beschreibung` of every action (they stand in the consent and install dialog) and the Lock-File (`.lock` added to the package scan). - **Store-Seite:** `store_page.py` renders the Action-Beschreibungen from the Manifest in Klartext (section „Aktionen“, new CSS in the template) — the counterpart of the Installationsdialog in the App. - Docs: README chapter 19 (Datenschutz-Scan, Plugin-Aktionen rule), chapter 20 (Store-Seite section), `PLUGIN-REGISTRY-REPO.md` decision 13, iris-plugin-dev SKILL.md (`lock` commands, pruefen checks). ## Geprüft - `pruefen` recognizes defective actions and unpinned dependencies: 8 new tests in `test_pruefen.py` (valid declaration passes; missing description/script, autonomous type outside provided, launcher naming an undeclared action, unpinned/missing lock block). - `registry_index.add` refuses defective declarations and unpinned/missing Lock-Files in the package: 4 new tests; privacy scan covers action beschreibungen and the Lock-File: 2 new tests. - Lock-Werkzeug: 11 new tests in `test_lock.py` (pinned/unpinned, missing file, marker lines, validate_manifest cases). - Store-Seite: actions section rendered, left out without actions: 2 new tests. - Full suites green: iris-plugin-dev 228 tests, registry-tools 89 tests. ## Nicht geprüft - No real `uv` run against PyPI in the tests (the `erzeugen` tests stop before the network; the uv invocation itself is exercised only by the marker-line refusal). A real `lock erzeugen` on the dev machine with a plugin that has dependencies is not yet run. - The app side (iris/Iris#149) and the Linux-Server (iris-linux-server#91) are not part of this repo; the rules here mirror the Swift as of today — if the Swift changes, this module must change with it. - The migration of `iris-claude-sessions` (Actions instead of Wächter) follows in a later commit. ## Grenzen / offen - `plugin_actions.py` lives in `registry-tools/` (the test clones copy that directory); the skill modules import it with a fallback path, and `build-irisplugin.sh` copies it into the bundle so the installed plugin stays self-contained. - No new plugin version published; nothing in the Registry changed.
alf closed this issue 2026-10-22 22:12:00 +00:00
Author
Owner

PR #231 gemergt: chore(repo): stand-Datei of #225 was committed by -a — remove it (#225)
#231

Commits:

  • chore(repo): stand-Datei of #225 was committed by -a — remove it (it belongs to the PR comment only)
PR #231 gemergt: chore(repo): stand-Datei of #225 was committed by -a — remove it (#225) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/231 Commits: - chore(repo): stand-Datei of #225 was committed by -a — remove it (it belongs to the PR comment only)
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#225
No description provided.