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, }, ], }) const messages = [unrelated, oversizedResult] const replacement = '\nOutput too large. Preview\n' 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, ) }) test('applyToolResultReplacementsToMessages is idempotent when messages are already hydrated', () => { const hydrated = createUserMessage({ content: [ { type: 'tool_result', tool_use_id: 'tool-1', content: '\nPreview\n', is_error: false, }, ], }) const messages = [hydrated] const next = applyToolResultReplacementsToMessages( messages, new Map([['tool-1', '\nPreview\n']]), ) expect(next).toBe(messages) })