Canvas 是低使用率的实验性功能,将其从 core 迁移为捆绑插件(extensions/canvas),而非 core 特性。

目标

将 Canvas 所有权移至 extensions/canvas,同时保留当前的配对节点行为:

  • agent 面向的 canvas 工具由 Canvas 插件注册
  • Canvas 节点命令仅在 Canvas 插件注册时允许
  • A2UI host/source 文件位于 Canvas 插件下
  • Canvas 文档物化位于 Canvas 插件下
  • CLI 命令实现位于 Canvas 插件下,或通过插件拥有的运行时 barrel 委托

已完成工作

  • 在 extensions/canvas 添加捆绑插件包和 openclaw.plugin.json
  • 将 agent canvas 工具从 src/agents/tools/canvas-tool.ts 移至 extensions/canvas/src/tool.ts
  • 将 Canvas host 从 src/canvas-host 移至 extensions/canvas/src/host
  • 将 Canvas 文档物化从 src/gateway/canvas-documents.ts 移至 extensions/canvas/src/documents.ts
  • 将 Canvas CLI 实现和 A2UI JSONL helpers 移入 extensions/canvas/src/cli.ts
  • 将 Canvas 节点命令默认值从硬编码 core 列表移至插件 nodeInvokePolicies
  • 添加插件拥有的 Canvas host 配置:plugins.entries.canvas.config.host
  • 将 Canvas 和 A2UI HTTP 服务移至 Canvas 插件 HTTP 路由注册
  • 添加通用插件 WebSocket 升级分发
  • 将 A2UI bundle 源从 apps/shared/OpenClawKit/Tools/CanvasA2UI 移至 extensions/canvas/src/host/a2ui-app
  • 移除运行时遗留顶层 canvasHost 配置别名(保留 doctor 迁移)

Core 保留的通用接缝

  • 插件发现和注册
  • 通用 agent 工具注册表
  • 通用节点调用策略注册表
  • 通用 gateway HTTP/auth 和 WebSocket 升级分发
  • 通用托管插件 surface URL 解析
  • 通用托管媒体解析器注册
  • 通用 config 管道
  • 通用捆绑插件资产钩子发现

审计检查清单

rg "src/canvas-host|../canvas-host"          # 应无结果
rg "canvas-tool|createCanvasTool" src        # 应无 core 拥有的实现
rg "canvas-documents" src                    # 应无结果
rg "registerNodesCanvasCommands|nodes-canvas" src  # 应无结果
pnpm plugins:inventory:check
pnpm plugin-sdk:api:check

验证命令

pnpm test extensions/canvas/src/host/server.test.ts
pnpm test src/gateway/server.plugin-node-capability-auth.test.ts
pnpm tsgo:extensions
pnpm plugins:inventory:check
pnpm plugin-sdk:api:check

相关页面