@tambo-ai/react 0.74.1 → 1.0.0-rc.3

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.
Files changed (693) hide show
  1. package/README.md +46 -449
  2. package/dist/hoc/with-tambo-interactable.d.ts +8 -0
  3. package/dist/hoc/with-tambo-interactable.d.ts.map +1 -1
  4. package/dist/hoc/with-tambo-interactable.js +16 -13
  5. package/dist/hoc/with-tambo-interactable.js.map +1 -1
  6. package/dist/hoc/with-tambo-interactable.test.js +15 -3
  7. package/dist/hoc/with-tambo-interactable.test.js.map +1 -1
  8. package/dist/hooks/use-tambo-voice.test.js +3 -0
  9. package/dist/hooks/use-tambo-voice.test.js.map +1 -1
  10. package/dist/index.d.ts +7 -25
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -59
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp/mcp-hooks.js +5 -5
  15. package/dist/mcp/mcp-hooks.js.map +1 -1
  16. package/dist/mcp/mcp-hooks.test.js +69 -0
  17. package/dist/mcp/mcp-hooks.test.js.map +1 -1
  18. package/dist/mcp/tambo-mcp-provider.test.js +24 -0
  19. package/dist/mcp/tambo-mcp-provider.test.js.map +1 -1
  20. package/dist/mcp/use-mcp-servers.test.js +9 -0
  21. package/dist/mcp/use-mcp-servers.test.js.map +1 -1
  22. package/dist/model/component-metadata.d.ts +4 -4
  23. package/dist/model/component-metadata.js.map +1 -1
  24. package/dist/providers/tambo-client-provider.d.ts +12 -0
  25. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  26. package/dist/providers/tambo-client-provider.js +8 -3
  27. package/dist/providers/tambo-client-provider.js.map +1 -1
  28. package/dist/providers/tambo-interactable-provider.d.ts +1 -1
  29. package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
  30. package/dist/providers/tambo-interactable-provider.js +8 -0
  31. package/dist/providers/tambo-interactable-provider.js.map +1 -1
  32. package/dist/providers/tambo-interactable-provider.test.js +47 -0
  33. package/dist/providers/tambo-interactable-provider.test.js.map +1 -1
  34. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +2 -10
  35. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  36. package/dist/providers/tambo-interactables-additional-context.test.js +3 -19
  37. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
  38. package/dist/providers/tambo-mcp-token-provider.d.ts +8 -17
  39. package/dist/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  40. package/dist/providers/tambo-mcp-token-provider.js +20 -97
  41. package/dist/providers/tambo-mcp-token-provider.js.map +1 -1
  42. package/dist/testing/tools.d.ts +3 -3
  43. package/dist/testing/tools.d.ts.map +1 -1
  44. package/dist/testing/tools.js.map +1 -1
  45. package/dist/util/registry-validators.js +1 -1
  46. package/dist/util/registry-validators.js.map +1 -1
  47. package/dist/util/resource-content-resolver.test.js +1 -1
  48. package/dist/util/resource-content-resolver.test.js.map +1 -1
  49. package/dist/v1/__tests__/v1-interactables.test.js +1 -1
  50. package/dist/v1/__tests__/v1-interactables.test.js.map +1 -1
  51. package/dist/v1/components/v1-component-renderer.d.ts +9 -9
  52. package/dist/v1/components/v1-component-renderer.d.ts.map +1 -1
  53. package/dist/v1/components/v1-component-renderer.js +13 -13
  54. package/dist/v1/components/v1-component-renderer.js.map +1 -1
  55. package/dist/v1/components/v1-component-renderer.test.js +15 -15
  56. package/dist/v1/components/v1-component-renderer.test.js.map +1 -1
  57. package/{esm/hooks/use-current-message.d.ts → dist/v1/hooks/use-tambo-current-message.d.ts} +30 -9
  58. package/dist/v1/hooks/use-tambo-current-message.d.ts.map +1 -0
  59. package/dist/{hooks/use-current-message.js → v1/hooks/use-tambo-current-message.js} +13 -8
  60. package/dist/v1/hooks/use-tambo-current-message.js.map +1 -0
  61. package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts +11 -0
  62. package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -0
  63. package/dist/v1/hooks/use-tambo-v1-auth-state.js +48 -0
  64. package/dist/v1/hooks/use-tambo-v1-auth-state.js.map +1 -0
  65. package/dist/v1/hooks/use-tambo-v1-auth-state.test.d.ts +2 -0
  66. package/dist/v1/hooks/use-tambo-v1-auth-state.test.d.ts.map +1 -0
  67. package/dist/v1/hooks/use-tambo-v1-auth-state.test.js +105 -0
  68. package/dist/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -0
  69. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +7 -6
  70. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
  71. package/dist/v1/hooks/use-tambo-v1-component-state.js +101 -28
  72. package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
  73. package/dist/v1/hooks/use-tambo-v1-component-state.test.js +150 -25
  74. package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
  75. package/dist/v1/hooks/use-tambo-v1-messages.d.ts +9 -9
  76. package/dist/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -1
  77. package/dist/v1/hooks/use-tambo-v1-messages.js +4 -4
  78. package/dist/v1/hooks/use-tambo-v1-messages.js.map +1 -1
  79. package/dist/v1/hooks/use-tambo-v1-messages.test.js +14 -6
  80. package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
  81. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +21 -3
  82. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  83. package/dist/v1/hooks/use-tambo-v1-send-message.js +92 -17
  84. package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  85. package/dist/v1/hooks/use-tambo-v1-send-message.test.js +315 -42
  86. package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  87. package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts +7 -7
  88. package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
  89. package/dist/v1/hooks/use-tambo-v1-stream-status.js +14 -16
  90. package/dist/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
  91. package/dist/v1/hooks/use-tambo-v1-stream-status.test.js +30 -30
  92. package/dist/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
  93. package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts +7 -7
  94. package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -1
  95. package/dist/v1/hooks/use-tambo-v1-suggestions.js +9 -9
  96. package/dist/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
  97. package/dist/v1/hooks/use-tambo-v1-suggestions.test.js +44 -44
  98. package/dist/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -1
  99. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +3 -3
  100. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -1
  101. package/dist/v1/hooks/use-tambo-v1-thread-input.js +4 -4
  102. package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -1
  103. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +40 -27
  104. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
  105. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts +4 -4
  106. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
  107. package/dist/v1/hooks/use-tambo-v1-thread-list.js +8 -4
  108. package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
  109. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +18 -16
  110. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
  111. package/dist/v1/hooks/use-tambo-v1-thread.d.ts +3 -3
  112. package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
  113. package/dist/v1/hooks/use-tambo-v1-thread.js +7 -3
  114. package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -1
  115. package/dist/v1/hooks/use-tambo-v1-thread.test.js +10 -4
  116. package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
  117. package/dist/v1/hooks/use-tambo-v1.d.ts +16 -5
  118. package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -1
  119. package/dist/v1/hooks/use-tambo-v1.js +14 -6
  120. package/dist/v1/hooks/use-tambo-v1.js.map +1 -1
  121. package/dist/v1/hooks/use-tambo-v1.test.js +65 -43
  122. package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
  123. package/dist/v1/index.d.ts +34 -27
  124. package/dist/v1/index.d.ts.map +1 -1
  125. package/dist/v1/index.js +48 -35
  126. package/dist/v1/index.js.map +1 -1
  127. package/dist/v1/providers/tambo-v1-provider.d.ts +35 -20
  128. package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  129. package/dist/v1/providers/tambo-v1-provider.js +63 -26
  130. package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
  131. package/dist/v1/providers/tambo-v1-provider.test.js +40 -23
  132. package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -1
  133. package/dist/v1/providers/tambo-v1-stream-context.d.ts +21 -15
  134. package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  135. package/dist/v1/providers/tambo-v1-stream-context.js +66 -27
  136. package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
  137. package/dist/v1/providers/tambo-v1-stream-context.test.js +14 -5
  138. package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  139. package/dist/v1/providers/tambo-v1-stub-provider.d.ts +9 -9
  140. package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
  141. package/dist/v1/providers/tambo-v1-stub-provider.js +11 -7
  142. package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
  143. package/dist/v1/providers/tambo-v1-stub-provider.test.js +25 -25
  144. package/dist/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
  145. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +20 -9
  146. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
  147. package/dist/v1/providers/tambo-v1-thread-input-provider.js +25 -16
  148. package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
  149. package/dist/v1/types/auth.d.ts +24 -0
  150. package/dist/v1/types/auth.d.ts.map +1 -0
  151. package/dist/{model/tambo-thread.js → v1/types/auth.js} +1 -1
  152. package/dist/v1/types/auth.js.map +1 -0
  153. package/dist/v1/types/component.d.ts +3 -3
  154. package/dist/v1/types/component.d.ts.map +1 -1
  155. package/dist/v1/types/component.js +2 -2
  156. package/dist/v1/types/component.js.map +1 -1
  157. package/dist/v1/types/event.d.ts +1 -1
  158. package/dist/v1/types/event.js +1 -1
  159. package/dist/v1/types/event.js.map +1 -1
  160. package/dist/v1/types/message.d.ts +19 -12
  161. package/dist/v1/types/message.d.ts.map +1 -1
  162. package/dist/v1/types/message.js +1 -1
  163. package/dist/v1/types/message.js.map +1 -1
  164. package/dist/v1/types/thread.d.ts +8 -6
  165. package/dist/v1/types/thread.d.ts.map +1 -1
  166. package/dist/v1/types/thread.js +1 -1
  167. package/dist/v1/types/thread.js.map +1 -1
  168. package/dist/v1/types/tool-choice.d.ts +8 -0
  169. package/dist/v1/types/tool-choice.d.ts.map +1 -0
  170. package/dist/v1/types/tool-choice.js +3 -0
  171. package/dist/v1/types/tool-choice.js.map +1 -0
  172. package/dist/v1/utils/component-renderer.d.ts +11 -5
  173. package/dist/v1/utils/component-renderer.d.ts.map +1 -1
  174. package/dist/v1/utils/component-renderer.js +16 -7
  175. package/dist/v1/utils/component-renderer.js.map +1 -1
  176. package/dist/v1/utils/component-renderer.test.js +7 -7
  177. package/dist/v1/utils/component-renderer.test.js.map +1 -1
  178. package/dist/v1/utils/event-accumulator.d.ts +34 -8
  179. package/dist/v1/utils/event-accumulator.d.ts.map +1 -1
  180. package/dist/v1/utils/event-accumulator.js +90 -27
  181. package/dist/v1/utils/event-accumulator.js.map +1 -1
  182. package/dist/v1/utils/event-accumulator.test.js +149 -8
  183. package/dist/v1/utils/event-accumulator.test.js.map +1 -1
  184. package/dist/v1/utils/keyed-throttle.d.ts +42 -0
  185. package/dist/v1/utils/keyed-throttle.d.ts.map +1 -0
  186. package/dist/v1/utils/keyed-throttle.js +86 -0
  187. package/dist/v1/utils/keyed-throttle.js.map +1 -0
  188. package/dist/v1/utils/keyed-throttle.test.d.ts +2 -0
  189. package/dist/v1/utils/keyed-throttle.test.d.ts.map +1 -0
  190. package/dist/v1/utils/keyed-throttle.test.js +147 -0
  191. package/dist/v1/utils/keyed-throttle.test.js.map +1 -0
  192. package/dist/v1/utils/registry-conversion.d.ts +18 -18
  193. package/dist/v1/utils/registry-conversion.d.ts.map +1 -1
  194. package/dist/v1/utils/registry-conversion.js +25 -23
  195. package/dist/v1/utils/registry-conversion.js.map +1 -1
  196. package/dist/v1/utils/registry-conversion.test.js +23 -0
  197. package/dist/v1/utils/registry-conversion.test.js.map +1 -1
  198. package/dist/v1/utils/stream-handler.d.ts +1 -1
  199. package/dist/v1/utils/stream-handler.js +1 -1
  200. package/dist/v1/utils/stream-handler.js.map +1 -1
  201. package/dist/v1/utils/thread-utils.d.ts +2 -2
  202. package/dist/v1/utils/thread-utils.d.ts.map +1 -1
  203. package/dist/v1/utils/thread-utils.js.map +1 -1
  204. package/dist/v1/utils/tool-call-tracker.d.ts +11 -1
  205. package/dist/v1/utils/tool-call-tracker.d.ts.map +1 -1
  206. package/dist/v1/utils/tool-call-tracker.js +14 -1
  207. package/dist/v1/utils/tool-call-tracker.js.map +1 -1
  208. package/dist/v1/utils/tool-call-tracker.test.d.ts +2 -0
  209. package/dist/v1/utils/tool-call-tracker.test.d.ts.map +1 -0
  210. package/dist/v1/utils/tool-call-tracker.test.js +67 -0
  211. package/dist/v1/utils/tool-call-tracker.test.js.map +1 -0
  212. package/dist/v1/utils/tool-executor.d.ts +35 -1
  213. package/dist/v1/utils/tool-executor.d.ts.map +1 -1
  214. package/dist/v1/utils/tool-executor.js +57 -2
  215. package/dist/v1/utils/tool-executor.js.map +1 -1
  216. package/dist/v1/utils/tool-executor.test.js +211 -0
  217. package/dist/v1/utils/tool-executor.test.js.map +1 -1
  218. package/esm/hoc/with-tambo-interactable.d.ts +8 -0
  219. package/esm/hoc/with-tambo-interactable.d.ts.map +1 -1
  220. package/esm/hoc/with-tambo-interactable.js +15 -12
  221. package/esm/hoc/with-tambo-interactable.js.map +1 -1
  222. package/esm/hoc/with-tambo-interactable.test.js +13 -1
  223. package/esm/hoc/with-tambo-interactable.test.js.map +1 -1
  224. package/esm/hooks/use-tambo-voice.test.js +3 -0
  225. package/esm/hooks/use-tambo-voice.test.js.map +1 -1
  226. package/esm/index.d.ts +7 -25
  227. package/esm/index.d.ts.map +1 -1
  228. package/esm/index.js +7 -21
  229. package/esm/index.js.map +1 -1
  230. package/esm/mcp/mcp-hooks.js +1 -1
  231. package/esm/mcp/mcp-hooks.js.map +1 -1
  232. package/esm/mcp/mcp-hooks.test.js +69 -0
  233. package/esm/mcp/mcp-hooks.test.js.map +1 -1
  234. package/esm/mcp/tambo-mcp-provider.test.js +24 -0
  235. package/esm/mcp/tambo-mcp-provider.test.js.map +1 -1
  236. package/esm/mcp/use-mcp-servers.test.js +9 -0
  237. package/esm/mcp/use-mcp-servers.test.js.map +1 -1
  238. package/esm/model/component-metadata.d.ts +4 -4
  239. package/esm/model/component-metadata.js.map +1 -1
  240. package/esm/providers/tambo-client-provider.d.ts +12 -0
  241. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  242. package/esm/providers/tambo-client-provider.js +8 -3
  243. package/esm/providers/tambo-client-provider.js.map +1 -1
  244. package/esm/providers/tambo-interactable-provider.d.ts +1 -1
  245. package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
  246. package/esm/providers/tambo-interactable-provider.js +8 -0
  247. package/esm/providers/tambo-interactable-provider.js.map +1 -1
  248. package/esm/providers/tambo-interactable-provider.test.js +47 -0
  249. package/esm/providers/tambo-interactable-provider.test.js.map +1 -1
  250. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +2 -10
  251. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  252. package/esm/providers/tambo-interactables-additional-context.test.js +3 -19
  253. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
  254. package/esm/providers/tambo-mcp-token-provider.d.ts +8 -17
  255. package/esm/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  256. package/esm/providers/tambo-mcp-token-provider.js +20 -97
  257. package/esm/providers/tambo-mcp-token-provider.js.map +1 -1
  258. package/esm/testing/tools.d.ts +3 -3
  259. package/esm/testing/tools.d.ts.map +1 -1
  260. package/esm/testing/tools.js.map +1 -1
  261. package/esm/util/registry-validators.js +1 -1
  262. package/esm/util/registry-validators.js.map +1 -1
  263. package/esm/util/resource-content-resolver.test.js +1 -1
  264. package/esm/util/resource-content-resolver.test.js.map +1 -1
  265. package/esm/v1/__tests__/v1-interactables.test.js +1 -1
  266. package/esm/v1/__tests__/v1-interactables.test.js.map +1 -1
  267. package/esm/v1/components/v1-component-renderer.d.ts +9 -9
  268. package/esm/v1/components/v1-component-renderer.d.ts.map +1 -1
  269. package/esm/v1/components/v1-component-renderer.js +12 -12
  270. package/esm/v1/components/v1-component-renderer.js.map +1 -1
  271. package/esm/v1/components/v1-component-renderer.test.js +16 -16
  272. package/esm/v1/components/v1-component-renderer.test.js.map +1 -1
  273. package/{dist/hooks/use-current-message.d.ts → esm/v1/hooks/use-tambo-current-message.d.ts} +30 -9
  274. package/esm/v1/hooks/use-tambo-current-message.d.ts.map +1 -0
  275. package/esm/{hooks/use-current-message.js → v1/hooks/use-tambo-current-message.js} +13 -8
  276. package/esm/v1/hooks/use-tambo-current-message.js.map +1 -0
  277. package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts +11 -0
  278. package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -0
  279. package/esm/v1/hooks/use-tambo-v1-auth-state.js +45 -0
  280. package/esm/v1/hooks/use-tambo-v1-auth-state.js.map +1 -0
  281. package/esm/v1/hooks/use-tambo-v1-auth-state.test.d.ts +2 -0
  282. package/esm/v1/hooks/use-tambo-v1-auth-state.test.d.ts.map +1 -0
  283. package/esm/v1/hooks/use-tambo-v1-auth-state.test.js +100 -0
  284. package/esm/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -0
  285. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +7 -6
  286. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
  287. package/esm/v1/hooks/use-tambo-v1-component-state.js +101 -28
  288. package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
  289. package/esm/v1/hooks/use-tambo-v1-component-state.test.js +152 -27
  290. package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
  291. package/esm/v1/hooks/use-tambo-v1-messages.d.ts +9 -9
  292. package/esm/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -1
  293. package/esm/v1/hooks/use-tambo-v1-messages.js +3 -3
  294. package/esm/v1/hooks/use-tambo-v1-messages.js.map +1 -1
  295. package/esm/v1/hooks/use-tambo-v1-messages.test.js +16 -8
  296. package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
  297. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +21 -3
  298. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  299. package/esm/v1/hooks/use-tambo-v1-send-message.js +93 -18
  300. package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  301. package/esm/v1/hooks/use-tambo-v1-send-message.test.js +318 -45
  302. package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  303. package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts +7 -7
  304. package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
  305. package/esm/v1/hooks/use-tambo-v1-stream-status.js +14 -16
  306. package/esm/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
  307. package/esm/v1/hooks/use-tambo-v1-stream-status.test.js +32 -32
  308. package/esm/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
  309. package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts +7 -7
  310. package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -1
  311. package/esm/v1/hooks/use-tambo-v1-suggestions.js +11 -11
  312. package/esm/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
  313. package/esm/v1/hooks/use-tambo-v1-suggestions.test.js +48 -48
  314. package/esm/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -1
  315. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +3 -3
  316. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -1
  317. package/esm/v1/hooks/use-tambo-v1-thread-input.js +3 -3
  318. package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -1
  319. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +43 -30
  320. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
  321. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts +4 -4
  322. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
  323. package/esm/v1/hooks/use-tambo-v1-thread-list.js +8 -4
  324. package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
  325. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +20 -18
  326. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
  327. package/esm/v1/hooks/use-tambo-v1-thread.d.ts +3 -3
  328. package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
  329. package/esm/v1/hooks/use-tambo-v1-thread.js +6 -2
  330. package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -1
  331. package/esm/v1/hooks/use-tambo-v1-thread.test.js +11 -5
  332. package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
  333. package/esm/v1/hooks/use-tambo-v1.d.ts +16 -5
  334. package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -1
  335. package/esm/v1/hooks/use-tambo-v1.js +14 -6
  336. package/esm/v1/hooks/use-tambo-v1.js.map +1 -1
  337. package/esm/v1/hooks/use-tambo-v1.test.js +67 -45
  338. package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
  339. package/esm/v1/index.d.ts +34 -27
  340. package/esm/v1/index.d.ts.map +1 -1
  341. package/esm/v1/index.js +40 -33
  342. package/esm/v1/index.js.map +1 -1
  343. package/esm/v1/providers/tambo-v1-provider.d.ts +35 -20
  344. package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  345. package/esm/v1/providers/tambo-v1-provider.js +63 -26
  346. package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
  347. package/esm/v1/providers/tambo-v1-provider.test.js +41 -24
  348. package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -1
  349. package/esm/v1/providers/tambo-v1-stream-context.d.ts +21 -15
  350. package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  351. package/esm/v1/providers/tambo-v1-stream-context.js +66 -27
  352. package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
  353. package/esm/v1/providers/tambo-v1-stream-context.test.js +15 -6
  354. package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  355. package/esm/v1/providers/tambo-v1-stub-provider.d.ts +9 -9
  356. package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
  357. package/esm/v1/providers/tambo-v1-stub-provider.js +13 -9
  358. package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
  359. package/esm/v1/providers/tambo-v1-stub-provider.test.js +28 -28
  360. package/esm/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
  361. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +20 -9
  362. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
  363. package/esm/v1/providers/tambo-v1-thread-input-provider.js +23 -14
  364. package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
  365. package/esm/v1/types/auth.d.ts +24 -0
  366. package/esm/v1/types/auth.d.ts.map +1 -0
  367. package/esm/v1/types/auth.js +2 -0
  368. package/esm/v1/types/auth.js.map +1 -0
  369. package/esm/v1/types/component.d.ts +3 -3
  370. package/esm/v1/types/component.d.ts.map +1 -1
  371. package/esm/v1/types/component.js +2 -2
  372. package/esm/v1/types/component.js.map +1 -1
  373. package/esm/v1/types/event.d.ts +1 -1
  374. package/esm/v1/types/event.js +1 -1
  375. package/esm/v1/types/event.js.map +1 -1
  376. package/esm/v1/types/message.d.ts +19 -12
  377. package/esm/v1/types/message.d.ts.map +1 -1
  378. package/esm/v1/types/message.js +1 -1
  379. package/esm/v1/types/message.js.map +1 -1
  380. package/esm/v1/types/thread.d.ts +8 -6
  381. package/esm/v1/types/thread.d.ts.map +1 -1
  382. package/esm/v1/types/thread.js +1 -1
  383. package/esm/v1/types/thread.js.map +1 -1
  384. package/esm/v1/types/tool-choice.d.ts +8 -0
  385. package/esm/v1/types/tool-choice.d.ts.map +1 -0
  386. package/esm/v1/types/tool-choice.js +2 -0
  387. package/esm/v1/types/tool-choice.js.map +1 -0
  388. package/esm/v1/utils/component-renderer.d.ts +11 -5
  389. package/esm/v1/utils/component-renderer.d.ts.map +1 -1
  390. package/esm/v1/utils/component-renderer.js +13 -5
  391. package/esm/v1/utils/component-renderer.js.map +1 -1
  392. package/esm/v1/utils/component-renderer.test.js +8 -8
  393. package/esm/v1/utils/component-renderer.test.js.map +1 -1
  394. package/esm/v1/utils/event-accumulator.d.ts +34 -8
  395. package/esm/v1/utils/event-accumulator.d.ts.map +1 -1
  396. package/esm/v1/utils/event-accumulator.js +89 -27
  397. package/esm/v1/utils/event-accumulator.js.map +1 -1
  398. package/esm/v1/utils/event-accumulator.test.js +149 -8
  399. package/esm/v1/utils/event-accumulator.test.js.map +1 -1
  400. package/esm/v1/utils/keyed-throttle.d.ts +42 -0
  401. package/esm/v1/utils/keyed-throttle.d.ts.map +1 -0
  402. package/esm/v1/utils/keyed-throttle.js +83 -0
  403. package/esm/v1/utils/keyed-throttle.js.map +1 -0
  404. package/esm/v1/utils/keyed-throttle.test.d.ts +2 -0
  405. package/esm/v1/utils/keyed-throttle.test.d.ts.map +1 -0
  406. package/esm/v1/utils/keyed-throttle.test.js +145 -0
  407. package/esm/v1/utils/keyed-throttle.test.js.map +1 -0
  408. package/esm/v1/utils/registry-conversion.d.ts +18 -18
  409. package/esm/v1/utils/registry-conversion.d.ts.map +1 -1
  410. package/esm/v1/utils/registry-conversion.js +25 -23
  411. package/esm/v1/utils/registry-conversion.js.map +1 -1
  412. package/esm/v1/utils/registry-conversion.test.js +23 -0
  413. package/esm/v1/utils/registry-conversion.test.js.map +1 -1
  414. package/esm/v1/utils/stream-handler.d.ts +1 -1
  415. package/esm/v1/utils/stream-handler.js +1 -1
  416. package/esm/v1/utils/stream-handler.js.map +1 -1
  417. package/esm/v1/utils/thread-utils.d.ts +2 -2
  418. package/esm/v1/utils/thread-utils.d.ts.map +1 -1
  419. package/esm/v1/utils/thread-utils.js.map +1 -1
  420. package/esm/v1/utils/tool-call-tracker.d.ts +11 -1
  421. package/esm/v1/utils/tool-call-tracker.d.ts.map +1 -1
  422. package/esm/v1/utils/tool-call-tracker.js +14 -1
  423. package/esm/v1/utils/tool-call-tracker.js.map +1 -1
  424. package/esm/v1/utils/tool-call-tracker.test.d.ts +2 -0
  425. package/esm/v1/utils/tool-call-tracker.test.d.ts.map +1 -0
  426. package/esm/v1/utils/tool-call-tracker.test.js +65 -0
  427. package/esm/v1/utils/tool-call-tracker.test.js.map +1 -0
  428. package/esm/v1/utils/tool-executor.d.ts +35 -1
  429. package/esm/v1/utils/tool-executor.d.ts.map +1 -1
  430. package/esm/v1/utils/tool-executor.js +55 -2
  431. package/esm/v1/utils/tool-executor.js.map +1 -1
  432. package/esm/v1/utils/tool-executor.test.js +212 -1
  433. package/esm/v1/utils/tool-executor.test.js.map +1 -1
  434. package/package.json +5 -10
  435. package/dist/hooks/index.d.ts +0 -9
  436. package/dist/hooks/index.d.ts.map +0 -1
  437. package/dist/hooks/index.js +0 -34
  438. package/dist/hooks/index.js.map +0 -1
  439. package/dist/hooks/use-component-state.d.ts +0 -30
  440. package/dist/hooks/use-component-state.d.ts.map +0 -1
  441. package/dist/hooks/use-component-state.js +0 -139
  442. package/dist/hooks/use-component-state.js.map +0 -1
  443. package/dist/hooks/use-component-state.test.d.ts +0 -2
  444. package/dist/hooks/use-component-state.test.d.ts.map +0 -1
  445. package/dist/hooks/use-component-state.test.js +0 -406
  446. package/dist/hooks/use-component-state.test.js.map +0 -1
  447. package/dist/hooks/use-current-message.d.ts.map +0 -1
  448. package/dist/hooks/use-current-message.js.map +0 -1
  449. package/dist/hooks/use-current-message.test.d.ts +0 -2
  450. package/dist/hooks/use-current-message.test.d.ts.map +0 -1
  451. package/dist/hooks/use-current-message.test.js +0 -269
  452. package/dist/hooks/use-current-message.test.js.map +0 -1
  453. package/dist/hooks/use-streaming-props.d.ts +0 -11
  454. package/dist/hooks/use-streaming-props.d.ts.map +0 -1
  455. package/dist/hooks/use-streaming-props.js +0 -37
  456. package/dist/hooks/use-streaming-props.js.map +0 -1
  457. package/dist/hooks/use-suggestions.d.ts +0 -46
  458. package/dist/hooks/use-suggestions.d.ts.map +0 -1
  459. package/dist/hooks/use-suggestions.js +0 -118
  460. package/dist/hooks/use-suggestions.js.map +0 -1
  461. package/dist/hooks/use-suggestions.test.d.ts +0 -2
  462. package/dist/hooks/use-suggestions.test.d.ts.map +0 -1
  463. package/dist/hooks/use-suggestions.test.js +0 -247
  464. package/dist/hooks/use-suggestions.test.js.map +0 -1
  465. package/dist/hooks/use-tambo-stream-status.d.ts +0 -90
  466. package/dist/hooks/use-tambo-stream-status.d.ts.map +0 -1
  467. package/dist/hooks/use-tambo-stream-status.js +0 -213
  468. package/dist/hooks/use-tambo-stream-status.js.map +0 -1
  469. package/dist/hooks/use-tambo-stream-status.test.d.ts +0 -2
  470. package/dist/hooks/use-tambo-stream-status.test.d.ts.map +0 -1
  471. package/dist/hooks/use-tambo-stream-status.test.js +0 -378
  472. package/dist/hooks/use-tambo-stream-status.test.js.map +0 -1
  473. package/dist/hooks/use-tambo-threads.d.ts +0 -158
  474. package/dist/hooks/use-tambo-threads.d.ts.map +0 -1
  475. package/dist/hooks/use-tambo-threads.js +0 -45
  476. package/dist/hooks/use-tambo-threads.js.map +0 -1
  477. package/dist/hooks/use-tambo-threads.test.d.ts +0 -2
  478. package/dist/hooks/use-tambo-threads.test.d.ts.map +0 -1
  479. package/dist/hooks/use-tambo-threads.test.js +0 -214
  480. package/dist/hooks/use-tambo-threads.test.js.map +0 -1
  481. package/dist/model/generate-component-response.d.ts +0 -37
  482. package/dist/model/generate-component-response.d.ts.map +0 -1
  483. package/dist/model/generate-component-response.js +0 -29
  484. package/dist/model/generate-component-response.js.map +0 -1
  485. package/dist/model/tambo-thread.d.ts +0 -15
  486. package/dist/model/tambo-thread.d.ts.map +0 -1
  487. package/dist/model/tambo-thread.js.map +0 -1
  488. package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts +0 -2
  489. package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +0 -1
  490. package/dist/providers/__tests__/thread-input-resource-resolution.test.js +0 -592
  491. package/dist/providers/__tests__/thread-input-resource-resolution.test.js.map +0 -1
  492. package/dist/providers/index.d.ts +0 -13
  493. package/dist/providers/index.d.ts.map +0 -1
  494. package/dist/providers/index.js +0 -41
  495. package/dist/providers/index.js.map +0 -1
  496. package/dist/providers/tambo-component-provider.d.ts +0 -23
  497. package/dist/providers/tambo-component-provider.d.ts.map +0 -1
  498. package/dist/providers/tambo-component-provider.js +0 -88
  499. package/dist/providers/tambo-component-provider.js.map +0 -1
  500. package/dist/providers/tambo-prop-stream-provider/index.d.ts +0 -19
  501. package/dist/providers/tambo-prop-stream-provider/index.d.ts.map +0 -1
  502. package/dist/providers/tambo-prop-stream-provider/index.js +0 -43
  503. package/dist/providers/tambo-prop-stream-provider/index.js.map +0 -1
  504. package/dist/providers/tambo-prop-stream-provider/pending.d.ts +0 -12
  505. package/dist/providers/tambo-prop-stream-provider/pending.d.ts.map +0 -1
  506. package/dist/providers/tambo-prop-stream-provider/pending.js +0 -31
  507. package/dist/providers/tambo-prop-stream-provider/pending.js.map +0 -1
  508. package/dist/providers/tambo-prop-stream-provider/provider.d.ts +0 -17
  509. package/dist/providers/tambo-prop-stream-provider/provider.d.ts.map +0 -1
  510. package/dist/providers/tambo-prop-stream-provider/provider.js +0 -107
  511. package/dist/providers/tambo-prop-stream-provider/provider.js.map +0 -1
  512. package/dist/providers/tambo-prop-stream-provider/streaming.d.ts +0 -12
  513. package/dist/providers/tambo-prop-stream-provider/streaming.d.ts.map +0 -1
  514. package/dist/providers/tambo-prop-stream-provider/streaming.js +0 -28
  515. package/dist/providers/tambo-prop-stream-provider/streaming.js.map +0 -1
  516. package/dist/providers/tambo-prop-stream-provider/success.d.ts +0 -12
  517. package/dist/providers/tambo-prop-stream-provider/success.d.ts.map +0 -1
  518. package/dist/providers/tambo-prop-stream-provider/success.js +0 -28
  519. package/dist/providers/tambo-prop-stream-provider/success.js.map +0 -1
  520. package/dist/providers/tambo-prop-stream-provider/types.d.ts +0 -25
  521. package/dist/providers/tambo-prop-stream-provider/types.d.ts.map +0 -1
  522. package/dist/providers/tambo-prop-stream-provider/types.js +0 -6
  523. package/dist/providers/tambo-prop-stream-provider/types.js.map +0 -1
  524. package/dist/providers/tambo-prop-stream-provider.test.d.ts +0 -2
  525. package/dist/providers/tambo-prop-stream-provider.test.d.ts.map +0 -1
  526. package/dist/providers/tambo-prop-stream-provider.test.js +0 -275
  527. package/dist/providers/tambo-prop-stream-provider.test.js.map +0 -1
  528. package/dist/providers/tambo-provider.d.ts +0 -53
  529. package/dist/providers/tambo-provider.d.ts.map +0 -1
  530. package/dist/providers/tambo-provider.js +0 -130
  531. package/dist/providers/tambo-provider.js.map +0 -1
  532. package/dist/providers/tambo-stubs.d.ts +0 -89
  533. package/dist/providers/tambo-stubs.d.ts.map +0 -1
  534. package/dist/providers/tambo-stubs.js +0 -276
  535. package/dist/providers/tambo-stubs.js.map +0 -1
  536. package/dist/providers/tambo-stubs.test.d.ts +0 -2
  537. package/dist/providers/tambo-stubs.test.d.ts.map +0 -1
  538. package/dist/providers/tambo-stubs.test.js +0 -97
  539. package/dist/providers/tambo-stubs.test.js.map +0 -1
  540. package/dist/providers/tambo-thread-input-provider.d.ts +0 -65
  541. package/dist/providers/tambo-thread-input-provider.d.ts.map +0 -1
  542. package/dist/providers/tambo-thread-input-provider.js +0 -179
  543. package/dist/providers/tambo-thread-input-provider.js.map +0 -1
  544. package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts +0 -2
  545. package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  546. package/dist/providers/tambo-thread-provider-initial-messages.test.js +0 -275
  547. package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +0 -1
  548. package/dist/providers/tambo-thread-provider.d.ts +0 -126
  549. package/dist/providers/tambo-thread-provider.d.ts.map +0 -1
  550. package/dist/providers/tambo-thread-provider.js +0 -931
  551. package/dist/providers/tambo-thread-provider.js.map +0 -1
  552. package/dist/providers/tambo-thread-provider.test.d.ts +0 -2
  553. package/dist/providers/tambo-thread-provider.test.d.ts.map +0 -1
  554. package/dist/providers/tambo-thread-provider.test.js +0 -1588
  555. package/dist/providers/tambo-thread-provider.test.js.map +0 -1
  556. package/dist/util/generate-component.d.ts +0 -12
  557. package/dist/util/generate-component.d.ts.map +0 -1
  558. package/dist/util/generate-component.js +0 -58
  559. package/dist/util/generate-component.js.map +0 -1
  560. package/dist/util/generate-component.test.d.ts +0 -2
  561. package/dist/util/generate-component.test.d.ts.map +0 -1
  562. package/dist/util/generate-component.test.js +0 -340
  563. package/dist/util/generate-component.test.js.map +0 -1
  564. package/esm/hooks/index.d.ts +0 -9
  565. package/esm/hooks/index.d.ts.map +0 -1
  566. package/esm/hooks/index.js +0 -10
  567. package/esm/hooks/index.js.map +0 -1
  568. package/esm/hooks/use-component-state.d.ts +0 -30
  569. package/esm/hooks/use-component-state.d.ts.map +0 -1
  570. package/esm/hooks/use-component-state.js +0 -136
  571. package/esm/hooks/use-component-state.js.map +0 -1
  572. package/esm/hooks/use-component-state.test.d.ts +0 -2
  573. package/esm/hooks/use-component-state.test.d.ts.map +0 -1
  574. package/esm/hooks/use-component-state.test.js +0 -401
  575. package/esm/hooks/use-component-state.test.js.map +0 -1
  576. package/esm/hooks/use-current-message.d.ts.map +0 -1
  577. package/esm/hooks/use-current-message.js.map +0 -1
  578. package/esm/hooks/use-current-message.test.d.ts +0 -2
  579. package/esm/hooks/use-current-message.test.d.ts.map +0 -1
  580. package/esm/hooks/use-current-message.test.js +0 -264
  581. package/esm/hooks/use-current-message.test.js.map +0 -1
  582. package/esm/hooks/use-streaming-props.d.ts +0 -11
  583. package/esm/hooks/use-streaming-props.d.ts.map +0 -1
  584. package/esm/hooks/use-streaming-props.js +0 -34
  585. package/esm/hooks/use-streaming-props.js.map +0 -1
  586. package/esm/hooks/use-suggestions.d.ts +0 -46
  587. package/esm/hooks/use-suggestions.d.ts.map +0 -1
  588. package/esm/hooks/use-suggestions.js +0 -115
  589. package/esm/hooks/use-suggestions.js.map +0 -1
  590. package/esm/hooks/use-suggestions.test.d.ts +0 -2
  591. package/esm/hooks/use-suggestions.test.d.ts.map +0 -1
  592. package/esm/hooks/use-suggestions.test.js +0 -245
  593. package/esm/hooks/use-suggestions.test.js.map +0 -1
  594. package/esm/hooks/use-tambo-stream-status.d.ts +0 -90
  595. package/esm/hooks/use-tambo-stream-status.d.ts.map +0 -1
  596. package/esm/hooks/use-tambo-stream-status.js +0 -210
  597. package/esm/hooks/use-tambo-stream-status.js.map +0 -1
  598. package/esm/hooks/use-tambo-stream-status.test.d.ts +0 -2
  599. package/esm/hooks/use-tambo-stream-status.test.d.ts.map +0 -1
  600. package/esm/hooks/use-tambo-stream-status.test.js +0 -376
  601. package/esm/hooks/use-tambo-stream-status.test.js.map +0 -1
  602. package/esm/hooks/use-tambo-threads.d.ts +0 -158
  603. package/esm/hooks/use-tambo-threads.d.ts.map +0 -1
  604. package/esm/hooks/use-tambo-threads.js +0 -42
  605. package/esm/hooks/use-tambo-threads.js.map +0 -1
  606. package/esm/hooks/use-tambo-threads.test.d.ts +0 -2
  607. package/esm/hooks/use-tambo-threads.test.d.ts.map +0 -1
  608. package/esm/hooks/use-tambo-threads.test.js +0 -212
  609. package/esm/hooks/use-tambo-threads.test.js.map +0 -1
  610. package/esm/model/generate-component-response.d.ts +0 -37
  611. package/esm/model/generate-component-response.d.ts.map +0 -1
  612. package/esm/model/generate-component-response.js +0 -25
  613. package/esm/model/generate-component-response.js.map +0 -1
  614. package/esm/model/tambo-thread.d.ts +0 -15
  615. package/esm/model/tambo-thread.d.ts.map +0 -1
  616. package/esm/model/tambo-thread.js +0 -2
  617. package/esm/model/tambo-thread.js.map +0 -1
  618. package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts +0 -2
  619. package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +0 -1
  620. package/esm/providers/__tests__/thread-input-resource-resolution.test.js +0 -587
  621. package/esm/providers/__tests__/thread-input-resource-resolution.test.js.map +0 -1
  622. package/esm/providers/index.d.ts +0 -13
  623. package/esm/providers/index.d.ts.map +0 -1
  624. package/esm/providers/index.js +0 -11
  625. package/esm/providers/index.js.map +0 -1
  626. package/esm/providers/tambo-component-provider.d.ts +0 -23
  627. package/esm/providers/tambo-component-provider.d.ts.map +0 -1
  628. package/esm/providers/tambo-component-provider.js +0 -50
  629. package/esm/providers/tambo-component-provider.js.map +0 -1
  630. package/esm/providers/tambo-prop-stream-provider/index.d.ts +0 -19
  631. package/esm/providers/tambo-prop-stream-provider/index.d.ts.map +0 -1
  632. package/esm/providers/tambo-prop-stream-provider/index.js +0 -22
  633. package/esm/providers/tambo-prop-stream-provider/index.js.map +0 -1
  634. package/esm/providers/tambo-prop-stream-provider/pending.d.ts +0 -12
  635. package/esm/providers/tambo-prop-stream-provider/pending.d.ts.map +0 -1
  636. package/esm/providers/tambo-prop-stream-provider/pending.js +0 -24
  637. package/esm/providers/tambo-prop-stream-provider/pending.js.map +0 -1
  638. package/esm/providers/tambo-prop-stream-provider/provider.d.ts +0 -17
  639. package/esm/providers/tambo-prop-stream-provider/provider.d.ts.map +0 -1
  640. package/esm/providers/tambo-prop-stream-provider/provider.js +0 -70
  641. package/esm/providers/tambo-prop-stream-provider/provider.js.map +0 -1
  642. package/esm/providers/tambo-prop-stream-provider/streaming.d.ts +0 -12
  643. package/esm/providers/tambo-prop-stream-provider/streaming.d.ts.map +0 -1
  644. package/esm/providers/tambo-prop-stream-provider/streaming.js +0 -21
  645. package/esm/providers/tambo-prop-stream-provider/streaming.js.map +0 -1
  646. package/esm/providers/tambo-prop-stream-provider/success.d.ts +0 -12
  647. package/esm/providers/tambo-prop-stream-provider/success.d.ts.map +0 -1
  648. package/esm/providers/tambo-prop-stream-provider/success.js +0 -21
  649. package/esm/providers/tambo-prop-stream-provider/success.js.map +0 -1
  650. package/esm/providers/tambo-prop-stream-provider/types.d.ts +0 -25
  651. package/esm/providers/tambo-prop-stream-provider/types.d.ts.map +0 -1
  652. package/esm/providers/tambo-prop-stream-provider/types.js +0 -3
  653. package/esm/providers/tambo-prop-stream-provider/types.js.map +0 -1
  654. package/esm/providers/tambo-prop-stream-provider.test.d.ts +0 -2
  655. package/esm/providers/tambo-prop-stream-provider.test.d.ts.map +0 -1
  656. package/esm/providers/tambo-prop-stream-provider.test.js +0 -270
  657. package/esm/providers/tambo-prop-stream-provider.test.js.map +0 -1
  658. package/esm/providers/tambo-provider.d.ts +0 -53
  659. package/esm/providers/tambo-provider.d.ts.map +0 -1
  660. package/esm/providers/tambo-provider.js +0 -91
  661. package/esm/providers/tambo-provider.js.map +0 -1
  662. package/esm/providers/tambo-stubs.d.ts +0 -89
  663. package/esm/providers/tambo-stubs.d.ts.map +0 -1
  664. package/esm/providers/tambo-stubs.js +0 -239
  665. package/esm/providers/tambo-stubs.js.map +0 -1
  666. package/esm/providers/tambo-stubs.test.d.ts +0 -2
  667. package/esm/providers/tambo-stubs.test.d.ts.map +0 -1
  668. package/esm/providers/tambo-stubs.test.js +0 -62
  669. package/esm/providers/tambo-stubs.test.js.map +0 -1
  670. package/esm/providers/tambo-thread-input-provider.d.ts +0 -65
  671. package/esm/providers/tambo-thread-input-provider.d.ts.map +0 -1
  672. package/esm/providers/tambo-thread-input-provider.js +0 -141
  673. package/esm/providers/tambo-thread-input-provider.js.map +0 -1
  674. package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts +0 -2
  675. package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  676. package/esm/providers/tambo-thread-provider-initial-messages.test.js +0 -270
  677. package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +0 -1
  678. package/esm/providers/tambo-thread-provider.d.ts +0 -126
  679. package/esm/providers/tambo-thread-provider.d.ts.map +0 -1
  680. package/esm/providers/tambo-thread-provider.js +0 -891
  681. package/esm/providers/tambo-thread-provider.js.map +0 -1
  682. package/esm/providers/tambo-thread-provider.test.d.ts +0 -2
  683. package/esm/providers/tambo-thread-provider.test.d.ts.map +0 -1
  684. package/esm/providers/tambo-thread-provider.test.js +0 -1550
  685. package/esm/providers/tambo-thread-provider.test.js.map +0 -1
  686. package/esm/util/generate-component.d.ts +0 -12
  687. package/esm/util/generate-component.d.ts.map +0 -1
  688. package/esm/util/generate-component.js +0 -52
  689. package/esm/util/generate-component.js.map +0 -1
  690. package/esm/util/generate-component.test.d.ts +0 -2
  691. package/esm/util/generate-component.test.d.ts.map +0 -1
  692. package/esm/util/generate-component.test.js +0 -302
  693. package/esm/util/generate-component.test.js.map +0 -1
