@tambo-ai/react 1.1.0 → 1.2.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 (457) hide show
  1. package/dist/context-helpers/current-interactables-context-helper.d.ts +16 -2
  2. package/dist/context-helpers/current-interactables-context-helper.d.ts.map +1 -1
  3. package/dist/context-helpers/current-interactables-context-helper.js.map +1 -1
  4. package/dist/context-helpers/current-interactables-context-helper.test.d.ts +2 -0
  5. package/dist/context-helpers/current-interactables-context-helper.test.d.ts.map +1 -0
  6. package/dist/context-helpers/current-interactables-context-helper.test.js +70 -0
  7. package/dist/context-helpers/current-interactables-context-helper.test.js.map +1 -0
  8. package/dist/mcp/elicitation.d.ts +3 -37
  9. package/dist/mcp/elicitation.d.ts.map +1 -1
  10. package/dist/mcp/elicitation.js +7 -24
  11. package/dist/mcp/elicitation.js.map +1 -1
  12. package/dist/mcp/index.d.ts +4 -4
  13. package/dist/mcp/index.d.ts.map +1 -1
  14. package/dist/mcp/index.js +2 -2
  15. package/dist/mcp/index.js.map +1 -1
  16. package/dist/mcp/mcp-client.test.js +17 -17
  17. package/dist/mcp/mcp-client.test.js.map +1 -1
  18. package/dist/mcp/mcp-hooks.d.ts.map +1 -1
  19. package/dist/mcp/mcp-hooks.js +8 -5
  20. package/dist/mcp/mcp-hooks.js.map +1 -1
  21. package/dist/mcp/mcp-hooks.test.js +30 -29
  22. package/dist/mcp/mcp-hooks.test.js.map +1 -1
  23. package/dist/mcp/tambo-mcp-provider.d.ts +6 -9
  24. package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
  25. package/dist/mcp/tambo-mcp-provider.js +9 -13
  26. package/dist/mcp/tambo-mcp-provider.js.map +1 -1
  27. package/dist/mcp/tambo-mcp-provider.test.js +26 -25
  28. package/dist/mcp/tambo-mcp-provider.test.js.map +1 -1
  29. package/dist/mcp/use-mcp-servers.test.js +2 -1
  30. package/dist/mcp/use-mcp-servers.test.js.map +1 -1
  31. package/dist/model/component-metadata.d.ts +7 -372
  32. package/dist/model/component-metadata.d.ts.map +1 -1
  33. package/dist/model/component-metadata.js.map +1 -1
  34. package/dist/model/validate-input.test.d.ts +2 -0
  35. package/dist/model/validate-input.test.d.ts.map +1 -0
  36. package/dist/model/validate-input.test.js +38 -0
  37. package/dist/model/validate-input.test.js.map +1 -0
  38. package/dist/providers/tambo-interactable-provider.d.ts +7 -7
  39. package/dist/providers/tambo-registry-provider.d.ts +1 -1
  40. package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
  41. package/dist/providers/tambo-registry-provider.js.map +1 -1
  42. package/dist/providers/tambo-registry-schema-compat.test.js +4 -4
  43. package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -1
  44. package/dist/schema/index.d.ts +2 -4
  45. package/dist/schema/index.d.ts.map +1 -1
  46. package/dist/schema/index.js +9 -11
  47. package/dist/schema/index.js.map +1 -1
  48. package/dist/schema/json-schema.d.ts +1 -17
  49. package/dist/schema/json-schema.d.ts.map +1 -1
  50. package/dist/schema/json-schema.js +5 -69
  51. package/dist/schema/json-schema.js.map +1 -1
  52. package/dist/schema/schema.test.js +24 -25
  53. package/dist/schema/schema.test.js.map +1 -1
  54. package/dist/schema/standard-schema.test.js +25 -25
  55. package/dist/schema/standard-schema.test.js.map +1 -1
  56. package/dist/schema/validate.test.js +33 -33
  57. package/dist/schema/validate.test.js.map +1 -1
  58. package/dist/testing/tools.d.ts +4 -4
  59. package/dist/testing/tools.test.d.ts +2 -0
  60. package/dist/testing/tools.test.d.ts.map +1 -0
  61. package/dist/testing/tools.test.js +60 -0
  62. package/dist/testing/tools.test.js.map +1 -0
  63. package/dist/util/mcp-server-utils.d.ts +1 -1
  64. package/dist/util/mcp-server-utils.d.ts.map +1 -1
  65. package/dist/util/mcp-server-utils.js +4 -4
  66. package/dist/util/mcp-server-utils.js.map +1 -1
  67. package/dist/util/mcp-server-utils.test.js +27 -27
  68. package/dist/util/mcp-server-utils.test.js.map +1 -1
  69. package/dist/util/registry.js +1 -1
  70. package/dist/util/registry.js.map +1 -1
  71. package/dist/util/resource-content-resolver.js +5 -5
  72. package/dist/util/resource-content-resolver.js.map +1 -1
  73. package/dist/util/resource-content-resolver.test.js +6 -6
  74. package/dist/util/resource-content-resolver.test.js.map +1 -1
  75. package/dist/util/tool-caller.test.d.ts +2 -0
  76. package/dist/util/tool-caller.test.d.ts.map +1 -0
  77. package/dist/util/tool-caller.test.js +71 -0
  78. package/dist/util/tool-caller.test.js.map +1 -0
  79. package/dist/v1/__tests__/v1-interactables.test.js +1 -0
  80. package/dist/v1/__tests__/v1-interactables.test.js.map +1 -1
  81. package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts +1 -1
  82. package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
  83. package/dist/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
  84. package/dist/v1/hooks/use-tambo-v1-component-state.js +2 -2
  85. package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
  86. package/dist/v1/hooks/use-tambo-v1-component-state.test.js +1 -1
  87. package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
  88. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +1 -1
  89. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  90. package/dist/v1/hooks/use-tambo-v1-send-message.js +17 -17
  91. package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  92. package/dist/v1/hooks/use-tambo-v1-send-message.test.js +1 -1
  93. package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  94. package/dist/v1/hooks/use-tambo-v1-stream-status.js +2 -2
  95. package/dist/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
  96. package/dist/v1/hooks/use-tambo-v1-stream-status.test.js +9 -5
  97. package/dist/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
  98. package/dist/v1/hooks/use-tambo-v1-suggestions.js +2 -2
  99. package/dist/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
  100. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +1 -0
  101. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
  102. package/dist/v1/hooks/use-tambo-v1.d.ts +7 -6
  103. package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -1
  104. package/dist/v1/hooks/use-tambo-v1.js +2 -2
  105. package/dist/v1/hooks/use-tambo-v1.js.map +1 -1
  106. package/dist/v1/hooks/use-tambo-v1.test.js +23 -23
  107. package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
  108. package/dist/v1/index.d.ts +6 -6
  109. package/dist/v1/index.d.ts.map +1 -1
  110. package/dist/v1/index.js +2 -2
  111. package/dist/v1/index.js.map +1 -1
  112. package/dist/v1/providers/tambo-v1-provider.d.ts +2 -1
  113. package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  114. package/dist/v1/providers/tambo-v1-provider.js +2 -0
  115. package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
  116. package/dist/v1/providers/tambo-v1-stream-context.d.ts +2 -2
  117. package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  118. package/dist/v1/providers/tambo-v1-stream-context.js +9 -9
  119. package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
  120. package/dist/v1/providers/tambo-v1-stream-context.test.js +35 -0
  121. package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  122. package/dist/v1/providers/tambo-v1-stub-provider.d.ts +1 -1
  123. package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
  124. package/dist/v1/providers/tambo-v1-stub-provider.js +1 -1
  125. package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
  126. package/dist/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
  127. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +1 -1
  128. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
  129. package/dist/v1/providers/tambo-v1-thread-input-provider.js +2 -2
  130. package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
  131. package/dist/v1/types/event.test.js +13 -13
  132. package/dist/v1/types/event.test.js.map +1 -1
  133. package/dist/v1/types/message.d.ts +12 -109
  134. package/dist/v1/types/message.d.ts.map +1 -1
  135. package/dist/v1/types/message.js +0 -7
  136. package/dist/v1/types/message.js.map +1 -1
  137. package/dist/v1/utils/event-accumulator.test.js +183 -184
  138. package/dist/v1/utils/event-accumulator.test.js.map +1 -1
  139. package/dist/v1/utils/json-patch.test.js +4 -4
  140. package/dist/v1/utils/json-patch.test.js.map +1 -1
  141. package/dist/v1/utils/keyed-throttle.test.js +12 -12
  142. package/dist/v1/utils/keyed-throttle.test.js.map +1 -1
  143. package/dist/v1/utils/registry-conversion.test.js +13 -13
  144. package/dist/v1/utils/registry-conversion.test.js.map +1 -1
  145. package/dist/v1/utils/stream-handler.test.js +5 -5
  146. package/dist/v1/utils/stream-handler.test.js.map +1 -1
  147. package/dist/v1/utils/tool-call-tracker.test.js +15 -9
  148. package/dist/v1/utils/tool-call-tracker.test.js.map +1 -1
  149. package/dist/v1/utils/tool-executor.test.js +25 -26
  150. package/dist/v1/utils/tool-executor.test.js.map +1 -1
  151. package/dist/v1/utils/unstrictify.test.js +16 -16
  152. package/dist/v1/utils/unstrictify.test.js.map +1 -1
  153. package/esm/context-helpers/current-interactables-context-helper.d.ts +16 -2
  154. package/esm/context-helpers/current-interactables-context-helper.d.ts.map +1 -1
  155. package/esm/context-helpers/current-interactables-context-helper.js.map +1 -1
  156. package/esm/context-helpers/current-interactables-context-helper.test.d.ts +2 -0
  157. package/esm/context-helpers/current-interactables-context-helper.test.d.ts.map +1 -0
  158. package/esm/context-helpers/current-interactables-context-helper.test.js +68 -0
  159. package/esm/context-helpers/current-interactables-context-helper.test.js.map +1 -0
  160. package/esm/mcp/elicitation.d.ts +3 -37
  161. package/esm/mcp/elicitation.d.ts.map +1 -1
  162. package/esm/mcp/elicitation.js +4 -24
  163. package/esm/mcp/elicitation.js.map +1 -1
  164. package/esm/mcp/index.d.ts +4 -4
  165. package/esm/mcp/index.d.ts.map +1 -1
  166. package/esm/mcp/index.js +1 -1
  167. package/esm/mcp/index.js.map +1 -1
  168. package/esm/mcp/mcp-client.test.js +1 -1
  169. package/esm/mcp/mcp-client.test.js.map +1 -1
  170. package/esm/mcp/mcp-hooks.d.ts.map +1 -1
  171. package/esm/mcp/mcp-hooks.js +4 -1
  172. package/esm/mcp/mcp-hooks.js.map +1 -1
  173. package/esm/mcp/mcp-hooks.test.js +3 -2
  174. package/esm/mcp/mcp-hooks.test.js.map +1 -1
  175. package/esm/mcp/tambo-mcp-provider.d.ts +6 -9
  176. package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
  177. package/esm/mcp/tambo-mcp-provider.js +4 -8
  178. package/esm/mcp/tambo-mcp-provider.js.map +1 -1
  179. package/esm/mcp/tambo-mcp-provider.test.js +3 -2
  180. package/esm/mcp/tambo-mcp-provider.test.js.map +1 -1
  181. package/esm/mcp/use-mcp-servers.test.js +2 -1
  182. package/esm/mcp/use-mcp-servers.test.js.map +1 -1
  183. package/esm/model/component-metadata.d.ts +7 -372
  184. package/esm/model/component-metadata.d.ts.map +1 -1
  185. package/esm/model/component-metadata.js.map +1 -1
  186. package/esm/model/validate-input.test.d.ts +2 -0
  187. package/esm/model/validate-input.test.d.ts.map +1 -0
  188. package/esm/model/validate-input.test.js +36 -0
  189. package/esm/model/validate-input.test.js.map +1 -0
  190. package/esm/providers/tambo-interactable-provider.d.ts +7 -7
  191. package/esm/providers/tambo-registry-provider.d.ts +1 -1
  192. package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
  193. package/esm/providers/tambo-registry-provider.js.map +1 -1
  194. package/esm/providers/tambo-registry-schema-compat.test.js +4 -4
  195. package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -1
  196. package/esm/schema/index.d.ts +2 -4
  197. package/esm/schema/index.d.ts.map +1 -1
  198. package/esm/schema/index.js +2 -4
  199. package/esm/schema/index.js.map +1 -1
  200. package/esm/schema/json-schema.d.ts +1 -17
  201. package/esm/schema/json-schema.d.ts.map +1 -1
  202. package/esm/schema/json-schema.js +2 -67
  203. package/esm/schema/json-schema.js.map +1 -1
  204. package/esm/schema/schema.test.js +1 -2
  205. package/esm/schema/schema.test.js.map +1 -1
  206. package/esm/schema/standard-schema.test.js +1 -1
  207. package/esm/schema/standard-schema.test.js.map +1 -1
  208. package/esm/schema/validate.test.js +1 -1
  209. package/esm/schema/validate.test.js.map +1 -1
  210. package/esm/testing/tools.d.ts +4 -4
  211. package/esm/testing/tools.test.d.ts +2 -0
  212. package/esm/testing/tools.test.d.ts.map +1 -0
  213. package/esm/testing/tools.test.js +58 -0
  214. package/esm/testing/tools.test.js.map +1 -0
  215. package/esm/util/mcp-server-utils.d.ts +1 -1
  216. package/esm/util/mcp-server-utils.d.ts.map +1 -1
  217. package/esm/util/mcp-server-utils.js +1 -1
  218. package/esm/util/mcp-server-utils.js.map +1 -1
  219. package/esm/util/mcp-server-utils.test.js +1 -1
  220. package/esm/util/mcp-server-utils.test.js.map +1 -1
  221. package/esm/util/registry.js +1 -1
  222. package/esm/util/registry.js.map +1 -1
  223. package/esm/util/resource-content-resolver.js +1 -1
  224. package/esm/util/resource-content-resolver.js.map +1 -1
  225. package/esm/util/resource-content-resolver.test.js +2 -2
  226. package/esm/util/resource-content-resolver.test.js.map +1 -1
  227. package/esm/util/tool-caller.test.d.ts +2 -0
  228. package/esm/util/tool-caller.test.d.ts.map +1 -0
  229. package/esm/util/tool-caller.test.js +69 -0
  230. package/esm/util/tool-caller.test.js.map +1 -0
  231. package/esm/v1/__tests__/v1-interactables.test.js +1 -0
  232. package/esm/v1/__tests__/v1-interactables.test.js.map +1 -1
  233. package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts +1 -1
  234. package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
  235. package/esm/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
  236. package/esm/v1/hooks/use-tambo-v1-component-state.js +1 -1
  237. package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
  238. package/esm/v1/hooks/use-tambo-v1-component-state.test.js +1 -1
  239. package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
  240. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +1 -1
  241. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  242. package/esm/v1/hooks/use-tambo-v1-send-message.js +6 -6
  243. package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  244. package/esm/v1/hooks/use-tambo-v1-send-message.test.js +1 -1
  245. package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  246. package/esm/v1/hooks/use-tambo-v1-stream-status.js +1 -1
  247. package/esm/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
  248. package/esm/v1/hooks/use-tambo-v1-stream-status.test.js +9 -5
  249. package/esm/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
  250. package/esm/v1/hooks/use-tambo-v1-suggestions.js +1 -1
  251. package/esm/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
  252. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +1 -0
  253. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
  254. package/esm/v1/hooks/use-tambo-v1.d.ts +7 -6
  255. package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -1
  256. package/esm/v1/hooks/use-tambo-v1.js +1 -1
  257. package/esm/v1/hooks/use-tambo-v1.js.map +1 -1
  258. package/esm/v1/hooks/use-tambo-v1.test.js +22 -22
  259. package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
  260. package/esm/v1/index.d.ts +6 -6
  261. package/esm/v1/index.d.ts.map +1 -1
  262. package/esm/v1/index.js +1 -1
  263. package/esm/v1/index.js.map +1 -1
  264. package/esm/v1/providers/tambo-v1-provider.d.ts +2 -1
  265. package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  266. package/esm/v1/providers/tambo-v1-provider.js +2 -0
  267. package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
  268. package/esm/v1/providers/tambo-v1-stream-context.d.ts +2 -2
  269. package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  270. package/esm/v1/providers/tambo-v1-stream-context.js +1 -1
  271. package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
  272. package/esm/v1/providers/tambo-v1-stream-context.test.js +35 -0
  273. package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  274. package/esm/v1/providers/tambo-v1-stub-provider.d.ts +1 -1
  275. package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
  276. package/esm/v1/providers/tambo-v1-stub-provider.js +1 -1
  277. package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
  278. package/esm/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
  279. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +1 -1
  280. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
  281. package/esm/v1/providers/tambo-v1-thread-input-provider.js +1 -1
  282. package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
  283. package/esm/v1/types/event.test.js +1 -1
  284. package/esm/v1/types/event.test.js.map +1 -1
  285. package/esm/v1/types/message.d.ts +12 -109
  286. package/esm/v1/types/message.d.ts.map +1 -1
  287. package/esm/v1/types/message.js +0 -7
  288. package/esm/v1/types/message.js.map +1 -1
  289. package/esm/v1/utils/event-accumulator.test.js +2 -3
  290. package/esm/v1/utils/event-accumulator.test.js.map +1 -1
  291. package/esm/v1/utils/json-patch.test.js +1 -1
  292. package/esm/v1/utils/json-patch.test.js.map +1 -1
  293. package/esm/v1/utils/keyed-throttle.test.js +1 -1
  294. package/esm/v1/utils/keyed-throttle.test.js.map +1 -1
  295. package/esm/v1/utils/registry-conversion.test.js +1 -1
  296. package/esm/v1/utils/registry-conversion.test.js.map +1 -1
  297. package/esm/v1/utils/stream-handler.test.js +1 -1
  298. package/esm/v1/utils/stream-handler.test.js.map +1 -1
  299. package/esm/v1/utils/tool-call-tracker.test.js +9 -3
  300. package/esm/v1/utils/tool-call-tracker.test.js.map +1 -1
  301. package/esm/v1/utils/tool-executor.test.js +1 -2
  302. package/esm/v1/utils/tool-executor.test.js.map +1 -1
  303. package/esm/v1/utils/unstrictify.test.js +1 -1
  304. package/esm/v1/utils/unstrictify.test.js.map +1 -1
  305. package/package.json +10 -11
  306. package/dist/mcp/mcp-client.d.ts +0 -185
  307. package/dist/mcp/mcp-client.d.ts.map +0 -1
  308. package/dist/mcp/mcp-client.js +0 -219
  309. package/dist/mcp/mcp-client.js.map +0 -1
  310. package/dist/mcp/mcp-constants.d.ts +0 -19
  311. package/dist/mcp/mcp-constants.d.ts.map +0 -1
  312. package/dist/mcp/mcp-constants.js +0 -21
  313. package/dist/mcp/mcp-constants.js.map +0 -1
  314. package/dist/model/mcp-server-info.d.ts +0 -76
  315. package/dist/model/mcp-server-info.d.ts.map +0 -1
  316. package/dist/model/mcp-server-info.js +0 -29
  317. package/dist/model/mcp-server-info.js.map +0 -1
  318. package/dist/schema/schema.d.ts +0 -49
  319. package/dist/schema/schema.d.ts.map +0 -1
  320. package/dist/schema/schema.js +0 -129
  321. package/dist/schema/schema.js.map +0 -1
  322. package/dist/schema/standard-schema.d.ts +0 -22
  323. package/dist/schema/standard-schema.d.ts.map +0 -1
  324. package/dist/schema/standard-schema.js +0 -42
  325. package/dist/schema/standard-schema.js.map +0 -1
  326. package/dist/schema/validate.d.ts +0 -14
  327. package/dist/schema/validate.d.ts.map +0 -1
  328. package/dist/schema/validate.js +0 -148
  329. package/dist/schema/validate.js.map +0 -1
  330. package/dist/v1/types/auth.d.ts +0 -24
  331. package/dist/v1/types/auth.d.ts.map +0 -1
  332. package/dist/v1/types/auth.js +0 -3
  333. package/dist/v1/types/auth.js.map +0 -1
  334. package/dist/v1/types/event.d.ts +0 -89
  335. package/dist/v1/types/event.d.ts.map +0 -1
  336. package/dist/v1/types/event.js +0 -57
  337. package/dist/v1/types/event.js.map +0 -1
  338. package/dist/v1/types/thread.d.ts +0 -58
  339. package/dist/v1/types/thread.d.ts.map +0 -1
  340. package/dist/v1/types/thread.js +0 -9
  341. package/dist/v1/types/thread.js.map +0 -1
  342. package/dist/v1/types/tool-choice.d.ts +0 -8
  343. package/dist/v1/types/tool-choice.d.ts.map +0 -1
  344. package/dist/v1/types/tool-choice.js +0 -3
  345. package/dist/v1/types/tool-choice.js.map +0 -1
  346. package/dist/v1/utils/event-accumulator.d.ts +0 -165
  347. package/dist/v1/utils/event-accumulator.d.ts.map +0 -1
  348. package/dist/v1/utils/event-accumulator.js +0 -1277
  349. package/dist/v1/utils/event-accumulator.js.map +0 -1
  350. package/dist/v1/utils/json-patch.d.ts +0 -18
  351. package/dist/v1/utils/json-patch.d.ts.map +0 -1
  352. package/dist/v1/utils/json-patch.js +0 -35
  353. package/dist/v1/utils/json-patch.js.map +0 -1
  354. package/dist/v1/utils/keyed-throttle.d.ts +0 -42
  355. package/dist/v1/utils/keyed-throttle.d.ts.map +0 -1
  356. package/dist/v1/utils/keyed-throttle.js +0 -86
  357. package/dist/v1/utils/keyed-throttle.js.map +0 -1
  358. package/dist/v1/utils/registry-conversion.d.ts +0 -53
  359. package/dist/v1/utils/registry-conversion.d.ts.map +0 -1
  360. package/dist/v1/utils/registry-conversion.js +0 -115
  361. package/dist/v1/utils/registry-conversion.js.map +0 -1
  362. package/dist/v1/utils/stream-handler.d.ts +0 -45
  363. package/dist/v1/utils/stream-handler.d.ts.map +0 -1
  364. package/dist/v1/utils/stream-handler.js +0 -47
  365. package/dist/v1/utils/stream-handler.js.map +0 -1
  366. package/dist/v1/utils/thread-utils.d.ts +0 -16
  367. package/dist/v1/utils/thread-utils.d.ts.map +0 -1
  368. package/dist/v1/utils/thread-utils.js +0 -34
  369. package/dist/v1/utils/thread-utils.js.map +0 -1
  370. package/dist/v1/utils/tool-call-tracker.d.ts +0 -73
  371. package/dist/v1/utils/tool-call-tracker.d.ts.map +0 -1
  372. package/dist/v1/utils/tool-call-tracker.js +0 -180
  373. package/dist/v1/utils/tool-call-tracker.js.map +0 -1
  374. package/dist/v1/utils/tool-executor.d.ts +0 -67
  375. package/dist/v1/utils/tool-executor.d.ts.map +0 -1
  376. package/dist/v1/utils/tool-executor.js +0 -160
  377. package/dist/v1/utils/tool-executor.js.map +0 -1
  378. package/dist/v1/utils/unstrictify.d.ts +0 -32
  379. package/dist/v1/utils/unstrictify.d.ts.map +0 -1
  380. package/dist/v1/utils/unstrictify.js +0 -159
  381. package/dist/v1/utils/unstrictify.js.map +0 -1
  382. package/esm/mcp/mcp-client.d.ts +0 -185
  383. package/esm/mcp/mcp-client.d.ts.map +0 -1
  384. package/esm/mcp/mcp-client.js +0 -216
  385. package/esm/mcp/mcp-client.js.map +0 -1
  386. package/esm/mcp/mcp-constants.d.ts +0 -19
  387. package/esm/mcp/mcp-constants.d.ts.map +0 -1
  388. package/esm/mcp/mcp-constants.js +0 -18
  389. package/esm/mcp/mcp-constants.js.map +0 -1
  390. package/esm/model/mcp-server-info.d.ts +0 -76
  391. package/esm/model/mcp-server-info.d.ts.map +0 -1
  392. package/esm/model/mcp-server-info.js +0 -25
  393. package/esm/model/mcp-server-info.js.map +0 -1
  394. package/esm/schema/schema.d.ts +0 -49
  395. package/esm/schema/schema.d.ts.map +0 -1
  396. package/esm/schema/schema.js +0 -124
  397. package/esm/schema/schema.js.map +0 -1
  398. package/esm/schema/standard-schema.d.ts +0 -22
  399. package/esm/schema/standard-schema.d.ts.map +0 -1
  400. package/esm/schema/standard-schema.js +0 -39
  401. package/esm/schema/standard-schema.js.map +0 -1
  402. package/esm/schema/validate.d.ts +0 -14
  403. package/esm/schema/validate.d.ts.map +0 -1
  404. package/esm/schema/validate.js +0 -145
  405. package/esm/schema/validate.js.map +0 -1
  406. package/esm/v1/types/auth.d.ts +0 -24
  407. package/esm/v1/types/auth.d.ts.map +0 -1
  408. package/esm/v1/types/auth.js +0 -2
  409. package/esm/v1/types/auth.js.map +0 -1
  410. package/esm/v1/types/event.d.ts +0 -89
  411. package/esm/v1/types/event.d.ts.map +0 -1
  412. package/esm/v1/types/event.js +0 -53
  413. package/esm/v1/types/event.js.map +0 -1
  414. package/esm/v1/types/thread.d.ts +0 -58
  415. package/esm/v1/types/thread.d.ts.map +0 -1
  416. package/esm/v1/types/thread.js +0 -8
  417. package/esm/v1/types/thread.js.map +0 -1
  418. package/esm/v1/types/tool-choice.d.ts +0 -8
  419. package/esm/v1/types/tool-choice.d.ts.map +0 -1
  420. package/esm/v1/types/tool-choice.js +0 -2
  421. package/esm/v1/types/tool-choice.js.map +0 -1
  422. package/esm/v1/utils/event-accumulator.d.ts +0 -165
  423. package/esm/v1/utils/event-accumulator.d.ts.map +0 -1
  424. package/esm/v1/utils/event-accumulator.js +0 -1268
  425. package/esm/v1/utils/event-accumulator.js.map +0 -1
  426. package/esm/v1/utils/json-patch.d.ts +0 -18
  427. package/esm/v1/utils/json-patch.d.ts.map +0 -1
  428. package/esm/v1/utils/json-patch.js +0 -32
  429. package/esm/v1/utils/json-patch.js.map +0 -1
  430. package/esm/v1/utils/keyed-throttle.d.ts +0 -42
  431. package/esm/v1/utils/keyed-throttle.d.ts.map +0 -1
  432. package/esm/v1/utils/keyed-throttle.js +0 -83
  433. package/esm/v1/utils/keyed-throttle.js.map +0 -1
  434. package/esm/v1/utils/registry-conversion.d.ts +0 -53
  435. package/esm/v1/utils/registry-conversion.d.ts.map +0 -1
  436. package/esm/v1/utils/registry-conversion.js +0 -109
  437. package/esm/v1/utils/registry-conversion.js.map +0 -1
  438. package/esm/v1/utils/stream-handler.d.ts +0 -45
  439. package/esm/v1/utils/stream-handler.d.ts.map +0 -1
  440. package/esm/v1/utils/stream-handler.js +0 -44
  441. package/esm/v1/utils/stream-handler.js.map +0 -1
  442. package/esm/v1/utils/thread-utils.d.ts +0 -16
  443. package/esm/v1/utils/thread-utils.d.ts.map +0 -1
  444. package/esm/v1/utils/thread-utils.js +0 -31
  445. package/esm/v1/utils/thread-utils.js.map +0 -1
  446. package/esm/v1/utils/tool-call-tracker.d.ts +0 -73
  447. package/esm/v1/utils/tool-call-tracker.d.ts.map +0 -1
  448. package/esm/v1/utils/tool-call-tracker.js +0 -176
  449. package/esm/v1/utils/tool-call-tracker.js.map +0 -1
  450. package/esm/v1/utils/tool-executor.d.ts +0 -67
  451. package/esm/v1/utils/tool-executor.d.ts.map +0 -1
  452. package/esm/v1/utils/tool-executor.js +0 -154
  453. package/esm/v1/utils/tool-executor.js.map +0 -1
  454. package/esm/v1/utils/unstrictify.d.ts +0 -32
  455. package/esm/v1/utils/unstrictify.d.ts.map +0 -1
  456. package/esm/v1/utils/unstrictify.js +0 -155
  457. package/esm/v1/utils/unstrictify.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"unstrictify.test.js","sourceRoot":"","sources":["../../../src/v1/utils/unstrictify.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\nimport { canBeNull, unstrictifyToolCallParamsFromSchema } from \"./unstrictify\";\n\ndescribe(\"canBeNull\", () => {\n it(\"should return true for schema with type null\", () => {\n const schema: JSONSchema7 = { type: \"null\" };\n expect(canBeNull(schema)).toBe(true);\n });\n\n it(\"should return true for schema with anyOf containing type null\", () => {\n const schema: JSONSchema7 = {\n anyOf: [{ type: \"string\" }, { type: \"null\" }],\n };\n expect(canBeNull(schema)).toBe(true);\n });\n\n it(\"should return true for deeply nested anyOf containing type null\", () => {\n const schema: JSONSchema7 = {\n anyOf: [\n { type: \"string\" },\n {\n anyOf: [{ type: \"number\" }, { type: \"null\" }],\n },\n ],\n };\n expect(canBeNull(schema)).toBe(true);\n });\n\n it(\"should return false for non-object schema\", () => {\n expect(canBeNull(true)).toBe(false);\n expect(canBeNull(\"string\" as JSONSchema7Definition)).toBe(false);\n });\n\n it(\"should return false for schema without null type\", () => {\n const schema: JSONSchema7 = { type: \"string\" };\n expect(canBeNull(schema)).toBe(false);\n });\n\n it(\"should return false for schema with anyOf not containing null type\", () => {\n const schema: JSONSchema7 = {\n anyOf: [{ type: \"string\" }, { type: \"number\" }],\n };\n expect(canBeNull(schema)).toBe(false);\n });\n});\n\ndescribe(\"unstrictifyToolCallParamsFromSchema\", () => {\n it(\"should strip null values for optional non-nullable params\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"number\" },\n },\n required: [\"name\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n name: \"John\",\n age: null,\n });\n\n expect(result).toEqual({ name: \"John\" });\n });\n\n it(\"should preserve pass-through params not in original schema\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n },\n required: [\"name\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n name: \"John\",\n _tambo_statusMessage: \"Processing...\",\n _tambo_displayMessage: \"Hello\",\n });\n\n expect(result).toEqual({\n name: \"John\",\n _tambo_statusMessage: \"Processing...\",\n _tambo_displayMessage: \"Hello\",\n });\n });\n\n it(\"should handle nested object unstrictification with pass-through params\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n user: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n email: { type: \"string\" },\n },\n required: [\"name\"],\n },\n },\n required: [\"user\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n user: { name: \"John\", email: null },\n _tambo_statusMessage: \"Updating user\",\n });\n\n expect(result).toEqual({\n user: { name: \"John\" },\n _tambo_statusMessage: \"Updating user\",\n });\n });\n\n it(\"should return params as-is for non-object schemas\", () => {\n const schema: JSONSchema7 = { type: \"string\" };\n const params = { name: \"John\", _tambo_foo: \"bar\" };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, params);\n\n expect(result).toEqual(params);\n });\n\n it(\"should handle empty params\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n },\n required: [],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {});\n\n expect(result).toEqual({});\n });\n\n it(\"should handle schema with no properties defined\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n anything: \"value\",\n _tambo_status: \"ok\",\n });\n\n // Only _tambo_* keys pass through; unknown keys are dropped\n expect(result).toEqual({\n _tambo_status: \"ok\",\n });\n });\n\n it(\"should drop hallucinated keys not in schema or _tambo_* prefix\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n city: { type: \"string\" },\n },\n required: [\"city\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n city: \"NYC\",\n temperatur: \"celsius\",\n _tambo_statusMessage: \"Fetching\",\n });\n\n expect(result).toEqual({\n city: \"NYC\",\n _tambo_statusMessage: \"Fetching\",\n });\n });\n\n it(\"should handle arrays with nested objects\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n targets: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n range: { type: \"string\" },\n style: {\n type: \"object\",\n properties: {\n bold: { type: \"boolean\" },\n fontFamily: { type: \"string\" },\n },\n required: [],\n },\n },\n required: [\"style\"],\n },\n },\n },\n required: [\"targets\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n targets: [\n { range: \"A1:B1\", style: { bold: true, fontFamily: null } },\n { range: \"A2:A6\", style: { bold: false, fontFamily: null } },\n ],\n });\n\n expect(result).toEqual({\n targets: [\n { range: \"A1:B1\", style: { bold: true } },\n { range: \"A2:A6\", style: { bold: false } },\n ],\n });\n });\n});\n"]}
