@tambo-ai/react 0.70.0 → 0.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.js +134 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js +292 -0
- package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.d.ts +58 -0
- package/dist/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.js +54 -0
- package/dist/v1/hooks/use-tambo-v1-messages.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.js +137 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +96 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.js +227 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js +827 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +62 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.js +76 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +168 -0
- package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts +61 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.js +56 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +98 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts +37 -0
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.js +49 -0
- package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.js +83 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.d.ts +107 -0
- package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.js +87 -0
- package/dist/v1/hooks/use-tambo-v1.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.test.js +150 -0
- package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -0
- package/dist/v1/index.d.ts +65 -16
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +119 -26
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts +133 -0
- package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-provider.js +131 -0
- package/dist/v1/providers/tambo-v1-provider.js.map +1 -0
- package/dist/v1/providers/tambo-v1-provider.test.d.ts +2 -0
- package/dist/v1/providers/tambo-v1-provider.test.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-provider.test.js +181 -0
- package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.d.ts +136 -0
- package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.js +230 -0
- package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.d.ts +2 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.js +85 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -0
- package/dist/v1/types/component.d.ts +5 -2
- package/dist/v1/types/component.d.ts.map +1 -1
- package/dist/v1/types/component.js +5 -2
- package/dist/v1/types/component.js.map +1 -1
- package/dist/v1/types/event.d.ts +21 -12
- package/dist/v1/types/event.d.ts.map +1 -1
- package/dist/v1/types/event.js +46 -1
- package/dist/v1/types/event.js.map +1 -1
- package/dist/v1/types/event.test.d.ts +2 -0
- package/dist/v1/types/event.test.d.ts.map +1 -0
- package/dist/v1/types/event.test.js +70 -0
- package/dist/v1/types/event.test.js.map +1 -0
- package/dist/v1/types/message.d.ts +30 -9
- 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 +1 -3
- 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/utils/component-renderer.d.ts +89 -0
- package/dist/v1/utils/component-renderer.d.ts.map +1 -0
- package/dist/v1/utils/component-renderer.js +216 -0
- package/dist/v1/utils/component-renderer.js.map +1 -0
- package/dist/v1/utils/component-renderer.test.d.ts +2 -0
- package/dist/v1/utils/component-renderer.test.d.ts.map +1 -0
- package/dist/v1/utils/component-renderer.test.js +380 -0
- package/dist/v1/utils/component-renderer.test.js.map +1 -0
- package/dist/v1/utils/event-accumulator.d.ts +100 -0
- package/dist/v1/utils/event-accumulator.d.ts.map +1 -0
- package/dist/v1/utils/event-accumulator.js +735 -0
- package/dist/v1/utils/event-accumulator.js.map +1 -0
- package/dist/v1/utils/event-accumulator.test.d.ts +2 -0
- package/dist/v1/utils/event-accumulator.test.d.ts.map +1 -0
- package/dist/v1/utils/event-accumulator.test.js +1205 -0
- package/dist/v1/utils/event-accumulator.test.js.map +1 -0
- package/dist/v1/utils/json-patch.d.ts +18 -0
- package/dist/v1/utils/json-patch.d.ts.map +1 -0
- package/dist/v1/utils/json-patch.js +35 -0
- package/dist/v1/utils/json-patch.js.map +1 -0
- package/dist/v1/utils/json-patch.test.d.ts +2 -0
- package/dist/v1/utils/json-patch.test.d.ts.map +1 -0
- package/dist/v1/utils/json-patch.test.js +28 -0
- package/dist/v1/utils/json-patch.test.js.map +1 -0
- package/dist/v1/utils/registry-conversion.d.ts +53 -0
- package/dist/v1/utils/registry-conversion.d.ts.map +1 -0
- package/dist/v1/utils/registry-conversion.js +114 -0
- package/dist/v1/utils/registry-conversion.js.map +1 -0
- package/dist/v1/utils/registry-conversion.test.d.ts +2 -0
- package/dist/v1/utils/registry-conversion.test.d.ts.map +1 -0
- package/dist/v1/utils/registry-conversion.test.js +179 -0
- package/dist/v1/utils/registry-conversion.test.js.map +1 -0
- package/dist/v1/utils/stream-handler.d.ts +45 -0
- package/dist/v1/utils/stream-handler.d.ts.map +1 -0
- package/dist/v1/utils/stream-handler.js +47 -0
- package/dist/v1/utils/stream-handler.js.map +1 -0
- package/dist/v1/utils/stream-handler.test.d.ts +2 -0
- package/dist/v1/utils/stream-handler.test.d.ts.map +1 -0
- package/dist/v1/utils/stream-handler.test.js +74 -0
- package/dist/v1/utils/stream-handler.test.js.map +1 -0
- package/dist/v1/utils/tool-call-tracker.d.ts +41 -0
- package/dist/v1/utils/tool-call-tracker.d.ts.map +1 -0
- package/dist/v1/utils/tool-call-tracker.js +90 -0
- package/dist/v1/utils/tool-call-tracker.js.map +1 -0
- package/dist/v1/utils/tool-executor.d.ts +33 -0
- package/dist/v1/utils/tool-executor.d.ts.map +1 -0
- package/dist/v1/utils/tool-executor.js +103 -0
- package/dist/v1/utils/tool-executor.js.map +1 -0
- package/dist/v1/utils/tool-executor.test.d.ts +2 -0
- package/dist/v1/utils/tool-executor.test.d.ts.map +1 -0
- package/dist/v1/utils/tool-executor.test.js +222 -0
- package/dist/v1/utils/tool-executor.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.js +131 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js +290 -0
- package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.d.ts +58 -0
- package/esm/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.js +51 -0
- package/esm/v1/hooks/use-tambo-v1-messages.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.js +132 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +96 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.js +223 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js +822 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +62 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.js +73 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +166 -0
- package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts +61 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.js +53 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +93 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts +37 -0
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.js +46 -0
- package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.js +78 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.d.ts +107 -0
- package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.js +84 -0
- package/esm/v1/hooks/use-tambo-v1.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.test.js +145 -0
- package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -0
- package/esm/v1/index.d.ts +65 -16
- package/esm/v1/index.d.ts.map +1 -1
- package/esm/v1/index.js +83 -27
- package/esm/v1/index.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts +133 -0
- package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-provider.js +94 -0
- package/esm/v1/providers/tambo-v1-provider.js.map +1 -0
- package/esm/v1/providers/tambo-v1-provider.test.d.ts +2 -0
- package/esm/v1/providers/tambo-v1-provider.test.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-provider.test.js +176 -0
- package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.d.ts +136 -0
- package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.js +191 -0
- package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.d.ts +2 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.js +80 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -0
- package/esm/v1/types/component.d.ts +5 -2
- package/esm/v1/types/component.d.ts.map +1 -1
- package/esm/v1/types/component.js +5 -2
- package/esm/v1/types/component.js.map +1 -1
- package/esm/v1/types/event.d.ts +21 -12
- package/esm/v1/types/event.d.ts.map +1 -1
- package/esm/v1/types/event.js +44 -2
- package/esm/v1/types/event.js.map +1 -1
- package/esm/v1/types/event.test.d.ts +2 -0
- package/esm/v1/types/event.test.d.ts.map +1 -0
- package/esm/v1/types/event.test.js +68 -0
- package/esm/v1/types/event.test.js.map +1 -0
- package/esm/v1/types/message.d.ts +30 -9
- 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 +1 -3
- 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/utils/component-renderer.d.ts +89 -0
- package/esm/v1/utils/component-renderer.d.ts.map +1 -0
- package/esm/v1/utils/component-renderer.js +175 -0
- package/esm/v1/utils/component-renderer.js.map +1 -0
- package/esm/v1/utils/component-renderer.test.d.ts +2 -0
- package/esm/v1/utils/component-renderer.test.d.ts.map +1 -0
- package/esm/v1/utils/component-renderer.test.js +375 -0
- package/esm/v1/utils/component-renderer.test.js.map +1 -0
- package/esm/v1/utils/event-accumulator.d.ts +100 -0
- package/esm/v1/utils/event-accumulator.d.ts.map +1 -0
- package/esm/v1/utils/event-accumulator.js +728 -0
- package/esm/v1/utils/event-accumulator.js.map +1 -0
- package/esm/v1/utils/event-accumulator.test.d.ts +2 -0
- package/esm/v1/utils/event-accumulator.test.d.ts.map +1 -0
- package/esm/v1/utils/event-accumulator.test.js +1203 -0
- package/esm/v1/utils/event-accumulator.test.js.map +1 -0
- package/esm/v1/utils/json-patch.d.ts +18 -0
- package/esm/v1/utils/json-patch.d.ts.map +1 -0
- package/esm/v1/utils/json-patch.js +32 -0
- package/esm/v1/utils/json-patch.js.map +1 -0
- package/esm/v1/utils/json-patch.test.d.ts +2 -0
- package/esm/v1/utils/json-patch.test.d.ts.map +1 -0
- package/esm/v1/utils/json-patch.test.js +26 -0
- package/esm/v1/utils/json-patch.test.js.map +1 -0
- package/esm/v1/utils/registry-conversion.d.ts +53 -0
- package/esm/v1/utils/registry-conversion.d.ts.map +1 -0
- package/esm/v1/utils/registry-conversion.js +108 -0
- package/esm/v1/utils/registry-conversion.js.map +1 -0
- package/esm/v1/utils/registry-conversion.test.d.ts +2 -0
- package/esm/v1/utils/registry-conversion.test.d.ts.map +1 -0
- package/esm/v1/utils/registry-conversion.test.js +177 -0
- package/esm/v1/utils/registry-conversion.test.js.map +1 -0
- package/esm/v1/utils/stream-handler.d.ts +45 -0
- package/esm/v1/utils/stream-handler.d.ts.map +1 -0
- package/esm/v1/utils/stream-handler.js +44 -0
- package/esm/v1/utils/stream-handler.js.map +1 -0
- package/esm/v1/utils/stream-handler.test.d.ts +2 -0
- package/esm/v1/utils/stream-handler.test.d.ts.map +1 -0
- package/esm/v1/utils/stream-handler.test.js +72 -0
- package/esm/v1/utils/stream-handler.test.js.map +1 -0
- package/esm/v1/utils/tool-call-tracker.d.ts +41 -0
- package/esm/v1/utils/tool-call-tracker.d.ts.map +1 -0
- package/esm/v1/utils/tool-call-tracker.js +86 -0
- package/esm/v1/utils/tool-call-tracker.js.map +1 -0
- package/esm/v1/utils/tool-executor.d.ts +33 -0
- package/esm/v1/utils/tool-executor.d.ts.map +1 -0
- package/esm/v1/utils/tool-executor.js +99 -0
- package/esm/v1/utils/tool-executor.js.map +1 -0
- package/esm/v1/utils/tool-executor.test.d.ts +2 -0
- package/esm/v1/utils/tool-executor.test.d.ts.map +1 -0
- package/esm/v1/utils/tool-executor.test.js +220 -0
- package/esm/v1/utils/tool-executor.test.js.map +1 -0
- package/package.json +7 -6
- package/dist/v1/types/tool.d.ts +0 -52
- package/dist/v1/types/tool.d.ts.map +0 -1
- package/dist/v1/types/tool.js +0 -11
- package/dist/v1/types/tool.js.map +0 -1
- package/esm/v1/types/tool.d.ts +0 -52
- package/esm/v1/types/tool.d.ts.map +0 -1
- package/esm/v1/types/tool.js +0 -10
- package/esm/v1/types/tool.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { renderHook, act } from "@testing-library/react";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { useTamboClient } from "../../providers/tambo-client-provider";
|
|
4
|
+
import { TamboRegistryContext, } from "../../providers/tambo-registry-provider";
|
|
5
|
+
import { TamboV1StreamProvider } from "../providers/tambo-v1-stream-context";
|
|
6
|
+
import { useTamboV1 } from "./use-tambo-v1";
|
|
7
|
+
jest.mock("../../providers/tambo-client-provider", () => ({
|
|
8
|
+
useTamboClient: jest.fn(),
|
|
9
|
+
}));
|
|
10
|
+
describe("useTamboV1", () => {
|
|
11
|
+
const mockTamboClient = {
|
|
12
|
+
apiKey: "",
|
|
13
|
+
threads: {},
|
|
14
|
+
};
|
|
15
|
+
const mockRegistry = {
|
|
16
|
+
componentList: {},
|
|
17
|
+
toolRegistry: {},
|
|
18
|
+
componentToolAssociations: {},
|
|
19
|
+
mcpServerInfos: [],
|
|
20
|
+
resources: [],
|
|
21
|
+
resourceSource: null,
|
|
22
|
+
registerComponent: jest.fn(),
|
|
23
|
+
registerTool: jest.fn(),
|
|
24
|
+
registerTools: jest.fn(),
|
|
25
|
+
addToolAssociation: jest.fn(),
|
|
26
|
+
registerMcpServer: jest.fn(),
|
|
27
|
+
registerMcpServers: jest.fn(),
|
|
28
|
+
registerResource: jest.fn(),
|
|
29
|
+
registerResources: jest.fn(),
|
|
30
|
+
registerResourceSource: jest.fn(),
|
|
31
|
+
};
|
|
32
|
+
function TestWrapper({ children }) {
|
|
33
|
+
return (React.createElement(TamboRegistryContext.Provider, { value: mockRegistry },
|
|
34
|
+
React.createElement(TamboV1StreamProvider, null, children)));
|
|
35
|
+
}
|
|
36
|
+
function TestWrapperWithThreadId({ children, }) {
|
|
37
|
+
return (React.createElement(TamboRegistryContext.Provider, { value: mockRegistry },
|
|
38
|
+
React.createElement(TamboV1StreamProvider, { threadId: "thread_123" }, children)));
|
|
39
|
+
}
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
jest.mocked(useTamboClient).mockReturnValue(mockTamboClient);
|
|
42
|
+
jest.clearAllMocks();
|
|
43
|
+
});
|
|
44
|
+
it("returns client from useTamboClient", () => {
|
|
45
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
46
|
+
wrapper: TestWrapper,
|
|
47
|
+
});
|
|
48
|
+
expect(result.current.client).toBe(mockTamboClient);
|
|
49
|
+
});
|
|
50
|
+
it("returns registry functions", () => {
|
|
51
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
52
|
+
wrapper: TestWrapper,
|
|
53
|
+
});
|
|
54
|
+
expect(result.current.registerComponent).toBe(mockRegistry.registerComponent);
|
|
55
|
+
expect(result.current.registerTool).toBe(mockRegistry.registerTool);
|
|
56
|
+
expect(result.current.registerTools).toBe(mockRegistry.registerTools);
|
|
57
|
+
expect(result.current.componentList).toBe(mockRegistry.componentList);
|
|
58
|
+
expect(result.current.toolRegistry).toBe(mockRegistry.toolRegistry);
|
|
59
|
+
});
|
|
60
|
+
it("returns undefined thread when no threadId provided", () => {
|
|
61
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
62
|
+
wrapper: TestWrapper,
|
|
63
|
+
});
|
|
64
|
+
expect(result.current.thread).toBeUndefined();
|
|
65
|
+
expect(result.current.messages).toEqual([]);
|
|
66
|
+
});
|
|
67
|
+
it("returns thread state when threadId provided", () => {
|
|
68
|
+
const { result } = renderHook(() => useTamboV1("thread_123"), {
|
|
69
|
+
wrapper: TestWrapperWithThreadId,
|
|
70
|
+
});
|
|
71
|
+
expect(result.current.thread).toBeDefined();
|
|
72
|
+
expect(result.current.thread?.thread.id).toBe("thread_123");
|
|
73
|
+
expect(result.current.messages).toEqual([]);
|
|
74
|
+
});
|
|
75
|
+
it("returns default streaming state when thread not loaded", () => {
|
|
76
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
77
|
+
wrapper: TestWrapper,
|
|
78
|
+
});
|
|
79
|
+
expect(result.current.streamingState).toEqual({ status: "idle" });
|
|
80
|
+
expect(result.current.isIdle).toBe(true);
|
|
81
|
+
expect(result.current.isStreaming).toBe(false);
|
|
82
|
+
expect(result.current.isWaiting).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it("returns thread streaming state when thread loaded", () => {
|
|
85
|
+
const { result } = renderHook(() => useTamboV1("thread_123"), {
|
|
86
|
+
wrapper: TestWrapperWithThreadId,
|
|
87
|
+
});
|
|
88
|
+
expect(result.current.streamingState.status).toBe("idle");
|
|
89
|
+
expect(result.current.isIdle).toBe(true);
|
|
90
|
+
expect(result.current.isStreaming).toBe(false);
|
|
91
|
+
expect(result.current.isWaiting).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
it("provides dispatch function for advanced usage", () => {
|
|
94
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
95
|
+
wrapper: TestWrapper,
|
|
96
|
+
});
|
|
97
|
+
expect(typeof result.current.dispatch).toBe("function");
|
|
98
|
+
});
|
|
99
|
+
it("provides thread management functions", () => {
|
|
100
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
101
|
+
wrapper: TestWrapper,
|
|
102
|
+
});
|
|
103
|
+
expect(typeof result.current.initThread).toBe("function");
|
|
104
|
+
expect(typeof result.current.switchThread).toBe("function");
|
|
105
|
+
expect(typeof result.current.startNewThread).toBe("function");
|
|
106
|
+
});
|
|
107
|
+
it("initializes and switches threads", () => {
|
|
108
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
109
|
+
wrapper: TestWrapper,
|
|
110
|
+
});
|
|
111
|
+
// Initially no current thread
|
|
112
|
+
expect(result.current.currentThreadId).toBeNull();
|
|
113
|
+
expect(result.current.thread).toBeUndefined();
|
|
114
|
+
// Initialize a new thread
|
|
115
|
+
act(() => {
|
|
116
|
+
result.current.initThread("new_thread_1");
|
|
117
|
+
});
|
|
118
|
+
// Switch to the new thread
|
|
119
|
+
act(() => {
|
|
120
|
+
result.current.switchThread("new_thread_1");
|
|
121
|
+
});
|
|
122
|
+
expect(result.current.currentThreadId).toBe("new_thread_1");
|
|
123
|
+
});
|
|
124
|
+
it("starts new thread with generated ID", () => {
|
|
125
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
126
|
+
wrapper: TestWrapper,
|
|
127
|
+
});
|
|
128
|
+
let newThreadId;
|
|
129
|
+
act(() => {
|
|
130
|
+
newThreadId = result.current.startNewThread();
|
|
131
|
+
});
|
|
132
|
+
expect(newThreadId).toMatch(/^temp_/);
|
|
133
|
+
expect(result.current.currentThreadId).toBe(newThreadId);
|
|
134
|
+
expect(result.current.thread).toBeDefined();
|
|
135
|
+
});
|
|
136
|
+
it("uses current thread when no threadId argument provided", () => {
|
|
137
|
+
const { result } = renderHook(() => useTamboV1(), {
|
|
138
|
+
wrapper: TestWrapperWithThreadId,
|
|
139
|
+
});
|
|
140
|
+
// Should use current thread from context (thread_123)
|
|
141
|
+
expect(result.current.currentThreadId).toBe("thread_123");
|
|
142
|
+
expect(result.current.thread?.thread.id).toBe("thread_123");
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=use-tambo-v1.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tambo-v1.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport React from \"react\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport { TamboV1StreamProvider } from \"../providers/tambo-v1-stream-context\";\nimport { useTamboV1 } from \"./use-tambo-v1\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n}));\n\ndescribe(\"useTamboV1\", () => {\n const mockTamboClient = {\n apiKey: \"\",\n threads: {},\n } as unknown as TamboAI;\n\n const mockRegistry: TamboRegistryContextType = {\n componentList: {},\n toolRegistry: {},\n componentToolAssociations: {},\n mcpServerInfos: [],\n resources: [],\n resourceSource: null,\n registerComponent: jest.fn(),\n registerTool: jest.fn(),\n registerTools: jest.fn(),\n addToolAssociation: jest.fn(),\n registerMcpServer: jest.fn(),\n registerMcpServers: jest.fn(),\n registerResource: jest.fn(),\n registerResources: jest.fn(),\n registerResourceSource: jest.fn(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n );\n }\n\n function TestWrapperWithThreadId({\n children,\n }: {\n children: React.ReactNode;\n }) {\n return (\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboV1StreamProvider threadId=\"thread_123\">\n {children}\n </TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n );\n }\n\n beforeEach(() => {\n jest.mocked(useTamboClient).mockReturnValue(mockTamboClient);\n jest.clearAllMocks();\n });\n\n it(\"returns client from useTamboClient\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.client).toBe(mockTamboClient);\n });\n\n it(\"returns registry functions\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.registerComponent).toBe(\n mockRegistry.registerComponent,\n );\n expect(result.current.registerTool).toBe(mockRegistry.registerTool);\n expect(result.current.registerTools).toBe(mockRegistry.registerTools);\n expect(result.current.componentList).toBe(mockRegistry.componentList);\n expect(result.current.toolRegistry).toBe(mockRegistry.toolRegistry);\n });\n\n it(\"returns undefined thread when no threadId provided\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.thread).toBeUndefined();\n expect(result.current.messages).toEqual([]);\n });\n\n it(\"returns thread state when threadId provided\", () => {\n const { result } = renderHook(() => useTamboV1(\"thread_123\"), {\n wrapper: TestWrapperWithThreadId,\n });\n\n expect(result.current.thread).toBeDefined();\n expect(result.current.thread?.thread.id).toBe(\"thread_123\");\n expect(result.current.messages).toEqual([]);\n });\n\n it(\"returns default streaming state when thread not loaded\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.streamingState).toEqual({ status: \"idle\" });\n expect(result.current.isIdle).toBe(true);\n expect(result.current.isStreaming).toBe(false);\n expect(result.current.isWaiting).toBe(false);\n });\n\n it(\"returns thread streaming state when thread loaded\", () => {\n const { result } = renderHook(() => useTamboV1(\"thread_123\"), {\n wrapper: TestWrapperWithThreadId,\n });\n\n expect(result.current.streamingState.status).toBe(\"idle\");\n expect(result.current.isIdle).toBe(true);\n expect(result.current.isStreaming).toBe(false);\n expect(result.current.isWaiting).toBe(false);\n });\n\n it(\"provides dispatch function for advanced usage\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(typeof result.current.dispatch).toBe(\"function\");\n });\n\n it(\"provides thread management functions\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(typeof result.current.initThread).toBe(\"function\");\n expect(typeof result.current.switchThread).toBe(\"function\");\n expect(typeof result.current.startNewThread).toBe(\"function\");\n });\n\n it(\"initializes and switches threads\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n // Initially no current thread\n expect(result.current.currentThreadId).toBeNull();\n expect(result.current.thread).toBeUndefined();\n\n // Initialize a new thread\n act(() => {\n result.current.initThread(\"new_thread_1\");\n });\n\n // Switch to the new thread\n act(() => {\n result.current.switchThread(\"new_thread_1\");\n });\n\n expect(result.current.currentThreadId).toBe(\"new_thread_1\");\n });\n\n it(\"starts new thread with generated ID\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n let newThreadId: string;\n act(() => {\n newThreadId = result.current.startNewThread();\n });\n\n expect(newThreadId!).toMatch(/^temp_/);\n expect(result.current.currentThreadId).toBe(newThreadId!);\n expect(result.current.thread).toBeDefined();\n });\n\n it(\"uses current thread when no threadId argument provided\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapperWithThreadId,\n });\n\n // Should use current thread from context (thread_123)\n expect(result.current.currentThreadId).toBe(\"thread_123\");\n expect(result.current.thread?.thread.id).toBe(\"thread_123\");\n });\n});\n"]}
|
package/esm/v1/index.d.ts
CHANGED
|
@@ -1,35 +1,84 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `@tambo-ai/react/v1` - React SDK for Tambo v1 API
|
|
3
3
|
*
|
|
4
4
|
* Provides React hooks and providers for building AI-powered applications
|
|
5
5
|
* using the v1 streaming API with AG-UI protocol.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* - Custom events: import from '@tambo-ai/react/v1/types/event'
|
|
9
|
-
* - Thread state: import from '@tambo-ai/react/v1/types/thread'
|
|
10
|
-
* - Messages: import from '@tambo-ai/react/v1/types/message'
|
|
11
|
-
* - Components: import from '@tambo-ai/react/v1/types/component'
|
|
12
|
-
* - Tools: import from '@tambo-ai/react/v1/types/tool'
|
|
7
|
+
* ## Quick Start
|
|
13
8
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
9
|
+
* ```tsx
|
|
10
|
+
* import {
|
|
11
|
+
* TamboV1Provider,
|
|
12
|
+
* useTamboV1,
|
|
13
|
+
* useTamboV1ThreadInput,
|
|
14
|
+
* } from '@tambo-ai/react/v1';
|
|
19
15
|
*
|
|
20
16
|
* function App() {
|
|
21
17
|
* return (
|
|
22
|
-
* <TamboV1Provider
|
|
18
|
+
* <TamboV1Provider
|
|
19
|
+
* apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
|
|
20
|
+
* components={[WeatherCard]}
|
|
21
|
+
* tools={[searchTool]}
|
|
22
|
+
* >
|
|
23
23
|
* <ChatInterface />
|
|
24
24
|
* </TamboV1Provider>
|
|
25
25
|
* );
|
|
26
26
|
* }
|
|
27
27
|
*
|
|
28
28
|
* function ChatInterface() {
|
|
29
|
-
* const
|
|
30
|
-
*
|
|
29
|
+
* const [threadId, setThreadId] = useState<string>();
|
|
30
|
+
* const { messages, isStreaming } = useTamboV1(threadId);
|
|
31
|
+
* const { value, setValue, submit, isPending } = useTamboV1ThreadInput(threadId);
|
|
32
|
+
*
|
|
33
|
+
* const handleSubmit = async (e: React.FormEvent) => {
|
|
34
|
+
* e.preventDefault();
|
|
35
|
+
* const result = await submit();
|
|
36
|
+
* if (!threadId) setThreadId(result.threadId);
|
|
37
|
+
* };
|
|
38
|
+
*
|
|
39
|
+
* return (
|
|
40
|
+
* <form onSubmit={handleSubmit}>
|
|
41
|
+
* {messages.map(msg => <Message key={msg.id} message={msg} />)}
|
|
42
|
+
* {isStreaming && <LoadingIndicator />}
|
|
43
|
+
* <input value={value} onChange={(e) => setValue(e.target.value)} />
|
|
44
|
+
* <button disabled={isPending}>Send</button>
|
|
45
|
+
* </form>
|
|
46
|
+
* );
|
|
31
47
|
* }
|
|
32
48
|
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## Type Imports
|
|
51
|
+
*
|
|
52
|
+
* Types are imported directly from specific files:
|
|
53
|
+
* - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`
|
|
54
|
+
* - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`
|
|
55
|
+
* - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`
|
|
56
|
+
*
|
|
57
|
+
* SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`
|
|
58
|
+
* AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`
|
|
33
59
|
*/
|
|
34
|
-
export {};
|
|
60
|
+
export { TamboV1Provider, useContextKey, type TamboV1ProviderProps, } from "./providers/tambo-v1-provider";
|
|
61
|
+
export { TamboV1StreamProvider, useStreamState, useStreamDispatch, useThreadManagement, type ThreadManagement, } from "./providers/tambo-v1-stream-context";
|
|
62
|
+
export { TamboRegistryProvider } from "../providers/tambo-registry-provider";
|
|
63
|
+
export { TamboContextHelpersProvider, useTamboContextHelpers, } from "../providers/tambo-context-helpers-provider";
|
|
64
|
+
export { useTamboV1, type UseTamboV1Return } from "./hooks/use-tambo-v1";
|
|
65
|
+
export { useTamboV1ThreadInput, type UseTamboV1ThreadInputReturn, type SubmitOptions, } from "./hooks/use-tambo-v1-thread-input";
|
|
66
|
+
export { useTamboV1Thread } from "./hooks/use-tambo-v1-thread";
|
|
67
|
+
export { useTamboV1ThreadList } from "./hooks/use-tambo-v1-thread-list";
|
|
68
|
+
export { useTamboV1ComponentState, type UseTamboV1ComponentStateReturn, } from "./hooks/use-tambo-v1-component-state";
|
|
69
|
+
export { useTamboClient } from "../providers/tambo-client-provider";
|
|
70
|
+
export { useTamboRegistry } from "../providers/tambo-registry-provider";
|
|
71
|
+
export { useV1ComponentContent, useV1ComponentContentOptional, renderComponentContent, renderMessageContent, renderMessageComponents, isComponentContent, type V1ComponentContentContext, type RenderComponentOptions, } from "./utils/component-renderer";
|
|
72
|
+
export { applyJsonPatch } from "./utils/json-patch";
|
|
73
|
+
export { toAvailableComponent, toAvailableComponents, toAvailableTool, toAvailableTools, } from "./utils/registry-conversion";
|
|
74
|
+
export { executeClientTool, executeAllPendingTools, type PendingToolCall, } from "./utils/tool-executor";
|
|
75
|
+
export { ToolCallTracker } from "./utils/tool-call-tracker";
|
|
76
|
+
export { handleEventStream } from "./utils/stream-handler";
|
|
77
|
+
export { defineTool } from "../util/registry";
|
|
78
|
+
export { currentPageContextHelper, currentTimeContextHelper, } from "../context-helpers";
|
|
79
|
+
export type { AdditionalContext, ContextHelperFn, ContextHelpers, } from "../context-helpers";
|
|
80
|
+
export type { ComponentContextToolMetadata, ComponentRegistry, ParameterSpec, RegisteredComponent, TamboTool, ToolAnnotations, } from "../model/component-metadata";
|
|
81
|
+
export { MCPTransport } from "../model/mcp-server-info";
|
|
82
|
+
export type { McpServerInfo, NormalizedMcpServerInfo, } from "../model/mcp-server-info";
|
|
83
|
+
export type { ListResourceItem, ReadResourceResult, ResourceSource, } from "../model/resource-info";
|
|
35
84
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/v1/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAMH,OAAO,EACL,eAAe,EACf,aAAa,EACb,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,6CAA6C,CAAC;AAMrD,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,KAAK,aAAa,GACnB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EACL,wBAAwB,EACxB,KAAK,8BAA8B,GACpC,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAMxE,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,wBAAwB,CAAC"}
|
package/esm/v1/index.js
CHANGED
|
@@ -1,46 +1,102 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `@tambo-ai/react/v1` - React SDK for Tambo v1 API
|
|
3
3
|
*
|
|
4
4
|
* Provides React hooks and providers for building AI-powered applications
|
|
5
5
|
* using the v1 streaming API with AG-UI protocol.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* - Custom events: import from '@tambo-ai/react/v1/types/event'
|
|
9
|
-
* - Thread state: import from '@tambo-ai/react/v1/types/thread'
|
|
10
|
-
* - Messages: import from '@tambo-ai/react/v1/types/message'
|
|
11
|
-
* - Components: import from '@tambo-ai/react/v1/types/component'
|
|
12
|
-
* - Tools: import from '@tambo-ai/react/v1/types/tool'
|
|
7
|
+
* ## Quick Start
|
|
13
8
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
9
|
+
* ```tsx
|
|
10
|
+
* import {
|
|
11
|
+
* TamboV1Provider,
|
|
12
|
+
* useTamboV1,
|
|
13
|
+
* useTamboV1ThreadInput,
|
|
14
|
+
* } from '@tambo-ai/react/v1';
|
|
19
15
|
*
|
|
20
16
|
* function App() {
|
|
21
17
|
* return (
|
|
22
|
-
* <TamboV1Provider
|
|
18
|
+
* <TamboV1Provider
|
|
19
|
+
* apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
|
|
20
|
+
* components={[WeatherCard]}
|
|
21
|
+
* tools={[searchTool]}
|
|
22
|
+
* >
|
|
23
23
|
* <ChatInterface />
|
|
24
24
|
* </TamboV1Provider>
|
|
25
25
|
* );
|
|
26
26
|
* }
|
|
27
27
|
*
|
|
28
28
|
* function ChatInterface() {
|
|
29
|
-
* const
|
|
30
|
-
*
|
|
29
|
+
* const [threadId, setThreadId] = useState<string>();
|
|
30
|
+
* const { messages, isStreaming } = useTamboV1(threadId);
|
|
31
|
+
* const { value, setValue, submit, isPending } = useTamboV1ThreadInput(threadId);
|
|
32
|
+
*
|
|
33
|
+
* const handleSubmit = async (e: React.FormEvent) => {
|
|
34
|
+
* e.preventDefault();
|
|
35
|
+
* const result = await submit();
|
|
36
|
+
* if (!threadId) setThreadId(result.threadId);
|
|
37
|
+
* };
|
|
38
|
+
*
|
|
39
|
+
* return (
|
|
40
|
+
* <form onSubmit={handleSubmit}>
|
|
41
|
+
* {messages.map(msg => <Message key={msg.id} message={msg} />)}
|
|
42
|
+
* {isStreaming && <LoadingIndicator />}
|
|
43
|
+
* <input value={value} onChange={(e) => setValue(e.target.value)} />
|
|
44
|
+
* <button disabled={isPending}>Send</button>
|
|
45
|
+
* </form>
|
|
46
|
+
* );
|
|
31
47
|
* }
|
|
32
48
|
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## Type Imports
|
|
51
|
+
*
|
|
52
|
+
* Types are imported directly from specific files:
|
|
53
|
+
* - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`
|
|
54
|
+
* - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`
|
|
55
|
+
* - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`
|
|
56
|
+
*
|
|
57
|
+
* SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`
|
|
58
|
+
* AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`
|
|
33
59
|
*/
|
|
34
|
-
|
|
35
|
-
// Providers
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// export
|
|
40
|
-
|
|
41
|
-
// export
|
|
42
|
-
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
60
|
+
// =============================================================================
|
|
61
|
+
// Providers
|
|
62
|
+
// =============================================================================
|
|
63
|
+
export { TamboV1Provider, useContextKey, } from "./providers/tambo-v1-provider";
|
|
64
|
+
export { TamboV1StreamProvider, useStreamState, useStreamDispatch, useThreadManagement, } from "./providers/tambo-v1-stream-context";
|
|
65
|
+
// Re-export registry provider from beta SDK (works with v1)
|
|
66
|
+
export { TamboRegistryProvider } from "../providers/tambo-registry-provider";
|
|
67
|
+
// Re-export context helpers from beta SDK (works with v1)
|
|
68
|
+
export { TamboContextHelpersProvider, useTamboContextHelpers, } from "../providers/tambo-context-helpers-provider";
|
|
69
|
+
// =============================================================================
|
|
70
|
+
// Hooks
|
|
71
|
+
// =============================================================================
|
|
72
|
+
export { useTamboV1 } from "./hooks/use-tambo-v1";
|
|
73
|
+
export { useTamboV1ThreadInput, } from "./hooks/use-tambo-v1-thread-input";
|
|
74
|
+
export { useTamboV1Thread } from "./hooks/use-tambo-v1-thread";
|
|
75
|
+
export { useTamboV1ThreadList } from "./hooks/use-tambo-v1-thread-list";
|
|
76
|
+
export { useTamboV1ComponentState, } from "./hooks/use-tambo-v1-component-state";
|
|
77
|
+
// Re-export client hook from beta SDK (works with v1)
|
|
78
|
+
export { useTamboClient } from "../providers/tambo-client-provider";
|
|
79
|
+
// Re-export registry hook from beta SDK (works with v1)
|
|
80
|
+
export { useTamboRegistry } from "../providers/tambo-registry-provider";
|
|
81
|
+
// =============================================================================
|
|
82
|
+
// Component Rendering
|
|
83
|
+
// =============================================================================
|
|
84
|
+
export { useV1ComponentContent, useV1ComponentContentOptional, renderComponentContent, renderMessageContent, renderMessageComponents, isComponentContent, } from "./utils/component-renderer";
|
|
85
|
+
// =============================================================================
|
|
86
|
+
// Utilities
|
|
87
|
+
// =============================================================================
|
|
88
|
+
export { applyJsonPatch } from "./utils/json-patch";
|
|
89
|
+
export { toAvailableComponent, toAvailableComponents, toAvailableTool, toAvailableTools, } from "./utils/registry-conversion";
|
|
90
|
+
export { executeClientTool, executeAllPendingTools, } from "./utils/tool-executor";
|
|
91
|
+
export { ToolCallTracker } from "./utils/tool-call-tracker";
|
|
92
|
+
export { handleEventStream } from "./utils/stream-handler";
|
|
93
|
+
// =============================================================================
|
|
94
|
+
// Re-exports from Beta SDK (compatible with v1)
|
|
95
|
+
// =============================================================================
|
|
96
|
+
// Tool definition helper
|
|
97
|
+
export { defineTool } from "../util/registry";
|
|
98
|
+
// Built-in context helpers
|
|
99
|
+
export { currentPageContextHelper, currentTimeContextHelper, } from "../context-helpers";
|
|
100
|
+
// MCP server types
|
|
101
|
+
export { MCPTransport } from "../model/mcp-server-info";
|
|
46
102
|
//# sourceMappingURL=index.js.map
|
package/esm/v1/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAEH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EACL,eAAe,EACf,aAAa,GAEd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,qCAAqC,CAAC;AAE7C,4DAA4D;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,0DAA0D;AAC1D,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,6CAA6C,CAAC;AAErD,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAyB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EACL,qBAAqB,GAGtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EACL,wBAAwB,GAEzB,MAAM,sCAAsC,CAAC;AAE9C,sDAAsD;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,wDAAwD;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,GAGnB,MAAM,4BAA4B,CAAC;AAEpC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,gFAAgF;AAChF,gDAAgD;AAChD,gFAAgF;AAEhF,yBAAyB;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,2BAA2B;AAC3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAmB5B,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["/**\n * `@tambo-ai/react/v1` - React SDK for Tambo v1 API\n *\n * Provides React hooks and providers for building AI-powered applications\n * using the v1 streaming API with AG-UI protocol.\n *\n * ## Quick Start\n *\n * ```tsx\n * import {\n * TamboV1Provider,\n * useTamboV1,\n * useTamboV1ThreadInput,\n * } from '@tambo-ai/react/v1';\n *\n * function App() {\n * return (\n * <TamboV1Provider\n * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}\n * components={[WeatherCard]}\n * tools={[searchTool]}\n * >\n * <ChatInterface />\n * </TamboV1Provider>\n * );\n * }\n *\n * function ChatInterface() {\n * const [threadId, setThreadId] = useState<string>();\n * const { messages, isStreaming } = useTamboV1(threadId);\n * const { value, setValue, submit, isPending } = useTamboV1ThreadInput(threadId);\n *\n * const handleSubmit = async (e: React.FormEvent) => {\n * e.preventDefault();\n * const result = await submit();\n * if (!threadId) setThreadId(result.threadId);\n * };\n *\n * return (\n * <form onSubmit={handleSubmit}>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * <input value={value} onChange={(e) => setValue(e.target.value)} />\n * <button disabled={isPending}>Send</button>\n * </form>\n * );\n * }\n * ```\n *\n * ## Type Imports\n *\n * Types are imported directly from specific files:\n * - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`\n * - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`\n * - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`\n *\n * SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`\n * AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`\n */\n\n// =============================================================================\n// Providers\n// =============================================================================\n\nexport {\n TamboV1Provider,\n useContextKey,\n type TamboV1ProviderProps,\n} from \"./providers/tambo-v1-provider\";\n\nexport {\n TamboV1StreamProvider,\n useStreamState,\n useStreamDispatch,\n useThreadManagement,\n type ThreadManagement,\n} from \"./providers/tambo-v1-stream-context\";\n\n// Re-export registry provider from beta SDK (works with v1)\nexport { TamboRegistryProvider } from \"../providers/tambo-registry-provider\";\n\n// Re-export context helpers from beta SDK (works with v1)\nexport {\n TamboContextHelpersProvider,\n useTamboContextHelpers,\n} from \"../providers/tambo-context-helpers-provider\";\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\nexport { useTamboV1, type UseTamboV1Return } from \"./hooks/use-tambo-v1\";\n\nexport {\n useTamboV1ThreadInput,\n type UseTamboV1ThreadInputReturn,\n type SubmitOptions,\n} from \"./hooks/use-tambo-v1-thread-input\";\n\nexport { useTamboV1Thread } from \"./hooks/use-tambo-v1-thread\";\n\nexport { useTamboV1ThreadList } from \"./hooks/use-tambo-v1-thread-list\";\n\nexport {\n useTamboV1ComponentState,\n type UseTamboV1ComponentStateReturn,\n} from \"./hooks/use-tambo-v1-component-state\";\n\n// Re-export client hook from beta SDK (works with v1)\nexport { useTamboClient } from \"../providers/tambo-client-provider\";\n\n// Re-export registry hook from beta SDK (works with v1)\nexport { useTamboRegistry } from \"../providers/tambo-registry-provider\";\n\n// =============================================================================\n// Component Rendering\n// =============================================================================\n\nexport {\n useV1ComponentContent,\n useV1ComponentContentOptional,\n renderComponentContent,\n renderMessageContent,\n renderMessageComponents,\n isComponentContent,\n type V1ComponentContentContext,\n type RenderComponentOptions,\n} from \"./utils/component-renderer\";\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nexport { applyJsonPatch } from \"./utils/json-patch\";\n\nexport {\n toAvailableComponent,\n toAvailableComponents,\n toAvailableTool,\n toAvailableTools,\n} from \"./utils/registry-conversion\";\n\nexport {\n executeClientTool,\n executeAllPendingTools,\n type PendingToolCall,\n} from \"./utils/tool-executor\";\n\nexport { ToolCallTracker } from \"./utils/tool-call-tracker\";\n\nexport { handleEventStream } from \"./utils/stream-handler\";\n\n// =============================================================================\n// Re-exports from Beta SDK (compatible with v1)\n// =============================================================================\n\n// Tool definition helper\nexport { defineTool } from \"../util/registry\";\n\n// Built-in context helpers\nexport {\n currentPageContextHelper,\n currentTimeContextHelper,\n} from \"../context-helpers\";\n\n// Context helper types\nexport type {\n AdditionalContext,\n ContextHelperFn,\n ContextHelpers,\n} from \"../context-helpers\";\n\n// Component and tool types\nexport type {\n ComponentContextToolMetadata,\n ComponentRegistry,\n ParameterSpec,\n RegisteredComponent,\n TamboTool,\n ToolAnnotations,\n} from \"../model/component-metadata\";\n\n// MCP server types\nexport { MCPTransport } from \"../model/mcp-server-info\";\nexport type {\n McpServerInfo,\n NormalizedMcpServerInfo,\n} from \"../model/mcp-server-info\";\n\n// Resource types\nexport type {\n ListResourceItem,\n ReadResourceResult,\n ResourceSource,\n} from \"../model/resource-info\";\n"]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TamboV1Provider - Main Provider for v1 API
|
|
3
|
+
*
|
|
4
|
+
* Composes the necessary providers for the v1 SDK:
|
|
5
|
+
* - TamboClientProvider: API client and authentication
|
|
6
|
+
* - TamboRegistryProvider: Component and tool registration
|
|
7
|
+
* - TamboContextHelpersProvider: Context helper functions
|
|
8
|
+
* - TamboV1StreamProvider: Streaming state management
|
|
9
|
+
*
|
|
10
|
+
* This provider should wrap your entire application or the portion
|
|
11
|
+
* that needs access to Tambo v1 functionality.
|
|
12
|
+
*/
|
|
13
|
+
import React, { type PropsWithChildren } from "react";
|
|
14
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
15
|
+
import { type TamboClientProviderProps } from "../../providers/tambo-client-provider";
|
|
16
|
+
import { type TamboRegistryProviderProps } from "../../providers/tambo-registry-provider";
|
|
17
|
+
import type { ContextHelpers } from "../../context-helpers";
|
|
18
|
+
import type { McpServerInfo } from "../../model/mcp-server-info";
|
|
19
|
+
import type { ListResourceItem, ResourceSource } from "../../model/resource-info";
|
|
20
|
+
/**
|
|
21
|
+
* Hook to access the contextKey from TamboV1Provider.
|
|
22
|
+
* @returns The contextKey if provided, undefined otherwise
|
|
23
|
+
*/
|
|
24
|
+
export declare function useContextKey(): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Props for TamboV1Provider
|
|
27
|
+
*/
|
|
28
|
+
export interface TamboV1ProviderProps extends Pick<TamboClientProviderProps, "apiKey" | "tamboUrl" | "environment" | "userToken"> {
|
|
29
|
+
/**
|
|
30
|
+
* Components to register with the registry.
|
|
31
|
+
* These will be available for the AI to use in responses.
|
|
32
|
+
*/
|
|
33
|
+
components?: TamboRegistryProviderProps["components"];
|
|
34
|
+
/**
|
|
35
|
+
* Tools to register with the registry.
|
|
36
|
+
* These will be executed client-side when requested by the AI.
|
|
37
|
+
*/
|
|
38
|
+
tools?: TamboRegistryProviderProps["tools"];
|
|
39
|
+
/**
|
|
40
|
+
* MCP servers to register with the registry.
|
|
41
|
+
* These provide additional tools and resources from MCP-compatible servers.
|
|
42
|
+
*/
|
|
43
|
+
mcpServers?: (McpServerInfo | string)[];
|
|
44
|
+
/**
|
|
45
|
+
* Callback function called when an unregistered tool is called.
|
|
46
|
+
* If not provided, an error will be thrown for unknown tools.
|
|
47
|
+
*/
|
|
48
|
+
onCallUnregisteredTool?: TamboRegistryProviderProps["onCallUnregisteredTool"];
|
|
49
|
+
/**
|
|
50
|
+
* Static resources to register with the registry.
|
|
51
|
+
* These will be available for the AI to access.
|
|
52
|
+
*/
|
|
53
|
+
resources?: ListResourceItem[];
|
|
54
|
+
/**
|
|
55
|
+
* Dynamic resource search function.
|
|
56
|
+
* Must be paired with getResource.
|
|
57
|
+
* Called when searching for resources dynamically.
|
|
58
|
+
*/
|
|
59
|
+
listResources?: ResourceSource["listResources"];
|
|
60
|
+
/**
|
|
61
|
+
* Dynamic resource fetch function.
|
|
62
|
+
* Must be paired with listResources.
|
|
63
|
+
* Called when fetching a specific resource by URI.
|
|
64
|
+
*/
|
|
65
|
+
getResource?: ResourceSource["getResource"];
|
|
66
|
+
/**
|
|
67
|
+
* Configuration for context helpers.
|
|
68
|
+
* A dictionary of functions that provide additional context to the AI.
|
|
69
|
+
* Each key becomes the context name, and the function returns the value.
|
|
70
|
+
*/
|
|
71
|
+
contextHelpers?: ContextHelpers;
|
|
72
|
+
/**
|
|
73
|
+
* Optional context key for thread scoping/isolation.
|
|
74
|
+
* Threads created with the same contextKey are grouped together.
|
|
75
|
+
* Useful for multi-tenant applications or separating conversation contexts.
|
|
76
|
+
*/
|
|
77
|
+
contextKey?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Optional custom QueryClient instance.
|
|
80
|
+
* If not provided, a default client will be created.
|
|
81
|
+
*/
|
|
82
|
+
queryClient?: QueryClient;
|
|
83
|
+
/**
|
|
84
|
+
* Children components
|
|
85
|
+
*/
|
|
86
|
+
children: React.ReactNode;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Main provider for the Tambo v1 SDK.
|
|
90
|
+
*
|
|
91
|
+
* Composes TamboClientProvider, TamboRegistryProvider, and TamboV1StreamProvider
|
|
92
|
+
* to provide a complete context for building AI-powered applications.
|
|
93
|
+
*
|
|
94
|
+
* Threads are managed dynamically through useTamboV1() hook functions:
|
|
95
|
+
* - startNewThread() - Begin a new conversation
|
|
96
|
+
* - switchThread(threadId) - Switch to an existing thread
|
|
97
|
+
* - initThread(threadId) - Initialize a thread for receiving events
|
|
98
|
+
* @param props - Provider configuration
|
|
99
|
+
* @param props.apiKey - Tambo API key for authentication
|
|
100
|
+
* @param props.tamboUrl - Optional custom Tambo API URL
|
|
101
|
+
* @param props.environment - Optional environment configuration
|
|
102
|
+
* @param props.userToken - Optional OAuth token for user authentication
|
|
103
|
+
* @param props.components - Components to register with the AI
|
|
104
|
+
* @param props.tools - Tools to register for client-side execution
|
|
105
|
+
* @param props.mcpServers - MCP servers to register for additional tools/resources
|
|
106
|
+
* @param props.onCallUnregisteredTool - Callback for handling unknown tool calls
|
|
107
|
+
* @param props.resources - Static resources to register with the AI
|
|
108
|
+
* @param props.listResources - Dynamic resource search function (must be paired with getResource)
|
|
109
|
+
* @param props.getResource - Dynamic resource fetch function (must be paired with listResources)
|
|
110
|
+
* @param props.contextHelpers - Configuration for context helper functions
|
|
111
|
+
* @param props.contextKey - Optional context key for thread scoping/isolation
|
|
112
|
+
* @param props.queryClient - Optional custom React Query client
|
|
113
|
+
* @param props.children - Child components
|
|
114
|
+
* @returns Provider component tree
|
|
115
|
+
* @example
|
|
116
|
+
* ```tsx
|
|
117
|
+
* import { TamboV1Provider } from '@tambo-ai/react/v1';
|
|
118
|
+
*
|
|
119
|
+
* function App() {
|
|
120
|
+
* return (
|
|
121
|
+
* <TamboV1Provider
|
|
122
|
+
* apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
|
|
123
|
+
* components={[WeatherCard, StockChart]}
|
|
124
|
+
* tools={[searchTool, calculatorTool]}
|
|
125
|
+
* >
|
|
126
|
+
* <ChatInterface />
|
|
127
|
+
* </TamboV1Provider>
|
|
128
|
+
* );
|
|
129
|
+
* }
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
export declare function TamboV1Provider({ apiKey, tamboUrl, environment, userToken, components, tools, mcpServers, onCallUnregisteredTool, resources, listResources, getResource, contextHelpers, contextKey, queryClient, children, }: PropsWithChildren<TamboV1ProviderProps>): React.JSX.Element;
|
|
133
|
+
//# sourceMappingURL=tambo-v1-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tambo-v1-provider.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAGZ,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAuB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAQnC;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAElD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,wBAAwB,EACxB,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,CACpD;IACC;;;OAGG;IACH,UAAU,CAAC,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAEtD;;;OAGG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE5C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;IAExC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,0BAA0B,CAAC,wBAAwB,CAAC,CAAC;IAE9E;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE/B;;;;OAIG;IACH,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAEhD;;;;OAIG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAE5C;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,qBA2CzC"}
|