Skip to content

Commit 68cf011

Browse files
committed
fix(app): ignore stale part deltas
1 parent f8cfb69 commit 68cf011

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

packages/app/src/context/global-sdk.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,12 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
4949
let queue: Queued[] = []
5050
let buffer: Queued[] = []
5151
const coalesced = new Map<string, number>()
52+
const staleDeltas = new Set<string>()
5253
let timer: ReturnType<typeof setTimeout> | undefined
5354
let last = 0
5455

56+
const deltaKey = (directory: string, messageID: string, partID: string) => `${directory}:${messageID}:${partID}`
57+
5558
const key = (directory: string, payload: Event) => {
5659
if (payload.type === "session.status") return `session.status:${directory}:${payload.properties.sessionID}`
5760
if (payload.type === "lsp.updated") return `lsp.updated:${directory}`
@@ -68,14 +71,20 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
6871
if (queue.length === 0) return
6972

7073
const events = queue
74+
const skip = staleDeltas.size > 0 ? new Set(staleDeltas) : undefined
7175
queue = buffer
7276
buffer = events
7377
queue.length = 0
7478
coalesced.clear()
79+
staleDeltas.clear()
7580

7681
last = Date.now()
7782
batch(() => {
7883
for (const event of events) {
84+
if (skip && event.payload.type === "message.part.delta") {
85+
const props = event.payload.properties
86+
if (skip.has(deltaKey(event.directory, props.messageID, props.partID))) continue
87+
}
7988
emitter.emit(event.directory, event.payload)
8089
}
8190
})
@@ -144,6 +153,10 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
144153
const i = coalesced.get(k)
145154
if (i !== undefined) {
146155
queue[i] = { directory, payload }
156+
if (payload.type === "message.part.updated") {
157+
const part = payload.properties.part
158+
staleDeltas.add(deltaKey(directory, part.messageID, part.id))
159+
}
147160
continue
148161
}
149162
coalesced.set(k, queue.length)

0 commit comments

Comments
 (0)