1
+ {"version":3,"file":"unstrictify.test.js","sourceRoot":"","sources":["../../../src/v1/utils/unstrictify.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\nimport {\n canBeNull,\n unstrictifyToolCallParamsFromSchema,\n} from \"@tambo-ai/client\";\n\ndescribe(\"canBeNull\", () => {\n it(\"should return true for schema with type null\", () => {\n const schema: JSONSchema7 = { type: \"null\" };\n expect(canBeNull(schema)).toBe(true);\n });\n\n it(\"should return true for schema with anyOf containing type null\", () => {\n const schema: JSONSchema7 = {\n anyOf: [{ type: \"string\" }, { type: \"null\" }],\n };\n expect(canBeNull(schema)).toBe(true);\n });\n\n it(\"should return true for deeply nested anyOf containing type null\", () => {\n const schema: JSONSchema7 = {\n anyOf: [\n { type: \"string\" },\n {\n anyOf: [{ type: \"number\" }, { type: \"null\" }],\n },\n ],\n };\n expect(canBeNull(schema)).toBe(true);\n });\n\n it(\"should return false for non-object schema\", () => {\n expect(canBeNull(true)).toBe(false);\n expect(canBeNull(\"string\" as JSONSchema7Definition)).toBe(false);\n });\n\n it(\"should return false for schema without null type\", () => {\n const schema: JSONSchema7 = { type: \"string\" };\n expect(canBeNull(schema)).toBe(false);\n });\n\n it(\"should return false for schema with anyOf not containing null type\", () => {\n const schema: JSONSchema7 = {\n anyOf: [{ type: \"string\" }, { type: \"number\" }],\n };\n expect(canBeNull(schema)).toBe(false);\n });\n});\n\ndescribe(\"unstrictifyToolCallParamsFromSchema\", () => {\n it(\"should strip null values for optional non-nullable params\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"number\" },\n },\n required: [\"name\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n name: \"John\",\n age: null,\n });\n\n expect(result).toEqual({ name: \"John\" });\n });\n\n it(\"should preserve pass-through params not in original schema\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n },\n required: [\"name\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n name: \"John\",\n _tambo_statusMessage: \"Processing...\",\n _tambo_displayMessage: \"Hello\",\n });\n\n expect(result).toEqual({\n name: \"John\",\n _tambo_statusMessage: \"Processing...\",\n _tambo_displayMessage: \"Hello\",\n });\n });\n\n it(\"should handle nested object unstrictification with pass-through params\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n user: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n email: { type: \"string\" },\n },\n required: [\"name\"],\n },\n },\n required: [\"user\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n user: { name: \"John\", email: null },\n _tambo_statusMessage: \"Updating user\",\n });\n\n expect(result).toEqual({\n user: { name: \"John\" },\n _tambo_statusMessage: \"Updating user\",\n });\n });\n\n it(\"should return params as-is for non-object schemas\", () => {\n const schema: JSONSchema7 = { type: \"string\" };\n const params = { name: \"John\", _tambo_foo: \"bar\" };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, params);\n\n expect(result).toEqual(params);\n });\n\n it(\"should handle empty params\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n },\n required: [],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {});\n\n expect(result).toEqual({});\n });\n\n it(\"should handle schema with no properties defined\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n anything: \"value\",\n _tambo_status: \"ok\",\n });\n\n // Only _tambo_* keys pass through; unknown keys are dropped\n expect(result).toEqual({\n _tambo_status: \"ok\",\n });\n });\n\n it(\"should drop hallucinated keys not in schema or _tambo_* prefix\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n city: { type: \"string\" },\n },\n required: [\"city\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n city: \"NYC\",\n temperatur: \"celsius\",\n _tambo_statusMessage: \"Fetching\",\n });\n\n expect(result).toEqual({\n city: \"NYC\",\n _tambo_statusMessage: \"Fetching\",\n });\n });\n\n it(\"should handle arrays with nested objects\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: {\n targets: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n range: { type: \"string\" },\n style: {\n type: \"object\",\n properties: {\n bold: { type: \"boolean\" },\n fontFamily: { type: \"string\" },\n },\n required: [],\n },\n },\n required: [\"style\"],\n },\n },\n },\n required: [\"targets\"],\n };\n\n const result = unstrictifyToolCallParamsFromSchema(schema, {\n targets: [\n { range: \"A1:B1\", style: { bold: true, fontFamily: null } },\n { range: \"A2:A6\", style: { bold: false, fontFamily: null } },\n ],\n });\n\n expect(result).toEqual({\n targets: [\n { range: \"A1:B1\", style: { bold: true } },\n { range: \"A2:A6\", style: { bold: false } },\n ],\n });\n });\n});\n"]}
@@ -1,4 +1,17 @@
1
- import { ContextHelperFn } from "./types.js";
1
+ import type { ContextHelperFn } from "./types.js";
2
+ interface InteractableComponentMetadata {
3
+ id: string;
4
+ componentName: string;
5
+ description: string;
6
+ props: unknown;
7
+ propsSchema: string;
8
+ state: unknown;
9
+ isSelectedForInteraction: boolean;
10
+ stateSchema: string;
11
+ }
12
+ export interface InteractablesContext {
13
+ components: InteractableComponentMetadata[];
14
+ }
2
15
  /**
3
16
  * Prebuilt context helper that provides information about all interactable components currently on the page.
4
17
  * This gives the AI awareness of what components it can interact with and their current state.
@@ -24,5 +37,6 @@ export declare const currentInteractablesContextHelper: ContextHelperFn;
24
37
  * @param components Array of interactable components
25
38
  * @returns A context helper function that returns component metadata or null if no components exist
26
39
  */
