openclaw - 💡(How to fix) Fix TUI: expose `streamingWatchdogMs` via config / CLI flag (handler already supports it, callsite hardcodes the default)

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…

The TUI streaming watchdog ("This response is taking longer than expected. Send another message to continue.") is hardcoded to 30 s at the callsite. The underlying handler already supports a configurable streamingWatchdogMs (with 0 to disable), but nothing in the TUI plumbing actually populates it, so there is no user-facing way to change or silence the notice.

Reproducing on [email protected], Linux, openclaw tui against the local embedded runtime with claude-cli/claude-opus-4-7. Any reply that takes >30 s of wall-clock silence triggers the notice. The 2026.5.20 changelog entry mentions the notice is dismissed as soon as a chat event arrives — but on long thinking turns it still surfaces for several seconds and clutters the TUI footer.

Root Cause

The TUI streaming watchdog ("This response is taking longer than expected. Send another message to continue.") is hardcoded to 30 s at the callsite. The underlying handler already supports a configurable streamingWatchdogMs (with 0 to disable), but nothing in the TUI plumbing actually populates it, so there is no user-facing way to change or silence the notice.

Reproducing on [email protected], Linux, openclaw tui against the local embedded runtime with claude-cli/claude-opus-4-7. Any reply that takes >30 s of wall-clock silence triggers the notice. The 2026.5.20 changelog entry mentions the notice is dismissed as soon as a chat event arrives — but on long thinking turns it still surfaces for several seconds and clutters the TUI footer.

Fix Action

Fix / Workaround

Users running long-thinking models (Opus 4.x, reasoning-heavy turns) get a misleading "send another message" suggestion when the model is just thinking, not actually stalled. Some environments (slow first-token, slow remote providers) also exceed 30 s normally. Having no escape hatch forces either a dist patch (gets overwritten on update) or living with the notice.

Workaround until fixed

Patch dist/tui-*.js to change DEFAULT_STREAMING_WATCHDOG_MS = 3e4 to 0 (disable) or a larger value. Lost on every npm i -g openclaw update.

Code Example

// line 2703
const DEFAULT_STREAMING_WATCHDOG_MS = 3e4;

// line 2714 — handler reads it from context
const streamingWatchdogMs =
  typeof context.streamingWatchdogMs === "number" &&
  Number.isFinite(context.streamingWatchdogMs) &&
  context.streamingWatchdogMs >= 0
    ? Math.floor(context.streamingWatchdogMs)
    : DEFAULT_STREAMING_WATCHDOG_MS;

// line 2733 — 0 disables
if (streamingWatchdogMs <= 0) return;

---

// dist/plugin-sdk/src/tui/tui-event-handlers.d.ts:42
/** Reset `streaming` after this much delta silence. Set to 0 to disable. */
streamingWatchdogMs?: number;

---

const { handleChatEvent, ... } = createEventHandlers({
  chatLog, btw, tui, state,
  localMode: isLocalMode,
  setActivityStatus,
  refreshSessionInfo,
  loadHistory,
  noteLocalRunId, isLocalRunId, forgetLocalRunId, clearLocalRunIds,
  isLocalBtwRunId, forgetLocalBtwRunId, clearLocalBtwRunIds,
  // streamingWatchdogMs: ???   <-- never wired in
});
RAW_BUFFERClick to expand / collapse

Summary

The TUI streaming watchdog ("This response is taking longer than expected. Send another message to continue.") is hardcoded to 30 s at the callsite. The underlying handler already supports a configurable streamingWatchdogMs (with 0 to disable), but nothing in the TUI plumbing actually populates it, so there is no user-facing way to change or silence the notice.

Reproducing on [email protected], Linux, openclaw tui against the local embedded runtime with claude-cli/claude-opus-4-7. Any reply that takes >30 s of wall-clock silence triggers the notice. The 2026.5.20 changelog entry mentions the notice is dismissed as soon as a chat event arrives — but on long thinking turns it still surfaces for several seconds and clutters the TUI footer.

What I found in the dist

dist/tui-LVkXuSWn.js already has all the plumbing:

// line 2703
const DEFAULT_STREAMING_WATCHDOG_MS = 3e4;

// line 2714 — handler reads it from context
const streamingWatchdogMs =
  typeof context.streamingWatchdogMs === "number" &&
  Number.isFinite(context.streamingWatchdogMs) &&
  context.streamingWatchdogMs >= 0
    ? Math.floor(context.streamingWatchdogMs)
    : DEFAULT_STREAMING_WATCHDOG_MS;

// line 2733 — 0 disables
if (streamingWatchdogMs <= 0) return;

And the public type already exposes it:

// dist/plugin-sdk/src/tui/tui-event-handlers.d.ts:42
/** Reset `streaming` after this much delta silence. Set to 0 to disable. */
streamingWatchdogMs?: number;

But the only call to createEventHandlers in the TUI (line 4443) never sets it:

const { handleChatEvent, ... } = createEventHandlers({
  chatLog, btw, tui, state,
  localMode: isLocalMode,
  setActivityStatus,
  refreshSessionInfo,
  loadHistory,
  noteLocalRunId, isLocalRunId, forgetLocalRunId, clearLocalRunIds,
  isLocalBtwRunId, forgetLocalBtwRunId, clearLocalBtwRunIds,
  // streamingWatchdogMs: ???   <-- never wired in
});

So the value defaults to 30 000 ms unconditionally and no config.schema key or CLI flag changes it.

Proposed fix

Wire one of these (ideally both) into the TUI bootstrap:

  1. Config key tui.streamingWatchdogMs (number, default 30000, 0 disables). Exposed via gateway action config.schema.lookup for parity with other TUI/timeout settings.
  2. CLI flag --watchdog-ms <ms> on openclaw tui (sibling of the existing --timeout-ms). 0 disables.

Both should funnel into the existing streamingWatchdogMs context field so the handler already does the right thing.

Why

Users running long-thinking models (Opus 4.x, reasoning-heavy turns) get a misleading "send another message" suggestion when the model is just thinking, not actually stalled. Some environments (slow first-token, slow remote providers) also exceed 30 s normally. Having no escape hatch forces either a dist patch (gets overwritten on update) or living with the notice.

Workaround until fixed

Patch dist/tui-*.js to change DEFAULT_STREAMING_WATCHDOG_MS = 3e4 to 0 (disable) or a larger value. Lost on every npm i -g openclaw update.

Environment

  • [email protected]
  • Linux 6.8.0-117-generic, Node v24.15.0
  • Model: claude-cli/claude-opus-4-7 via local embedded runtime

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