fix: route new prompt sync to target directory

Keeps optimistic prompt state in the session directory
Routes live assistant part updates using upstream event payloads
Adds regressions for startup session switch races
This commit is contained in:
Bohdan Triapitsyn
2026-06-04 13:32:16 +03:00
parent 5d7b5c89f2
commit e9d7f913d9
7 changed files with 169 additions and 32 deletions
+19 -6
View File
@@ -571,11 +571,21 @@ const getSessionIdFromPayload = (event: Event): string | null => {
}
if (event.type === "message.part.updated") {
const sessionID = props.sessionID
if (typeof sessionID === "string" && sessionID.length > 0) {
return sessionID
}
const part = props.part
if (!part || typeof part !== "object") {
return null
}
const sessionID = (part as { sessionID?: unknown }).sessionID
const partSessionID = (part as { sessionID?: unknown }).sessionID
return typeof partSessionID === "string" && partSessionID.length > 0 ? partSessionID : null
}
if (event.type === "message.part.delta" || event.type === "message.part.removed") {
const sessionID = props.sessionID
return typeof sessionID === "string" && sessionID.length > 0 ? sessionID : null
}
@@ -658,8 +668,8 @@ const getMessageIdFromPayload = (event: Event): string | null => {
if (!part || typeof part !== "object") {
return null
}
const messageID = (part as { messageID?: unknown }).messageID
return typeof messageID === "string" && messageID.length > 0 ? messageID : null
const partMessageID = (part as { messageID?: unknown }).messageID
return typeof partMessageID === "string" && partMessageID.length > 0 ? partMessageID : null
}
return null
@@ -957,9 +967,12 @@ const updateRoutingIndexFromEvent = (
}
case "message.part.updated": {
const part = (payload.properties as { part?: Part }).part as (Part & { sessionID?: string; messageID?: string }) | undefined
if (part?.messageID && part.sessionID) {
setIndexedMessage(routingIndex, part.sessionID, part.messageID, directory)
const props = payload.properties as { sessionID?: string; part?: Part }
const part = props.part as (Part & { sessionID?: string; messageID?: string }) | undefined
const sessionID = part?.sessionID ?? props.sessionID
const messageID = part?.messageID
if (messageID && sessionID) {
setIndexedMessage(routingIndex, sessionID, messageID, directory)
}
return
}