openclaw - 💡(How to fix) Fix TUI streaming watchdog message has no config knob to disable

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 prints a chat-log nudge — "This response is taking longer than expected. Send another message to continue." — when a Claude stream is idle for 30s. The default interval (DEFAULT_STREAMING_WATCHDOG_MS = 3e4) is hardcoded; the relevant code accepts a context.streamingWatchdogMs override but no caller passes it, the zod config schema exposes no streamingWatchdogMs field, and there is no env var override. For long streaming tool runs the message creates noise in the user's chat log and suggests an interaction the user does not want to perform.

Root Cause

The TUI prints a chat-log nudge — "This response is taking longer than expected. Send another message to continue." — when a Claude stream is idle for 30s. The default interval (DEFAULT_STREAMING_WATCHDOG_MS = 3e4) is hardcoded; the relevant code accepts a context.streamingWatchdogMs override but no caller passes it, the zod config schema exposes no streamingWatchdogMs field, and there is no env var override. For long streaming tool runs the message creates noise in the user's chat log and suggests an interaction the user does not want to perform.

Fix Action

Workaround

Patch DEFAULT_STREAMING_WATCHDOG_MS = 3e4 to = 0 in dist/tui-*.js. This is wiped by every openclaw update, so a local post-update reapply hook is currently required.

Code Example

const DEFAULT_STREAMING_WATCHDOG_MS = 3e4;
const STREAMING_WATCHDOG_USER_MESSAGE = "This response is taking longer than expected. Send another message to continue.";
function createEventHandlers(context) {
  ...
  const streamingWatchdogMs =
    typeof context.streamingWatchdogMs === "number" && Number.isFinite(context.streamingWatchdogMs) && context.streamingWatchdogMs >= 0
      ? Math.floor(context.streamingWatchdogMs)
      : DEFAULT_STREAMING_WATCHDOG_MS;
  ...
  const armStreamingWatchdog = (runId) => {
    if (streamingWatchdogMs <= 0) return;
    ...
  };
}
RAW_BUFFERClick to expand / collapse

Summary

The TUI prints a chat-log nudge — "This response is taking longer than expected. Send another message to continue." — when a Claude stream is idle for 30s. The default interval (DEFAULT_STREAMING_WATCHDOG_MS = 3e4) is hardcoded; the relevant code accepts a context.streamingWatchdogMs override but no caller passes it, the zod config schema exposes no streamingWatchdogMs field, and there is no env var override. For long streaming tool runs the message creates noise in the user's chat log and suggests an interaction the user does not want to perform.

Version

[email protected] (npm-managed install).

Reproduce

  1. Use any agent in the TUI where a Claude stream goes quiet for 30+ seconds (e.g. a slow tool call).
  2. Observe the nudge appended into the chat log.
  3. Confirm no documented config or env var disables it: zod schema has no streamingWatchdogMs, and process.env.*WATCHDOG* is only used by an unrelated session-lock test flag.

Code reference

dist/tui-*.js in the tui-event-handlers region:

const DEFAULT_STREAMING_WATCHDOG_MS = 3e4;
const STREAMING_WATCHDOG_USER_MESSAGE = "This response is taking longer than expected. Send another message to continue.";
function createEventHandlers(context) {
  ...
  const streamingWatchdogMs =
    typeof context.streamingWatchdogMs === "number" && Number.isFinite(context.streamingWatchdogMs) && context.streamingWatchdogMs >= 0
      ? Math.floor(context.streamingWatchdogMs)
      : DEFAULT_STREAMING_WATCHDOG_MS;
  ...
  const armStreamingWatchdog = (runId) => {
    if (streamingWatchdogMs <= 0) return;
    ...
  };
}

The <= 0 guard already lets a caller opt out, but nothing in the public config surface lets a user pass 0.

Proposed fix

Two reasonable options:

  1. Schema knob (preferred). Add an optional tui.streamingWatchdogMs: number (or ui.streamingWatchdog.intervalMs) to the zod config schema, then read it where createEventHandlers(context) is invoked and thread it into context.streamingWatchdogMs. 0 disables.
  2. Env var. Honor OPENCLAW_TUI_STREAMING_WATCHDOG_MS (numeric) at the call site that builds context for the event handlers.

Either change is a 1–3 line addition; both keep the current default behavior for users who do not opt in/out.

Workaround

Patch DEFAULT_STREAMING_WATCHDOG_MS = 3e4 to = 0 in dist/tui-*.js. This is wiped by every openclaw update, so a local post-update reapply hook is currently required.

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 streaming watchdog message has no config knob to disable