11import type { SessionState } from "../state/types"
22import { attachCompressionDuration } from "./state"
33
4- export interface CompressionStart {
5- sessionId : string
6- messageId : string
7- startedAt : number
8- }
9-
104export interface PendingCompressionDuration {
115 callId : string
12- messageId : string
136 durationMs : number
147}
158
169export interface CompressionTimingState {
17- startsByCallId : Map < string , CompressionStart >
18- pendingBySessionId : Map < string , PendingCompressionDuration [ ] >
10+ startsByCallId : Map < string , number >
11+ pendingByCallId : Map < string , PendingCompressionDuration >
1912}
2013
2114export function createCompressionTimingState ( ) : CompressionTimingState {
2215 return {
2316 startsByCallId : new Map ( ) ,
24- pendingBySessionId : new Map ( ) ,
17+ pendingByCallId : new Map ( ) ,
2518 }
2619}
2720
2821export function recordCompressionStart (
2922 state : SessionState ,
3023 callId : string ,
31- sessionId : string ,
32- messageId : string ,
3324 startedAt : number ,
3425) : boolean {
3526 if ( state . compressionTiming . startsByCallId . has ( callId ) ) {
3627 return false
3728 }
3829
39- state . compressionTiming . startsByCallId . set ( callId , {
40- sessionId,
41- messageId,
42- startedAt,
43- } )
30+ state . compressionTiming . startsByCallId . set ( callId , startedAt )
4431 return true
4532}
4633
47- export function consumeCompressionStart (
48- state : SessionState ,
49- callId : string ,
50- ) : CompressionStart | undefined {
34+ export function consumeCompressionStart ( state : SessionState , callId : string ) : number | undefined {
5135 const start = state . compressionTiming . startsByCallId . get ( callId )
5236 state . compressionTiming . startsByCallId . delete ( callId )
5337 return start
@@ -58,7 +42,7 @@ export function clearCompressionStart(state: SessionState, callId: string): void
5842}
5943
6044export function resolveCompressionDuration (
61- start : CompressionStart | undefined ,
45+ startedAt : number | undefined ,
6246 eventTime : number | undefined ,
6347 partTime : { start ?: unknown ; end ?: unknown } | undefined ,
6448) : number | undefined {
@@ -67,8 +51,8 @@ export function resolveCompressionDuration(
6751 ? partTime . start
6852 : eventTime
6953 const pendingToRunningMs =
70- start && typeof runningAt === "number"
71- ? Math . max ( 0 , runningAt - start . startedAt )
54+ typeof startedAt === "number" && typeof runningAt === "number"
55+ ? Math . max ( 0 , runningAt - startedAt )
7256 : undefined
7357
7458 const toolStart = partTime ?. start
@@ -86,43 +70,28 @@ export function resolveCompressionDuration(
8670
8771export function queueCompressionDuration (
8872 state : SessionState ,
89- sessionId : string ,
9073 callId : string ,
91- messageId : string ,
9274 durationMs : number ,
9375) : void {
94- const queued = state . compressionTiming . pendingBySessionId . get ( sessionId ) || [ ]
95- const filtered = queued . filter ( ( entry ) => entry . callId !== callId )
96- filtered . push ( { callId, messageId, durationMs } )
97- state . compressionTiming . pendingBySessionId . set ( sessionId , filtered )
76+ state . compressionTiming . pendingByCallId . set ( callId , { callId, durationMs } )
9877}
9978
100- export function applyPendingCompressionDurations ( state : SessionState , sessionId : string ) : number {
101- const queued = state . compressionTiming . pendingBySessionId . get ( sessionId )
102- if ( ! queued || queued . length === 0 ) {
79+ export function applyPendingCompressionDurations ( state : SessionState ) : number {
80+ if ( state . compressionTiming . pendingByCallId . size === 0 ) {
10381 return 0
10482 }
10583
10684 let updates = 0
107- const remaining = [ ]
108- for ( const entry of queued ) {
85+ for ( const [ callId , entry ] of state . compressionTiming . pendingByCallId ) {
10986 const applied = attachCompressionDuration (
11087 state . prune . messages ,
11188 entry . callId ,
112- entry . messageId ,
11389 entry . durationMs ,
11490 )
11591 if ( applied > 0 ) {
11692 updates += applied
117- continue
93+ state . compressionTiming . pendingByCallId . delete ( callId )
11894 }
119- remaining . push ( entry )
120- }
121-
122- if ( remaining . length > 0 ) {
123- state . compressionTiming . pendingBySessionId . set ( sessionId , remaining )
124- } else {
125- state . compressionTiming . pendingBySessionId . delete ( sessionId )
12695 }
12796
12897 return updates
0 commit comments