@@ -4,10 +4,6 @@ import type { AppliedCompressionResult, CompressionStateInput, SelectionResoluti
44
55export const COMPRESSED_BLOCK_HEADER = "[Compressed conversation section]"
66
7- export function getCompressionMessageKey ( sessionId : string , messageId : string ) : string {
8- return `${ sessionId } :${ messageId } `
9- }
10-
117export function allocateBlockId ( state : SessionState ) : number {
128 const next = state . prune . messages . nextBlockId
139 if ( ! Number . isInteger ( next ) || next < 1 ) {
@@ -33,54 +29,36 @@ export function allocateRunId(state: SessionState): number {
3329export function recordCompressionDuration (
3430 state : SessionState ,
3531 callId : string ,
36- messageKey : string ,
3732 durationMs : number ,
3833) : void {
3934 state . compressionDurations . set ( callId , durationMs )
40-
41- const queue = state . compressionDurationQueue . get ( messageKey )
42- if ( ! queue ) {
43- state . compressionDurationQueue . set ( messageKey , [ callId ] )
44- return
45- }
46-
47- queue . push ( callId )
4835}
4936
50- export function consumeCompressionDuration (
37+ export function attachCompressionDuration (
5138 state : SessionState ,
52- messageKey : string ,
53- callId ? : string ,
39+ callId : string ,
40+ messageId : string ,
5441) : number {
55- if ( callId && state . compressionDurations . has ( callId ) ) {
56- const queue = state . compressionDurationQueue . get ( messageKey )
57- if ( queue ) {
58- const next = queue . filter ( ( id ) => id !== callId )
59- if ( next . length === 0 ) {
60- state . compressionDurationQueue . delete ( messageKey )
61- } else {
62- state . compressionDurationQueue . set ( messageKey , next )
63- }
64- }
65-
66- const durationMs = state . compressionDurations . get ( callId ) || 0
67- state . compressionDurations . delete ( callId )
68- return durationMs
42+ const durationMs = state . compressionDurations . get ( callId )
43+ if ( typeof durationMs !== "number" || ! Number . isFinite ( durationMs ) ) {
44+ return 0
6945 }
7046
71- const queue = state . compressionDurationQueue . get ( messageKey )
72- const queuedCallId = queue ?. shift ( )
73- if ( queue && queue . length === 0 ) {
74- state . compressionDurationQueue . delete ( messageKey )
75- }
47+ state . compressionDurations . delete ( callId )
7648
77- if ( ! queuedCallId ) {
78- return 0
49+ let updates = 0
50+ for ( const block of state . prune . messages . blocksById . values ( ) ) {
51+ const matchesCall = block . compressCallId === callId
52+ const matchesMessage = ! block . compressCallId && block . compressMessageId === messageId
53+ if ( ! matchesCall && ! matchesMessage ) {
54+ continue
55+ }
56+
57+ block . durationMs = durationMs
58+ updates ++
7959 }
8060
81- const durationMs = state . compressionDurations . get ( queuedCallId ) || 0
82- state . compressionDurations . delete ( queuedCallId )
83- return durationMs
61+ return updates
8462}
8563
8664export function wrapCompressedSummary ( blockId : number , summary : string ) : string {
@@ -158,6 +136,7 @@ export function applyCompressionState(
158136 endId : input . endId ,
159137 anchorMessageId,
160138 compressMessageId : input . compressMessageId ,
139+ compressCallId : input . compressCallId ,
161140 includedBlockIds : included ,
162141 consumedBlockIds : consumed ,
163142 parentBlockIds : [ ] ,
0 commit comments