27
- export declare const createInteractablesContextHelper: (components: unknown[]) => ContextHelperFn;
40
+ export declare const createInteractablesContextHelper: (components: unknown[]) => (() => InteractablesContext | null);
41
+ export {};
28
42
  //# sourceMappingURL=current-interactables-context-helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"current-interactables-context-helper.d.ts","sourceRoot":"","sources":["../../src/context-helpers/current-interactables-context-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,iCAAiC,EAAE,eAI/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,GAC3C,YAAY,OAAO,EAAE,KACpB,eAyCF,CAAC"}
1
+ {"version":3,"file":"current-interactables-context-helper.d.ts","sourceRoot":"","sources":["../../src/context-helpers/current-interactables-context-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,UAAU,6BAA6B;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,wBAAwB,EAAE,OAAO,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,iCAAiC,EAAE,eAI/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,GAC3C,YAAY,OAAO,EAAE,KACpB,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAyCpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"current-interactables-context-helper.js","sourceRoot":"","sources":["../../src/context-helpers/current-interactables-context-helper.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAoB,GAAG,EAAE;IACrE,mFAAmF;IACnF,wEAAwE;IACxE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,UAAqB,EACJ,EAAE;IACnB,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,CAAC,yCAAyC;QACxD,CAAC;QAED,OAAO;YACL,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBACvC,yEAAyE;gBACzE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACxD,OAAO;wBACL,EAAE,EAAE,SAAS;wBACb,aAAa,EAAE,SAAS;wBACxB,WAAW,EAAE,mBAAmB;wBAChC,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,eAAe;wBAC5B,KAAK,EAAE,SAAS;wBAChB,wBAAwB,EAAE,KAAK;wBAC/B,WAAW,EAAE,eAAe;qBAC7B,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,GAAG,SAAoC,CAAC;gBAClD,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC;oBAChC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;oBAC7C,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC3B,CAAC,CAAC,iDAAiD;wBACnD,CAAC,CAAC,eAAe;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,wBAAwB,EACrB,IAAI,CAAC,wBAAgD,IAAI,KAAK;oBACjE,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC3B,CAAC,CAAC,iDAAiD;wBACnD,CAAC,CAAC,eAAe;iBACpB,CAAC;YACJ,CAAC,CAAC;SACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { ContextHelperFn } from \"./types\";\n\n/**\n * Prebuilt context helper that provides information about all interactable components currently on the page.\n * This gives the AI awareness of what components it can interact with and their current state.\n * @returns an object with description and components, or null to skip including this context.\n * To disable this helper, override it with a function that returns null:\n * @example\n * ```tsx\n * // To disable the default interactables context\n * const { addContextHelper } = useTamboContextHelpers();\n * addContextHelper(\"interactables\", () => null);\n *\n * // To customize the context\n * addContextHelper(\"interactables\", () => ({\n * description: \"Custom description\",\n * components: getCustomComponentsSubset()\n * }));\n * ```\n */\nexport const currentInteractablesContextHelper: ContextHelperFn = () => {\n // This will be provided by the interactable provider when it registers this helper\n // Since we're provider-only now, this function gets replaced at runtime\n return null;\n};\n\n/**\n * Creates an interactables context helper with access to the current components.\n * This is used internally by TamboInteractableProvider.\n * @param components Array of interactable components\n * @returns A context helper function that returns component metadata or null if no components exist\n */\nexport const createInteractablesContextHelper = (\n components: unknown[],\n): ContextHelperFn => {\n return () => {\n if (!Array.isArray(components) || components.length === 0) {\n return null; // No interactable components on the page\n }\n\n return {\n components: components.map((component) => {\n // Type guard: ensure component is an object with the expected properties\n if (typeof component !== \"object\" || component === null) {\n return {\n id: \"unknown\",\n componentName: \"unknown\",\n description: \"invalid component\",\n props: undefined,\n propsSchema: \"Not specified\",\n state: undefined,\n isSelectedForInteraction: false,\n stateSchema: \"Not specified\",\n };\n }\n\n const comp = component as Record<string, unknown>;\n return {\n id: String(comp.id ?? \"unknown\"),\n componentName: String(comp.name ?? \"unknown\"),\n description: String(comp.description ?? \"\"),\n props: comp.props,\n propsSchema: comp.propsSchema\n ? \"Available - use component-specific update tools\"\n : \"Not specified\",\n state: comp.state,\n isSelectedForInteraction:\n (comp.isSelectedForInteraction as boolean | undefined) ?? false,\n stateSchema: comp.stateSchema\n ? \"Available - use component-specific update tools\"\n : \"Not specified\",\n };\n }),\n };\n };\n};\n"]}
1
+ {"version":3,"file":"current-interactables-context-helper.js","sourceRoot":"","sources":["../../src/context-helpers/current-interactables-context-helper.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAoB,GAAG,EAAE;IACrE,mFAAmF;IACnF,wEAAwE;IACxE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,UAAqB,EACgB,EAAE;IACvC,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,CAAC,yCAAyC;QACxD,CAAC;QAED,OAAO;YACL,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBACvC,yEAAyE;gBACzE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACxD,OAAO;wBACL,EAAE,EAAE,SAAS;wBACb,aAAa,EAAE,SAAS;wBACxB,WAAW,EAAE,mBAAmB;wBAChC,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,eAAe;wBAC5B,KAAK,EAAE,SAAS;wBAChB,wBAAwB,EAAE,KAAK;wBAC/B,WAAW,EAAE,eAAe;qBAC7B,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,GAAG,SAAoC,CAAC;gBAClD,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC;oBAChC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;oBAC7C,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC3B,CAAC,CAAC,iDAAiD;wBACnD,CAAC,CAAC,eAAe;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,wBAAwB,EACrB,IAAI,CAAC,wBAAgD,IAAI,KAAK;oBACjE,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC3B,CAAC,CAAC,iDAAiD;wBACnD,CAAC,CAAC,eAAe;iBACpB,CAAC;YACJ,CAAC,CAAC;SACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { ContextHelperFn } from \"./types\";\n\ninterface InteractableComponentMetadata {\n id: string;\n componentName: string;\n description: string;\n props: unknown;\n propsSchema: string;\n state: unknown;\n isSelectedForInteraction: boolean;\n stateSchema: string;\n}\n\nexport interface InteractablesContext {\n components: InteractableComponentMetadata[];\n}\n\n/**\n * Prebuilt context helper that provides information about all interactable components currently on the page.\n * This gives the AI awareness of what components it can interact with and their current state.\n * @returns an object with description and components, or null to skip including this context.\n * To disable this helper, override it with a function that returns null:\n * @example\n * ```tsx\n * // To disable the default interactables context\n * const { addContextHelper } = useTamboContextHelpers();\n * addContextHelper(\"interactables\", () => null);\n *\n * // To customize the context\n * addContextHelper(\"interactables\", () => ({\n * description: \"Custom description\",\n * components: getCustomComponentsSubset()\n * }));\n * ```\n */\nexport const currentInteractablesContextHelper: ContextHelperFn = () => {\n // This will be provided by the interactable provider when it registers this helper\n // Since we're provider-only now, this function gets replaced at runtime\n return null;\n};\n\n/**\n * Creates an interactables context helper with access to the current components.\n * This is used internally by TamboInteractableProvider.\n * @param components Array of interactable components\n * @returns A context helper function that returns component metadata or null if no components exist\n */\nexport const createInteractablesContextHelper = (\n components: unknown[],\n): (() => InteractablesContext | null) => {\n return () => {\n if (!Array.isArray(components) || components.length === 0) {\n return null; // No interactable components on the page\n }\n\n return {\n components: components.map((component) => {\n // Type guard: ensure component is an object with the expected properties\n if (typeof component !== \"object\" || component === null) {\n return {\n id: \"unknown\",\n componentName: \"unknown\",\n description: \"invalid component\",\n props: undefined,\n propsSchema: \"Not specified\",\n state: undefined,\n isSelectedForInteraction: false,\n stateSchema: \"Not specified\",\n };\n }\n\n const comp = component as Record<string, unknown>;\n return {\n id: String(comp.id ?? \"unknown\"),\n componentName: String(comp.name ?? \"unknown\"),\n description: String(comp.description ?? \"\"),\n props: comp.props,\n propsSchema: comp.propsSchema\n ? \"Available - use component-specific update tools\"\n : \"Not specified\",\n state: comp.state,\n isSelectedForInteraction:\n (comp.isSelectedForInteraction as boolean | undefined) ?? false,\n stateSchema: comp.stateSchema\n ? \"Available - use component-specific update tools\"\n : \"Not specified\",\n };\n }),\n };\n };\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=current-interactables-context-helper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-interactables-context-helper.test.d.ts","sourceRoot":"","sources":["../../src/context-helpers/current-interactables-context-helper.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { currentInteractablesContextHelper, createInteractablesContextHelper, } from "./current-interactables-context-helper.js";
2
+ describe("currentInteractablesContextHelper", () => {
3
+ it("returns null by default (placeholder before provider replaces it)", () => {
4
+ expect(currentInteractablesContextHelper()).toBeNull();
5
+ });
6
+ });
7
+ describe("createInteractablesContextHelper", () => {
8
+ it("returns null when components array is empty", () => {
9
+ const helper = createInteractablesContextHelper([]);
10
+ expect(helper()).toBeNull();
11
+ });
12
+ it("maps valid component objects to metadata", () => {
13
+ const components = [
14
+ {
15
+ id: "comp-1",
16
+ name: "WeatherCard",
17
+ description: "Shows weather",
18
+ props: { city: "NYC" },
19
+ propsSchema: { type: "object" },
20
+ state: { temp: 72 },
21
+ isSelectedForInteraction: true,
22
+ stateSchema: { type: "object" },
23
+ },
24
+ ];
25
+ const helper = createInteractablesContextHelper(components);
26
+ const result = helper();
27
+ expect(result).toEqual({
28
+ components: [
29
+ {
30
+ id: "comp-1",
31
+ componentName: "WeatherCard",
32
+ description: "Shows weather",
33
+ props: { city: "NYC" },
34
+ propsSchema: "Available - use component-specific update tools",
35
+ state: { temp: 72 },
36
+ isSelectedForInteraction: true,
37
+ stateSchema: "Available - use component-specific update tools",
38
+ },
39
+ ],
40
+ });
41
+ });
42
+ it("handles invalid (non-object) components gracefully", () => {
43
+ const components = [null, "not-an-object", 42];
44
+ const helper = createInteractablesContextHelper(components);
45
+ const result = helper();
46
+ expect(result?.components).toHaveLength(3);
47
+ for (const comp of result?.components ?? []) {
48
+ expect(comp.id).toBe("unknown");
49
+ expect(comp.componentName).toBe("unknown");
50
+ }
51
+ });
52
+ it("uses defaults for missing properties", () => {
53
+ const components = [{}];
54
+ const helper = createInteractablesContextHelper(components);
55
+ const result = helper();
56
+ expect(result?.components[0]).toEqual({
57
+ id: "unknown",
58
+ componentName: "unknown",
59
+ description: "",
60
+ props: undefined,
61
+ propsSchema: "Not specified",
62
+ state: undefined,
63
+ isSelectedForInteraction: false,
64
+ stateSchema: "Not specified",
65
+ });
66
+ });
67
+ });
68
+ //# sourceMappingURL=current-interactables-context-helper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-interactables-context-helper.test.js","sourceRoot":"","sources":["../../src/context-helpers/current-interactables-context-helper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,gCAAgC,GACjC,MAAM,wCAAwC,CAAC;AAEhD,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,iCAAiC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,gCAAgC,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,UAAU,GAAG;YACjB;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,eAAe;gBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;gBACtB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBACnB,wBAAwB,EAAE,IAAI;gBAC9B,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAChC;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,gCAAgC,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,UAAU,EAAE;gBACV;oBACE,EAAE,EAAE,QAAQ;oBACZ,aAAa,EAAE,aAAa;oBAC5B,WAAW,EAAE,eAAe;oBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACtB,WAAW,EAAE,iDAAiD;oBAC9D,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;oBACnB,wBAAwB,EAAE,IAAI;oBAC9B,WAAW,EAAE,iDAAiD;iBAC/D;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,gCAAgC,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;QAExB,MAAM,MAAM,GAAG,gCAAgC,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACpC,EAAE,EAAE,SAAS;YACb,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,eAAe;YAC5B,KAAK,EAAE,SAAS;YAChB,wBAAwB,EAAE,KAAK;YAC/B,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n currentInteractablesContextHelper,\n createInteractablesContextHelper,\n} from \"./current-interactables-context-helper\";\n\ndescribe(\"currentInteractablesContextHelper\", () => {\n it(\"returns null by default (placeholder before provider replaces it)\", () => {\n expect(currentInteractablesContextHelper()).toBeNull();\n });\n});\n\ndescribe(\"createInteractablesContextHelper\", () => {\n it(\"returns null when components array is empty\", () => {\n const helper = createInteractablesContextHelper([]);\n expect(helper()).toBeNull();\n });\n\n it(\"maps valid component objects to metadata\", () => {\n const components = [\n {\n id: \"comp-1\",\n name: \"WeatherCard\",\n description: \"Shows weather\",\n props: { city: \"NYC\" },\n propsSchema: { type: \"object\" },\n state: { temp: 72 },\n isSelectedForInteraction: true,\n stateSchema: { type: \"object\" },\n },\n ];\n\n const helper = createInteractablesContextHelper(components);\n const result = helper();\n expect(result).toEqual({\n components: [\n {\n id: \"comp-1\",\n componentName: \"WeatherCard\",\n description: \"Shows weather\",\n props: { city: \"NYC\" },\n propsSchema: \"Available - use component-specific update tools\",\n state: { temp: 72 },\n isSelectedForInteraction: true,\n stateSchema: \"Available - use component-specific update tools\",\n },\n ],\n });\n });\n\n it(\"handles invalid (non-object) components gracefully\", () => {\n const components = [null, \"not-an-object\", 42];\n\n const helper = createInteractablesContextHelper(components);\n const result = helper();\n expect(result?.components).toHaveLength(3);\n for (const comp of result?.components ?? []) {\n expect(comp.id).toBe(\"unknown\");\n expect(comp.componentName).toBe(\"unknown\");\n }\n });\n\n it(\"uses defaults for missing properties\", () => {\n const components = [{}];\n\n const helper = createInteractablesContextHelper(components);\n const result = helper();\n expect(result?.components[0]).toEqual({\n id: \"unknown\",\n componentName: \"unknown\",\n description: \"\",\n props: undefined,\n propsSchema: \"Not specified\",\n state: undefined,\n isSelectedForInteraction: false,\n stateSchema: \"Not specified\",\n });\n });\n});\n"]}
@@ -1,40 +1,6 @@
1
- import type { ElicitRequestFormParams, PrimitiveSchemaDefinition } from "@modelcontextprotocol/sdk/spec.types.js";
2
- import { MCPElicitationHandler } from "./mcp-client.js";
3
- /**
4
- * Schema type for elicitation request fields
5
- */
6
- export type ElicitationRequestedSchema = ElicitRequestFormParams["requestedSchema"];
7
- /**
8
- * Elicitation request from MCP server
9
- */
10
- export interface TamboElicitationRequest {
11
- message: string;
12
- requestedSchema: ElicitationRequestedSchema;
13
- /** AbortSignal that fires when the server cancels the request (e.g., timeout) */
14
- signal?: AbortSignal;
15
- }
16
- /**
17
- * Re-export PrimitiveSchemaDefinition for consumers that need to work with schema fields
18
- */
19
- export type { PrimitiveSchemaDefinition };
20
- /**
21
- * Elicitation response to be sent back
22
- */
23
- export interface TamboElicitationResponse {
24
- action: "accept" | "decline" | "cancel";
25
- content?: Record<string, unknown>;
26
- [x: string]: unknown;
27
- }
28
- /**
29
- * Elicitation context state - read-only interface for consumers.
30
- * State management is handled internally by useElicitation hook.
31
- */
32
- export interface ElicitationContextState {
33
- /** Current elicitation request, or null if none active */
34
- elicitation: TamboElicitationRequest | null;
35
- /** Function to call when user responds to elicitation (clears state automatically) */
36
- resolveElicitation: ((response: TamboElicitationResponse) => void) | null;
37
- }
1
+ import type { MCPElicitationHandler, TamboElicitationRequest, TamboElicitationResponse } from "@tambo-ai/client";
2
+ export type { ElicitationRequestedSchema, TamboElicitationRequest, TamboElicitationResponse, ElicitationContextState, PrimitiveSchemaDefinition, } from "@tambo-ai/client";
3
+ export { toElicitationRequestedSchema, hasRequestedSchema, } from "@tambo-ai/client";
38
4
  /**
39
5
  * Internal hook that manages elicitation state and creates a default handler.
40
6
  * This bundles all the state management and handler creation for elicitation.
@@ -1 +1 @@
1
- {"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../src/mcp/elicitation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AAQjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,0BAA0B,GACpC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,0BAA0B,CAAC;IAC5C,iFAAiF;IACjF,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;GAEG;AACH,YAAY,EAAE,yBAAyB,EAAE,CAAC;AAO1C;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC5C,sFAAsF;IACtF,kBAAkB,EAAE,CAAC,CAAC,QAAQ,EAAE,wBAAwB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3E;AA8BD;;;;;;GAMG;AACH,wBAAgB,cAAc;;;oCAId,wBAAwB,KAAK,IAAI;+FAAjC,wBAAwB,KAAK,IAAI;;EAsEhD"}
1
+ {"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../src/mcp/elicitation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAO1B,YAAY,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,wBAAgB,cAAc;;;oCAId,wBAAwB,KAAK,IAAI;+FAAjC,wBAAwB,KAAK,IAAI;;EAoEhD"}
@@ -1,26 +1,6 @@
1
1
  import { useCallback, useState } from "react";
2
- /**
3
- * Narrow the runtime ElicitRequest requestedSchema into the public
4
- * ElicitationRequestedSchema type.
5
- *
6
- * The MCP SDK guarantees that the runtime
7
- * `ElicitRequest["params"]["requestedSchema"]` shape stays aligned with the
8
- * spec-defined `ElicitRequestFormParams["requestedSchema"]`. This helper
9
- * centralizes the cast based on that contract so that if a future SDK version
10
- * ever diverges, we have a single place to tighten the implementation (for
11
- * example with structural validation or normalization).
12
- * @returns requestedSchema as ElicitationRequestedSchema
13
- */
14
- function toElicitationRequestedSchema(value) {
15
- return value;
16
- }
17
- /**
18
- * Type guard for the elicitation form params shape.
19
- * @returns true when params include requestedSchema
20
- */
21
- function hasRequestedSchema(params) {
22
- return "requestedSchema" in params;
23
- }
2
+ import { toElicitationRequestedSchema as toSchema, hasRequestedSchema as hasSchema, } from "@tambo-ai/client";
3
+ export { toElicitationRequestedSchema, hasRequestedSchema, } from "@tambo-ai/client";
24
4
  /**
25
5
  * Internal hook that manages elicitation state and creates a default handler.
26
6
  * This bundles all the state management and handler creation for elicitation.
@@ -33,7 +13,7 @@ export function useElicitation() {
33
13
  const [resolveElicitation, setResolveElicitation] = useState(null);
34
14
  const defaultElicitationHandler = useCallback(async (request, extra) => {
35
15
  return await new Promise((resolve, reject) => {
36
- if (!hasRequestedSchema(request.params)) {
16
+ if (!hasSchema(request.params)) {
37
17
  const mode = "mode" in request.params ? String(request.params.mode) : "unknown";
38
18
  reject(new Error(`Unsupported MCP elicitation params: expected requestedSchema (form mode), got mode=${mode}`));
39
19
  return;
@@ -44,7 +24,7 @@ export function useElicitation() {
44
24
  // for cross-version compatibility
45
25
  setElicitation({
46
26
  message: request.params.message,
47
- requestedSchema: toElicitationRequestedSchema(request.params.requestedSchema),
27
+ requestedSchema: toSchema(request.params.requestedSchema),
48
28
  signal: extra.signal,
49
29
  });
50
30
  // If the signal is already aborted, reject immediately
@@ -1 +1 @@
1
- {"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../src/mcp/elicitation.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAiD9C;;;;;;;;;;;GAWG;AACH,SAAS,4BAA4B,CACnC,KAAgE;IAEhE,OAAO,KAAmC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,MAA+B;IAE/B,OAAO,iBAAiB,IAAI,MAAM,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GACjC,QAAQ,CAAiC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAE1D,IAAI,CAAC,CAAC;IAER,MAAM,yBAAyB,GAA0B,WAAW,CAClE,KAAK,EACH,OAAsB,EACtB,KAA6D,EACtC,EAAE;QACzB,OAAO,MAAM,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,GACR,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAErE,MAAM,CACJ,IAAI,KAAK,CACP,sFAAsF,IAAI,EAAE,CAC7F,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,6CAA6C;YAC7C,yEAAyE;YACzE,yEAAyE;YACzE,kCAAkC;YAClC,cAAc,CAAC;gBACb,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC/B,eAAe,EAAE,4BAA4B,CAC3C,OAAO,CAAC,MAAM,CAAC,eAAe,CAC/B;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YAEH,uDAAuD;YACvD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC;YAEF,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpE,sEAAsE;YACtE,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,QAAsB,EAAE,EAAE;gBACrD,uDAAuD;gBACvD,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACvD,0CAA0C;gBAC1C,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO;QACL,WAAW;QACX,cAAc;QACd,kBAAkB;QAClB,qBAAqB;QACrB,yBAAyB;KAC1B,CAAC;AACJ,CAAC","sourcesContent":["import type { RequestHandlerExtra } from \"@modelcontextprotocol/sdk/shared/protocol.js\";\nimport type {\n ElicitRequestFormParams,\n PrimitiveSchemaDefinition,\n} from \"@modelcontextprotocol/sdk/spec.types.js\";\nimport type {\n ClientNotification,\n ClientRequest,\n ElicitRequest,\n ElicitResult,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { useCallback, useState } from \"react\";\nimport { MCPElicitationHandler } from \"./mcp-client\";\n\n/**\n * Schema type for elicitation request fields\n */\nexport type ElicitationRequestedSchema =\n ElicitRequestFormParams[\"requestedSchema\"];\n\n/**\n * Elicitation request from MCP server\n */\nexport interface TamboElicitationRequest {\n message: string;\n requestedSchema: ElicitationRequestedSchema;\n /** AbortSignal that fires when the server cancels the request (e.g., timeout) */\n signal?: AbortSignal;\n}\n\n/**\n * Re-export PrimitiveSchemaDefinition for consumers that need to work with schema fields\n */\nexport type { PrimitiveSchemaDefinition };\n\ntype ElicitRequestParamsWithRequestedSchema = Extract<\n ElicitRequest[\"params\"],\n { requestedSchema: unknown }\n>;\n\n/**\n * Elicitation response to be sent back\n */\nexport interface TamboElicitationResponse {\n action: \"accept\" | \"decline\" | \"cancel\";\n content?: Record<string, unknown>;\n [x: string]: unknown;\n}\n\n/**\n * Elicitation context state - read-only interface for consumers.\n * State management is handled internally by useElicitation hook.\n */\nexport interface ElicitationContextState {\n /** Current elicitation request, or null if none active */\n elicitation: TamboElicitationRequest | null;\n /** Function to call when user responds to elicitation (clears state automatically) */\n resolveElicitation: ((response: TamboElicitationResponse) => void) | null;\n}\n\n/**\n * Narrow the runtime ElicitRequest requestedSchema into the public\n * ElicitationRequestedSchema type.\n *\n * The MCP SDK guarantees that the runtime\n * `ElicitRequest[\"params\"][\"requestedSchema\"]` shape stays aligned with the\n * spec-defined `ElicitRequestFormParams[\"requestedSchema\"]`. This helper\n * centralizes the cast based on that contract so that if a future SDK version\n * ever diverges, we have a single place to tighten the implementation (for\n * example with structural validation or normalization).\n * @returns requestedSchema as ElicitationRequestedSchema\n */\nfunction toElicitationRequestedSchema(\n value: ElicitRequestParamsWithRequestedSchema[\"requestedSchema\"],\n): ElicitationRequestedSchema {\n return value as ElicitationRequestedSchema;\n}\n\n/**\n * Type guard for the elicitation form params shape.\n * @returns true when params include requestedSchema\n */\nfunction hasRequestedSchema(\n params: ElicitRequest[\"params\"],\n): params is ElicitRequestParamsWithRequestedSchema {\n return \"requestedSchema\" in params;\n}\n\n/**\n * Internal hook that manages elicitation state and creates a default handler.\n * This bundles all the state management and handler creation for elicitation.\n *\n * Do not export this hook from this package. It is only intended to be used internally by the TamboMcpProvider.\n * @returns Elicitation state and default handler\n */\nexport function useElicitation() {\n const [elicitation, setElicitation] =\n useState<TamboElicitationRequest | null>(null);\n const [resolveElicitation, setResolveElicitation] = useState<\n ((response: TamboElicitationResponse) => void) | null\n >(null);\n\n const defaultElicitationHandler: MCPElicitationHandler = useCallback(\n async (\n request: ElicitRequest,\n extra: RequestHandlerExtra<ClientRequest, ClientNotification>,\n ): Promise<ElicitResult> => {\n return await new Promise<ElicitResult>((resolve, reject) => {\n if (!hasRequestedSchema(request.params)) {\n const mode =\n \"mode\" in request.params ? String(request.params.mode) : \"unknown\";\n\n reject(\n new Error(\n `Unsupported MCP elicitation params: expected requestedSchema (form mode), got mode=${mode}`,\n ),\n );\n return;\n }\n\n // Set the elicitation request to show the UI\n // Cast is needed because ElicitRequest uses Zod-inferred types (from the\n // user's installed zod version), while we use pure TypeScript spec types\n // for cross-version compatibility\n setElicitation({\n message: request.params.message,\n requestedSchema: toElicitationRequestedSchema(\n request.params.requestedSchema,\n ),\n signal: extra.signal,\n });\n\n // If the signal is already aborted, reject immediately\n if (extra.signal.aborted) {\n setElicitation(null);\n reject(new Error(\"Request aborted\"));\n return;\n }\n\n // Listen for abort signal to clean up\n const handleAbort = () => {\n setElicitation(null);\n setResolveElicitation(null);\n reject(new Error(\"Request aborted\"));\n };\n\n extra.signal.addEventListener(\"abort\", handleAbort, { once: true });\n\n // Store the resolve function so we can call it when the user responds\n setResolveElicitation(() => (response: ElicitResult) => {\n // Remove abort listener since we're resolving normally\n extra.signal.removeEventListener(\"abort\", handleAbort);\n // Clear state now that user has responded\n setElicitation(null);\n setResolveElicitation(null);\n resolve(response);\n });\n });\n },\n [],\n );\n\n return {\n elicitation,\n setElicitation,\n resolveElicitation,\n setResolveElicitation,\n defaultElicitationHandler,\n };\n}\n"]}
1
+ {"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../src/mcp/elicitation.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAM9C,OAAO,EACL,4BAA4B,IAAI,QAAQ,EACxC,kBAAkB,IAAI,SAAS,GAChC,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GACjC,QAAQ,CAAiC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAE1D,IAAI,CAAC,CAAC;IAER,MAAM,yBAAyB,GAA0B,WAAW,CAClE,KAAK,EACH,OAAsB,EACtB,KAA6D,EACtC,EAAE;QACzB,OAAO,MAAM,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,GACR,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAErE,MAAM,CACJ,IAAI,KAAK,CACP,sFAAsF,IAAI,EAAE,CAC7F,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,6CAA6C;YAC7C,yEAAyE;YACzE,yEAAyE;YACzE,kCAAkC;YAClC,cAAc,CAAC;gBACb,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC/B,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;gBACzD,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YAEH,uDAAuD;YACvD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC;YAEF,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpE,sEAAsE;YACtE,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,QAAsB,EAAE,EAAE;gBACrD,uDAAuD;gBACvD,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACvD,0CAA0C;gBAC1C,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO;QACL,WAAW;QACX,cAAc;QACd,kBAAkB;QAClB,qBAAqB;QACrB,yBAAyB;KAC1B,CAAC;AACJ,CAAC","sourcesContent":["// React-specific hook (not in client package)\nimport type { RequestHandlerExtra } from \"@modelcontextprotocol/sdk/shared/protocol.js\";\nimport type {\n ClientNotification,\n ClientRequest,\n ElicitRequest,\n ElicitResult,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { useCallback, useState } from \"react\";\nimport type {\n MCPElicitationHandler,\n TamboElicitationRequest,\n TamboElicitationResponse,\n} from \"@tambo-ai/client\";\nimport {\n toElicitationRequestedSchema as toSchema,\n hasRequestedSchema as hasSchema,\n} from \"@tambo-ai/client\";\n\n// Re-export types and functions from @tambo-ai/client for barrel consumers\nexport type {\n ElicitationRequestedSchema,\n TamboElicitationRequest,\n TamboElicitationResponse,\n ElicitationContextState,\n PrimitiveSchemaDefinition,\n} from \"@tambo-ai/client\";\nexport {\n toElicitationRequestedSchema,\n hasRequestedSchema,\n} from \"@tambo-ai/client\";\n\n/**\n * Internal hook that manages elicitation state and creates a default handler.\n * This bundles all the state management and handler creation for elicitation.\n *\n * Do not export this hook from this package. It is only intended to be used internally by the TamboMcpProvider.\n * @returns Elicitation state and default handler\n */\nexport function useElicitation() {\n const [elicitation, setElicitation] =\n useState<TamboElicitationRequest | null>(null);\n const [resolveElicitation, setResolveElicitation] = useState<\n ((response: TamboElicitationResponse) => void) | null\n >(null);\n\n const defaultElicitationHandler: MCPElicitationHandler = useCallback(\n async (\n request: ElicitRequest,\n extra: RequestHandlerExtra<ClientRequest, ClientNotification>,\n ): Promise<ElicitResult> => {\n return await new Promise<ElicitResult>((resolve, reject) => {\n if (!hasSchema(request.params)) {\n const mode =\n \"mode\" in request.params ? String(request.params.mode) : \"unknown\";\n\n reject(\n new Error(\n `Unsupported MCP elicitation params: expected requestedSchema (form mode), got mode=${mode}`,\n ),\n );\n return;\n }\n\n // Set the elicitation request to show the UI\n // Cast is needed because ElicitRequest uses Zod-inferred types (from the\n // user's installed zod version), while we use pure TypeScript spec types\n // for cross-version compatibility\n setElicitation({\n message: request.params.message,\n requestedSchema: toSchema(request.params.requestedSchema),\n signal: extra.signal,\n });\n\n // If the signal is already aborted, reject immediately\n if (extra.signal.aborted) {\n setElicitation(null);\n reject(new Error(\"Request aborted\"));\n return;\n }\n\n // Listen for abort signal to clean up\n const handleAbort = () => {\n setElicitation(null);\n setResolveElicitation(null);\n reject(new Error(\"Request aborted\"));\n };\n\n extra.signal.addEventListener(\"abort\", handleAbort, { once: true });\n\n // Store the resolve function so we can call it when the user responds\n setResolveElicitation(() => (response: ElicitResult) => {\n // Remove abort listener since we're resolving normally\n extra.signal.removeEventListener(\"abort\", handleAbort);\n // Clear state now that user has responded\n setElicitation(null);\n setResolveElicitation(null);\n resolve(response);\n });\n });\n },\n [],\n );\n\n return {\n elicitation,\n setElicitation,\n resolveElicitation,\n setResolveElicitation,\n defaultElicitationHandler,\n };\n}\n"]}
@@ -6,11 +6,11 @@
6
6
  * you'll need to install `zod` and `zod-to-json-schema` as optional peer dependencies.
7
7
  * See the React SDK README for the recommended version ranges.
8
8
  */
9
- export { MCPTransport } from "./mcp-client.js";
10
- export type { MCPElicitationHandler, MCPHandlers, MCPSamplingHandler, } from "./mcp-client.js";
11
- export type { ElicitationRequestedSchema, PrimitiveSchemaDefinition, TamboElicitationRequest, TamboElicitationResponse, } from "./elicitation.js";
9
+ export { MCPTransport } from "@tambo-ai/client";
10
+ export type { MCPElicitationHandler, MCPHandlers, MCPSamplingHandler, } from "@tambo-ai/client";
11
+ export type { ElicitationRequestedSchema, PrimitiveSchemaDefinition, TamboElicitationRequest, TamboElicitationResponse, } from "@tambo-ai/client";
12
12
  export { useTamboMcpPrompt, useTamboMcpPromptList, useTamboMcpResource, useTamboMcpResourceList, isMcpResourceEntry, } from "./mcp-hooks.js";
13
13
  export type { ListPromptEntry, ListPromptItem, ListResourceEntry, ListResourceItem, } from "./mcp-hooks.js";
14
14
  export { TamboMcpProvider, useTamboMcpElicitation, useTamboMcpServers, useTamboElicitationContext, type ConnectedMcpServer, type FailedMcpServer, type McpServer, type ProviderMCPHandlers, } from "./tambo-mcp-provider.js";
15
- export type { McpServerInfo, NormalizedMcpServerInfo, } from "../model/mcp-server-info.js";
15
+ export type { McpServerInfo, NormalizedMcpServerInfo } from "@tambo-ai/client";
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EACV,qBAAqB,EACrB,WAAW,EACX,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,qBAAqB,EACrB,WAAW,EACX,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
package/esm/mcp/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * you'll need to install `zod` and `zod-to-json-schema` as optional peer dependencies.
7
7
  * See the React SDK README for the recommended version ranges.
8
8
  */
9
- export { MCPTransport } from "./mcp-client.js";
9
+ export { MCPTransport } from "@tambo-ai/client";
10
10
  export { useTamboMcpPrompt, useTamboMcpPromptList, useTamboMcpResource, useTamboMcpResourceList, isMcpResourceEntry, } from "./mcp-hooks.js";
11
11
  export { TamboMcpProvider, useTamboMcpElicitation, useTamboMcpServers, useTamboElicitationContext, } from "./tambo-mcp-provider.js";
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAY5C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,GAK3B,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * Entry point for MCP (Model Context Protocol) support in the React SDK.\n *\n * Note: The `@modelcontextprotocol/sdk` is included automatically with `@tambo-ai/react`.\n * If you use features that require schema validation (like component props schemas),\n * you'll need to install `zod` and `zod-to-json-schema` as optional peer dependencies.\n * See the React SDK README for the recommended version ranges.\n */\nexport { MCPTransport } from \"./mcp-client\";\nexport type {\n MCPElicitationHandler,\n MCPHandlers,\n MCPSamplingHandler,\n} from \"./mcp-client\";\nexport type {\n ElicitationRequestedSchema,\n PrimitiveSchemaDefinition,\n TamboElicitationRequest,\n TamboElicitationResponse,\n} from \"./elicitation\";\nexport {\n useTamboMcpPrompt,\n useTamboMcpPromptList,\n useTamboMcpResource,\n useTamboMcpResourceList,\n isMcpResourceEntry,\n} from \"./mcp-hooks\";\nexport type {\n ListPromptEntry,\n ListPromptItem,\n ListResourceEntry,\n ListResourceItem,\n} from \"./mcp-hooks\";\nexport {\n TamboMcpProvider,\n useTamboMcpElicitation,\n useTamboMcpServers,\n useTamboElicitationContext,\n type ConnectedMcpServer,\n type FailedMcpServer,\n type McpServer,\n type ProviderMCPHandlers,\n} from \"./tambo-mcp-provider\";\n\n// Public MCP server metadata types\nexport type {\n McpServerInfo,\n NormalizedMcpServerInfo,\n} from \"../model/mcp-server-info\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAYhD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,GAK3B,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * Entry point for MCP (Model Context Protocol) support in the React SDK.\n *\n * Note: The `@modelcontextprotocol/sdk` is included automatically with `@tambo-ai/react`.\n * If you use features that require schema validation (like component props schemas),\n * you'll need to install `zod` and `zod-to-json-schema` as optional peer dependencies.\n * See the React SDK README for the recommended version ranges.\n */\nexport { MCPTransport } from \"@tambo-ai/client\";\nexport type {\n MCPElicitationHandler,\n MCPHandlers,\n MCPSamplingHandler,\n} from \"@tambo-ai/client\";\nexport type {\n ElicitationRequestedSchema,\n PrimitiveSchemaDefinition,\n TamboElicitationRequest,\n TamboElicitationResponse,\n} from \"@tambo-ai/client\";\nexport {\n useTamboMcpPrompt,\n useTamboMcpPromptList,\n useTamboMcpResource,\n useTamboMcpResourceList,\n isMcpResourceEntry,\n} from \"./mcp-hooks\";\nexport type {\n ListPromptEntry,\n ListPromptItem,\n ListResourceEntry,\n ListResourceItem,\n} from \"./mcp-hooks\";\nexport {\n TamboMcpProvider,\n useTamboMcpElicitation,\n useTamboMcpServers,\n useTamboElicitationContext,\n type ConnectedMcpServer,\n type FailedMcpServer,\n type McpServer,\n type ProviderMCPHandlers,\n} from \"./tambo-mcp-provider\";\n\n// Public MCP server metadata types\nexport type { McpServerInfo, NormalizedMcpServerInfo } from \"@tambo-ai/client\";\n"]}
@@ -1,4 +1,4 @@
1
- import { MCPClient, MCPTransport } from "./mcp-client.js";
1
+ import { MCPClient, MCPTransport } from "@tambo-ai/client";
2
2
  // Mock the MCP SDK modules
