fix: recover stuck live session updates

Reconnects and resyncs active sessions when live updates stall
Normalizes synthetic session status events
Uses authoritative status snapshots to clear stale busy states
This commit is contained in:
Bohdan Triapitsyn
2026-05-24 19:17:04 +03:00
parent c4956af565
commit 0c8301d579
6 changed files with 333 additions and 76 deletions
@@ -96,4 +96,43 @@ describe("createEventPipeline", () => {
return `updated:${((event.properties as { part: { text: string } }).part).text}`
})).toEqual(["updated:a", "delta:b", "updated:ab"])
})
test("normalizes openchamber session status events", async () => {
let resolveStreamFinished!: () => void
const streamFinished = new Promise<void>((resolve) => {
resolveStreamFinished = resolve
})
let resolveDelivered!: (event: Event) => void
const deliveredEvent = new Promise<Event>((resolve) => {
resolveDelivered = resolve
})
const pipeline = createEventPipeline({
sdk: createSdk([
{
type: "openchamber:session-status",
properties: {
sessionID: "ses_1",
status: "idle",
},
} as unknown as Event,
], resolveStreamFinished),
onEvent: (_directory, payload) => {
resolveDelivered(payload)
},
transport: "sse",
heartbeatTimeoutMs: 1_000,
})
try {
await streamFinished
const delivered = await Promise.race([deliveredEvent, failAfter(500)])
expect(delivered.type).toBe("session.status")
expect(delivered.properties).toEqual({
sessionID: "ses_1",
status: { type: "idle" },
})
} finally {
pipeline.cleanup()
}
})
})