Refaktorierung des Canvas-Plugins
Canvas wird wenig genutzt und ist experimentell. Behandeln Sie es als gebündeltes Plugin, nicht als Kernfunktion. Der Kern kann generische Infrastruktur für Gateway, Node, HTTP, Authentifizierung, Konfiguration und native Clients beibehalten, Canvas-spezifisches Verhalten sollte jedoch unterextensions/canvas angesiedelt sein.
Ziel
Die Zuständigkeit für Canvas nachextensions/canvas verschieben und dabei das aktuelle Verhalten gekoppelter Nodes beibehalten:
- Das agentenseitige
canvas-Tool wird vom Canvas-Plugin registriert - Canvas-Node-Befehle sind nur zulässig, wenn das Canvas-Plugin sie registriert
- A2UI-Host-/Quelldateien befinden sich im Canvas-Plugin
- Die Materialisierung von Canvas-Dokumenten befindet sich im Canvas-Plugin
- Die Implementierung des CLI-Befehls befindet sich im Canvas-Plugin oder delegiert über ein Plugin-eigenes Runtime-Barrel
- Dokumentation und Plugin-Inventar beschreiben Canvas als experimentell und Plugin-gestützt
Nichtziele
- Die Canvas-Benutzeroberfläche der nativen App darf bei dieser Refaktorierung nicht neu gestaltet werden.
- Die Canvas-Protokoll-/Client-Unterstützung darf nicht aus iOS, Android oder macOS entfernt werden, sofern nicht eine separate Produktentscheidung die Löschung von Canvas vorsieht.
- Es darf kein umfassendes Plugin-Service-Framework nur für Canvas entwickelt werden, sofern nicht mindestens ein weiteres gebündeltes Plugin dieselbe Schnittstelle benötigt.
Aktueller Branch-Stand
Erledigt:- Gebündeltes Plugin-Paket in
extensions/canvashinzugefügt. extensions/canvas/openclaw.plugin.jsonhinzugefügt.- Das agentenseitige
canvas-Tool vonsrc/agents/tools/canvas-tool.tsnachextensions/canvas/src/tool.tsverschoben. - Die Kernregistrierung von
createCanvasToolaussrc/agents/openclaw-tools.tsentfernt. - Die Canvas-Host-Implementierung von
src/canvas-hostnachextensions/canvas/src/hostverschoben. extensions/canvas/runtime-api.tsals Plugin-eigenes Kompatibilitäts-Barrel für Tests, Paketierung und externe öffentliche Canvas-Hilfsfunktionen beibehalten.- Die Materialisierung von Canvas-Dokumenten von
src/gateway/canvas-documents.tsnachextensions/canvas/src/documents.tsverschoben. - Die Canvas-CLI-Implementierung und A2UI-JSONL-Hilfsfunktionen nach
extensions/canvas/src/cli.tsverschoben. - Die Canvas-Host-URL und Hilfsfunktionen für bereichsgebundene Fähigkeiten nach
extensions/canvas/srcverschoben. - Die Standardwerte für Canvas-Node-Befehle aus hartcodierten Kernlisten in
nodeInvokePoliciesdes Plugins verschoben. - Plugin-eigene Canvas-Host-Konfiguration unter
plugins.entries.canvas.config.hosthinzugefügt. - Die HTTP-Bereitstellung von Canvas und A2UI hinter die Registrierung der HTTP-Routen des Canvas-Plugins verschoben.
- Generische Plugin-WebSocket-Upgrade-Weiterleitung für Plugin-eigene HTTP-Routen hinzugefügt.
- Canvas-spezifische Gateway-Host-URL und Authentifizierung von Node-Fähigkeiten durch generische Hilfsfunktionen für gehostete Plugin-Oberflächen und Node-Fähigkeiten ersetzt.
- Plugin-eigene Resolver für gehostete Medien hinzugefügt, sodass URLs von Canvas-Dokumenten über das Canvas-Plugin aufgelöst werden, anstatt dass der Kern interne Canvas-Dokumentfunktionen importiert.
api.registerNodeCliFeature(...)hinzugefügt, sodass Canvasopenclaw nodes canvasals Plugin-eigene Node-Funktion deklarieren kann, ohne den übergeordneten Befehlspfad manuell auszuschreiben.- Produktionsimporte von
extensions/canvas/runtime-api.jsaussrc/**entfernt. - Die Quelle des A2UI-Bundles von
apps/shared/OpenClawKit/Tools/CanvasA2UInachextensions/canvas/src/host/a2ui-appverschoben. - Die Implementierung zum Erstellen/Kopieren von A2UI unter
extensions/canvas/scriptsverschoben und die Build-Verkabelung auf Root-Ebene durch generische Asset-Hooks für gebündelte Plugins ersetzt. - Den veralteten Top-Level-Konfigurationsalias
canvasHostaus der Runtime entfernt. - Die Canvas-Doctor-Migration beibehalten, sodass
openclaw doctor --fixaltecanvasHost-Konfigurationen inplugins.entries.canvas.config.hostumschreibt. - Die Kompatibilität mit dem Canvas-Protokoll alter Agenten wurde hinter Gateway-Protokoll v4 entfernt. Native Clients und Gateways verwenden jetzt ausschließlich
pluginSurfaceUrls.canvaszusammen mitnode.pluginSurface.refresh; der veraltete Pfad übercanvasHostUrl,canvasCapabilityundnode.canvas.capability.refreshwird bei dieser experimentellen Refaktorierung absichtlich nicht unterstützt. - Das generierte Plugin-Inventar wurde um Canvas ergänzt.
- Plugin-Referenzdokumentation unter
docs/plugins/reference/canvas.mdhinzugefügt.
- Canvas-Handler nativer Apps unter
apps/verwenden weiterhin absichtlich die Oberfläche des Canvas-Plugins - Canvas-Protokoll-/Client-Handler nativer Apps unter
apps/ - Die Ausgabe veröffentlichter Artefakte verwendet für die abwärtskompatible Runtime-Suche weiterhin
dist/canvas-host/a2ui, der Kopierschritt ist jedoch jetzt Plugin-eigen
Zielstruktur
extensions/canvas sollte für Folgendes zuständig sein:
- Plugin-Manifest und Paketmetadaten
- Registrierung des Agenten-Tools
- Richtlinie für Node-Aufrufbefehle
- Canvas-Host und A2UI-Runtime
- Quelle des Canvas-A2UI-Bundles und Skripte zum Erstellen/Kopieren von Assets
- Erstellung von Canvas-Dokumenten und Auflösung von Assets
- Canvas-CLI-Implementierung
- Canvas-Dokumentationsseite und Eintrag im Plugin-Inventar
- Erkennung und Registrierung von Plugins
- Generische Registrierung von Agenten-Tools
- Generische Richtlinienregistrierung für Node-Aufrufe
- Generische Gateway-HTTP-/Authentifizierungs- und WebSocket-Upgrade-Weiterleitung
- Generische URL-Auflösung für gehostete Plugin-Oberflächen
- Generische Registrierung von Resolvern für gehostete Medien
- Generischer Transport von Node-Fähigkeiten
- Generische Konfigurationsinfrastruktur
- Generische Erkennung von Asset-Hooks gebündelter Plugins
Migrationsschritte
plugins.entries.canvas.config.hostals Plugin-eigene Konfigurationsoberfläche behandeln.- Die Dokumentation aktualisieren, sodass Canvas als experimentelles gebündeltes Plugin beschrieben wird.
- Gezielte Canvas-Tests, Prüfungen des Plugin-Inventars, Prüfungen der Plugin-SDK-API sowie die durch Runtime-Grenzen betroffenen Build-/Typprüfungen ausführen.
Audit-Checkliste
Bevor die Refaktorierung als abgeschlossen gilt:rg "src/canvas-host|../canvas-host"gibt keine aktiven Quellimporte zurück.rg "canvas-tool|createCanvasTool" srcfindet keine Canvas-Tool-Implementierung im Kern.rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewayfindet außerhalb generischer Tests für Plugin-Richtlinien keine hartcodierten Standard-Positivlisten.rg "extensions/canvas/runtime-api" src --glob '!**/*.test.ts'ist leer.rg "canvas-documents" srcist leer.rg "registerNodesCanvasCommands|nodes-canvas" srcist leer; das Canvas-Plugin registriertopenclaw nodes canvasüber verschachtelte Plugin-CLI-Metadaten.rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewaygibt keine Zuständigkeit für die Gateway-Runtime zurück.rg "apps/shared/OpenClawKit/Tools/CanvasA2UI|canvas-a2ui-copy|extensions/canvas/src/host/a2ui" scripts .github package.jsonfindet nur Kompatibilitäts-Wrapper oder Plugin-eigene Pfade.pnpm plugins:inventory:checkist erfolgreich.pnpm plugin-sdk:api:checkist erfolgreich, oder generierte API-Vertragsdatensätze werden absichtlich aktualisiert und geprüft.- Gezielte Canvas-Tests sind erfolgreich.
- Tests der geänderten Lanes für Canvas-Host-/A2UI-Pfade sind erfolgreich.
- Der PR-Text besagt ausdrücklich, dass Canvas experimentell und Plugin-gestützt ist.
Verifizierungsbefehle
Verwenden Sie während der Iteration gezielte lokale Prüfungen:pnpm build aus, wenn sich das Runtime-Barrel, Lazy Imports, die Paketierung oder veröffentlichte Plugin-Oberflächen ändern.