Get started
Canvas-Plugin-Refaktorierung
Refaktorierung des Canvas-Plugins
Canvas wird wenig genutzt und ist experimentell. Behandeln Sie es als gebündeltes Plugin, nicht als Kernfunktion. Der Kern darf generische Gateway-, Node-, HTTP-, Authentifizierungs-, Konfigurations- und Native-Client-Infrastruktur beibehalten, Canvas-spezifisches Verhalten sollte jedoch unter extensions/canvas liegen.
Ziel
Verlagern Sie die Zuständigkeit für Canvas nach extensions/canvas und bewahren Sie dabei das aktuelle Verhalten gekoppelter Nodes:
- Das agentenseitige Werkzeug
canvaswird vom Canvas-Plugin registriert. - Canvas-Node-Befehle sind nur zulässig, wenn das Canvas-Plugin sie registriert.
- A2UI-Host-/Quelldateien liegen unter dem Canvas-Plugin.
- Die Materialisierung von Canvas-Dokumenten liegt unter dem Canvas-Plugin.
- Die Implementierung des CLI-Befehls liegt unter dem Canvas-Plugin oder delegiert über ein Plugin-eigenes Runtime-Barrel.
- Dokumentation und Plugin-Inventar beschreiben Canvas als experimentell und Plugin-gestützt.
Nichtziele
- Gestalten Sie die Canvas-Benutzeroberfläche der nativen App bei dieser Refaktorierung nicht neu.
- Entfernen Sie die Canvas-Protokoll-/Client-Unterstützung nicht aus iOS, Android oder macOS, sofern nicht eine separate Produktentscheidung die Löschung von Canvas vorsieht.
- Erstellen Sie nicht allein für Canvas ein umfassendes Plugin-Service-Framework, 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 Agentenwerkzeug
canvasvonsrc/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 bereichsbezogene Fähigkeiten nach
extensions/canvas/srcverschoben. - Die Standardwerte für Canvas-Node-Befehle aus fest codierten Kernlisten in die Plugin-
nodeInvokePoliciesverschoben. - Plugin-eigene Canvas-Host-Konfiguration unter
plugins.entries.canvas.config.hosthinzugefügt. - Die HTTP-Bereitstellung von Canvas und A2UI hinter die HTTP-Routenregistrierung des Canvas-Plugins verschoben.
- Generische Plugin-WebSocket-Upgrade-Weiterleitung für Plugin-eigene HTTP-Routen hinzugefügt.
- Die Canvas-spezifische Gateway-Host-URL und Authentifizierung von Node-Fähigkeiten durch generische gehostete Plugin-Oberflächen und Hilfsfunktionen für Node-Fähigkeiten ersetzt.
- Plugin-eigene Resolver für gehostete Medien hinzugefügt, sodass Canvas-Dokument-URLs über das Canvas-Plugin aufgelöst werden, anstatt dass der Kern interne Canvas-Dokumentimplementierungen importiert.
api.registerNodeCliFeature(...)hinzugefügt, sodass Canvasopenclaw nodes canvasals Plugin-eigene Node-Funktion deklarieren kann, ohne den Pfad des übergeordneten Befehls manuell anzugeben.- Produktive Importe von
extensions/canvas/runtime-api.jsaussrc/**entfernt. - Die Quelle des A2UI-Bundles von
apps/shared/OpenClawKit/Tools/CanvasA2UInachextensions/canvas/src/host/a2ui-appverschoben. - Die A2UI-Build-/Kopierimplementierung nach
extensions/canvas/scriptsverschoben und die Build-Verknüpfung im Stammverzeichnis 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 Canvas-Protokollkompatibilität für alte Agenten 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 bewusst nicht unterstützt. - Das generierte Plugin-Inventar um Canvas ergänzt.
- Plugin-Referenzdokumentation unter
docs/plugins/reference/canvas.mdhinzugefügt.
Bekannte verbleibende Canvas-Oberflächen im Besitz des Kerns:
- Canvas-Handler nativer Apps unter
apps/verwenden weiterhin bewusst die Oberfläche des Canvas-Plugins. - Canvas-Protokoll-/Client-Handler nativer Apps unter
apps/. - Die Ausgabe veröffentlichter Artefakte verwendet für abwärtskompatible Runtime-Auflösung weiterhin
dist/canvas-host/a2ui, der Kopierschritt ist nun jedoch Plugin-eigen.
Zielstruktur
extensions/canvas sollte für Folgendes zuständig sein:
- Plugin-Manifest und Paketmetadaten
- Registrierung des Agentenwerkzeugs
- Richtlinie für Node-Aufrufbefehle
- Canvas-Host und A2UI-Runtime
- Quelle des Canvas-A2UI-Bundles und Asset-Build-/Kopierskripte
- Erstellung von Canvas-Dokumenten und Asset-Auflösung
- Canvas-CLI-Implementierung
- Canvas-Dokumentationsseite und Eintrag im Plugin-Inventar
Der Kern sollte nur für generische Schnittstellen zuständig sein:
- Plugin-Erkennung und -Registrierung
- generische Registrierung von Agentenwerkzeugen
- generische Registrierung von Richtlinien 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
Native Apps dürfen Canvas-Befehlshandler als Clients des Protokolls beibehalten. Sie sind nicht für die Plugin-Runtime zuständig.
Migrationsschritte
- Behandeln Sie
plugins.entries.canvas.config.hostals Plugin-eigene Konfigurationsoberfläche. - Aktualisieren Sie die Dokumentation, sodass Canvas als experimentelles gebündeltes Plugin beschrieben wird.
- Führen Sie gezielte Canvas-Tests, Prüfungen des Plugin-Inventars, Prüfungen der Plugin-SDK-API sowie Build-/Typprüfungen aus, die von Runtime-Grenzen betroffen sind.
Audit-Checkliste
Bevor Sie die Refaktorierung als abgeschlossen betrachten:
rg "src/canvas-host|../canvas-host"gibt keine aktiven Quellcodeimporte zurück.rg "canvas-tool|createCanvasTool" srcfindet keine Canvas-Werkzeugimplementierung im Besitz des Kerns.rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewayfindet außerhalb generischer Tests für Plugin-Richtlinien keine fest codierten Standard-Zulassungslisten.rg "extensions/canvas/runtime-api" src --glob '!**/*.test.ts'gibt keine Ergebnisse zurück.rg "canvas-documents" srcgibt keine Ergebnisse zurück.rg "registerNodesCanvasCommands|nodes-canvas" srcgibt keine Ergebnisse zurück; das Canvas-Plugin registriertopenclaw nodes canvasüber verschachtelte Plugin-CLI-Metadaten.rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewaygibt keine Zuständigkeit der 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:checkwird erfolgreich ausgeführt.pnpm plugin-sdk:api:checkwird erfolgreich ausgeführt oder generierte API-Baselines werden bewusst aktualisiert und geprüft.- Gezielte Canvas-Tests werden erfolgreich ausgeführt.
- Tests für geänderte Lanes werden für Canvas-Host-/A2UI-Pfade erfolgreich ausgeführt.
- Der PR-Text gibt ausdrücklich an, dass Canvas experimentell und Plugin-gestützt ist.
Verifizierungsbefehle
Verwenden Sie während der Iteration gezielte lokale Prüfungen:
pnpm test extensions/canvas/src/host/server.test.ts extensions/canvas/src/host/server.state-dir.test.ts extensions/canvas/src/host/file-resolver.test.tspnpm test src/gateway/server.plugin-node-capability-auth.test.ts src/gateway/server-import-boundary.test.tspnpm test extensions/canvas/src/config-migration.test.ts src/commands/doctor-legacy-config.migrations.test.tspnpm test test/scripts/changed-lanes.test.ts test/scripts/build-all.test.ts extensions/canvas/scripts/bundle-a2ui.test.ts test/scripts/bundled-plugin-assets.test.ts extensions/canvas/scripts/copy-a2ui.test.ts src/infra/run-node.test.tspnpm tsgo:extensionspnpm plugins:inventory:checkpnpm plugin-sdk:api:checkFühren Sie vor dem Push pnpm build aus, wenn sich das Runtime-Barrel, Lazy Imports, die Paketierung oder veröffentlichte Plugin-Oberflächen ändern.