diff --git a/src/server.ts b/src/server.ts index 71f7485..8822cbb 100644 --- a/src/server.ts +++ b/src/server.ts @@ -727,4 +727,20 @@ setInterval(() => { // Periodic persistence of dirty session states (every 5s) setInterval(persistDirtySessions, 5000); +// Periodic cleanup for orphaned terminals (every 5 minutes) +// Handles cases where session ended but WebSocket didn't close properly +setInterval( + () => { + for (const [sessionId, termSession] of sessionTerminals.entries()) { + const session = getSession(sessionId); + if (session?.ended_at) { + console.debug(`Cleaning up orphaned terminal for session ${sessionId}`); + disposeTerminal(termSession); + sessionTerminals.delete(sessionId); + } + } + }, + 5 * 60 * 1000, +); + export { server };