feat(ui): hydrate session diffs on open

Fetch session-level diffs when a session is opened and keep them updated via session.diff SSE events so UI state stays in sync with server changes.
This commit is contained in:
Shantur Rathore
2026-02-09 12:02:15 +00:00
parent 0e755b721c
commit 4279b25ff4
5 changed files with 88 additions and 0 deletions

View File

@@ -9,6 +9,7 @@ import type {
EventLspUpdated,
EventSessionCompacted,
EventSessionDiff,
EventSessionError,
EventSessionIdle,
EventSessionUpdated,
@@ -59,8 +60,10 @@ type SSEEvent =
| MessagePartRemovedEvent
| EventSessionUpdated
| EventSessionCompacted
| EventSessionDiff
| EventSessionError
| EventSessionIdle
| EventSessionStatus
| { type: "permission.updated" | "permission.asked"; properties?: any }
| { type: "permission.replied"; properties?: any }
| { type: "question.asked"; properties?: any }
@@ -139,6 +142,9 @@ class SSEManager {
case "session.status":
this.onSessionStatus?.(instanceId, event as EventSessionStatus)
break
case "session.diff":
this.onSessionDiff?.(instanceId, event as EventSessionDiff)
break
case "permission.updated":
case "permission.asked":
this.onPermissionUpdated?.(instanceId, event as any)
@@ -185,6 +191,7 @@ class SSEManager {
onTuiToast?: (instanceId: string, event: TuiToastEvent) => void
onSessionIdle?: (instanceId: string, event: EventSessionIdle) => void
onSessionStatus?: (instanceId: string, event: EventSessionStatus) => void
onSessionDiff?: (instanceId: string, event: EventSessionDiff) => void
onPermissionUpdated?: (instanceId: string, event: any) => void
onPermissionReplied?: (instanceId: string, event: any) => void
onQuestionAsked?: (instanceId: string, event: any) => void