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:
@@ -339,13 +339,15 @@ export function applyDirectoryEvent(
|
||||
}
|
||||
|
||||
case "message.part.updated": {
|
||||
const part = (event.properties as { part: Part }).part
|
||||
const props = event.properties as { sessionID?: string; part: Part }
|
||||
const part = props.part
|
||||
if (SKIP_PARTS.has(part.type)) {
|
||||
syncDebug.reducer.partSkipped((part as { messageID: string }).messageID, part.id, part.type)
|
||||
return false
|
||||
}
|
||||
const messageID = (part as { messageID: string }).messageID
|
||||
const sessionID = (part as { sessionID?: string }).sessionID
|
||||
const messageID = (part as { messageID?: string }).messageID
|
||||
const sessionID = props.sessionID ?? (part as { sessionID?: string }).sessionID
|
||||
if (!messageID) return false
|
||||
const missingOwningMessage = !hasMessage(draft, sessionID, messageID)
|
||||
const parts = draft.part[messageID]
|
||||
if (!parts) {
|
||||
@@ -413,6 +415,7 @@ export function applyDirectoryEvent(
|
||||
|
||||
case "message.part.delta": {
|
||||
const props = event.properties as {
|
||||
sessionID?: string
|
||||
messageID: string
|
||||
partID: string
|
||||
field: string
|
||||
@@ -423,7 +426,7 @@ export function applyDirectoryEvent(
|
||||
syncDebug.reducer.partDeltaNoParts(props.messageID, props.partID)
|
||||
return {
|
||||
changed: false,
|
||||
materialization: { type: "incomplete-session-snapshot", messageID: props.messageID, partID: props.partID },
|
||||
materialization: { type: "incomplete-session-snapshot", sessionID: props.sessionID, messageID: props.messageID, partID: props.partID },
|
||||
}
|
||||
}
|
||||
const result = Binary.search(parts, props.partID, (p) => p.id)
|
||||
@@ -431,7 +434,7 @@ export function applyDirectoryEvent(
|
||||
syncDebug.reducer.partDeltaNotFound(props.messageID, props.partID)
|
||||
return {
|
||||
changed: false,
|
||||
materialization: { type: "incomplete-session-snapshot", messageID: props.messageID, partID: props.partID },
|
||||
materialization: { type: "incomplete-session-snapshot", sessionID: props.sessionID, messageID: props.messageID, partID: props.partID },
|
||||
}
|
||||
}
|
||||
const existing = parts[result.index] as Record<string, unknown>
|
||||
|
||||
Reference in New Issue
Block a user