@tambo-ai/react 0.70.0 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
  2. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
  3. package/dist/v1/hooks/use-tambo-v1-component-state.js +134 -0
  4. package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
  5. package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
  6. package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
  7. package/dist/v1/hooks/use-tambo-v1-component-state.test.js +292 -0
  8. package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
  9. package/dist/v1/hooks/use-tambo-v1-messages.d.ts +58 -0
  10. package/dist/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -0
  11. package/dist/v1/hooks/use-tambo-v1-messages.js +54 -0
  12. package/dist/v1/hooks/use-tambo-v1-messages.js.map +1 -0
  13. package/dist/v1/hooks/use-tambo-v1-messages.test.d.ts +2 -0
  14. package/dist/v1/hooks/use-tambo-v1-messages.test.d.ts.map +1 -0
  15. package/dist/v1/hooks/use-tambo-v1-messages.test.js +137 -0
  16. package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -0
  17. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +96 -0
  18. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -0
  19. package/dist/v1/hooks/use-tambo-v1-send-message.js +227 -0
  20. package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -0
  21. package/dist/v1/hooks/use-tambo-v1-send-message.test.d.ts +2 -0
  22. package/dist/v1/hooks/use-tambo-v1-send-message.test.d.ts.map +1 -0
  23. package/dist/v1/hooks/use-tambo-v1-send-message.test.js +827 -0
  24. package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -0
  25. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +62 -0
  26. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
  27. package/dist/v1/hooks/use-tambo-v1-thread-input.js +76 -0
  28. package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
  29. package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
  30. package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
  31. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +168 -0
  32. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
  33. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts +61 -0
  34. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -0
  35. package/dist/v1/hooks/use-tambo-v1-thread-list.js +56 -0
  36. package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -0
  37. package/dist/v1/hooks/use-tambo-v1-thread-list.test.d.ts +2 -0
  38. package/dist/v1/hooks/use-tambo-v1-thread-list.test.d.ts.map +1 -0
  39. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +98 -0
  40. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -0
  41. package/dist/v1/hooks/use-tambo-v1-thread.d.ts +37 -0
  42. package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -0
  43. package/dist/v1/hooks/use-tambo-v1-thread.js +49 -0
  44. package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -0
  45. package/dist/v1/hooks/use-tambo-v1-thread.test.d.ts +2 -0
  46. package/dist/v1/hooks/use-tambo-v1-thread.test.d.ts.map +1 -0
  47. package/dist/v1/hooks/use-tambo-v1-thread.test.js +83 -0
  48. package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -0
  49. package/dist/v1/hooks/use-tambo-v1.d.ts +107 -0
  50. package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -0
  51. package/dist/v1/hooks/use-tambo-v1.js +87 -0
  52. package/dist/v1/hooks/use-tambo-v1.js.map +1 -0
  53. package/dist/v1/hooks/use-tambo-v1.test.d.ts +2 -0
  54. package/dist/v1/hooks/use-tambo-v1.test.d.ts.map +1 -0
  55. package/dist/v1/hooks/use-tambo-v1.test.js +150 -0
  56. package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -0
  57. package/dist/v1/index.d.ts +65 -16
  58. package/dist/v1/index.d.ts.map +1 -1
  59. package/dist/v1/index.js +119 -26
  60. package/dist/v1/index.js.map +1 -1
  61. package/dist/v1/providers/tambo-v1-provider.d.ts +133 -0
  62. package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -0
  63. package/dist/v1/providers/tambo-v1-provider.js +131 -0
  64. package/dist/v1/providers/tambo-v1-provider.js.map +1 -0
  65. package/dist/v1/providers/tambo-v1-provider.test.d.ts +2 -0
  66. package/dist/v1/providers/tambo-v1-provider.test.d.ts.map +1 -0
  67. package/dist/v1/providers/tambo-v1-provider.test.js +181 -0
  68. package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -0
  69. package/dist/v1/providers/tambo-v1-stream-context.d.ts +136 -0
  70. package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -0
  71. package/dist/v1/providers/tambo-v1-stream-context.js +230 -0
  72. package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -0
  73. package/dist/v1/providers/tambo-v1-stream-context.test.d.ts +2 -0
  74. package/dist/v1/providers/tambo-v1-stream-context.test.d.ts.map +1 -0
  75. package/dist/v1/providers/tambo-v1-stream-context.test.js +85 -0
  76. package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -0
  77. package/dist/v1/types/component.d.ts +5 -2
  78. package/dist/v1/types/component.d.ts.map +1 -1
  79. package/dist/v1/types/component.js +5 -2
  80. package/dist/v1/types/component.js.map +1 -1
  81. package/dist/v1/types/event.d.ts +21 -12
  82. package/dist/v1/types/event.d.ts.map +1 -1
  83. package/dist/v1/types/event.js +46 -1
  84. package/dist/v1/types/event.js.map +1 -1
  85. package/dist/v1/types/event.test.d.ts +2 -0
  86. package/dist/v1/types/event.test.d.ts.map +1 -0
  87. package/dist/v1/types/event.test.js +70 -0
  88. package/dist/v1/types/event.test.js.map +1 -0
  89. package/dist/v1/types/message.d.ts +30 -9
  90. package/dist/v1/types/message.d.ts.map +1 -1
  91. package/dist/v1/types/message.js +1 -1
  92. package/dist/v1/types/message.js.map +1 -1
  93. package/dist/v1/types/thread.d.ts +1 -3
  94. package/dist/v1/types/thread.d.ts.map +1 -1
  95. package/dist/v1/types/thread.js +1 -1
  96. package/dist/v1/types/thread.js.map +1 -1
  97. package/dist/v1/utils/component-renderer.d.ts +89 -0
  98. package/dist/v1/utils/component-renderer.d.ts.map +1 -0
  99. package/dist/v1/utils/component-renderer.js +216 -0
  100. package/dist/v1/utils/component-renderer.js.map +1 -0
  101. package/dist/v1/utils/component-renderer.test.d.ts +2 -0
  102. package/dist/v1/utils/component-renderer.test.d.ts.map +1 -0
  103. package/dist/v1/utils/component-renderer.test.js +380 -0
  104. package/dist/v1/utils/component-renderer.test.js.map +1 -0
  105. package/dist/v1/utils/event-accumulator.d.ts +100 -0
  106. package/dist/v1/utils/event-accumulator.d.ts.map +1 -0
  107. package/dist/v1/utils/event-accumulator.js +735 -0
  108. package/dist/v1/utils/event-accumulator.js.map +1 -0
  109. package/dist/v1/utils/event-accumulator.test.d.ts +2 -0
  110. package/dist/v1/utils/event-accumulator.test.d.ts.map +1 -0
  111. package/dist/v1/utils/event-accumulator.test.js +1205 -0
  112. package/dist/v1/utils/event-accumulator.test.js.map +1 -0
  113. package/dist/v1/utils/json-patch.d.ts +18 -0
  114. package/dist/v1/utils/json-patch.d.ts.map +1 -0
  115. package/dist/v1/utils/json-patch.js +35 -0
  116. package/dist/v1/utils/json-patch.js.map +1 -0
  117. package/dist/v1/utils/json-patch.test.d.ts +2 -0
  118. package/dist/v1/utils/json-patch.test.d.ts.map +1 -0
  119. package/dist/v1/utils/json-patch.test.js +28 -0
  120. package/dist/v1/utils/json-patch.test.js.map +1 -0
  121. package/dist/v1/utils/registry-conversion.d.ts +53 -0
  122. package/dist/v1/utils/registry-conversion.d.ts.map +1 -0
  123. package/dist/v1/utils/registry-conversion.js +114 -0
  124. package/dist/v1/utils/registry-conversion.js.map +1 -0
  125. package/dist/v1/utils/registry-conversion.test.d.ts +2 -0
  126. package/dist/v1/utils/registry-conversion.test.d.ts.map +1 -0
  127. package/dist/v1/utils/registry-conversion.test.js +179 -0
  128. package/dist/v1/utils/registry-conversion.test.js.map +1 -0
  129. package/dist/v1/utils/stream-handler.d.ts +45 -0
  130. package/dist/v1/utils/stream-handler.d.ts.map +1 -0
  131. package/dist/v1/utils/stream-handler.js +47 -0
  132. package/dist/v1/utils/stream-handler.js.map +1 -0
  133. package/dist/v1/utils/stream-handler.test.d.ts +2 -0
  134. package/dist/v1/utils/stream-handler.test.d.ts.map +1 -0
  135. package/dist/v1/utils/stream-handler.test.js +74 -0
  136. package/dist/v1/utils/stream-handler.test.js.map +1 -0
  137. package/dist/v1/utils/tool-call-tracker.d.ts +41 -0
  138. package/dist/v1/utils/tool-call-tracker.d.ts.map +1 -0
  139. package/dist/v1/utils/tool-call-tracker.js +90 -0
  140. package/dist/v1/utils/tool-call-tracker.js.map +1 -0
  141. package/dist/v1/utils/tool-executor.d.ts +33 -0
  142. package/dist/v1/utils/tool-executor.d.ts.map +1 -0
  143. package/dist/v1/utils/tool-executor.js +103 -0
  144. package/dist/v1/utils/tool-executor.js.map +1 -0
  145. package/dist/v1/utils/tool-executor.test.d.ts +2 -0
  146. package/dist/v1/utils/tool-executor.test.d.ts.map +1 -0
  147. package/dist/v1/utils/tool-executor.test.js +222 -0
  148. package/dist/v1/utils/tool-executor.test.js.map +1 -0
  149. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
  150. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
  151. package/esm/v1/hooks/use-tambo-v1-component-state.js +131 -0
  152. package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
  153. package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
  154. package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
  155. package/esm/v1/hooks/use-tambo-v1-component-state.test.js +290 -0
  156. package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
  157. package/esm/v1/hooks/use-tambo-v1-messages.d.ts +58 -0
  158. package/esm/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -0
  159. package/esm/v1/hooks/use-tambo-v1-messages.js +51 -0
  160. package/esm/v1/hooks/use-tambo-v1-messages.js.map +1 -0
  161. package/esm/v1/hooks/use-tambo-v1-messages.test.d.ts +2 -0
  162. package/esm/v1/hooks/use-tambo-v1-messages.test.d.ts.map +1 -0
  163. package/esm/v1/hooks/use-tambo-v1-messages.test.js +132 -0
  164. package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -0
  165. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +96 -0
  166. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -0
  167. package/esm/v1/hooks/use-tambo-v1-send-message.js +223 -0
  168. package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -0
  169. package/esm/v1/hooks/use-tambo-v1-send-message.test.d.ts +2 -0
  170. package/esm/v1/hooks/use-tambo-v1-send-message.test.d.ts.map +1 -0
  171. package/esm/v1/hooks/use-tambo-v1-send-message.test.js +822 -0
  172. package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -0
  173. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +62 -0
  174. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
  175. package/esm/v1/hooks/use-tambo-v1-thread-input.js +73 -0
  176. package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
  177. package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
  178. package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
  179. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +166 -0
  180. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
  181. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts +61 -0
  182. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -0
  183. package/esm/v1/hooks/use-tambo-v1-thread-list.js +53 -0
  184. package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -0
  185. package/esm/v1/hooks/use-tambo-v1-thread-list.test.d.ts +2 -0
  186. package/esm/v1/hooks/use-tambo-v1-thread-list.test.d.ts.map +1 -0
  187. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +93 -0
  188. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -0
  189. package/esm/v1/hooks/use-tambo-v1-thread.d.ts +37 -0
  190. package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -0
  191. package/esm/v1/hooks/use-tambo-v1-thread.js +46 -0
  192. package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -0
  193. package/esm/v1/hooks/use-tambo-v1-thread.test.d.ts +2 -0
  194. package/esm/v1/hooks/use-tambo-v1-thread.test.d.ts.map +1 -0
  195. package/esm/v1/hooks/use-tambo-v1-thread.test.js +78 -0
  196. package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -0
  197. package/esm/v1/hooks/use-tambo-v1.d.ts +107 -0
  198. package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -0
  199. package/esm/v1/hooks/use-tambo-v1.js +84 -0
  200. package/esm/v1/hooks/use-tambo-v1.js.map +1 -0
  201. package/esm/v1/hooks/use-tambo-v1.test.d.ts +2 -0
  202. package/esm/v1/hooks/use-tambo-v1.test.d.ts.map +1 -0
  203. package/esm/v1/hooks/use-tambo-v1.test.js +145 -0
  204. package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -0
  205. package/esm/v1/index.d.ts +65 -16
  206. package/esm/v1/index.d.ts.map +1 -1
  207. package/esm/v1/index.js +83 -27
  208. package/esm/v1/index.js.map +1 -1
  209. package/esm/v1/providers/tambo-v1-provider.d.ts +133 -0
  210. package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -0
  211. package/esm/v1/providers/tambo-v1-provider.js +94 -0
  212. package/esm/v1/providers/tambo-v1-provider.js.map +1 -0
  213. package/esm/v1/providers/tambo-v1-provider.test.d.ts +2 -0
  214. package/esm/v1/providers/tambo-v1-provider.test.d.ts.map +1 -0
  215. package/esm/v1/providers/tambo-v1-provider.test.js +176 -0
  216. package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -0
  217. package/esm/v1/providers/tambo-v1-stream-context.d.ts +136 -0
  218. package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -0
  219. package/esm/v1/providers/tambo-v1-stream-context.js +191 -0
  220. package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -0
  221. package/esm/v1/providers/tambo-v1-stream-context.test.d.ts +2 -0
  222. package/esm/v1/providers/tambo-v1-stream-context.test.d.ts.map +1 -0
  223. package/esm/v1/providers/tambo-v1-stream-context.test.js +80 -0
  224. package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -0
  225. package/esm/v1/types/component.d.ts +5 -2
  226. package/esm/v1/types/component.d.ts.map +1 -1
  227. package/esm/v1/types/component.js +5 -2
  228. package/esm/v1/types/component.js.map +1 -1
  229. package/esm/v1/types/event.d.ts +21 -12
  230. package/esm/v1/types/event.d.ts.map +1 -1
  231. package/esm/v1/types/event.js +44 -2
  232. package/esm/v1/types/event.js.map +1 -1
  233. package/esm/v1/types/event.test.d.ts +2 -0
  234. package/esm/v1/types/event.test.d.ts.map +1 -0
  235. package/esm/v1/types/event.test.js +68 -0
  236. package/esm/v1/types/event.test.js.map +1 -0
  237. package/esm/v1/types/message.d.ts +30 -9
  238. package/esm/v1/types/message.d.ts.map +1 -1
  239. package/esm/v1/types/message.js +1 -1
  240. package/esm/v1/types/message.js.map +1 -1
  241. package/esm/v1/types/thread.d.ts +1 -3
  242. package/esm/v1/types/thread.d.ts.map +1 -1
  243. package/esm/v1/types/thread.js +1 -1
  244. package/esm/v1/types/thread.js.map +1 -1
  245. package/esm/v1/utils/component-renderer.d.ts +89 -0
  246. package/esm/v1/utils/component-renderer.d.ts.map +1 -0
  247. package/esm/v1/utils/component-renderer.js +175 -0
  248. package/esm/v1/utils/component-renderer.js.map +1 -0
  249. package/esm/v1/utils/component-renderer.test.d.ts +2 -0
  250. package/esm/v1/utils/component-renderer.test.d.ts.map +1 -0
  251. package/esm/v1/utils/component-renderer.test.js +375 -0
  252. package/esm/v1/utils/component-renderer.test.js.map +1 -0
  253. package/esm/v1/utils/event-accumulator.d.ts +100 -0
  254. package/esm/v1/utils/event-accumulator.d.ts.map +1 -0
  255. package/esm/v1/utils/event-accumulator.js +728 -0
  256. package/esm/v1/utils/event-accumulator.js.map +1 -0
  257. package/esm/v1/utils/event-accumulator.test.d.ts +2 -0
  258. package/esm/v1/utils/event-accumulator.test.d.ts.map +1 -0
  259. package/esm/v1/utils/event-accumulator.test.js +1203 -0
  260. package/esm/v1/utils/event-accumulator.test.js.map +1 -0
  261. package/esm/v1/utils/json-patch.d.ts +18 -0
  262. package/esm/v1/utils/json-patch.d.ts.map +1 -0
  263. package/esm/v1/utils/json-patch.js +32 -0
  264. package/esm/v1/utils/json-patch.js.map +1 -0
  265. package/esm/v1/utils/json-patch.test.d.ts +2 -0
  266. package/esm/v1/utils/json-patch.test.d.ts.map +1 -0
  267. package/esm/v1/utils/json-patch.test.js +26 -0
  268. package/esm/v1/utils/json-patch.test.js.map +1 -0
  269. package/esm/v1/utils/registry-conversion.d.ts +53 -0
  270. package/esm/v1/utils/registry-conversion.d.ts.map +1 -0
  271. package/esm/v1/utils/registry-conversion.js +108 -0
  272. package/esm/v1/utils/registry-conversion.js.map +1 -0
  273. package/esm/v1/utils/registry-conversion.test.d.ts +2 -0
  274. package/esm/v1/utils/registry-conversion.test.d.ts.map +1 -0
  275. package/esm/v1/utils/registry-conversion.test.js +177 -0
  276. package/esm/v1/utils/registry-conversion.test.js.map +1 -0
  277. package/esm/v1/utils/stream-handler.d.ts +45 -0
  278. package/esm/v1/utils/stream-handler.d.ts.map +1 -0
  279. package/esm/v1/utils/stream-handler.js +44 -0
  280. package/esm/v1/utils/stream-handler.js.map +1 -0
  281. package/esm/v1/utils/stream-handler.test.d.ts +2 -0
  282. package/esm/v1/utils/stream-handler.test.d.ts.map +1 -0
  283. package/esm/v1/utils/stream-handler.test.js +72 -0
  284. package/esm/v1/utils/stream-handler.test.js.map +1 -0
  285. package/esm/v1/utils/tool-call-tracker.d.ts +41 -0
  286. package/esm/v1/utils/tool-call-tracker.d.ts.map +1 -0
  287. package/esm/v1/utils/tool-call-tracker.js +86 -0
  288. package/esm/v1/utils/tool-call-tracker.js.map +1 -0
  289. package/esm/v1/utils/tool-executor.d.ts +33 -0
  290. package/esm/v1/utils/tool-executor.d.ts.map +1 -0
  291. package/esm/v1/utils/tool-executor.js +99 -0
  292. package/esm/v1/utils/tool-executor.js.map +1 -0
  293. package/esm/v1/utils/tool-executor.test.d.ts +2 -0
  294. package/esm/v1/utils/tool-executor.test.d.ts.map +1 -0
  295. package/esm/v1/utils/tool-executor.test.js +220 -0
  296. package/esm/v1/utils/tool-executor.test.js.map +1 -0
  297. package/package.json +7 -6
  298. package/dist/v1/types/tool.d.ts +0 -52
  299. package/dist/v1/types/tool.d.ts.map +0 -1
  300. package/dist/v1/types/tool.js +0 -11
  301. package/dist/v1/types/tool.js.map +0 -1
  302. package/esm/v1/types/tool.d.ts +0 -52
  303. package/esm/v1/types/tool.d.ts.map +0 -1
  304. package/esm/v1/types/tool.js +0 -10
  305. package/esm/v1/types/tool.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