@@ -7,7 +7,7 @@ import { useTamboClient, useTamboQueryClient, } from "../../providers/tambo-clie
7
7
  import { useTamboRegistry } from "../../providers/tambo-registry-provider.js";
8
8
  import { useTamboContextHelpers } from "../../providers/tambo-context-helpers-provider.js";
9
9
  import { useStreamState, useThreadManagement } from "./tambo-v1-stream-context.js";
10
- import { TamboV1Provider, useTamboV1Config } from "./tambo-v1-provider.js";
10
+ import { TamboProvider, useTamboConfig } from "./tambo-v1-provider.js";
11
11
  // Module-level QueryClient for tests - created lazily
12
12
  let testQueryClient = null;
13
13
  // Mock the client provider to capture the apiKey
@@ -18,9 +18,23 @@ jest.mock("../../providers/tambo-client-provider", () => {
18
18
  TamboClientProvider: jest.fn(({ children }) => children),
19
19
  };
20
20
  });
21
- // Mock useTamboV1SendMessage to avoid complex dependencies
21
+ // Mock MCP providers to avoid TamboClientContext dependency
22
+ jest.mock("../../providers/tambo-mcp-token-provider", () => ({
23
+ TamboMcpTokenProvider: ({ children }) => children,
24
+ }));
25
+ jest.mock("../../mcp/tambo-mcp-provider", () => ({
26
+ TamboMcpProvider: ({ children }) => children,
27
+ }));
28
+ // Mock auth state to avoid TamboClientContext dependency
29
+ jest.mock("../hooks/use-tambo-v1-auth-state", () => ({
30
+ useTamboAuthState: () => ({
31
+ status: "identified",
32
+ source: "userKey",
33
+ }),
34
+ }));
35
+ // Mock useTamboSendMessage to avoid complex dependencies
22
36
  jest.mock("../hooks/use-tambo-v1-send-message", () => ({
23
- useTamboV1SendMessage: jest.fn(() => ({
37
+ useTamboSendMessage: jest.fn(() => ({
24
38
  mutateAsync: jest.fn(),
25
39
  mutate: jest.fn(),
26
40
  isPending: false,
@@ -30,7 +44,7 @@ jest.mock("../hooks/use-tambo-v1-send-message", () => ({
30
44
  reset: jest.fn(),
31
45
  })),
32
46
  }));
33
- describe("TamboV1Provider", () => {
47
+ describe("TamboProvider", () => {
34
48
  const mockFetch = async (..._args) => {
35
49
  throw new Error("fetch not implemented");
36
50
  };
@@ -55,7 +69,7 @@ describe("TamboV1Provider", () => {
55
69
  .mockImplementation(({ children }) => (React.createElement(QueryClientProvider, { client: testQueryClient }, children)));
56
70
  });
57
71
  it("provides access to registry context", () => {
58
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key" }, children));
72
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key" }, children));
59
73
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
60
74
  expect(result.current.componentList).toBeDefined();
61
75
  expect(result.current.toolRegistry).toBeDefined();
@@ -63,7 +77,7 @@ describe("TamboV1Provider", () => {
63
77
  expect(typeof result.current.registerTool).toBe("function");
64
78
  });
65
79
  it("provides access to stream context with placeholder thread ready", () => {
66
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key" }, children));
80
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key" }, children));
67
81
  const { result } = renderHook(() => useStreamState(), { wrapper });
68
82
  expect(result.current.threadMap).toBeDefined();
69
83
  // Initial state has placeholder thread for optimistic UI
@@ -71,7 +85,7 @@ describe("TamboV1Provider", () => {
71
85
  expect(result.current.threadMap.placeholder).toBeDefined();
72
86
  });
73
87
  it("manages threads via useThreadManagement", () => {
74
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key" }, children));
88
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key" }, children));
75
89
  const { result } = renderHook(() => ({
76
90
  state: useStreamState(),
77
91
  management: useThreadManagement(),
@@ -87,7 +101,7 @@ describe("TamboV1Provider", () => {
87
101
  expect(result.current.state.threadMap.thread_123).toBeDefined();
88
102
  });
89
103
  it("provides access to query client via useTamboQueryClient", () => {
90
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key" }, children));
104
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key" }, children));
91
105
  const { result } = renderHook(() => useTamboQueryClient(), { wrapper });
92
106
  expect(result.current).toBeInstanceOf(QueryClient);
93
107
  });
@@ -104,7 +118,7 @@ describe("TamboV1Provider", () => {
104
118
  propsSchema,
105
119
  },
106
120
  ];
107
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", components: components }, children));
121
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", components: components }, children));
108
122
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
109
123
  expect(result.current.componentList.TestComponent).toBeDefined();
110
124
  expect(result.current.componentList.TestComponent.name).toBe("TestComponent");
@@ -123,7 +137,7 @@ describe("TamboV1Provider", () => {
123
137
  outputSchema,
124
138
  },
125
139
  ];
126
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", tools: tools }, children));
140
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", tools: tools }, children));
127
141
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
128
142
  expect(result.current.toolRegistry.testTool).toBeDefined();
129
143
  expect(result.current.toolRegistry.testTool.name).toBe("testTool");
@@ -132,7 +146,7 @@ describe("TamboV1Provider", () => {
132
146
  const mcpServers = [
133
147
  { url: "https://mcp.example.com", name: "Example MCP" },
134
148
  ];
135
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", mcpServers: mcpServers }, children));
149
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", mcpServers: mcpServers }, children));
136
150
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
137
151
  expect(result.current.mcpServerInfos).toHaveLength(1);
138
152
  expect(result.current.mcpServerInfos[0].url).toBe("https://mcp.example.com");
@@ -141,7 +155,7 @@ describe("TamboV1Provider", () => {
141
155
  const onCallUnregisteredTool = jest
142
156
  .fn()
143
157
  .mockResolvedValue("fallback result");
144
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", onCallUnregisteredTool: onCallUnregisteredTool }, children));
158
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", onCallUnregisteredTool: onCallUnregisteredTool }, children));
145
159
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
146
160
  expect(result.current.onCallUnregisteredTool).toBe(onCallUnregisteredTool);
147
161
  });
@@ -154,7 +168,7 @@ describe("TamboV1Provider", () => {
154
168
  mimeType: "text/plain",
155
169
  },
156
170
  ];
157
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", resources: resources }, children));
171
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", resources: resources }, children));
158
172
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
159
173
  expect(result.current.resources).toHaveLength(1);
160
174
  expect(result.current.resources[0].uri).toBe("resource://test/example");
@@ -163,20 +177,20 @@ describe("TamboV1Provider", () => {
163
177
  it("registers resource source when listResources and getResource provided", () => {
164
178
  const listResources = jest.fn().mockResolvedValue({ resources: [] });
165
179
  const getResource = jest.fn().mockResolvedValue({ contents: [] });
166
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", listResources: listResources, getResource: getResource }, children));
180
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", listResources: listResources, getResource: getResource }, children));
167
181
  const { result } = renderHook(() => useTamboRegistry(), { wrapper });
168
182
  expect(result.current.resourceSource).toBeDefined();
169
183
  expect(result.current.resourceSource?.listResources).toBe(listResources);
170
184
  expect(result.current.resourceSource?.getResource).toBe(getResource);
171
185
  });
172
- it("provides userKey via useTamboV1Config", () => {
173
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", userKey: "my-user-key" }, children));
174
- const { result } = renderHook(() => useTamboV1Config(), { wrapper });
186
+ it("provides userKey via useTamboConfig", () => {
187
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", userKey: "my-user-key" }, children));
188
+ const { result } = renderHook(() => useTamboConfig(), { wrapper });
175
189
  expect(result.current.userKey).toBe("my-user-key");
176
190
  });
177
- it("returns undefined userKey from useTamboV1Config when no userKey provided", () => {
178
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key" }, children));
179
- const { result } = renderHook(() => useTamboV1Config(), { wrapper });
191
+ it("returns undefined userKey from useTamboConfig when no userKey provided", () => {
192
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key" }, children));
193
+ const { result } = renderHook(() => useTamboConfig(), { wrapper });
180
194
  expect(result.current.userKey).toBeUndefined();
181
195
  });
182
196
  it("provides context helpers via useTamboContextHelpers hook", async () => {
@@ -184,7 +198,7 @@ describe("TamboV1Provider", () => {
184
198
  getUserName: () => "Test User",
185
199
  getCurrentTime: () => new Date().toISOString(),
186
200
  };
187
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key", contextHelpers: contextHelpers }, children));
201
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key", contextHelpers: contextHelpers }, children));
188
202
  const { result, rerender } = renderHook(() => useTamboContextHelpers(), {
189
203
  wrapper,
190
204
  });
@@ -197,11 +211,14 @@ describe("TamboV1Provider", () => {
197
211
  expect(helpers.getCurrentTime).toBe(contextHelpers.getCurrentTime);
198
212
  });
199
213
  it("returns only interactables contextHelper when none explicitly provided", async () => {
200
- const wrapper = ({ children }) => (React.createElement(TamboV1Provider, { apiKey: "test-api-key" }, children));
214
+ const wrapper = ({ children }) => (React.createElement(TamboProvider, { apiKey: "test-api-key" }, children));
201
215
  const { result } = renderHook(() => useTamboContextHelpers(), { wrapper });
202
216
  const helpers = result.current.getContextHelpers();
203
- // TamboInteractableProvider registers an "interactables" context helper
204
- expect(Object.keys(helpers)).toEqual(["interactables"]);
217
+ // TamboInteractableProvider registers "interactables" and TamboContextAttachmentProvider registers "contextAttachments"
218
+ expect(Object.keys(helpers)).toEqual([
219
+ "interactables",
220
+ "contextAttachments",
221
+ ]);
205
222
  });
206
223
  });
207
224
  //# sourceMappingURL=tambo-v1-provider.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-v1-provider.test.js","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod\";\nimport {\n useTamboClient,\n useTamboQueryClient,\n} from \"../../providers/tambo-client-provider\";\nimport { useTamboRegistry } from \"../../providers/tambo-registry-provider\";\nimport { useTamboContextHelpers } from \"../../providers/tambo-context-helpers-provider\";\nimport { useStreamState, useThreadManagement } from \"./tambo-v1-stream-context\";\nimport { TamboV1Provider, useTamboV1Config } from \"./tambo-v1-provider\";\n\n// Module-level QueryClient for tests - created lazily\nlet testQueryClient: QueryClient | null = null;\n\n// Mock the client provider to capture the apiKey\njest.mock(\"../../providers/tambo-client-provider\", () => {\n return {\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n TamboClientProvider: jest.fn(\n ({ children }: { children: React.ReactNode }) => children,\n ),\n };\n});\n\n// Mock useTamboV1SendMessage to avoid complex dependencies\njest.mock(\"../hooks/use-tambo-v1-send-message\", () => ({\n useTamboV1SendMessage: jest.fn(() => ({\n mutateAsync: jest.fn(),\n mutate: jest.fn(),\n isPending: false,\n isError: false,\n error: null,\n isSuccess: false,\n reset: jest.fn(),\n })),\n}));\n\ndescribe(\"TamboV1Provider\", () => {\n const mockFetch: typeof fetch = async (..._args) => {\n throw new Error(\"fetch not implemented\");\n };\n\n const mockClient = new TamboAI({\n apiKey: \"test-api-key\",\n fetch: mockFetch,\n });\n\n beforeEach(() => {\n // Create a fresh QueryClient for each test\n testQueryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n\n jest.mocked(useTamboClient).mockReturnValue(mockClient);\n jest.mocked(useTamboQueryClient).mockReturnValue(testQueryClient);\n\n // Mock TamboClientProvider to wrap children with QueryClientProvider\n const { TamboClientProvider } = jest.requireMock(\n \"../../providers/tambo-client-provider\",\n );\n jest\n .mocked(TamboClientProvider)\n .mockImplementation(({ children }: { children: React.ReactNode }) => (\n <QueryClientProvider client={testQueryClient!}>\n {children}\n </QueryClientProvider>\n ));\n });\n\n it(\"provides access to registry context\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\">{children}</TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.componentList).toBeDefined();\n expect(result.current.toolRegistry).toBeDefined();\n expect(typeof result.current.registerComponent).toBe(\"function\");\n expect(typeof result.current.registerTool).toBe(\"function\");\n });\n\n it(\"provides access to stream context with placeholder thread ready\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\">{children}</TamboV1Provider>\n );\n\n const { result } = renderHook(() => useStreamState(), { wrapper });\n\n expect(result.current.threadMap).toBeDefined();\n // Initial state has placeholder thread for optimistic UI\n expect(result.current.currentThreadId).toBe(\"placeholder\");\n expect(result.current.threadMap.placeholder).toBeDefined();\n });\n\n it(\"manages threads via useThreadManagement\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\">{children}</TamboV1Provider>\n );\n\n const { result } = renderHook(\n () => ({\n state: useStreamState(),\n management: useThreadManagement(),\n }),\n { wrapper },\n );\n\n // Initially has placeholder thread for optimistic UI\n expect(result.current.state.currentThreadId).toBe(\"placeholder\");\n\n // Initialize and switch to a different thread\n act(() => {\n result.current.management.initThread(\"thread_123\");\n result.current.management.switchThread(\"thread_123\");\n });\n\n expect(result.current.state.currentThreadId).toBe(\"thread_123\");\n expect(result.current.state.threadMap.thread_123).toBeDefined();\n });\n\n it(\"provides access to query client via useTamboQueryClient\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\">{children}</TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboQueryClient(), { wrapper });\n\n expect(result.current).toBeInstanceOf(QueryClient);\n });\n\n it(\"registers components when provided\", () => {\n const TestComponent = () => <div>Test</div>;\n const propsSchema = z.object({\n title: z.string().describe(\"The title\"),\n });\n const components = [\n {\n name: \"TestComponent\",\n description: \"A test component\",\n component: TestComponent,\n propsSchema,\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\" components={components}>\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.componentList.TestComponent).toBeDefined();\n expect(result.current.componentList.TestComponent.name).toBe(\n \"TestComponent\",\n );\n });\n\n it(\"registers tools when provided\", () => {\n const inputSchema = z.object({\n query: z.string().describe(\"Search query\"),\n });\n const outputSchema = z.string().describe(\"Result string\");\n const tools = [\n {\n name: \"testTool\",\n description: \"A test tool\",\n tool: async () => \"result\",\n inputSchema,\n outputSchema,\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\" tools={tools}>\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.toolRegistry.testTool).toBeDefined();\n expect(result.current.toolRegistry.testTool.name).toBe(\"testTool\");\n });\n\n it(\"registers MCP servers when provided\", () => {\n const mcpServers = [\n { url: \"https://mcp.example.com\", name: \"Example MCP\" },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\" mcpServers={mcpServers}>\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.mcpServerInfos).toHaveLength(1);\n expect(result.current.mcpServerInfos[0].url).toBe(\n \"https://mcp.example.com\",\n );\n });\n\n it(\"provides onCallUnregisteredTool to registry\", () => {\n const onCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"fallback result\");\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider\n apiKey=\"test-api-key\"\n onCallUnregisteredTool={onCallUnregisteredTool}\n >\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.onCallUnregisteredTool).toBe(onCallUnregisteredTool);\n });\n\n it(\"registers static resources when provided\", () => {\n const resources = [\n {\n uri: \"resource://test/example\",\n name: \"Test Resource\",\n description: \"A test resource\",\n mimeType: \"text/plain\",\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\" resources={resources}>\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resources).toHaveLength(1);\n expect(result.current.resources[0].uri).toBe(\"resource://test/example\");\n expect(result.current.resources[0].name).toBe(\"Test Resource\");\n });\n\n it(\"registers resource source when listResources and getResource provided\", () => {\n const listResources = jest.fn().mockResolvedValue({ resources: [] });\n const getResource = jest.fn().mockResolvedValue({ contents: [] });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider\n apiKey=\"test-api-key\"\n listResources={listResources}\n getResource={getResource}\n >\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resourceSource).toBeDefined();\n expect(result.current.resourceSource?.listResources).toBe(listResources);\n expect(result.current.resourceSource?.getResource).toBe(getResource);\n });\n\n it(\"provides userKey via useTamboV1Config\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\" userKey=\"my-user-key\">\n {children}\n </TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboV1Config(), { wrapper });\n\n expect(result.current.userKey).toBe(\"my-user-key\");\n });\n\n it(\"returns undefined userKey from useTamboV1Config when no userKey provided\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\">{children}</TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboV1Config(), { wrapper });\n\n expect(result.current.userKey).toBeUndefined();\n });\n\n it(\"provides context helpers via useTamboContextHelpers hook\", async () => {\n const contextHelpers = {\n getUserName: () => \"Test User\",\n getCurrentTime: () => new Date().toISOString(),\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\" contextHelpers={contextHelpers}>\n {children}\n </TamboV1Provider>\n );\n\n const { result, rerender } = renderHook(() => useTamboContextHelpers(), {\n wrapper,\n });\n\n // Helpers are registered via useEffect, so we need to trigger a rerender\n await act(async () => {\n rerender();\n });\n\n const helpers = result.current.getContextHelpers();\n expect(helpers.getUserName).toBe(contextHelpers.getUserName);\n expect(helpers.getCurrentTime).toBe(contextHelpers.getCurrentTime);\n });\n\n it(\"returns only interactables contextHelper when none explicitly provided\", async () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboV1Provider apiKey=\"test-api-key\">{children}</TamboV1Provider>\n );\n\n const { result } = renderHook(() => useTamboContextHelpers(), { wrapper });\n\n const helpers = result.current.getContextHelpers();\n // TamboInteractableProvider registers an \"interactables\" context helper\n expect(Object.keys(helpers)).toEqual([\"interactables\"]);\n });\n});\n"]}
1
+ {"version":3,"file":"tambo-v1-provider.test.js","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod\";\nimport {\n useTamboClient,\n useTamboQueryClient,\n} from \"../../providers/tambo-client-provider\";\nimport { useTamboRegistry } from \"../../providers/tambo-registry-provider\";\nimport { useTamboContextHelpers } from \"../../providers/tambo-context-helpers-provider\";\nimport { useStreamState, useThreadManagement } from \"./tambo-v1-stream-context\";\nimport { TamboProvider, useTamboConfig } from \"./tambo-v1-provider\";\n\n// Module-level QueryClient for tests - created lazily\nlet testQueryClient: QueryClient | null = null;\n\n// Mock the client provider to capture the apiKey\njest.mock(\"../../providers/tambo-client-provider\", () => {\n return {\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n TamboClientProvider: jest.fn(\n ({ children }: { children: React.ReactNode }) => children,\n ),\n };\n});\n\n// Mock MCP providers to avoid TamboClientContext dependency\njest.mock(\"../../providers/tambo-mcp-token-provider\", () => ({\n TamboMcpTokenProvider: ({ children }: { children: React.ReactNode }) =>\n children,\n}));\n\njest.mock(\"../../mcp/tambo-mcp-provider\", () => ({\n TamboMcpProvider: ({ children }: { children: React.ReactNode }) => children,\n}));\n\n// Mock auth state to avoid TamboClientContext dependency\njest.mock(\"../hooks/use-tambo-v1-auth-state\", () => ({\n useTamboAuthState: () => ({\n status: \"identified\",\n source: \"userKey\",\n }),\n}));\n\n// Mock useTamboSendMessage to avoid complex dependencies\njest.mock(\"../hooks/use-tambo-v1-send-message\", () => ({\n useTamboSendMessage: jest.fn(() => ({\n mutateAsync: jest.fn(),\n mutate: jest.fn(),\n isPending: false,\n isError: false,\n error: null,\n isSuccess: false,\n reset: jest.fn(),\n })),\n}));\n\ndescribe(\"TamboProvider\", () => {\n const mockFetch: typeof fetch = async (..._args) => {\n throw new Error(\"fetch not implemented\");\n };\n\n const mockClient = new TamboAI({\n apiKey: \"test-api-key\",\n fetch: mockFetch,\n });\n\n beforeEach(() => {\n // Create a fresh QueryClient for each test\n testQueryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n });\n\n jest.mocked(useTamboClient).mockReturnValue(mockClient);\n jest.mocked(useTamboQueryClient).mockReturnValue(testQueryClient);\n\n // Mock TamboClientProvider to wrap children with QueryClientProvider\n const { TamboClientProvider } = jest.requireMock(\n \"../../providers/tambo-client-provider\",\n );\n jest\n .mocked(TamboClientProvider)\n .mockImplementation(({ children }: { children: React.ReactNode }) => (\n <QueryClientProvider client={testQueryClient!}>\n {children}\n </QueryClientProvider>\n ));\n });\n\n it(\"provides access to registry context\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\">{children}</TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.componentList).toBeDefined();\n expect(result.current.toolRegistry).toBeDefined();\n expect(typeof result.current.registerComponent).toBe(\"function\");\n expect(typeof result.current.registerTool).toBe(\"function\");\n });\n\n it(\"provides access to stream context with placeholder thread ready\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\">{children}</TamboProvider>\n );\n\n const { result } = renderHook(() => useStreamState(), { wrapper });\n\n expect(result.current.threadMap).toBeDefined();\n // Initial state has placeholder thread for optimistic UI\n expect(result.current.currentThreadId).toBe(\"placeholder\");\n expect(result.current.threadMap.placeholder).toBeDefined();\n });\n\n it(\"manages threads via useThreadManagement\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\">{children}</TamboProvider>\n );\n\n const { result } = renderHook(\n () => ({\n state: useStreamState(),\n management: useThreadManagement(),\n }),\n { wrapper },\n );\n\n // Initially has placeholder thread for optimistic UI\n expect(result.current.state.currentThreadId).toBe(\"placeholder\");\n\n // Initialize and switch to a different thread\n act(() => {\n result.current.management.initThread(\"thread_123\");\n result.current.management.switchThread(\"thread_123\");\n });\n\n expect(result.current.state.currentThreadId).toBe(\"thread_123\");\n expect(result.current.state.threadMap.thread_123).toBeDefined();\n });\n\n it(\"provides access to query client via useTamboQueryClient\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\">{children}</TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboQueryClient(), { wrapper });\n\n expect(result.current).toBeInstanceOf(QueryClient);\n });\n\n it(\"registers components when provided\", () => {\n const TestComponent = () => <div>Test</div>;\n const propsSchema = z.object({\n title: z.string().describe(\"The title\"),\n });\n const components = [\n {\n name: \"TestComponent\",\n description: \"A test component\",\n component: TestComponent,\n propsSchema,\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\" components={components}>\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.componentList.TestComponent).toBeDefined();\n expect(result.current.componentList.TestComponent.name).toBe(\n \"TestComponent\",\n );\n });\n\n it(\"registers tools when provided\", () => {\n const inputSchema = z.object({\n query: z.string().describe(\"Search query\"),\n });\n const outputSchema = z.string().describe(\"Result string\");\n const tools = [\n {\n name: \"testTool\",\n description: \"A test tool\",\n tool: async () => \"result\",\n inputSchema,\n outputSchema,\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\" tools={tools}>\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.toolRegistry.testTool).toBeDefined();\n expect(result.current.toolRegistry.testTool.name).toBe(\"testTool\");\n });\n\n it(\"registers MCP servers when provided\", () => {\n const mcpServers = [\n { url: \"https://mcp.example.com\", name: \"Example MCP\" },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\" mcpServers={mcpServers}>\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.mcpServerInfos).toHaveLength(1);\n expect(result.current.mcpServerInfos[0].url).toBe(\n \"https://mcp.example.com\",\n );\n });\n\n it(\"provides onCallUnregisteredTool to registry\", () => {\n const onCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"fallback result\");\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider\n apiKey=\"test-api-key\"\n onCallUnregisteredTool={onCallUnregisteredTool}\n >\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.onCallUnregisteredTool).toBe(onCallUnregisteredTool);\n });\n\n it(\"registers static resources when provided\", () => {\n const resources = [\n {\n uri: \"resource://test/example\",\n name: \"Test Resource\",\n description: \"A test resource\",\n mimeType: \"text/plain\",\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\" resources={resources}>\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resources).toHaveLength(1);\n expect(result.current.resources[0].uri).toBe(\"resource://test/example\");\n expect(result.current.resources[0].name).toBe(\"Test Resource\");\n });\n\n it(\"registers resource source when listResources and getResource provided\", () => {\n const listResources = jest.fn().mockResolvedValue({ resources: [] });\n const getResource = jest.fn().mockResolvedValue({ contents: [] });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider\n apiKey=\"test-api-key\"\n listResources={listResources}\n getResource={getResource}\n >\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resourceSource).toBeDefined();\n expect(result.current.resourceSource?.listResources).toBe(listResources);\n expect(result.current.resourceSource?.getResource).toBe(getResource);\n });\n\n it(\"provides userKey via useTamboConfig\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\" userKey=\"my-user-key\">\n {children}\n </TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboConfig(), { wrapper });\n\n expect(result.current.userKey).toBe(\"my-user-key\");\n });\n\n it(\"returns undefined userKey from useTamboConfig when no userKey provided\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\">{children}</TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboConfig(), { wrapper });\n\n expect(result.current.userKey).toBeUndefined();\n });\n\n it(\"provides context helpers via useTamboContextHelpers hook\", async () => {\n const contextHelpers = {\n getUserName: () => \"Test User\",\n getCurrentTime: () => new Date().toISOString(),\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\" contextHelpers={contextHelpers}>\n {children}\n </TamboProvider>\n );\n\n const { result, rerender } = renderHook(() => useTamboContextHelpers(), {\n wrapper,\n });\n\n // Helpers are registered via useEffect, so we need to trigger a rerender\n await act(async () => {\n rerender();\n });\n\n const helpers = result.current.getContextHelpers();\n expect(helpers.getUserName).toBe(contextHelpers.getUserName);\n expect(helpers.getCurrentTime).toBe(contextHelpers.getCurrentTime);\n });\n\n it(\"returns only interactables contextHelper when none explicitly provided\", async () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboProvider apiKey=\"test-api-key\">{children}</TamboProvider>\n );\n\n const { result } = renderHook(() => useTamboContextHelpers(), { wrapper });\n\n const helpers = result.current.getContextHelpers();\n // TamboInteractableProvider registers \"interactables\" and TamboContextAttachmentProvider registers \"contextAttachments\"\n expect(Object.keys(helpers)).toEqual([\n \"interactables\",\n \"contextAttachments\",\n ]);\n });\n});\n"]}
@@ -1,12 +1,13 @@
1
1
  /**
2
- * Stream Context Provider for v1 API
2
+ * Stream Context Provider
3
3
  *
4
4
  * Manages streaming state using React Context and useReducer.
5
5
  * Provides state and dispatch to child components via separate contexts
6
6
  * following the split-context pattern for optimal re-render performance.
7
7
  */
8
8
  import React from "react";
9
- import type { TamboV1Thread } from "../types/thread.js";
9
+ import type { InitialInputMessage } from "../types/message.js";
10
+ import type { TamboThread } from "../types/thread.js";
10
11
  import { type StreamAction, type StreamState } from "../utils/event-accumulator.js";
11
12
  /**
12
13
  * Thread management functions exposed by the stream context.
@@ -18,10 +19,10 @@ export interface ThreadManagement {
18
19
  * @param threadId - The thread ID to initialize
19
20
  * @param initialThread - Optional initial thread data
20
21
  */
21
- initThread: (threadId: string, initialThread?: Partial<TamboV1Thread>) => void;
22
+ initThread: (threadId: string, initialThread?: Partial<TamboThread>) => void;
22
23
  /**
23
24
  * Switch the current active thread.
24
- * Does not fetch thread data - use useTamboV1Thread for that.
25
+ * Does not fetch thread data - use useTamboThread for that.
25
26
  * @param threadId - The thread ID to switch to
26
27
  */
27
28
  switchThread: (threadId: string) => void;
@@ -33,10 +34,15 @@ export interface ThreadManagement {
33
34
  startNewThread: () => string;
34
35
  }
35
36
  /**
36
- * Props for TamboV1StreamProvider
37
+ * Props for TamboStreamProvider
37
38
  */
38
- export interface TamboV1StreamProviderProps {
39
+ export interface TamboStreamProviderProps {
39
40
  children: React.ReactNode;
41
+ /**
42
+ * Initial messages to populate the placeholder thread with.
43
+ * These render in the UI before any API call is made.
44
+ */
45
+ initialMessages?: InitialInputMessage[];
40
46
  /**
41
47
  * Optional override for stream state (primarily for tests).
42
48
  * If provided, you must also provide `dispatch`.
@@ -65,18 +71,18 @@ export interface TamboV1StreamProviderProps {
65
71
  * @returns JSX element wrapping children with stream contexts
66
72
  * @example
67
73
  * ```tsx
68
- * <TamboV1StreamProvider>
74
+ * <TamboStreamProvider>
69
75
  * <ChatInterface />
70
- * </TamboV1StreamProvider>
76
+ * </TamboStreamProvider>
71
77
  * ```
72
78
  */
73
- export declare function TamboV1StreamProvider(props: TamboV1StreamProviderProps): React.JSX.Element;
79
+ export declare function TamboStreamProvider(props: TamboStreamProviderProps): React.JSX.Element;
74
80
  /**
75
81
  * Hook to access stream state.
76
82
  *
77
- * Must be used within TamboV1StreamProvider.
83
+ * Must be used within TamboStreamProvider.
78
84
  * @returns Current stream state
79
- * @throws {Error} if used outside TamboV1StreamProvider
85
+ * @throws {Error} if used outside TamboStreamProvider
80
86
  * @example
81
87
  * ```tsx
82
88
  * function ChatMessages() {
@@ -95,9 +101,9 @@ export declare function useStreamState(): StreamState;
95
101
  /**
96
102
  * Hook to access stream dispatch function.
97
103
  *
98
- * Must be used within TamboV1StreamProvider.
104
+ * Must be used within TamboStreamProvider.
99
105
  * @returns Dispatch function for sending events to reducer
100
- * @throws {Error} if used outside TamboV1StreamProvider
106
+ * @throws {Error} if used outside TamboStreamProvider
101
107
  * @example
102
108
  * ```tsx
103
109
  * function StreamHandler() {
@@ -120,9 +126,9 @@ export declare function useStreamDispatch(): React.Dispatch<StreamAction>;
120
126
  /**
121
127
  * Hook to access thread management functions.
122
128
  *
123
- * Must be used within TamboV1StreamProvider.
129
+ * Must be used within TamboStreamProvider.
124
130
  * @returns Thread management functions
125
- * @throws {Error} if used outside TamboV1StreamProvider
131
+ * @throws {Error} if used outside TamboStreamProvider
126
132
  * @example
127
133
  * ```tsx
128
134
  * function ThreadSwitcher() {
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-v1-stream-context.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-stream-context.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,UAAU,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,KACnC,IAAI,CAAC;IAEV;;;;OAIG;IACH,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAqBD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAExC;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,qBAkFtE;AAsDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAQ5C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAUhE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAUtD"}
1
+ {"version":3,"file":"tambo-v1-stream-context.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-stream-context.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAOL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,4BAA4B,CAAC;AAGpC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAE7E;;;;OAIG;IACH,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAqBD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;;OAGG;IACH,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAExC;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAExC;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,qBA8GlE;AAyED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAQ5C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAUhE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAUtD"}
@@ -1,15 +1,16 @@
1
1
  "use client";
2
2
  /**
3
- * Stream Context Provider for v1 API
3
+ * Stream Context Provider
4
4
  *
5
5
  * Manages streaming state using React Context and useReducer.
6
6
  * Provides state and dispatch to child components via separate contexts
7
7
  * following the split-context pattern for optimal re-render performance.
8
8
  */
9
9
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useReducer, useRef, } from "react";
10
- import { useTamboClient } from "../../providers/tambo-client-provider.js";
11
10
  import { useTamboQuery } from "../../hooks/react-query-hooks.js";
12
- import { createInitialState, createInitialThreadState, isPlaceholderThreadId, PLACEHOLDER_THREAD_ID, streamReducer, } from "../utils/event-accumulator.js";
11
+ import { useTamboClient } from "../../providers/tambo-client-provider.js";
12
+ import { createInitialState, createInitialStateWithMessages, createInitialThreadState, isPlaceholderThreadId, PLACEHOLDER_THREAD_ID, streamReducer, } from "../utils/event-accumulator.js";
13
+ import { useTamboConfig } from "./tambo-v1-provider.js";
13
14
  /**
14
15
  * Context for accessing stream state (read-only).
15
16
  * Separated from dispatch context to prevent unnecessary re-renders.
@@ -38,28 +39,31 @@ const ThreadManagementContext = createContext(null);
38
39
  * @returns JSX element wrapping children with stream contexts
39
40
  * @example
40
41
  * ```tsx
41
- * <TamboV1StreamProvider>
42
+ * <TamboStreamProvider>
42
43
  * <ChatInterface />
43
- * </TamboV1StreamProvider>
44
+ * </TamboStreamProvider>
44
45
  * ```
45
46
  */
46
- export function TamboV1StreamProvider(props) {
47
- const { children, state: providedState, dispatch: providedDispatch } = props;
47
+ export function TamboStreamProvider(props) {
48
+ const { children, initialMessages, state: providedState, dispatch: providedDispatch, } = props;
48
49
  if ((providedState && !providedDispatch) ||
49
50
  (!providedState && providedDispatch)) {
50
- throw new Error("TamboV1StreamProvider requires both state and dispatch when overriding");
51
+ throw new Error("TamboStreamProvider requires both state and dispatch when overriding");
51
52
  }
52
53
  if (props.threadManagement) {
53
54
  const { initThread, switchThread, startNewThread } = props.threadManagement;
54
55
  if (typeof initThread !== "function" ||
55
56
  typeof switchThread !== "function" ||
56
57
  typeof startNewThread !== "function") {
57
- throw new Error("TamboV1StreamProvider: threadManagement override is missing required methods");
58
+ throw new Error("TamboStreamProvider: threadManagement override is missing required methods");
58
59
  }
59
60
  }
60
61
  // Create stable initial state - only computed once on mount
61
62
  // Uses createInitialState which sets up placeholder thread for optimistic UI
62
- const [state, dispatch] = useReducer(streamReducer, undefined, createInitialState);
63
+ // If initialMessages are provided, the placeholder thread is seeded with them
64
+ const [state, dispatch] = useReducer(streamReducer, initialMessages, (msgs) => msgs?.length
65
+ ? createInitialStateWithMessages(msgs)
66
+ : createInitialState());
63
67
  const activeState = providedState ?? state;
64
68
  const activeDispatch = providedDispatch ?? dispatch;
65
69
  // Thread management functions
@@ -70,15 +74,32 @@ export function TamboV1StreamProvider(props) {
70
74
  activeDispatch({ type: "SET_CURRENT_THREAD", threadId });
71
75
  }, [activeDispatch]);
72
76
  const startNewThread = useCallback(() => {
73
- // Reset placeholder thread to empty state and switch to it
74
- // This prepares for a new conversation while preserving existing threads
77
+ // Reset placeholder thread and switch to it
78
+ // This prepares for a new conversation while preserving existing threads.
79
+ // If initialMessages were provided, re-seed the placeholder with them.
80
+ const baseThread = createInitialThreadState(PLACEHOLDER_THREAD_ID).thread;
81
+ const threadWithMessages = initialMessages?.length
82
+ ? {
83
+ ...baseThread,
84
+ messages: initialMessages.map((msg) => ({
85
+ id: `initial_${crypto.randomUUID()}`,
86
+ role: msg.role,
87
+ content: msg.content.map((c) => {
88
+ if (c.type === "text") {
89
+ return { type: "text", text: c.text };
90
+ }
91
+ return c;
92
+ }),
93
+ })),
94
+ }
95
+ : baseThread;
75
96
  activeDispatch({
76
97
  type: "START_NEW_THREAD",
77
98
  threadId: PLACEHOLDER_THREAD_ID,
78
- initialThread: createInitialThreadState(PLACEHOLDER_THREAD_ID).thread,
99
+ initialThread: threadWithMessages,
79
100
  });
80
101
  return PLACEHOLDER_THREAD_ID;
81
- }, [activeDispatch]);
102
+ }, [activeDispatch, initialMessages]);
82
103
  const threadManagement = useMemo(() => {
83
104
  return (props.threadManagement ?? {
84
105
  initThread,
@@ -101,6 +122,7 @@ export function TamboV1StreamProvider(props) {
101
122
  */
102
123
  function ThreadSyncManager() {
103
124
  const client = useTamboClient();
125
+ const { userKey } = useTamboConfig();
104
126
  const state = useContext(StreamStateContext);
105
127
  const dispatch = useContext(StreamDispatchContext);
106
128
  // Track which threads have been synced to avoid redundant fetches
@@ -113,17 +135,34 @@ function ThreadSyncManager() {
113
135
  const isNotSynced = currentThreadId !== lastSyncedThreadRef.current;
114
136
  const hasNoMessages = !threadState || threadState.thread.messages.length === 0;
115
137
  const shouldFetch = isNotPlaceholder && isNotSynced && hasNoMessages;
116
- // Fetch messages from the messages endpoint (not the thread endpoint)
117
- const { data: messagesData, isSuccess } = useTamboQuery({
138
+ // Fetch messages and thread metadata in parallel
139
+ const { data: messagesData, isSuccess: messagesSuccess } = useTamboQuery({
118
140
  queryKey: ["v1-thread-messages", currentThreadId],
119
141
  queryFn: async () => await client.threads.messages.list(currentThreadId),
120
142
  enabled: shouldFetch,
121
143
  staleTime: 1000,
122
144
  refetchOnWindowFocus: false,
123
145
  });
146
+ useTamboQuery({
147
+ queryKey: ["v1-thread-metadata", currentThreadId],
148
+ queryFn: async () => {
149
+ const data = await client.threads.retrieve(currentThreadId, { userKey });
150
+ if (data.lastCompletedRunId && dispatch) {
151
+ dispatch({
152
+ type: "SET_LAST_COMPLETED_RUN_ID",
153
+ threadId: currentThreadId,
154
+ lastCompletedRunId: data.lastCompletedRunId,
155
+ });
156
+ }
157
+ return data;
158
+ },
159
+ enabled: shouldFetch,
160
+ staleTime: 1000,
161
+ refetchOnWindowFocus: false,
162
+ });
124
163
  // Sync fetched messages to stream state
125
164
  useEffect(() => {
126
- if (!isSuccess || !messagesData || !dispatch)
165
+ if (!messagesSuccess || !messagesData || !dispatch)
127
166
  return;
128
167
  if (lastSyncedThreadRef.current === currentThreadId)
129
168
  return;
@@ -134,15 +173,15 @@ function ThreadSyncManager() {
134
173
  skipIfStreaming: true,
135
174
  });
136
175
  lastSyncedThreadRef.current = currentThreadId;
137
- }, [isSuccess, messagesData, currentThreadId, dispatch]);
176
+ }, [messagesSuccess, messagesData, currentThreadId, dispatch]);
138
177
  return null;
139
178
  }
140
179
  /**
141
180
  * Hook to access stream state.
142
181
  *
143
- * Must be used within TamboV1StreamProvider.
182
+ * Must be used within TamboStreamProvider.
144
183
  * @returns Current stream state
145
- * @throws {Error} if used outside TamboV1StreamProvider
184
+ * @throws {Error} if used outside TamboStreamProvider
146
185
  * @example
147
186
  * ```tsx
148
187
  * function ChatMessages() {
@@ -160,16 +199,16 @@ function ThreadSyncManager() {
160
199
  export function useStreamState() {
161
200
  const context = useContext(StreamStateContext);
162
201
  if (!context) {
163
- throw new Error("useStreamState must be used within TamboV1StreamProvider");
202
+ throw new Error("useStreamState must be used within TamboStreamProvider");
164
203
  }
165
204
  return context;
166
205
  }
167
206
  /**
168
207
  * Hook to access stream dispatch function.
169
208
  *
170
- * Must be used within TamboV1StreamProvider.
209
+ * Must be used within TamboStreamProvider.
171
210
  * @returns Dispatch function for sending events to reducer
172
- * @throws {Error} if used outside TamboV1StreamProvider
211
+ * @throws {Error} if used outside TamboStreamProvider
173
212
  * @example
174
213
  * ```tsx
175
214
  * function StreamHandler() {
@@ -191,16 +230,16 @@ export function useStreamState() {
191
230
  export function useStreamDispatch() {
192
231
  const context = useContext(StreamDispatchContext);
193
232
  if (!context) {
194
- throw new Error("useStreamDispatch must be used within TamboV1StreamProvider");
233
+ throw new Error("useStreamDispatch must be used within TamboStreamProvider");
195
234
  }
196
235
  return context;
197
236
  }
198
237
  /**
199
238
  * Hook to access thread management functions.
200
239
  *
201
- * Must be used within TamboV1StreamProvider.
240
+ * Must be used within TamboStreamProvider.
202
241
  * @returns Thread management functions
203
- * @throws {Error} if used outside TamboV1StreamProvider
242
+ * @throws {Error} if used outside TamboStreamProvider
204
243
  * @example
205
244
  * ```tsx
206
245
  * function ThreadSwitcher() {
@@ -222,7 +261,7 @@ export function useStreamDispatch() {
222
261
  export function useThreadManagement() {
223
262
  const context = useContext(ThreadManagementContext);
224
263
  if (!context) {
225
- throw new Error("useThreadManagement must be used within TamboV1StreamProvider");
264
+ throw new Error("useThreadManagement must be used within TamboStreamProvider");
226
265
  }
227
266
  return context;
228
267
  }