iris-solidcraft: SolidCraft (Rust-CAD) für Iris — Mac nativ + Linux-Container #165

Closed
opened 2026-10-21 09:59:04 +00:00 by alf · 8 comments
Owner

Neues Plugin iris-solidcraft: bindet SolidCraft (tangency-labs, rein-Rust-
Parametrik-CAD) als MCP-Server an Hermes an.

Architekturentscheidung (Alf): Mac = natives App-Bundle, Pfad per Picker;
Linux-Server = Container aus der eigenen Forgejo-Registry (gebaut auf
iris-server). Darstellung nativ über die SolidCraft-Web-App (wasm) statt
noVNC — so funktioniert die Ansicht auch auf iOS-Geräten.

Mac (nativ — alles im Plugin-Paket, kein macos-iris-Code nötig)

  • Settings-Panel (web + panel_api.py, filmcraft-Muster): App-Pfad per Picker
    (Default ~/Desktop/SolidCraft.app aus pull-3rd-party), Start/Stop mit
    Control-Port, Statusanzeige
  • MCP-Registrierung: stdio solidcraft-cli mcp --connect 127.0.0.1:PORT aus
    dem gewählten Bundle → hermes config.yaml + Gateway-Neustart (launchctl)
  • Ansicht: das App-Fenster selbst

Linux-Server (Container)

  • Settings-Panel: Install/Status des Containers
    forgejo.lewerken.duckdns.org/iris/solidcraft (Route im iris-linux-server-Repo)
  • MCP-Registrierung: http http://<container>:3000/mcp + Bearer
    (Muster: freecad-bridge, toolcall_proxy_config_writer)
  • Ansicht: Web-App aus dem Container, proxied unter /plugins/iris-solidcraft/web/
    → Webview auf allen Clients inkl. iOS; öffnet ?file=/workspace/<letzte Datei>
  • Workspace-Volume: Dateien als gemeinsame Quelle der Wahrheit
    (Agent arbeitet via open/save, Web-App lädt dieselben Dateien)

Skill iris-solidcraft

Aus den 4 Upstream-Skills (modeling/editing/checking/mechanisms) adaptiert:
mcp__solidcraft__*-Toolnamen, Workspace-Konventionen, MEDIA:-Konvention
(Screenshot/Export als Chat-Output), Ziel-agnostisch (Mac | Linux).
Skill-Name bewusst mit iris--Präfix (kein Kollisionsname mit Upstream/Hermes).

Repos im selben Zug

  • iris-plugins: Plugin (manifest, panel_api, web, skill, tests, store-Seite)
  • iris/iris-linux-server: solidcraft_plugin_routes.py + Tests (Issue dort)
  • iris/solidcraft: Dockerfile + MCP-HTTP-Shim + ?file= (Issue dort)

Abnahme

  1. Mac: Panel → Picker → App startet → Hermes hat mcp__solidcraft__*-Tools
    → Chat-Auftrag „Baue einen Klemmblock" → Agent modelliert, Screenshot zurück
  2. Linux: Panel → Install → Container läuft → MCP registriert → gleicher Auftrag
  3. iOS: Webview zeigt die zuletzt gespeicherte Workspace-Datei
