Files
orcs-code/src/utils/toolResultStorage.test.ts
pr0ln fb221baa21 Limit auto-mode classifier transcript growth (#277)
* Limit auto-mode classifier transcript growth

* Release persisted tool results from transcript state

---------

Co-authored-by: pr0ln <pr0ln@pr0lnui-Macmini.local>
2026-04-04 09:24:14 +08:00

60 lines
1.7 KiB
TypeScript

import { expect, test } from 'bun:test'
import { createUserMessage } from './messages.ts'
import { applyToolResultReplacementsToMessages } from './toolResultStorage.ts'
test('applyToolResultReplacementsToMessages replaces matching tool results and preserves unrelated messages', () => {
const unrelated = createUserMessage({ content: 'keep me' })
const oversizedResult = createUserMessage({
content: [
{
type: 'tool_result',
tool_use_id: 'tool-1',
content: 'very large tool output',
is_error: false,
},
],
toolUseResult: {
stdout: 'very large tool output',
stderr: '',
},
})
const messages = [unrelated, oversizedResult]
const replacement =
'<persisted-output>\nOutput too large. Preview\n</persisted-output>'
const next = applyToolResultReplacementsToMessages(
messages,
new Map([['tool-1', replacement]]),
)
expect(next).not.toBe(messages)
expect(next[0]).toBe(unrelated)
expect(next[1]).not.toBe(oversizedResult)
expect((next[1]!.message.content as Array<{ content: string }>)[0]!.content).toBe(
replacement,
)
expect(next[1]!.toolUseResult).toBeUndefined()
})
test('applyToolResultReplacementsToMessages is idempotent when messages are already hydrated', () => {
const hydrated = createUserMessage({
content: [
{
type: 'tool_result',
tool_use_id: 'tool-1',
content: '<persisted-output>\nPreview\n</persisted-output>',
is_error: false,
},
],
})
const messages = [hydrated]
const next = applyToolResultReplacementsToMessages(
messages,
new Map([['tool-1', '<persisted-output>\nPreview\n</persisted-output>']]),
)
expect(next).toBe(messages)
})