@tambo-ai/react 0.71.0 → 0.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.js +134 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js +292 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +62 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.js +76 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +168 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
- package/dist/v1/index.d.ts +23 -12
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +48 -14
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts +43 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.js +24 -3
- package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.test.js +58 -0
- package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -1
- package/dist/v1/types/message.d.ts +27 -2
- package/dist/v1/types/message.d.ts.map +1 -1
- package/dist/v1/types/message.js.map +1 -1
- package/dist/v1/utils/component-renderer.d.ts +89 -0
- package/dist/v1/utils/component-renderer.d.ts.map +1 -0
- package/dist/v1/utils/component-renderer.js +216 -0
- package/dist/v1/utils/component-renderer.js.map +1 -0
- package/dist/v1/utils/component-renderer.test.d.ts +2 -0
- package/dist/v1/utils/component-renderer.test.d.ts.map +1 -0
- package/dist/v1/utils/component-renderer.test.js +380 -0
- package/dist/v1/utils/component-renderer.test.js.map +1 -0
- package/dist/v1/utils/event-accumulator.js +28 -8
- package/dist/v1/utils/event-accumulator.js.map +1 -1
- package/dist/v1/utils/event-accumulator.test.js +201 -6
- package/dist/v1/utils/event-accumulator.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.js +131 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js +290 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +62 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.js +73 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +166 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
- package/esm/v1/index.d.ts +23 -12
- package/esm/v1/index.d.ts.map +1 -1
- package/esm/v1/index.js +31 -12
- package/esm/v1/index.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts +43 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.js +24 -4
- package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.test.js +59 -1
- package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -1
- package/esm/v1/types/message.d.ts +27 -2
- package/esm/v1/types/message.d.ts.map +1 -1
- package/esm/v1/types/message.js.map +1 -1
- package/esm/v1/utils/component-renderer.d.ts +89 -0
- package/esm/v1/utils/component-renderer.d.ts.map +1 -0
- package/esm/v1/utils/component-renderer.js +175 -0
- package/esm/v1/utils/component-renderer.js.map +1 -0
- package/esm/v1/utils/component-renderer.test.d.ts +2 -0
- package/esm/v1/utils/component-renderer.test.d.ts.map +1 -0
- package/esm/v1/utils/component-renderer.test.js +375 -0
- package/esm/v1/utils/component-renderer.test.js.map +1 -0
- package/esm/v1/utils/event-accumulator.js +28 -8
- package/esm/v1/utils/event-accumulator.js.map +1 -1
- package/esm/v1/utils/event-accumulator.test.js +201 -6
- package/esm/v1/utils/event-accumulator.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-accumulator.test.js","sourceRoot":"","sources":["../../../src/v1/utils/event-accumulator.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EventType,\n type CustomEvent,\n type RunErrorEvent,\n type RunFinishedEvent,\n type RunStartedEvent,\n type StateSnapshotEvent,\n type TextMessageContentEvent,\n type TextMessageEndEvent,\n type TextMessageStartEvent,\n type ToolCallArgsEvent,\n type ToolCallEndEvent,\n type ToolCallResultEvent,\n type ToolCallStartEvent,\n} from \"@ag-ui/core\";\nimport type {\n ComponentContent,\n ToolUseContent,\n} from \"@tambo-ai/typescript-sdk/resources/threads/threads\";\nimport {\n createInitialState,\n createInitialThreadState,\n streamReducer,\n type StreamState,\n type ThreadState,\n} from \"./event-accumulator\";\nimport type { Content } from \"../types/message\";\n\n/**\n * Helper to extract a ToolUseContent from a message content array.\n * @param content - Content array from a message\n * @param index - Index of the content item\n * @returns The content as ToolUseContent\n */\nfunction asToolUseContent(content: Content[], index: number): ToolUseContent {\n return content[index] as ToolUseContent;\n}\n\n/**\n * Helper to extract a ComponentContent from a message content array.\n * @param content - Content array from a message\n * @param index - Index of the content item\n * @returns The content as ComponentContent\n */\nfunction asComponentContent(\n content: Content[],\n index: number,\n): ComponentContent {\n return content[index] as ComponentContent;\n}\n\n// Helper to create a base thread state for testing\nfunction createTestThreadState(threadId: string): ThreadState {\n return {\n ...createInitialThreadState(threadId),\n thread: {\n ...createInitialThreadState(threadId).thread,\n // Use fixed timestamps for snapshot stability\n createdAt: \"2024-01-01T00:00:00.000Z\",\n updatedAt: \"2024-01-01T00:00:00.000Z\",\n },\n };\n}\n\n// Helper to create stream state with a thread\nfunction createTestStreamState(threadId: string): StreamState {\n return {\n threadMap: {\n [threadId]: createTestThreadState(threadId),\n },\n currentThreadId: threadId,\n };\n}\n\ndescribe(\"createInitialThreadState\", () => {\n it(\"creates thread state with correct structure\", () => {\n const state = createInitialThreadState(\"thread_123\");\n\n expect(state.thread.id).toBe(\"thread_123\");\n expect(state.thread.messages).toEqual([]);\n expect(state.thread.status).toBe(\"idle\");\n expect(state.streaming.status).toBe(\"idle\");\n expect(state.accumulatingToolArgs).toBeInstanceOf(Map);\n expect(state.accumulatingToolArgs.size).toBe(0);\n });\n});\n\ndescribe(\"createInitialState\", () => {\n it(\"creates empty stream state\", () => {\n const state = createInitialState();\n\n expect(state.threadMap).toEqual({});\n expect(state.currentThreadId).toBeNull();\n });\n});\n\ndescribe(\"streamReducer\", () => {\n // Mock console.warn for tests that check logging\n let consoleWarnSpy: jest.SpyInstance;\n\n beforeEach(() => {\n consoleWarnSpy = jest.spyOn(console, \"warn\").mockImplementation(() => {});\n });\n\n afterEach(() => {\n consoleWarnSpy.mockRestore();\n });\n\n describe(\"unknown thread handling\", () => {\n it(\"auto-initializes unknown thread when receiving events\", () => {\n const state = createInitialState();\n const event: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"unknown_thread\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"unknown_thread\",\n });\n\n // Should auto-initialize the thread rather than dropping the event\n expect(result.threadMap.unknown_thread).toBeDefined();\n expect(result.threadMap.unknown_thread.thread.id).toBe(\"unknown_thread\");\n expect(result.threadMap.unknown_thread.streaming.status).toBe(\n \"streaming\",\n );\n expect(result.threadMap.unknown_thread.streaming.runId).toBe(\"run_1\");\n // No warning should be logged for auto-initialization\n expect(consoleWarnSpy).not.toHaveBeenCalled();\n });\n });\n\n describe(\"unsupported event types\", () => {\n it(\"logs warning for unsupported AG-UI events\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: StateSnapshotEvent = {\n type: EventType.STATE_SNAPSHOT,\n snapshot: {},\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result).toBe(state);\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"unsupported event type\"),\n );\n });\n\n it(\"throws for completely unknown event types (fail-fast)\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Create an event with an unknown type (not in EventType enum)\n // This tests fail-fast behavior when SDK returns unexpected event types\n const event = {\n type: \"TOTALLY_UNKNOWN_EVENT_TYPE\",\n };\n\n expect(() =>\n streamReducer(state, {\n type: \"EVENT\",\n event: event as unknown as RunStartedEvent,\n threadId: \"thread_1\",\n }),\n ).toThrow(\"Unreachable case\");\n });\n\n it(\"logs warning for unknown custom event names\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"unknown.custom.event\",\n value: {},\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1).toBe(state.threadMap.thread_1);\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"Unknown custom event name\"),\n );\n });\n });\n\n describe(\"RUN_STARTED event\", () => {\n it(\"updates thread status to streaming\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_123\",\n threadId: \"thread_1\",\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"streaming\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"streaming\");\n expect(result.threadMap.thread_1.streaming.runId).toBe(\"run_123\");\n });\n\n it(\"uses provided timestamp for startTime\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_123\",\n threadId: \"thread_1\",\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.streaming.startTime).toBe(1704067200000);\n });\n });\n\n describe(\"RUN_FINISHED event\", () => {\n it(\"updates thread status to complete\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.status = \"streaming\";\n state.threadMap.thread_1.streaming.status = \"streaming\";\n\n const event: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n runId: \"run_123\",\n threadId: \"thread_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"complete\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"complete\");\n });\n });\n\n describe(\"RUN_ERROR event\", () => {\n it(\"updates thread status to error with details\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: \"Something went wrong\",\n code: \"ERR_001\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"error\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"error\");\n expect(result.threadMap.thread_1.streaming.error).toEqual({\n message: \"Something went wrong\",\n code: \"ERR_001\",\n });\n });\n });\n\n describe(\"TEXT_MESSAGE_START event\", () => {\n it(\"creates new message in thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(1);\n expect(messages[0].id).toBe(\"msg_1\");\n expect(messages[0].role).toBe(\"assistant\");\n expect(messages[0].content).toEqual([]);\n });\n\n it(\"creates user message when role is user\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"user\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(1);\n expect(messages[0].role).toBe(\"user\");\n });\n });\n\n describe(\"TEXT_MESSAGE_CONTENT event\", () => {\n it(\"appends text content to message\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Add a message first\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"Hello \",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({ type: \"text\", text: \"Hello \" });\n });\n\n it(\"creates new text block after non-text content\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"After tool call\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(2);\n expect(content[0]).toEqual({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"test\",\n input: {},\n });\n expect(content[1]).toEqual({ type: \"text\", text: \"After tool call\" });\n });\n\n it(\"accumulates text content deltas\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hello \" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"world!\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({ type: \"text\", text: \"Hello world!\" });\n });\n\n it(\"throws when message not found\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"unknown_msg\",\n delta: \"Hello\",\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"Message unknown_msg not found\");\n });\n });\n\n describe(\"TEXT_MESSAGE_END event\", () => {\n it(\"throws when messageId doesn't match active message\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Set up an active message in streaming state\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"wrong_msg_id\",\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"TEXT_MESSAGE_END messageId mismatch\");\n });\n\n it(\"clears active messageId on success\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"msg_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.streaming.messageId).toBeUndefined();\n });\n });\n\n describe(\"TOOL_CALL_START event\", () => {\n it(\"adds tool_use content block to message\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n parentMessageId: \"msg_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n input: {},\n });\n });\n });\n\n describe(\"TOOL_CALL_START event\", () => {\n it(\"uses last message when no parentMessageId provided\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n // No parentMessageId - should use last message\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n input: {},\n });\n });\n\n it(\"throws when parentMessageId message not found\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n parentMessageId: \"unknown_msg\",\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"Message unknown_msg not found for TOOL_CALL_START event\");\n });\n\n it(\"throws when no messages exist\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n // No parentMessageId, no messages\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"No messages exist for TOOL_CALL_START event\");\n });\n });\n\n describe(\"TOOL_CALL_ARGS and TOOL_CALL_END events\", () => {\n it(\"handles TOOL_CALL_END with no accumulated args\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Send TOOL_CALL_END without any TOOL_CALL_ARGS first\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: endEvent,\n threadId: \"thread_1\",\n });\n\n // Should return unchanged state since no args were accumulated\n expect(result.threadMap.thread_1).toBe(state.threadMap.thread_1);\n });\n\n it(\"accumulates and parses tool arguments\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Send TOOL_CALL_ARGS\n const argsEvent1: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '{\"city\":',\n };\n\n let result = streamReducer(state, {\n type: \"EVENT\",\n event: argsEvent1,\n threadId: \"thread_1\",\n });\n\n const argsEvent2: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '\"NYC\"}',\n };\n\n result = streamReducer(result, {\n type: \"EVENT\",\n event: argsEvent2,\n threadId: \"thread_1\",\n });\n\n // Send TOOL_CALL_END\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n\n result = streamReducer(result, {\n type: \"EVENT\",\n event: endEvent,\n threadId: \"thread_1\",\n });\n\n const toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(toolContent.input).toEqual({ city: \"NYC\" });\n });\n\n it(\"throws when tool arguments JSON is invalid\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Send invalid JSON via TOOL_CALL_ARGS\n const argsEvent: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: \"{invalid json\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: argsEvent,\n threadId: \"thread_1\",\n });\n\n // Send TOOL_CALL_END - should throw when parsing\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n\n expect(() => {\n streamReducer(result, {\n type: \"EVENT\",\n event: endEvent,\n threadId: \"thread_1\",\n });\n }).toThrow(\"Failed to parse tool call arguments\");\n });\n });\n\n describe(\"custom component events\", () => {\n it(\"handles tambo.component.start event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.start\",\n value: {\n messageId: \"msg_1\",\n componentId: \"comp_1\",\n componentName: \"WeatherCard\",\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({\n type: \"component\",\n id: \"comp_1\",\n name: \"WeatherCard\",\n props: {},\n });\n });\n\n it(\"handles tambo.component.props_delta event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"component\", id: \"comp_1\", name: \"Test\", props: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/temperature\", value: 72 }],\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const component = asComponentContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(component.props).toEqual({ temperature: 72 });\n });\n\n it(\"throws when component not found for props_delta\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [], // No component\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"unknown_comp\",\n operations: [{ op: \"add\", path: \"/value\", value: 1 }],\n },\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"component unknown_comp not found\");\n });\n\n it(\"handles tambo.run.awaiting_input event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.status = \"streaming\";\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: { pendingToolCallIds: [\"tool_1\", \"tool_2\"] },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"waiting\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"waiting\");\n });\n\n it(\"handles tambo.component.state_delta event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"component\", id: \"comp_1\", name: \"Counter\", props: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.state_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/count\", value: 42 }],\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const component = asComponentContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(component.state).toEqual({ count: 42 });\n });\n\n it(\"handles tambo.component.end event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"component\", id: \"comp_1\", name: \"Test\", props: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.end\",\n value: { componentId: \"comp_1\" },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // component.end doesn't change state currently, just returns unchanged\n expect(result.threadMap.thread_1.thread.messages[0].content[0]).toEqual({\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\n props: {},\n });\n });\n });\n\n describe(\"snapshot tests for complex state transitions\", () => {\n it(\"matches snapshot for full message flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // RUN_STARTED\n const runStarted: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_1\",\n timestamp: 1704067200000,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: runStarted,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_START\n const msgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgStart,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_CONTENT\n const msgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"Hello, how can I help?\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgContent,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_END\n const msgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"msg_1\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgEnd,\n threadId: \"thread_1\",\n });\n\n // RUN_FINISHED\n const runFinished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n runId: \"run_1\",\n threadId: \"thread_1\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: runFinished,\n threadId: \"thread_1\",\n });\n\n // Normalize timestamps for snapshot stability\n const snapshot = {\n ...state,\n threadMap: {\n thread_1: {\n ...state.threadMap.thread_1,\n thread: {\n ...state.threadMap.thread_1.thread,\n messages: state.threadMap.thread_1.thread.messages.map((m) => ({\n ...m,\n createdAt: \"[TIMESTAMP]\",\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n\n it(\"matches snapshot for component streaming flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // Add a message\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // COMPONENT_START\n const compStart: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.start\",\n value: {\n messageId: \"msg_1\",\n componentId: \"comp_1\",\n componentName: \"WeatherCard\",\n },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: compStart,\n threadId: \"thread_1\",\n });\n\n // COMPONENT_PROPS_DELTA - add city\n const propsDelta1: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/city\", value: \"New York\" }],\n },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: propsDelta1,\n threadId: \"thread_1\",\n });\n\n // COMPONENT_PROPS_DELTA - add temperature\n const propsDelta2: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/temperature\", value: 72 }],\n },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: propsDelta2,\n threadId: \"thread_1\",\n });\n\n // COMPONENT_END\n const compEnd: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.end\",\n value: { componentId: \"comp_1\" },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: compEnd,\n threadId: \"thread_1\",\n });\n\n // Normalize timestamps for snapshot stability\n const snapshot = {\n ...state,\n threadMap: {\n thread_1: {\n ...state.threadMap.thread_1,\n thread: {\n ...state.threadMap.thread_1.thread,\n messages: state.threadMap.thread_1.thread.messages.map((m) => ({\n ...m,\n createdAt: \"[TIMESTAMP]\",\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n\n it(\"matches snapshot for tool call flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // Add a message with tool_use\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"get_weather\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // TOOL_CALL_ARGS\n const toolArgs: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '{\"city\":\"San Francisco\",\"units\":\"fahrenheit\"}',\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: toolArgs,\n threadId: \"thread_1\",\n });\n\n // TOOL_CALL_END\n const toolEnd: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: toolEnd,\n threadId: \"thread_1\",\n });\n\n // TOOL_CALL_RESULT\n const toolResult: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: \"tool_1\",\n messageId: \"msg_1\",\n content: \"Temperature: 65°F, Sunny\",\n role: \"tool\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: toolResult,\n threadId: \"thread_1\",\n });\n\n // Normalize timestamps for snapshot stability\n const snapshot = {\n ...state,\n threadMap: {\n thread_1: {\n ...state.threadMap.thread_1,\n thread: {\n ...state.threadMap.thread_1.thread,\n messages: state.threadMap.thread_1.thread.messages.map((m) => ({\n ...m,\n createdAt: \"[TIMESTAMP]\",\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"event-accumulator.test.js","sourceRoot":"","sources":["../../../src/v1/utils/event-accumulator.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EventType,\n type CustomEvent,\n type RunErrorEvent,\n type RunFinishedEvent,\n type RunStartedEvent,\n type StateSnapshotEvent,\n type TextMessageContentEvent,\n type TextMessageEndEvent,\n type TextMessageStartEvent,\n type ToolCallArgsEvent,\n type ToolCallEndEvent,\n type ToolCallResultEvent,\n type ToolCallStartEvent,\n} from \"@ag-ui/core\";\nimport type { ToolUseContent } from \"@tambo-ai/typescript-sdk/resources/threads/threads\";\nimport {\n createInitialState,\n createInitialThreadState,\n streamReducer,\n type StreamState,\n type ThreadState,\n} from \"./event-accumulator\";\nimport type { Content, V1ComponentContent } from \"../types/message\";\n\n/**\n * Helper to extract a ToolUseContent from a message content array.\n * @param content - Content array from a message\n * @param index - Index of the content item\n * @returns The content as ToolUseContent\n */\nfunction asToolUseContent(content: Content[], index: number): ToolUseContent {\n return content[index] as ToolUseContent;\n}\n\n/**\n * Helper to extract a V1ComponentContent from a message content array.\n * @param content - Content array from a message\n * @param index - Index of the content item\n * @returns The content as V1ComponentContent\n */\nfunction asComponentContent(\n content: Content[],\n index: number,\n): V1ComponentContent {\n return content[index] as V1ComponentContent;\n}\n\n// Helper to create a base thread state for testing\nfunction createTestThreadState(threadId: string): ThreadState {\n return {\n ...createInitialThreadState(threadId),\n thread: {\n ...createInitialThreadState(threadId).thread,\n // Use fixed timestamps for snapshot stability\n createdAt: \"2024-01-01T00:00:00.000Z\",\n updatedAt: \"2024-01-01T00:00:00.000Z\",\n },\n };\n}\n\n// Helper to create stream state with a thread\nfunction createTestStreamState(threadId: string): StreamState {\n return {\n threadMap: {\n [threadId]: createTestThreadState(threadId),\n },\n currentThreadId: threadId,\n };\n}\n\ndescribe(\"createInitialThreadState\", () => {\n it(\"creates thread state with correct structure\", () => {\n const state = createInitialThreadState(\"thread_123\");\n\n expect(state.thread.id).toBe(\"thread_123\");\n expect(state.thread.messages).toEqual([]);\n expect(state.thread.status).toBe(\"idle\");\n expect(state.streaming.status).toBe(\"idle\");\n expect(state.accumulatingToolArgs).toBeInstanceOf(Map);\n expect(state.accumulatingToolArgs.size).toBe(0);\n });\n});\n\ndescribe(\"createInitialState\", () => {\n it(\"creates empty stream state\", () => {\n const state = createInitialState();\n\n expect(state.threadMap).toEqual({});\n expect(state.currentThreadId).toBeNull();\n });\n});\n\ndescribe(\"streamReducer\", () => {\n // Mock console.warn for tests that check logging\n let consoleWarnSpy: jest.SpyInstance;\n\n beforeEach(() => {\n consoleWarnSpy = jest.spyOn(console, \"warn\").mockImplementation(() => {});\n });\n\n afterEach(() => {\n consoleWarnSpy.mockRestore();\n });\n\n describe(\"unknown thread handling\", () => {\n it(\"auto-initializes unknown thread when receiving events\", () => {\n const state = createInitialState();\n const event: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"unknown_thread\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"unknown_thread\",\n });\n\n // Should auto-initialize the thread rather than dropping the event\n expect(result.threadMap.unknown_thread).toBeDefined();\n expect(result.threadMap.unknown_thread.thread.id).toBe(\"unknown_thread\");\n expect(result.threadMap.unknown_thread.streaming.status).toBe(\n \"streaming\",\n );\n expect(result.threadMap.unknown_thread.streaming.runId).toBe(\"run_1\");\n // No warning should be logged for auto-initialization\n expect(consoleWarnSpy).not.toHaveBeenCalled();\n });\n });\n\n describe(\"unsupported event types\", () => {\n it(\"logs warning for unsupported AG-UI events\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: StateSnapshotEvent = {\n type: EventType.STATE_SNAPSHOT,\n snapshot: {},\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result).toBe(state);\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"unsupported event type\"),\n );\n });\n\n it(\"throws for completely unknown event types (fail-fast)\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Create an event with an unknown type (not in EventType enum)\n // This tests fail-fast behavior when SDK returns unexpected event types\n const event = {\n type: \"TOTALLY_UNKNOWN_EVENT_TYPE\",\n };\n\n expect(() =>\n streamReducer(state, {\n type: \"EVENT\",\n event: event as unknown as RunStartedEvent,\n threadId: \"thread_1\",\n }),\n ).toThrow(\"Unreachable case\");\n });\n\n it(\"logs warning for unknown custom event names\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"unknown.custom.event\",\n value: {},\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1).toBe(state.threadMap.thread_1);\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"Unknown custom event name\"),\n );\n });\n });\n\n describe(\"RUN_STARTED event\", () => {\n it(\"updates thread status to streaming\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_123\",\n threadId: \"thread_1\",\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"streaming\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"streaming\");\n expect(result.threadMap.thread_1.streaming.runId).toBe(\"run_123\");\n });\n\n it(\"uses provided timestamp for startTime\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_123\",\n threadId: \"thread_1\",\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.streaming.startTime).toBe(1704067200000);\n });\n });\n\n describe(\"RUN_FINISHED event\", () => {\n it(\"updates thread status to complete\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.status = \"streaming\";\n state.threadMap.thread_1.streaming.status = \"streaming\";\n\n const event: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n runId: \"run_123\",\n threadId: \"thread_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"complete\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"complete\");\n });\n });\n\n describe(\"RUN_ERROR event\", () => {\n it(\"updates thread status to error with details\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: \"Something went wrong\",\n code: \"ERR_001\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"error\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"error\");\n expect(result.threadMap.thread_1.streaming.error).toEqual({\n message: \"Something went wrong\",\n code: \"ERR_001\",\n });\n });\n });\n\n describe(\"TEXT_MESSAGE_START event\", () => {\n it(\"creates new message in thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(1);\n expect(messages[0].id).toBe(\"msg_1\");\n expect(messages[0].role).toBe(\"assistant\");\n expect(messages[0].content).toEqual([]);\n });\n\n it(\"creates user message when role is user\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"user\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(1);\n expect(messages[0].role).toBe(\"user\");\n });\n });\n\n describe(\"TEXT_MESSAGE_CONTENT event\", () => {\n it(\"appends text content to message\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Add a message first\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"Hello \",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({ type: \"text\", text: \"Hello \" });\n });\n\n it(\"creates new text block after non-text content\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"After tool call\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(2);\n expect(content[0]).toEqual({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"test\",\n input: {},\n });\n expect(content[1]).toEqual({ type: \"text\", text: \"After tool call\" });\n });\n\n it(\"accumulates text content deltas\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hello \" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"world!\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({ type: \"text\", text: \"Hello world!\" });\n });\n\n it(\"throws when message not found\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"unknown_msg\",\n delta: \"Hello\",\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"Message unknown_msg not found\");\n });\n });\n\n describe(\"TEXT_MESSAGE_END event\", () => {\n it(\"throws when messageId doesn't match active message\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Set up an active message in streaming state\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"wrong_msg_id\",\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"TEXT_MESSAGE_END messageId mismatch\");\n });\n\n it(\"clears active messageId on success\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"msg_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.streaming.messageId).toBeUndefined();\n });\n });\n\n describe(\"TOOL_CALL_START event\", () => {\n it(\"adds tool_use content block to message\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n parentMessageId: \"msg_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n input: {},\n });\n });\n });\n\n describe(\"TOOL_CALL_START event\", () => {\n it(\"uses last message when no parentMessageId provided\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n // No parentMessageId - should use last message\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n input: {},\n });\n });\n\n it(\"throws when parentMessageId message not found\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n parentMessageId: \"unknown_msg\",\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"Message unknown_msg not found for TOOL_CALL_START event\");\n });\n\n it(\"throws when no messages exist\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n\n const event: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"tool_1\",\n toolCallName: \"get_weather\",\n // No parentMessageId, no messages\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"No messages exist for TOOL_CALL_START event\");\n });\n });\n\n describe(\"TOOL_CALL_ARGS and TOOL_CALL_END events\", () => {\n it(\"handles TOOL_CALL_END with no accumulated args\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Send TOOL_CALL_END without any TOOL_CALL_ARGS first\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: endEvent,\n threadId: \"thread_1\",\n });\n\n // Should return unchanged state since no args were accumulated\n expect(result.threadMap.thread_1).toBe(state.threadMap.thread_1);\n });\n\n it(\"accumulates and parses tool arguments\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Send TOOL_CALL_ARGS\n const argsEvent1: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '{\"city\":',\n };\n\n let result = streamReducer(state, {\n type: \"EVENT\",\n event: argsEvent1,\n threadId: \"thread_1\",\n });\n\n const argsEvent2: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '\"NYC\"}',\n };\n\n result = streamReducer(result, {\n type: \"EVENT\",\n event: argsEvent2,\n threadId: \"thread_1\",\n });\n\n // Send TOOL_CALL_END\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n\n result = streamReducer(result, {\n type: \"EVENT\",\n event: endEvent,\n threadId: \"thread_1\",\n });\n\n const toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(toolContent.input).toEqual({ city: \"NYC\" });\n });\n\n it(\"throws when tool arguments JSON is invalid\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"test\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Send invalid JSON via TOOL_CALL_ARGS\n const argsEvent: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: \"{invalid json\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: argsEvent,\n threadId: \"thread_1\",\n });\n\n // Send TOOL_CALL_END - should throw when parsing\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n\n expect(() => {\n streamReducer(result, {\n type: \"EVENT\",\n event: endEvent,\n threadId: \"thread_1\",\n });\n }).toThrow(\"Failed to parse tool call arguments\");\n });\n });\n\n describe(\"custom component events\", () => {\n it(\"handles tambo.component.start event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.start\",\n value: {\n messageId: \"msg_1\",\n componentId: \"comp_1\",\n componentName: \"WeatherCard\",\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(1);\n expect(content[0]).toEqual({\n type: \"component\",\n id: \"comp_1\",\n name: \"WeatherCard\",\n props: {},\n streamingState: \"started\",\n });\n });\n\n it(\"handles tambo.component.props_delta event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\n props: {},\n streamingState: \"started\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/temperature\", value: 72 }],\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const component = asComponentContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(component.props).toEqual({ temperature: 72 });\n expect(component.streamingState).toBe(\"streaming\");\n });\n\n it(\"throws when component not found for props_delta\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [], // No component\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"unknown_comp\",\n operations: [{ op: \"add\", path: \"/value\", value: 1 }],\n },\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"component unknown_comp not found\");\n });\n\n it(\"handles tambo.run.awaiting_input event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.status = \"streaming\";\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: { pendingToolCallIds: [\"tool_1\", \"tool_2\"] },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n expect(result.threadMap.thread_1.thread.status).toBe(\"waiting\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"waiting\");\n });\n\n it(\"handles tambo.component.state_delta event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"Counter\",\n props: {},\n streamingState: \"started\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.state_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/count\", value: 42 }],\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const component = asComponentContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(component.state).toEqual({ count: 42 });\n expect(component.streamingState).toBe(\"streaming\");\n });\n\n it(\"handles tambo.component.end event\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\n props: {},\n streamingState: \"streaming\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.end\",\n value: { componentId: \"comp_1\" },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // component.end sets streamingState to 'done'\n expect(result.threadMap.thread_1.thread.messages[0].content[0]).toEqual({\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\n props: {},\n streamingState: \"done\",\n });\n });\n\n it(\"throws when message not found for tambo.component.start\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.start\",\n value: {\n messageId: \"unknown_msg\",\n componentId: \"comp_1\",\n componentName: \"Test\",\n },\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\n \"Message unknown_msg not found for tambo.component.start event\",\n );\n });\n\n it(\"throws when component not found for tambo.component.end\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.end\",\n value: { componentId: \"unknown_comp\" },\n };\n\n expect(() => {\n streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n }).toThrow(\"component unknown_comp not found\");\n });\n\n it(\"handles multiple component props_delta operations\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\n props: { existing: \"value\" },\n streamingState: \"started\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [\n { op: \"add\", path: \"/newProp\", value: \"new\" },\n { op: \"replace\", path: \"/existing\", value: \"updated\" },\n ],\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const component = asComponentContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(component.props).toEqual({\n existing: \"updated\",\n newProp: \"new\",\n });\n });\n\n it(\"handles multiple components in same message\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"First\",\n props: {},\n streamingState: \"done\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Add second component\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.start\",\n value: {\n messageId: \"msg_1\",\n componentId: \"comp_2\",\n componentName: \"Second\",\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n expect(content).toHaveLength(2);\n expect(asComponentContent(content, 0).id).toBe(\"comp_1\");\n expect(asComponentContent(content, 1).id).toBe(\"comp_2\");\n });\n\n it(\"updates correct component when multiple exist\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"First\",\n props: { value: 1 },\n streamingState: \"done\",\n },\n {\n type: \"component\",\n id: \"comp_2\",\n name: \"Second\",\n props: { value: 2 },\n streamingState: \"streaming\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // Update second component\n const event: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_2\",\n operations: [{ op: \"replace\", path: \"/value\", value: 99 }],\n },\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const content = result.threadMap.thread_1.thread.messages[0].content;\n // First component unchanged\n expect(asComponentContent(content, 0).props).toEqual({ value: 1 });\n // Second component updated\n expect(asComponentContent(content, 1).props).toEqual({ value: 99 });\n });\n });\n\n describe(\"snapshot tests for complex state transitions\", () => {\n it(\"matches snapshot for full message flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // RUN_STARTED\n const runStarted: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_1\",\n timestamp: 1704067200000,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: runStarted,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_START\n const msgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgStart,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_CONTENT\n const msgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"Hello, how can I help?\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgContent,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_END\n const msgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"msg_1\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgEnd,\n threadId: \"thread_1\",\n });\n\n // RUN_FINISHED\n const runFinished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n runId: \"run_1\",\n threadId: \"thread_1\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: runFinished,\n threadId: \"thread_1\",\n });\n\n // Normalize timestamps for snapshot stability\n const snapshot = {\n ...state,\n threadMap: {\n thread_1: {\n ...state.threadMap.thread_1,\n thread: {\n ...state.threadMap.thread_1.thread,\n messages: state.threadMap.thread_1.thread.messages.map((m) => ({\n ...m,\n createdAt: \"[TIMESTAMP]\",\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n\n it(\"matches snapshot for component streaming flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // Add a message\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // COMPONENT_START\n const compStart: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.start\",\n value: {\n messageId: \"msg_1\",\n componentId: \"comp_1\",\n componentName: \"WeatherCard\",\n },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: compStart,\n threadId: \"thread_1\",\n });\n\n // COMPONENT_PROPS_DELTA - add city\n const propsDelta1: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/city\", value: \"New York\" }],\n },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: propsDelta1,\n threadId: \"thread_1\",\n });\n\n // COMPONENT_PROPS_DELTA - add temperature\n const propsDelta2: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.props_delta\",\n value: {\n componentId: \"comp_1\",\n operations: [{ op: \"add\", path: \"/temperature\", value: 72 }],\n },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: propsDelta2,\n threadId: \"thread_1\",\n });\n\n // COMPONENT_END\n const compEnd: CustomEvent = {\n type: EventType.CUSTOM,\n name: \"tambo.component.end\",\n value: { componentId: \"comp_1\" },\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: compEnd,\n threadId: \"thread_1\",\n });\n\n // Normalize timestamps for snapshot stability\n const snapshot = {\n ...state,\n threadMap: {\n thread_1: {\n ...state.threadMap.thread_1,\n thread: {\n ...state.threadMap.thread_1.thread,\n messages: state.threadMap.thread_1.thread.messages.map((m) => ({\n ...m,\n createdAt: \"[TIMESTAMP]\",\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n\n it(\"matches snapshot for tool call flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // Add a message with tool_use\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"tool_use\", id: \"tool_1\", name: \"get_weather\", input: {} },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n // TOOL_CALL_ARGS\n const toolArgs: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '{\"city\":\"San Francisco\",\"units\":\"fahrenheit\"}',\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: toolArgs,\n threadId: \"thread_1\",\n });\n\n // TOOL_CALL_END\n const toolEnd: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: toolEnd,\n threadId: \"thread_1\",\n });\n\n // TOOL_CALL_RESULT\n const toolResult: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: \"tool_1\",\n messageId: \"msg_1\",\n content: \"Temperature: 65°F, Sunny\",\n role: \"tool\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: toolResult,\n threadId: \"thread_1\",\n });\n\n // Normalize timestamps for snapshot stability\n const snapshot = {\n ...state,\n threadMap: {\n thread_1: {\n ...state.threadMap.thread_1,\n thread: {\n ...state.threadMap.thread_1.thread,\n messages: state.threadMap.thread_1.thread.messages.map((m) => ({\n ...m,\n createdAt: \"[TIMESTAMP]\",\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n });\n});\n"]}
|