diff --git a/static/js/sse.js b/static/js/sse.js index a73abbb..7039c98 100644 --- a/static/js/sse.js +++ b/static/js/sse.js @@ -41,6 +41,7 @@ const SSE = { const decoder = new TextDecoder(); let buffer = ''; let currentEvent = ''; + let doneReceived = false; while (true) { const { done, value } = await reader.read(); @@ -62,6 +63,9 @@ const SSE = { data = raw; } + // Track explicit done event from backend + if (currentEvent === 'done') doneReceived = true; + // Call the matching handler if (currentEvent && handlers[currentEvent]) { handlers[currentEvent](data); @@ -70,8 +74,8 @@ const SSE = { } } - // Stream ended - if (handlers.done) handlers.done(); + // Stream ended — only fire done if backend didn't send an explicit one + if (handlers.done && !doneReceived) handlers.done(); } catch (err) { if (err.name === 'AbortError') return; if (handlers.error) handlers.error({ message: err.message });