@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tambo-thread-provider.test.js","sourceRoot":"","sources":["../../src/providers/tambo-thread-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI, { advanceStream } from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { TamboComponent } from \"../model/component-metadata\";\nimport {\n GenerationStage,\n TamboThreadMessage,\n} from \"../model/generate-component-response\";\nimport { serializeRegistry } from \"../testing/tools\";\nimport {\n TamboClientContext,\n useTamboClient,\n useTamboQueryClient,\n} from \"./tambo-client-provider\";\nimport { TamboContextHelpersProvider } from \"./tambo-context-helpers-provider\";\nimport { TamboMcpTokenProvider } from \"./tambo-mcp-token-provider\";\nimport { TamboRegistryProvider } from \"./tambo-registry-provider\";\nimport { TamboThreadProvider, useTamboThread } from \"./tambo-thread-provider\";\n\n// Mock crypto.randomUUID\nObject.defineProperty(global, \"crypto\", {\n value: {\n randomUUID: jest.fn().mockReturnValue(\"test-uuid\"),\n },\n});\n\n// Mock the required providers\njest.mock(\"./tambo-client-provider\", () => {\n return {\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n TamboClientContext: React.createContext(undefined),\n };\n});\njest.mock(\"@tambo-ai/typescript-sdk\", () => {\n const actual = jest.requireActual<typeof import(\"@tambo-ai/typescript-sdk\")>(\n \"@tambo-ai/typescript-sdk\",\n );\n\n return {\n __esModule: true,\n ...actual,\n advanceStream: jest.fn(),\n };\n});\n\n// Mock the getCustomContext\njest.mock(\"../util/registry\", () => ({\n ...jest.requireActual(\"../util/registry\"),\n getCustomContext: () => ({\n message: \"additional instructions\",\n }),\n}));\n\n// Test utilities\nconst createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n): TamboThreadMessage => ({\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n ...overrides,\n});\n\nconst createMockThread = (\n overrides: Partial<TamboAI.Beta.Threads.ThreadRetrieveResponse> = {},\n): TamboAI.Beta.Threads.ThreadRetrieveResponse => ({\n id: \"test-thread-1\",\n messages: [],\n createdAt: \"2024-01-01T00:00:00Z\",\n projectId: \"test-project\",\n updatedAt: \"2024-01-01T00:00:00Z\",\n metadata: {},\n ...overrides,\n});\n\nconst createMockAdvanceResponse = (\n overrides: Partial<TamboAI.Beta.Threads.ThreadAdvanceResponse> = {},\n): TamboAI.Beta.Threads.ThreadAdvanceResponse => ({\n responseMessageDto: {\n id: \"test-uuid\",\n content: [{ type: \"text\" as const, text: \"Default response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n ...overrides,\n});\n\ndescribe(\"TamboThreadProvider\", () => {\n const mockThread = createMockThread();\n\n let mockTamboAI: TamboAI;\n let mockThreadsApi: TamboAI.Beta.Threads;\n let mockProjectsApi: TamboAI.Beta.Projects;\n\n let mockQueryClient: {\n invalidateQueries: jest.Mock;\n setQueryData: jest.Mock;\n };\n\n const mockRegistry: TamboComponent[] = [\n {\n name: \"TestOnly\",\n component: () => <div>TestOnly</div>,\n description: \"TestOnly\",\n propsSchema: z.object({\n test: z.string(),\n }),\n associatedTools: [\n {\n name: \"test-tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool\"),\n description: \"test-tool\",\n inputSchema: z.object({\n param: z.string().describe(\"test-param-description\"),\n }),\n outputSchema: z.string(),\n },\n ],\n },\n ];\n\n /**\n * Creates a test wrapper component with configurable options.\n * Reduces duplication across tests by centralizing provider setup.\n * @param options - Configuration options for the wrapper\n * @param options.components - The Tambo components to register\n * @param options.streaming - Whether to enable streaming responses\n * @param options.onCallUnregisteredTool - Handler for unregistered tool calls\n * @param options.autoGenerateThreadName - Whether to auto-generate thread names\n * @param options.autoGenerateNameThreshold - Token threshold for auto-generating names\n * @returns A React component that wraps children with the necessary providers\n */\n const createWrapper = ({\n components = mockRegistry,\n streaming = false,\n onCallUnregisteredTool,\n autoGenerateThreadName,\n autoGenerateNameThreshold,\n }: {\n components?: TamboComponent[];\n streaming?: boolean;\n onCallUnregisteredTool?: (\n toolName: string,\n parameters: TamboAI.ToolCallRequest[\"parameters\"],\n ) => Promise<string>;\n autoGenerateThreadName?: boolean;\n autoGenerateNameThreshold?: number;\n } = {}) =>\n function TestWrapper({ children }: { children: React.ReactNode }) {\n const client = useTamboClient();\n const queryClient = useTamboQueryClient();\n\n return (\n <TamboClientContext.Provider\n value={{\n client,\n queryClient,\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n }}\n >\n <TamboRegistryProvider\n components={components}\n onCallUnregisteredTool={onCallUnregisteredTool}\n >\n <TamboContextHelpersProvider\n contextHelpers={{\n currentTimeContextHelper: () => null,\n currentPageContextHelper: () => null,\n }}\n >\n <TamboMcpTokenProvider>\n <TamboThreadProvider\n streaming={streaming}\n autoGenerateThreadName={autoGenerateThreadName}\n autoGenerateNameThreshold={autoGenerateNameThreshold}\n >\n {children}\n </TamboThreadProvider>\n </TamboMcpTokenProvider>\n </TamboContextHelpersProvider>\n </TamboRegistryProvider>\n </TamboClientContext.Provider>\n );\n };\n\n // Default wrapper for most tests\n const Wrapper = createWrapper();\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n mockTamboAI = new TamboAI({\n apiKey: \"\",\n fetch: () => {\n throw new Error(\"Unexpected network call in test\");\n },\n });\n\n mockThreadsApi = mockTamboAI.beta.threads;\n mockProjectsApi = mockTamboAI.beta.projects;\n\n // Setup mock query client\n mockQueryClient = {\n invalidateQueries: jest.fn().mockResolvedValue(undefined),\n setQueryData: jest.fn(),\n };\n jest\n .mocked(useTamboQueryClient)\n .mockReturnValue(mockQueryClient as unknown as QueryClient);\n\n jest.spyOn(mockThreadsApi, \"retrieve\").mockResolvedValue(mockThread);\n jest\n .spyOn(mockThreadsApi.messages, \"create\")\n .mockResolvedValue(createMockMessage());\n jest\n .spyOn(mockThreadsApi, \"advance\")\n .mockResolvedValue(createMockAdvanceResponse());\n jest\n .spyOn(mockThreadsApi, \"advanceByID\")\n .mockResolvedValue(createMockAdvanceResponse());\n jest.spyOn(mockThreadsApi, \"generateName\").mockResolvedValue({\n ...mockThread,\n name: \"Generated Thread Name\",\n });\n jest.spyOn(mockThreadsApi, \"update\").mockResolvedValue({} as any);\n jest.spyOn(mockProjectsApi, \"getCurrent\").mockResolvedValue({\n id: \"test-project-id\",\n name: \"Test Project\",\n isTokenRequired: false,\n providerType: \"llm\",\n userId: \"test-user-id\",\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n });\n\n it(\"should initialize with placeholder thread\", () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n expect(result.current.thread.id).toBe(\"placeholder\");\n expect(result.current.isIdle).toBe(true);\n expect(result.current.generationStage).toBe(GenerationStage.IDLE);\n });\n\n it(\"should switch to a new thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n expect(mockThreadsApi.retrieve).toHaveBeenCalledWith(\"test-thread-1\");\n expect(result.current.thread.id).toBe(\"test-thread-1\");\n });\n\n it(\"should start a new thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n await act(async () => {\n result.current.startNewThread();\n });\n\n expect(result.current.thread.id).toBe(\"placeholder\");\n expect(result.current.isIdle).toBe(true);\n });\n\n it(\"should add a message to the thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n const testMessage: TamboThreadMessage = {\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n };\n\n await act(async () => {\n await result.current.addThreadMessage(testMessage, true);\n });\n\n expect(mockThreadsApi.messages.create).toHaveBeenCalledWith(\n \"test-thread-1\",\n {\n content: testMessage.content,\n role: testMessage.role,\n },\n );\n });\n\n it(\"should update a message in the thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n const testMessage: TamboThreadMessage = {\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Updated message\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n };\n\n await act(async () => {\n await result.current.updateThreadMessage(\n \"test-message-1\",\n testMessage,\n true,\n );\n });\n\n expect(mockThreadsApi.messages.create).toHaveBeenCalledWith(\n \"test-thread-1\",\n {\n content: testMessage.content,\n role: testMessage.role,\n },\n );\n });\n\n it(\"should send a message and update thread state\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n expect.anything(),\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n toolCallCounts: {},\n },\n \"test-thread-1\",\n );\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n\n it(\"should handle streaming responses\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-1\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Create an async iterator mock\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n // Mock advanceStream to return our async iterator\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n\n it(\"should handle tool calls during message processing.\", async () => {\n const mockToolCallChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"tool-call-1\",\n content: [{ type: \"text\", text: \"Tool response\" }],\n role: \"tool\",\n threadId: \"test-thread-1\",\n toolCallRequest: {\n toolName: \"test-tool\",\n parameters: [{ parameterName: \"test\", parameterValue: \"test\" }],\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"advance-response2\",\n content: [{ type: \"text\", text: \"response 2\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockToolCallChunk;\n },\n };\n\n const mockAsyncIterator2 = {\n [Symbol.asyncIterator]: async function* () {\n yield mockFinalChunk;\n },\n };\n\n jest\n .mocked(advanceStream)\n .mockResolvedValueOnce(mockAsyncIterator)\n .mockResolvedValueOnce(mockAsyncIterator2);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Use tool\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n // New inputSchema interface: tool receives single object arg\n expect(mockRegistry[0]?.associatedTools?.[0]?.tool).toHaveBeenCalledWith({\n test: \"test\",\n });\n });\n\n it(\"should handle unregistered tool calls with onCallUnregisteredTool\", async () => {\n const mockOnCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"unregistered-tool-result\");\n\n const mockUnregisteredToolCallChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse =\n {\n responseMessageDto: {\n id: \"unregistered-tool-call-1\",\n content: [{ type: \"text\", text: \"Unregistered tool response\" }],\n role: \"tool\",\n threadId: \"test-thread-1\",\n toolCallRequest: {\n toolName: \"unregistered-tool\",\n parameters: [\n { parameterName: \"input\", parameterValue: \"test-input\" },\n ],\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"advance-response2\",\n content: [{ type: \"text\", text: \"response 2\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockUnregisteredToolCallChunk;\n },\n };\n\n const mockAsyncIterator2 = {\n [Symbol.asyncIterator]: async function* () {\n yield mockFinalChunk;\n },\n };\n\n jest\n .mocked(advanceStream)\n .mockResolvedValueOnce(mockAsyncIterator)\n .mockResolvedValueOnce(mockAsyncIterator2);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({\n onCallUnregisteredTool: mockOnCallUnregisteredTool,\n }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Use unregistered tool\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n expect(mockOnCallUnregisteredTool).toHaveBeenCalledWith(\n \"unregistered-tool\",\n [{ parameterName: \"input\", parameterValue: \"test-input\" }],\n );\n });\n\n it(\"should handle unregistered tool calls without onCallUnregisteredTool\", async () => {\n const mockUnregisteredToolCallChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse =\n {\n responseMessageDto: {\n id: \"unregistered-tool-call-1\",\n content: [{ type: \"text\", text: \"Unregistered tool response\" }],\n role: \"tool\",\n threadId: \"test-thread-1\",\n toolCallRequest: {\n toolName: \"unregistered-tool\",\n parameters: [\n { parameterName: \"input\", parameterValue: \"test-input\" },\n ],\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"advance-response2\",\n content: [{ type: \"text\", text: \"response 2\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockUnregisteredToolCallChunk;\n },\n };\n\n const mockAsyncIterator2 = {\n [Symbol.asyncIterator]: async function* () {\n yield mockFinalChunk;\n },\n };\n\n jest\n .mocked(advanceStream)\n .mockResolvedValueOnce(mockAsyncIterator)\n .mockResolvedValueOnce(mockAsyncIterator2);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper: Wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Use unregistered tool\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n // Should not throw an error, but the tool call should fail gracefully\n });\n\n describe(\"streaming behavior\", () => {\n it(\"should call advanceStream when streamResponse=true\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ streaming: true }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello streaming\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello streaming\" }],\n role: \"user\",\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n },\n \"test-thread-1\",\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceByID).not.toHaveBeenCalled();\n });\n\n it(\"should throw error when streamResponse=false (non-streaming not supported)\", async () => {\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ streaming: true }),\n });\n\n await act(async () => {\n await expect(\n result.current.sendThreadMessage(\"Hello non-streaming\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n }),\n ).rejects.toThrow();\n });\n });\n\n it(\"should call advanceStream when streamResponse is undefined and provider streaming=true (default)\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ streaming: true }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello default streaming\", {\n threadId: \"test-thread-1\",\n // streamResponse is undefined, should use provider's streaming=true (default)\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello default streaming\" }],\n role: \"user\",\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n },\n \"test-thread-1\",\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceByID).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceStream when streamResponse=true for placeholder thread\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"new-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ streaming: false }),\n });\n\n // Start with placeholder thread (which is the default state)\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello streaming new thread\", {\n threadId: \"placeholder\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello streaming new thread\" }],\n role: \"user\",\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n },\n undefined, // threadId is undefined for placeholder thread\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceByID).not.toHaveBeenCalled();\n });\n\n it(\"should handle multiple sequential messages during streaming (server tool scenario)\", async () => {\n // This test verifies the fix for the bug where the second message doesn't render\n // during server tool response streaming. The scenario:\n // 1. First message: \"I will call the tool...\" with statusMessage\n // 2. Second message: The tool result response streaming in\n\n // First message - tool announcement (server tools don't have componentName set during streaming)\n const mockFirstMessage: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"msg-first\",\n content: [{ type: \"text\", text: \"I will search the docs...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: {\n componentName: \"\",\n componentState: {},\n message: \"\",\n props: {},\n statusMessage: \"searching the Tambo docs...\",\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Second message - tool result (different ID!)\n const mockSecondMessageChunk1: TamboAI.Beta.Threads.ThreadAdvanceResponse =\n {\n responseMessageDto: {\n id: \"msg-second\",\n content: [{ type: \"text\", text: \"Here's what I found...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockSecondMessageChunk2: TamboAI.Beta.Threads.ThreadAdvanceResponse =\n {\n responseMessageDto: {\n id: \"msg-second\",\n content: [\n {\n type: \"text\",\n text: \"Here's what I found in the documentation about that topic.\",\n },\n ],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockFirstMessage;\n yield mockSecondMessageChunk1;\n yield mockSecondMessageChunk2;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ streaming: true }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Search the docs\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n // Thread should have 3 messages: user message + 2 assistant messages\n expect(result.current.thread.messages).toHaveLength(3);\n\n // Filter to assistant messages only\n const assistantMessages = result.current.thread.messages.filter(\n (m) => m.role === \"assistant\",\n );\n expect(assistantMessages).toHaveLength(2);\n\n // First assistant message should have the tool status\n const firstMsg = result.current.thread.messages.find(\n (m) => m.id === \"msg-first\",\n );\n expect(firstMsg).toBeDefined();\n expect(firstMsg?.content[0]?.text).toContain(\"search the docs\");\n\n // Second assistant message should have the final content\n const secondMsg = result.current.thread.messages.find(\n (m) => m.id === \"msg-second\",\n );\n expect(secondMsg).toBeDefined();\n expect(secondMsg?.content[0]?.text).toContain(\n \"what I found in the documentation\",\n );\n\n // Generation should be complete\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should set generation stage to ERROR when streaming sendThreadMessage fails\", async () => {\n const testError = new Error(\"Streaming API call failed\");\n\n // Mock advanceStream to throw an error\n jest.mocked(advanceStream).mockRejectedValue(testError);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n // Expect the error to be thrown\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n await expect(\n result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n }),\n ).rejects.toThrow(\"Streaming API call failed\");\n });\n\n // Verify generation stage is set to ERROR\n expect(result.current.generationStage).toBe(GenerationStage.ERROR);\n });\n\n it(\"should rollback optimistic user message when sendThreadMessage fails\", async () => {\n const testError = new Error(\"API call failed\");\n jest.mocked(advanceStream).mockRejectedValue(testError);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n const initialMessageCount = result.current.thread.messages.length;\n\n await act(async () => {\n await expect(\n result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n }),\n ).rejects.toThrow(\"API call failed\");\n });\n\n // Verify user message was rolled back\n expect(result.current.thread.messages.length).toBe(initialMessageCount);\n });\n\n it(\"should rollback optimistic message when addThreadMessage fails\", async () => {\n const testError = new Error(\"Create message failed\");\n jest.mocked(mockThreadsApi.messages.create).mockRejectedValue(testError);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n const initialMessageCount = result.current.thread.messages.length;\n const newMessage = createMockMessage({ threadId: \"test-thread-1\" });\n\n await act(async () => {\n await expect(\n result.current.addThreadMessage(newMessage, true),\n ).rejects.toThrow(\"Create message failed\");\n });\n\n // Verify message was rolled back\n expect(result.current.thread.messages.length).toBe(initialMessageCount);\n });\n\n it(\"should rollback optimistic update when updateThreadMessage fails\", async () => {\n const testError = new Error(\"Update message failed\");\n jest.mocked(mockThreadsApi.messages.create).mockRejectedValue(testError);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n const existingMessage = createMockMessage({\n id: \"existing-msg\",\n threadId: \"test-thread-1\",\n content: [{ type: \"text\", text: \"Old content\" }],\n });\n\n await act(async () => {\n await result.current.addThreadMessage(existingMessage, false);\n });\n\n const initialMessageCount = result.current.thread.messages.length;\n\n await act(async () => {\n await expect(\n result.current.updateThreadMessage(\n \"existing-msg\",\n {\n threadId: \"test-thread-1\",\n content: [{ type: \"text\", text: \"New content\" }],\n role: \"assistant\",\n },\n true,\n ),\n ).rejects.toThrow(\"Update message failed\");\n });\n\n // Verify message was rolled back\n expect(result.current.thread.messages.length).toBe(\n initialMessageCount - 1,\n );\n });\n\n it(\"should rollback optimistic name update when updateThreadName fails\", async () => {\n const testError = new Error(\"Update name failed\");\n jest.mocked(mockThreadsApi.update).mockRejectedValue(testError);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n const initialName = result.current.thread.name;\n\n await act(async () => {\n await expect(\n result.current.updateThreadName(\"New Name\", \"test-thread-1\"),\n ).rejects.toThrow(\"Update name failed\");\n });\n\n // Verify name was rolled back\n expect(result.current.thread.name).toBe(initialName);\n });\n });\n\n describe(\"refetch threads list behavior\", () => {\n it(\"should refetch threads list when creating a new thread via sendThreadMessage\", async () => {\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n // Mock the stream response to return a new thread ID\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"new-thread-123\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n // Start with placeholder thread\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n // Send a message which will create a new thread with contextKey\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"placeholder\",\n streamResponse: true,\n contextKey: \"test-context-key\",\n });\n });\n\n // Verify that setQueryData was called first (optimistic update)\n expect(mockQueryClient.setQueryData).toHaveBeenCalledWith(\n [\"threads\", \"test-project-id\", \"test-context-key\"],\n expect.any(Function),\n );\n\n // Verify that refetchQueries was called when the new thread was created\n expect(mockQueryClient.invalidateQueries).toHaveBeenCalledWith({\n queryKey: [\"threads\"],\n });\n });\n\n it(\"should not refetch threads list when switching between existing threads\", async () => {\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: Wrapper,\n });\n\n // Start with placeholder thread\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n // Clear any previous mock calls\n jest.clearAllMocks();\n\n // Mock the retrieve call to return the expected thread\n const existingThread = createMockThread({ id: \"existing-thread-123\" });\n jest\n .mocked(mockThreadsApi.retrieve)\n .mockResolvedValueOnce(existingThread);\n\n // Switch to an existing thread (this should not trigger refetch)\n await act(async () => {\n await result.current.switchCurrentThread(\"existing-thread-123\");\n });\n\n // Verify that the thread retrieval was called\n expect(mockThreadsApi.retrieve).toHaveBeenCalledWith(\n \"existing-thread-123\",\n );\n\n // Verify that neither setQueryData nor refetchQueries were called\n expect(mockQueryClient.setQueryData).not.toHaveBeenCalled();\n expect(mockQueryClient.invalidateQueries).not.toHaveBeenCalled();\n\n // Verify the thread was switched correctly\n expect(result.current.thread.id).toBe(\"existing-thread-123\");\n });\n });\n\n describe(\"transformToContent\", () => {\n it(\"should use custom async transformToContent when provided (streaming)\", async () => {\n const mockTransformToContent = jest\n .fn()\n .mockResolvedValue([\n { type: \"text\", text: \"Async transformed content\" },\n ]);\n\n const customToolRegistry: TamboComponent[] = [\n {\n name: \"TestComponent\",\n component: () => <div>Test</div>,\n description: \"Test\",\n propsSchema: z.object({ test: z.string() }),\n associatedTools: [\n {\n name: \"async-tool\",\n tool: jest.fn().mockResolvedValue({ data: \"async tool result\" }),\n description: \"Tool with async transform\",\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.object({ data: z.string() }),\n transformToContent: mockTransformToContent,\n },\n ],\n },\n ];\n\n const mockToolCallChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"tool-call-chunk\",\n content: [{ type: \"text\", text: \"Tool call\" }],\n role: \"tool\",\n threadId: \"test-thread-1\",\n toolCallRequest: {\n toolName: \"async-tool\",\n parameters: [\n { parameterName: \"input\", parameterValue: \"async-test\" },\n ],\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"final-chunk\",\n content: [{ type: \"text\", text: \"Final streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockToolCallChunk;\n yield mockFinalChunk;\n },\n };\n\n jest\n .mocked(advanceStream)\n .mockResolvedValueOnce(mockAsyncIterator)\n .mockResolvedValueOnce({\n [Symbol.asyncIterator]: async function* () {\n yield mockFinalChunk;\n },\n });\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({\n components: customToolRegistry,\n streaming: true,\n }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Use async tool\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n // Verify the tool was called with single object arg (new inputSchema interface)\n expect(\n customToolRegistry[0]?.associatedTools?.[0]?.tool,\n ).toHaveBeenCalledWith({ input: \"async-test\" });\n\n // Verify transformToContent was called\n expect(mockTransformToContent).toHaveBeenCalledWith({\n data: \"async tool result\",\n });\n\n // Verify advanceStream was called twice (initial request and tool response)\n expect(advanceStream).toHaveBeenCalledTimes(2);\n\n // Verify the second advanceStream call included the transformed content\n expect(advanceStream).toHaveBeenLastCalledWith(\n mockTamboAI,\n expect.objectContaining({\n messageToAppend: expect.objectContaining({\n content: [{ type: \"text\", text: \"Async transformed content\" }],\n role: \"tool\",\n }),\n }),\n \"test-thread-1\",\n );\n });\n });\n\n describe(\"tamboStreamableHint streaming behavior\", () => {\n it(\"should call streamable tool during streaming when tamboStreamableHint is true\", async () => {\n const streamableToolFn = jest\n .fn()\n .mockResolvedValue({ data: \"streamed\" });\n\n const customToolRegistry: TamboComponent[] = [\n {\n name: \"TestComponent\",\n component: () => <div>Test</div>,\n description: \"Test\",\n propsSchema: z.object({ test: z.string() }),\n associatedTools: [\n {\n name: \"streamable-tool\",\n tool: streamableToolFn,\n description: \"Tool safe for streaming\",\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.object({ data: z.string() }),\n annotations: { tamboStreamableHint: true },\n },\n ],\n },\n ];\n\n // First chunk initializes finalMessage\n const mockInitialChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"initial-chunk\",\n content: [{ type: \"text\", text: \"Starting...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Second chunk has the tool call - this triggers streaming tool handling\n const mockToolCallChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"initial-chunk\", // Same ID as initial - it's an update\n content: [{ type: \"text\", text: \"Streaming...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: {\n componentName: \"\",\n componentState: {},\n message: \"\",\n props: {},\n toolCallRequest: {\n toolName: \"streamable-tool\",\n parameters: [\n { parameterName: \"input\", parameterValue: \"stream-test\" },\n ],\n },\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"initial-chunk\",\n content: [{ type: \"text\", text: \"Complete\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockInitialChunk;\n yield mockToolCallChunk;\n yield mockFinalChunk;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValueOnce(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({\n components: customToolRegistry,\n streaming: true,\n }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Test streamable tool\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n // Streamable tool should be called during streaming\n expect(streamableToolFn).toHaveBeenCalledWith({ input: \"stream-test\" });\n });\n\n it(\"should NOT call non-streamable tool during streaming\", async () => {\n const nonStreamableToolFn = jest\n .fn()\n .mockResolvedValue({ data: \"result\" });\n\n const customToolRegistry: TamboComponent[] = [\n {\n name: \"TestComponent\",\n component: () => <div>Test</div>,\n description: \"Test\",\n propsSchema: z.object({ test: z.string() }),\n associatedTools: [\n {\n name: \"non-streamable-tool\",\n tool: nonStreamableToolFn,\n description: \"Tool not safe for streaming\",\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.object({ data: z.string() }),\n // No tamboStreamableHint - defaults to false\n },\n ],\n },\n ];\n\n // First chunk initializes finalMessage\n const mockInitialChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Starting...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Second chunk has the tool call - but tool is NOT streamable\n const mockToolCallChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Streaming...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: {\n componentName: \"\",\n componentState: {},\n message: \"\",\n props: {},\n toolCallRequest: {\n toolName: \"non-streamable-tool\",\n parameters: [{ parameterName: \"input\", parameterValue: \"test\" }],\n },\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Complete\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockInitialChunk;\n yield mockToolCallChunk;\n yield mockFinalChunk;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValueOnce(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({\n components: customToolRegistry,\n streaming: true,\n }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Test non-streamable tool\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n // Non-streamable tool should NOT be called during the streaming chunk phase\n // (it would only be called when generationStage is COMPLETE with a toolCallRequest)\n expect(nonStreamableToolFn).not.toHaveBeenCalled();\n });\n\n it(\"should only call streamable tools during streaming when mixed\", async () => {\n const streamableToolFn = jest\n .fn()\n .mockResolvedValue({ data: \"streamed\" });\n const nonStreamableToolFn = jest\n .fn()\n .mockResolvedValue({ data: \"not-streamed\" });\n\n const customToolRegistry: TamboComponent[] = [\n {\n name: \"TestComponent\",\n component: () => <div>Test</div>,\n description: \"Test\",\n propsSchema: z.object({ test: z.string() }),\n associatedTools: [\n {\n name: \"streamable-tool\",\n tool: streamableToolFn,\n description: \"Tool safe for streaming\",\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.object({ data: z.string() }),\n annotations: { tamboStreamableHint: true },\n },\n {\n name: \"non-streamable-tool\",\n tool: nonStreamableToolFn,\n description: \"Tool not safe for streaming\",\n inputSchema: z.object({ input: z.string() }),\n outputSchema: z.object({ data: z.string() }),\n annotations: { tamboStreamableHint: false },\n },\n ],\n },\n ];\n\n // First chunk initializes finalMessage\n const mockInitialChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Starting...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Second chunk calls the streamable tool\n const mockStreamableToolChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse =\n {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Calling streamable...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: {\n componentName: \"\",\n componentState: {},\n message: \"\",\n props: {},\n toolCallRequest: {\n toolName: \"streamable-tool\",\n parameters: [\n { parameterName: \"input\", parameterValue: \"streamed-input\" },\n ],\n },\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Third chunk calls the non-streamable tool\n const mockNonStreamableToolChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse =\n {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Calling non-streamable...\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: {\n componentName: \"\",\n componentState: {},\n message: \"\",\n props: {},\n toolCallRequest: {\n toolName: \"non-streamable-tool\",\n parameters: [\n {\n parameterName: \"input\",\n parameterValue: \"non-streamed-input\",\n },\n ],\n },\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.STREAMING_RESPONSE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockFinalChunk: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"streaming-chunk\",\n content: [{ type: \"text\", text: \"Complete\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockInitialChunk;\n yield mockStreamableToolChunk;\n yield mockNonStreamableToolChunk;\n yield mockFinalChunk;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValueOnce(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({\n components: customToolRegistry,\n streaming: true,\n }),\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Test mixed tools\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n // Only the streamable tool should be called during streaming\n expect(streamableToolFn).toHaveBeenCalledWith({\n input: \"streamed-input\",\n });\n expect(nonStreamableToolFn).not.toHaveBeenCalled();\n });\n });\n\n describe(\"auto-generate thread name\", () => {\n it(\"should auto-generate thread name after reaching threshold\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ autoGenerateNameThreshold: 2 }),\n });\n\n const existingThread = createMockThread({\n id: \"test-thread-1\",\n name: undefined,\n });\n\n jest\n .mocked(mockThreadsApi.retrieve)\n .mockResolvedValueOnce(existingThread);\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n // Add first message\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-1\",\n role: \"user\",\n threadId: \"test-thread-1\",\n }),\n false,\n );\n });\n\n expect(mockThreadsApi.generateName).not.toHaveBeenCalled();\n\n // Add second message and send to reach threshold\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-2\",\n role: \"assistant\",\n threadId: \"test-thread-1\",\n }),\n false,\n );\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Test message\", {\n streamResponse: true,\n });\n });\n\n expect(mockThreadsApi.generateName).toHaveBeenCalledWith(\"test-thread-1\");\n expect(result.current.thread.name).toBe(\"Generated Thread Name\");\n expect(mockQueryClient.setQueryData).toHaveBeenCalledWith(\n [\"threads\", \"test-project-id\", undefined],\n expect.any(Function),\n );\n });\n\n it(\"should NOT auto-generate when autoGenerateThreadName is false\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({\n autoGenerateThreadName: false,\n autoGenerateNameThreshold: 2,\n }),\n });\n\n const existingThread = createMockThread({\n id: \"test-thread-1\",\n name: undefined,\n });\n\n jest\n .mocked(mockThreadsApi.retrieve)\n .mockResolvedValueOnce(existingThread);\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-1\",\n role: \"user\",\n threadId: \"test-thread-1\",\n }),\n false,\n );\n });\n\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-2\",\n role: \"assistant\",\n threadId: \"test-thread-1\",\n }),\n false,\n );\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Test message\", {\n streamResponse: true,\n });\n });\n\n // Should NOT generate name because feature is disabled\n expect(mockThreadsApi.generateName).not.toHaveBeenCalled();\n });\n\n it(\"should NOT auto-generate when thread already has a name\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ autoGenerateNameThreshold: 2 }),\n });\n\n const threadWithName = createMockThread({\n id: \"test-thread-1\",\n name: \"Existing Thread Name\",\n });\n\n jest\n .mocked(mockThreadsApi.retrieve)\n .mockResolvedValueOnce(threadWithName);\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n // Verify thread has existing name\n expect(result.current.thread.name).toBe(\"Existing Thread Name\");\n\n // Add messages to build up state\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-1\",\n role: \"user\",\n threadId: \"test-thread-1\",\n }),\n false,\n );\n });\n\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-2\",\n role: \"assistant\",\n threadId: \"test-thread-1\",\n }),\n false,\n );\n });\n\n expect(result.current.thread.messages).toHaveLength(2);\n\n // Send another message to reach threshold (3 messages total)\n await act(async () => {\n await result.current.sendThreadMessage(\"Test message\", {\n streamResponse: true,\n });\n });\n\n // Should NOT generate name because thread already has one\n expect(mockThreadsApi.generateName).not.toHaveBeenCalled();\n });\n\n it(\"should NOT auto-generate for placeholder thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: createWrapper({ autoGenerateNameThreshold: 2 }),\n });\n\n // Stay on placeholder thread\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n // Add messages to placeholder thread\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-1\",\n role: \"user\",\n threadId: \"placeholder\",\n }),\n false,\n );\n });\n\n await act(async () => {\n await result.current.addThreadMessage(\n createMockMessage({\n id: \"msg-2\",\n role: \"assistant\",\n threadId: \"placeholder\",\n }),\n false,\n );\n });\n\n // Should NOT generate name for placeholder thread\n expect(mockThreadsApi.generateName).not.toHaveBeenCalled();\n });\n });\n});\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import TamboAI from "@tambo-ai/typescript-sdk";
|
|
2
|
-
import { ComponentRegistry } from "../model/component-metadata";
|
|
3
|
-
import { TamboThreadMessage } from "../model/generate-component-response";
|
|
4
|
-
/**
|
|
5
|
-
* Generate a message that has a component rendered into it, if the message
|
|
6
|
-
* came with one.
|
|
7
|
-
* @param message - The message that may contain a component
|
|
8
|
-
* @param componentList - the list of available components
|
|
9
|
-
* @returns The updated message with the component rendered into it
|
|
10
|
-
*/
|
|
11
|
-
export declare function renderComponentIntoMessage(message: TamboAI.Beta.Threads.ThreadMessage, componentList: ComponentRegistry): TamboThreadMessage;
|
|
12
|
-
//# sourceMappingURL=generate-component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component.d.ts","sourceRoot":"","sources":["../../src/util/generate-component.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAI/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAK1E;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC3C,aAAa,EAAE,iBAAiB,GAC/B,kBAAkB,CAwDpB"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.renderComponentIntoMessage = renderComponentIntoMessage;
|
|
7
|
-
const partial_json_1 = require("partial-json");
|
|
8
|
-
const react_1 = __importDefault(require("react"));
|
|
9
|
-
const use_current_message_1 = require("../hooks/use-current-message");
|
|
10
|
-
const schema_1 = require("../schema");
|
|
11
|
-
const is_promise_1 = require("../util/is-promise");
|
|
12
|
-
const registry_1 = require("../util/registry");
|
|
13
|
-
/**
|
|
14
|
-
* Generate a message that has a component rendered into it, if the message
|
|
15
|
-
* came with one.
|
|
16
|
-
* @param message - The message that may contain a component
|
|
17
|
-
* @param componentList - the list of available components
|
|
18
|
-
* @returns The updated message with the component rendered into it
|
|
19
|
-
*/
|
|
20
|
-
function renderComponentIntoMessage(message, componentList) {
|
|
21
|
-
if (!message.component?.componentName) {
|
|
22
|
-
throw new Error("Component not found");
|
|
23
|
-
}
|
|
24
|
-
const parsedProps = (0, partial_json_1.parse)(JSON.stringify(message.component.props));
|
|
25
|
-
const registeredComponent = (0, registry_1.getComponentFromRegistry)(message.component.componentName, componentList);
|
|
26
|
-
let validatedProps = parsedProps;
|
|
27
|
-
if ((0, schema_1.isStandardSchema)(registeredComponent.props)) {
|
|
28
|
-
const result = registeredComponent.props["~standard"].validate(parsedProps);
|
|
29
|
-
// Standard Schema validate() returns { value: T } on success or { issues: [...] } on failure
|
|
30
|
-
// Async validation is not supported for component rendering
|
|
31
|
-
if ((0, is_promise_1.isPromise)(result)) {
|
|
32
|
-
throw new Error("Async schema validation is not supported for component props");
|
|
33
|
-
}
|
|
34
|
-
if ("value" in result) {
|
|
35
|
-
validatedProps = result.value;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
// Validation failed - throw with first issue message
|
|
39
|
-
const issueMessage = result.issues?.[0]?.message ?? "Schema validation failed";
|
|
40
|
-
throw new Error(`Component props validation failed: ${issueMessage}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const renderedComponent = react_1.default.createElement(registeredComponent.component, validatedProps);
|
|
44
|
-
// Create the full message object first so we can pass it to the provider
|
|
45
|
-
const fullMessage = {
|
|
46
|
-
...message,
|
|
47
|
-
component: {
|
|
48
|
-
...message.component,
|
|
49
|
-
props: validatedProps,
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
const wrappedComponent = (0, use_current_message_1.wrapWithTamboMessageProvider)(renderedComponent, fullMessage);
|
|
53
|
-
return {
|
|
54
|
-
...fullMessage,
|
|
55
|
-
renderedComponent: wrappedComponent,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=generate-component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component.js","sourceRoot":"","sources":["../../src/util/generate-component.ts"],"names":[],"mappings":";;;;;AAiBA,gEA2DC;AA3ED,+CAAqC;AACrC,kDAA0B;AAC1B,sEAA4E;AAG5E,sCAA6C;AAC7C,mDAA+C;AAC/C,+CAA4D;AAE5D;;;;;;GAMG;AACH,SAAgB,0BAA0B,CACxC,OAA2C,EAC3C,aAAgC;IAEhC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,WAAW,GAAG,IAAA,oBAAK,EAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,IAAA,mCAAwB,EAClD,OAAO,CAAC,SAAS,CAAC,aAAa,EAC/B,aAAa,CACd,CAAC;IAEF,IAAI,cAAc,GAA4B,WAG7C,CAAC;IACF,IAAI,IAAA,yBAAgB,EAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5E,6FAA6F;QAC7F,4DAA4D;QAC5D,IAAI,IAAA,sBAAS,EAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,cAAc,GAAG,MAAM,CAAC,KAAgC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,YAAY,GAChB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,0BAA0B,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,eAAK,CAAC,aAAa,CAC3C,mBAAmB,CAAC,SAAS,EAC7B,cAAc,CACf,CAAC;IAEF,yEAAyE;IACzE,MAAM,WAAW,GAAuB;QACtC,GAAG,OAAO;QACV,SAAS,EAAE;YACT,GAAG,OAAO,CAAC,SAAS;YACpB,KAAK,EAAE,cAAc;SACtB;KACF,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAA,kDAA4B,EACnD,iBAAiB,EACjB,WAAW,CACZ,CAAC;IAEF,OAAO;QACL,GAAG,WAAW;QACd,iBAAiB,EAAE,gBAAgB;KACpC,CAAC;AACJ,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { parse } from \"partial-json\";\nimport React from \"react\";\nimport { wrapWithTamboMessageProvider } from \"../hooks/use-current-message\";\nimport { ComponentRegistry } from \"../model/component-metadata\";\nimport { TamboThreadMessage } from \"../model/generate-component-response\";\nimport { isStandardSchema } from \"../schema\";\nimport { isPromise } from \"../util/is-promise\";\nimport { getComponentFromRegistry } from \"../util/registry\";\n\n/**\n * Generate a message that has a component rendered into it, if the message\n * came with one.\n * @param message - The message that may contain a component\n * @param componentList - the list of available components\n * @returns The updated message with the component rendered into it\n */\nexport function renderComponentIntoMessage(\n message: TamboAI.Beta.Threads.ThreadMessage,\n componentList: ComponentRegistry,\n): TamboThreadMessage {\n if (!message.component?.componentName) {\n throw new Error(\"Component not found\");\n }\n const parsedProps = parse(JSON.stringify(message.component.props));\n const registeredComponent = getComponentFromRegistry(\n message.component.componentName,\n componentList,\n );\n\n let validatedProps: Record<string, unknown> = parsedProps as Record<\n string,\n unknown\n >;\n if (isStandardSchema(registeredComponent.props)) {\n const result = registeredComponent.props[\"~standard\"].validate(parsedProps);\n // Standard Schema validate() returns { value: T } on success or { issues: [...] } on failure\n // Async validation is not supported for component rendering\n if (isPromise(result)) {\n throw new Error(\n \"Async schema validation is not supported for component props\",\n );\n }\n if (\"value\" in result) {\n validatedProps = result.value as Record<string, unknown>;\n } else {\n // Validation failed - throw with first issue message\n const issueMessage =\n result.issues?.[0]?.message ?? \"Schema validation failed\";\n throw new Error(`Component props validation failed: ${issueMessage}`);\n }\n }\n\n const renderedComponent = React.createElement(\n registeredComponent.component,\n validatedProps,\n );\n\n // Create the full message object first so we can pass it to the provider\n const fullMessage: TamboThreadMessage = {\n ...message,\n component: {\n ...message.component,\n props: validatedProps,\n },\n };\n\n const wrappedComponent = wrapWithTamboMessageProvider(\n renderedComponent,\n fullMessage,\n );\n\n return {\n ...fullMessage,\n renderedComponent: wrappedComponent,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component.test.d.ts","sourceRoot":"","sources":["../../src/util/generate-component.test.tsx"],"names":[],"mappings":""}
|