Neues Plugin `iris-solidcraft`: bindet SolidCraft (tangency-labs, rein-Rust- Parametrik-CAD) als MCP-Server an Hermes an. Architekturentscheidung (Alf): **Mac** = natives App-Bundle, Pfad per Picker; **Linux-Server** = Container aus der eigenen Forgejo-Registry (gebaut auf iris-server). Darstellung nativ über die SolidCraft-Web-App (wasm) statt noVNC — so funktioniert die Ansicht auch auf iOS-Geräten. ## Mac (nativ — alles im Plugin-Paket, kein macos-iris-Code nötig) - Settings-Panel (web + `panel_api.py`, filmcraft-Muster): App-Pfad per Picker (Default `~/Desktop/SolidCraft.app` aus `pull-3rd-party`), Start/Stop mit Control-Port, Statusanzeige - MCP-Registrierung: stdio `solidcraft-cli mcp --connect 127.0.0.1:PORT` aus dem gewählten Bundle → hermes `config.yaml` + Gateway-Neustart (launchctl) - Ansicht: das App-Fenster selbst ## Linux-Server (Container) - Settings-Panel: Install/Status des Containers `forgejo.lewerken.duckdns.org/iris/solidcraft` (Route im iris-linux-server-Repo) - MCP-Registrierung: http `http://<container>:3000/mcp` + Bearer (Muster: freecad-bridge, `toolcall_proxy_config_writer`) - Ansicht: Web-App aus dem Container, proxied unter `/plugins/iris-solidcraft/web/` → Webview auf allen Clients inkl. iOS; öffnet `?file=/workspace/<letzte Datei>` - Workspace-Volume: Dateien als gemeinsame Quelle der Wahrheit (Agent arbeitet via `open`/`save`, Web-App lädt dieselben Dateien) ## Skill `iris-solidcraft` Aus den 4 Upstream-Skills (modeling/editing/checking/mechanisms) adaptiert: `mcp__solidcraft__*`-Toolnamen, Workspace-Konventionen, MEDIA:-Konvention (Screenshot/Export als Chat-Output), Ziel-agnostisch (Mac | Linux). Skill-Name bewusst mit `iris-`-Präfix (kein Kollisionsname mit Upstream/Hermes). ## Repos im selben Zug - **iris-plugins**: Plugin (manifest, panel_api, web, skill, tests, store-Seite) - **iris/iris-linux-server**: `solidcraft_plugin_routes.py` + Tests (Issue dort) - **iris/solidcraft**: Dockerfile + MCP-HTTP-Shim + `?file=` (Issue dort) ## Abnahme 1. Mac: Panel → Picker → App startet → Hermes hat `mcp__solidcraft__*`-Tools → Chat-Auftrag „Baue einen Klemmblock" → Agent modelliert, Screenshot zurück 2. Linux: Panel → Install → Container läuft → MCP registriert → gleicher Auftrag 3. iOS: Webview zeigt die zuletzt gespeicherte Workspace-Datei
Author
Owner

PR #169 gemergt: feat(iris-solidcraft): Plugin-Paket: Settings-Panel, Viewer, Skill mit Upstream-Adaptionen (iris/iris-plugins#165)
#169

