From 4143bfaa2a2b6fbcc44fc48f2dcc487ae4823fbf Mon Sep 17 00:00:00 2001 From: pewdiepie-archdaemon Date: Sun, 28 Jun 2026 22:06:20 +0000 Subject: [PATCH] Clear stale chat stream indicators --- static/js/chat.js | 5 ++++- static/js/sessions.js | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/static/js/chat.js b/static/js/chat.js index af21badb4..713d85322 100644 --- a/static/js/chat.js +++ b/static/js/chat.js @@ -4141,7 +4141,10 @@ import { wireArrowUpRecall, getLastUserMessageFromChatHistory } from './composer if (!sessionId) return; try { const res = await fetch(`${API_BASE}/api/research/status/${sessionId}`); - if (!res.ok) return; // 404 = no research for this session + if (!res.ok) { + if (sessionModule && sessionModule.clearResearching) sessionModule.clearResearching(sessionId); + return; // 404 = no research for this session + } const data = await res.json(); if (data.status === 'done') { diff --git a/static/js/sessions.js b/static/js/sessions.js index 97326ceb7..e6a2bed4c 100644 --- a/static/js/sessions.js +++ b/static/js/sessions.js @@ -2433,6 +2433,17 @@ export function clearStreaming(sessionId) { _updateRailNotifs(); } +function _clearRunningState(sessionId) { + if (!sessionId) return; + var changed = false; + if (_researchingSessions.delete(sessionId)) changed = true; + if (_streamingSessions.delete(sessionId)) changed = true; + if (changed) { + _updateResearchDots(); + _updateRailNotifs(); + } +} + export function markStreamComplete(sessionId) { _researchingSessions.delete(sessionId); _streamingSessions.delete(sessionId); @@ -2503,9 +2514,15 @@ async function _checkServerStream(sessionId) { if (window.chatModule && window.chatModule.hasActiveStream && window.chatModule.hasActiveStream(sessionId)) return; const res = await fetch(`${API_BASE}/api/chat/stream_status/${sessionId}`); - if (!res.ok) return; // 404 = no active stream + if (!res.ok) { + _clearRunningState(sessionId); + return; // 404 = no active stream + } const info = await res.json(); - if (info.status !== 'streaming') return; + if (info.status !== 'streaming') { + _clearRunningState(sessionId); + return; + } // Skip if this is a research stream — research has its own progress UI if (info.mode === 'research' || info.is_research) return;