openclaw - 💡(How to fix) Fix [Bug] macOS Companion App: Canvas A2UI push returns ok but renders completely blank (regression of #7143) [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#73337Fetched 2026-04-29 06:20:49
View on GitHub
Comments
1
Participants
2
Timeline
1
Reactions
1
Author
Timeline (top)
commented ×1

On macOS Companion App Canvas, pushing A2UI content via canvas a2ui_push returns { ok: true } from the gateway, but the Canvas (A2UI) window stays completely blank — no rendered content, no "Waiting for A2UI message" placeholder, just the empty gradient background.

Reproducible on OpenClaw 2026.4.24 (commit cbcfdf6), macOS Companion App 2026.4.24.

This appears to be a regression / still-living variant of the previously closed-as-stale issues #7143 and #22292. Filing fresh because the environment, version, and exact symptoms differ slightly from the older reports, and because side-by-side controlled testing isolates the failure cleanly to the A2UI render layer (not transport, not node connectivity, not WebView).

Error Message

  1. Canvas window stays blank — no text, no placeholder, no error UI.

Root Cause

This appears to be a regression / still-living variant of the previously closed-as-stale issues #7143 and #22292. Filing fresh because the environment, version, and exact symptoms differ slightly from the older reports, and because side-by-side controlled testing isolates the failure cleanly to the A2UI render layer (not transport, not node connectivity, not WebView).

Fix Action

Workaround

Render the same A2UI bundle as a WebChat hosted embed:

~/.openclaw/canvas/documents/<doc-id>/
├── a2ui.bundle.js   (copied from dist/canvas-host/a2ui/)
└── index.html       (mounts <openclaw-a2ui-host> + calls window.openclawA2UI.applyMessages([...]))

Embedded in WebChat with [embed ref="<doc-id>" ... /]. This path renders correctly and even supports user actions back to the chat session, which further confirms the bundle itself is healthy and the regression is isolated to the macOS App container.

Code Example

{"surfaceUpdate":{"surfaceId":"main","components":[{"id":"hello","component":{"Text":{"text":{"literalString":"hello"},"usageHint":"h1"}}}]}}
   {"beginRendering":{"surfaceId":"main","root":"hello"}}

---

~/.openclaw/canvas/documents/<doc-id>/
├── a2ui.bundle.js   (copied from dist/canvas-host/a2ui/)
└── index.html       (mounts <openclaw-a2ui-host> + calls window.openclawA2UI.applyMessages([...]))
RAW_BUFFERClick to expand / collapse

Summary

On macOS Companion App Canvas, pushing A2UI content via canvas a2ui_push returns { ok: true } from the gateway, but the Canvas (A2UI) window stays completely blank — no rendered content, no "Waiting for A2UI message" placeholder, just the empty gradient background.

Reproducible on OpenClaw 2026.4.24 (commit cbcfdf6), macOS Companion App 2026.4.24.

This appears to be a regression / still-living variant of the previously closed-as-stale issues #7143 and #22292. Filing fresh because the environment, version, and exact symptoms differ slightly from the older reports, and because side-by-side controlled testing isolates the failure cleanly to the A2UI render layer (not transport, not node connectivity, not WebView).

Controlled comparison (same node, same session, ~30s apart)

TestTool callGateway resultCanvas window
A2UI push (minimal Text component)canvas a2ui_push{ ok: true }❌ blank gradient, no content, no placeholder
Navigate to a regular URLcanvas navigate to https://github.com/<user>{ ok: true }✅ page renders correctly

Same Mac, same paired node, both calls return success on the gateway side. Only the A2UI surface fails to render.

Reproduction

  1. Pair a macOS Companion App node (status: paired · connected, caps include canvas).
  2. Open the Canvas window from the Mac App; it shows the empty gradient background.
  3. From the gateway host, push minimal A2UI content:
    {"surfaceUpdate":{"surfaceId":"main","components":[{"id":"hello","component":{"Text":{"text":{"literalString":"hello"},"usageHint":"h1"}}}]}}
    {"beginRendering":{"surfaceId":"main","root":"hello"}}
  4. Gateway returns { ok: true }.
  5. Canvas window stays blank — no text, no placeholder, no error UI.
  6. As a control, push a canvas navigate to any HTTPS URL on the same node — the WebView loads the page normally, confirming the transport and WebView are healthy.

Severity

High UX, low data risk. The A2UI feature is effectively unusable on the macOS Companion App; users must fall back to the WebChat hosted-embed path to render any A2UI surfaces. Gateway-side state and transcripts are unaffected.

Where (suspected)

The render path lives behind dist/canvas-host/a2ui/a2ui.bundle.js inside the Mac App's WebView. The gateway-side push protocol (surfaceUpdate / beginRendering) is identical to the one that works correctly when the same bundle is loaded as a hosted embed inside WebChat — only the macOS App container path fails. So the failure is most likely in the Mac App's bridge/host wiring around <openclaw-a2ui-host> (e.g. applyMessages not being called with the pushed payload, or the surfaces store not being populated before the host's connectedCallback runs).

This is consistent with #7143 (Canvas stuck waiting despite successful push) and the bridge-layer hypothesis in #22292, but in this build there is no "Waiting for A2UI message" placeholder anymore — the surface stays entirely empty, which suggests the host element may not be mounting at all, or is mounting before any messages arrive and never receiving a follow-up applyMessages call.

Workaround

Render the same A2UI bundle as a WebChat hosted embed:

~/.openclaw/canvas/documents/<doc-id>/
├── a2ui.bundle.js   (copied from dist/canvas-host/a2ui/)
└── index.html       (mounts <openclaw-a2ui-host> + calls window.openclawA2UI.applyMessages([...]))

Embedded in WebChat with [embed ref="<doc-id>" ... /]. This path renders correctly and even supports user actions back to the chat session, which further confirms the bundle itself is healthy and the regression is isolated to the macOS App container.

Environment

  • OpenClaw 2026.4.24 (cbcfdf6)
  • macOS Companion App 2026.4.24 (hw: Mac14,7, ui: 2026.4.24)
  • macOS, Apple Silicon
  • Single paired node, status paired · connected, caps browser, camera, canvas, screen
  • Reproduced live on 2026-04-28; not a one-off

Happy to provide additional sanitized diagnostics (full nodes status, full JSONL payload, console logs from the WebView) if it helps.

extent analysis

TL;DR

The issue can be worked around by rendering the A2UI bundle as a WebChat hosted embed, suggesting a problem with the Mac App's bridge/host wiring.

Guidance

  • Verify that the applyMessages function is being called with the pushed payload in the Mac App's bridge/host wiring.
  • Check if the surfaces store is being populated before the host's connectedCallback runs.
  • Inspect the console logs from the WebView for any errors related to the <openclaw-a2ui-host> element.
  • Compare the rendering of the A2UI bundle in the Mac App with the rendering in the WebChat hosted embed to identify any differences in the environment or configuration.

Example

No code snippet is provided as the issue is more related to the environment and configuration rather than a specific code problem.

Notes

The issue seems to be isolated to the Mac App container and not a problem with the A2UI bundle itself, as it renders correctly when embedded in WebChat. The fact that there is no "Waiting for A2UI message" placeholder anymore suggests that the host element may not be mounting at all, or is mounting before any messages arrive.

Recommendation

Apply the workaround of rendering the A2UI bundle as a WebChat hosted embed, as it has been confirmed to render correctly and support user actions back to the chat session. This will allow users to use the A2UI feature while the issue with the Mac App container is being investigated and fixed.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Bug] macOS Companion App: Canvas A2UI push returns ok but renders completely blank (regression of #7143) [1 comments, 2 participants]