diff --git a/packages/agent-core/src/agent/compaction/micro.ts b/packages/agent-core/src/agent/compaction/micro.ts index da352db69..e08e5e9ce 100644 --- a/packages/agent-core/src/agent/compaction/micro.ts +++ b/packages/agent-core/src/agent/compaction/micro.ts @@ -2,7 +2,10 @@ import type { ContentPart } from '@moonshot-ai/kosong'; import type { Agent } from '..'; import type { ContextMessage } from '../context'; -import { estimateTokensForContentParts } from '../../utils/tokens'; +import { + estimateTokensForContentParts, + estimateTokensForMessages, +} from '../../utils/tokens'; export interface MicroCompactionConfig { keepRecentMessages: number; @@ -65,9 +68,17 @@ export class MicroCompaction { this.apply(nextCutoff); if (previousCutoff !== nextCutoff) { const effect = this.measureEffect(history, nextCutoff); + // Whole-context length before/after trimming, mirroring the + // `tokensBefore`/`tokensAfter` fields on `compaction_finished` so the + // two compaction paths can be compared on the same axis. + const contextTokensBefore = estimateTokensForMessages(history); + const contextTokensAfter = + contextTokensBefore - effect.beforeTokens + effect.afterTokens; this.agent.telemetry.track('micro_compaction_applied', { ...config, ...effect, + contextTokensBefore, + contextTokensAfter, previous_cutoff: previousCutoff, cutoff: nextCutoff, message_count: history.length, diff --git a/packages/agent-core/test/agent/compaction/micro.test.ts b/packages/agent-core/test/agent/compaction/micro.test.ts index bcdeb327e..033333188 100644 --- a/packages/agent-core/test/agent/compaction/micro.test.ts +++ b/packages/agent-core/test/agent/compaction/micro.test.ts @@ -480,10 +480,15 @@ describe('MicroCompaction', () => { truncatedToolResultCount: 2, beforeTokens: expect.any(Number), afterTokens: expect.any(Number), + contextTokensBefore: expect.any(Number), + contextTokensAfter: expect.any(Number), }); expect(numberProperty(event, 'beforeTokens')).toBeGreaterThan( numberProperty(event, 'afterTokens'), ); + expect(numberProperty(event, 'contextTokensBefore')).toBeGreaterThan( + numberProperty(event, 'contextTokensAfter'), + ); expect(ctx.agent.context.messages).toHaveLength(9); expect(records.filter((record) => record.event === 'micro_compaction_applied')).toHaveLength(1);