Skip to content

Commit 1df6226

Browse files
authored
TUI: simplify stale response notice (#77120)
1 parent a9d77b3 commit 1df6226

3 files changed

Lines changed: 10 additions & 12 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ Docs: https://docs.openclaw.ai
385385
- Plugins/update: keep externalized bundled npm bridge updates on the normal plugin security scanner path instead of granting source-linked official trust without artifact provenance. (#76765) Thanks @Lucenx9.
386386
- Agents/reply context: label replied-to messages as the current user message target in model-visible metadata, so short replies are grounded to their explicit reply target instead of nearby chat history. (#76817) Thanks @obviyus.
387387
- Doctor/plugins: install configured missing official plugins such as Discord and Brave during doctor/update repair, auto-enable repaired provider plugins, preserve config when a download fails, and stop auto-enable from inventing plugin entries when no manifest declares a configured channel. Fixes #76872. Thanks @jack-stormentswe.
388+
- TUI: replace the stale-response watchdog notice with plain user-facing copy so stalled replies no longer surface backend or streaming internals.
388389

389390
## 2026.5.2
390391

src/tui/tui-event-handlers.test.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,9 @@ describe("tui-event-handlers: handleAgentEvent", () => {
894894
});
895895

896896
describe("tui-event-handlers: streaming watchdog", () => {
897+
const expectedTimeoutMessage =
898+
"This response is taking longer than expected. Send another message to continue.";
899+
897900
beforeEach(() => {
898901
vi.useFakeTimers();
899902
});
@@ -971,7 +974,7 @@ describe("tui-event-handlers: streaming watchdog", () => {
971974

972975
expect(setActivityStatus).toHaveBeenLastCalledWith("idle");
973976
expect(state.activeChatRunId).toBeNull();
974-
expect(chatLog.addSystem).toHaveBeenCalledWith(expect.stringContaining("streaming watchdog"));
977+
expect(chatLog.addSystem).toHaveBeenCalledWith(expectedTimeoutMessage);
975978

976979
handlers.dispose?.();
977980
});
@@ -1177,9 +1180,7 @@ describe("tui-event-handlers: streaming watchdog", () => {
11771180
expect(setActivityStatus).toHaveBeenLastCalledWith("idle");
11781181
expect(state.activeChatRunId).toBeNull();
11791182
expect(loadHistory).toHaveBeenCalledTimes(1);
1180-
expect(chatLog.addSystem).not.toHaveBeenCalledWith(
1181-
expect.stringContaining("streaming watchdog"),
1182-
);
1183+
expect(chatLog.addSystem).not.toHaveBeenCalledWith(expectedTimeoutMessage);
11831184

11841185
handlers.dispose?.();
11851186
});
@@ -1206,9 +1207,7 @@ describe("tui-event-handlers: streaming watchdog", () => {
12061207

12071208
const statusCalls = setActivityStatus.mock.calls.map((c) => c[0]);
12081209
expect(statusCalls.filter((s) => s === "idle").length).toBe(1);
1209-
expect(chatLog.addSystem).not.toHaveBeenCalledWith(
1210-
expect.stringContaining("streaming watchdog"),
1211-
);
1210+
expect(chatLog.addSystem).not.toHaveBeenCalledWith(expectedTimeoutMessage);
12121211
expect(state.activeChatRunId).toBeNull();
12131212

12141213
handlers.dispose?.();

src/tui/tui-event-handlers.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ type EventHandlerContext = {
4949
};
5050

5151
const DEFAULT_STREAMING_WATCHDOG_MS = 30_000;
52+
const STREAMING_WATCHDOG_USER_MESSAGE =
53+
"This response is taking longer than expected. Send another message to continue.";
5254

5355
export function createEventHandlers(context: EventHandlerContext) {
5456
const {
@@ -129,11 +131,7 @@ export function createEventHandlers(context: EventHandlerContext) {
129131
return;
130132
}
131133
flushPendingHistoryRefreshIfIdle();
132-
chatLog.addSystem(
133-
`streaming watchdog: no stream updates for ${Math.round(
134-
streamingWatchdogMs / 1000,
135-
)}s; resetting status. The backend may have dropped this run silently — send a new message to resync.`,
136-
);
134+
chatLog.addSystem(STREAMING_WATCHDOG_USER_MESSAGE);
137135
tui.requestRender();
138136
}, streamingWatchdogMs);
139137
const maybeUnref = (streamingWatchdogTimer as { unref?: () => void }).unref;

0 commit comments

Comments
 (0)