@@ -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