@tambo-ai/react 0.75.0 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hoc/with-tambo-interactable.d.ts.map +1 -1
- package/dist/hoc/with-tambo-interactable.js +13 -13
- package/dist/hoc/with-tambo-interactable.js.map +1 -1
- package/dist/hoc/with-tambo-interactable.test.js +3 -3
- package/dist/hoc/with-tambo-interactable.test.js.map +1 -1
- package/dist/index.d.ts +7 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -59
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-hooks.js +5 -5
- package/dist/mcp/mcp-hooks.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/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 -2
- package/dist/providers/tambo-client-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.d.ts +1 -1
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +2 -10
- package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
- package/dist/providers/tambo-interactables-additional-context.test.js +3 -19
- package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
- package/dist/providers/tambo-mcp-token-provider.d.ts +8 -17
- package/dist/providers/tambo-mcp-token-provider.d.ts.map +1 -1
- package/dist/providers/tambo-mcp-token-provider.js +20 -97
- package/dist/providers/tambo-mcp-token-provider.js.map +1 -1
- package/dist/testing/tools.d.ts +3 -3
- package/dist/testing/tools.d.ts.map +1 -1
- package/dist/testing/tools.js.map +1 -1
- package/dist/util/registry-validators.js +1 -1
- package/dist/util/registry-validators.js.map +1 -1
- package/dist/v1/__tests__/v1-interactables.test.js +1 -1
- package/dist/v1/__tests__/v1-interactables.test.js.map +1 -1
- package/dist/v1/components/v1-component-renderer.d.ts +9 -9
- package/dist/v1/components/v1-component-renderer.d.ts.map +1 -1
- package/dist/v1/components/v1-component-renderer.js +13 -13
- package/dist/v1/components/v1-component-renderer.js.map +1 -1
- package/dist/v1/components/v1-component-renderer.test.js +15 -15
- package/dist/v1/components/v1-component-renderer.test.js.map +1 -1
- package/{esm/hooks/use-current-message.d.ts → dist/v1/hooks/use-tambo-current-message.d.ts} +30 -9
- package/dist/v1/hooks/use-tambo-current-message.d.ts.map +1 -0
- package/dist/{hooks/use-current-message.js → v1/hooks/use-tambo-current-message.js} +13 -8
- package/dist/v1/hooks/use-tambo-current-message.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts +5 -5
- package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-auth-state.js +8 -8
- package/dist/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-auth-state.test.js +12 -12
- package/dist/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +7 -6
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.js +50 -24
- package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js +60 -35
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-messages.d.ts +9 -9
- package/dist/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-messages.js +4 -4
- package/dist/v1/hooks/use-tambo-v1-messages.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-messages.test.js +7 -7
- package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +3 -3
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.js +20 -22
- package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js +51 -51
- 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 +5 -5
- package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.js +12 -14
- package/dist/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-stream-status.test.js +19 -19
- package/dist/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts +7 -7
- package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-suggestions.js +9 -9
- package/dist/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-suggestions.test.js +44 -44
- package/dist/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +3 -3
- package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-input.js +4 -4
- package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +29 -29
- 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 +4 -4
- package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-list.js +5 -5
- package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +13 -17
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts +3 -3
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread.js +4 -4
- package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1-thread.test.js +5 -5
- package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.d.ts +16 -7
- package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.js +41 -10
- package/dist/v1/hooks/use-tambo-v1.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.test.js +176 -48
- package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/dist/v1/index.d.ts +31 -27
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +45 -35
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts +20 -20
- package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.js +32 -32
- package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.test.js +22 -22
- package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.d.ts +15 -15
- package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.js +17 -17
- package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stream-context.test.js +9 -9
- package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.d.ts +9 -9
- package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.js +7 -7
- package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.test.js +25 -25
- package/dist/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +9 -9
- package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-thread-input-provider.js +16 -16
- package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
- package/dist/v1/types/auth.d.ts +2 -2
- package/dist/v1/types/auth.d.ts.map +1 -1
- package/dist/v1/types/auth.js.map +1 -1
- package/dist/v1/types/component.d.ts +3 -3
- package/dist/v1/types/component.d.ts.map +1 -1
- package/dist/v1/types/component.js +2 -2
- package/dist/v1/types/component.js.map +1 -1
- package/dist/v1/types/event.d.ts +1 -1
- package/dist/v1/types/event.js +1 -1
- package/dist/v1/types/event.js.map +1 -1
- package/dist/v1/types/message.d.ts +17 -24
- package/dist/v1/types/message.d.ts.map +1 -1
- package/dist/v1/types/message.js +1 -1
- package/dist/v1/types/message.js.map +1 -1
- package/dist/v1/types/thread.d.ts +10 -8
- package/dist/v1/types/thread.d.ts.map +1 -1
- package/dist/v1/types/thread.js +1 -1
- package/dist/v1/types/thread.js.map +1 -1
- package/dist/v1/types/tool-choice.d.ts +1 -1
- package/dist/v1/types/tool-choice.js.map +1 -1
- package/dist/v1/utils/component-renderer.d.ts +11 -5
- package/dist/v1/utils/component-renderer.d.ts.map +1 -1
- package/dist/v1/utils/component-renderer.js +16 -7
- package/dist/v1/utils/component-renderer.js.map +1 -1
- package/dist/v1/utils/component-renderer.test.js +7 -7
- package/dist/v1/utils/component-renderer.test.js.map +1 -1
- package/dist/v1/utils/event-accumulator.d.ts +13 -13
- package/dist/v1/utils/event-accumulator.d.ts.map +1 -1
- package/dist/v1/utils/event-accumulator.js +26 -15
- package/dist/v1/utils/event-accumulator.js.map +1 -1
- package/dist/v1/utils/event-accumulator.test.js +54 -19
- package/dist/v1/utils/event-accumulator.test.js.map +1 -1
- package/dist/v1/utils/registry-conversion.d.ts +18 -18
- package/dist/v1/utils/registry-conversion.js +23 -23
- package/dist/v1/utils/registry-conversion.js.map +1 -1
- package/dist/v1/utils/stream-handler.d.ts +1 -1
- package/dist/v1/utils/stream-handler.js +1 -1
- package/dist/v1/utils/stream-handler.js.map +1 -1
- package/dist/v1/utils/thread-utils.d.ts +2 -2
- package/dist/v1/utils/thread-utils.d.ts.map +1 -1
- package/dist/v1/utils/thread-utils.js.map +1 -1
- package/dist/v1/utils/tool-call-tracker.d.ts +1 -1
- package/dist/v1/utils/tool-call-tracker.js +1 -1
- package/dist/v1/utils/tool-call-tracker.js.map +1 -1
- package/dist/v1/utils/tool-executor.d.ts +1 -1
- package/dist/v1/utils/tool-executor.js +2 -2
- package/dist/v1/utils/tool-executor.js.map +1 -1
- package/esm/hoc/with-tambo-interactable.d.ts.map +1 -1
- package/esm/hoc/with-tambo-interactable.js +13 -13
- package/esm/hoc/with-tambo-interactable.js.map +1 -1
- package/esm/hoc/with-tambo-interactable.test.js +1 -1
- package/esm/hoc/with-tambo-interactable.test.js.map +1 -1
- package/esm/index.d.ts +7 -25
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +7 -21
- package/esm/index.js.map +1 -1
- package/esm/mcp/mcp-hooks.js +1 -1
- package/esm/mcp/mcp-hooks.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/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 -2
- package/esm/providers/tambo-client-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.d.ts +1 -1
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +2 -10
- package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
- package/esm/providers/tambo-interactables-additional-context.test.js +3 -19
- package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
- package/esm/providers/tambo-mcp-token-provider.d.ts +8 -17
- package/esm/providers/tambo-mcp-token-provider.d.ts.map +1 -1
- package/esm/providers/tambo-mcp-token-provider.js +20 -97
- package/esm/providers/tambo-mcp-token-provider.js.map +1 -1
- package/esm/testing/tools.d.ts +3 -3
- package/esm/testing/tools.d.ts.map +1 -1
- package/esm/testing/tools.js.map +1 -1
- package/esm/util/registry-validators.js +1 -1
- package/esm/util/registry-validators.js.map +1 -1
- package/esm/v1/__tests__/v1-interactables.test.js +1 -1
- package/esm/v1/__tests__/v1-interactables.test.js.map +1 -1
- package/esm/v1/components/v1-component-renderer.d.ts +9 -9
- package/esm/v1/components/v1-component-renderer.d.ts.map +1 -1
- package/esm/v1/components/v1-component-renderer.js +12 -12
- package/esm/v1/components/v1-component-renderer.js.map +1 -1
- package/esm/v1/components/v1-component-renderer.test.js +16 -16
- package/esm/v1/components/v1-component-renderer.test.js.map +1 -1
- package/{dist/hooks/use-current-message.d.ts → esm/v1/hooks/use-tambo-current-message.d.ts} +30 -9
- package/esm/v1/hooks/use-tambo-current-message.d.ts.map +1 -0
- package/esm/{hooks/use-current-message.js → v1/hooks/use-tambo-current-message.js} +13 -8
- package/esm/v1/hooks/use-tambo-current-message.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts +5 -5
- package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-auth-state.js +8 -8
- package/esm/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-auth-state.test.js +14 -14
- package/esm/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +7 -6
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.js +50 -24
- package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js +62 -37
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-messages.d.ts +9 -9
- package/esm/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-messages.js +3 -3
- package/esm/v1/hooks/use-tambo-v1-messages.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-messages.test.js +9 -9
- package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +3 -3
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.js +21 -23
- package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js +54 -54
- 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 +5 -5
- package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.js +12 -14
- package/esm/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-stream-status.test.js +21 -21
- package/esm/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts +7 -7
- package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-suggestions.js +11 -11
- package/esm/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-suggestions.test.js +48 -48
- package/esm/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +3 -3
- package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-input.js +3 -3
- package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +32 -32
- 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 +4 -4
- package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-list.js +6 -6
- package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +15 -19
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts +3 -3
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread.js +4 -4
- package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1-thread.test.js +6 -6
- package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.d.ts +16 -7
- package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.js +43 -12
- package/esm/v1/hooks/use-tambo-v1.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.test.js +178 -50
- package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/esm/v1/index.d.ts +31 -27
- package/esm/v1/index.d.ts.map +1 -1
- package/esm/v1/index.js +38 -33
- package/esm/v1/index.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts +20 -20
- package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.js +32 -32
- package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.test.js +23 -23
- package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.d.ts +15 -15
- package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.js +17 -17
- package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stream-context.test.js +10 -10
- package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.d.ts +9 -9
- package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.js +9 -9
- package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.test.js +28 -28
- package/esm/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +9 -9
- package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-thread-input-provider.js +15 -15
- package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
- package/esm/v1/types/auth.d.ts +2 -2
- package/esm/v1/types/auth.d.ts.map +1 -1
- package/esm/v1/types/auth.js.map +1 -1
- package/esm/v1/types/component.d.ts +3 -3
- package/esm/v1/types/component.d.ts.map +1 -1
- package/esm/v1/types/component.js +2 -2
- package/esm/v1/types/component.js.map +1 -1
- package/esm/v1/types/event.d.ts +1 -1
- package/esm/v1/types/event.js +1 -1
- package/esm/v1/types/event.js.map +1 -1
- package/esm/v1/types/message.d.ts +17 -24
- package/esm/v1/types/message.d.ts.map +1 -1
- package/esm/v1/types/message.js +1 -1
- package/esm/v1/types/message.js.map +1 -1
- package/esm/v1/types/thread.d.ts +10 -8
- package/esm/v1/types/thread.d.ts.map +1 -1
- package/esm/v1/types/thread.js +1 -1
- package/esm/v1/types/thread.js.map +1 -1
- package/esm/v1/types/tool-choice.d.ts +1 -1
- package/esm/v1/types/tool-choice.js.map +1 -1
- package/esm/v1/utils/component-renderer.d.ts +11 -5
- package/esm/v1/utils/component-renderer.d.ts.map +1 -1
- package/esm/v1/utils/component-renderer.js +13 -5
- package/esm/v1/utils/component-renderer.js.map +1 -1
- package/esm/v1/utils/component-renderer.test.js +8 -8
- package/esm/v1/utils/component-renderer.test.js.map +1 -1
- package/esm/v1/utils/event-accumulator.d.ts +13 -13
- package/esm/v1/utils/event-accumulator.d.ts.map +1 -1
- package/esm/v1/utils/event-accumulator.js +26 -15
- package/esm/v1/utils/event-accumulator.js.map +1 -1
- package/esm/v1/utils/event-accumulator.test.js +54 -19
- package/esm/v1/utils/event-accumulator.test.js.map +1 -1
- package/esm/v1/utils/registry-conversion.d.ts +18 -18
- package/esm/v1/utils/registry-conversion.js +23 -23
- package/esm/v1/utils/registry-conversion.js.map +1 -1
- package/esm/v1/utils/stream-handler.d.ts +1 -1
- package/esm/v1/utils/stream-handler.js +1 -1
- package/esm/v1/utils/stream-handler.js.map +1 -1
- package/esm/v1/utils/thread-utils.d.ts +2 -2
- package/esm/v1/utils/thread-utils.d.ts.map +1 -1
- package/esm/v1/utils/thread-utils.js.map +1 -1
- package/esm/v1/utils/tool-call-tracker.d.ts +1 -1
- package/esm/v1/utils/tool-call-tracker.js +1 -1
- package/esm/v1/utils/tool-call-tracker.js.map +1 -1
- package/esm/v1/utils/tool-executor.d.ts +1 -1
- package/esm/v1/utils/tool-executor.js +2 -2
- package/esm/v1/utils/tool-executor.js.map +1 -1
- package/package.json +4 -9
- package/dist/hooks/index.d.ts +0 -9
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -34
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/use-component-state.d.ts +0 -30
- package/dist/hooks/use-component-state.d.ts.map +0 -1
- package/dist/hooks/use-component-state.js +0 -139
- package/dist/hooks/use-component-state.js.map +0 -1
- package/dist/hooks/use-component-state.test.d.ts +0 -2
- package/dist/hooks/use-component-state.test.d.ts.map +0 -1
- package/dist/hooks/use-component-state.test.js +0 -406
- package/dist/hooks/use-component-state.test.js.map +0 -1
- package/dist/hooks/use-current-message.d.ts.map +0 -1
- package/dist/hooks/use-current-message.js.map +0 -1
- package/dist/hooks/use-current-message.test.d.ts +0 -2
- package/dist/hooks/use-current-message.test.d.ts.map +0 -1
- package/dist/hooks/use-current-message.test.js +0 -269
- package/dist/hooks/use-current-message.test.js.map +0 -1
- package/dist/hooks/use-streaming-props.d.ts +0 -11
- package/dist/hooks/use-streaming-props.d.ts.map +0 -1
- package/dist/hooks/use-streaming-props.js +0 -37
- package/dist/hooks/use-streaming-props.js.map +0 -1
- package/dist/hooks/use-suggestions.d.ts +0 -46
- package/dist/hooks/use-suggestions.d.ts.map +0 -1
- package/dist/hooks/use-suggestions.js +0 -118
- package/dist/hooks/use-suggestions.js.map +0 -1
- package/dist/hooks/use-suggestions.test.d.ts +0 -2
- package/dist/hooks/use-suggestions.test.d.ts.map +0 -1
- package/dist/hooks/use-suggestions.test.js +0 -247
- package/dist/hooks/use-suggestions.test.js.map +0 -1
- package/dist/hooks/use-tambo-stream-status.d.ts +0 -90
- package/dist/hooks/use-tambo-stream-status.d.ts.map +0 -1
- package/dist/hooks/use-tambo-stream-status.js +0 -213
- package/dist/hooks/use-tambo-stream-status.js.map +0 -1
- package/dist/hooks/use-tambo-stream-status.test.d.ts +0 -2
- package/dist/hooks/use-tambo-stream-status.test.d.ts.map +0 -1
- package/dist/hooks/use-tambo-stream-status.test.js +0 -378
- package/dist/hooks/use-tambo-stream-status.test.js.map +0 -1
- package/dist/hooks/use-tambo-threads.d.ts +0 -158
- package/dist/hooks/use-tambo-threads.d.ts.map +0 -1
- package/dist/hooks/use-tambo-threads.js +0 -45
- package/dist/hooks/use-tambo-threads.js.map +0 -1
- package/dist/hooks/use-tambo-threads.test.d.ts +0 -2
- package/dist/hooks/use-tambo-threads.test.d.ts.map +0 -1
- package/dist/hooks/use-tambo-threads.test.js +0 -214
- package/dist/hooks/use-tambo-threads.test.js.map +0 -1
- package/dist/model/generate-component-response.d.ts +0 -37
- package/dist/model/generate-component-response.d.ts.map +0 -1
- package/dist/model/generate-component-response.js +0 -29
- package/dist/model/generate-component-response.js.map +0 -1
- package/dist/model/tambo-thread.d.ts +0 -15
- package/dist/model/tambo-thread.d.ts.map +0 -1
- package/dist/model/tambo-thread.js +0 -3
- package/dist/model/tambo-thread.js.map +0 -1
- package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts +0 -2
- package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +0 -1
- package/dist/providers/__tests__/thread-input-resource-resolution.test.js +0 -592
- package/dist/providers/__tests__/thread-input-resource-resolution.test.js.map +0 -1
- package/dist/providers/index.d.ts +0 -13
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -41
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/tambo-component-provider.d.ts +0 -23
- package/dist/providers/tambo-component-provider.d.ts.map +0 -1
- package/dist/providers/tambo-component-provider.js +0 -88
- package/dist/providers/tambo-component-provider.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/index.d.ts +0 -19
- package/dist/providers/tambo-prop-stream-provider/index.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/index.js +0 -43
- package/dist/providers/tambo-prop-stream-provider/index.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/pending.d.ts +0 -12
- package/dist/providers/tambo-prop-stream-provider/pending.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/pending.js +0 -31
- package/dist/providers/tambo-prop-stream-provider/pending.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/provider.d.ts +0 -17
- package/dist/providers/tambo-prop-stream-provider/provider.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/provider.js +0 -107
- package/dist/providers/tambo-prop-stream-provider/provider.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/streaming.d.ts +0 -12
- package/dist/providers/tambo-prop-stream-provider/streaming.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/streaming.js +0 -28
- package/dist/providers/tambo-prop-stream-provider/streaming.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/success.d.ts +0 -12
- package/dist/providers/tambo-prop-stream-provider/success.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/success.js +0 -28
- package/dist/providers/tambo-prop-stream-provider/success.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/types.d.ts +0 -25
- package/dist/providers/tambo-prop-stream-provider/types.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider/types.js +0 -6
- package/dist/providers/tambo-prop-stream-provider/types.js.map +0 -1
- package/dist/providers/tambo-prop-stream-provider.test.d.ts +0 -2
- package/dist/providers/tambo-prop-stream-provider.test.d.ts.map +0 -1
- package/dist/providers/tambo-prop-stream-provider.test.js +0 -275
- package/dist/providers/tambo-prop-stream-provider.test.js.map +0 -1
- package/dist/providers/tambo-provider.d.ts +0 -53
- package/dist/providers/tambo-provider.d.ts.map +0 -1
- package/dist/providers/tambo-provider.js +0 -133
- package/dist/providers/tambo-provider.js.map +0 -1
- package/dist/providers/tambo-stubs.d.ts +0 -89
- package/dist/providers/tambo-stubs.d.ts.map +0 -1
- package/dist/providers/tambo-stubs.js +0 -279
- package/dist/providers/tambo-stubs.js.map +0 -1
- package/dist/providers/tambo-stubs.test.d.ts +0 -2
- package/dist/providers/tambo-stubs.test.d.ts.map +0 -1
- package/dist/providers/tambo-stubs.test.js +0 -97
- package/dist/providers/tambo-stubs.test.js.map +0 -1
- package/dist/providers/tambo-thread-input-provider.d.ts +0 -65
- package/dist/providers/tambo-thread-input-provider.d.ts.map +0 -1
- package/dist/providers/tambo-thread-input-provider.js +0 -179
- package/dist/providers/tambo-thread-input-provider.js.map +0 -1
- package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts +0 -2
- package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
- package/dist/providers/tambo-thread-provider-initial-messages.test.js +0 -278
- package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +0 -1
- package/dist/providers/tambo-thread-provider.d.ts +0 -126
- package/dist/providers/tambo-thread-provider.d.ts.map +0 -1
- package/dist/providers/tambo-thread-provider.js +0 -931
- package/dist/providers/tambo-thread-provider.js.map +0 -1
- package/dist/providers/tambo-thread-provider.test.d.ts +0 -2
- package/dist/providers/tambo-thread-provider.test.d.ts.map +0 -1
- package/dist/providers/tambo-thread-provider.test.js +0 -1591
- package/dist/providers/tambo-thread-provider.test.js.map +0 -1
- package/dist/util/generate-component.d.ts +0 -12
- package/dist/util/generate-component.d.ts.map +0 -1
- package/dist/util/generate-component.js +0 -58
- package/dist/util/generate-component.js.map +0 -1
- package/dist/util/generate-component.test.d.ts +0 -2
- package/dist/util/generate-component.test.d.ts.map +0 -1
- package/dist/util/generate-component.test.js +0 -340
- package/dist/util/generate-component.test.js.map +0 -1
- package/esm/hooks/index.d.ts +0 -9
- package/esm/hooks/index.d.ts.map +0 -1
- package/esm/hooks/index.js +0 -10
- package/esm/hooks/index.js.map +0 -1
- package/esm/hooks/use-component-state.d.ts +0 -30
- package/esm/hooks/use-component-state.d.ts.map +0 -1
- package/esm/hooks/use-component-state.js +0 -136
- package/esm/hooks/use-component-state.js.map +0 -1
- package/esm/hooks/use-component-state.test.d.ts +0 -2
- package/esm/hooks/use-component-state.test.d.ts.map +0 -1
- package/esm/hooks/use-component-state.test.js +0 -401
- package/esm/hooks/use-component-state.test.js.map +0 -1
- package/esm/hooks/use-current-message.d.ts.map +0 -1
- package/esm/hooks/use-current-message.js.map +0 -1
- package/esm/hooks/use-current-message.test.d.ts +0 -2
- package/esm/hooks/use-current-message.test.d.ts.map +0 -1
- package/esm/hooks/use-current-message.test.js +0 -264
- package/esm/hooks/use-current-message.test.js.map +0 -1
- package/esm/hooks/use-streaming-props.d.ts +0 -11
- package/esm/hooks/use-streaming-props.d.ts.map +0 -1
- package/esm/hooks/use-streaming-props.js +0 -34
- package/esm/hooks/use-streaming-props.js.map +0 -1
- package/esm/hooks/use-suggestions.d.ts +0 -46
- package/esm/hooks/use-suggestions.d.ts.map +0 -1
- package/esm/hooks/use-suggestions.js +0 -115
- package/esm/hooks/use-suggestions.js.map +0 -1
- package/esm/hooks/use-suggestions.test.d.ts +0 -2
- package/esm/hooks/use-suggestions.test.d.ts.map +0 -1
- package/esm/hooks/use-suggestions.test.js +0 -245
- package/esm/hooks/use-suggestions.test.js.map +0 -1
- package/esm/hooks/use-tambo-stream-status.d.ts +0 -90
- package/esm/hooks/use-tambo-stream-status.d.ts.map +0 -1
- package/esm/hooks/use-tambo-stream-status.js +0 -210
- package/esm/hooks/use-tambo-stream-status.js.map +0 -1
- package/esm/hooks/use-tambo-stream-status.test.d.ts +0 -2
- package/esm/hooks/use-tambo-stream-status.test.d.ts.map +0 -1
- package/esm/hooks/use-tambo-stream-status.test.js +0 -376
- package/esm/hooks/use-tambo-stream-status.test.js.map +0 -1
- package/esm/hooks/use-tambo-threads.d.ts +0 -158
- package/esm/hooks/use-tambo-threads.d.ts.map +0 -1
- package/esm/hooks/use-tambo-threads.js +0 -42
- package/esm/hooks/use-tambo-threads.js.map +0 -1
- package/esm/hooks/use-tambo-threads.test.d.ts +0 -2
- package/esm/hooks/use-tambo-threads.test.d.ts.map +0 -1
- package/esm/hooks/use-tambo-threads.test.js +0 -212
- package/esm/hooks/use-tambo-threads.test.js.map +0 -1
- package/esm/model/generate-component-response.d.ts +0 -37
- package/esm/model/generate-component-response.d.ts.map +0 -1
- package/esm/model/generate-component-response.js +0 -25
- package/esm/model/generate-component-response.js.map +0 -1
- package/esm/model/tambo-thread.d.ts +0 -15
- package/esm/model/tambo-thread.d.ts.map +0 -1
- package/esm/model/tambo-thread.js +0 -2
- package/esm/model/tambo-thread.js.map +0 -1
- package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts +0 -2
- package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +0 -1
- package/esm/providers/__tests__/thread-input-resource-resolution.test.js +0 -587
- package/esm/providers/__tests__/thread-input-resource-resolution.test.js.map +0 -1
- package/esm/providers/index.d.ts +0 -13
- package/esm/providers/index.d.ts.map +0 -1
- package/esm/providers/index.js +0 -11
- package/esm/providers/index.js.map +0 -1
- package/esm/providers/tambo-component-provider.d.ts +0 -23
- package/esm/providers/tambo-component-provider.d.ts.map +0 -1
- package/esm/providers/tambo-component-provider.js +0 -50
- package/esm/providers/tambo-component-provider.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/index.d.ts +0 -19
- package/esm/providers/tambo-prop-stream-provider/index.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/index.js +0 -22
- package/esm/providers/tambo-prop-stream-provider/index.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/pending.d.ts +0 -12
- package/esm/providers/tambo-prop-stream-provider/pending.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/pending.js +0 -24
- package/esm/providers/tambo-prop-stream-provider/pending.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/provider.d.ts +0 -17
- package/esm/providers/tambo-prop-stream-provider/provider.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/provider.js +0 -70
- package/esm/providers/tambo-prop-stream-provider/provider.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/streaming.d.ts +0 -12
- package/esm/providers/tambo-prop-stream-provider/streaming.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/streaming.js +0 -21
- package/esm/providers/tambo-prop-stream-provider/streaming.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/success.d.ts +0 -12
- package/esm/providers/tambo-prop-stream-provider/success.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/success.js +0 -21
- package/esm/providers/tambo-prop-stream-provider/success.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/types.d.ts +0 -25
- package/esm/providers/tambo-prop-stream-provider/types.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider/types.js +0 -3
- package/esm/providers/tambo-prop-stream-provider/types.js.map +0 -1
- package/esm/providers/tambo-prop-stream-provider.test.d.ts +0 -2
- package/esm/providers/tambo-prop-stream-provider.test.d.ts.map +0 -1
- package/esm/providers/tambo-prop-stream-provider.test.js +0 -270
- package/esm/providers/tambo-prop-stream-provider.test.js.map +0 -1
- package/esm/providers/tambo-provider.d.ts +0 -53
- package/esm/providers/tambo-provider.d.ts.map +0 -1
- package/esm/providers/tambo-provider.js +0 -94
- package/esm/providers/tambo-provider.js.map +0 -1
- package/esm/providers/tambo-stubs.d.ts +0 -89
- package/esm/providers/tambo-stubs.d.ts.map +0 -1
- package/esm/providers/tambo-stubs.js +0 -242
- package/esm/providers/tambo-stubs.js.map +0 -1
- package/esm/providers/tambo-stubs.test.d.ts +0 -2
- package/esm/providers/tambo-stubs.test.d.ts.map +0 -1
- package/esm/providers/tambo-stubs.test.js +0 -62
- package/esm/providers/tambo-stubs.test.js.map +0 -1
- package/esm/providers/tambo-thread-input-provider.d.ts +0 -65
- package/esm/providers/tambo-thread-input-provider.d.ts.map +0 -1
- package/esm/providers/tambo-thread-input-provider.js +0 -141
- package/esm/providers/tambo-thread-input-provider.js.map +0 -1
- package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts +0 -2
- package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
- package/esm/providers/tambo-thread-provider-initial-messages.test.js +0 -273
- package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +0 -1
- package/esm/providers/tambo-thread-provider.d.ts +0 -126
- package/esm/providers/tambo-thread-provider.d.ts.map +0 -1
- package/esm/providers/tambo-thread-provider.js +0 -891
- package/esm/providers/tambo-thread-provider.js.map +0 -1
- package/esm/providers/tambo-thread-provider.test.d.ts +0 -2
- package/esm/providers/tambo-thread-provider.test.d.ts.map +0 -1
- package/esm/providers/tambo-thread-provider.test.js +0 -1553
- package/esm/providers/tambo-thread-provider.test.js.map +0 -1
- package/esm/util/generate-component.d.ts +0 -12
- package/esm/util/generate-component.d.ts.map +0 -1
- package/esm/util/generate-component.js +0 -52
- package/esm/util/generate-component.js.map +0 -1
- package/esm/util/generate-component.test.d.ts +0 -2
- package/esm/util/generate-component.test.d.ts.map +0 -1
- package/esm/util/generate-component.test.js +0 -302
- package/esm/util/generate-component.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tambo-v1-send-message.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-send-message.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { EventType } from \"@ag-ui/core\";\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, waitFor, act } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod\";\nimport type { TamboTool } from \"../../model/component-metadata\";\nimport {\n useTamboClient,\n useTamboQueryClient,\n} from \"../../providers/tambo-client-provider\";\nimport { TamboRegistryContext } from \"../../providers/tambo-registry-provider\";\nimport { useTamboV1Config } from \"../providers/tambo-v1-provider\";\nimport { TamboV1StreamProvider } from \"../providers/tambo-v1-stream-context\";\nimport {\n createRunStream,\n useTamboV1SendMessage,\n} from \"./use-tambo-v1-send-message\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n}));\n\njest.mock(\"../providers/tambo-v1-provider\", () => ({\n useTamboV1Config: jest.fn(),\n}));\n\njest.mock(\"./use-tambo-v1-auth-state\", () => ({\n useTamboV1AuthState: () => ({\n status: \"identified\",\n source: \"userKey\",\n }),\n}));\n\njest.mock(\"../../providers/tambo-context-helpers-provider\", () => ({\n useTamboContextHelpers: () => ({\n getAdditionalContext: jest.fn().mockResolvedValue([]),\n }),\n}));\n\ndescribe(\"useTamboV1SendMessage\", () => {\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n let queryClient: QueryClient;\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.mocked(useTamboV1Config).mockReturnValue({ userKey: undefined });\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"returns a mutation object\", () => {\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.mutate).toBeDefined();\n expect(result.current.mutateAsync).toBeDefined();\n expect(result.current.isPending).toBe(false);\n });\n\n it(\"returns a mutation object when threadId is not provided\", () => {\n const { result } = renderHook(() => useTamboV1SendMessage(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.mutate).toBeDefined();\n expect(result.current.mutateAsync).toBeDefined();\n });\n});\n\ndescribe(\"createRunStream\", () => {\n const mockStream = {\n [Symbol.asyncIterator]: async function* () {\n yield { type: \"RUN_STARTED\", runId: \"run_1\", threadId: \"thread_123\" };\n },\n };\n\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockClient = {\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n const mockRegistry = {\n componentList: new Map([\n [\n \"TestComponent\",\n {\n name: \"TestComponent\",\n description: \"A test component\",\n component: () => null,\n // RegisteredComponent has props as JSON Schema (already converted from propsSchema)\n props: {\n type: \"object\",\n properties: { title: { type: \"string\" } },\n required: [\"title\"],\n },\n contextTools: [],\n },\n ],\n ]),\n toolRegistry: new Map([\n [\n \"testTool\",\n {\n name: \"testTool\",\n description: \"A test tool\",\n tool: async () => \"result\",\n inputSchema: z.object({ query: z.string() }),\n },\n ],\n ]),\n };\n\n const testMessage = {\n role: \"user\" as const,\n content: [{ type: \"text\" as const, text: \"Hello\" }],\n };\n\n beforeEach(() => {\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"calls client.threads.runs.run when threadId is provided\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const result = await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n expect(mockThreadsRunsApi.run).toHaveBeenCalledWith(\"thread_123\", {\n message: testMessage,\n availableComponents: expect.any(Array),\n tools: expect.any(Array),\n userKey: undefined,\n previousRunId: undefined,\n });\n expect(mockThreadsRunsApi.create).not.toHaveBeenCalled();\n expect(result.stream).toBe(mockStream);\n expect(result.initialThreadId).toBe(\"thread_123\");\n });\n\n it(\"calls client.threads.runs.run with previousRunId when provided\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const result = await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: \"run_456\",\n });\n\n expect(mockThreadsRunsApi.run).toHaveBeenCalledWith(\"thread_123\", {\n message: testMessage,\n availableComponents: expect.any(Array),\n tools: expect.any(Array),\n userKey: undefined,\n previousRunId: \"run_456\",\n });\n expect(result.stream).toBe(mockStream);\n expect(result.initialThreadId).toBe(\"thread_123\");\n });\n\n it(\"calls client.threads.runs.create when threadId is not provided\", async () => {\n mockThreadsRunsApi.create.mockResolvedValue(mockStream);\n\n const result = await createRunStream({\n client: mockClient,\n threadId: undefined,\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n expect(mockThreadsRunsApi.create).toHaveBeenCalledWith({\n message: testMessage,\n availableComponents: expect.any(Array),\n tools: expect.any(Array),\n thread: undefined,\n });\n expect(mockThreadsRunsApi.run).not.toHaveBeenCalled();\n expect(result.stream).toBe(mockStream);\n expect(result.initialThreadId).toBeUndefined();\n });\n\n it(\"converts registry components to availableComponents format\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n const callArgs = mockThreadsRunsApi.run.mock.calls[0][1];\n expect(callArgs.availableComponents).toEqual([\n {\n name: \"TestComponent\",\n description: \"A test component\",\n propsSchema: expect.any(Object),\n },\n ]);\n });\n\n it(\"converts registry tools to tools format\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n const callArgs = mockThreadsRunsApi.run.mock.calls[0][1];\n expect(callArgs.tools).toEqual([\n expect.objectContaining({\n name: \"testTool\",\n description: \"A test tool\",\n }),\n ]);\n });\n\n it(\"handles empty registry\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const emptyRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: emptyRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n const callArgs = mockThreadsRunsApi.run.mock.calls[0][1];\n expect(callArgs.availableComponents).toEqual([]);\n expect(callArgs.tools).toEqual([]);\n });\n});\n\ndescribe(\"useTamboV1SendMessage mutation\", () => {\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function createAsyncIterator<T>(events: T[]) {\n return {\n [Symbol.asyncIterator]: async function* () {\n for (const event of events) {\n yield event;\n }\n },\n };\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.mocked(useTamboV1Config).mockReturnValue({ userKey: undefined });\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"extracts threadId from RUN_STARTED event when creating new thread\", async () => {\n const mockStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"new_thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.create.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(), {\n wrapper: TestWrapper,\n });\n\n let mutationResult: { threadId: string | undefined } | undefined;\n await act(async () => {\n mutationResult = await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n expect(mutationResult?.threadId).toBe(\"new_thread_123\");\n });\n\n it(\"throws error when first event is not RUN_STARTED on new thread\", async () => {\n const mockStream = createAsyncIterator([\n { type: EventType.TEXT_MESSAGE_START, messageId: \"msg_1\" },\n ]);\n\n mockThreadsRunsApi.create.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(), {\n wrapper: TestWrapper,\n });\n\n await expect(\n act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n }),\n ).rejects.toThrow(\"Expected first event to be RUN_STARTED with threadId\");\n });\n\n it(\"executes tools on awaiting_input event\", async () => {\n const toolExecuted = jest.fn().mockResolvedValue(\"tool result\");\n\n const testTool: TamboTool = {\n name: \"test_tool\",\n description: \"A test tool\",\n tool: toolExecuted,\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.string(),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([[\"test_tool\", testTool]]),\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"test_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"query\":\"test\"}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n expect(toolExecuted).toHaveBeenCalledWith({ query: \"test\" });\n\n // Verify continuation was called with tool results\n expect(mockThreadsRunsApi.run).toHaveBeenCalledTimes(2);\n const continueCall = mockThreadsRunsApi.run.mock.calls[1];\n expect(continueCall[0]).toBe(\"thread_123\");\n expect(continueCall[1].previousRunId).toBe(\"run_1\");\n expect(continueCall[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_1\",\n content: [{ type: \"text\", text: \"tool result\" }],\n });\n });\n\n it(\"handles tool calls with chunked args\", async () => {\n const toolExecuted = jest.fn().mockResolvedValue({ result: 42 });\n\n const testTool: TamboTool = {\n name: \"chunked_tool\",\n description: \"Tool with chunked args\",\n tool: toolExecuted,\n inputSchema: z.object({ a: z.number(), b: z.number() }),\n outputSchema: z.object({ result: z.number() }),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([[\"chunked_tool\", testTool]]),\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"chunked_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"a\":',\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: \"10,\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '\"b\":20}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Calculate\" }],\n },\n });\n });\n\n expect(toolExecuted).toHaveBeenCalledWith({ a: 10, b: 20 });\n });\n\n it(\"handles missing TOOL_CALL_ARGS gracefully\", async () => {\n // Test that tools can be executed even when no args events are received\n // (the hook keeps input as empty object)\n const toolExecuted = jest.fn().mockResolvedValue(\"result\");\n\n const testTool: TamboTool = {\n name: \"test_tool\",\n description: \"Test tool\",\n tool: toolExecuted,\n inputSchema: z.object({}),\n outputSchema: z.string(),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([[\"test_tool\", testTool]]),\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"test_tool\",\n parentMessageId: \"msg_1\",\n },\n // No TOOL_CALL_ARGS events - args will be empty\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Test\" }],\n },\n });\n });\n\n // Tool should be called with empty input due to no args events\n expect(toolExecuted).toHaveBeenCalledWith({});\n });\n\n it(\"handles unknown tool in awaiting_input by returning error result\", async () => {\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(), // Empty registry - tool not found\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"unknown_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: \"{}\",\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Test\" }],\n },\n });\n });\n\n // Verify continuation was called (second call)\n expect(mockThreadsRunsApi.run).toHaveBeenCalledTimes(2);\n\n // Continuation should include error message for unknown tool\n const continueCall = mockThreadsRunsApi.run.mock.calls[1];\n expect(continueCall[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_1\",\n isError: true,\n content: [\n { type: \"text\", text: 'Tool \"unknown_tool\" not found in registry' },\n ],\n });\n });\n\n it(\"works with default registry context when no provider is present\", () => {\n // TamboRegistryContext has a default value, so the hook should work\n // (though with an empty registry)\n function TestWrapperWithoutRegistry({\n children,\n }: {\n children: React.ReactNode;\n }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </QueryClientProvider>\n );\n }\n\n // Should not throw - default context is used\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapperWithoutRegistry,\n });\n\n expect(result.current.mutate).toBeDefined();\n });\n\n it(\"invalidates queries on successful mutation\", async () => {\n const mockStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n await waitFor(() => {\n expect(invalidateQueriesSpy).toHaveBeenCalledWith({\n queryKey: [\"v1-threads\", \"thread_123\"],\n });\n });\n });\n\n it(\"handles multi-round tool execution (tool→AI→tool→AI)\", async () => {\n const tool1Executed = jest.fn().mockResolvedValue(\"result from tool 1\");\n const tool2Executed = jest.fn().mockResolvedValue(\"result from tool 2\");\n\n const tool1: TamboTool = {\n name: \"tool_1\",\n description: \"First tool\",\n tool: tool1Executed,\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.string(),\n };\n\n const tool2: TamboTool = {\n name: \"tool_2\",\n description: \"Second tool\",\n tool: tool2Executed,\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.string(),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([\n [\"tool_1\", tool1],\n [\"tool_2\", tool2],\n ]),\n };\n\n // Initial stream: AI calls tool_1\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"tool_1\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"input\":\"first\"}',\n },\n { type: EventType.TOOL_CALL_END, toolCallId: \"call_1\" },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n // Second stream: AI receives tool_1 result, then calls tool_2\n const secondStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_2\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_2\",\n toolCallName: \"tool_2\",\n parentMessageId: \"msg_2\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_2\",\n delta: '{\"input\":\"second\"}',\n },\n { type: EventType.TOOL_CALL_END, toolCallId: \"call_2\" },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_2\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n // Third stream: AI receives tool_2 result, finishes\n const thirdStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_3\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(secondStream)\n .mockResolvedValueOnce(thirdStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n // Both tools should have been executed\n expect(tool1Executed).toHaveBeenCalledWith({ input: \"first\" });\n expect(tool2Executed).toHaveBeenCalledWith({ input: \"second\" });\n\n // Should have made 3 API calls (initial + 2 continuations)\n expect(mockThreadsRunsApi.run).toHaveBeenCalledTimes(3);\n\n // First continuation should have tool_1 result with previousRunId: run_1\n const firstContinue = mockThreadsRunsApi.run.mock.calls[1];\n expect(firstContinue[1].previousRunId).toBe(\"run_1\");\n expect(firstContinue[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_1\",\n content: [{ type: \"text\", text: \"result from tool 1\" }],\n });\n\n // Second continuation should have tool_2 result with previousRunId: run_2\n const secondContinue = mockThreadsRunsApi.run.mock.calls[2];\n expect(secondContinue[1].previousRunId).toBe(\"run_2\");\n expect(secondContinue[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_2\",\n content: [{ type: \"text\", text: \"result from tool 2\" }],\n });\n });\n\n it(\"uses lastCompletedRunId as previousRunId when streaming.runId is absent\", async () => {\n const mockStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n // Provide stream state with lastCompletedRunId but no active streaming.runId\n const stateWithLastRun: import(\"../utils/event-accumulator\").StreamState = {\n currentThreadId: \"thread_123\",\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\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 status: \"idle\",\n createdAt: \"2024-01-01T00:00:00.000Z\",\n updatedAt: \"2024-01-01T00:00:00.000Z\",\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: new Map(),\n lastCompletedRunId: \"run_1\",\n },\n },\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider\n state={stateWithLastRun}\n dispatch={jest.fn()}\n >\n {children}\n </TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Follow-up\" }],\n },\n });\n });\n\n // Should have used lastCompletedRunId as previousRunId\n expect(mockThreadsRunsApi.run).toHaveBeenCalledWith(\n \"thread_123\",\n expect.objectContaining({\n previousRunId: \"run_1\",\n }),\n );\n });\n\n it(\"logs error on mutation failure\", async () => {\n const consoleSpy = jest\n .spyOn(console, \"error\")\n .mockImplementation(() => {});\n const testError = new Error(\"API Error\");\n mockThreadsRunsApi.run.mockRejectedValue(testError);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n try {\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n } catch {\n // Expected to throw\n }\n\n await waitFor(() => {\n expect(consoleSpy).toHaveBeenCalledWith(\n \"[useTamboV1SendMessage] Mutation failed:\",\n testError,\n );\n });\n\n consoleSpy.mockRestore();\n });\n});\n\ndescribe(\"useTamboV1SendMessage auto thread name generation\", () => {\n const mockGenerateName = jest.fn();\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n beta: {\n threads: {\n generateName: mockGenerateName,\n },\n },\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function createAsyncIterator<T>(events: T[]) {\n return {\n [Symbol.asyncIterator]: async function* () {\n for (const event of events) {\n yield event;\n }\n },\n };\n }\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n function createFinishedStream(threadId: string) {\n return createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId,\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_assistant_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_assistant_1\",\n delta: \"Hello!\",\n },\n {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"msg_assistant_1\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n mockGenerateName.mockReset();\n });\n\n it(\"calls generateName when message count reaches threshold\", async () => {\n // Threshold=2. Pre-mutation=0, 0 + 2 = 2 >= 2 → fire\n jest.mocked(useTamboV1Config).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: true,\n autoGenerateNameThreshold: 2,\n });\n\n mockGenerateName.mockResolvedValue({ name: \"Generated Thread Name\" });\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n await waitFor(() => {\n expect(mockGenerateName).toHaveBeenCalledWith(\"thread_123\");\n });\n });\n\n it(\"does not call generateName when autoGenerateThreadName is false\", async () => {\n jest.mocked(useTamboV1Config).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: false,\n autoGenerateNameThreshold: 3,\n });\n\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n // mutateAsync resolves after onSuccess, so all async work has settled\n expect(mockGenerateName).not.toHaveBeenCalled();\n });\n\n it(\"does not call generateName when message count is below threshold\", async () => {\n // With threshold=3, preMutation=0 messages, 0 + 2 = 2 < 3 → skip\n jest.mocked(useTamboV1Config).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: true,\n autoGenerateNameThreshold: 3,\n });\n\n mockThreadsRunsApi.create.mockResolvedValue(\n createFinishedStream(\"new_thread\"),\n );\n\n const { result } = renderHook(() => useTamboV1SendMessage(), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n expect(mockGenerateName).not.toHaveBeenCalled();\n });\n\n it(\"logs error when generateName fails (does not throw)\", async () => {\n // Threshold=2. Pre-mutation=0, 0 + 2 = 2 >= 2 → fire\n jest.mocked(useTamboV1Config).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: true,\n autoGenerateNameThreshold: 2,\n });\n\n const consoleSpy = jest\n .spyOn(console, \"error\")\n .mockImplementation(() => {});\n mockGenerateName.mockRejectedValue(new Error(\"API error\"));\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n await waitFor(() => {\n expect(consoleSpy).toHaveBeenCalledWith(\n \"[useTamboV1SendMessage] Failed to auto-generate thread name:\",\n expect.any(Error),\n );\n });\n\n consoleSpy.mockRestore();\n });\n\n it(\"uses default config values (enabled, threshold=3)\", async () => {\n // Don't set autoGenerateThreadName/autoGenerateNameThreshold — defaults apply\n jest.mocked(useTamboV1Config).mockReturnValue({\n userKey: undefined,\n });\n\n mockGenerateName.mockResolvedValue({ name: \"Auto Name\" });\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n // Default threshold=3, preMutation=0 messages, 0 + 2 = 2 < 3 → should NOT fire\n expect(mockGenerateName).not.toHaveBeenCalled();\n });\n});\n\ndescribe(\"useTamboV1SendMessage tamboStreamableHint\", () => {\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function createAsyncIterator<T>(events: T[]) {\n return {\n [Symbol.asyncIterator]: async function* () {\n for (const event of events) {\n yield event;\n }\n },\n };\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.mocked(useTamboV1Config).mockReturnValue({ userKey: undefined });\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"calls streamable tool on TOOL_CALL_ARGS events during streaming\", async () => {\n const streamableToolFn = jest.fn().mockResolvedValue(undefined);\n\n const streamableTool: TamboTool = {\n name: \"write_story\",\n description: \"Writes a story\",\n tool: streamableToolFn,\n inputSchema: z.object({ text: z.string() }),\n outputSchema: z.void(),\n annotations: { tamboStreamableHint: true },\n };\n\n // Use Record (not Map) for toolRegistry — matches real runtime type\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: { write_story: streamableTool } as Record<\n string,\n TamboTool\n >,\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"write_story\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"text\":\"Once upon',\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: ' a time\"}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"write_story\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Write me a story\" }],\n },\n });\n });\n\n // Streamable tool should have been called during TOOL_CALL_ARGS events\n // (at least once per parseable chunk)\n expect(streamableToolFn.mock.calls.length).toBeGreaterThanOrEqual(1);\n\n // Each streaming call should have had partial args\n const firstStreamingCall = streamableToolFn.mock.calls[0][0] as Record<\n string,\n unknown\n >;\n expect(firstStreamingCall).toHaveProperty(\"text\");\n });\n\n it(\"does NOT call non-streamable tool during TOOL_CALL_ARGS events\", async () => {\n const normalToolFn = jest.fn().mockResolvedValue(\"result\");\n\n const normalTool: TamboTool = {\n name: \"normal_tool\",\n description: \"Normal tool (not streamable)\",\n tool: normalToolFn,\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.string(),\n // No tamboStreamableHint\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: { normal_tool: normalTool } as Record<string, TamboTool>,\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"normal_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"query\":\"test\"}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"normal_tool\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboV1SendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Test\" }],\n },\n });\n });\n\n // Tool should only be called once at awaiting_input, not during streaming\n expect(normalToolFn).toHaveBeenCalledTimes(1);\n expect(normalToolFn).toHaveBeenCalledWith({ query: \"test\" });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"use-tambo-v1-send-message.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-send-message.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { EventType } from \"@ag-ui/core\";\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, waitFor, act } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod\";\nimport type { TamboTool } from \"../../model/component-metadata\";\nimport {\n useTamboClient,\n useTamboQueryClient,\n} from \"../../providers/tambo-client-provider\";\nimport { TamboRegistryContext } from \"../../providers/tambo-registry-provider\";\nimport { useTamboConfig } from \"../providers/tambo-v1-provider\";\nimport { TamboStreamProvider } from \"../providers/tambo-v1-stream-context\";\nimport {\n createRunStream,\n useTamboSendMessage,\n} from \"./use-tambo-v1-send-message\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n}));\n\njest.mock(\"../providers/tambo-v1-provider\", () => ({\n useTamboConfig: jest.fn(),\n}));\n\njest.mock(\"./use-tambo-v1-auth-state\", () => ({\n useTamboAuthState: () => ({\n status: \"identified\",\n source: \"userKey\",\n }),\n}));\n\njest.mock(\"../../providers/tambo-context-helpers-provider\", () => ({\n useTamboContextHelpers: () => ({\n getAdditionalContext: jest.fn().mockResolvedValue([]),\n }),\n}));\n\ndescribe(\"useTamboSendMessage\", () => {\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n let queryClient: QueryClient;\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.mocked(useTamboConfig).mockReturnValue({ userKey: undefined });\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"returns a mutation object\", () => {\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.mutate).toBeDefined();\n expect(result.current.mutateAsync).toBeDefined();\n expect(result.current.isPending).toBe(false);\n });\n\n it(\"returns a mutation object when threadId is not provided\", () => {\n const { result } = renderHook(() => useTamboSendMessage(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.mutate).toBeDefined();\n expect(result.current.mutateAsync).toBeDefined();\n });\n});\n\ndescribe(\"createRunStream\", () => {\n const mockStream = {\n [Symbol.asyncIterator]: async function* () {\n yield { type: \"RUN_STARTED\", runId: \"run_1\", threadId: \"thread_123\" };\n },\n };\n\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockClient = {\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n const mockRegistry = {\n componentList: new Map([\n [\n \"TestComponent\",\n {\n name: \"TestComponent\",\n description: \"A test component\",\n component: () => null,\n // RegisteredComponent has props as JSON Schema (already converted from propsSchema)\n props: {\n type: \"object\",\n properties: { title: { type: \"string\" } },\n required: [\"title\"],\n },\n contextTools: [],\n },\n ],\n ]),\n toolRegistry: new Map([\n [\n \"testTool\",\n {\n name: \"testTool\",\n description: \"A test tool\",\n tool: async () => \"result\",\n inputSchema: z.object({ query: z.string() }),\n },\n ],\n ]),\n };\n\n const testMessage = {\n role: \"user\" as const,\n content: [{ type: \"text\" as const, text: \"Hello\" }],\n };\n\n beforeEach(() => {\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"calls client.threads.runs.run when threadId is provided\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const result = await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n expect(mockThreadsRunsApi.run).toHaveBeenCalledWith(\"thread_123\", {\n message: testMessage,\n availableComponents: expect.any(Array),\n tools: expect.any(Array),\n userKey: undefined,\n previousRunId: undefined,\n });\n expect(mockThreadsRunsApi.create).not.toHaveBeenCalled();\n expect(result.stream).toBe(mockStream);\n expect(result.initialThreadId).toBe(\"thread_123\");\n });\n\n it(\"calls client.threads.runs.run with previousRunId when provided\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const result = await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: \"run_456\",\n });\n\n expect(mockThreadsRunsApi.run).toHaveBeenCalledWith(\"thread_123\", {\n message: testMessage,\n availableComponents: expect.any(Array),\n tools: expect.any(Array),\n userKey: undefined,\n previousRunId: \"run_456\",\n });\n expect(result.stream).toBe(mockStream);\n expect(result.initialThreadId).toBe(\"thread_123\");\n });\n\n it(\"calls client.threads.runs.create when threadId is not provided\", async () => {\n mockThreadsRunsApi.create.mockResolvedValue(mockStream);\n\n const result = await createRunStream({\n client: mockClient,\n threadId: undefined,\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n expect(mockThreadsRunsApi.create).toHaveBeenCalledWith({\n message: testMessage,\n availableComponents: expect.any(Array),\n tools: expect.any(Array),\n thread: undefined,\n });\n expect(mockThreadsRunsApi.run).not.toHaveBeenCalled();\n expect(result.stream).toBe(mockStream);\n expect(result.initialThreadId).toBeUndefined();\n });\n\n it(\"converts registry components to availableComponents format\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n const callArgs = mockThreadsRunsApi.run.mock.calls[0][1];\n expect(callArgs.availableComponents).toEqual([\n {\n name: \"TestComponent\",\n description: \"A test component\",\n propsSchema: expect.any(Object),\n },\n ]);\n });\n\n it(\"converts registry tools to tools format\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: mockRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n const callArgs = mockThreadsRunsApi.run.mock.calls[0][1];\n expect(callArgs.tools).toEqual([\n expect.objectContaining({\n name: \"testTool\",\n description: \"A test tool\",\n }),\n ]);\n });\n\n it(\"handles empty registry\", async () => {\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const emptyRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n await createRunStream({\n client: mockClient,\n threadId: \"thread_123\",\n message: testMessage,\n registry: emptyRegistry as any,\n userKey: undefined,\n previousRunId: undefined,\n });\n\n const callArgs = mockThreadsRunsApi.run.mock.calls[0][1];\n expect(callArgs.availableComponents).toEqual([]);\n expect(callArgs.tools).toEqual([]);\n });\n});\n\ndescribe(\"useTamboSendMessage mutation\", () => {\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function createAsyncIterator<T>(events: T[]) {\n return {\n [Symbol.asyncIterator]: async function* () {\n for (const event of events) {\n yield event;\n }\n },\n };\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.mocked(useTamboConfig).mockReturnValue({ userKey: undefined });\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"extracts threadId from RUN_STARTED event when creating new thread\", async () => {\n const mockStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"new_thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.create.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(), {\n wrapper: TestWrapper,\n });\n\n let mutationResult: { threadId: string | undefined } | undefined;\n await act(async () => {\n mutationResult = await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n expect(mutationResult?.threadId).toBe(\"new_thread_123\");\n });\n\n it(\"throws error when first event is not RUN_STARTED on new thread\", async () => {\n const mockStream = createAsyncIterator([\n { type: EventType.TEXT_MESSAGE_START, messageId: \"msg_1\" },\n ]);\n\n mockThreadsRunsApi.create.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(), {\n wrapper: TestWrapper,\n });\n\n await expect(\n act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n }),\n ).rejects.toThrow(\"Expected first event to be RUN_STARTED with threadId\");\n });\n\n it(\"executes tools on awaiting_input event\", async () => {\n const toolExecuted = jest.fn().mockResolvedValue(\"tool result\");\n\n const testTool: TamboTool = {\n name: \"test_tool\",\n description: \"A test tool\",\n tool: toolExecuted,\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.string(),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([[\"test_tool\", testTool]]),\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"test_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"query\":\"test\"}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n expect(toolExecuted).toHaveBeenCalledWith({ query: \"test\" });\n\n // Verify continuation was called with tool results\n expect(mockThreadsRunsApi.run).toHaveBeenCalledTimes(2);\n const continueCall = mockThreadsRunsApi.run.mock.calls[1];\n expect(continueCall[0]).toBe(\"thread_123\");\n expect(continueCall[1].previousRunId).toBe(\"run_1\");\n expect(continueCall[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_1\",\n content: [{ type: \"text\", text: \"tool result\" }],\n });\n });\n\n it(\"handles tool calls with chunked args\", async () => {\n const toolExecuted = jest.fn().mockResolvedValue({ result: 42 });\n\n const testTool: TamboTool = {\n name: \"chunked_tool\",\n description: \"Tool with chunked args\",\n tool: toolExecuted,\n inputSchema: z.object({ a: z.number(), b: z.number() }),\n outputSchema: z.object({ result: z.number() }),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([[\"chunked_tool\", testTool]]),\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"chunked_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"a\":',\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: \"10,\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '\"b\":20}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Calculate\" }],\n },\n });\n });\n\n expect(toolExecuted).toHaveBeenCalledWith({ a: 10, b: 20 });\n });\n\n it(\"handles missing TOOL_CALL_ARGS gracefully\", async () => {\n // Test that tools can be executed even when no args events are received\n // (the hook keeps input as empty object)\n const toolExecuted = jest.fn().mockResolvedValue(\"result\");\n\n const testTool: TamboTool = {\n name: \"test_tool\",\n description: \"Test tool\",\n tool: toolExecuted,\n inputSchema: z.object({}),\n outputSchema: z.string(),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([[\"test_tool\", testTool]]),\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"test_tool\",\n parentMessageId: \"msg_1\",\n },\n // No TOOL_CALL_ARGS events - args will be empty\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Test\" }],\n },\n });\n });\n\n // Tool should be called with empty input due to no args events\n expect(toolExecuted).toHaveBeenCalledWith({});\n });\n\n it(\"handles unknown tool in awaiting_input by returning error result\", async () => {\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(), // Empty registry - tool not found\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"unknown_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: \"{}\",\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Test\" }],\n },\n });\n });\n\n // Verify continuation was called (second call)\n expect(mockThreadsRunsApi.run).toHaveBeenCalledTimes(2);\n\n // Continuation should include error message for unknown tool\n const continueCall = mockThreadsRunsApi.run.mock.calls[1];\n expect(continueCall[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_1\",\n isError: true,\n content: [\n { type: \"text\", text: 'Tool \"unknown_tool\" not found in registry' },\n ],\n });\n });\n\n it(\"works with default registry context when no provider is present\", () => {\n // TamboRegistryContext has a default value, so the hook should work\n // (though with an empty registry)\n function TestWrapperWithoutRegistry({\n children,\n }: {\n children: React.ReactNode;\n }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </QueryClientProvider>\n );\n }\n\n // Should not throw - default context is used\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapperWithoutRegistry,\n });\n\n expect(result.current.mutate).toBeDefined();\n });\n\n it(\"invalidates queries on successful mutation\", async () => {\n const mockStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n await waitFor(() => {\n expect(invalidateQueriesSpy).toHaveBeenCalledWith({\n queryKey: [\"v1-threads\", \"thread_123\"],\n });\n });\n });\n\n it(\"handles multi-round tool execution (tool→AI→tool→AI)\", async () => {\n const tool1Executed = jest.fn().mockResolvedValue(\"result from tool 1\");\n const tool2Executed = jest.fn().mockResolvedValue(\"result from tool 2\");\n\n const tool1: TamboTool = {\n name: \"tool_1\",\n description: \"First tool\",\n tool: tool1Executed,\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.string(),\n };\n\n const tool2: TamboTool = {\n name: \"tool_2\",\n description: \"Second tool\",\n tool: tool2Executed,\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.string(),\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map([\n [\"tool_1\", tool1],\n [\"tool_2\", tool2],\n ]),\n };\n\n // Initial stream: AI calls tool_1\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"tool_1\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"input\":\"first\"}',\n },\n { type: EventType.TOOL_CALL_END, toolCallId: \"call_1\" },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n // Second stream: AI receives tool_1 result, then calls tool_2\n const secondStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_2\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_2\",\n toolCallName: \"tool_2\",\n parentMessageId: \"msg_2\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_2\",\n delta: '{\"input\":\"second\"}',\n },\n { type: EventType.TOOL_CALL_END, toolCallId: \"call_2\" },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_2\", toolName: \"test\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n // Third stream: AI receives tool_2 result, finishes\n const thirdStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_3\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(secondStream)\n .mockResolvedValueOnce(thirdStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n // Both tools should have been executed\n expect(tool1Executed).toHaveBeenCalledWith({ input: \"first\" });\n expect(tool2Executed).toHaveBeenCalledWith({ input: \"second\" });\n\n // Should have made 3 API calls (initial + 2 continuations)\n expect(mockThreadsRunsApi.run).toHaveBeenCalledTimes(3);\n\n // First continuation should have tool_1 result with previousRunId: run_1\n const firstContinue = mockThreadsRunsApi.run.mock.calls[1];\n expect(firstContinue[1].previousRunId).toBe(\"run_1\");\n expect(firstContinue[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_1\",\n content: [{ type: \"text\", text: \"result from tool 1\" }],\n });\n\n // Second continuation should have tool_2 result with previousRunId: run_2\n const secondContinue = mockThreadsRunsApi.run.mock.calls[2];\n expect(secondContinue[1].previousRunId).toBe(\"run_2\");\n expect(secondContinue[1].message.content[0]).toEqual({\n type: \"tool_result\",\n toolUseId: \"call_2\",\n content: [{ type: \"text\", text: \"result from tool 2\" }],\n });\n });\n\n it(\"uses lastCompletedRunId as previousRunId when streaming.runId is absent\", async () => {\n const mockStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run.mockResolvedValue(mockStream);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n // Provide stream state with lastCompletedRunId but no active streaming.runId\n const stateWithLastRun: import(\"../utils/event-accumulator\").StreamState = {\n currentThreadId: \"thread_123\",\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\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 status: \"idle\",\n createdAt: \"2024-01-01T00:00:00.000Z\",\n updatedAt: \"2024-01-01T00:00:00.000Z\",\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: new Map(),\n lastCompletedRunId: \"run_1\",\n },\n },\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider state={stateWithLastRun} dispatch={jest.fn()}>\n {children}\n </TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Follow-up\" }],\n },\n });\n });\n\n // Should have used lastCompletedRunId as previousRunId\n expect(mockThreadsRunsApi.run).toHaveBeenCalledWith(\n \"thread_123\",\n expect.objectContaining({\n previousRunId: \"run_1\",\n }),\n );\n });\n\n it(\"logs error on mutation failure\", async () => {\n const consoleSpy = jest\n .spyOn(console, \"error\")\n .mockImplementation(() => {});\n const testError = new Error(\"API Error\");\n mockThreadsRunsApi.run.mockRejectedValue(testError);\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n try {\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n } catch {\n // Expected to throw\n }\n\n await waitFor(() => {\n expect(consoleSpy).toHaveBeenCalledWith(\n \"[useTamboSendMessage] Mutation failed:\",\n testError,\n );\n });\n\n consoleSpy.mockRestore();\n });\n});\n\ndescribe(\"useTamboSendMessage auto thread name generation\", () => {\n const mockGenerateName = jest.fn();\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n beta: {\n threads: {\n generateName: mockGenerateName,\n },\n },\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function createAsyncIterator<T>(events: T[]) {\n return {\n [Symbol.asyncIterator]: async function* () {\n for (const event of events) {\n yield event;\n }\n },\n };\n }\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: new Map(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n function createFinishedStream(threadId: string) {\n return createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId,\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_assistant_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: \"msg_assistant_1\",\n delta: \"Hello!\",\n },\n {\n type: EventType.TEXT_MESSAGE_END,\n messageId: \"msg_assistant_1\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n mockGenerateName.mockReset();\n });\n\n it(\"calls generateName when message count reaches threshold\", async () => {\n // Threshold=2. Pre-mutation=0, 0 + 2 = 2 >= 2 → fire\n jest.mocked(useTamboConfig).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: true,\n autoGenerateNameThreshold: 2,\n });\n\n mockGenerateName.mockResolvedValue({ name: \"Generated Thread Name\" });\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n await waitFor(() => {\n expect(mockGenerateName).toHaveBeenCalledWith(\"thread_123\");\n });\n });\n\n it(\"does not call generateName when autoGenerateThreadName is false\", async () => {\n jest.mocked(useTamboConfig).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: false,\n autoGenerateNameThreshold: 3,\n });\n\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n // mutateAsync resolves after onSuccess, so all async work has settled\n expect(mockGenerateName).not.toHaveBeenCalled();\n });\n\n it(\"does not call generateName when message count is below threshold\", async () => {\n // With threshold=3, preMutation=0 messages, 0 + 2 = 2 < 3 → skip\n jest.mocked(useTamboConfig).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: true,\n autoGenerateNameThreshold: 3,\n });\n\n mockThreadsRunsApi.create.mockResolvedValue(\n createFinishedStream(\"new_thread\"),\n );\n\n const { result } = renderHook(() => useTamboSendMessage(), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n expect(mockGenerateName).not.toHaveBeenCalled();\n });\n\n it(\"logs error when generateName fails (does not throw)\", async () => {\n // Threshold=2. Pre-mutation=0, 0 + 2 = 2 >= 2 → fire\n jest.mocked(useTamboConfig).mockReturnValue({\n userKey: undefined,\n autoGenerateThreadName: true,\n autoGenerateNameThreshold: 2,\n });\n\n const consoleSpy = jest\n .spyOn(console, \"error\")\n .mockImplementation(() => {});\n mockGenerateName.mockRejectedValue(new Error(\"API error\"));\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n await waitFor(() => {\n expect(consoleSpy).toHaveBeenCalledWith(\n \"[useTamboSendMessage] Failed to auto-generate thread name:\",\n expect.any(Error),\n );\n });\n\n consoleSpy.mockRestore();\n });\n\n it(\"uses default config values (enabled, threshold=3)\", async () => {\n // Don't set autoGenerateThreadName/autoGenerateNameThreshold — defaults apply\n jest.mocked(useTamboConfig).mockReturnValue({\n userKey: undefined,\n });\n\n mockGenerateName.mockResolvedValue({ name: \"Auto Name\" });\n mockThreadsRunsApi.run.mockResolvedValue(\n createFinishedStream(\"thread_123\"),\n );\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Hello\" }],\n },\n });\n });\n\n // Default threshold=3, preMutation=0 messages, 0 + 2 = 2 < 3 → should NOT fire\n expect(mockGenerateName).not.toHaveBeenCalled();\n });\n});\n\ndescribe(\"useTamboSendMessage tamboStreamableHint\", () => {\n const mockThreadsRunsApi = {\n run: jest.fn(),\n create: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: {\n runs: mockThreadsRunsApi,\n },\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function createAsyncIterator<T>(events: T[]) {\n return {\n [Symbol.asyncIterator]: async function* () {\n for (const event of events) {\n yield event;\n }\n },\n };\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.mocked(useTamboConfig).mockReturnValue({ userKey: undefined });\n mockThreadsRunsApi.run.mockReset();\n mockThreadsRunsApi.create.mockReset();\n });\n\n it(\"calls streamable tool on TOOL_CALL_ARGS events during streaming\", async () => {\n const streamableToolFn = jest.fn().mockResolvedValue(undefined);\n\n const streamableTool: TamboTool = {\n name: \"write_story\",\n description: \"Writes a story\",\n tool: streamableToolFn,\n inputSchema: z.object({ text: z.string() }),\n outputSchema: z.void(),\n annotations: { tamboStreamableHint: true },\n };\n\n // Use Record (not Map) for toolRegistry — matches real runtime type\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: { write_story: streamableTool } as Record<\n string,\n TamboTool\n >,\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"write_story\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"text\":\"Once upon',\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: ' a time\"}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"write_story\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Write me a story\" }],\n },\n });\n });\n\n // Streamable tool should have been called during TOOL_CALL_ARGS events\n // (at least once per parseable chunk)\n expect(streamableToolFn.mock.calls.length).toBeGreaterThanOrEqual(1);\n\n // Each streaming call should have had partial args\n const firstStreamingCall = streamableToolFn.mock.calls[0][0] as Record<\n string,\n unknown\n >;\n expect(firstStreamingCall).toHaveProperty(\"text\");\n });\n\n it(\"does NOT call non-streamable tool during TOOL_CALL_ARGS events\", async () => {\n const normalToolFn = jest.fn().mockResolvedValue(\"result\");\n\n const normalTool: TamboTool = {\n name: \"normal_tool\",\n description: \"Normal tool (not streamable)\",\n tool: normalToolFn,\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.string(),\n // No tamboStreamableHint\n };\n\n const mockRegistry = {\n componentList: new Map(),\n toolRegistry: { normal_tool: normalTool } as Record<string, TamboTool>,\n };\n\n const initialStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_1\",\n threadId: \"thread_123\",\n },\n {\n type: EventType.TEXT_MESSAGE_START,\n messageId: \"msg_1\",\n role: \"assistant\",\n },\n {\n type: EventType.TOOL_CALL_START,\n toolCallId: \"call_1\",\n toolCallName: \"normal_tool\",\n parentMessageId: \"msg_1\",\n },\n {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: \"call_1\",\n delta: '{\"query\":\"test\"}',\n },\n {\n type: EventType.TOOL_CALL_END,\n toolCallId: \"call_1\",\n },\n {\n type: EventType.CUSTOM,\n name: \"tambo.run.awaiting_input\",\n value: {\n pendingToolCalls: [\n { toolCallId: \"call_1\", toolName: \"normal_tool\", arguments: \"{}\" },\n ],\n },\n },\n ]);\n\n const continueStream = createAsyncIterator([\n {\n type: EventType.RUN_STARTED,\n runId: \"run_2\",\n threadId: \"thread_123\",\n },\n { type: EventType.RUN_FINISHED },\n ]);\n\n mockThreadsRunsApi.run\n .mockResolvedValueOnce(initialStream)\n .mockResolvedValueOnce(continueStream);\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry as any}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n const { result } = renderHook(() => useTamboSendMessage(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await act(async () => {\n await result.current.mutateAsync({\n message: {\n role: \"user\",\n content: [{ type: \"text\", text: \"Test\" }],\n },\n });\n });\n\n // Tool should only be called once at awaiting_input, not during streaming\n expect(normalToolFn).toHaveBeenCalledTimes(1);\n expect(normalToolFn).toHaveBeenCalledWith({ query: \"test\" });\n });\n});\n"]}
|
|
@@ -57,12 +57,12 @@ export interface PropStatus {
|
|
|
57
57
|
error?: Error;
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
* Track streaming status for Tambo
|
|
60
|
+
* Track streaming status for Tambo component props.
|
|
61
61
|
*
|
|
62
62
|
* **Important**: Props update repeatedly during streaming and may be partial.
|
|
63
63
|
* Use `propStatus.<field>?.isSuccess` before treating a prop as complete.
|
|
64
64
|
*
|
|
65
|
-
* Pair with `
|
|
65
|
+
* Pair with `useTamboComponentState` to disable inputs while streaming.
|
|
66
66
|
* @see {@link https://docs.tambo.co/concepts/generative-interfaces/component-state}
|
|
67
67
|
* @template Props - Component props type
|
|
68
68
|
* @returns `streamStatus` (overall) and `propStatus` (per-prop) flags
|
|
@@ -70,20 +70,20 @@ export interface PropStatus {
|
|
|
70
70
|
* @example
|
|
71
71
|
* ```tsx
|
|
72
72
|
* // Wait for entire stream
|
|
73
|
-
* const { streamStatus } =
|
|
73
|
+
* const { streamStatus } = useTamboStreamStatus();
|
|
74
74
|
* if (!streamStatus.isSuccess) return <Spinner />;
|
|
75
75
|
* return <Card {...props} />;
|
|
76
76
|
* ```
|
|
77
77
|
* @example
|
|
78
78
|
* ```tsx
|
|
79
79
|
* // Highlight in-flight props
|
|
80
|
-
* const { propStatus } =
|
|
80
|
+
* const { propStatus } = useTamboStreamStatus<Props>();
|
|
81
81
|
* <h2 className={propStatus.title?.isStreaming ? "animate-pulse" : ""}>
|
|
82
82
|
* {title}
|
|
83
83
|
* </h2>
|
|
84
84
|
* ```
|
|
85
85
|
*/
|
|
86
|
-
export declare function
|
|
86
|
+
export declare function useTamboStreamStatus<Props extends object = Record<string, unknown>>(): {
|
|
87
87
|
streamStatus: StreamStatus;
|
|
88
88
|
propStatus: Partial<Record<keyof Props, PropStatus>>;
|
|
89
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tambo-v1-stream-status.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-stream-status.ts"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAmHD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"use-tambo-v1-stream-status.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-stream-status.ts"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAmHD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;CACtD,CAwEA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
"use client";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.useTamboStreamStatus = useTamboStreamStatus;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* useTamboStreamStatus - Stream Status Hook
|
|
7
7
|
*
|
|
8
8
|
* Provides granular streaming status for components being rendered,
|
|
9
9
|
* allowing UI to respond to prop-level streaming states.
|
|
@@ -99,12 +99,12 @@ function deriveGlobalStreamStatus(componentStreamingState, propStatus, hasCompon
|
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
|
-
* Track streaming status for Tambo
|
|
102
|
+
* Track streaming status for Tambo component props.
|
|
103
103
|
*
|
|
104
104
|
* **Important**: Props update repeatedly during streaming and may be partial.
|
|
105
105
|
* Use `propStatus.<field>?.isSuccess` before treating a prop as complete.
|
|
106
106
|
*
|
|
107
|
-
* Pair with `
|
|
107
|
+
* Pair with `useTamboComponentState` to disable inputs while streaming.
|
|
108
108
|
* @see {@link https://docs.tambo.co/concepts/generative-interfaces/component-state}
|
|
109
109
|
* @template Props - Component props type
|
|
110
110
|
* @returns `streamStatus` (overall) and `propStatus` (per-prop) flags
|
|
@@ -112,44 +112,42 @@ function deriveGlobalStreamStatus(componentStreamingState, propStatus, hasCompon
|
|
|
112
112
|
* @example
|
|
113
113
|
* ```tsx
|
|
114
114
|
* // Wait for entire stream
|
|
115
|
-
* const { streamStatus } =
|
|
115
|
+
* const { streamStatus } = useTamboStreamStatus();
|
|
116
116
|
* if (!streamStatus.isSuccess) return <Spinner />;
|
|
117
117
|
* return <Card {...props} />;
|
|
118
118
|
* ```
|
|
119
119
|
* @example
|
|
120
120
|
* ```tsx
|
|
121
121
|
* // Highlight in-flight props
|
|
122
|
-
* const { propStatus } =
|
|
122
|
+
* const { propStatus } = useTamboStreamStatus<Props>();
|
|
123
123
|
* <h2 className={propStatus.title?.isStreaming ? "animate-pulse" : ""}>
|
|
124
124
|
* {title}
|
|
125
125
|
* </h2>
|
|
126
126
|
* ```
|
|
127
127
|
*/
|
|
128
|
-
function
|
|
129
|
-
const { componentId, threadId } = (0, component_renderer_1.
|
|
128
|
+
function useTamboStreamStatus() {
|
|
129
|
+
const { componentId, threadId } = (0, component_renderer_1.useComponentContent)();
|
|
130
130
|
const streamState = (0, tambo_v1_stream_context_1.useStreamState)();
|
|
131
131
|
/**
|
|
132
132
|
* Error if componentId changes - this indicates the provider hierarchy is broken.
|
|
133
133
|
* The componentId should remain stable for the lifetime of the component.
|
|
134
|
-
* If this fires, the
|
|
134
|
+
* If this fires, the ComponentRenderer is likely being used incorrectly,
|
|
135
135
|
* or the component tree is being remounted in unexpected ways.
|
|
136
136
|
*/
|
|
137
137
|
const initialComponentIdRef = (0, react_1.useRef)(componentId);
|
|
138
138
|
(0, react_1.useEffect)(() => {
|
|
139
139
|
if (componentId !== initialComponentIdRef.current) {
|
|
140
|
-
console.error(`
|
|
140
|
+
console.error(`useTamboStreamStatus: componentId changed from "${initialComponentIdRef.current}" to "${componentId}". ` +
|
|
141
141
|
"This indicates a bug in the component tree or incorrect provider usage. " +
|
|
142
142
|
"The componentId must remain stable for the component's lifetime. " +
|
|
143
|
-
"Check that
|
|
143
|
+
"Check that ComponentRenderer is not being remounted unexpectedly.");
|
|
144
144
|
initialComponentIdRef.current = componentId;
|
|
145
145
|
}
|
|
146
146
|
}, [componentId]);
|
|
147
147
|
/** Get the current thread state */
|
|
148
148
|
const threadState = streamState.threadMap[threadId];
|
|
149
149
|
/** Get error message from stream state if any */
|
|
150
|
-
const streamErrorMessage = threadState?.streaming.
|
|
151
|
-
? threadState?.streaming.error?.message
|
|
152
|
-
: undefined;
|
|
150
|
+
const streamErrorMessage = threadState?.streaming.error?.message;
|
|
153
151
|
/** Find the component content block */
|
|
154
152
|
const componentContent = (0, thread_utils_1.findComponentContent)(streamState, threadId, componentId);
|
|
155
153
|
/** Get the current component props */
|