Fix revert/undo state synchronization and message cleanup

- Clear session.revert when server sends undefined (fixes inability to send messages after revert)
- Handle message.removed and message.part.removed SSE events to reload messages
- Ensures reverted messages are removed from UI in real-time without requiring app restart
This commit is contained in:
Shantur Rathore
2025-10-24 18:21:11 +01:00
parent d7e3ae4624
commit e58462b926
2 changed files with 27 additions and 1 deletions

View File

@@ -89,6 +89,12 @@ class SSEManager {
case "message.part.updated":
this.onMessageUpdate?.(instanceId, event)
break
case "message.removed":
this.onMessageRemoved?.(instanceId, event)
break
case "message.part.removed":
this.onMessagePartRemoved?.(instanceId, event)
break
case "session.updated":
this.onSessionUpdate?.(instanceId, event)
break
@@ -136,6 +142,8 @@ class SSEManager {
}
onMessageUpdate?: (instanceId: string, event: MessageUpdateEvent) => void
onMessageRemoved?: (instanceId: string, event: any) => void
onMessagePartRemoved?: (instanceId: string, event: any) => void
onSessionUpdate?: (instanceId: string, event: SessionUpdateEvent) => void
onSessionCompacted?: (instanceId: string, event: any) => void
onSessionError?: (instanceId: string, event: any) => void

View File

@@ -666,7 +666,7 @@ function handleSessionUpdate(instanceId: string, event: any): void {
snapshot: info.revert.snapshot,
diff: info.revert.diff,
}
: existingSession.revert,
: undefined,
}
setSessions((prev) => {
@@ -875,7 +875,25 @@ function handleSessionError(instanceId: string, event: any): void {
alert(`Error: ${message}`)
}
function handleMessageRemoved(instanceId: string, event: any): void {
const sessionID = event.properties?.sessionID
if (!sessionID) return
console.log(`[SSE] Message removed from session ${sessionID}, reloading messages`)
loadMessages(instanceId, sessionID, true).catch(console.error)
}
function handleMessagePartRemoved(instanceId: string, event: any): void {
const sessionID = event.properties?.sessionID
if (!sessionID) return
console.log(`[SSE] Message part removed from session ${sessionID}, reloading messages`)
loadMessages(instanceId, sessionID, true).catch(console.error)
}
sseManager.onMessageUpdate = handleMessageUpdate
sseManager.onMessageRemoved = handleMessageRemoved
sseManager.onMessagePartRemoved = handleMessagePartRemoved
sseManager.onSessionUpdate = handleSessionUpdate
sseManager.onSessionCompacted = handleSessionCompacted
sseManager.onSessionError = handleSessionError