fix: trim persisted tool results and sanitize MCP schemas
This commit is contained in:
54
src/utils/toolResultStorage.test.ts
Normal file
54
src/utils/toolResultStorage.test.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
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 =
|
||||
'<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,
|
||||
)
|
||||
})
|
||||
|
||||
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)
|
||||
})
|
||||
Reference in New Issue
Block a user