iris-solidcraft: SolidCraft (Rust-CAD) für Iris — Mac nativ + Linux-Container #165
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-plugins#165
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?
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)
panel_api.py, filmcraft-Muster): App-Pfad per Picker(Default
~/Desktop/SolidCraft.appauspull-3rd-party), Start/Stop mitControl-Port, Statusanzeige
solidcraft-cli mcp --connect 127.0.0.1:PORTausdem gewählten Bundle → hermes
config.yaml+ Gateway-Neustart (launchctl)Linux-Server (Container)
forgejo.lewerken.duckdns.org/iris/solidcraft(Route im iris-linux-server-Repo)http://<container>:3000/mcp+ Bearer(Muster: freecad-bridge,
toolcall_proxy_config_writer)/plugins/iris-solidcraft/web/→ Webview auf allen Clients inkl. iOS; öffnet
?file=/workspace/<letzte Datei>(Agent arbeitet via
open/save, Web-App lädt dieselben Dateien)Skill
iris-solidcraftAus 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
solidcraft_plugin_routes.py+ Tests (Issue dort)?file=(Issue dort)Abnahme
mcp__solidcraft__*-Tools→ Chat-Auftrag „Baue einen Klemmblock" → Agent modelliert, Screenshot zurück
PR #169 gemergt: feat(iris-solidcraft): Plugin-Paket: Settings-Panel, Viewer, Skill mit Upstream-Adaptionen (iris/iris-plugins#165)
#169
Commits:
Plugin-Paket
iris-solidcraftist im Repo (PR #169, mainfa4e0cd, 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-Hookweb/settings.html: zweigt überconfig-status.platform— Mac = App-Picker + App-Start + MCP-Registrierung + Gateway-Kickstart; Linux = Install (Image-Tag) / Start / Stop / Deinstallieren gegen die linux-server-Routenweb/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-Guidesmodeling/editing/mechanisms(+Referenz-Dateien) 1:1 adaptiert,checkingauf die MCP-Praxis gekürztpanel_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, Statushooks/post_install.sh: wählt~/Desktop/SolidCraft.appvor, falls dort eine liegtGeprüft:
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)alf@iris-serverdeployet (Routen + Web-Proxy, Tests gegen die Instanz grün)Grenzen / offen:
iris/solidcraft(iris/solidcraft#1— der Build-Fix ist gepusht, Rebuild läuft auf iris-server).include, Version,store/)PR #170 gemergt: docs(iris-solidcraft): PLAN.md nachziehen — Token-Auth/Build-Fix erledigt, E2E-Status (#165)
#170
Commits:
PR #173 gemergt: docs(iris-solidcraft): PLAN.md — E2E-Linux serverseitig grün, Probe-Bug nachgezogen (#165)
#173
Commits:
PR #175 gemergt: docs(iris-solidcraft): E2E-Chat-Test Linux als bestanden dokumentiert (iris/iris-plugins#165)
#175
Commits:
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):
kante), Messwerte 8000 mm³ / 2400 mm² / BBox ±10 mm / 6 Flächen / 12 Kanten / 8 Ecken — exakt für 20 mm;MEDIA:-Zeile;media_referencesim Job-Record enthalten beide Dateien.state.db, Session47149ccf…): 10 Tool-Calls / 22 Nachrichten —mcp__solidcraft__batch,inspect_design,measure,save,screenshot, dazuvision_analyze(visuelle Screenshot-Prüfung) und 3×skill_view(deriris-solidcraft-Skill wurde geladen). Tool-Ergebnisse als<untrusted_tool_result>gewrappt./home/alf/docker/iris-server/data/workspaces/solidcraft/):wuerfel.solidcraftexakt 2937 B — identisch mit dem von der Antwort behaupteten Wert; Inhalt = ZIP-Containersolidcraft-container/1(document.json, container.json, cache/model.json, cache/bodies.bin).wuerfel.png259954 B, gültige PNG-Magic, Bild zeigt den gerenderten Würfel im Viewport.?file=workspace/wuerfel.solidcraft, Design- und Screenshot-Datei via Server-ProxyGET /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 geteiltenworkspaces/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.PR #234 gemergt: feat(iris-solidcraft): Systemprompt, Anleitung, Store-Material und Veröffentlichung (#165)
#234
Commits:
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.mdneu, Manifestsystem_prompt: true+system_prompt_usagefür die Klassifikation:Skill per
skill_viewladen,mcp__solidcraft__*-Tools als einziger Weg, keinexecute_code/Blender/FreeCAD.store/neu:store-page.json→hero.html+icon.svg(dazu neuescube-Glyph inregistry-tools/store_glyphs.py),description.md,changelog.md;.includeals Freigabe.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 --checkgrün;registry-tools-Tests (89) grün;
publish-plugins.sh --dry-rungrü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 Versionals „nur store/ aktualisiert“ nachgereicht werden).
PR #256 gemergt: feat(iris-solidcraft): 0.2.0 — erster echter Fall des Plugin-Reiters, status mit chat_id/summary/detail (#165)
#256
Commits:
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:statusmit dem Reiter-Vertrag — kommtchat_idim Body, antwortet es mit demselbenchat_idplusok,summary(eine Zeile, unter 240) unddetail(Stand +designs). Die flachen Felder bleiben, sonst wärenviewer.htmlim Direktzugriff undsettings.htmlkaputt. Neuchat_designs(): Mac = Workspace des Chats, Linux = geteiltes/workspaces/solidcraft.chat_idwird vor jeder Pfadverwendung gegen ein Muster geprüft._mcp_registered()cacht 60 s (der Reiter fragt alle 5 s,hermes mcp listkostet 1,5 s).web/viewer.html:max-widthraus (Reiter ist 320–900 pt),chat_idaus der URL in jedenstatus-Aufruf, Designs-Liste + „Aktualisieren" im Mac-Zweig.SKILL.md: Abschnitt „Plugin-Reiter im Seitenpanel" — Stand überpanel_api, Bauen/Ändern/Messen nur über MCP; Design öffnen kann nuropen {path}in der Sitzung.docs/erste-schritte.mdundstore/changelog.md: Abschnitt für 0.2.0.Geprüft: 25 Unit-Tests grün (7 neue: ohne
chat_idbleibt die Antwort flach; Kennung kommt zurück;summarynennt 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",detailvollstä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.