fix(dashboard): close SSE connections on outbound backpressure

The global SSE broadcast called res.write() without checking the return
value, so a paused or backgrounded client would silently accumulate
every store event for every entity (tasks, missions, plugins, agents,
chat, ...) into res.outputData until the dashboard process OOMed.
Add a 4 MB writableLength threshold; when exceeded, tear down the
connection so the OS releases the buffer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Fusion
2026-04-24 22:02:40 -07:00
committed by gsxdsm
parent 4b95ada290
commit bafad3d45a
6 changed files with 142 additions and 8 deletions

View File

@@ -0,0 +1,24 @@
interface BackendConnectionErrorPageProps {
errorMessage: string;
isRetrying: boolean;
onRetry: () => void;
}
export function BackendConnectionErrorPage({
errorMessage,
isRetrying,
onRetry,
}: BackendConnectionErrorPageProps) {
return (
<div className="project-overview-empty" role="alert" aria-live="polite">
<h2>Can&apos;t reach the Fusion backend</h2>
<p className="settings-muted">
Fusion couldn&apos;t load your projects right now. Please make sure the backend is running and try again.
</p>
<p className="settings-muted">Error: {errorMessage}</p>
<button type="button" className="btn btn-primary" onClick={onRetry} disabled={isRetrying}>
{isRetrying ? "Retrying…" : "Retry Connection"}
</button>
</div>
);
}