Get started
Herstructurering van de Canvas Plugin
Refactor van de Canvas-Plugin
Canvas wordt weinig gebruikt en is experimenteel. Behandel het als een gebundelde Plugin, niet als een kernfunctie. De core mag generieke Gateway-, Node-, HTTP-, authenticatie-, configuratie- en native-client-bedrading behouden, maar Canvas-specifiek gedrag moet onder extensions/canvas staan.
Doel
Verplaats het eigenaarschap van Canvas naar extensions/canvas en behoud daarbij het huidige gedrag met gekoppelde nodes:
- de agentgerichte
canvas-tool wordt geregistreerd door de Canvas-Plugin - Canvas-nodecommando's zijn alleen toegestaan wanneer de Canvas-Plugin ze registreert
- A2UI-host-/bronbestanden staan onder de Canvas-Plugin
- Canvas-documentmaterialisatie staat onder de Canvas-Plugin
- de implementatie van CLI-commando's staat onder de Canvas-Plugin, of delegeert via een Plugin-eigen runtime-barrel
- documentatie en Plugin-inventaris beschrijven Canvas als experimenteel en Plugin-ondersteund
Geen doelen
- Ontwerp de Canvas-UI van de native app niet opnieuw in deze refactor.
- Verwijder geen ondersteuning voor het Canvas-protocol/de Canvas-client uit iOS, Android of macOS, tenzij een afzonderlijke productbeslissing zegt dat Canvas moet worden verwijderd.
- Bouw geen breed Plugin-serviceframework alleen voor Canvas, tenzij minstens één andere gebundelde Plugin dezelfde seam nodig heeft.
Huidige branchstatus
Gereed:
- Gebundeld Plugin-pakket 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
createCanvasToolverwijderd uitsrc/agents/openclaw-tools.ts. - Canvas-hostimplementatie verplaatst van
src/canvas-hostnaarextensions/canvas/src/host. extensions/canvas/runtime-api.tsbehouden als de Plugin-eigen compatibiliteitsbarrel voor tests, packaging en externe publieke Canvas-helpers.- Canvas-documentmaterialisatie verplaatst van
src/gateway/canvas-documents.tsnaarextensions/canvas/src/documents.ts. - Canvas CLI-implementatie en A2UI JSONL-helpers verplaatst naar
extensions/canvas/src/cli.ts. - Canvas-host-URL en scoped capability-helpers verplaatst naar
extensions/canvas/src. - Standaarden voor Canvas-nodecommando's verplaatst uit hardgecodeerde corelijsten naar Plugin-
nodeInvokePolicies. - Plugin-eigen Canvas-hostconfiguratie toegevoegd op
plugins.entries.canvas.config.host. - Canvas- en A2UI-HTTP-serving achter registratie van HTTP-routes door de Canvas-Plugin geplaatst.
- Generieke Plugin-WebSocket-upgrade-dispatch toegevoegd voor Plugin-eigen HTTP-routes.
- Canvas-specifieke Gateway-host-URL en node-capability-authenticatie vervangen door generieke gehoste Plugin-surface- en node-capability-helpers.
- Plugin-eigen resolvers voor gehoste media toegevoegd, zodat Canvas-document-URL's via de Canvas-Plugin worden opgelost in plaats van dat core Canvas-documentinternals importeert.
api.registerNodeCliFeature(...)toegevoegd, zodat Canvasopenclaw nodes canvaskan declareren als een Plugin-eigen nodefunctie zonder het bovenliggende commandopad handmatig uit te schrijven.- Productie-imports van
extensions/canvas/runtime-api.jsinsrc/**verwijderd. - De A2UI-bundelbron verplaatst van
apps/shared/OpenClawKit/Tools/CanvasA2UInaarextensions/canvas/src/host/a2ui-app. - A2UI-build-/kopieerimplementatie verplaatst onder
extensions/canvas/scriptsen root-buildbedrading vervangen door generieke asset-hooks voor gebundelde Plugins. - De legacy runtime-alias
canvasHostop topniveau verwijderd. - De Canvas-doctor-migratie behouden, zodat
openclaw doctor --fixoudecanvasHost-configuraties herschrijft naarplugins.entries.canvas.config.host. - Compatibiliteit met het Canvas-protocol voor oude agents achter Gateway-protocol v4 verwijderd. Native clients en Gateways gebruiken nu alleen
pluginSurfaceUrls.canvasplusnode.pluginSurface.refresh; het verouderde padcanvasHostUrl,canvasCapabilityennode.canvas.capability.refreshwordt in deze experimentele refactor bewust niet ondersteund. - Gegenereerde Plugin-inventaris bijgewerkt om Canvas op te nemen.
- Plugin-referentiedocumentatie toegevoegd op
docs/plugins/reference/canvas.md.
Bekende resterende Canvas-surfaces die nog door core worden beheerd:
- Canvas-handlers van native apps onder
apps/gebruiken nog bewust de Canvas-Plugin-surface - Canvas-protocol-/clienthandlers van native apps onder
apps/ - gepubliceerde artifact-output gebruikt nog
dist/canvas-host/a2uivoor achterwaarts compatibele runtime-lookup, maar de kopieerstap is nu Plugin-eigen
Doelvorm
extensions/canvas moet eigenaar zijn van:
- Plugin-manifest en pakketmetadata
- registratie van agenttool
- beleid voor node-invoke-commando's
- Canvas-host en A2UI-runtime
- Canvas A2UI-bundelbron en asset-build-/kopieerscripts
- Canvas-documentcreatie en assetresolutie
- Canvas CLI-implementatie
- Canvas-documentatiepagina en Plugin-inventarisitem
Core moet alleen eigenaar zijn van generieke seams:
- Plugin-detectie en -registratie
- generiek register voor agenttools
- generiek register voor node-invoke-beleid
- generieke Gateway-HTTP/authenticatie en WebSocket-upgrade-dispatch
- generieke URL-resolutie voor gehoste Plugin-surfaces
- generieke registratie van gehoste-media-resolvers
- generiek node-capability-transport
- generieke configuratiebedrading
- generieke ontdekking van asset-hooks voor gebundelde Plugins
Native apps mogen Canvas-commandhandlers behouden als clients van het protocol. Zij zijn niet de eigenaar van de Plugin-runtime.
Migratiestappen
- Behandel
plugins.entries.canvas.config.hostals de Plugin-eigen configuratiesurface. - Werk de documentatie bij zodat Canvas wordt beschreven als een experimentele gebundelde Plugin.
- Voer gerichte Canvas-tests, Plugin-inventariscontroles, Plugin SDK API-controles en build-/typegates uit die door runtimegrenzen worden geraakt.
Auditchecklist
Voordat de refactor als compleet wordt beschouwd:
rg "src/canvas-host|../canvas-host"retourneert geen live bronimporten.rg "canvas-tool|createCanvasTool" srcvindt geen Canvas-toolimplementatie die door core wordt beheerd.rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewayvindt geen hardgecodeerde allowlist-standaarden buiten generieke tests voor Plugin-beleid.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 Plugin CLI-metadata.rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewayretourneert geen Gateway-runtime-eigenaarschap.rg "apps/shared/OpenClawKit/Tools/CanvasA2UI|canvas-a2ui-copy|extensions/canvas/src/host/a2ui" scripts .github package.jsonvindt alleen compatibiliteitswrappers of Plugin-eigen paden.pnpm plugins:inventory:checkslaagt.pnpm plugin-sdk:api:checkslaagt, of gegenereerde API-baselines zijn bewust bijgewerkt en beoordeeld.- Gerichte Canvas-tests slagen.
- Changed-lanes-tests slagen voor Canvas-host-/A2UI-paden.
- De PR-body zegt expliciet dat Canvas experimenteel en Plugin-ondersteund is.
Verificatiecommando's
Gebruik gerichte lokale controles tijdens het itereren:
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.ts
pnpm test src/gateway/server.plugin-node-capability-auth.test.ts src/gateway/server-import-boundary.test.ts
pnpm test extensions/canvas/src/config-migration.test.ts src/commands/doctor-legacy-config.migrations.test.ts
pnpm 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.ts
pnpm tsgo:extensions
pnpm plugins:inventory:check
pnpm plugin-sdk:api:check
Voer pnpm build uit vóór push als runtime-barrel, lazy import, packaging of gepubliceerde Plugin-surfaces veranderen.