WKWebView を使ってエージェント制御の Canvas パネルを埋め込みます。これは HTML/CSS/JS、A2UI、小さなインタラクティブ UI サーフェス向けの軽量なビジュアルワークスペースです。
Canvas の場所
Canvas の状態は Application Support 配下に保存されます。~/Library/Application Support/OpenClaw/canvas/<session>/...
openclaw-canvas://<session>/<path> 経由でそれらのファイルを提供します。
openclaw-canvas://main/-><canvasRoot>/main/index.htmlopenclaw-canvas://main/assets/app.css-><canvasRoot>/main/assets/app.cssopenclaw-canvas://main/widgets/todo/-><canvasRoot>/main/widgets/todo/index.html
index.html が存在しない場合、アプリは組み込みのスキャフォールドページを表示します。
パネルの動作
- メニューバー(またはマウスカーソル)の近くに固定される、枠なしでサイズ変更可能なパネル。
- セッションごとにサイズと位置を記憶します。
- ローカルの Canvas ファイルが変更されると自動リロードします。
- 表示される Canvas パネルは一度に 1 つだけです(必要に応じてセッションが切り替わります)。
CANVAS_DISABLED を返します。
エージェント API サーフェス
Canvas は Gateway WebSocket 経由で公開されるため、エージェントはパネルの表示/非表示、パスまたは URL へのナビゲーション、JavaScript の評価、スナップショット画像のキャプチャを実行できます。canvas.navigate は、ローカル Canvas パス、http(s) URL、file:// URL を受け付けます。"/" を渡すと、ローカルのスキャフォールドまたは index.html が表示されます。
Canvas の A2UI
A2UI は Gateway canvas ホストによってホストされ、Canvas パネル内にレンダリングされます。Gateway が Canvas ホストをアドバタイズすると、macOS アプリは初回オープン時に A2UI ホストページへ自動で移動します。 デフォルトの A2UI ホスト URL:http://<gateway-host>:18789/__openclaw__/a2ui/
A2UI コマンド (v0.8)
Canvas は A2UI v0.8 のサーバーからクライアントへのメッセージを受け付けます:beginRendering, surfaceUpdate, dataModelUpdate, deleteSurface。createSurface (v0.9) はまだサポートされていません。
Canvas からエージェント実行をトリガーする
Canvas はopenclaw://agent?... ディープリンク経由で新しいエージェント実行をトリガーできます。
| パラメーター | 意味 |
|---|---|
message | 事前入力されるエージェントプロンプト。 |
sessionKey | 安定したセッション識別子。 |
thinking | 任意の thinking プロファイル。 |
deliver, to, channel | 配信先。 |
timeoutSeconds | 任意の実行タイムアウト。 |
key | 信頼済みローカル呼び出し元向けにアプリが生成する安全トークン。 |
セキュリティメモ
- Canvas スキームはディレクトリトラバーサルをブロックします。ファイルはセッションルート配下に存在する必要があります。
- ローカル Canvas コンテンツはカスタムスキームを使用します(ループバックサーバー不要)。
- 外部
http(s)URL は、明示的にナビゲートされた場合にのみ許可されます。