@@ -16,6 +16,14 @@ import {
1616} from "./messages"
1717import { renderSystemPrompt , type PromptStore } from "./prompts"
1818import { buildProtectedToolsExtension } from "./prompts/extensions/system"
19+ import {
20+ applyPendingCompressionDurations ,
21+ clearCompressionStart ,
22+ consumeCompressionStart ,
23+ queueCompressionDuration ,
24+ recordCompressionStart ,
25+ resolveCompressionDuration ,
26+ } from "./compress/timing"
1927import {
2028 applyPendingManualTrigger ,
2129 handleContextCommand ,
@@ -29,14 +37,7 @@ import {
2937} from "./commands"
3038import { type HostPermissionSnapshot } from "./host-permissions"
3139import { compressPermission , syncCompressPermissionState } from "./compress-permission"
32- import {
33- checkSession ,
34- ensureSessionInitialized ,
35- applyPendingCompressionDurations ,
36- queueCompressionDuration ,
37- saveSessionState ,
38- syncToolCache ,
39- } from "./state"
40+ import { checkSession , ensureSessionInitialized , saveSessionState , syncToolCache } from "./state"
4041import { cacheSystemPromptTokens } from "./ui/utils"
4142
4243const INTERNAL_AGENT_SIGNATURES = [
@@ -307,16 +308,18 @@ export function createEventHandler(state: SessionState, logger: Logger) {
307308 return
308309 }
309310
310- if ( state . compressionTiming . startsByCallId . has ( part . callID ) ) {
311+ const startedAt = eventTime ?? Date . now ( )
312+ if (
313+ ! recordCompressionStart (
314+ state ,
315+ part . callID ,
316+ eventSessionId ,
317+ part . messageID ,
318+ startedAt ,
319+ )
320+ ) {
311321 return
312322 }
313-
314- const startedAt = eventTime ?? Date . now ( )
315- state . compressionTiming . startsByCallId . set ( part . callID , {
316- sessionId : eventSessionId ,
317- messageId : part . messageID ,
318- startedAt,
319- } )
320323 logger . debug ( "Recorded compression start" , {
321324 sessionID : eventSessionId ,
322325 callID : part . callID ,
@@ -335,30 +338,8 @@ export function createEventHandler(state: SessionState, logger: Logger) {
335338 return
336339 }
337340
338- const start = state . compressionTiming . startsByCallId . get ( part . callID )
339- state . compressionTiming . startsByCallId . delete ( part . callID )
340-
341- const runningAt =
342- typeof part . state . time ?. start === "number" && Number . isFinite ( part . state . time . start )
343- ? part . state . time . start
344- : eventTime
345- const pendingToRunningMs =
346- start && typeof runningAt === "number"
347- ? Math . max ( 0 , runningAt - start . startedAt )
348- : undefined
349-
350- const toolStart = part . state . time ?. start
351- const toolEnd = part . state . time ?. end
352- const runtimeMs =
353- typeof toolStart === "number" &&
354- Number . isFinite ( toolStart ) &&
355- typeof toolEnd === "number" &&
356- Number . isFinite ( toolEnd )
357- ? Math . max ( 0 , toolEnd - toolStart )
358- : undefined
359-
360- const durationMs =
361- typeof pendingToRunningMs === "number" ? pendingToRunningMs : runtimeMs
341+ const start = consumeCompressionStart ( state , part . callID )
342+ const durationMs = resolveCompressionDuration ( start , eventTime , part . state . time )
362343 if ( typeof durationMs !== "number" ) {
363344 return
364345 }
@@ -390,7 +371,7 @@ export function createEventHandler(state: SessionState, logger: Logger) {
390371 }
391372
392373 if ( typeof part . callID === "string" ) {
393- state . compressionTiming . startsByCallId . delete ( part . callID )
374+ clearCompressionStart ( state , part . callID )
394375 }
395376 }
396377}
0 commit comments