Skip to content

Commit 3fc0bba

Browse files
refactor: simplify compression timing
1 parent 544a1b5 commit 3fc0bba

7 files changed

Lines changed: 15 additions & 53 deletions

File tree

lib/compress/message.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function createCompressMessageTool(ctx: ToolContext): ReturnType<typeof t
5353
typeof (toolCtx as unknown as { callID?: unknown }).callID === "string"
5454
? (toolCtx as unknown as { callID: string }).callID
5555
: undefined
56-
const durationMs = consumeCompressionDuration(ctx.state, toolCtx.messageID, callId)
56+
const durationMs = consumeCompressionDuration(ctx.state, callId)
5757

5858
const { rawMessages, searchContext } = await prepareSession(
5959
ctx,

lib/compress/range.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export function createCompressRangeTool(ctx: ToolContext): ReturnType<typeof too
6464
typeof (toolCtx as unknown as { callID?: unknown }).callID === "string"
6565
? (toolCtx as unknown as { callID: string }).callID
6666
: undefined
67-
const durationMs = consumeCompressionDuration(ctx.state, toolCtx.messageID, callId)
67+
const durationMs = consumeCompressionDuration(ctx.state, callId)
6868

6969
const { rawMessages, searchContext } = await prepareSession(
7070
ctx,

lib/compress/state.ts

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -29,53 +29,18 @@ export function allocateRunId(state: SessionState): number {
2929
export function recordCompressionDuration(
3030
state: SessionState,
3131
callId: string,
32-
messageId: string,
3332
durationMs: number,
3433
): void {
3534
state.compressionDurations.set(callId, durationMs)
36-
37-
const queue = state.compressionDurationQueue.get(messageId)
38-
if (!queue) {
39-
state.compressionDurationQueue.set(messageId, [callId])
40-
return
41-
}
42-
43-
queue.push(callId)
4435
}
4536

46-
export function consumeCompressionDuration(
47-
state: SessionState,
48-
messageId: string,
49-
callId?: string,
50-
): number {
51-
if (callId && state.compressionDurations.has(callId)) {
52-
const queue = state.compressionDurationQueue.get(messageId)
53-
if (queue) {
54-
const next = queue.filter((id) => id !== callId)
55-
if (next.length === 0) {
56-
state.compressionDurationQueue.delete(messageId)
57-
} else {
58-
state.compressionDurationQueue.set(messageId, next)
59-
}
60-
}
61-
62-
const durationMs = state.compressionDurations.get(callId) || 0
63-
state.compressionDurations.delete(callId)
64-
return durationMs
65-
}
66-
67-
const queue = state.compressionDurationQueue.get(messageId)
68-
const queuedCallId = queue?.shift()
69-
if (queue && queue.length === 0) {
70-
state.compressionDurationQueue.delete(messageId)
71-
}
72-
73-
if (!queuedCallId) {
37+
export function consumeCompressionDuration(state: SessionState, callId?: string): number {
38+
if (!callId || !state.compressionDurations.has(callId)) {
7439
return 0
7540
}
7641

77-
const durationMs = state.compressionDurations.get(queuedCallId) || 0
78-
state.compressionDurations.delete(queuedCallId)
42+
const durationMs = state.compressionDurations.get(callId) || 0
43+
state.compressionDurations.delete(callId)
7944
return durationMs
8045
}
8146

lib/hooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ export function createEventHandler(state: SessionState, logger: Logger) {
325325

326326
state.compressionStarts.delete(part.callID)
327327
const durationMs = Math.max(0, runningAt - start.startedAt)
328-
recordCompressionDuration(state, part.callID, start.messageId, durationMs)
328+
recordCompressionDuration(state, part.callID, durationMs)
329329

330330
logger.info("Recorded compression time", {
331331
callID: part.callID,

lib/state/state.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ export function createSessionState(): SessionState {
8383
},
8484
compressionStarts: new Map<string, CompressionStart>(),
8585
compressionDurations: new Map<string, number>(),
86-
compressionDurationQueue: new Map<string, string[]>(),
8786
toolParameters: new Map<string, ToolParameterEntry>(),
8887
subAgentResultCache: new Map<string, string>(),
8988
toolIdList: [],
@@ -121,7 +120,6 @@ export function resetSessionState(state: SessionState): void {
121120
}
122121
state.compressionStarts.clear()
123122
state.compressionDurations.clear()
124-
state.compressionDurationQueue.clear()
125123
state.toolParameters.clear()
126124
state.subAgentResultCache.clear()
127125
state.toolIdList = []

lib/state/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ export interface SessionState {
104104
stats: SessionStats
105105
compressionStarts: Map<string, CompressionStart>
106106
compressionDurations: Map<string, number>
107-
compressionDurationQueue: Map<string, string[]>
108107
toolParameters: Map<string, ToolParameterEntry>
109108
subAgentResultCache: Map<string, string>
110109
toolIdList: string[]

tests/hooks-permission.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ test("event hook records compress input generation duration", async () => {
207207
}
208208

209209
assert.equal(state.compressionDurations.get("call-1"), 225)
210-
assert.deepEqual(state.compressionDurationQueue.get("message-1"), ["call-1"])
211210
assert.equal(state.compressionStarts.has("call-1"), false)
212211
})
213212

@@ -302,12 +301,12 @@ test("compression duration consumption handles multiple calls in one message", a
302301
Date.now = originalNow
303302
}
304303

305-
assert.equal(consumeCompressionDuration(state, "message-1"), 225)
306-
assert.equal(consumeCompressionDuration(state, "message-1"), 310)
307-
assert.equal(consumeCompressionDuration(state, "message-1"), 0)
304+
assert.equal(consumeCompressionDuration(state, "call-1"), 225)
305+
assert.equal(consumeCompressionDuration(state, "call-2"), 310)
306+
assert.equal(consumeCompressionDuration(state, "call-1"), 0)
308307
})
309308

310-
test("compression duration consumption supports explicit call id lookup", async () => {
309+
test("compression duration consumption returns zero for unknown call id", async () => {
311310
const state = createSessionState()
312311
state.sessionId = "session-1"
313312
const handler = createEventHandler(state, new Logger(false))
@@ -398,9 +397,10 @@ test("compression duration consumption supports explicit call id lookup", async
398397
Date.now = originalNow
399398
}
400399

401-
assert.equal(consumeCompressionDuration(state, "message-1", "call-2"), 310)
402-
assert.equal(consumeCompressionDuration(state, "message-1"), 225)
403-
assert.equal(consumeCompressionDuration(state, "message-1"), 0)
400+
assert.equal(consumeCompressionDuration(state, "call-2"), 310)
401+
assert.equal(consumeCompressionDuration(state, "missing-call"), 0)
402+
assert.equal(consumeCompressionDuration(state, undefined), 0)
403+
assert.equal(consumeCompressionDuration(state, "call-1"), 225)
404404
})
405405

406406
test("event hook ignores non-compress tool parts", async () => {

0 commit comments

Comments
 (0)