@tambo-ai/react 0.74.0 → 0.75.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/README.md +46 -449
- package/dist/hoc/with-tambo-interactable.d.ts +8 -0
- package/dist/hoc/with-tambo-interactable.d.ts.map +1 -1
- package/dist/hoc/with-tambo-interactable.js +5 -2
- package/dist/hoc/with-tambo-interactable.js.map +1 -1
- package/dist/hoc/with-tambo-interactable.test.js +12 -0
- package/dist/hoc/with-tambo-interactable.test.js.map +1 -1
- package/dist/hooks/use-tambo-voice.test.js +3 -0
- package/dist/hooks/use-tambo-voice.test.js.map +1 -1
- package/dist/mcp/mcp-hooks.d.ts.map +1 -1
- package/dist/mcp/mcp-hooks.js +70 -16
- package/dist/mcp/mcp-hooks.js.map +1 -1
- package/dist/mcp/mcp-hooks.test.js +69 -0
- package/dist/mcp/mcp-hooks.test.js.map +1 -1
- package/dist/mcp/tambo-mcp-provider.test.js +24 -0
- package/dist/mcp/tambo-mcp-provider.test.js.map +1 -1
- package/dist/mcp/use-mcp-servers.test.js +9 -0
- package/dist/mcp/use-mcp-servers.test.js.map +1 -1
- package/dist/model/component-metadata.d.ts +4 -4
- package/dist/model/component-metadata.js.map +1 -1
- package/dist/providers/__tests__/thread-input-resource-resolution.test.js +2 -2
- package/dist/providers/__tests__/thread-input-resource-resolution.test.js.map +1 -1
- package/dist/providers/tambo-client-provider.d.ts +6 -0
- package/dist/providers/tambo-client-provider.d.ts.map +1 -1
- package/dist/providers/tambo-client-provider.js +4 -1
- package/dist/providers/tambo-client-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/dist/providers/tambo-interactable-provider.js +8 -0
- package/dist/providers/tambo-interactable-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.test.js +47 -0
- package/dist/providers/tambo-interactable-provider.test.js.map +1 -1
- package/dist/providers/tambo-provider.d.ts.map +1 -1
- package/dist/providers/tambo-provider.js +4 -1
- package/dist/providers/tambo-provider.js.map +1 -1
- package/dist/providers/tambo-stubs.d.ts.map +1 -1
- package/dist/providers/tambo-stubs.js +3 -0
- package/dist/providers/tambo-stubs.js.map +1 -1
- package/dist/providers/tambo-thread-provider-initial-messages.test.js +3 -0
- package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +1 -1
- package/dist/providers/tambo-thread-provider.test.js +3 -0
- package/dist/providers/tambo-thread-provider.test.js.map +1 -1
- package/dist/util/registry-validators.js +1 -1
- package/dist/util/registry-validators.js.map +1 -1
- package/dist/util/resource-content-resolver.test.js +1 -1
- package/dist/util/resource-content-resolver.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts +11 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.js +48 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.test.js +105 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.js +68 -21
- package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js +100 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-messages.test.js +8 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +19 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.js +86 -9
- package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js +273 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts +2 -2
- package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.js +2 -2
- package/dist/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.test.js +11 -11
- package/dist/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +13 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-list.js +4 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +6 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread.js +4 -0
- package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread.test.js +6 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.d.ts +11 -0
- package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.js +5 -0
- package/dist/v1/hooks/use-tambo-v1.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.test.js +13 -0
- package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/dist/v1/index.d.ts +4 -1
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +5 -2
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts +16 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.js +42 -5
- package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.test.js +19 -2
- package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.d.ts +6 -0
- package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.js +50 -11
- package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.test.js +9 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.js +4 -0
- package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +11 -0
- package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.js +10 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
- package/dist/v1/types/auth.d.ts +24 -0
- package/dist/v1/types/auth.d.ts.map +1 -0
- package/dist/v1/types/auth.js +3 -0
- package/dist/v1/types/auth.js.map +1 -0
- package/dist/v1/types/message.d.ts +12 -0
- package/dist/v1/types/message.d.ts.map +1 -1
- package/dist/v1/types/message.js.map +1 -1
- package/dist/v1/types/tool-choice.d.ts +8 -0
- package/dist/v1/types/tool-choice.d.ts.map +1 -0
- package/dist/v1/types/tool-choice.js +3 -0
- package/dist/v1/types/tool-choice.js.map +1 -0
- package/dist/v1/utils/event-accumulator.d.ts +28 -2
- package/dist/v1/utils/event-accumulator.d.ts.map +1 -1
- package/dist/v1/utils/event-accumulator.js +67 -15
- package/dist/v1/utils/event-accumulator.js.map +1 -1
- package/dist/v1/utils/event-accumulator.test.js +106 -0
- package/dist/v1/utils/event-accumulator.test.js.map +1 -1
- package/dist/v1/utils/keyed-throttle.d.ts +42 -0
- package/dist/v1/utils/keyed-throttle.d.ts.map +1 -0
- package/dist/v1/utils/keyed-throttle.js +86 -0
- package/dist/v1/utils/keyed-throttle.js.map +1 -0
- package/dist/v1/utils/keyed-throttle.test.d.ts +2 -0
- package/dist/v1/utils/keyed-throttle.test.d.ts.map +1 -0
- package/dist/v1/utils/keyed-throttle.test.js +147 -0
- package/dist/v1/utils/keyed-throttle.test.js.map +1 -0
- package/dist/v1/utils/registry-conversion.d.ts.map +1 -1
- package/dist/v1/utils/registry-conversion.js +2 -0
- package/dist/v1/utils/registry-conversion.js.map +1 -1
- package/dist/v1/utils/registry-conversion.test.js +23 -0
- package/dist/v1/utils/registry-conversion.test.js.map +1 -1
- package/dist/v1/utils/tool-call-tracker.d.ts +10 -0
- package/dist/v1/utils/tool-call-tracker.d.ts.map +1 -1
- package/dist/v1/utils/tool-call-tracker.js +13 -0
- package/dist/v1/utils/tool-call-tracker.js.map +1 -1
- package/dist/v1/utils/tool-call-tracker.test.d.ts +2 -0
- package/dist/v1/utils/tool-call-tracker.test.d.ts.map +1 -0
- package/dist/v1/utils/tool-call-tracker.test.js +67 -0
- package/dist/v1/utils/tool-call-tracker.test.js.map +1 -0
- package/dist/v1/utils/tool-executor.d.ts +34 -0
- package/dist/v1/utils/tool-executor.d.ts.map +1 -1
- package/dist/v1/utils/tool-executor.js +55 -0
- package/dist/v1/utils/tool-executor.js.map +1 -1
- package/dist/v1/utils/tool-executor.test.js +211 -0
- package/dist/v1/utils/tool-executor.test.js.map +1 -1
- package/esm/hoc/with-tambo-interactable.d.ts +8 -0
- package/esm/hoc/with-tambo-interactable.d.ts.map +1 -1
- package/esm/hoc/with-tambo-interactable.js +5 -2
- package/esm/hoc/with-tambo-interactable.js.map +1 -1
- package/esm/hoc/with-tambo-interactable.test.js +12 -0
- package/esm/hoc/with-tambo-interactable.test.js.map +1 -1
- package/esm/hooks/use-tambo-voice.test.js +3 -0
- package/esm/hooks/use-tambo-voice.test.js.map +1 -1
- package/esm/mcp/mcp-hooks.d.ts.map +1 -1
- package/esm/mcp/mcp-hooks.js +70 -16
- package/esm/mcp/mcp-hooks.js.map +1 -1
- package/esm/mcp/mcp-hooks.test.js +69 -0
- package/esm/mcp/mcp-hooks.test.js.map +1 -1
- package/esm/mcp/tambo-mcp-provider.test.js +24 -0
- package/esm/mcp/tambo-mcp-provider.test.js.map +1 -1
- package/esm/mcp/use-mcp-servers.test.js +9 -0
- package/esm/mcp/use-mcp-servers.test.js.map +1 -1
- package/esm/model/component-metadata.d.ts +4 -4
- package/esm/model/component-metadata.js.map +1 -1
- package/esm/providers/__tests__/thread-input-resource-resolution.test.js +2 -2
- package/esm/providers/__tests__/thread-input-resource-resolution.test.js.map +1 -1
- package/esm/providers/tambo-client-provider.d.ts +6 -0
- package/esm/providers/tambo-client-provider.d.ts.map +1 -1
- package/esm/providers/tambo-client-provider.js +4 -1
- package/esm/providers/tambo-client-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/esm/providers/tambo-interactable-provider.js +8 -0
- package/esm/providers/tambo-interactable-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.test.js +47 -0
- package/esm/providers/tambo-interactable-provider.test.js.map +1 -1
- package/esm/providers/tambo-provider.d.ts.map +1 -1
- package/esm/providers/tambo-provider.js +4 -1
- package/esm/providers/tambo-provider.js.map +1 -1
- package/esm/providers/tambo-stubs.d.ts.map +1 -1
- package/esm/providers/tambo-stubs.js +3 -0
- package/esm/providers/tambo-stubs.js.map +1 -1
- package/esm/providers/tambo-thread-provider-initial-messages.test.js +3 -0
- package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +1 -1
- package/esm/providers/tambo-thread-provider.test.js +3 -0
- package/esm/providers/tambo-thread-provider.test.js.map +1 -1
- package/esm/util/registry-validators.js +1 -1
- package/esm/util/registry-validators.js.map +1 -1
- package/esm/util/resource-content-resolver.test.js +1 -1
- package/esm/util/resource-content-resolver.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts +11 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.js +45 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.test.js +100 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.js +68 -21
- package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js +100 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-messages.test.js +8 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +19 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.js +87 -10
- package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js +273 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts +2 -2
- package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.js +2 -2
- package/esm/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.test.js +11 -11
- package/esm/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +13 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-list.js +4 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +6 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread.js +4 -0
- package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread.test.js +6 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.d.ts +11 -0
- package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.js +5 -0
- package/esm/v1/hooks/use-tambo-v1.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.test.js +13 -0
- package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/esm/v1/index.d.ts +4 -1
- package/esm/v1/index.d.ts.map +1 -1
- package/esm/v1/index.js +3 -1
- package/esm/v1/index.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts +16 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.js +43 -6
- package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.test.js +19 -2
- package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.d.ts +6 -0
- package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.js +51 -12
- package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.test.js +9 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.js +4 -0
- package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +11 -0
- package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.js +10 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
- package/esm/v1/types/auth.d.ts +24 -0
- package/esm/v1/types/auth.d.ts.map +1 -0
- package/esm/v1/types/auth.js +2 -0
- package/esm/v1/types/auth.js.map +1 -0
- package/esm/v1/types/message.d.ts +12 -0
- package/esm/v1/types/message.d.ts.map +1 -1
- package/esm/v1/types/message.js.map +1 -1
- package/esm/v1/types/tool-choice.d.ts +8 -0
- package/esm/v1/types/tool-choice.d.ts.map +1 -0
- package/esm/v1/types/tool-choice.js +2 -0
- package/esm/v1/types/tool-choice.js.map +1 -0
- package/esm/v1/utils/event-accumulator.d.ts +28 -2
- package/esm/v1/utils/event-accumulator.d.ts.map +1 -1
- package/esm/v1/utils/event-accumulator.js +66 -15
- package/esm/v1/utils/event-accumulator.js.map +1 -1
- package/esm/v1/utils/event-accumulator.test.js +106 -0
- package/esm/v1/utils/event-accumulator.test.js.map +1 -1
- package/esm/v1/utils/keyed-throttle.d.ts +42 -0
- package/esm/v1/utils/keyed-throttle.d.ts.map +1 -0
- package/esm/v1/utils/keyed-throttle.js +83 -0
- package/esm/v1/utils/keyed-throttle.js.map +1 -0
- package/esm/v1/utils/keyed-throttle.test.d.ts +2 -0
- package/esm/v1/utils/keyed-throttle.test.d.ts.map +1 -0
- package/esm/v1/utils/keyed-throttle.test.js +145 -0
- package/esm/v1/utils/keyed-throttle.test.js.map +1 -0
- package/esm/v1/utils/registry-conversion.d.ts.map +1 -1
- package/esm/v1/utils/registry-conversion.js +2 -0
- package/esm/v1/utils/registry-conversion.js.map +1 -1
- package/esm/v1/utils/registry-conversion.test.js +23 -0
- package/esm/v1/utils/registry-conversion.test.js.map +1 -1
- package/esm/v1/utils/tool-call-tracker.d.ts +10 -0
- package/esm/v1/utils/tool-call-tracker.d.ts.map +1 -1
- package/esm/v1/utils/tool-call-tracker.js +13 -0
- package/esm/v1/utils/tool-call-tracker.js.map +1 -1
- package/esm/v1/utils/tool-call-tracker.test.d.ts +2 -0
- package/esm/v1/utils/tool-call-tracker.test.d.ts.map +1 -0
- package/esm/v1/utils/tool-call-tracker.test.js +65 -0
- package/esm/v1/utils/tool-call-tracker.test.js.map +1 -0
- package/esm/v1/utils/tool-executor.d.ts +34 -0
- package/esm/v1/utils/tool-executor.d.ts.map +1 -1
- package/esm/v1/utils/tool-executor.js +53 -0
- package/esm/v1/utils/tool-executor.js.map +1 -1
- package/esm/v1/utils/tool-executor.test.js +212 -1
- package/esm/v1/utils/tool-executor.test.js.map +1 -1
- package/package.json +4 -4
|
@@ -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 ThinkingTextMessageContentEvent,\n type ThinkingTextMessageEndEvent,\n type ThinkingTextMessageStartEvent,\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 lastRunCancelled: false,\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 initial state with placeholder thread\", () => {\n const state = createInitialState();\n\n expect(state.currentThreadId).toBe(\"placeholder\");\n expect(state.threadMap.placeholder).toBeDefined();\n expect(state.threadMap.placeholder.thread.id).toBe(\"placeholder\");\n expect(state.threadMap.placeholder.thread.messages).toEqual([]);\n expect(state.threadMap.placeholder.streaming.status).toBe(\"idle\");\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(\"resets lastRunCancelled to false when a new run starts\", () => {\n // Start with a thread that was cancelled\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.lastRunCancelled = true;\n\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 // lastRunCancelled should be reset to false\n expect(result.threadMap.thread_1.thread.lastRunCancelled).toBe(false);\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 it(\"does not switch currentThreadId when placeholder has no messages\", () => {\n const state = createInitialState();\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: realThreadId,\n });\n\n expect(result.threadMap.placeholder.thread.messages).toHaveLength(0);\n expect(result.currentThreadId).toBe(\"placeholder\");\n });\n\n it(\"migrates messages from placeholder thread to real thread\", () => {\n // Start with initial state (which has placeholder thread)\n const state = createInitialState();\n\n // Verify placeholder thread exists\n expect(state.currentThreadId).toBe(\"placeholder\");\n\n // Add a user message to the placeholder thread\n const userMsgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"user_msg_1\",\n role: \"user\",\n };\n const userMsgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"user_msg_1\",\n delta: \"Hello\",\n };\n const userMsgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"user_msg_1\",\n };\n\n let stateWithUserMsg = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgStart,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgContent,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgEnd,\n threadId: \"placeholder\",\n });\n\n // Verify placeholder thread has the message\n expect(stateWithUserMsg.currentThreadId).toBe(\"placeholder\");\n expect(\n stateWithUserMsg.threadMap.placeholder.thread.messages,\n ).toHaveLength(1);\n expect(\n stateWithUserMsg.threadMap.placeholder.thread.messages[0].content[0],\n ).toEqual({\n type: \"text\",\n text: \"Hello\",\n });\n\n // Now RUN_STARTED arrives with the real thread ID\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const finalState = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: realThreadId,\n });\n\n // Placeholder thread should be reset to empty (not removed)\n expect(finalState.threadMap.placeholder).toBeDefined();\n expect(finalState.threadMap.placeholder.thread.messages).toHaveLength(0);\n\n // Real thread should have the migrated user message\n expect(finalState.threadMap[realThreadId]).toBeDefined();\n expect(finalState.threadMap[realThreadId].thread.messages).toHaveLength(\n 1,\n );\n expect(\n finalState.threadMap[realThreadId].thread.messages[0].content[0],\n ).toEqual({\n type: \"text\",\n text: \"Hello\",\n });\n\n // currentThreadId should be updated to real thread\n expect(finalState.currentThreadId).toBe(realThreadId);\n\n // Real thread should be in streaming state\n expect(finalState.threadMap[realThreadId].thread.status).toBe(\n \"streaming\",\n );\n expect(finalState.threadMap[realThreadId].streaming.runId).toBe(\n \"run_456\",\n );\n });\n\n it(\"migrates messages even if currentThreadId changes away from placeholder\", () => {\n let state = createInitialState();\n state = streamReducer(state, {\n type: \"INIT_THREAD\",\n threadId: \"thread_1\",\n });\n state = streamReducer(state, {\n type: \"SET_CURRENT_THREAD\",\n threadId: \"thread_1\",\n });\n\n const userMsgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"user_msg_1\",\n role: \"user\",\n };\n const userMsgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"user_msg_1\",\n delta: \"Hello\",\n };\n const userMsgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"user_msg_1\",\n };\n\n state = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgStart,\n threadId: \"placeholder\",\n });\n state = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgContent,\n threadId: \"placeholder\",\n });\n state = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgEnd,\n threadId: \"placeholder\",\n });\n\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: realThreadId,\n });\n\n expect(result.threadMap.placeholder.thread.messages).toHaveLength(0);\n expect(result.threadMap[realThreadId].thread.messages).toHaveLength(1);\n expect(result.currentThreadId).toBe(\"thread_1\");\n });\n\n it(\"prefers event.threadId over action threadId when RUN_STARTED is dispatched\", () => {\n // Start with initial state (which has placeholder thread)\n const state = createInitialState();\n\n // Add a user message to the placeholder thread\n const userMsgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"user_msg_1\",\n role: \"user\",\n };\n const userMsgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"user_msg_1\",\n delta: \"Hello\",\n };\n const userMsgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"user_msg_1\",\n };\n\n let stateWithUserMsg = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgStart,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgContent,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgEnd,\n threadId: \"placeholder\",\n });\n\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: \"placeholder\",\n });\n\n expect(result.threadMap.placeholder.thread.messages).toHaveLength(0);\n expect(result.threadMap[realThreadId].thread.messages).toHaveLength(1);\n expect(result.currentThreadId).toBe(realThreadId);\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 it(\"sets lastRunCancelled and idle status when code is CANCELLED\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: \"Run cancelled\",\n code: \"CANCELLED\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Cancelled runs should show as idle, not error\n expect(result.threadMap.thread_1.thread.status).toBe(\"idle\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"idle\");\n // lastRunCancelled should be set\n expect(result.threadMap.thread_1.thread.lastRunCancelled).toBe(true);\n // No error should be stored for cancelled runs\n expect(result.threadMap.thread_1.streaming.error).toBeUndefined();\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(\"creates synthetic message when parentMessageId 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 // When parentMessageId not found, creates a synthetic message\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Should create a synthetic message with the tool call\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(2); // Original + synthetic\n expect(messages[1].id).toBe(\"unknown_msg\");\n expect(messages[1].role).toBe(\"assistant\");\n expect(messages[1].content).toHaveLength(1);\n expect(messages[1].content[0]).toMatchObject({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n });\n });\n\n it(\"creates synthetic message 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 // When no messages exist, creates a synthetic message\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_tool_tool_1\");\n expect(messages[0].role).toBe(\"assistant\");\n expect(messages[0].content).toHaveLength(1);\n expect(messages[0].content[0]).toMatchObject({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n });\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(\"optimistically parses partial tool args during streaming\", () => {\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 // First chunk: partial key — partial-json can parse this into { city: \"\" }\n let result = streamReducer(state, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '{\"city\": \"N',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n });\n\n let toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n // partial-json parses incomplete string values\n expect(toolContent.input).toEqual({ city: \"N\" });\n\n // Second chunk: complete city, start of units\n result = streamReducer(result, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: 'YC\", \"units\": \"fahr',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n });\n\n toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(toolContent.input).toEqual({ city: \"NYC\", units: \"fahr\" });\n\n // Final chunk + TOOL_CALL_END\n result = streamReducer(result, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: 'enheit\"}',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n });\n\n result = streamReducer(result, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n } satisfies ToolCallEndEvent,\n threadId: \"thread_1\",\n });\n\n toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(toolContent.input).toEqual({\n city: \"NYC\",\n units: \"fahrenheit\",\n });\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: {\n pendingToolCalls: [\n { toolCallId: \"tool_1\", toolName: \"test1\", arguments: \"{}\" },\n { toolCallId: \"tool_2\", toolName: \"test2\", arguments: \"{}\" },\n ],\n },\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(\"creates message on-demand when 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 // Should create the message on-demand instead of throwing\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Verify the message was created\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(2);\n expect(messages[1].id).toBe(\"unknown_msg\");\n expect(messages[1].role).toBe(\"assistant\");\n // And the component was added to it\n expect(messages[1].content).toHaveLength(1);\n expect(messages[1].content[0]).toMatchObject({\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\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 describe(\"thinking events\", () => {\n it(\"handles THINKING_TEXT_MESSAGE_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 state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n const event: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"\"]);\n expect(\n result.threadMap.thread_1.streaming.reasoningStartTime,\n ).toBeDefined();\n });\n\n it(\"handles THINKING_TEXT_MESSAGE_CONTENT 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 reasoning: [\"\"],\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.streaming.reasoningStartTime = 1704067200000;\n\n const event: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Let me think about this...\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"Let me think about this...\"]);\n });\n\n it(\"accumulates multiple thinking 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: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n reasoning: [\"First part \"],\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n const event: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"second part\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"First part second part\"]);\n });\n\n it(\"handles THINKING_TEXT_MESSAGE_END event and calculates duration\", () => {\n const startTime = 1704067200000; // Fixed start time\n const endTime = 1704067205000; // 5 seconds later\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 reasoning: [\"Some thinking content\"],\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.streaming.reasoningStartTime = startTime;\n\n const event: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n timestamp: endTime,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoningDurationMS).toBe(5000);\n });\n\n it(\"handles multiple thinking chunks\", () => {\n let 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 state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n // First thinking chunk\n const start1: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: start1,\n threadId: \"thread_1\",\n });\n\n const content1: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"First thought\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: content1,\n threadId: \"thread_1\",\n });\n\n const end1: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: end1,\n threadId: \"thread_1\",\n });\n\n // Second thinking chunk\n const start2: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: start2,\n threadId: \"thread_1\",\n });\n\n const content2: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Second thought\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: content2,\n threadId: \"thread_1\",\n });\n\n const end2: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: end2,\n threadId: \"thread_1\",\n });\n\n const message = state.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"First thought\", \"Second thought\"]);\n });\n\n it(\"handles thinking content without explicit 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 // No thinking array yet\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n const event: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Implicit start\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"Implicit start\"]);\n expect(\n result.threadMap.thread_1.streaming.reasoningStartTime,\n ).toBeDefined();\n });\n\n it(\"creates ephemeral message when no message exists\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n // No messageId set\n\n const event: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Should have created an ephemeral assistant message with reasoning\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.id).toMatch(/^ephemeral_/);\n expect(message.role).toBe(\"assistant\");\n expect(message.reasoning).toEqual([\"\"]);\n expect(result.threadMap.thread_1.streaming.reasoningStartTime).toBe(\n 1704067200000,\n );\n expect(result.threadMap.thread_1.streaming.messageId).toBe(message.id);\n });\n\n it(\"uses last message when no messageId in streaming state\", () => {\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 // No messageId set in streaming state\n\n const event: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"\"]);\n });\n\n it(\"merges ephemeral reasoning message with subsequent TEXT_MESSAGE_START\", () => {\n let state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n\n // Simulate reasoning events arriving before text message\n const thinkingStart: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingStart,\n threadId: \"thread_1\",\n });\n\n const thinkingContent: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Let me think about this...\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingContent,\n threadId: \"thread_1\",\n });\n\n // Verify ephemeral message was created\n expect(state.threadMap.thread_1.thread.messages).toHaveLength(1);\n const ephemeralMessage = state.threadMap.thread_1.thread.messages[0];\n expect(ephemeralMessage.id).toMatch(/^ephemeral_/);\n expect(ephemeralMessage.reasoning).toEqual([\n \"Let me think about this...\",\n ]);\n\n // Now TEXT_MESSAGE_START arrives - should merge with ephemeral message\n const textStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_real_123\",\n role: \"assistant\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: textStart,\n threadId: \"thread_1\",\n });\n\n // Should still have only one message (merged)\n expect(state.threadMap.thread_1.thread.messages).toHaveLength(1);\n const mergedMessage = state.threadMap.thread_1.thread.messages[0];\n\n // The message should have the real ID now\n expect(mergedMessage.id).toBe(\"msg_real_123\");\n // But should preserve the reasoning\n expect(mergedMessage.reasoning).toEqual([\"Let me think about this...\"]);\n expect(mergedMessage.role).toBe(\"assistant\");\n // Streaming state should track the new message ID\n expect(state.threadMap.thread_1.streaming.messageId).toBe(\"msg_real_123\");\n });\n\n it(\"matches snapshot for full thinking flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // Add an assistant 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 state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n // THINKING_TEXT_MESSAGE_START\n const thinkingStart: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingStart,\n threadId: \"thread_1\",\n });\n\n // THINKING_TEXT_MESSAGE_CONTENT\n const thinkingContent: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Let me analyze this step by step...\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingContent,\n threadId: \"thread_1\",\n });\n\n // THINKING_TEXT_MESSAGE_END\n const thinkingEnd: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingEnd,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_CONTENT (actual response after thinking)\n const msgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"Based on my analysis, here's what I think...\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgContent,\n threadId: \"thread_1\",\n });\n\n // Normalize 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 // Keep reasoningDurationMS but normalize it for snapshot\n reasoningDurationMS: m.reasoningDurationMS\n ? \"[DURATION]\"\n : undefined,\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n streaming: {\n ...state.threadMap.thread_1.streaming,\n reasoningStartTime: state.threadMap.thread_1.streaming\n .reasoningStartTime\n ? \"[TIMESTAMP]\"\n : undefined,\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n });\n\n describe(\"LOAD_THREAD_MESSAGES action\", () => {\n it(\"loads messages into empty thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hi there!\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n expect(result.threadMap.thread_1.thread.messages[0].id).toBe(\"msg_1\");\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\"msg_2\");\n });\n\n it(\"creates thread if it does not exist\", () => {\n const state = createInitialState();\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"new_thread\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.new_thread).toBeDefined();\n expect(result.threadMap.new_thread.thread.id).toBe(\"new_thread\");\n expect(result.threadMap.new_thread.thread.messages).toHaveLength(1);\n });\n\n it(\"deduplicates by message ID, keeping existing messages\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Add an existing message\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Existing content\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"New content\" }], // Different content\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Response\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n // Existing message is kept (not replaced)\n expect(result.threadMap.thread_1.thread.messages[0].content[0]).toEqual({\n type: \"text\",\n text: \"Existing content\",\n });\n // New message is added\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\"msg_2\");\n });\n\n it(\"skips merge when streaming and skipIfStreaming is true\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming.status = \"streaming\";\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Response\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n skipIfStreaming: true,\n });\n\n // State should be unchanged\n expect(result).toBe(state);\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n });\n\n it(\"does merge when streaming and skipIfStreaming is false\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming.status = \"streaming\";\n state.threadMap.thread_1.thread.messages = [];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n skipIfStreaming: false,\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n });\n\n it(\"sorts messages by createdAt\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Response\" }],\n createdAt: \"2024-01-01T00:00:02.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n {\n id: \"msg_3\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Goodbye\" }],\n createdAt: \"2024-01-01T00:00:03.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(3);\n // Should be sorted by createdAt\n expect(result.threadMap.thread_1.thread.messages[0].id).toBe(\"msg_1\");\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\"msg_2\");\n expect(result.threadMap.thread_1.thread.messages[2].id).toBe(\"msg_3\");\n });\n\n it(\"handles messages without createdAt (places them at the end)\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_no_date\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"No date\" }],\n // No createdAt\n },\n {\n id: \"msg_with_date\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Has date\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n // Message with date comes first, no date goes to end\n expect(result.threadMap.thread_1.thread.messages[0].id).toBe(\n \"msg_with_date\",\n );\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\n \"msg_no_date\",\n );\n });\n\n it(\"sets streamingState to 'done' on component content blocks without streamingState\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"Here is a component\" },\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"WeatherCard\",\n props: { city: \"SF\", temperature: 72 },\n // No streamingState — simulates API-loaded message\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(1);\n const componentBlock = messages[0].content.find(\n (c) => c.type === \"component\",\n );\n expect(componentBlock).toBeDefined();\n expect(componentBlock!.type).toBe(\"component\");\n expect(\n (componentBlock as { streamingState?: string }).streamingState,\n ).toBe(\"done\");\n });\n\n it(\"overwrites non-done streamingState and warns\", () => {\n const state = createTestStreamState(\"thread_1\");\n const warnSpy = jest.spyOn(console, \"warn\").mockImplementation();\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"WeatherCard\",\n props: { city: \"SF\" },\n streamingState: \"streaming\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n const componentBlock = messages[0].content.find(\n (c) => c.type === \"component\",\n );\n // Always set to \"done\" for API-loaded messages\n expect(\n (componentBlock as { streamingState?: string }).streamingState,\n ).toBe(\"done\");\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('unexpected streamingState \"streaming\"'),\n );\n\n warnSpy.mockRestore();\n });\n\n it(\"handles system role messages from API\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_system\",\n role: \"system\",\n content: [{ type: \"text\", text: \"System prompt\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"msg_user\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n expect(result.threadMap.thread_1.thread.messages[0].role).toBe(\"system\");\n expect(result.threadMap.thread_1.thread.messages[1].role).toBe(\"user\");\n });\n });\n\n describe(\"UPDATE_THREAD_TITLE action\", () => {\n it(\"updates the title on an existing thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"UPDATE_THREAD_TITLE\",\n threadId: \"thread_1\",\n title: \"My Chat Thread\",\n });\n\n expect(result.threadMap.thread_1.thread.title).toBe(\"My Chat Thread\");\n });\n\n it(\"returns unchanged state when thread does not exist\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"UPDATE_THREAD_TITLE\",\n threadId: \"nonexistent_thread\",\n title: \"My Chat Thread\",\n });\n\n expect(result).toBe(state);\n });\n\n it(\"preserves other thread properties when updating title\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"UPDATE_THREAD_TITLE\",\n threadId: \"thread_1\",\n title: \"My Chat Thread\",\n });\n\n expect(result.threadMap.thread_1.thread.title).toBe(\"My Chat Thread\");\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n expect(result.threadMap.thread_1.thread.id).toBe(\"thread_1\");\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 ThinkingTextMessageContentEvent,\n type ThinkingTextMessageEndEvent,\n type ThinkingTextMessageStartEvent,\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 lastRunCancelled: false,\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 initial state with placeholder thread\", () => {\n const state = createInitialState();\n\n expect(state.currentThreadId).toBe(\"placeholder\");\n expect(state.threadMap.placeholder).toBeDefined();\n expect(state.threadMap.placeholder.thread.id).toBe(\"placeholder\");\n expect(state.threadMap.placeholder.thread.messages).toEqual([]);\n expect(state.threadMap.placeholder.streaming.status).toBe(\"idle\");\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(\"resets lastRunCancelled to false when a new run starts\", () => {\n // Start with a thread that was cancelled\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.lastRunCancelled = true;\n\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 // lastRunCancelled should be reset to false\n expect(result.threadMap.thread_1.thread.lastRunCancelled).toBe(false);\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 it(\"does not switch currentThreadId when placeholder has no messages\", () => {\n const state = createInitialState();\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: realThreadId,\n });\n\n expect(result.threadMap.placeholder.thread.messages).toHaveLength(0);\n expect(result.currentThreadId).toBe(\"placeholder\");\n });\n\n it(\"migrates messages from placeholder thread to real thread\", () => {\n // Start with initial state (which has placeholder thread)\n const state = createInitialState();\n\n // Verify placeholder thread exists\n expect(state.currentThreadId).toBe(\"placeholder\");\n\n // Add a user message to the placeholder thread\n const userMsgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"user_msg_1\",\n role: \"user\",\n };\n const userMsgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"user_msg_1\",\n delta: \"Hello\",\n };\n const userMsgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"user_msg_1\",\n };\n\n let stateWithUserMsg = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgStart,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgContent,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgEnd,\n threadId: \"placeholder\",\n });\n\n // Verify placeholder thread has the message\n expect(stateWithUserMsg.currentThreadId).toBe(\"placeholder\");\n expect(\n stateWithUserMsg.threadMap.placeholder.thread.messages,\n ).toHaveLength(1);\n expect(\n stateWithUserMsg.threadMap.placeholder.thread.messages[0].content[0],\n ).toEqual({\n type: \"text\",\n text: \"Hello\",\n });\n\n // Now RUN_STARTED arrives with the real thread ID\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const finalState = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: realThreadId,\n });\n\n // Placeholder thread should be reset to empty (not removed)\n expect(finalState.threadMap.placeholder).toBeDefined();\n expect(finalState.threadMap.placeholder.thread.messages).toHaveLength(0);\n\n // Real thread should have the migrated user message\n expect(finalState.threadMap[realThreadId]).toBeDefined();\n expect(finalState.threadMap[realThreadId].thread.messages).toHaveLength(\n 1,\n );\n expect(\n finalState.threadMap[realThreadId].thread.messages[0].content[0],\n ).toEqual({\n type: \"text\",\n text: \"Hello\",\n });\n\n // currentThreadId should be updated to real thread\n expect(finalState.currentThreadId).toBe(realThreadId);\n\n // Real thread should be in streaming state\n expect(finalState.threadMap[realThreadId].thread.status).toBe(\n \"streaming\",\n );\n expect(finalState.threadMap[realThreadId].streaming.runId).toBe(\n \"run_456\",\n );\n });\n\n it(\"migrates messages even if currentThreadId changes away from placeholder\", () => {\n let state = createInitialState();\n state = streamReducer(state, {\n type: \"INIT_THREAD\",\n threadId: \"thread_1\",\n });\n state = streamReducer(state, {\n type: \"SET_CURRENT_THREAD\",\n threadId: \"thread_1\",\n });\n\n const userMsgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"user_msg_1\",\n role: \"user\",\n };\n const userMsgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"user_msg_1\",\n delta: \"Hello\",\n };\n const userMsgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"user_msg_1\",\n };\n\n state = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgStart,\n threadId: \"placeholder\",\n });\n state = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgContent,\n threadId: \"placeholder\",\n });\n state = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgEnd,\n threadId: \"placeholder\",\n });\n\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: realThreadId,\n });\n\n expect(result.threadMap.placeholder.thread.messages).toHaveLength(0);\n expect(result.threadMap[realThreadId].thread.messages).toHaveLength(1);\n expect(result.currentThreadId).toBe(\"thread_1\");\n });\n\n it(\"prefers event.threadId over action threadId when RUN_STARTED is dispatched\", () => {\n // Start with initial state (which has placeholder thread)\n const state = createInitialState();\n\n // Add a user message to the placeholder thread\n const userMsgStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"user_msg_1\",\n role: \"user\",\n };\n const userMsgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"user_msg_1\",\n delta: \"Hello\",\n };\n const userMsgEnd: TextMessageEndEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"user_msg_1\",\n };\n\n let stateWithUserMsg = streamReducer(state, {\n type: \"EVENT\",\n event: userMsgStart,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgContent,\n threadId: \"placeholder\",\n });\n stateWithUserMsg = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: userMsgEnd,\n threadId: \"placeholder\",\n });\n\n const realThreadId = \"thread_real_123\";\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n runId: \"run_456\",\n threadId: realThreadId,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(stateWithUserMsg, {\n type: \"EVENT\",\n event: runStartedEvent,\n threadId: \"placeholder\",\n });\n\n expect(result.threadMap.placeholder.thread.messages).toHaveLength(0);\n expect(result.threadMap[realThreadId].thread.messages).toHaveLength(1);\n expect(result.currentThreadId).toBe(realThreadId);\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 it(\"sets lastCompletedRunId from event.runId\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming = {\n status: \"streaming\",\n runId: \"run_abc\",\n };\n\n const event: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n runId: \"run_abc\",\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.lastCompletedRunId).toBe(\"run_abc\");\n });\n\n it(\"prefers event.runId over streaming.runId for lastCompletedRunId\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.lastCompletedRunId = \"run_old\";\n state.threadMap.thread_1.streaming = {\n status: \"streaming\",\n // runId intentionally undefined\n };\n\n const event: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n runId: \"run_from_event\",\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.lastCompletedRunId).toBe(\n \"run_from_event\",\n );\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 it(\"sets lastRunCancelled and idle status when code is CANCELLED\", () => {\n const state = createTestStreamState(\"thread_1\");\n const event: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: \"Run cancelled\",\n code: \"CANCELLED\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Cancelled runs should show as idle, not error\n expect(result.threadMap.thread_1.thread.status).toBe(\"idle\");\n expect(result.threadMap.thread_1.streaming.status).toBe(\"idle\");\n // lastRunCancelled should be set\n expect(result.threadMap.thread_1.thread.lastRunCancelled).toBe(true);\n // No error should be stored for cancelled runs\n expect(result.threadMap.thread_1.streaming.error).toBeUndefined();\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(\"creates synthetic message when parentMessageId 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 // When parentMessageId not found, creates a synthetic message\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Should create a synthetic message with the tool call\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(2); // Original + synthetic\n expect(messages[1].id).toBe(\"unknown_msg\");\n expect(messages[1].role).toBe(\"assistant\");\n expect(messages[1].content).toHaveLength(1);\n expect(messages[1].content[0]).toMatchObject({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n });\n });\n\n it(\"creates synthetic message 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 // When no messages exist, creates a synthetic message\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_tool_tool_1\");\n expect(messages[0].role).toBe(\"assistant\");\n expect(messages[0].content).toHaveLength(1);\n expect(messages[0].content[0]).toMatchObject({\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"get_weather\",\n });\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(\"optimistically parses partial tool args during streaming\", () => {\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 // First chunk: partial key — partial-json can parse this into { city: \"\" }\n let result = streamReducer(state, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: '{\"city\": \"N',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n });\n\n let toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n // partial-json parses incomplete string values\n expect(toolContent.input).toEqual({ city: \"N\" });\n\n // Second chunk: complete city, start of units\n result = streamReducer(result, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: 'YC\", \"units\": \"fahr',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n });\n\n toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(toolContent.input).toEqual({ city: \"NYC\", units: \"fahr\" });\n\n // Final chunk + TOOL_CALL_END\n result = streamReducer(result, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n delta: 'enheit\"}',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n });\n\n result = streamReducer(result, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"tool_1\",\n } satisfies ToolCallEndEvent,\n threadId: \"thread_1\",\n });\n\n toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n expect(toolContent.input).toEqual({\n city: \"NYC\",\n units: \"fahrenheit\",\n });\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 it(\"uses parsedToolArgs from action when provided (skips own parsing)\", () => {\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 preParsed = { city: \"Seattle\", units: \"celsius\" };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event: {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"tool_1\",\n // Deliberately incomplete JSON — if the reducer re-parses, it would not match preParsed\n delta: '{\"city\": \"Seat',\n } satisfies ToolCallArgsEvent,\n threadId: \"thread_1\",\n parsedToolArgs: preParsed,\n });\n\n const toolContent = asToolUseContent(\n result.threadMap.thread_1.thread.messages[0].content,\n 0,\n );\n // Should use the pre-parsed value, not the incomplete delta\n expect(toolContent.input).toEqual(preParsed);\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: {\n pendingToolCalls: [\n { toolCallId: \"tool_1\", toolName: \"test1\", arguments: \"{}\" },\n { toolCallId: \"tool_2\", toolName: \"test2\", arguments: \"{}\" },\n ],\n },\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(\"creates message on-demand when 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 // Should create the message on-demand instead of throwing\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Verify the message was created\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(2);\n expect(messages[1].id).toBe(\"unknown_msg\");\n expect(messages[1].role).toBe(\"assistant\");\n // And the component was added to it\n expect(messages[1].content).toHaveLength(1);\n expect(messages[1].content[0]).toMatchObject({\n type: \"component\",\n id: \"comp_1\",\n name: \"Test\",\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 describe(\"thinking events\", () => {\n it(\"handles THINKING_TEXT_MESSAGE_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 state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n const event: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"\"]);\n expect(\n result.threadMap.thread_1.streaming.reasoningStartTime,\n ).toBeDefined();\n });\n\n it(\"handles THINKING_TEXT_MESSAGE_CONTENT 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 reasoning: [\"\"],\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.streaming.reasoningStartTime = 1704067200000;\n\n const event: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Let me think about this...\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"Let me think about this...\"]);\n });\n\n it(\"accumulates multiple thinking 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: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n reasoning: [\"First part \"],\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n const event: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"second part\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"First part second part\"]);\n });\n\n it(\"handles THINKING_TEXT_MESSAGE_END event and calculates duration\", () => {\n const startTime = 1704067200000; // Fixed start time\n const endTime = 1704067205000; // 5 seconds later\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 reasoning: [\"Some thinking content\"],\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n state.threadMap.thread_1.streaming.reasoningStartTime = startTime;\n\n const event: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n timestamp: endTime,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoningDurationMS).toBe(5000);\n });\n\n it(\"handles multiple thinking chunks\", () => {\n let 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 state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n // First thinking chunk\n const start1: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: start1,\n threadId: \"thread_1\",\n });\n\n const content1: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"First thought\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: content1,\n threadId: \"thread_1\",\n });\n\n const end1: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: end1,\n threadId: \"thread_1\",\n });\n\n // Second thinking chunk\n const start2: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: start2,\n threadId: \"thread_1\",\n });\n\n const content2: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Second thought\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: content2,\n threadId: \"thread_1\",\n });\n\n const end2: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: end2,\n threadId: \"thread_1\",\n });\n\n const message = state.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"First thought\", \"Second thought\"]);\n });\n\n it(\"handles thinking content without explicit 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 // No thinking array yet\n },\n ];\n state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n const event: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Implicit start\",\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"Implicit start\"]);\n expect(\n result.threadMap.thread_1.streaming.reasoningStartTime,\n ).toBeDefined();\n });\n\n it(\"creates ephemeral message when no message exists\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n // No messageId set\n\n const event: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n // Should have created an ephemeral assistant message with reasoning\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.id).toMatch(/^ephemeral_/);\n expect(message.role).toBe(\"assistant\");\n expect(message.reasoning).toEqual([\"\"]);\n expect(result.threadMap.thread_1.streaming.reasoningStartTime).toBe(\n 1704067200000,\n );\n expect(result.threadMap.thread_1.streaming.messageId).toBe(message.id);\n });\n\n it(\"uses last message when no messageId in streaming state\", () => {\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 // No messageId set in streaming state\n\n const event: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n };\n\n const result = streamReducer(state, {\n type: \"EVENT\",\n event,\n threadId: \"thread_1\",\n });\n\n const message = result.threadMap.thread_1.thread.messages[0];\n expect(message.reasoning).toEqual([\"\"]);\n });\n\n it(\"merges ephemeral reasoning message with subsequent TEXT_MESSAGE_START\", () => {\n let state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n\n // Simulate reasoning events arriving before text message\n const thinkingStart: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingStart,\n threadId: \"thread_1\",\n });\n\n const thinkingContent: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Let me think about this...\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingContent,\n threadId: \"thread_1\",\n });\n\n // Verify ephemeral message was created\n expect(state.threadMap.thread_1.thread.messages).toHaveLength(1);\n const ephemeralMessage = state.threadMap.thread_1.thread.messages[0];\n expect(ephemeralMessage.id).toMatch(/^ephemeral_/);\n expect(ephemeralMessage.reasoning).toEqual([\n \"Let me think about this...\",\n ]);\n\n // Now TEXT_MESSAGE_START arrives - should merge with ephemeral message\n const textStart: TextMessageStartEvent = {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_real_123\",\n role: \"assistant\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: textStart,\n threadId: \"thread_1\",\n });\n\n // Should still have only one message (merged)\n expect(state.threadMap.thread_1.thread.messages).toHaveLength(1);\n const mergedMessage = state.threadMap.thread_1.thread.messages[0];\n\n // The message should have the real ID now\n expect(mergedMessage.id).toBe(\"msg_real_123\");\n // But should preserve the reasoning\n expect(mergedMessage.reasoning).toEqual([\"Let me think about this...\"]);\n expect(mergedMessage.role).toBe(\"assistant\");\n // Streaming state should track the new message ID\n expect(state.threadMap.thread_1.streaming.messageId).toBe(\"msg_real_123\");\n });\n\n it(\"matches snapshot for full thinking flow\", () => {\n let state = createTestStreamState(\"thread_1\");\n\n // Add an assistant 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 state.threadMap.thread_1.streaming.messageId = \"msg_1\";\n\n // THINKING_TEXT_MESSAGE_START\n const thinkingStart: ThinkingTextMessageStartEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_START,\n timestamp: 1704067200000,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingStart,\n threadId: \"thread_1\",\n });\n\n // THINKING_TEXT_MESSAGE_CONTENT\n const thinkingContent: ThinkingTextMessageContentEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_CONTENT,\n delta: \"Let me analyze this step by step...\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingContent,\n threadId: \"thread_1\",\n });\n\n // THINKING_TEXT_MESSAGE_END\n const thinkingEnd: ThinkingTextMessageEndEvent = {\n type: EventType.THINKING_TEXT_MESSAGE_END,\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: thinkingEnd,\n threadId: \"thread_1\",\n });\n\n // TEXT_MESSAGE_CONTENT (actual response after thinking)\n const msgContent: TextMessageContentEvent = {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_1\",\n delta: \"Based on my analysis, here's what I think...\",\n };\n state = streamReducer(state, {\n type: \"EVENT\",\n event: msgContent,\n threadId: \"thread_1\",\n });\n\n // Normalize 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 // Keep reasoningDurationMS but normalize it for snapshot\n reasoningDurationMS: m.reasoningDurationMS\n ? \"[DURATION]\"\n : undefined,\n })),\n createdAt: \"[TIMESTAMP]\",\n updatedAt: \"[TIMESTAMP]\",\n },\n streaming: {\n ...state.threadMap.thread_1.streaming,\n reasoningStartTime: state.threadMap.thread_1.streaming\n .reasoningStartTime\n ? \"[TIMESTAMP]\"\n : undefined,\n },\n },\n },\n };\n\n expect(snapshot).toMatchSnapshot();\n });\n });\n\n describe(\"LOAD_THREAD_MESSAGES action\", () => {\n it(\"loads messages into empty thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Hi there!\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n expect(result.threadMap.thread_1.thread.messages[0].id).toBe(\"msg_1\");\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\"msg_2\");\n });\n\n it(\"creates thread if it does not exist\", () => {\n const state = createInitialState();\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"new_thread\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.new_thread).toBeDefined();\n expect(result.threadMap.new_thread.thread.id).toBe(\"new_thread\");\n expect(result.threadMap.new_thread.thread.messages).toHaveLength(1);\n });\n\n it(\"deduplicates by message ID, keeping existing messages\", () => {\n const state = createTestStreamState(\"thread_1\");\n // Add an existing message\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Existing content\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"New content\" }], // Different content\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Response\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n // Existing message is kept (not replaced)\n expect(result.threadMap.thread_1.thread.messages[0].content[0]).toEqual({\n type: \"text\",\n text: \"Existing content\",\n });\n // New message is added\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\"msg_2\");\n });\n\n it(\"skips merge when streaming and skipIfStreaming is true\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming.status = \"streaming\";\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Response\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n skipIfStreaming: true,\n });\n\n // State should be unchanged\n expect(result).toBe(state);\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n });\n\n it(\"does merge when streaming and skipIfStreaming is false\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.streaming.status = \"streaming\";\n state.threadMap.thread_1.thread.messages = [];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n skipIfStreaming: false,\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n });\n\n it(\"sorts messages by createdAt\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_2\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Response\" }],\n createdAt: \"2024-01-01T00:00:02.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n {\n id: \"msg_3\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Goodbye\" }],\n createdAt: \"2024-01-01T00:00:03.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(3);\n // Should be sorted by createdAt\n expect(result.threadMap.thread_1.thread.messages[0].id).toBe(\"msg_1\");\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\"msg_2\");\n expect(result.threadMap.thread_1.thread.messages[2].id).toBe(\"msg_3\");\n });\n\n it(\"handles messages without createdAt (places them at the end)\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [];\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_no_date\",\n role: \"assistant\",\n content: [{ type: \"text\", text: \"No date\" }],\n // No createdAt\n },\n {\n id: \"msg_with_date\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Has date\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n // Message with date comes first, no date goes to end\n expect(result.threadMap.thread_1.thread.messages[0].id).toBe(\n \"msg_with_date\",\n );\n expect(result.threadMap.thread_1.thread.messages[1].id).toBe(\n \"msg_no_date\",\n );\n });\n\n it(\"sets streamingState to 'done' on component content blocks without streamingState\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"Here is a component\" },\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"WeatherCard\",\n props: { city: \"SF\", temperature: 72 },\n // No streamingState — simulates API-loaded message\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n expect(messages).toHaveLength(1);\n const componentBlock = messages[0].content.find(\n (c) => c.type === \"component\",\n );\n expect(componentBlock).toBeDefined();\n expect(componentBlock!.type).toBe(\"component\");\n expect(\n (componentBlock as { streamingState?: string }).streamingState,\n ).toBe(\"done\");\n });\n\n it(\"overwrites non-done streamingState and warns\", () => {\n const state = createTestStreamState(\"thread_1\");\n const warnSpy = jest.spyOn(console, \"warn\").mockImplementation();\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"WeatherCard\",\n props: { city: \"SF\" },\n streamingState: \"streaming\",\n },\n ],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ],\n });\n\n const messages = result.threadMap.thread_1.thread.messages;\n const componentBlock = messages[0].content.find(\n (c) => c.type === \"component\",\n );\n // Always set to \"done\" for API-loaded messages\n expect(\n (componentBlock as { streamingState?: string }).streamingState,\n ).toBe(\"done\");\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('unexpected streamingState \"streaming\"'),\n );\n\n warnSpy.mockRestore();\n });\n\n it(\"does not modify lastCompletedRunId\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.lastCompletedRunId = \"run_existing\";\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [],\n });\n\n expect(result.threadMap.thread_1.lastCompletedRunId).toBe(\"run_existing\");\n });\n\n it(\"handles system role messages from API\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"LOAD_THREAD_MESSAGES\",\n threadId: \"thread_1\",\n messages: [\n {\n id: \"msg_system\",\n role: \"system\",\n content: [{ type: \"text\", text: \"System prompt\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n {\n id: \"msg_user\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:01.000Z\",\n },\n ],\n });\n\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(2);\n expect(result.threadMap.thread_1.thread.messages[0].role).toBe(\"system\");\n expect(result.threadMap.thread_1.thread.messages[1].role).toBe(\"user\");\n });\n });\n\n describe(\"SET_LAST_COMPLETED_RUN_ID action\", () => {\n it(\"stores lastCompletedRunId on an existing thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"SET_LAST_COMPLETED_RUN_ID\",\n threadId: \"thread_1\",\n lastCompletedRunId: \"run_xyz\",\n });\n\n expect(result.threadMap.thread_1.lastCompletedRunId).toBe(\"run_xyz\");\n });\n\n it(\"overwrites existing lastCompletedRunId\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.lastCompletedRunId = \"run_old\";\n\n const result = streamReducer(state, {\n type: \"SET_LAST_COMPLETED_RUN_ID\",\n threadId: \"thread_1\",\n lastCompletedRunId: \"run_new\",\n });\n\n expect(result.threadMap.thread_1.lastCompletedRunId).toBe(\"run_new\");\n });\n\n it(\"creates thread state if thread does not exist\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"SET_LAST_COMPLETED_RUN_ID\",\n threadId: \"thread_new\",\n lastCompletedRunId: \"run_abc\",\n });\n\n expect(result.threadMap.thread_new).toBeDefined();\n expect(result.threadMap.thread_new.lastCompletedRunId).toBe(\"run_abc\");\n });\n });\n\n describe(\"UPDATE_THREAD_TITLE action\", () => {\n it(\"updates the title on an existing thread\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"UPDATE_THREAD_TITLE\",\n threadId: \"thread_1\",\n title: \"My Chat Thread\",\n });\n\n expect(result.threadMap.thread_1.thread.title).toBe(\"My Chat Thread\");\n });\n\n it(\"returns unchanged state when thread does not exist\", () => {\n const state = createTestStreamState(\"thread_1\");\n\n const result = streamReducer(state, {\n type: \"UPDATE_THREAD_TITLE\",\n threadId: \"nonexistent_thread\",\n title: \"My Chat Thread\",\n });\n\n expect(result).toBe(state);\n });\n\n it(\"preserves other thread properties when updating title\", () => {\n const state = createTestStreamState(\"thread_1\");\n state.threadMap.thread_1.thread.messages = [\n {\n id: \"msg_1\",\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n },\n ];\n\n const result = streamReducer(state, {\n type: \"UPDATE_THREAD_TITLE\",\n threadId: \"thread_1\",\n title: \"My Chat Thread\",\n });\n\n expect(result.threadMap.thread_1.thread.title).toBe(\"My Chat Thread\");\n expect(result.threadMap.thread_1.thread.messages).toHaveLength(1);\n expect(result.threadMap.thread_1.thread.id).toBe(\"thread_1\");\n });\n });\n});\n"]}
|