Refatoração do plugin Canvas
O Canvas tem pouco uso e é experimental. Trate-o como um plugin incluído, não como um recurso do núcleo. O núcleo pode manter a infraestrutura genérica de Gateway, Node, HTTP, autenticação, configuração e cliente nativo, mas o comportamento específico do Canvas deve ficar emextensions/canvas.
Objetivo
Mover a responsabilidade pelo Canvas paraextensions/canvas, preservando o comportamento atual de Node pareado:
- a ferramenta
canvasvoltada para o agente é registrada pelo plugin Canvas - os comandos de Node do Canvas são permitidos somente quando o plugin Canvas os registra
- os arquivos de origem/hospedagem do A2UI ficam no plugin Canvas
- a materialização de documentos do Canvas fica no plugin Canvas
- a implementação do comando da CLI fica no plugin Canvas ou delega por meio de um barrel de runtime pertencente ao plugin
- a documentação e o inventário de plugins descrevem o Canvas como experimental e baseado em plugin
Fora do escopo
- Não reprojete a interface do Canvas no aplicativo nativo nesta refatoração.
- Não remova o suporte ao protocolo/cliente do Canvas no iOS, Android ou macOS, a menos que uma decisão de produto separada determine que o Canvas deve ser excluído.
- Não crie uma estrutura ampla de serviços de plugin apenas para o Canvas, a menos que pelo menos outro plugin incluído precise da mesma interface.
Estado atual da branch
Concluído:- Adicionado o pacote de plugin incluído em
extensions/canvas. - Adicionado
extensions/canvas/openclaw.plugin.json. - Movida a ferramenta
canvasdo agente desrc/agents/tools/canvas-tool.tsparaextensions/canvas/src/tool.ts. - Removido o registro de
createCanvasToolpelo núcleo emsrc/agents/openclaw-tools.ts. - Movida a implementação do host do Canvas de
src/canvas-hostparaextensions/canvas/src/host. - Mantido
extensions/canvas/runtime-api.tscomo o barrel de compatibilidade pertencente ao plugin para testes, empacotamento e auxiliares públicos externos do Canvas. - Movida a materialização de documentos do Canvas de
src/gateway/canvas-documents.tsparaextensions/canvas/src/documents.ts. - Movidas a implementação da CLI do Canvas e as funções auxiliares de JSONL do A2UI para
extensions/canvas/src/cli.ts. - Movidas as funções auxiliares de URL do host do Canvas e de recursos com escopo para
extensions/canvas/src. - Movidos os padrões de comandos de Node do Canvas das listas codificadas diretamente no núcleo para
nodeInvokePoliciesdo plugin. - Adicionada a configuração do host do Canvas pertencente ao plugin em
plugins.entries.canvas.config.host. - Movido o fornecimento HTTP do Canvas e do A2UI para trás do registro de rotas HTTP do plugin Canvas.
- Adicionado o encaminhamento genérico de upgrade de WebSocket de plugins para rotas HTTP pertencentes a plugins.
- Substituídas a URL do host e a autenticação de recursos de Node específicas do Canvas no Gateway por funções auxiliares genéricas de superfície hospedada de plugin e recursos de Node.
- Adicionados resolvedores de mídia hospedada pertencentes ao plugin para que as URLs de documentos do Canvas sejam resolvidas pelo plugin Canvas, em vez de o núcleo importar componentes internos de documentos do Canvas.
- Adicionado
api.registerNodeCliFeature(...)para que o Canvas possa declararopenclaw nodes canvascomo um recurso de Node pertencente ao plugin sem especificar manualmente o caminho do comando pai. - Removidas as importações de produção de
extensions/canvas/runtime-api.jsemsrc/**. - Movida a origem do pacote A2UI de
apps/shared/OpenClawKit/Tools/CanvasA2UIparaextensions/canvas/src/host/a2ui-app. - Movida a implementação de compilação/cópia do A2UI para
extensions/canvas/scripts, substituindo a integração de compilação na raiz por ganchos genéricos de recursos de plugins incluídos. - Removido o alias legado de configuração
canvasHostde nível superior no runtime. - Mantida a migração do Canvas no doctor para que
openclaw doctor --fixreescreva configurações antigas decanvasHostcomoplugins.entries.canvas.config.host. - Removida a compatibilidade do protocolo do Canvas com agentes antigos no protocolo v4 do Gateway. Clientes nativos e gateways agora usam apenas
pluginSurfaceUrls.canvasjunto comnode.pluginSurface.refresh; o caminho obsoletocanvasHostUrl,canvasCapabilityenode.canvas.capability.refreshnão é intencionalmente compatível nesta refatoração experimental. - Atualizado o inventário gerado de plugins para incluir o Canvas.
- Adicionada a documentação de referência do plugin em
docs/plugins/reference/canvas.md.
- Os manipuladores do Canvas nos aplicativos nativos em
apps/ainda consomem intencionalmente a superfície do plugin Canvas - manipuladores de protocolo/cliente do Canvas nos aplicativos nativos em
apps/ - a saída do artefato publicado ainda usa
dist/canvas-host/a2uipara uma consulta de runtime retrocompatível, mas a etapa de cópia agora pertence ao plugin
Estrutura pretendida
extensions/canvas deve ser responsável por:
- manifesto do plugin e metadados do pacote
- registro da ferramenta do agente
- política de comandos de invocação de Node
- host do Canvas e runtime do A2UI
- origem do pacote A2UI do Canvas e scripts de compilação/cópia de recursos
- criação de documentos e resolução de recursos do Canvas
- implementação da CLI do Canvas
- página de documentação do Canvas e entrada no inventário de plugins
- descoberta e registro de plugins
- registro genérico de ferramentas do agente
- registro genérico de políticas de invocação de Node
- HTTP/autenticação genéricos do Gateway e encaminhamento de upgrade de WebSocket
- resolução genérica de URLs de superfícies hospedadas de plugins
- registro genérico de resolvedores de mídia hospedada
- transporte genérico de recursos de Node
- infraestrutura genérica de configuração
- descoberta genérica de ganchos de recursos de plugins incluídos
Etapas da migração
- Trate
plugins.entries.canvas.config.hostcomo a superfície de configuração pertencente ao plugin. - Atualize a documentação para descrever o Canvas como um plugin incluído experimental.
- Execute testes específicos do Canvas, verificações do inventário de plugins, verificações da API do SDK de plugins e as etapas de compilação/tipos afetadas pelos limites do runtime.
Lista de verificação da auditoria
Antes de considerar a refatoração concluída:rg "src/canvas-host|../canvas-host"não retorna importações ativas no código-fonte.rg "canvas-tool|createCanvasTool" srcnão encontra nenhuma implementação da ferramenta Canvas pertencente ao núcleo.rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewaynão encontra padrões de lista de permissões codificados diretamente fora dos testes genéricos de políticas de plugins.rg "extensions/canvas/runtime-api" src --glob '!**/*.test.ts'não retorna resultados.rg "canvas-documents" srcnão retorna resultados.rg "registerNodesCanvasCommands|nodes-canvas" srcnão retorna resultados; o plugin Canvas registraopenclaw nodes canvaspor meio de metadados aninhados da CLI do plugin.rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewaynão retorna nenhuma responsabilidade de runtime do Gateway.rg "apps/shared/OpenClawKit/Tools/CanvasA2UI|canvas-a2ui-copy|extensions/canvas/src/host/a2ui" scripts .github package.jsonencontra apenas wrappers de compatibilidade ou caminhos pertencentes ao plugin.pnpm plugins:inventory:checké aprovado.pnpm plugin-sdk:api:checké aprovado, ou as linhas de base geradas da API são atualizadas e revisadas intencionalmente.- Os testes direcionados do Canvas são aprovados.
- Os testes das áreas alteradas são aprovados para os caminhos de host/A2UI do Canvas.
- O corpo do PR declara explicitamente que o Canvas é experimental e baseado em plugin.
Comandos de verificação
Use verificações locais direcionadas durante as iterações:pnpm build antes de enviar se o barrel de runtime, a importação tardia, o empacotamento ou as superfícies publicadas do plugin forem alterados.