openclaw - 💡(How to fix) Fix [TUI] Assistant messages don't render until /verbose on/off — handleChatEvent early-returns skip requestRender(true)

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…

In OpenClaw 5.22, streamed assistant messages occasionally finish but never paint to screen in the TUI. The workaround is toggling /verbose on then /verbose off, which forces a full repaint.

Root Cause

handleChatEvent in the TUI bundle has three early-return paths (lines 2949, 2960, 2972 in tui-LVkXuSWn.js) that call tui.requestRender() without the true flag. The pi-tui differential renderer (requestRender() without args) compares against previousLines and sometimes computes no visible diff, skipping the paint entirely. requestRender(true) resets diff state and forces a full repaint.

The three early-return cases are:

  • state === "final" with no message + local BTW run (line 2949)
  • state === "final" with no message (line 2960)
  • state === "final" with a command message (line 2972)

Fix Action

Fix / Workaround

In OpenClaw 5.22, streamed assistant messages occasionally finish but never paint to screen in the TUI. The workaround is toggling /verbose on then /verbose off, which forces a full repaint.

Workaround (local patch)

RAW_BUFFERClick to expand / collapse

Summary

In OpenClaw 5.22, streamed assistant messages occasionally finish but never paint to screen in the TUI. The workaround is toggling /verbose on then /verbose off, which forces a full repaint.

Root cause

handleChatEvent in the TUI bundle has three early-return paths (lines 2949, 2960, 2972 in tui-LVkXuSWn.js) that call tui.requestRender() without the true flag. The pi-tui differential renderer (requestRender() without args) compares against previousLines and sometimes computes no visible diff, skipping the paint entirely. requestRender(true) resets diff state and forces a full repaint.

The three early-return cases are:

  • state === "final" with no message + local BTW run (line 2949)
  • state === "final" with no message (line 2960)
  • state === "final" with a command message (line 2972)

Workaround (local patch)

Change all three tui.requestRender() calls inside handleChatEvent to tui.requestRender(true).

This bug has also been reported upstream against pi-tui: earendil-works/pi#4970

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 [TUI] Assistant messages don't render until /verbose on/off — handleChatEvent early-returns skip requestRender(true)