Commits:

  • feat(iris-solidcraft): Plugin-Paket: Settings-Panel, Viewer, Skill mit Upstream-Adaptionen (iris/iris-plugins#165)
PR #169 gemergt: feat(iris-solidcraft): Plugin-Paket: Settings-Panel, Viewer, Skill mit Upstream-Adaptionen (iris/iris-plugins#165) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/169 Commits: - feat(iris-solidcraft): Plugin-Paket: Settings-Panel, Viewer, Skill mit Upstream-Adaptionen (iris/iris-plugins#165)
Author
Owner

Plugin-Paket iris-solidcraft ist im Repo (PR #169, main fa4e0cd, 17 Dateien).

Was das Paket enthält:

  • plugin.json: media, Settings-Panel + Usage-View (Quick-Access „SolidCraft Oberfläche"), panel_api mit 10 Befehlen, 1 Skill, post_install-Hook
  • web/settings.html: zweigt über config-status.platform — Mac = App-Picker + App-Start + MCP-Registrierung + Gateway-Kickstart; Linux = Install (Image-Tag) / Start / Stop / Deinstallieren gegen die linux-server-Routen
  • web/viewer.html: Mac = App-Status/-Start (Oberfläche ist das App-Fenster); Linux = Workspace-Dateiliste → Web-App im WebView (?file=workspace/<name> über den Server-Proxy, funktioniert auf iOS)
  • skills/iris-solidcraft/: SKILL.md (Iris-Kontext: Dateien als Quelle der Wahrheit, MEDIA:-Zeile, Messdisziplin, Verbote) + Upstream-Guides modeling/editing/mechanisms (+Referenz-Dateien) 1:1 adaptiert, checking auf die MCP-Praxis gekürzt
  • panel_api.py (reine Stdlib): Picker, validate_app (Bundle + --version), App-Start --control 9467, hermes mcp add (interaktiv → Y\n + „Saved"-Check), Gateway-Kickstart per launchctl, Status
  • hooks/post_install.sh: wählt ~/Desktop/SolidCraft.app vor, falls dort eine liegt

Geprüft:

  • 18 Unit-Tests grün (Temp-HOME/IRIS_DATA_DIR, Fake-App-Bundle, gepatchtes _mcp_registered — nie echte User-Dateien)
  • bash build-irisplugin.sh → ~/Desktop/iris-solidcraft-0.1.0.irisplugin (12 Dateien, 48 KB)
  • linux-server-Teil bereits live: PR iris/iris-linux-server#75 gemergt und auf alf@iris-server deployet (Routen + Web-Proxy, Tests gegen die Instanz grün)

Grenzen / offen:

  • E2E Mac (Picker → App-Start → MCP-Registrierung → Chat baut Teil, Screenshot als Beleg): offen
  • E2E Linux: blockiert auf das Image iris/solidcraft (iris/solidcraft#1 — der Build-Fix ist gepusht, Rebuild läuft auf iris-server)
  • Marktplatz-Veröffentlichung: erst nach explizitem Okay (.include, Version, store/)
Plugin-Paket `iris-solidcraft` ist im Repo (PR #169, main `fa4e0cd`, 17 Dateien). **Was das Paket enthält:** - `plugin.json`: media, Settings-Panel + Usage-View (Quick-Access „SolidCraft Oberfläche"), panel_api mit 10 Befehlen, 1 Skill, post_install-Hook - `web/settings.html`: zweigt über `config-status.platform` — Mac = App-Picker + App-Start + MCP-Registrierung + Gateway-Kickstart; Linux = Install (Image-Tag) / Start / Stop / Deinstallieren gegen die linux-server-Routen - `web/viewer.html`: Mac = App-Status/-Start (Oberfläche ist das App-Fenster); Linux = Workspace-Dateiliste → Web-App im WebView (`?file=workspace/<name>` über den Server-Proxy, funktioniert auf iOS) - `skills/iris-solidcraft/`: SKILL.md (Iris-Kontext: Dateien als Quelle der Wahrheit, `MEDIA:`-Zeile, Messdisziplin, Verbote) + Upstream-Guides `modeling`/`editing`/`mechanisms` (+Referenz-Dateien) 1:1 adaptiert, `checking` auf die MCP-Praxis gekürzt - `panel_api.py` (reine Stdlib): Picker, `validate_app` (Bundle + `--version`), App-Start `--control 9467`, `hermes mcp add` (interaktiv → `Y\n` + „Saved"-Check), Gateway-Kickstart per launchctl, Status - `hooks/post_install.sh`: wählt `~/Desktop/SolidCraft.app` vor, falls dort eine liegt **Geprüft:** - 18 Unit-Tests grün (Temp-`HOME`/`IRIS_DATA_DIR`, Fake-App-Bundle, gepatchtes `_mcp_registered` — nie echte User-Dateien) - `bash build-irisplugin.sh` → `~/Desktop/iris-solidcraft-0.1.0.irisplugin` (12 Dateien, 48 KB) - linux-server-Teil bereits live: PR iris/iris-linux-server#75 gemergt und auf `alf@iris-server` deployet (Routen + Web-Proxy, Tests gegen die Instanz grün) **Grenzen / offen:** - E2E Mac (Picker → App-Start → MCP-Registrierung → Chat baut Teil, Screenshot als Beleg): offen - E2E Linux: blockiert auf das Image `iris/solidcraft` (`iris/solidcraft#1` — der Build-Fix ist gepusht, Rebuild läuft auf iris-server) - Marktplatz-Veröffentlichung: erst nach explizitem Okay (`.include`, Version, `store/`)
Author
Owner

PR #170 gemergt: docs(iris-solidcraft): PLAN.md nachziehen — Token-Auth/Build-Fix erledigt, E2E-Status (#165)
#170

Commits:

  • docs(iris-solidcraft): PLAN.md nachziehen — Token-Auth/Build-Fix erledigt, E2E-Status (#165)
PR #170 gemergt: docs(iris-solidcraft): PLAN.md nachziehen — Token-Auth/Build-Fix erledigt, E2E-Status (#165) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/170 Commits: - docs(iris-solidcraft): PLAN.md nachziehen — Token-Auth/Build-Fix erledigt, E2E-Status (#165)
Author
Owner

PR #173 gemergt: docs(iris-solidcraft): PLAN.md — E2E-Linux serverseitig grün, Probe-Bug nachgezogen (#165)
#173

Commits:

  • docs(iris-solidcraft): PLAN.md — E2E-Linux serverseitig grün, Probe-Bug nachgezogen (#165)
PR #173 gemergt: docs(iris-solidcraft): PLAN.md — E2E-Linux serverseitig grün, Probe-Bug nachgezogen (#165) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/173 Commits: - docs(iris-solidcraft): PLAN.md — E2E-Linux serverseitig grün, Probe-Bug nachgezogen (#165)
Author
Owner

PR #175 gemergt: docs(iris-solidcraft): E2E-Chat-Test Linux als bestanden dokumentiert (iris/iris-plugins#165)
#175

Commits:

PR #175 gemergt: docs(iris-solidcraft): E2E-Chat-Test Linux als bestanden dokumentiert (iris/iris-plugins#165) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/175 Commits: - docs(iris-solidcraft): E2E-Chat-Test Linux als bestanden dokumentiert (iris/iris-plugins#165)
Author
Owner

E2E-Chat-Test Linux abgeschlossen (Job 47149ccf-5565-4afd-94aa-4927178abe0f, ~110 s, Prompt: „Erstelle in SolidCraft einen Würfel mit 20 mm Kantenlänge, speichere als /workspaces/solidcraft/wuerfel.solidcraft, Screenshot als MEDIA-Datei“).

Befund / Belege (alles unabhängig von der Agent-Antwort geprüft):

  • Agent-Antwort: parametrisches Design (User-Parameter kante), Messwerte 8000 mm³ / 2400 mm² / BBox ±10 mm / 6 Flächen / 12 Kanten / 8 Ecken — exakt für 20 mm; MEDIA:-Zeile; media_references im Job-Record enthalten beide Dateien.
  • Echte Tool-Aufrufe (Hermes-state.db, Session 47149ccf…): 10 Tool-Calls / 22 Nachrichten — mcp__solidcraft__batch, inspect_design, measure, save, screenshot, dazu vision_analyze (visuelle Screenshot-Prüfung) und 3× skill_view (der iris-solidcraft-Skill wurde geladen). Tool-Ergebnisse als <untrusted_tool_result> gewrappt.
  • Host-Dateisystem (/home/alf/docker/iris-server/data/workspaces/solidcraft/): wuerfel.solidcraft exakt 2937 B — identisch mit dem von der Antwort behaupteten Wert; Inhalt = ZIP-Container solidcraft-container/1 (document.json, container.json, cache/model.json, cache/bodies.bin). wuerfel.png 259954 B, gültige PNG-Magic, Bild zeigt den gerenderten Würfel im Viewport.
  • Client-Pfad: Web-App, ?file=workspace/wuerfel.solidcraft, Design- und Screenshot-Datei via Server-Proxy GET /plugins/iris-solidcraft/web/… — alles 200 (mit Bearer), ohne Token 401.

Grenzen / offen: Der iOS-Client-Check (Web-App im Iris-WebView) bleibt ein Nutzer-Test; Mac-E2E (Picker → App → mcp-register) ebenfalls. Die Job-Sandbox blieb bewusst leer — der Agent arbeitet im geteilten workspaces/solidcraft-Volume, wie designed.

Was sich geändert hat: nur iris-solidcraft/PLAN.md (E2E-Linux-Bullet auf den verifizierten Stand), PR #175. Code ungesetzt.

**E2E-Chat-Test Linux abgeschlossen** (Job `47149ccf-5565-4afd-94aa-4927178abe0f`, ~110 s, Prompt: „Erstelle in SolidCraft einen Würfel mit 20 mm Kantenlänge, speichere als /workspaces/solidcraft/wuerfel.solidcraft, Screenshot als MEDIA-Datei“). **Befund / Belege** (alles unabhängig von der Agent-Antwort geprüft): - Agent-Antwort: parametrisches Design (User-Parameter `kante`), Messwerte 8000 mm³ / 2400 mm² / BBox ±10 mm / 6 Flächen / 12 Kanten / 8 Ecken — exakt für 20 mm; `MEDIA:`-Zeile; `media_references` im Job-Record enthalten beide Dateien. - Echte Tool-Aufrufe (Hermes-`state.db`, Session `47149ccf…`): 10 Tool-Calls / 22 Nachrichten — `mcp__solidcraft__batch`, `inspect_design`, `measure`, `save`, `screenshot`, dazu `vision_analyze` (visuelle Screenshot-Prüfung) und 3× `skill_view` (der `iris-solidcraft`-Skill wurde geladen). Tool-Ergebnisse als `<untrusted_tool_result>` gewrappt. - Host-Dateisystem (`/home/alf/docker/iris-server/data/workspaces/solidcraft/`): `wuerfel.solidcraft` **exakt 2937 B** — identisch mit dem von der Antwort behaupteten Wert; Inhalt = ZIP-Container `solidcraft-container/1` (document.json, container.json, cache/model.json, cache/bodies.bin). `wuerfel.png` 259954 B, gültige PNG-Magic, Bild zeigt den gerenderten Würfel im Viewport. - Client-Pfad: Web-App, `?file=workspace/wuerfel.solidcraft`, Design- und Screenshot-Datei via Server-Proxy `GET /plugins/iris-solidcraft/web/…` — alles 200 (mit Bearer), ohne Token 401. **Grenzen / offen:** Der iOS-Client-Check (Web-App im Iris-WebView) bleibt ein Nutzer-Test; Mac-E2E (Picker → App → `mcp-register`) ebenfalls. Die Job-Sandbox blieb bewusst leer — der Agent arbeitet im geteilten `workspaces/solidcraft`-Volume, wie designed. Was sich geändert hat: nur `iris-solidcraft/PLAN.md` (E2E-Linux-Bullet auf den verifizierten Stand), PR #175. Code ungesetzt.
Author
Owner

PR #234 gemergt: feat(iris-solidcraft): Systemprompt, Anleitung, Store-Material und Veröffentlichung (#165)
#234

Commits:

  • feat(iris-solidcraft): Systemprompt, Anleitung, Store-Material und Veröffentlichung (#165)

Stand: Marktplatz-Fertigstellung (0.1.1)

Befund: Das Plugin war funktional fertig (Settings-Panel, Viewer, Skill, Container-Routen, E2E Linux bestanden),
hatte aber keinen Systemprompt — in der LLM-Klassifikation vor jedem Job trat es gar nicht an, 3D/CAD-Anfragen
wurden improvisiert. Keine Store-Daten, keine Freigabe, nie veröffentlicht.

Geändert:

  • system_prompt.md neu, Manifest system_prompt: true + system_prompt_usage für die Klassifikation:
    Skill per skill_view laden, mcp__solidcraft__*-Tools als einziger Weg, kein execute_code/Blender/FreeCAD.
  • store/ neu: store-page.json → hero.html + icon.svg (dazu neues cube-Glyph in registry-tools/store_glyphs.py),
    description.md, changelog.md; .include als Freigabe.
  • Anleitung: docs/erste-schritte.md + docs/einrichtung.md (user_docs), Build-Skript kopiert sie ins Paket
    (15 Dateien, dynamisch gezählt).
  • plugin.json: Version 0.1.1, changelog-Feld, user_docs.

Geprüft: 18 Unit-Tests grün; Build OK (52 KB, 15 Dateien); store_page.py --check grün;
registry-tools-Tests (89) grün; publish-plugins.sh --dry-run grün (Privacy-Scan ohne Fund).

Nicht geprüft: E2E Mac (Picker-Flow mit dem neuen Prompt im echten Chat), iOS-Client-Check,
Store-Seite im echten Marktplatz-UI (nur generiert, Dry-Run und Test-Registry).

Offen: E2E Mac, iOS-Client-Check (Issue oben); Screenshots für store/ (können ohne neue Version
als „nur store/ aktualisiert“ nachgereicht werden).

PR #234 gemergt: feat(iris-solidcraft): Systemprompt, Anleitung, Store-Material und Veröffentlichung (#165) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/234 Commits: - feat(iris-solidcraft): Systemprompt, Anleitung, Store-Material und Veröffentlichung (#165) --- ## Stand: Marktplatz-Fertigstellung (0.1.1) **Befund:** Das Plugin war funktional fertig (Settings-Panel, Viewer, Skill, Container-Routen, E2E Linux bestanden), hatte aber keinen Systemprompt — in der LLM-Klassifikation vor jedem Job trat es gar nicht an, 3D/CAD-Anfragen wurden improvisiert. Keine Store-Daten, keine Freigabe, nie veröffentlicht. **Geändert:** - `system_prompt.md` neu, Manifest `system_prompt: true` + `system_prompt_usage` für die Klassifikation: Skill per `skill_view` laden, `mcp__solidcraft__*`-Tools als einziger Weg, kein `execute_code`/Blender/FreeCAD. - `store/` neu: `store-page.json` → `hero.html` + `icon.svg` (dazu neues `cube`-Glyph in `registry-tools/store_glyphs.py`), `description.md`, `changelog.md`; `.include` als Freigabe. - Anleitung: `docs/erste-schritte.md` + `docs/einrichtung.md` (`user_docs`), Build-Skript kopiert sie ins Paket (15 Dateien, dynamisch gezählt). - `plugin.json`: Version 0.1.1, `changelog`-Feld, `user_docs`. **Geprüft:** 18 Unit-Tests grün; Build OK (52 KB, 15 Dateien); `store_page.py --check` grün; registry-tools-Tests (89) grün; `publish-plugins.sh --dry-run` grün (Privacy-Scan ohne Fund). **Nicht geprüft:** E2E Mac (Picker-Flow mit dem neuen Prompt im echten Chat), iOS-Client-Check, Store-Seite im echten Marktplatz-UI (nur generiert, Dry-Run und Test-Registry). **Offen:** E2E Mac, iOS-Client-Check (Issue oben); Screenshots für `store/` (können ohne neue Version als „nur store/ aktualisiert“ nachgereicht werden).
Author
Owner

PR #256 gemergt: feat(iris-solidcraft): 0.2.0 — erster echter Fall des Plugin-Reiters, status mit chat_id/summary/detail (#165)
#256

Commits:

  • feat(iris-solidcraft): 0.2.0 — erster echter Fall des Plugin-Reiters, status mit chat_id/summary/detail (#165)

Befund: Der Plugin-Reiter (iris/Iris#169) war in allen vier Beteiligten gemergt, aber kein Plugin hatte ihn angemeldet — in der App war nichts zu sehen. iris-solidcraft ist der erste echte Fall, den der Plan vorgesehen hatte.

Geändert (iris-solidcraft 0.1.1 → 0.2.0):

  • plugin.json: side_panel: "web/viewer.html" (vierter Web-View-Schlüssel; dieselbe Seite wie der Direktzugriff, kein zweiter Stand), changelog, Version 0.2.0.
  • panel_api.py: status mit dem Reiter-Vertrag — kommt chat_id im Body, antwortet es mit demselben chat_id plus ok, summary (eine Zeile, unter 240) und detail (Stand + designs). Die flachen Felder bleiben, sonst wären viewer.html im Direktzugriff und settings.html kaputt. Neu chat_designs(): Mac = Workspace des Chats, Linux = geteiltes /workspaces/solidcraft. chat_id wird vor jeder Pfadverwendung gegen ein Muster geprüft. _mcp_registered() cacht 60 s (der Reiter fragt alle 5 s, hermes mcp list kostet 1,5 s).
  • web/viewer.html: max-width raus (Reiter ist 320–900 pt), chat_id aus der URL in jeden status-Aufruf, Designs-Liste + „Aktualisieren" im Mac-Zweig.
  • SKILL.md: Abschnitt „Plugin-Reiter im Seitenpanel" — Stand über panel_api, Bauen/Ändern/Messen nur über MCP; Design öffnen kann nur open {path} in der Sitzung.
  • docs/erste-schritte.md und store/changelog.md: Abschnitt für 0.2.0.

Geprüft: 25 Unit-Tests grün (7 neue: ohne chat_id bleibt die Antwort flach; Kennung kommt zurück; summary nennt Zustand und Designs; eine Zeile und unter dem Weich-Limit; fehlender Chat-Ordner kein Fehler; Pfad-Kennung abgelehnt; Linux listet den geteilten Workspace). Probe gegen die echte Konfiguration dieses Macs: summary = „SolidCraft 0.18.2 — App läuft nicht · MCP nicht angemeldet · 0 Designs in diesem Chat", detail vollständig. Build OK (15 Dateien, 52 KB). Gegenstelle iris/Iris#172 (Seitenpanel-Registry auch beim App-Start).

Nicht geprüft: kein Klicktest in Iris — installiert ist noch 0.1.1, das neue Paket muss importiert werden; Reiter gegen den Linux-Server nicht gesehen; iOS nicht geprüft. Nicht veröffentlicht (kein publish-plugins.sh-Lauf): Veröffentlichen braucht dein Wort.

PR #256 gemergt: feat(iris-solidcraft): 0.2.0 — erster echter Fall des Plugin-Reiters, status mit chat_id/summary/detail (#165) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/256 Commits: - feat(iris-solidcraft): 0.2.0 — erster echter Fall des Plugin-Reiters, status mit chat_id/summary/detail (#165) --- **Befund:** Der Plugin-Reiter (iris/Iris#169) war in allen vier Beteiligten gemergt, aber kein Plugin hatte ihn angemeldet — in der App war nichts zu sehen. iris-solidcraft ist der erste echte Fall, den der Plan vorgesehen hatte. **Geändert (iris-solidcraft 0.1.1 → 0.2.0):** - `plugin.json`: `side_panel: "web/viewer.html"` (vierter Web-View-Schlüssel; dieselbe Seite wie der Direktzugriff, kein zweiter Stand), `changelog`, Version 0.2.0. - `panel_api.py`: `status` mit dem Reiter-Vertrag — kommt `chat_id` im Body, antwortet es mit demselben `chat_id` plus `ok`, `summary` (eine Zeile, unter 240) und `detail` (Stand + `designs`). Die flachen Felder bleiben, sonst wären `viewer.html` im Direktzugriff und `settings.html` kaputt. Neu `chat_designs()`: Mac = Workspace des Chats, Linux = geteiltes `/workspaces/solidcraft`. `chat_id` wird vor jeder Pfadverwendung gegen ein Muster geprüft. `_mcp_registered()` cacht 60 s (der Reiter fragt alle 5 s, `hermes mcp list` kostet 1,5 s). - `web/viewer.html`: `max-width` raus (Reiter ist 320–900 pt), `chat_id` aus der URL in jeden `status`-Aufruf, Designs-Liste + „Aktualisieren" im Mac-Zweig. - `SKILL.md`: Abschnitt „Plugin-Reiter im Seitenpanel" — Stand über `panel_api`, Bauen/Ändern/Messen nur über MCP; Design öffnen kann nur `open {path}` in der Sitzung. - `docs/erste-schritte.md` und `store/changelog.md`: Abschnitt für 0.2.0. **Geprüft:** 25 Unit-Tests grün (7 neue: ohne `chat_id` bleibt die Antwort flach; Kennung kommt zurück; `summary` nennt Zustand und Designs; eine Zeile und unter dem Weich-Limit; fehlender Chat-Ordner kein Fehler; Pfad-Kennung abgelehnt; Linux listet den geteilten Workspace). Probe gegen die echte Konfiguration dieses Macs: `summary` = „SolidCraft 0.18.2 — App läuft nicht · MCP nicht angemeldet · 0 Designs in diesem Chat", `detail` vollständig. Build OK (15 Dateien, 52 KB). Gegenstelle iris/Iris#172 (Seitenpanel-Registry auch beim App-Start). **Nicht geprüft:** kein Klicktest in Iris — installiert ist noch 0.1.1, das neue Paket muss importiert werden; Reiter gegen den Linux-Server nicht gesehen; iOS nicht geprüft. Nicht veröffentlicht (kein `publish-plugins.sh`-Lauf): Veröffentlichen braucht dein Wort.
alf closed this issue 2026-10-27 10:40:14 +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#165
No description provided.