diff --git a/CHANGELOG.md b/CHANGELOG.md index 2444e1447..8809332bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Docs: https://docs.clawd.bot - BlueBubbles: keep part-index GUIDs in reply tags when short IDs are missing. - Web UI: hide internal `message_id` hints in chat bubbles. - Heartbeat: normalize target identifiers for consistent routing. +- TUI: reload history after gateway reconnect to restore session state. (#1663) - Telegram: use wrapped fetch for long-polling on Node to normalize AbortSignal handling. (#1639) - Exec: keep approvals for elevated ask unless full mode. (#1616) Thanks @ivancasco. - Agents: auto-compact on context overflow prompt errors before failing. (#1627) Thanks @rodrigouroz. diff --git a/src/tui/tui.ts b/src/tui/tui.ts index cf8341d59..31be58fd5 100644 --- a/src/tui/tui.ts +++ b/src/tui/tui.ts @@ -90,6 +90,7 @@ export async function runTui(opts: TuiOptions) { let activeChatRunId: string | null = null; let historyLoaded = false; let isConnected = false; + let wasDisconnected = false; let toolsExpanded = false; let showThinking = false; @@ -584,20 +585,18 @@ export async function runTui(opts: TuiOptions) { client.onConnected = () => { isConnected = true; + const reconnected = wasDisconnected; + wasDisconnected = false; setConnectionStatus("connected"); void (async () => { await refreshAgents(); updateHeader(); - if (!historyLoaded) { - await loadHistory(); - setConnectionStatus("gateway connected", 4000); - tui.requestRender(); - if (!autoMessageSent && autoMessage) { - autoMessageSent = true; - await sendMessage(autoMessage); - } - } else { - setConnectionStatus("gateway reconnected", 4000); + await loadHistory(); + setConnectionStatus(reconnected ? "gateway reconnected" : "gateway connected", 4000); + tui.requestRender(); + if (!autoMessageSent && autoMessage) { + autoMessageSent = true; + await sendMessage(autoMessage); } updateFooter(); tui.requestRender(); @@ -606,6 +605,8 @@ export async function runTui(opts: TuiOptions) { client.onDisconnected = (reason) => { isConnected = false; + wasDisconnected = true; + historyLoaded = false; const reasonLabel = reason?.trim() ? reason.trim() : "closed"; setConnectionStatus(`gateway disconnected: ${reasonLabel}`, 5000); setActivityStatus("idle");