diff --git a/src/server.ts b/src/server.ts index 1b155e3..7fd0fc1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -135,8 +135,26 @@ const server = Bun.serve({ start(controller) { ctrl = controller; sseClients.add(controller); - // Send initial headers + // Send initial connection acknowledgment controller.enqueue(": connected\n\n"); + + // Send current terminal state for all active sessions + for (const [sessionId, termSession] of sessionTerminals.entries()) { + const session = getSession(sessionId); + if (!session || session.ended_at) continue; + + // Serialize full terminal state as HTML + const html = serializeAsHTML(termSession); + + // Send as initial_state event + const event: SSEEvent = { + type: "initial_state", + session_id: sessionId, + html, + }; + const eventStr = `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`; + controller.enqueue(eventStr); + } }, cancel() { sseClients.delete(ctrl); diff --git a/src/types.ts b/src/types.ts index 551522c..aad26c8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -157,6 +157,7 @@ export type ServerMessage = // SSE events (Server -> Dashboard) export type SSEEvent = + | { type: "initial_state"; session_id: number; html: string } | { type: "session_start"; session_id: number;