Refactor van de Canvas-plugin
Canvas wordt weinig gebruikt en is experimenteel. Behandel het als een gebundelde plugin, niet als een kernfunctie. Core mag generieke infrastructuur voor de Gateway, Node, HTTP, authenticatie, configuratie en native clients behouden, maar Canvas-specifiek gedrag hoort onderextensions/canvas te staan.
Doel
Verplaats het eigenaarschap van Canvas naarextensions/canvas en behoud daarbij het huidige gedrag met gekoppelde Nodes:
- de agentgerichte tool
canvaswordt door de Canvas-plugin geregistreerd - Canvas-Node-opdrachten zijn alleen toegestaan wanneer de Canvas-plugin ze registreert
- A2UI-host-/bronbestanden staan onder de Canvas-plugin
- materialisatie van Canvas-documenten staat onder de Canvas-plugin
- de implementatie van de CLI-opdracht staat onder de Canvas-plugin of delegeert via een runtime-barrel waarvan de plugin eigenaar is
- documentatie en plugininventaris beschrijven Canvas als experimenteel en door een plugin ondersteund
Geen doelen
- Ontwerp in deze refactor de Canvas-UI van de native app niet opnieuw.
- Verwijder Canvas-protocol-/clientondersteuning niet uit iOS, Android of macOS, tenzij een afzonderlijke productbeslissing bepaalt dat Canvas moet worden verwijderd.
- Bouw niet alleen voor Canvas een breed framework voor pluginservices, tenzij minstens één andere gebundelde plugin dezelfde koppeling nodig heeft.
Huidige branchstatus
Voltooid:- Gebundeld pluginpakket toegevoegd in
extensions/canvas. extensions/canvas/openclaw.plugin.jsontoegevoegd.- De agenttool
canvasverplaatst vansrc/agents/tools/canvas-tool.tsnaarextensions/canvas/src/tool.ts. - Core-registratie van
createCanvasTooluitsrc/agents/openclaw-tools.tsverwijderd. - De implementatie van de Canvas-host verplaatst van
src/canvas-hostnaarextensions/canvas/src/host. extensions/canvas/runtime-api.tsbehouden als compatibiliteitsbarrel waarvan de plugin eigenaar is, voor tests, packaging en externe openbare Canvas-helpers.- Materialisatie van Canvas-documenten verplaatst van
src/gateway/canvas-documents.tsnaarextensions/canvas/src/documents.ts. - Implementatie van de Canvas-CLI en A2UI-JSONL-helpers verplaatst naar
extensions/canvas/src/cli.ts. - Helpers voor de Canvas-host-URL en bereikgebonden capabilities verplaatst naar
extensions/canvas/src. - Standaardwaarden voor Canvas-Node-opdrachten uit hardgecodeerde Core-lijsten verplaatst naar plugin
nodeInvokePolicies. - Canvas-hostconfiguratie waarvan de plugin eigenaar is toegevoegd in
plugins.entries.canvas.config.host. - HTTP-serving van Canvas en A2UI achter registratie van HTTP-routes door de Canvas-plugin geplaatst.
- Generieke dispatch voor WebSocket-upgrades toegevoegd voor HTTP-routes waarvan plugins eigenaar zijn.
- Canvas-specifieke Gateway-host-URL en authenticatie van Node-capabilities vervangen door generieke helpers voor gehoste pluginoppervlakken en Node-capabilities.
- Mediaresolvers waarvan plugins eigenaar zijn toegevoegd, zodat URL’s van Canvas-documenten via de Canvas-plugin worden omgezet in plaats van dat Core interne Canvas-documentonderdelen importeert.
api.registerNodeCliFeature(...)toegevoegd, zodat Canvasopenclaw nodes canvasals een Node-functie waarvan de plugin eigenaar is kan declareren zonder het pad van de bovenliggende opdracht handmatig uit te schrijven.- Productie-imports van
extensions/canvas/runtime-api.jsuitsrc/**verwijderd. - De bron van de A2UI-bundel verplaatst van
apps/shared/OpenClawKit/Tools/CanvasA2UInaarextensions/canvas/src/host/a2ui-app. - Implementatie voor het bouwen/kopiëren van A2UI onder
extensions/canvas/scriptsgeplaatst en root-buildkoppelingen vervangen door generieke asset-hooks voor gebundelde plugins. - De verouderde runtime-alias voor de configuratie op het hoogste niveau,
canvasHost, verwijderd. - De Canvas-migratie voor doctor behouden, zodat
openclaw doctor --fixoudecanvasHost-configuraties herschrijft naarplugins.entries.canvas.config.host. - Canvas-protocolcompatibiliteit met oude agents achter Gateway-protocol v4 verwijderd. Native clients en Gateways gebruiken nu alleen
pluginSurfaceUrls.canvasplusnode.pluginSurface.refresh; het verouderde pad metcanvasHostUrl,canvasCapabilityennode.canvas.capability.refreshwordt in deze experimentele refactor bewust niet ondersteund. - De gegenereerde plugininventaris bijgewerkt met Canvas.
- Referentiedocumentatie voor de plugin toegevoegd in
docs/plugins/reference/canvas.md.
- Canvas-handlers van native apps onder
apps/gebruiken nog steeds bewust het oppervlak van de Canvas-plugin - Canvas-protocol-/clienthandlers van native apps onder
apps/ - uitvoer van gepubliceerde artefacten gebruikt nog steeds
dist/canvas-host/a2uivoor achterwaarts compatibele runtime-lookup, maar de kopieerstap valt nu onder het eigenaarschap van de plugin
Beoogde structuur
extensions/canvas moet eigenaar zijn van:
- pluginmanifest en pakketmetadata
- registratie van agenttools
- beleid voor Node-aanroepopdrachten
- Canvas-host en A2UI-runtime
- bron van de Canvas-A2UI-bundel en scripts voor het bouwen/kopiëren van assets
- aanmaak van Canvas-documenten en omzetting van assets
- implementatie van de Canvas-CLI
- Canvas-documentatiepagina en vermelding in de plugininventaris
- detectie en registratie van plugins
- generiek register voor agenttools
- generiek beleidsregister voor Node-aanroepen
- generieke HTTP-/authenticatiefunctionaliteit van de Gateway en dispatch voor WebSocket-upgrades
- generieke URL-omzetting voor gehoste pluginoppervlakken
- generieke registratie van gehoste mediaresolvers
- generiek transport van Node-capabilities
- generieke configuratie-infrastructuur
- generieke detectie van asset-hooks voor gebundelde plugins
Migratiestappen
- Behandel
plugins.entries.canvas.config.hostals het configuratieoppervlak waarvan de plugin eigenaar is. - Werk de documentatie bij zodat Canvas wordt beschreven als een experimentele gebundelde plugin.
- Voer gerichte Canvas-tests, controles van de plugininventaris, controles van de Plugin-SDK-API en build-/typepoorten uit die door runtimegrenzen worden beïnvloed.
Auditchecklist
Voordat de refactor als voltooid wordt beschouwd:rg "src/canvas-host|../canvas-host"retourneert geen actieve bronimports.rg "canvas-tool|createCanvasTool" srcvindt geen implementatie van een Canvas-tool waarvan Core eigenaar is.rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewayvindt geen hardgecodeerde standaardwaarden voor allowlists buiten generieke tests voor pluginbeleid.rg "extensions/canvas/runtime-api" src --glob '!**/*.test.ts'is leeg.rg "canvas-documents" srcis leeg.rg "registerNodesCanvasCommands|nodes-canvas" srcis leeg; de Canvas-plugin registreertopenclaw nodes canvasvia geneste CLI-metadata van de plugin.rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewayretourneert geen eigenaarschap van de Gateway-runtime.rg "apps/shared/OpenClawKit/Tools/CanvasA2UI|canvas-a2ui-copy|extensions/canvas/src/host/a2ui" scripts .github package.jsonvindt alleen compatibiliteitswrappers of paden waarvan de plugin eigenaar is.pnpm plugins:inventory:checkslaagt.pnpm plugin-sdk:api:checkslaagt, of gegenereerde API-contractrecords worden bewust bijgewerkt en beoordeeld.- Gerichte Canvas-tests slagen.
- Tests voor gewijzigde lanes slagen voor Canvas-host-/A2UI-paden.
- De PR-beschrijving vermeldt expliciet dat Canvas experimenteel en door een plugin ondersteund is.
Verificatieopdrachten
Gebruik tijdens het itereren gerichte lokale controles:pnpm build vóór het pushen uit als de runtime-barrel, lazy import, packaging of gepubliceerde pluginoppervlakken veranderen.