3
3
  jest.mock("@modelcontextprotocol/sdk/client/index.js", () => ({
4
4
  Client: jest.fn().mockImplementation(() => ({
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.test.js","sourceRoot":"","sources":["../../src/mcp/mcp-client.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { MCPClient, MCPTransport } from \"./mcp-client\";\n\n// Mock the MCP SDK modules\njest.mock(\"@modelcontextprotocol/sdk/client/index.js\", () => ({\n Client: jest.fn().mockImplementation(() => ({\n connect: jest.fn(),\n close: jest.fn(),\n listTools: jest.fn(),\n callTool: jest.fn(),\n setRequestHandler: jest.fn(),\n removeRequestHandler: jest.fn(),\n })),\n}));\n\njest.mock(\"@modelcontextprotocol/sdk/client/sse.js\", () => ({\n SSEClientTransport: jest.fn().mockImplementation(() => ({\n // SSE transport doesn't have sessionId\n })),\n}));\n\njest.mock(\"@modelcontextprotocol/sdk/client/streamableHttp.js\", () => ({\n StreamableHTTPClientTransport: jest\n .fn()\n .mockImplementation((url, options) => ({\n sessionId: options?.sessionId,\n })),\n}));\n\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n\n// Type the mocked modules\nconst MockedClient = Client as jest.MockedClass<typeof Client>;\nconst MockedSSEClientTransport = SSEClientTransport as jest.MockedClass<\n typeof SSEClientTransport\n>;\nconst MockedStreamableHTTPClientTransport =\n StreamableHTTPClientTransport as jest.MockedClass<\n typeof StreamableHTTPClientTransport\n >;\n\ndescribe(\"MCPClient\", () => {\n let mockClientInstance: any;\n let mockTransportInstance: any;\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n // Create mock instances\n mockClientInstance = {\n connect: jest.fn().mockResolvedValue(undefined),\n close: jest.fn().mockResolvedValue(undefined),\n listTools: jest.fn(),\n callTool: jest.fn(),\n setRequestHandler: jest.fn(),\n removeRequestHandler: jest.fn(),\n };\n\n mockTransportInstance = {\n sessionId: \"test-session-id\",\n };\n\n // Setup mocks\n MockedClient.mockImplementation(() => mockClientInstance);\n MockedStreamableHTTPClientTransport.mockImplementation(\n () => mockTransportInstance,\n );\n MockedSSEClientTransport.mockImplementation(\n () => ({}) as SSEClientTransport,\n );\n });\n\n describe(\"create\", () => {\n it(\"should create and connect an MCPClient with HTTP transport by default\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const headers = { Authorization: \"Bearer token\" };\n\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n headers,\n undefined,\n undefined,\n );\n\n expect(MockedStreamableHTTPClientTransport).toHaveBeenCalledWith(\n new URL(endpoint),\n { sessionId: undefined, requestInit: { headers } },\n );\n expect(MockedClient).toHaveBeenCalledWith(\n {\n name: \"tambo-mcp-client\",\n version: \"1.0.0\",\n },\n { capabilities: {} },\n );\n expect(mockClientInstance.connect).toHaveBeenCalledWith(\n mockTransportInstance,\n );\n expect(client).toBeInstanceOf(MCPClient);\n });\n\n it(\"should create and connect an MCPClient with SSE transport\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.SSE,\n undefined,\n undefined,\n undefined,\n );\n\n expect(MockedSSEClientTransport).toHaveBeenCalledWith(new URL(endpoint), {\n requestInit: { headers: {} },\n });\n expect(mockClientInstance.connect).toHaveBeenCalledWith({});\n expect(client).toBeInstanceOf(MCPClient);\n });\n\n it(\"should create client with default headers when none provided\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n expect(MockedStreamableHTTPClientTransport).toHaveBeenCalledWith(\n new URL(endpoint),\n { sessionId: undefined, requestInit: { headers: {} } },\n );\n });\n });\n\n describe(\"listTools\", () => {\n it(\"should list all tools with pagination\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockTools = [\n {\n name: \"tool1\",\n description: \"First tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n {\n name: \"tool2\",\n description: \"Second tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg2: { type: \"number\" } },\n },\n },\n ];\n\n const mockResponse1 = {\n tools: [mockTools[0]],\n nextCursor: \"cursor1\",\n };\n\n const mockResponse2 = {\n tools: [mockTools[1]],\n nextCursor: undefined,\n };\n\n mockClientInstance.listTools\n .mockResolvedValueOnce(mockResponse1)\n .mockResolvedValueOnce(mockResponse2);\n\n const result = await client.listTools();\n\n expect(mockClientInstance.listTools).toHaveBeenCalledTimes(2);\n expect(mockClientInstance.listTools).toHaveBeenNthCalledWith(\n 1,\n { cursor: undefined },\n {},\n );\n expect(mockClientInstance.listTools).toHaveBeenNthCalledWith(\n 2,\n { cursor: \"cursor1\" },\n {},\n );\n expect(result).toEqual([\n {\n name: \"tool1\",\n description: \"First tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n {\n name: \"tool2\",\n description: \"Second tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg2: { type: \"number\" } },\n },\n },\n ]);\n });\n\n it(\"should handle single page of tools\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockTools = [\n {\n name: \"tool1\",\n description: \"Only tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n ];\n\n const mockResponse = {\n tools: mockTools,\n nextCursor: undefined,\n };\n\n mockClientInstance.listTools.mockResolvedValue(mockResponse);\n\n const result = await client.listTools();\n\n expect(mockClientInstance.listTools).toHaveBeenCalledTimes(1);\n expect(result).toEqual([\n {\n name: \"tool1\",\n description: \"Only tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n ]);\n });\n\n it(\"should throw error for invalid input schema\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockTools = [\n {\n name: \"invalid-tool\",\n description: \"Tool with invalid schema\",\n inputSchema: { type: \"string\" }, // Invalid - should be object\n },\n ];\n\n const mockResponse = {\n tools: mockTools,\n nextCursor: undefined,\n };\n\n mockClientInstance.listTools.mockResolvedValue(mockResponse);\n\n await expect(client.listTools()).rejects.toThrow(\n \"Input schema for tool invalid-tool is not an object\",\n );\n });\n });\n\n describe(\"callTool\", () => {\n it(\"should call a tool with arguments\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockResult = { success: true, data: \"test result\" };\n mockClientInstance.callTool.mockResolvedValue(mockResult);\n\n const result = await client.callTool(\"testTool\", {\n arg1: \"value1\",\n arg2: 42,\n });\n\n expect(mockClientInstance.callTool).toHaveBeenCalledWith({\n name: \"testTool\",\n arguments: { arg1: \"value1\", arg2: 42 },\n });\n expect(result).toBe(mockResult);\n });\n\n it(\"should handle tool call errors\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n const error = new Error(\"Tool call failed\");\n mockClientInstance.callTool.mockRejectedValue(error);\n\n await expect(client.callTool(\"testTool\", {})).rejects.toThrow(\n \"Tool call failed\",\n );\n });\n });\n\n describe(\"transport initialization\", () => {\n it(\"should initialize HTTP transport with session ID\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const headers = { Authorization: \"Bearer token\" };\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n headers,\n undefined,\n undefined,\n );\n\n expect(MockedStreamableHTTPClientTransport).toHaveBeenCalledWith(\n new URL(endpoint),\n { sessionId: undefined, requestInit: { headers } },\n );\n });\n\n it(\"should initialize SSE transport without session ID\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const headers = { Authorization: \"Bearer token\" };\n\n await MCPClient.create(\n endpoint,\n MCPTransport.SSE,\n headers,\n undefined,\n undefined,\n );\n\n expect(MockedSSEClientTransport).toHaveBeenCalledWith(new URL(endpoint), {\n requestInit: { headers },\n });\n });\n });\n\n describe(\"client initialization\", () => {\n it(\"should initialize client with correct name and version\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n expect(MockedClient).toHaveBeenCalledWith(\n {\n name: \"tambo-mcp-client\",\n version: \"1.0.0\",\n },\n { capabilities: {} },\n );\n });\n });\n\n describe(\"handlers (elicitation/sampling)\", () => {\n it(\"sets handlers on create when provided\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const elicitation = jest.fn(async () => ({}) as any);\n const sampling = jest.fn(async () => ({}) as any);\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n { elicitation, sampling },\n );\n\n expect(MockedClient).toHaveBeenLastCalledWith(\n {\n name: \"tambo-mcp-client\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n elicitation: {},\n sampling: {},\n },\n },\n );\n\n // Request handlers should be set for both\n expect(mockClientInstance.setRequestHandler).toHaveBeenCalled();\n expect(\n (mockClientInstance.setRequestHandler as jest.Mock).mock.calls.length,\n ).toBeGreaterThanOrEqual(2);\n });\n\n it(\"removes elicitation handler when set to undefined\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n {\n elicitation: async () => ({}) as any,\n },\n );\n\n const removeSpy = mockClientInstance.removeRequestHandler as jest.Mock;\n\n // then remove\n removeSpy.mockClear();\n await client.updateElicitationHandler(undefined);\n expect(removeSpy).toHaveBeenCalledWith(expect.any(String));\n });\n\n it(\"removes sampling handler when set to undefined\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n {\n sampling: async () => ({}) as any,\n },\n );\n\n const removeSpy = mockClientInstance.removeRequestHandler as jest.Mock;\n\n // then remove\n removeSpy.mockClear();\n await client.updateSamplingHandler(undefined);\n expect(removeSpy).toHaveBeenCalledWith(expect.any(String));\n });\n });\n});\n"]}
1
+ {"version":3,"file":"mcp-client.test.js","sourceRoot":"","sources":["../../src/mcp/mcp-client.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { MCPClient, MCPTransport } from \"@tambo-ai/client\";\n\n// Mock the MCP SDK modules\njest.mock(\"@modelcontextprotocol/sdk/client/index.js\", () => ({\n Client: jest.fn().mockImplementation(() => ({\n connect: jest.fn(),\n close: jest.fn(),\n listTools: jest.fn(),\n callTool: jest.fn(),\n setRequestHandler: jest.fn(),\n removeRequestHandler: jest.fn(),\n })),\n}));\n\njest.mock(\"@modelcontextprotocol/sdk/client/sse.js\", () => ({\n SSEClientTransport: jest.fn().mockImplementation(() => ({\n // SSE transport doesn't have sessionId\n })),\n}));\n\njest.mock(\"@modelcontextprotocol/sdk/client/streamableHttp.js\", () => ({\n StreamableHTTPClientTransport: jest\n .fn()\n .mockImplementation((url, options) => ({\n sessionId: options?.sessionId,\n })),\n}));\n\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n\n// Type the mocked modules\nconst MockedClient = Client as jest.MockedClass<typeof Client>;\nconst MockedSSEClientTransport = SSEClientTransport as jest.MockedClass<\n typeof SSEClientTransport\n>;\nconst MockedStreamableHTTPClientTransport =\n StreamableHTTPClientTransport as jest.MockedClass<\n typeof StreamableHTTPClientTransport\n >;\n\ndescribe(\"MCPClient\", () => {\n let mockClientInstance: any;\n let mockTransportInstance: any;\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n // Create mock instances\n mockClientInstance = {\n connect: jest.fn().mockResolvedValue(undefined),\n close: jest.fn().mockResolvedValue(undefined),\n listTools: jest.fn(),\n callTool: jest.fn(),\n setRequestHandler: jest.fn(),\n removeRequestHandler: jest.fn(),\n };\n\n mockTransportInstance = {\n sessionId: \"test-session-id\",\n };\n\n // Setup mocks\n MockedClient.mockImplementation(() => mockClientInstance);\n MockedStreamableHTTPClientTransport.mockImplementation(\n () => mockTransportInstance,\n );\n MockedSSEClientTransport.mockImplementation(\n () => ({}) as SSEClientTransport,\n );\n });\n\n describe(\"create\", () => {\n it(\"should create and connect an MCPClient with HTTP transport by default\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const headers = { Authorization: \"Bearer token\" };\n\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n headers,\n undefined,\n undefined,\n );\n\n expect(MockedStreamableHTTPClientTransport).toHaveBeenCalledWith(\n new URL(endpoint),\n { sessionId: undefined, requestInit: { headers } },\n );\n expect(MockedClient).toHaveBeenCalledWith(\n {\n name: \"tambo-mcp-client\",\n version: \"1.0.0\",\n },\n { capabilities: {} },\n );\n expect(mockClientInstance.connect).toHaveBeenCalledWith(\n mockTransportInstance,\n );\n expect(client).toBeInstanceOf(MCPClient);\n });\n\n it(\"should create and connect an MCPClient with SSE transport\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.SSE,\n undefined,\n undefined,\n undefined,\n );\n\n expect(MockedSSEClientTransport).toHaveBeenCalledWith(new URL(endpoint), {\n requestInit: { headers: {} },\n });\n expect(mockClientInstance.connect).toHaveBeenCalledWith({});\n expect(client).toBeInstanceOf(MCPClient);\n });\n\n it(\"should create client with default headers when none provided\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n expect(MockedStreamableHTTPClientTransport).toHaveBeenCalledWith(\n new URL(endpoint),\n { sessionId: undefined, requestInit: { headers: {} } },\n );\n });\n });\n\n describe(\"listTools\", () => {\n it(\"should list all tools with pagination\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockTools = [\n {\n name: \"tool1\",\n description: \"First tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n {\n name: \"tool2\",\n description: \"Second tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg2: { type: \"number\" } },\n },\n },\n ];\n\n const mockResponse1 = {\n tools: [mockTools[0]],\n nextCursor: \"cursor1\",\n };\n\n const mockResponse2 = {\n tools: [mockTools[1]],\n nextCursor: undefined,\n };\n\n mockClientInstance.listTools\n .mockResolvedValueOnce(mockResponse1)\n .mockResolvedValueOnce(mockResponse2);\n\n const result = await client.listTools();\n\n expect(mockClientInstance.listTools).toHaveBeenCalledTimes(2);\n expect(mockClientInstance.listTools).toHaveBeenNthCalledWith(\n 1,\n { cursor: undefined },\n {},\n );\n expect(mockClientInstance.listTools).toHaveBeenNthCalledWith(\n 2,\n { cursor: \"cursor1\" },\n {},\n );\n expect(result).toEqual([\n {\n name: \"tool1\",\n description: \"First tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n {\n name: \"tool2\",\n description: \"Second tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg2: { type: \"number\" } },\n },\n },\n ]);\n });\n\n it(\"should handle single page of tools\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockTools = [\n {\n name: \"tool1\",\n description: \"Only tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n ];\n\n const mockResponse = {\n tools: mockTools,\n nextCursor: undefined,\n };\n\n mockClientInstance.listTools.mockResolvedValue(mockResponse);\n\n const result = await client.listTools();\n\n expect(mockClientInstance.listTools).toHaveBeenCalledTimes(1);\n expect(result).toEqual([\n {\n name: \"tool1\",\n description: \"Only tool\",\n inputSchema: {\n type: \"object\",\n properties: { arg1: { type: \"string\" } },\n },\n },\n ]);\n });\n\n it(\"should throw error for invalid input schema\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockTools = [\n {\n name: \"invalid-tool\",\n description: \"Tool with invalid schema\",\n inputSchema: { type: \"string\" }, // Invalid - should be object\n },\n ];\n\n const mockResponse = {\n tools: mockTools,\n nextCursor: undefined,\n };\n\n mockClientInstance.listTools.mockResolvedValue(mockResponse);\n\n await expect(client.listTools()).rejects.toThrow(\n \"Input schema for tool invalid-tool is not an object\",\n );\n });\n });\n\n describe(\"callTool\", () => {\n it(\"should call a tool with arguments\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n const mockResult = { success: true, data: \"test result\" };\n mockClientInstance.callTool.mockResolvedValue(mockResult);\n\n const result = await client.callTool(\"testTool\", {\n arg1: \"value1\",\n arg2: 42,\n });\n\n expect(mockClientInstance.callTool).toHaveBeenCalledWith({\n name: \"testTool\",\n arguments: { arg1: \"value1\", arg2: 42 },\n });\n expect(result).toBe(mockResult);\n });\n\n it(\"should handle tool call errors\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n const error = new Error(\"Tool call failed\");\n mockClientInstance.callTool.mockRejectedValue(error);\n\n await expect(client.callTool(\"testTool\", {})).rejects.toThrow(\n \"Tool call failed\",\n );\n });\n });\n\n describe(\"transport initialization\", () => {\n it(\"should initialize HTTP transport with session ID\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const headers = { Authorization: \"Bearer token\" };\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n headers,\n undefined,\n undefined,\n );\n\n expect(MockedStreamableHTTPClientTransport).toHaveBeenCalledWith(\n new URL(endpoint),\n { sessionId: undefined, requestInit: { headers } },\n );\n });\n\n it(\"should initialize SSE transport without session ID\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const headers = { Authorization: \"Bearer token\" };\n\n await MCPClient.create(\n endpoint,\n MCPTransport.SSE,\n headers,\n undefined,\n undefined,\n );\n\n expect(MockedSSEClientTransport).toHaveBeenCalledWith(new URL(endpoint), {\n requestInit: { headers },\n });\n });\n });\n\n describe(\"client initialization\", () => {\n it(\"should initialize client with correct name and version\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n );\n\n expect(MockedClient).toHaveBeenCalledWith(\n {\n name: \"tambo-mcp-client\",\n version: \"1.0.0\",\n },\n { capabilities: {} },\n );\n });\n });\n\n describe(\"handlers (elicitation/sampling)\", () => {\n it(\"sets handlers on create when provided\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const elicitation = jest.fn(async () => ({}) as any);\n const sampling = jest.fn(async () => ({}) as any);\n\n await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n { elicitation, sampling },\n );\n\n expect(MockedClient).toHaveBeenLastCalledWith(\n {\n name: \"tambo-mcp-client\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n elicitation: {},\n sampling: {},\n },\n },\n );\n\n // Request handlers should be set for both\n expect(mockClientInstance.setRequestHandler).toHaveBeenCalled();\n expect(\n (mockClientInstance.setRequestHandler as jest.Mock).mock.calls.length,\n ).toBeGreaterThanOrEqual(2);\n });\n\n it(\"removes elicitation handler when set to undefined\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n {\n elicitation: async () => ({}) as any,\n },\n );\n\n const removeSpy = mockClientInstance.removeRequestHandler as jest.Mock;\n\n // then remove\n removeSpy.mockClear();\n await client.updateElicitationHandler(undefined);\n expect(removeSpy).toHaveBeenCalledWith(expect.any(String));\n });\n\n it(\"removes sampling handler when set to undefined\", async () => {\n const endpoint = \"https://api.example.com/mcp\";\n const client = await MCPClient.create(\n endpoint,\n MCPTransport.HTTP,\n undefined,\n undefined,\n undefined,\n {\n sampling: async () => ({}) as any,\n },\n );\n\n const removeSpy = mockClientInstance.removeRequestHandler as jest.Mock;\n\n // then remove\n removeSpy.mockClear();\n await client.updateSamplingHandler(undefined);\n expect(removeSpy).toHaveBeenCalledWith(expect.any(String));\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-hooks.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAGzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,SAAS,EAEf,MAAM,sBAAsB,CAAC;AAkC9B,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAoBzE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,GACvB,KAAK,IAAI,gBAAgB,CAE3B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;gBA/D3C,kBAAkB;;WAoInB,KAAK,GAAG,IAAI;YACX,KAAK,EAAE;eACJ,OAAO;eACP,OAAO;aACT,OAAO;cACN,OAAO;kBACH,OAAO;gBACT,OAAO;eACR,OAAO;aACT,MAAM,OAAO,CAAC,IAAI,CAAC;EAb7B;AAmDD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,GAChB,MAAM,IAAI,kBAAkB,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0ClC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM;;WArH9C,KAAK,GAAG,IAAI;YACX,KAAK,EAAE;eACJ,OAAO;eACP,OAAO;aACT,OAAO;cACN,OAAO;kBACH,OAAO;gBACT,OAAO;eACR,OAAO;aACT,MAAM,OAAO,CAAC,IAAI,CAAC;EAiP7B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;iBAoElE"}
1
+ {"version":3,"file":"mcp-hooks.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAGzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,SAAS,EAEf,MAAM,sBAAsB,CAAC;AAqC9B,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAoBzE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,GACvB,KAAK,IAAI,gBAAgB,CAE3B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;gBA/D3C,kBAAkB;;WAoInB,KAAK,GAAG,IAAI;YACX,KAAK,EAAE;eACJ,OAAO;eACP,OAAO;aACT,OAAO;cACN,OAAO;kBACH,OAAO;gBACT,OAAO;eACR,OAAO;aACT,MAAM,OAAO,CAAC,IAAI,CAAC;EAb7B;AAmDD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,GAChB,MAAM,IAAI,kBAAkB,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0ClC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM;;WArH9C,KAAK,GAAG,IAAI;YACX,KAAK,EAAE;eACJ,OAAO;eACP,OAAO;aACT,OAAO;cACN,OAAO;kBACH,OAAO;gBACT,OAAO;eACR,OAAO;aACT,MAAM,OAAO,CAAC,IAAI,CAAC;EAiP7B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;iBAoElE"}
@@ -2,11 +2,12 @@ import { ErrorCode, McpError, } from "@modelcontextprotocol/sdk/types.js";
2
2
  import * as React from "react";
3
3
  import { useTamboQueries, useTamboQuery } from "../hooks/react-query-hooks.js";
4
4
  import { useTamboRegistry } from "../providers/tambo-registry-provider.js";
5
- import { REGISTRY_SERVER_KEY } from "./mcp-constants.js";
5
+ import { REGISTRY_SERVER_KEY } from "@tambo-ai/client";
6
6
  import { useTamboMcpServers, } from "./tambo-mcp-provider.js";
7
7
  /**
8
8
  * Check if an error is an MCP MethodNotFound error (-32601).
9
9
  * This error occurs when a server doesn't support a particular method.
10
+ * @returns True if the error is a MethodNotFound MCP error.
10
11
  */
11
12
  function isMethodNotFoundError(error) {
12
13
  return error instanceof McpError && error.code === ErrorCode.MethodNotFound;
@@ -15,6 +16,7 @@ function isMethodNotFoundError(error) {
15
16
  * Check if an MCP server supports listing prompts.
16
17
  * Returns true if capabilities are unknown (undefined) to maintain backward compatibility,
17
18
  * since some servers don't properly report capabilities.
19
+ * @returns True if the server supports prompts.
18
20
  */
19
21
  function serverSupportsPrompts(server) {
20
22
  const capabilities = server.client.getServerCapabilities?.();
@@ -27,6 +29,7 @@ function serverSupportsPrompts(server) {
27
29
  * Check if an MCP server supports listing resources.
28
30
  * Returns true if capabilities are unknown (undefined) to maintain backward compatibility,
29
31
  * since some servers don't properly report capabilities.
32
+ * @returns True if the server supports resources.
30
33
  */
31
34
  function serverSupportsResources(server) {
32
35
  const capabilities = server.client.getServerCapabilities?.();