2
+ import { renderHook, waitFor } from "@testing-library/react";
3
+ import React from "react";
4
+ import { useTamboClient } from "../../providers/tambo-client-provider";
5
+ import { useTamboV1ThreadList } from "./use-tambo-v1-thread-list";
6
+ jest.mock("../../providers/tambo-client-provider", () => ({
7
+ useTamboClient: jest.fn(),
8
+ }));
9
+ describe("useTamboV1ThreadList", () => {
10
+ const mockThreads = {
11
+ threads: [
12
+ { id: "thread_1", runStatus: "idle" },
13
+ { id: "thread_2", runStatus: "complete" },
14
+ ],
15
+ hasMore: false,
16
+ nextCursor: undefined,
17
+ };
18
+ const mockThreadsApi = {
19
+ retrieve: jest.fn(),
20
+ list: jest.fn(),
21
+ };
22
+ const mockTamboAI = {
23
+ apiKey: "",
24
+ threads: mockThreadsApi,
25
+ };
26
+ let queryClient;
27
+ function TestWrapper({ children }) {
28
+ return (React.createElement(QueryClientProvider, { client: queryClient }, children));
29
+ }
30
+ beforeEach(() => {
31
+ queryClient = new QueryClient({
32
+ defaultOptions: {
33
+ queries: {
34
+ retry: false,
35
+ },
36
+ },
37
+ });
38
+ jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);
39
+ mockThreadsApi.list.mockReset();
40
+ });
41
+ it("fetches thread list", async () => {
42
+ mockThreadsApi.list.mockResolvedValue(mockThreads);
43
+ const { result } = renderHook(() => useTamboV1ThreadList(), {
44
+ wrapper: TestWrapper,
45
+ });
46
+ await waitFor(() => {
47
+ expect(result.current.data).toEqual(mockThreads);
48
+ });
49
+ expect(mockThreadsApi.list).toHaveBeenCalledWith(undefined);
50
+ });
51
+ it("passes list options to API", async () => {
52
+ mockThreadsApi.list.mockResolvedValue(mockThreads);
53
+ const { result } = renderHook(() => useTamboV1ThreadList({
54
+ contextKey: "test-context",
55
+ limit: "10",
56
+ }), { wrapper: TestWrapper });
57
+ await waitFor(() => {
58
+ expect(result.current.data).toEqual(mockThreads);
59
+ });
60
+ expect(mockThreadsApi.list).toHaveBeenCalledWith({
61
+ contextKey: "test-context",
62
+ limit: "10",
63
+ });
64
+ });
65
+ it("handles loading state", async () => {
66
+ let resolvePromise;
67
+ const promise = new Promise((resolve) => {
68
+ resolvePromise = resolve;
69
+ });
70
+ mockThreadsApi.list.mockReturnValue(promise);
71
+ const { result } = renderHook(() => useTamboV1ThreadList(), {
72
+ wrapper: TestWrapper,
73
+ });
74
+ expect(result.current.isLoading).toBe(true);
75
+ expect(result.current.data).toBeUndefined();
76
+ resolvePromise(mockThreads);
77
+ await waitFor(() => {
78
+ expect(result.current.isLoading).toBe(false);
79
+ });
80
+ });
81
+ it("handles error state", async () => {
82
+ const mockError = new Error("Failed to fetch threads");
83
+ mockThreadsApi.list.mockRejectedValue(mockError);
84
+ const { result } = renderHook(() => useTamboV1ThreadList(), {
85
+ wrapper: TestWrapper,
86
+ });
87
+ await waitFor(() => {
88
+ expect(result.current.isError).toBe(true);
89
+ expect(result.current.error).toBe(mockError);
90
+ });
91
+ });
92
+ });
93
+ //# sourceMappingURL=use-tambo-v1-thread-list.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1-thread-list.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-thread-list.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, waitFor } from \"@testing-library/react\";\nimport React from \"react\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport { useTamboV1ThreadList } from \"./use-tambo-v1-thread-list\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n}));\n\ndescribe(\"useTamboV1ThreadList\", () => {\n const mockThreads = {\n threads: [\n { id: \"thread_1\", runStatus: \"idle\" },\n { id: \"thread_2\", runStatus: \"complete\" },\n ],\n hasMore: false,\n nextCursor: undefined,\n };\n\n const mockThreadsApi = {\n retrieve: jest.fn(),\n list: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: mockThreadsApi,\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n );\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n mockThreadsApi.list.mockReset();\n });\n\n it(\"fetches thread list\", async () => {\n mockThreadsApi.list.mockResolvedValue(mockThreads);\n\n const { result } = renderHook(() => useTamboV1ThreadList(), {\n wrapper: TestWrapper,\n });\n\n await waitFor(() => {\n expect(result.current.data).toEqual(mockThreads);\n });\n\n expect(mockThreadsApi.list).toHaveBeenCalledWith(undefined);\n });\n\n it(\"passes list options to API\", async () => {\n mockThreadsApi.list.mockResolvedValue(mockThreads);\n\n const { result } = renderHook(\n () =>\n useTamboV1ThreadList({\n contextKey: \"test-context\",\n limit: \"10\",\n }),\n { wrapper: TestWrapper },\n );\n\n await waitFor(() => {\n expect(result.current.data).toEqual(mockThreads);\n });\n\n expect(mockThreadsApi.list).toHaveBeenCalledWith({\n contextKey: \"test-context\",\n limit: \"10\",\n });\n });\n\n it(\"handles loading state\", async () => {\n let resolvePromise: (value: unknown) => void;\n const promise = new Promise((resolve) => {\n resolvePromise = resolve;\n });\n mockThreadsApi.list.mockReturnValue(promise);\n\n const { result } = renderHook(() => useTamboV1ThreadList(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.isLoading).toBe(true);\n expect(result.current.data).toBeUndefined();\n\n resolvePromise!(mockThreads);\n await waitFor(() => {\n expect(result.current.isLoading).toBe(false);\n });\n });\n\n it(\"handles error state\", async () => {\n const mockError = new Error(\"Failed to fetch threads\");\n mockThreadsApi.list.mockRejectedValue(mockError);\n\n const { result } = renderHook(() => useTamboV1ThreadList(), {\n wrapper: TestWrapper,\n });\n\n await waitFor(() => {\n expect(result.current.isError).toBe(true);\n expect(result.current.error).toBe(mockError);\n });\n });\n});\n"]}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Thread Query Hook for v1 API
3
+ *
4
+ * React Query hook for fetching a single thread.
5
+ */
6
+ import { type UseQueryOptions } from "@tanstack/react-query";
7
+ import type { ThreadRetrieveResponse } from "@tambo-ai/typescript-sdk/resources/threads/threads";
8
+ /**
9
+ * Hook to fetch a single thread by ID.
10
+ *
11
+ * Uses React Query for caching and automatic refetching.
12
+ * Thread data is considered stale after 1 second (real-time data).
13
+ *
14
+ * Returns the thread with all its messages and current run status directly
15
+ * from the SDK with no transformation.
16
+ * @param threadId - Thread ID to fetch
17
+ * @param options - Additional React Query options
18
+ * @returns React Query query object with thread data
19
+ * @example
20
+ * ```tsx
21
+ * function ThreadView({ threadId }: { threadId: string }) {
22
+ * const { data: thread, isLoading, isError } = useTamboV1Thread(threadId);
23
+ *
24
+ * if (isLoading) return <Spinner />;
25
+ * if (isError) return <Error />;
26
+ *
27
+ * return (
28
+ * <div>
29
+ * <div>Status: {thread.runStatus}</div>
30
+ * {thread.messages.map(msg => <Message key={msg.id} message={msg} />)}
31
+ * </div>
32
+ * );
33
+ * }
34
+ * ```
35
+ */
36
+ export declare function useTamboV1Thread(threadId: string, options?: Omit<UseQueryOptions<ThreadRetrieveResponse>, "queryKey" | "queryFn">): import("@tanstack/react-query").UseQueryResult<ThreadRetrieveResponse, Error>;
37
+ //# sourceMappingURL=use-tambo-v1-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1-thread.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-thread.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAGjG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,IAAI,CACZ,eAAe,CAAC,sBAAsB,CAAC,EACvC,UAAU,GAAG,SAAS,CACvB,iFAUF"}
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ /**
3
+ * Thread Query Hook for v1 API
4
+ *
5
+ * React Query hook for fetching a single thread.
6
+ */
7
+ import { useQuery } from "@tanstack/react-query";
8
+ import { useTamboClient } from "../../providers/tambo-client-provider";
9
+ /**
10
+ * Hook to fetch a single thread by ID.
11
+ *
12
+ * Uses React Query for caching and automatic refetching.
13
+ * Thread data is considered stale after 1 second (real-time data).
14
+ *
15
+ * Returns the thread with all its messages and current run status directly
16
+ * from the SDK with no transformation.
17
+ * @param threadId - Thread ID to fetch
18
+ * @param options - Additional React Query options
19
+ * @returns React Query query object with thread data
20
+ * @example
21
+ * ```tsx
22
+ * function ThreadView({ threadId }: { threadId: string }) {
23
+ * const { data: thread, isLoading, isError } = useTamboV1Thread(threadId);
24
+ *
25
+ * if (isLoading) return <Spinner />;
26
+ * if (isError) return <Error />;
27
+ *
28
+ * return (
29
+ * <div>
30
+ * <div>Status: {thread.runStatus}</div>
31
+ * {thread.messages.map(msg => <Message key={msg.id} message={msg} />)}
32
+ * </div>
33
+ * );
34
+ * }
35
+ * ```
36
+ */
37
+ export function useTamboV1Thread(threadId, options) {
38
+ const client = useTamboClient();
39
+ return useQuery({
40
+ queryKey: ["v1-threads", threadId],
41
+ queryFn: async () => await client.threads.retrieve(threadId),
42
+ staleTime: 1000, // Consider stale after 1s (real-time data)
43
+ ...options,
44
+ });
45
+ }
46
+ //# sourceMappingURL=use-tambo-v1-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1-thread.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-thread.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,OAGC;IAED,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;QAClC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5D,SAAS,EAAE,IAAI,EAAE,2CAA2C;QAC5D,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC","sourcesContent":["\"use client\";\n\n/**\n * Thread Query Hook for v1 API\n *\n * React Query hook for fetching a single thread.\n */\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport type { ThreadRetrieveResponse } from \"@tambo-ai/typescript-sdk/resources/threads/threads\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\n\n/**\n * Hook to fetch a single thread by ID.\n *\n * Uses React Query for caching and automatic refetching.\n * Thread data is considered stale after 1 second (real-time data).\n *\n * Returns the thread with all its messages and current run status directly\n * from the SDK with no transformation.\n * @param threadId - Thread ID to fetch\n * @param options - Additional React Query options\n * @returns React Query query object with thread data\n * @example\n * ```tsx\n * function ThreadView({ threadId }: { threadId: string }) {\n * const { data: thread, isLoading, isError } = useTamboV1Thread(threadId);\n *\n * if (isLoading) return <Spinner />;\n * if (isError) return <Error />;\n *\n * return (\n * <div>\n * <div>Status: {thread.runStatus}</div>\n * {thread.messages.map(msg => <Message key={msg.id} message={msg} />)}\n * </div>\n * );\n * }\n * ```\n */\nexport function useTamboV1Thread(\n threadId: string,\n options?: Omit<\n UseQueryOptions<ThreadRetrieveResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useTamboClient();\n\n return useQuery({\n queryKey: [\"v1-threads\", threadId],\n queryFn: async () => await client.threads.retrieve(threadId),\n staleTime: 1000, // Consider stale after 1s (real-time data)\n ...options,\n });\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=use-tambo-v1-thread.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1-thread.test.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-thread.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
2
+ import { renderHook, waitFor } from "@testing-library/react";
3
+ import React from "react";
4
+ import { useTamboClient } from "../../providers/tambo-client-provider";
5
+ import { useTamboV1Thread } from "./use-tambo-v1-thread";
6
+ jest.mock("../../providers/tambo-client-provider", () => ({
7
+ useTamboClient: jest.fn(),
8
+ }));
9
+ describe("useTamboV1Thread", () => {
10
+ const mockThread = {
11
+ id: "thread_123",
12
+ runStatus: "idle",
13
+ messages: [],
14
+ createdAt: "2024-01-01T00:00:00.000Z",
15
+ updatedAt: "2024-01-01T00:00:00.000Z",
16
+ };
17
+ const mockThreadsApi = {
18
+ retrieve: jest.fn(),
19
+ list: jest.fn(),
20
+ };
21
+ const mockTamboAI = {
22
+ apiKey: "",
23
+ threads: mockThreadsApi,
24
+ };
25
+ let queryClient;
26
+ function TestWrapper({ children }) {
27
+ return (React.createElement(QueryClientProvider, { client: queryClient }, children));
28
+ }
29
+ beforeEach(() => {
30
+ queryClient = new QueryClient({
31
+ defaultOptions: {
32
+ queries: {
33
+ retry: false,
34
+ },
35
+ },
36
+ });
37
+ jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);
38
+ mockThreadsApi.retrieve.mockReset();
39
+ });
40
+ it("fetches thread by ID", async () => {
41
+ mockThreadsApi.retrieve.mockResolvedValue(mockThread);
42
+ const { result } = renderHook(() => useTamboV1Thread("thread_123"), {
43
+ wrapper: TestWrapper,
44
+ });
45
+ await waitFor(() => {
46
+ expect(result.current.data).toEqual(mockThread);
47
+ });
48
+ expect(mockThreadsApi.retrieve).toHaveBeenCalledWith("thread_123");
49
+ });
50
+ it("handles loading state", async () => {
51
+ let resolvePromise;
52
+ const promise = new Promise((resolve) => {
53
+ resolvePromise = resolve;
54
+ });
55
+ mockThreadsApi.retrieve.mockReturnValue(promise);
56
+ const { result } = renderHook(() => useTamboV1Thread("thread_123"), {
57
+ wrapper: TestWrapper,
58
+ });
59
+ expect(result.current.isLoading).toBe(true);
60
+ expect(result.current.data).toBeUndefined();
61
+ resolvePromise(mockThread);
62
+ await waitFor(() => {
63
+ expect(result.current.isLoading).toBe(false);
64
+ });
65
+ });
66
+ it("handles error state", async () => {
67
+ const mockError = new Error("Thread not found");
68
+ mockThreadsApi.retrieve.mockRejectedValue(mockError);
69
+ const { result } = renderHook(() => useTamboV1Thread("thread_123"), {
70
+ wrapper: TestWrapper,
71
+ });
72
+ await waitFor(() => {
73
+ expect(result.current.isError).toBe(true);
74
+ expect(result.current.error).toBe(mockError);
75
+ });
76
+ });
77
+ });
78
+ //# sourceMappingURL=use-tambo-v1-thread.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1-thread.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-thread.test.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,IAAI,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,YAAY;QAChB,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,0BAA0B;QACrC,SAAS,EAAE,0BAA0B;KACtC,CAAC;IAEF,MAAM,cAAc,GAAG;QACrB,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;QACnB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;KAChB,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,cAAc;KACF,CAAC;IAExB,IAAI,WAAwB,CAAC;IAE7B,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAiC;QAC9D,OAAO,CACL,oBAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW,IAAG,QAAQ,CAAuB,CAC3E,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG,IAAI,WAAW,CAAC;YAC5B,cAAc,EAAE;gBACd,OAAO,EAAE;oBACP,KAAK,EAAE,KAAK;iBACb;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACzD,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEtD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAClE,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,IAAI,cAAwC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,cAAc,GAAG,OAAO,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAClE,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QAE5C,cAAe,CAAC,UAAU,CAAC,CAAC;QAC5B,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAChD,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAErD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAClE,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, waitFor } from \"@testing-library/react\";\nimport React from \"react\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport { useTamboV1Thread } from \"./use-tambo-v1-thread\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n}));\n\ndescribe(\"useTamboV1Thread\", () => {\n const mockThread = {\n id: \"thread_123\",\n runStatus: \"idle\",\n messages: [],\n createdAt: \"2024-01-01T00:00:00.000Z\",\n updatedAt: \"2024-01-01T00:00:00.000Z\",\n };\n\n const mockThreadsApi = {\n retrieve: jest.fn(),\n list: jest.fn(),\n };\n\n const mockTamboAI = {\n apiKey: \"\",\n threads: mockThreadsApi,\n } as unknown as TamboAI;\n\n let queryClient: QueryClient;\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n );\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n mockThreadsApi.retrieve.mockReset();\n });\n\n it(\"fetches thread by ID\", async () => {\n mockThreadsApi.retrieve.mockResolvedValue(mockThread);\n\n const { result } = renderHook(() => useTamboV1Thread(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await waitFor(() => {\n expect(result.current.data).toEqual(mockThread);\n });\n\n expect(mockThreadsApi.retrieve).toHaveBeenCalledWith(\"thread_123\");\n });\n\n it(\"handles loading state\", async () => {\n let resolvePromise: (value: unknown) => void;\n const promise = new Promise((resolve) => {\n resolvePromise = resolve;\n });\n mockThreadsApi.retrieve.mockReturnValue(promise);\n\n const { result } = renderHook(() => useTamboV1Thread(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.isLoading).toBe(true);\n expect(result.current.data).toBeUndefined();\n\n resolvePromise!(mockThread);\n await waitFor(() => {\n expect(result.current.isLoading).toBe(false);\n });\n });\n\n it(\"handles error state\", async () => {\n const mockError = new Error(\"Thread not found\");\n mockThreadsApi.retrieve.mockRejectedValue(mockError);\n\n const { result } = renderHook(() => useTamboV1Thread(\"thread_123\"), {\n wrapper: TestWrapper,\n });\n\n await waitFor(() => {\n expect(result.current.isError).toBe(true);\n expect(result.current.error).toBe(mockError);\n });\n });\n});\n"]}
@@ -0,0 +1,107 @@
1
+ import type TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { type TamboRegistryContext as TamboRegistryContextType } from "../../providers/tambo-registry-provider";
3
+ import { useStreamDispatch, type ThreadManagement } from "../providers/tambo-v1-stream-context";
4
+ import type { StreamingState } from "../types/thread";
5
+ import type { TamboV1Message } from "../types/message";
6
+ import type { ThreadState } from "../utils/event-accumulator";
7
+ /**
8
+ * Return type for useTamboV1 hook
9
+ */
10
+ export interface UseTamboV1Return {
11
+ /**
12
+ * The Tambo API client instance
13
+ */
14
+ client: TamboAI;
15
+ /**
16
+ * Current thread state for the given threadId, or undefined if not loaded
17
+ */
18
+ thread: ThreadState | undefined;
19
+ /**
20
+ * Messages in the current thread
21
+ */
22
+ messages: TamboV1Message[];
23
+ /**
24
+ * Current streaming state
25
+ */
26
+ streamingState: StreamingState;
27
+ /**
28
+ * Whether the thread is currently streaming a response
29
+ */
30
+ isStreaming: boolean;
31
+ /**
32
+ * Whether the thread is waiting for the AI to start responding
33
+ */
34
+ isWaiting: boolean;
35
+ /**
36
+ * Whether the thread is idle (not streaming or waiting)
37
+ */
38
+ isIdle: boolean;
39
+ /**
40
+ * Register a component with the registry
41
+ */
42
+ registerComponent: TamboRegistryContextType["registerComponent"];
43
+ /**
44
+ * Register a tool with the registry
45
+ */
46
+ registerTool: TamboRegistryContextType["registerTool"];
47
+ /**
48
+ * Register multiple tools with the registry
49
+ */
50
+ registerTools: TamboRegistryContextType["registerTools"];
51
+ /**
52
+ * The component registry (Map of name -> component definition)
53
+ */
54
+ componentList: TamboRegistryContextType["componentList"];
55
+ /**
56
+ * The tool registry (Map of name -> tool definition)
57
+ */
58
+ toolRegistry: TamboRegistryContextType["toolRegistry"];
59
+ /**
60
+ * Current thread ID (may be null if no thread is active)
61
+ */
62
+ currentThreadId: string | null;
63
+ /**
64
+ * Initialize a new thread in the stream context
65
+ */
66
+ initThread: ThreadManagement["initThread"];
67
+ /**
68
+ * Switch the current active thread
69
+ */
70
+ switchThread: ThreadManagement["switchThread"];
71
+ /**
72
+ * Start a new thread (generates a temporary ID)
73
+ */
74
+ startNewThread: ThreadManagement["startNewThread"];
75
+ /**
76
+ * Dispatch function for stream events (advanced usage)
77
+ */
78
+ dispatch: ReturnType<typeof useStreamDispatch>;
79
+ }
80
+ /**
81
+ * Main hook for accessing Tambo v1 functionality.
82
+ *
83
+ * Combines thread state, streaming status, registry, and client
84
+ * into a single convenient hook.
85
+ * @param threadId - Optional thread ID to get state for
86
+ * @returns Combined v1 context with thread state and utilities
87
+ * @example
88
+ * ```tsx
89
+ * function ChatInterface() {
90
+ * const {
91
+ * thread,
92
+ * messages,
93
+ * isStreaming,
94
+ * registerComponent,
95
+ * } = useTamboV1('thread_123');
96
+ *
97
+ * return (
98
+ * <div>
99
+ * {messages.map(msg => <Message key={msg.id} message={msg} />)}
100
+ * {isStreaming && <LoadingIndicator />}
101
+ * </div>
102
+ * );
103
+ * }
104
+ * ```
105
+ */
106
+ export declare function useTamboV1(threadId?: string): UseTamboV1Return;
107
+ //# sourceMappingURL=use-tambo-v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAEL,KAAK,oBAAoB,IAAI,wBAAwB,EACtD,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,iBAAiB,EAEjB,KAAK,gBAAgB,EACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,cAAc,EAAE,CAAC;IAE3B;;OAEG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,iBAAiB,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;IAEjE;;OAEG;IACH,YAAY,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAEvD;;OAEG;IACH,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IAEzD;;OAEG;IACH,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IAEzD;;OAEG;IACH,YAAY,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAEvD;;OAEG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAE3C;;OAEG;IACH,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAE/C;;OAEG;IACH,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgD9D"}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ /**
3
+ * useTamboV1 - Main Hook for v1 API
4
+ *
5
+ * Combines all v1 contexts into a single hook for convenient access
6
+ * to thread state, streaming status, registry, and client.
7
+ */
8
+ import { useContext, useMemo } from "react";
9
+ import { useTamboClient } from "../../providers/tambo-client-provider";
10
+ import { TamboRegistryContext, } from "../../providers/tambo-registry-provider";
11
+ import { useStreamState, useStreamDispatch, useThreadManagement, } from "../providers/tambo-v1-stream-context";
12
+ /**
13
+ * Main hook for accessing Tambo v1 functionality.
14
+ *
15
+ * Combines thread state, streaming status, registry, and client
16
+ * into a single convenient hook.
17
+ * @param threadId - Optional thread ID to get state for
18
+ * @returns Combined v1 context with thread state and utilities
19
+ * @example
20
+ * ```tsx
21
+ * function ChatInterface() {
22
+ * const {
23
+ * thread,
24
+ * messages,
25
+ * isStreaming,
26
+ * registerComponent,
27
+ * } = useTamboV1('thread_123');
28
+ *
29
+ * return (
30
+ * <div>
31
+ * {messages.map(msg => <Message key={msg.id} message={msg} />)}
32
+ * {isStreaming && <LoadingIndicator />}
33
+ * </div>
34
+ * );
35
+ * }
36
+ * ```
37
+ */
38
+ export function useTamboV1(threadId) {
39
+ const client = useTamboClient();
40
+ const streamState = useStreamState();
41
+ const dispatch = useStreamDispatch();
42
+ const registry = useContext(TamboRegistryContext);
43
+ const threadManagement = useThreadManagement();
44
+ // Get thread state for the given threadId (or current thread if not specified)
45
+ const effectiveThreadId = threadId ?? streamState.currentThreadId;
46
+ const threadState = effectiveThreadId
47
+ ? streamState.threadMap[effectiveThreadId]
48
+ : undefined;
49
+ // Memoize the return object to prevent unnecessary re-renders
50
+ return useMemo(() => {
51
+ const thread = threadState;
52
+ const messages = thread?.thread.messages ?? [];
53
+ const streamingState = thread?.streaming ?? {
54
+ status: "idle",
55
+ };
56
+ return {
57
+ client,
58
+ thread,
59
+ messages,
60
+ streamingState,
61
+ isStreaming: streamingState.status === "streaming",
62
+ isWaiting: streamingState.status === "waiting",
63
+ isIdle: streamingState.status === "idle",
64
+ registerComponent: registry.registerComponent,
65
+ registerTool: registry.registerTool,
66
+ registerTools: registry.registerTools,
67
+ componentList: registry.componentList,
68
+ toolRegistry: registry.toolRegistry,
69
+ currentThreadId: streamState.currentThreadId,
70
+ initThread: threadManagement.initThread,
71
+ switchThread: threadManagement.switchThread,
72
+ startNewThread: threadManagement.startNewThread,
73
+ dispatch,
74
+ };
75
+ }, [
76
+ client,
77
+ threadState,
78
+ registry,
79
+ streamState.currentThreadId,
80
+ threadManagement,
81
+ dispatch,
82
+ ]);
83
+ }
84
+ //# sourceMappingURL=use-tambo-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EACL,oBAAoB,GAErB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,sCAAsC,CAAC;AA+F9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,UAAU,CAAC,QAAiB;IAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAE/C,+EAA+E;IAC/E,MAAM,iBAAiB,GAAG,QAAQ,IAAI,WAAW,CAAC,eAAe,CAAC;IAClE,MAAM,WAAW,GAAG,iBAAiB;QACnC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,iBAAiB,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAC;IAEd,8DAA8D;IAC9D,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,WAAW,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAmB,MAAM,EAAE,SAAS,IAAI;YAC1D,MAAM,EAAE,MAAe;SACxB,CAAC;QAEF,OAAO;YACL,MAAM;YACN,MAAM;YACN,QAAQ;YACR,cAAc;YACd,WAAW,EAAE,cAAc,CAAC,MAAM,KAAK,WAAW;YAClD,SAAS,EAAE,cAAc,CAAC,MAAM,KAAK,SAAS;YAC9C,MAAM,EAAE,cAAc,CAAC,MAAM,KAAK,MAAM;YACxC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;YAC7C,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,YAAY,EAAE,gBAAgB,CAAC,YAAY;YAC3C,cAAc,EAAE,gBAAgB,CAAC,cAAc;YAC/C,QAAQ;SACT,CAAC;IACJ,CAAC,EAAE;QACD,MAAM;QACN,WAAW;QACX,QAAQ;QACR,WAAW,CAAC,eAAe;QAC3B,gBAAgB;QAChB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC","sourcesContent":["\"use client\";\n\n/**\n * useTamboV1 - Main Hook for v1 API\n *\n * Combines all v1 contexts into a single hook for convenient access\n * to thread state, streaming status, registry, and client.\n */\n\nimport { useContext, useMemo } from \"react\";\nimport type TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport {\n useStreamState,\n useStreamDispatch,\n useThreadManagement,\n type ThreadManagement,\n} from \"../providers/tambo-v1-stream-context\";\nimport type { StreamingState } from \"../types/thread\";\nimport type { TamboV1Message } from \"../types/message\";\nimport type { ThreadState } from \"../utils/event-accumulator\";\n\n/**\n * Return type for useTamboV1 hook\n */\nexport interface UseTamboV1Return {\n /**\n * The Tambo API client instance\n */\n client: TamboAI;\n\n /**\n * Current thread state for the given threadId, or undefined if not loaded\n */\n thread: ThreadState | undefined;\n\n /**\n * Messages in the current thread\n */\n messages: TamboV1Message[];\n\n /**\n * Current streaming state\n */\n streamingState: StreamingState;\n\n /**\n * Whether the thread is currently streaming a response\n */\n isStreaming: boolean;\n\n /**\n * Whether the thread is waiting for the AI to start responding\n */\n isWaiting: boolean;\n\n /**\n * Whether the thread is idle (not streaming or waiting)\n */\n isIdle: boolean;\n\n /**\n * Register a component with the registry\n */\n registerComponent: TamboRegistryContextType[\"registerComponent\"];\n\n /**\n * Register a tool with the registry\n */\n registerTool: TamboRegistryContextType[\"registerTool\"];\n\n /**\n * Register multiple tools with the registry\n */\n registerTools: TamboRegistryContextType[\"registerTools\"];\n\n /**\n * The component registry (Map of name -> component definition)\n */\n componentList: TamboRegistryContextType[\"componentList\"];\n\n /**\n * The tool registry (Map of name -> tool definition)\n */\n toolRegistry: TamboRegistryContextType[\"toolRegistry\"];\n\n /**\n * Current thread ID (may be null if no thread is active)\n */\n currentThreadId: string | null;\n\n /**\n * Initialize a new thread in the stream context\n */\n initThread: ThreadManagement[\"initThread\"];\n\n /**\n * Switch the current active thread\n */\n switchThread: ThreadManagement[\"switchThread\"];\n\n /**\n * Start a new thread (generates a temporary ID)\n */\n startNewThread: ThreadManagement[\"startNewThread\"];\n\n /**\n * Dispatch function for stream events (advanced usage)\n */\n dispatch: ReturnType<typeof useStreamDispatch>;\n}\n\n/**\n * Main hook for accessing Tambo v1 functionality.\n *\n * Combines thread state, streaming status, registry, and client\n * into a single convenient hook.\n * @param threadId - Optional thread ID to get state for\n * @returns Combined v1 context with thread state and utilities\n * @example\n * ```tsx\n * function ChatInterface() {\n * const {\n * thread,\n * messages,\n * isStreaming,\n * registerComponent,\n * } = useTamboV1('thread_123');\n *\n * return (\n * <div>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useTamboV1(threadId?: string): UseTamboV1Return {\n const client = useTamboClient();\n const streamState = useStreamState();\n const dispatch = useStreamDispatch();\n const registry = useContext(TamboRegistryContext);\n const threadManagement = useThreadManagement();\n\n // Get thread state for the given threadId (or current thread if not specified)\n const effectiveThreadId = threadId ?? streamState.currentThreadId;\n const threadState = effectiveThreadId\n ? streamState.threadMap[effectiveThreadId]\n : undefined;\n\n // Memoize the return object to prevent unnecessary re-renders\n return useMemo(() => {\n const thread = threadState;\n const messages = thread?.thread.messages ?? [];\n const streamingState: StreamingState = thread?.streaming ?? {\n status: \"idle\" as const,\n };\n\n return {\n client,\n thread,\n messages,\n streamingState,\n isStreaming: streamingState.status === \"streaming\",\n isWaiting: streamingState.status === \"waiting\",\n isIdle: streamingState.status === \"idle\",\n registerComponent: registry.registerComponent,\n registerTool: registry.registerTool,\n registerTools: registry.registerTools,\n componentList: registry.componentList,\n toolRegistry: registry.toolRegistry,\n currentThreadId: streamState.currentThreadId,\n initThread: threadManagement.initThread,\n switchThread: threadManagement.switchThread,\n startNewThread: threadManagement.startNewThread,\n dispatch,\n };\n }, [\n client,\n threadState,\n registry,\n streamState.currentThreadId,\n threadManagement,\n dispatch,\n ]);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=use-tambo-v1.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-v1.test.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.test.tsx"],"names":[],"mappings":""}