perf(session): reuse immutable event snapshots

This commit is contained in:
_Kerman
2026-08-28 13:43:16 +08:00
parent 5660f44d29
commit bcfec8d1c3
43 changed files with 116 additions and 116 deletions
@@ -882,7 +882,7 @@ describe('compaction region transaction', () => {
expect(head.content[0]?.type === 'text' ? head.content[0].text : '').toContain('<compacted-summary>')
expect(head.content.at(-1)).toEqual({ type: 'text', text: '</compacted-summary>' })
const replay = Session.create(SessionId('replay'), [...session.snapshotEvents()])
const replay = Session.create(SessionId('replay'), session.snapshotEvents())
expect(replay.deriveMessages()).toEqual(session.deriveMessages())
})
@@ -188,7 +188,7 @@ function waitForIdle(ctx: Context, agent: Agent): Promise<void> {
})
}
function overflowHistorySeed(): SessionEvent[] {
function overflowHistorySeed(): readonly SessionEvent[] {
const session = Session.create(SessionId('overflow-history-seed'))
for (let turn = 1; turn <= 2; turn += 1) {
const sentinel = turn === 1 ? 'OLD HISTORY SENTINEL' : 'RECENT HISTORY'
@@ -215,7 +215,7 @@ function overflowHistorySeed(): SessionEvent[] {
session.append('step/end', { turn, step: 1 })
session.append('turn/end', { turn, reason: { kind: 'completed' } })
}
return [...session.snapshotEvents()]
return session.snapshotEvents()
}
describe('CBR-001: a real-loop checkpoint is a valid boundary on both sides', () => {
@@ -250,7 +250,7 @@ describe('CBR-001: a real-loop checkpoint is a valid boundary on both sides', ()
agent.followup(createUserMessage({ content: [{ type: 'text', text: 'do tool work' }], source: { kind: 'user' } }))
await waitForIdle(ctx, agent)
const events = [...agent.session.snapshotEvents()]
const events = agent.session.snapshotEvents()
const compactStart = events.find(event => event.type === 'compaction/start')
expect(compactStart).toBeDefined()
const precedingResult = events.findLast(event =>
@@ -282,7 +282,7 @@ describe('CBR-001: a real-loop checkpoint is a valid boundary on both sides', ()
agent.followup(createUserMessage({ content: [{ type: 'text', text: 'do a long multi-step task' }], source: { kind: 'user' } }))
await waitForIdle(ctx, agent)
const events = [...agent.session.snapshotEvents()]
const events = agent.session.snapshotEvents()
// A compaction ran: at least one checkpoint landed on the surface.
const checkpoints = events.filter(
(e): e is SurfaceEvent =>
@@ -356,7 +356,7 @@ describe('context-overflow recovery across the real loop and compaction-basic',
expect(retry).toContain('RECOVERY CHECKPOINT')
expect(retry).not.toContain('OLD HISTORY SENTINEL')
const events = [...agent.session.snapshotEvents()]
const events = agent.session.snapshotEvents()
const stepStart = events.find(event =>
event.type === 'step/start' && event.data.turn === 3 && event.data.step === 1,
)!
@@ -442,7 +442,7 @@ describe('compactNow transaction and failure classification', () => {
compactionId: CompactionId('stale-manual-compaction'),
turn: null,
})
const reloaded = Session.create(SessionId('stale-orphan'), [...original.snapshotEvents()])
const reloaded = Session.create(SessionId('stale-orphan'), original.snapshotEvents())
const boundary = reloaded.snapshotEvents().findLast(event => event.type === 'session/end-seed')
const orphan = reloaded.snapshotEvents().find(event => event.type === 'compaction/start')
const agent = fakeAgent(reloaded, () => () => undefined)
@@ -461,7 +461,7 @@ describe('compactNow transaction and failure classification', () => {
})
original.append('turn/start', { turn: 3 })
original.append('turn/end', { turn: 3, reason: { kind: 'interrupted' } })
const reloaded = Session.create(SessionId('reloaded-orphan'), [...original.snapshotEvents()])
const reloaded = Session.create(SessionId('reloaded-orphan'), original.snapshotEvents())
const agent = fakeAgent(reloaded, () => () => undefined)
await expect(compact.compactNow(agent, SIGNAL)).resolves.not.toBeNull()
@@ -716,7 +716,7 @@ describe('compactNow transaction and failure classification', () => {
const reserve = vi.fn(() => testCase.release)
const measure = vi.spyOn(ctx.tokenMeter, 'measure')
const agent = fakeAgent(testCase.session, reserve)
const before = [...testCase.session.snapshotEvents()]
const before = testCase.session.snapshotEvents()
const reason = Object.freeze({ kind: 'cancelled', case: testCase.name })
const controller = new AbortController()
controller.abort(reason)