14.6 Canvas画布

Canvas 是 macOS 应用中由智能体控制的轻量级可视化工作区,用于展示 HTML/CSS/JS 和 A2UI 交互界面。

概述

Canvas 是一个无边框、可调整大小的面板,锚定在菜单栏附近,为智能体提供轻量级的视觉工作空间。它通过 WKWebView 嵌入,支持 HTML/CSS/JavaScript 和 A2UI 交互式 UI 界面。

核心特性

文件系统与自定义协议

  • 存储位置: 状态存储在 ~/Library/Application Support/OpenClaw/canvas/
  • 自定义 URL Scheme: 使用 openclaw-canvas:// 协议提供本地文件服务
  • 安全限制: 阻止目录遍历攻击,仅允许显式导航到外部 URL
  • 自动重载: 文件变更时自动刷新内容

A2UI 支持

Canvas 支持 A2UI v0.8 消息协议,包括:

  • surfaceUpdate - 更新界面内容
  • beginRendering - 开始渲染流程
  • 其他 A2UI 标准消息类型

智能体控制

智能体可以通过 Gateway WebSocket 控制 Canvas,例如:

# 显示 Canvas 面板
openclaw nodes canvas present

# 更新 Canvas 内容
openclaw nodes canvas update --content "..."

# 隐藏 Canvas
openclaw nodes canvas dismiss

使用场景

  • 展示交互式数据可视化
  • 渲染动态 HTML/CSS/JS 内容
  • 显示 A2UI 消息生成的界面
  • 创建临时性的可视化工作区

安全机制

安全提示
  • Canvas 会阻止目录遍历 (../) 攻击
  • 只能访问指定的 canvas 目录内的文件
  • 外部 URL 需要显式用户导航才能访问

开发建议

  • 将 HTML 文件放置在 ~/Library/Application Support/OpenClaw/canvas/ 目录
  • 使用 openclaw-canvas:// 协议引用本地资源
  • 利用自动重载功能快速迭代开发
  • 遵循 A2UI v0.8 消息规范实现交互