@tambo-ai/react 0.71.0 → 0.73.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 (167) hide show
  1. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
  2. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
  3. package/dist/v1/hooks/use-tambo-v1-component-state.js +134 -0
  4. package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
  5. package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
  6. package/dist/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
  7. package/dist/v1/hooks/use-tambo-v1-component-state.test.js +292 -0
  8. package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
  9. package/dist/v1/hooks/use-tambo-v1-messages.test.js +22 -9
  10. package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
  11. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +1 -0
  12. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  13. package/dist/v1/hooks/use-tambo-v1-send-message.js +9 -2
  14. package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  15. package/dist/v1/hooks/use-tambo-v1-send-message.test.js +22 -9
  16. package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  17. package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts +91 -0
  18. package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -0
  19. package/dist/v1/hooks/use-tambo-v1-suggestions.js +152 -0
  20. package/dist/v1/hooks/use-tambo-v1-suggestions.js.map +1 -0
  21. package/dist/v1/hooks/use-tambo-v1-suggestions.test.d.ts +2 -0
  22. package/dist/v1/hooks/use-tambo-v1-suggestions.test.d.ts.map +1 -0
  23. package/dist/v1/hooks/use-tambo-v1-suggestions.test.js +511 -0
  24. package/dist/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -0
  25. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +11 -0
  26. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
  27. package/dist/v1/hooks/use-tambo-v1-thread-input.js +16 -0
  28. package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
  29. package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
  30. package/dist/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
  31. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +297 -0
  32. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
  33. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts +6 -4
  34. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
  35. package/dist/v1/hooks/use-tambo-v1-thread-list.js +2 -2
  36. package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
  37. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +2 -2
  38. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
  39. package/dist/v1/hooks/use-tambo-v1.test.js +16 -7
  40. package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
  41. package/dist/v1/index.d.ts +39 -19
  42. package/dist/v1/index.d.ts.map +1 -1
  43. package/dist/v1/index.js +60 -34
  44. package/dist/v1/index.js.map +1 -1
  45. package/dist/v1/providers/tambo-v1-provider.d.ts +61 -1
  46. package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  47. package/dist/v1/providers/tambo-v1-provider.js +35 -3
  48. package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
  49. package/dist/v1/providers/tambo-v1-provider.test.js +78 -3
  50. package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -1
  51. package/dist/v1/providers/tambo-v1-stream-context.d.ts +19 -10
  52. package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  53. package/dist/v1/providers/tambo-v1-stream-context.js +43 -53
  54. package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
  55. package/dist/v1/providers/tambo-v1-stream-context.test.js +94 -19
  56. package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  57. package/dist/v1/providers/tambo-v1-stub-provider.d.ts +74 -0
  58. package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -0
  59. package/dist/v1/providers/tambo-v1-stub-provider.js +212 -0
  60. package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -0
  61. package/dist/v1/providers/tambo-v1-stub-provider.test.d.ts +2 -0
  62. package/dist/v1/providers/tambo-v1-stub-provider.test.d.ts.map +1 -0
  63. package/dist/v1/providers/tambo-v1-stub-provider.test.js +162 -0
  64. package/dist/v1/providers/tambo-v1-stub-provider.test.js.map +1 -0
  65. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +105 -0
  66. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -0
  67. package/dist/v1/providers/tambo-v1-thread-input-provider.js +191 -0
  68. package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -0
  69. package/dist/v1/types/message.d.ts +27 -2
  70. package/dist/v1/types/message.d.ts.map +1 -1
  71. package/dist/v1/types/message.js.map +1 -1
  72. package/dist/v1/utils/component-renderer.d.ts +37 -0
  73. package/dist/v1/utils/component-renderer.d.ts.map +1 -0
  74. package/dist/v1/utils/component-renderer.js +70 -0
  75. package/dist/v1/utils/component-renderer.js.map +1 -0
  76. package/dist/v1/utils/component-renderer.test.d.ts +2 -0
  77. package/dist/v1/utils/component-renderer.test.d.ts.map +1 -0
  78. package/dist/v1/utils/component-renderer.test.js +45 -0
  79. package/dist/v1/utils/component-renderer.test.js.map +1 -0
  80. package/dist/v1/utils/event-accumulator.js +28 -8
  81. package/dist/v1/utils/event-accumulator.js.map +1 -1
  82. package/dist/v1/utils/event-accumulator.test.js +201 -6
  83. package/dist/v1/utils/event-accumulator.test.js.map +1 -1
  84. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +44 -0
  85. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -0
  86. package/esm/v1/hooks/use-tambo-v1-component-state.js +131 -0
  87. package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -0
  88. package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts +2 -0
  89. package/esm/v1/hooks/use-tambo-v1-component-state.test.d.ts.map +1 -0
  90. package/esm/v1/hooks/use-tambo-v1-component-state.test.js +290 -0
  91. package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -0
  92. package/esm/v1/hooks/use-tambo-v1-messages.test.js +22 -9
  93. package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
  94. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +1 -0
  95. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  96. package/esm/v1/hooks/use-tambo-v1-send-message.js +9 -2
  97. package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  98. package/esm/v1/hooks/use-tambo-v1-send-message.test.js +22 -9
  99. package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  100. package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts +91 -0
  101. package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -0
  102. package/esm/v1/hooks/use-tambo-v1-suggestions.js +149 -0
  103. package/esm/v1/hooks/use-tambo-v1-suggestions.js.map +1 -0
  104. package/esm/v1/hooks/use-tambo-v1-suggestions.test.d.ts +2 -0
  105. package/esm/v1/hooks/use-tambo-v1-suggestions.test.d.ts.map +1 -0
  106. package/esm/v1/hooks/use-tambo-v1-suggestions.test.js +506 -0
  107. package/esm/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -0
  108. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +11 -0
  109. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -0
  110. package/esm/v1/hooks/use-tambo-v1-thread-input.js +12 -0
  111. package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -0
  112. package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts +2 -0
  113. package/esm/v1/hooks/use-tambo-v1-thread-input.test.d.ts.map +1 -0
  114. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +292 -0
  115. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -0
  116. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts +6 -4
  117. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
  118. package/esm/v1/hooks/use-tambo-v1-thread-list.js +2 -2
  119. package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
  120. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +2 -2
  121. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
  122. package/esm/v1/hooks/use-tambo-v1.test.js +16 -7
  123. package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
  124. package/esm/v1/index.d.ts +39 -19
  125. package/esm/v1/index.d.ts.map +1 -1
  126. package/esm/v1/index.js +43 -19
  127. package/esm/v1/index.js.map +1 -1
  128. package/esm/v1/providers/tambo-v1-provider.d.ts +61 -1
  129. package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  130. package/esm/v1/providers/tambo-v1-provider.js +34 -4
  131. package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
  132. package/esm/v1/providers/tambo-v1-provider.test.js +79 -4
  133. package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -1
  134. package/esm/v1/providers/tambo-v1-stream-context.d.ts +19 -10
  135. package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  136. package/esm/v1/providers/tambo-v1-stream-context.js +44 -54
  137. package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
  138. package/esm/v1/providers/tambo-v1-stream-context.test.js +95 -20
  139. package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  140. package/esm/v1/providers/tambo-v1-stub-provider.d.ts +74 -0
  141. package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -0
  142. package/esm/v1/providers/tambo-v1-stub-provider.js +176 -0
  143. package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -0
  144. package/esm/v1/providers/tambo-v1-stub-provider.test.d.ts +2 -0
  145. package/esm/v1/providers/tambo-v1-stub-provider.test.d.ts.map +1 -0
  146. package/esm/v1/providers/tambo-v1-stub-provider.test.js +157 -0
  147. package/esm/v1/providers/tambo-v1-stub-provider.test.js.map +1 -0
  148. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +105 -0
  149. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -0
  150. package/esm/v1/providers/tambo-v1-thread-input-provider.js +153 -0
  151. package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -0
  152. package/esm/v1/types/message.d.ts +27 -2
  153. package/esm/v1/types/message.d.ts.map +1 -1
  154. package/esm/v1/types/message.js.map +1 -1
  155. package/esm/v1/utils/component-renderer.d.ts +37 -0
  156. package/esm/v1/utils/component-renderer.d.ts.map +1 -0
  157. package/esm/v1/utils/component-renderer.js +33 -0
  158. package/esm/v1/utils/component-renderer.js.map +1 -0
  159. package/esm/v1/utils/component-renderer.test.d.ts +2 -0
  160. package/esm/v1/utils/component-renderer.test.d.ts.map +1 -0
  161. package/esm/v1/utils/component-renderer.test.js +40 -0
  162. package/esm/v1/utils/component-renderer.test.js.map +1 -0
  163. package/esm/v1/utils/event-accumulator.js +28 -8
  164. package/esm/v1/utils/event-accumulator.js.map +1 -1
  165. package/esm/v1/utils/event-accumulator.test.js +201 -6
  166. package/esm/v1/utils/event-accumulator.test.js.map +1 -1
  167. package/package.json +2 -2
@@ -4,19 +4,28 @@
4
4
  * Provides React hooks and providers for building AI-powered applications
5
5
  * using the v1 streaming API with AG-UI protocol.
6
6
  *
7
+ * ## Authentication & Thread Ownership
8
+ *
9
+ * All thread operations require user identification. Provide ONE of:
10
+ * - `userKey` - Direct user identifier (for server-side or trusted environments)
11
+ * - `userToken` - OAuth bearer token containing the userKey (for client-side apps)
12
+ *
13
+ * Threads are scoped to the userKey - each user only sees their own threads.
14
+ *
7
15
  * ## Quick Start
8
16
  *
9
17
  * ```tsx
10
18
  * import {
11
19
  * TamboV1Provider,
12
20
  * useTamboV1,
13
- * useTamboV1SendMessage,
21
+ * useTamboV1ThreadInput,
14
22
  * } from '@tambo-ai/react/v1';
15
23
  *
16
24
  * function App() {
17
25
  * return (
18
26
  * <TamboV1Provider
19
27
  * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
28
+ * userKey={currentUserId} // Required: identifies thread owner
20
29
  * components={[WeatherCard]}
21
30
  * tools={[searchTool]}
22
31
  * >
@@ -28,21 +37,21 @@
28
37
  * function ChatInterface() {
29
38
  * const [threadId, setThreadId] = useState<string>();
30
39
  * const { messages, isStreaming } = useTamboV1(threadId);
31
- * const sendMessage = useTamboV1SendMessage(threadId);
40
+ * const { value, setValue, submit, isPending } = useTamboV1ThreadInput(threadId);
32
41
  *
33
- * const handleSend = async (text: string) => {
34
- * const result = await sendMessage.mutateAsync({
35
- * message: { role: 'user', content: [{ type: 'text', text }] },
36
- * });
42
+ * const handleSubmit = async (e: React.FormEvent) => {
43
+ * e.preventDefault();
44
+ * const result = await submit();
37
45
  * if (!threadId) setThreadId(result.threadId);
38
46
  * };
39
47
  *
40
48
  * return (
41
- * <div>
49
+ * <form onSubmit={handleSubmit}>
42
50
  * {messages.map(msg => <Message key={msg.id} message={msg} />)}
43
51
  * {isStreaming && <LoadingIndicator />}
44
- * <MessageInput onSend={handleSend} />
45
- * </div>
52
+ * <input value={value} onChange={(e) => setValue(e.target.value)} />
53
+ * <button disabled={isPending}>Send</button>
54
+ * </form>
46
55
  * );
47
56
  * }
48
57
  * ```
@@ -57,17 +66,28 @@
57
66
  * SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`
58
67
  * AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`
59
68
  */
60
- export { TamboV1Provider, type TamboV1ProviderProps, } from "./providers/tambo-v1-provider";
61
- export { TamboV1StreamProvider, useStreamState, useStreamDispatch, useThreadManagement, type ThreadManagement, } from "./providers/tambo-v1-stream-context";
69
+ export { TamboV1Provider, type TamboV1ProviderProps, useTamboV1Config, type TamboV1Config, } from "./providers/tambo-v1-provider";
62
70
  export { TamboRegistryProvider } from "../providers/tambo-registry-provider";
63
- export { useTamboV1, type UseTamboV1Return } from "./hooks/use-tambo-v1";
64
- export { useTamboV1Messages, type UseTamboV1MessagesReturn, } from "./hooks/use-tambo-v1-messages";
65
- export { useTamboV1SendMessage, type SendMessageOptions, } from "./hooks/use-tambo-v1-send-message";
71
+ export { TamboClientProvider, useIsTamboTokenUpdating, } from "../providers/tambo-client-provider";
72
+ export { TamboContextHelpersProvider, useTamboContextHelpers, } from "../providers/tambo-context-helpers-provider";
73
+ export { TamboV1ThreadInputProvider, type TamboV1ThreadInputContextProps, type SubmitOptions, } from "./providers/tambo-v1-thread-input-provider";
74
+ export { TamboV1StubProvider, type TamboV1StubProviderProps, } from "./providers/tambo-v1-stub-provider";
75
+ export { useTamboV1 } from "./hooks/use-tambo-v1";
76
+ export { useTamboV1ThreadInput } from "./hooks/use-tambo-v1-thread-input";
66
77
  export { useTamboV1Thread } from "./hooks/use-tambo-v1-thread";
67
78
  export { useTamboV1ThreadList } from "./hooks/use-tambo-v1-thread-list";
68
- export { applyJsonPatch } from "./utils/json-patch";
69
- export { toAvailableComponent, toAvailableComponents, toAvailableTool, toAvailableTools, } from "./utils/registry-conversion";
70
- export { executeClientTool, executeAllPendingTools, type PendingToolCall, } from "./utils/tool-executor";
71
- export { ToolCallTracker } from "./utils/tool-call-tracker";
72
- export { handleEventStream } from "./utils/stream-handler";
79
+ export { useTamboV1ComponentState } from "./hooks/use-tambo-v1-component-state";
80
+ export { useTamboV1Suggestions, type UseTamboV1SuggestionsOptions, } from "./hooks/use-tambo-v1-suggestions";
81
+ export { useTamboClient } from "../providers/tambo-client-provider";
82
+ export { useMessageImages, type StagedImage, } from "../hooks/use-message-images";
83
+ export { useTamboVoice } from "../hooks/use-tambo-voice";
84
+ export { defineTool } from "../util/registry";
85
+ export { currentPageContextHelper, currentTimeContextHelper, } from "../context-helpers";
86
+ export type { AdditionalContext, ContextHelperFn, ContextHelpers, } from "../context-helpers";
87
+ export type { ComponentContextToolMetadata, ComponentRegistry, ParameterSpec, RegisteredComponent, TamboComponent, TamboTool, ToolAnnotations, } from "../model/component-metadata";
88
+ export { MCPTransport } from "../model/mcp-server-info";
89
+ export type { McpServerInfo, NormalizedMcpServerInfo, } from "../model/mcp-server-info";
90
+ export type { ListResourceItem, ReadResourceResult, ResourceSource, } from "../model/resource-info";
91
+ export type { APIError, RateLimitError, TamboAIError, } from "@tambo-ai/typescript-sdk";
92
+ export type { Suggestion, SuggestionGenerateParams, SuggestionGenerateResponse, SuggestionListResponse, } from "@tambo-ai/typescript-sdk/resources/beta/threads/suggestions";
73
93
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAMH,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAM7E,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EACL,kBAAkB,EAClB,KAAK,wBAAwB,GAC9B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAMxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAMH,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,EACL,0BAA0B,EAC1B,KAAK,8BAA8B,EACnC,KAAK,aAAa,GACnB,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EACL,qBAAqB,EACrB,KAAK,4BAA4B,GAClC,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,UAAU,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,6DAA6D,CAAC"}
package/dist/v1/index.js CHANGED
@@ -5,19 +5,28 @@
5
5
  * Provides React hooks and providers for building AI-powered applications
6
6
  * using the v1 streaming API with AG-UI protocol.
7
7
  *
8
+ * ## Authentication & Thread Ownership
9
+ *
10
+ * All thread operations require user identification. Provide ONE of:
11
+ * - `userKey` - Direct user identifier (for server-side or trusted environments)
12
+ * - `userToken` - OAuth bearer token containing the userKey (for client-side apps)
13
+ *
14
+ * Threads are scoped to the userKey - each user only sees their own threads.
15
+ *
8
16
  * ## Quick Start
9
17
  *
10
18
  * ```tsx
11
19
  * import {
12
20
  * TamboV1Provider,
13
21
  * useTamboV1,
14
- * useTamboV1SendMessage,
22
+ * useTamboV1ThreadInput,
15
23
  * } from '@tambo-ai/react/v1';
16
24
  *
17
25
  * function App() {
18
26
  * return (
19
27
  * <TamboV1Provider
20
28
  * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
29
+ * userKey={currentUserId} // Required: identifies thread owner
21
30
  * components={[WeatherCard]}
22
31
  * tools={[searchTool]}
23
32
  * >
@@ -29,21 +38,21 @@
29
38
  * function ChatInterface() {
30
39
  * const [threadId, setThreadId] = useState<string>();
31
40
  * const { messages, isStreaming } = useTamboV1(threadId);
32
- * const sendMessage = useTamboV1SendMessage(threadId);
41
+ * const { value, setValue, submit, isPending } = useTamboV1ThreadInput(threadId);
33
42
  *
34
- * const handleSend = async (text: string) => {
35
- * const result = await sendMessage.mutateAsync({
36
- * message: { role: 'user', content: [{ type: 'text', text }] },
37
- * });
43
+ * const handleSubmit = async (e: React.FormEvent) => {
44
+ * e.preventDefault();
45
+ * const result = await submit();
38
46
  * if (!threadId) setThreadId(result.threadId);
39
47
  * };
40
48
  *
41
49
  * return (
42
- * <div>
50
+ * <form onSubmit={handleSubmit}>
43
51
  * {messages.map(msg => <Message key={msg.id} message={msg} />)}
44
52
  * {isStreaming && <LoadingIndicator />}
45
- * <MessageInput onSend={handleSend} />
46
- * </div>
53
+ * <input value={value} onChange={(e) => setValue(e.target.value)} />
54
+ * <button disabled={isPending}>Send</button>
55
+ * </form>
47
56
  * );
48
57
  * }
49
58
  * ```
@@ -59,48 +68,65 @@
59
68
  * AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`
60
69
  */
61
70
  Object.defineProperty(exports, "__esModule", { value: true });
62
- exports.handleEventStream = exports.ToolCallTracker = exports.executeAllPendingTools = exports.executeClientTool = exports.toAvailableTools = exports.toAvailableTool = exports.toAvailableComponents = exports.toAvailableComponent = exports.applyJsonPatch = exports.useTamboV1ThreadList = exports.useTamboV1Thread = exports.useTamboV1SendMessage = exports.useTamboV1Messages = exports.useTamboV1 = exports.TamboRegistryProvider = exports.useThreadManagement = exports.useStreamDispatch = exports.useStreamState = exports.TamboV1StreamProvider = exports.TamboV1Provider = void 0;
71
+ exports.MCPTransport = exports.currentTimeContextHelper = exports.currentPageContextHelper = exports.defineTool = exports.useTamboVoice = exports.useMessageImages = exports.useTamboClient = exports.useTamboV1Suggestions = exports.useTamboV1ComponentState = exports.useTamboV1ThreadList = exports.useTamboV1Thread = exports.useTamboV1ThreadInput = exports.useTamboV1 = exports.TamboV1StubProvider = exports.TamboV1ThreadInputProvider = exports.useTamboContextHelpers = exports.TamboContextHelpersProvider = exports.useIsTamboTokenUpdating = exports.TamboClientProvider = exports.TamboRegistryProvider = exports.useTamboV1Config = exports.TamboV1Provider = void 0;
63
72
  // =============================================================================
64
73
  // Providers
65
74
  // =============================================================================
66
75
  var tambo_v1_provider_1 = require("./providers/tambo-v1-provider");
67
76
  Object.defineProperty(exports, "TamboV1Provider", { enumerable: true, get: function () { return tambo_v1_provider_1.TamboV1Provider; } });
68
- var tambo_v1_stream_context_1 = require("./providers/tambo-v1-stream-context");
69
- Object.defineProperty(exports, "TamboV1StreamProvider", { enumerable: true, get: function () { return tambo_v1_stream_context_1.TamboV1StreamProvider; } });
70
- Object.defineProperty(exports, "useStreamState", { enumerable: true, get: function () { return tambo_v1_stream_context_1.useStreamState; } });
71
- Object.defineProperty(exports, "useStreamDispatch", { enumerable: true, get: function () { return tambo_v1_stream_context_1.useStreamDispatch; } });
72
- Object.defineProperty(exports, "useThreadManagement", { enumerable: true, get: function () { return tambo_v1_stream_context_1.useThreadManagement; } });
77
+ Object.defineProperty(exports, "useTamboV1Config", { enumerable: true, get: function () { return tambo_v1_provider_1.useTamboV1Config; } });
73
78
  // Re-export registry provider from beta SDK (works with v1)
74
79
  var tambo_registry_provider_1 = require("../providers/tambo-registry-provider");
75
80
  Object.defineProperty(exports, "TamboRegistryProvider", { enumerable: true, get: function () { return tambo_registry_provider_1.TamboRegistryProvider; } });
81
+ // Re-export client provider from beta SDK (works with v1)
82
+ var tambo_client_provider_1 = require("../providers/tambo-client-provider");
83
+ Object.defineProperty(exports, "TamboClientProvider", { enumerable: true, get: function () { return tambo_client_provider_1.TamboClientProvider; } });
84
+ Object.defineProperty(exports, "useIsTamboTokenUpdating", { enumerable: true, get: function () { return tambo_client_provider_1.useIsTamboTokenUpdating; } });
85
+ // Re-export context helpers from beta SDK (works with v1)
86
+ var tambo_context_helpers_provider_1 = require("../providers/tambo-context-helpers-provider");
87
+ Object.defineProperty(exports, "TamboContextHelpersProvider", { enumerable: true, get: function () { return tambo_context_helpers_provider_1.TamboContextHelpersProvider; } });
88
+ Object.defineProperty(exports, "useTamboContextHelpers", { enumerable: true, get: function () { return tambo_context_helpers_provider_1.useTamboContextHelpers; } });
89
+ // Export v1 thread input provider for advanced composition
90
+ var tambo_v1_thread_input_provider_1 = require("./providers/tambo-v1-thread-input-provider");
91
+ Object.defineProperty(exports, "TamboV1ThreadInputProvider", { enumerable: true, get: function () { return tambo_v1_thread_input_provider_1.TamboV1ThreadInputProvider; } });
92
+ // Export v1 stub provider for testing
93
+ var tambo_v1_stub_provider_1 = require("./providers/tambo-v1-stub-provider");
94
+ Object.defineProperty(exports, "TamboV1StubProvider", { enumerable: true, get: function () { return tambo_v1_stub_provider_1.TamboV1StubProvider; } });
76
95
  // =============================================================================
77
96
  // Hooks
78
97
  // =============================================================================
79
98
  var use_tambo_v1_1 = require("./hooks/use-tambo-v1");
80
99
  Object.defineProperty(exports, "useTamboV1", { enumerable: true, get: function () { return use_tambo_v1_1.useTamboV1; } });
81
- var use_tambo_v1_messages_1 = require("./hooks/use-tambo-v1-messages");
82
- Object.defineProperty(exports, "useTamboV1Messages", { enumerable: true, get: function () { return use_tambo_v1_messages_1.useTamboV1Messages; } });
83
- var use_tambo_v1_send_message_1 = require("./hooks/use-tambo-v1-send-message");
84
- Object.defineProperty(exports, "useTamboV1SendMessage", { enumerable: true, get: function () { return use_tambo_v1_send_message_1.useTamboV1SendMessage; } });
100
+ var use_tambo_v1_thread_input_1 = require("./hooks/use-tambo-v1-thread-input");
101
+ Object.defineProperty(exports, "useTamboV1ThreadInput", { enumerable: true, get: function () { return use_tambo_v1_thread_input_1.useTamboV1ThreadInput; } });
85
102
  var use_tambo_v1_thread_1 = require("./hooks/use-tambo-v1-thread");
86
103
  Object.defineProperty(exports, "useTamboV1Thread", { enumerable: true, get: function () { return use_tambo_v1_thread_1.useTamboV1Thread; } });
87
104
  var use_tambo_v1_thread_list_1 = require("./hooks/use-tambo-v1-thread-list");
88
105
  Object.defineProperty(exports, "useTamboV1ThreadList", { enumerable: true, get: function () { return use_tambo_v1_thread_list_1.useTamboV1ThreadList; } });
106
+ var use_tambo_v1_component_state_1 = require("./hooks/use-tambo-v1-component-state");
107
+ Object.defineProperty(exports, "useTamboV1ComponentState", { enumerable: true, get: function () { return use_tambo_v1_component_state_1.useTamboV1ComponentState; } });
108
+ var use_tambo_v1_suggestions_1 = require("./hooks/use-tambo-v1-suggestions");
109
+ Object.defineProperty(exports, "useTamboV1Suggestions", { enumerable: true, get: function () { return use_tambo_v1_suggestions_1.useTamboV1Suggestions; } });
110
+ // Re-export client hook from beta SDK (works with v1)
111
+ var tambo_client_provider_2 = require("../providers/tambo-client-provider");
112
+ Object.defineProperty(exports, "useTamboClient", { enumerable: true, get: function () { return tambo_client_provider_2.useTamboClient; } });
113
+ // Re-export image handling hook (pure React, API-agnostic)
114
+ var use_message_images_1 = require("../hooks/use-message-images");
115
+ Object.defineProperty(exports, "useMessageImages", { enumerable: true, get: function () { return use_message_images_1.useMessageImages; } });
116
+ // Re-export voice input hook (uses standalone transcription API)
117
+ var use_tambo_voice_1 = require("../hooks/use-tambo-voice");
118
+ Object.defineProperty(exports, "useTamboVoice", { enumerable: true, get: function () { return use_tambo_voice_1.useTamboVoice; } });
89
119
  // =============================================================================
90
- // Utilities
120
+ // Re-exports from Beta SDK (compatible with v1)
91
121
  // =============================================================================
92
- var json_patch_1 = require("./utils/json-patch");
93
- Object.defineProperty(exports, "applyJsonPatch", { enumerable: true, get: function () { return json_patch_1.applyJsonPatch; } });
94
- var registry_conversion_1 = require("./utils/registry-conversion");
95
- Object.defineProperty(exports, "toAvailableComponent", { enumerable: true, get: function () { return registry_conversion_1.toAvailableComponent; } });
96
- Object.defineProperty(exports, "toAvailableComponents", { enumerable: true, get: function () { return registry_conversion_1.toAvailableComponents; } });
97
- Object.defineProperty(exports, "toAvailableTool", { enumerable: true, get: function () { return registry_conversion_1.toAvailableTool; } });
98
- Object.defineProperty(exports, "toAvailableTools", { enumerable: true, get: function () { return registry_conversion_1.toAvailableTools; } });
99
- var tool_executor_1 = require("./utils/tool-executor");
100
- Object.defineProperty(exports, "executeClientTool", { enumerable: true, get: function () { return tool_executor_1.executeClientTool; } });
101
- Object.defineProperty(exports, "executeAllPendingTools", { enumerable: true, get: function () { return tool_executor_1.executeAllPendingTools; } });
102
- var tool_call_tracker_1 = require("./utils/tool-call-tracker");
103
- Object.defineProperty(exports, "ToolCallTracker", { enumerable: true, get: function () { return tool_call_tracker_1.ToolCallTracker; } });
104
- var stream_handler_1 = require("./utils/stream-handler");
105
- Object.defineProperty(exports, "handleEventStream", { enumerable: true, get: function () { return stream_handler_1.handleEventStream; } });
122
+ // Tool definition helper
123
+ var registry_1 = require("../util/registry");
124
+ Object.defineProperty(exports, "defineTool", { enumerable: true, get: function () { return registry_1.defineTool; } });
125
+ // Built-in context helpers
126
+ var context_helpers_1 = require("../context-helpers");
127
+ Object.defineProperty(exports, "currentPageContextHelper", { enumerable: true, get: function () { return context_helpers_1.currentPageContextHelper; } });
128
+ Object.defineProperty(exports, "currentTimeContextHelper", { enumerable: true, get: function () { return context_helpers_1.currentTimeContextHelper; } });
129
+ // MCP server types
130
+ var mcp_server_info_1 = require("../model/mcp-server-info");
131
+ Object.defineProperty(exports, "MCPTransport", { enumerable: true, get: function () { return mcp_server_info_1.MCPTransport; } });
106
132
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;;;AAEH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,mEAGuC;AAFrC,oHAAA,eAAe,OAAA;AAIjB,+EAM6C;AAL3C,gIAAA,qBAAqB,OAAA;AACrB,yHAAA,cAAc,OAAA;AACd,4HAAA,iBAAiB,OAAA;AACjB,8HAAA,mBAAmB,OAAA;AAIrB,4DAA4D;AAC5D,gFAA6E;AAApE,gIAAA,qBAAqB,OAAA;AAE9B,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,qDAAyE;AAAhE,0GAAA,UAAU,OAAA;AAEnB,uEAGuC;AAFrC,2HAAA,kBAAkB,OAAA;AAIpB,+EAG2C;AAFzC,kIAAA,qBAAqB,OAAA;AAIvB,mEAA+D;AAAtD,uHAAA,gBAAgB,OAAA;AAEzB,6EAAwE;AAA/D,gIAAA,oBAAoB,OAAA;AAE7B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,iDAAoD;AAA3C,4GAAA,cAAc,OAAA;AAEvB,mEAKqC;AAJnC,2HAAA,oBAAoB,OAAA;AACpB,4HAAA,qBAAqB,OAAA;AACrB,sHAAA,eAAe,OAAA;AACf,uHAAA,gBAAgB,OAAA;AAGlB,uDAI+B;AAH7B,kHAAA,iBAAiB,OAAA;AACjB,uHAAA,sBAAsB,OAAA;AAIxB,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AAExB,yDAA2D;AAAlD,mHAAA,iBAAiB,OAAA","sourcesContent":["/**\n * `@tambo-ai/react/v1` - React SDK for Tambo v1 API\n *\n * Provides React hooks and providers for building AI-powered applications\n * using the v1 streaming API with AG-UI protocol.\n *\n * ## Quick Start\n *\n * ```tsx\n * import {\n * TamboV1Provider,\n * useTamboV1,\n * useTamboV1SendMessage,\n * } from '@tambo-ai/react/v1';\n *\n * function App() {\n * return (\n * <TamboV1Provider\n * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}\n * components={[WeatherCard]}\n * tools={[searchTool]}\n * >\n * <ChatInterface />\n * </TamboV1Provider>\n * );\n * }\n *\n * function ChatInterface() {\n * const [threadId, setThreadId] = useState<string>();\n * const { messages, isStreaming } = useTamboV1(threadId);\n * const sendMessage = useTamboV1SendMessage(threadId);\n *\n * const handleSend = async (text: string) => {\n * const result = await sendMessage.mutateAsync({\n * message: { role: 'user', content: [{ type: 'text', text }] },\n * });\n * if (!threadId) setThreadId(result.threadId);\n * };\n *\n * return (\n * <div>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * <MessageInput onSend={handleSend} />\n * </div>\n * );\n * }\n * ```\n *\n * ## Type Imports\n *\n * Types are imported directly from specific files:\n * - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`\n * - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`\n * - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`\n *\n * SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`\n * AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`\n */\n\n// =============================================================================\n// Providers\n// =============================================================================\n\nexport {\n TamboV1Provider,\n type TamboV1ProviderProps,\n} from \"./providers/tambo-v1-provider\";\n\nexport {\n TamboV1StreamProvider,\n useStreamState,\n useStreamDispatch,\n useThreadManagement,\n type ThreadManagement,\n} from \"./providers/tambo-v1-stream-context\";\n\n// Re-export registry provider from beta SDK (works with v1)\nexport { TamboRegistryProvider } from \"../providers/tambo-registry-provider\";\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\nexport { useTamboV1, type UseTamboV1Return } from \"./hooks/use-tambo-v1\";\n\nexport {\n useTamboV1Messages,\n type UseTamboV1MessagesReturn,\n} from \"./hooks/use-tambo-v1-messages\";\n\nexport {\n useTamboV1SendMessage,\n type SendMessageOptions,\n} from \"./hooks/use-tambo-v1-send-message\";\n\nexport { useTamboV1Thread } from \"./hooks/use-tambo-v1-thread\";\n\nexport { useTamboV1ThreadList } from \"./hooks/use-tambo-v1-thread-list\";\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nexport { applyJsonPatch } from \"./utils/json-patch\";\n\nexport {\n toAvailableComponent,\n toAvailableComponents,\n toAvailableTool,\n toAvailableTools,\n} from \"./utils/registry-conversion\";\n\nexport {\n executeClientTool,\n executeAllPendingTools,\n type PendingToolCall,\n} from \"./utils/tool-executor\";\n\nexport { ToolCallTracker } from \"./utils/tool-call-tracker\";\n\nexport { handleEventStream } from \"./utils/stream-handler\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;;;AAEH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,mEAKuC;AAJrC,oHAAA,eAAe,OAAA;AAEf,qHAAA,gBAAgB,OAAA;AAIlB,4DAA4D;AAC5D,gFAA6E;AAApE,gIAAA,qBAAqB,OAAA;AAE9B,0DAA0D;AAC1D,4EAG4C;AAF1C,4HAAA,mBAAmB,OAAA;AACnB,gIAAA,uBAAuB,OAAA;AAGzB,0DAA0D;AAC1D,8FAGqD;AAFnD,6IAAA,2BAA2B,OAAA;AAC3B,wIAAA,sBAAsB,OAAA;AAGxB,2DAA2D;AAC3D,6FAIoD;AAHlD,4IAAA,0BAA0B,OAAA;AAK5B,sCAAsC;AACtC,6EAG4C;AAF1C,6HAAA,mBAAmB,OAAA;AAIrB,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,qDAAkD;AAAzC,0GAAA,UAAU,OAAA;AAEnB,+EAA0E;AAAjE,kIAAA,qBAAqB,OAAA;AAE9B,mEAA+D;AAAtD,uHAAA,gBAAgB,OAAA;AAEzB,6EAAwE;AAA/D,gIAAA,oBAAoB,OAAA;AAE7B,qFAAgF;AAAvE,wIAAA,wBAAwB,OAAA;AAEjC,6EAG0C;AAFxC,iIAAA,qBAAqB,OAAA;AAIvB,sDAAsD;AACtD,4EAAoE;AAA3D,uHAAA,cAAc,OAAA;AAEvB,2DAA2D;AAC3D,kEAGqC;AAFnC,sHAAA,gBAAgB,OAAA;AAIlB,iEAAiE;AACjE,4DAAyD;AAAhD,gHAAA,aAAa,OAAA;AAEtB,gFAAgF;AAChF,gDAAgD;AAChD,gFAAgF;AAEhF,yBAAyB;AACzB,6CAA8C;AAArC,sGAAA,UAAU,OAAA;AAEnB,2BAA2B;AAC3B,sDAG4B;AAF1B,2HAAA,wBAAwB,OAAA;AACxB,2HAAA,wBAAwB,OAAA;AAqB1B,mBAAmB;AACnB,4DAAwD;AAA/C,+GAAA,YAAY,OAAA","sourcesContent":["/**\n * `@tambo-ai/react/v1` - React SDK for Tambo v1 API\n *\n * Provides React hooks and providers for building AI-powered applications\n * using the v1 streaming API with AG-UI protocol.\n *\n * ## Authentication & Thread Ownership\n *\n * All thread operations require user identification. Provide ONE of:\n * - `userKey` - Direct user identifier (for server-side or trusted environments)\n * - `userToken` - OAuth bearer token containing the userKey (for client-side apps)\n *\n * Threads are scoped to the userKey - each user only sees their own threads.\n *\n * ## Quick Start\n *\n * ```tsx\n * import {\n * TamboV1Provider,\n * useTamboV1,\n * useTamboV1ThreadInput,\n * } from '@tambo-ai/react/v1';\n *\n * function App() {\n * return (\n * <TamboV1Provider\n * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}\n * userKey={currentUserId} // Required: identifies thread owner\n * components={[WeatherCard]}\n * tools={[searchTool]}\n * >\n * <ChatInterface />\n * </TamboV1Provider>\n * );\n * }\n *\n * function ChatInterface() {\n * const [threadId, setThreadId] = useState<string>();\n * const { messages, isStreaming } = useTamboV1(threadId);\n * const { value, setValue, submit, isPending } = useTamboV1ThreadInput(threadId);\n *\n * const handleSubmit = async (e: React.FormEvent) => {\n * e.preventDefault();\n * const result = await submit();\n * if (!threadId) setThreadId(result.threadId);\n * };\n *\n * return (\n * <form onSubmit={handleSubmit}>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * <input value={value} onChange={(e) => setValue(e.target.value)} />\n * <button disabled={isPending}>Send</button>\n * </form>\n * );\n * }\n * ```\n *\n * ## Type Imports\n *\n * Types are imported directly from specific files:\n * - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`\n * - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`\n * - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`\n *\n * SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`\n * AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`\n */\n\n// =============================================================================\n// Providers\n// =============================================================================\n\nexport {\n TamboV1Provider,\n type TamboV1ProviderProps,\n useTamboV1Config,\n type TamboV1Config,\n} from \"./providers/tambo-v1-provider\";\n\n// Re-export registry provider from beta SDK (works with v1)\nexport { TamboRegistryProvider } from \"../providers/tambo-registry-provider\";\n\n// Re-export client provider from beta SDK (works with v1)\nexport {\n TamboClientProvider,\n useIsTamboTokenUpdating,\n} from \"../providers/tambo-client-provider\";\n\n// Re-export context helpers from beta SDK (works with v1)\nexport {\n TamboContextHelpersProvider,\n useTamboContextHelpers,\n} from \"../providers/tambo-context-helpers-provider\";\n\n// Export v1 thread input provider for advanced composition\nexport {\n TamboV1ThreadInputProvider,\n type TamboV1ThreadInputContextProps,\n type SubmitOptions,\n} from \"./providers/tambo-v1-thread-input-provider\";\n\n// Export v1 stub provider for testing\nexport {\n TamboV1StubProvider,\n type TamboV1StubProviderProps,\n} from \"./providers/tambo-v1-stub-provider\";\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\nexport { useTamboV1 } from \"./hooks/use-tambo-v1\";\n\nexport { useTamboV1ThreadInput } from \"./hooks/use-tambo-v1-thread-input\";\n\nexport { useTamboV1Thread } from \"./hooks/use-tambo-v1-thread\";\n\nexport { useTamboV1ThreadList } from \"./hooks/use-tambo-v1-thread-list\";\n\nexport { useTamboV1ComponentState } from \"./hooks/use-tambo-v1-component-state\";\n\nexport {\n useTamboV1Suggestions,\n type UseTamboV1SuggestionsOptions,\n} from \"./hooks/use-tambo-v1-suggestions\";\n\n// Re-export client hook from beta SDK (works with v1)\nexport { useTamboClient } from \"../providers/tambo-client-provider\";\n\n// Re-export image handling hook (pure React, API-agnostic)\nexport {\n useMessageImages,\n type StagedImage,\n} from \"../hooks/use-message-images\";\n\n// Re-export voice input hook (uses standalone transcription API)\nexport { useTamboVoice } from \"../hooks/use-tambo-voice\";\n\n// =============================================================================\n// Re-exports from Beta SDK (compatible with v1)\n// =============================================================================\n\n// Tool definition helper\nexport { defineTool } from \"../util/registry\";\n\n// Built-in context helpers\nexport {\n currentPageContextHelper,\n currentTimeContextHelper,\n} from \"../context-helpers\";\n\n// Context helper types\nexport type {\n AdditionalContext,\n ContextHelperFn,\n ContextHelpers,\n} from \"../context-helpers\";\n\n// Component and tool types\nexport type {\n ComponentContextToolMetadata,\n ComponentRegistry,\n ParameterSpec,\n RegisteredComponent,\n TamboComponent,\n TamboTool,\n ToolAnnotations,\n} from \"../model/component-metadata\";\n\n// MCP server types\nexport { MCPTransport } from \"../model/mcp-server-info\";\nexport type {\n McpServerInfo,\n NormalizedMcpServerInfo,\n} from \"../model/mcp-server-info\";\n\n// Resource types\nexport type {\n ListResourceItem,\n ReadResourceResult,\n ResourceSource,\n} from \"../model/resource-info\";\n\n// Error types from Tambo TypeScript SDK\nexport type {\n APIError,\n RateLimitError,\n TamboAIError,\n} from \"@tambo-ai/typescript-sdk\";\n\n// Suggestion types from Tambo TypeScript SDK\nexport type {\n Suggestion,\n SuggestionGenerateParams,\n SuggestionGenerateResponse,\n SuggestionListResponse,\n} from \"@tambo-ai/typescript-sdk/resources/beta/threads/suggestions\";\n"]}
@@ -4,6 +4,7 @@
4
4
  * Composes the necessary providers for the v1 SDK:
5
5
  * - TamboClientProvider: API client and authentication
6
6
  * - TamboRegistryProvider: Component and tool registration
7
+ * - TamboContextHelpersProvider: Context helper functions
7
8
  * - TamboV1StreamProvider: Streaming state management
8
9
  *
9
10
  * This provider should wrap your entire application or the portion
@@ -13,7 +14,28 @@ import React, { type PropsWithChildren } from "react";
13
14
  import { QueryClient } from "@tanstack/react-query";
14
15
  import { type TamboClientProviderProps } from "../../providers/tambo-client-provider";
15
16
  import { type TamboRegistryProviderProps } from "../../providers/tambo-registry-provider";
17
+ import type { ContextHelpers } from "../../context-helpers";
16
18
  import type { McpServerInfo } from "../../model/mcp-server-info";
19
+ import type { ListResourceItem, ResourceSource } from "../../model/resource-info";
20
+ /**
21
+ * Configuration values for v1 SDK.
22
+ * These are static values that don't change during the session.
23
+ */
24
+ export interface TamboV1Config {
25
+ /** User key for thread ownership and scoping */
26
+ userKey?: string;
27
+ }
28
+ /**
29
+ * Context for v1 SDK configuration.
30
+ * @internal
31
+ */
32
+ export declare const TamboV1ConfigContext: React.Context<TamboV1Config | null>;
33
+ /**
34
+ * Hook to access v1 SDK configuration.
35
+ * @returns Configuration values including userKey
36
+ * @throws {Error} If used outside TamboV1Provider
37
+ */
38
+ export declare function useTamboV1Config(): TamboV1Config;
17
39
  /**
18
40
  * Props for TamboV1Provider
19
41
  */
@@ -38,6 +60,39 @@ export interface TamboV1ProviderProps extends Pick<TamboClientProviderProps, "ap
38
60
  * If not provided, an error will be thrown for unknown tools.
39
61
  */
40
62
  onCallUnregisteredTool?: TamboRegistryProviderProps["onCallUnregisteredTool"];
63
+ /**
64
+ * Static resources to register with the registry.
65
+ * These will be available for the AI to access.
66
+ */
67
+ resources?: ListResourceItem[];
68
+ /**
69
+ * Dynamic resource search function.
70
+ * Must be paired with getResource.
71
+ * Called when searching for resources dynamically.
72
+ */
73
+ listResources?: ResourceSource["listResources"];
74
+ /**
75
+ * Dynamic resource fetch function.
76
+ * Must be paired with listResources.
77
+ * Called when fetching a specific resource by URI.
78
+ */
79
+ getResource?: ResourceSource["getResource"];
80
+ /**
81
+ * Configuration for context helpers.
82
+ * A dictionary of functions that provide additional context to the AI.
83
+ * Each key becomes the context name, and the function returns the value.
84
+ */
85
+ contextHelpers?: ContextHelpers;
86
+ /**
87
+ * User key for thread ownership and scoping.
88
+ *
89
+ * **Required**: You must provide either `userKey` OR `userToken` (which contains a userKey).
90
+ * All thread operations (create, list, fetch) only return threads owned by this userKey.
91
+ *
92
+ * - Use `userKey` for server-side or trusted environments where you control the user identity
93
+ * - Use `userToken` (OAuth bearer token) for client-side apps where the token contains the userKey
94
+ */
95
+ userKey?: string;
41
96
  /**
42
97
  * Optional custom QueryClient instance.
43
98
  * If not provided, a default client will be created.
@@ -67,6 +122,11 @@ export interface TamboV1ProviderProps extends Pick<TamboClientProviderProps, "ap
67
122
  * @param props.tools - Tools to register for client-side execution
68
123
  * @param props.mcpServers - MCP servers to register for additional tools/resources
69
124
  * @param props.onCallUnregisteredTool - Callback for handling unknown tool calls
125
+ * @param props.resources - Static resources to register with the AI
126
+ * @param props.listResources - Dynamic resource search function (must be paired with getResource)
127
+ * @param props.getResource - Dynamic resource fetch function (must be paired with listResources)
128
+ * @param props.contextHelpers - Configuration for context helper functions
129
+ * @param props.userKey - User key for thread ownership (required if not using userToken)
70
130
  * @param props.queryClient - Optional custom React Query client
71
131
  * @param props.children - Child components
72
132
  * @returns Provider component tree
@@ -87,5 +147,5 @@ export interface TamboV1ProviderProps extends Pick<TamboClientProviderProps, "ap
87
147
  * }
88
148
  * ```
89
149
  */
90
- export declare function TamboV1Provider({ apiKey, tamboUrl, environment, userToken, components, tools, mcpServers, onCallUnregisteredTool, queryClient, children, }: PropsWithChildren<TamboV1ProviderProps>): React.JSX.Element;
150
+ export declare function TamboV1Provider({ apiKey, tamboUrl, environment, userToken, components, tools, mcpServers, onCallUnregisteredTool, resources, listResources, getResource, contextHelpers, userKey, queryClient, children, }: PropsWithChildren<TamboV1ProviderProps>): React.JSX.Element;
91
151
  //# sourceMappingURL=tambo-v1-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-v1-provider.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAY,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,WAAW,EAAuB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,wBAAwB,EACxB,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,CACpD;IACC;;;OAGG;IACH,UAAU,CAAC,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAEtD;;;OAGG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE5C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;IAExC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,0BAA0B,CAAC,wBAAwB,CAAC,CAAC;IAE9E;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,qBAoCzC"}
1
+ {"version":3,"file":"tambo-v1-provider.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAGZ,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAuB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAInC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qCAA4C,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAMhD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,wBAAwB,EACxB,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,CACpD;IACC;;;OAGG;IACH,UAAU,CAAC,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAEtD;;;OAGG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE5C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;IAExC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,0BAA0B,CAAC,wBAAwB,CAAC,CAAC;IAE9E;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE/B;;;;OAIG;IACH,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAEhD;;;;OAIG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAE5C;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,qBAkDzC"}
@@ -34,6 +34,8 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  };
35
35
  })();
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.TamboV1ConfigContext = void 0;
38
+ exports.useTamboV1Config = useTamboV1Config;
37
39
  exports.TamboV1Provider = TamboV1Provider;
38
40
  /**
39
41
  * TamboV1Provider - Main Provider for v1 API
@@ -41,6 +43,7 @@ exports.TamboV1Provider = TamboV1Provider;
41
43
  * Composes the necessary providers for the v1 SDK:
42
44
  * - TamboClientProvider: API client and authentication
43
45
  * - TamboRegistryProvider: Component and tool registration
46
+ * - TamboContextHelpersProvider: Context helper functions
44
47
  * - TamboV1StreamProvider: Streaming state management
45
48
  *
46
49
  * This provider should wrap your entire application or the portion
@@ -50,7 +53,26 @@ const react_1 = __importStar(require("react"));
50
53
  const react_query_1 = require("@tanstack/react-query");
51
54
  const tambo_client_provider_1 = require("../../providers/tambo-client-provider");
52
55
  const tambo_registry_provider_1 = require("../../providers/tambo-registry-provider");
56
+ const tambo_context_helpers_provider_1 = require("../../providers/tambo-context-helpers-provider");
53
57
  const tambo_v1_stream_context_1 = require("./tambo-v1-stream-context");
58
+ const tambo_v1_thread_input_provider_1 = require("./tambo-v1-thread-input-provider");
59
+ /**
60
+ * Context for v1 SDK configuration.
61
+ * @internal
62
+ */
63
+ exports.TamboV1ConfigContext = (0, react_1.createContext)(null);
64
+ /**
65
+ * Hook to access v1 SDK configuration.
66
+ * @returns Configuration values including userKey
67
+ * @throws {Error} If used outside TamboV1Provider
68
+ */
69
+ function useTamboV1Config() {
70
+ const config = (0, react_1.useContext)(exports.TamboV1ConfigContext);
71
+ if (!config) {
72
+ throw new Error("useTamboV1Config must be used within TamboV1Provider");
73
+ }
74
+ return config;
75
+ }
54
76
  /**
55
77
  * Main provider for the Tambo v1 SDK.
56
78
  *
@@ -70,6 +92,11 @@ const tambo_v1_stream_context_1 = require("./tambo-v1-stream-context");
70
92
  * @param props.tools - Tools to register for client-side execution
71
93
  * @param props.mcpServers - MCP servers to register for additional tools/resources
72
94
  * @param props.onCallUnregisteredTool - Callback for handling unknown tool calls
95
+ * @param props.resources - Static resources to register with the AI
96
+ * @param props.listResources - Dynamic resource search function (must be paired with getResource)
97
+ * @param props.getResource - Dynamic resource fetch function (must be paired with listResources)
98
+ * @param props.contextHelpers - Configuration for context helper functions
99
+ * @param props.userKey - User key for thread ownership (required if not using userToken)
73
100
  * @param props.queryClient - Optional custom React Query client
74
101
  * @param props.children - Child components
75
102
  * @returns Provider component tree
@@ -90,7 +117,7 @@ const tambo_v1_stream_context_1 = require("./tambo-v1-stream-context");
90
117
  * }
91
118
  * ```
92
119
  */
93
- function TamboV1Provider({ apiKey, tamboUrl, environment, userToken, components, tools, mcpServers, onCallUnregisteredTool, queryClient, children, }) {
120
+ function TamboV1Provider({ apiKey, tamboUrl, environment, userToken, components, tools, mcpServers, onCallUnregisteredTool, resources, listResources, getResource, contextHelpers, userKey, queryClient, children, }) {
94
121
  // Create a stable default QueryClient if none provided.
95
122
  // Using useState to avoid SSR issues with module-level singletons.
96
123
  const [defaultQueryClient] = (0, react_1.useState)(() => new react_query_1.QueryClient({
@@ -102,9 +129,14 @@ function TamboV1Provider({ apiKey, tamboUrl, environment, userToken, components,
102
129
  },
103
130
  }));
104
131
  const client = queryClient ?? defaultQueryClient;
132
+ // Config is static - created once and never changes
133
+ const config = { userKey };
105
134
  return (react_1.default.createElement(react_query_1.QueryClientProvider, { client: client },
106
135
  react_1.default.createElement(tambo_client_provider_1.TamboClientProvider, { apiKey: apiKey, tamboUrl: tamboUrl, environment: environment, userToken: userToken },
107
- react_1.default.createElement(tambo_registry_provider_1.TamboRegistryProvider, { components: components, tools: tools, mcpServers: mcpServers, onCallUnregisteredTool: onCallUnregisteredTool },
108
- react_1.default.createElement(tambo_v1_stream_context_1.TamboV1StreamProvider, null, children)))));
136
+ react_1.default.createElement(tambo_registry_provider_1.TamboRegistryProvider, { components: components, tools: tools, mcpServers: mcpServers, onCallUnregisteredTool: onCallUnregisteredTool, resources: resources, listResources: listResources, getResource: getResource },
137
+ react_1.default.createElement(tambo_context_helpers_provider_1.TamboContextHelpersProvider, { contextHelpers: contextHelpers },
138
+ react_1.default.createElement(exports.TamboV1ConfigContext.Provider, { value: config },
139
+ react_1.default.createElement(tambo_v1_stream_context_1.TamboV1StreamProvider, null,
140
+ react_1.default.createElement(tambo_v1_thread_input_provider_1.TamboV1ThreadInputProvider, null, children))))))));
109
141
  }
110
142
  //# sourceMappingURL=tambo-v1-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-v1-provider.js","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6Gb,0CA+CC;AA1JD;;;;;;;;;;GAUG;AAEH,+CAAgE;AAChE,uDAAyE;AACzE,iFAG+C;AAC/C,qFAGiD;AAEjD,uEAAkE;AA6ClE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,SAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,QAAQ,GACgC;IACxC,wDAAwD;IACxD,mEAAmE;IACnE,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EACnC,GAAG,EAAE,CACH,IAAI,yBAAW,CAAC;QACd,cAAc,EAAE;YACd,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC;aACT;SACF;KACF,CAAC,CACL,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,IAAI,kBAAkB,CAAC;IAEjD,OAAO,CACL,8BAAC,iCAAmB,IAAC,MAAM,EAAE,MAAM;QACjC,8BAAC,2CAAmB,IAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS;YAEpB,8BAAC,+CAAqB,IACpB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB;gBAE9C,8BAAC,+CAAqB,QAAE,QAAQ,CAAyB,CACnC,CACJ,CACF,CACvB,CAAC;AACJ,CAAC","sourcesContent":["\"use client\";\n\n/**\n * TamboV1Provider - Main Provider for v1 API\n *\n * Composes the necessary providers for the v1 SDK:\n * - TamboClientProvider: API client and authentication\n * - TamboRegistryProvider: Component and tool registration\n * - TamboV1StreamProvider: Streaming state management\n *\n * This provider should wrap your entire application or the portion\n * that needs access to Tambo v1 functionality.\n */\n\nimport React, { type PropsWithChildren, useState } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n TamboClientProvider,\n type TamboClientProviderProps,\n} from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryProvider,\n type TamboRegistryProviderProps,\n} from \"../../providers/tambo-registry-provider\";\nimport type { McpServerInfo } from \"../../model/mcp-server-info\";\nimport { TamboV1StreamProvider } from \"./tambo-v1-stream-context\";\n\n/**\n * Props for TamboV1Provider\n */\nexport interface TamboV1ProviderProps extends Pick<\n TamboClientProviderProps,\n \"apiKey\" | \"tamboUrl\" | \"environment\" | \"userToken\"\n> {\n /**\n * Components to register with the registry.\n * These will be available for the AI to use in responses.\n */\n components?: TamboRegistryProviderProps[\"components\"];\n\n /**\n * Tools to register with the registry.\n * These will be executed client-side when requested by the AI.\n */\n tools?: TamboRegistryProviderProps[\"tools\"];\n\n /**\n * MCP servers to register with the registry.\n * These provide additional tools and resources from MCP-compatible servers.\n */\n mcpServers?: (McpServerInfo | string)[];\n\n /**\n * Callback function called when an unregistered tool is called.\n * If not provided, an error will be thrown for unknown tools.\n */\n onCallUnregisteredTool?: TamboRegistryProviderProps[\"onCallUnregisteredTool\"];\n\n /**\n * Optional custom QueryClient instance.\n * If not provided, a default client will be created.\n */\n queryClient?: QueryClient;\n\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * Main provider for the Tambo v1 SDK.\n *\n * Composes TamboClientProvider, TamboRegistryProvider, and TamboV1StreamProvider\n * to provide a complete context for building AI-powered applications.\n *\n * Threads are managed dynamically through useTamboV1() hook functions:\n * - startNewThread() - Begin a new conversation\n * - switchThread(threadId) - Switch to an existing thread\n * - initThread(threadId) - Initialize a thread for receiving events\n * @param props - Provider configuration\n * @param props.apiKey - Tambo API key for authentication\n * @param props.tamboUrl - Optional custom Tambo API URL\n * @param props.environment - Optional environment configuration\n * @param props.userToken - Optional OAuth token for user authentication\n * @param props.components - Components to register with the AI\n * @param props.tools - Tools to register for client-side execution\n * @param props.mcpServers - MCP servers to register for additional tools/resources\n * @param props.onCallUnregisteredTool - Callback for handling unknown tool calls\n * @param props.queryClient - Optional custom React Query client\n * @param props.children - Child components\n * @returns Provider component tree\n * @example\n * ```tsx\n * import { TamboV1Provider } from '@tambo-ai/react/v1';\n *\n * function App() {\n * return (\n * <TamboV1Provider\n * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}\n * components={[WeatherCard, StockChart]}\n * tools={[searchTool, calculatorTool]}\n * >\n * <ChatInterface />\n * </TamboV1Provider>\n * );\n * }\n * ```\n */\nexport function TamboV1Provider({\n apiKey,\n tamboUrl,\n environment,\n userToken,\n components,\n tools,\n mcpServers,\n onCallUnregisteredTool,\n queryClient,\n children,\n}: PropsWithChildren<TamboV1ProviderProps>) {\n // Create a stable default QueryClient if none provided.\n // Using useState to avoid SSR issues with module-level singletons.\n const [defaultQueryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000,\n retry: 1,\n },\n },\n }),\n );\n\n const client = queryClient ?? defaultQueryClient;\n\n return (\n <QueryClientProvider client={client}>\n <TamboClientProvider\n apiKey={apiKey}\n tamboUrl={tamboUrl}\n environment={environment}\n userToken={userToken}\n >\n <TamboRegistryProvider\n components={components}\n tools={tools}\n mcpServers={mcpServers}\n onCallUnregisteredTool={onCallUnregisteredTool}\n >\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryProvider>\n </TamboClientProvider>\n </QueryClientProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"tambo-v1-provider.js","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-provider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4Db,4CAMC;AA+HD,0CAkEC;AAjQD;;;;;;;;;;;GAWG;AAEH,+CAKe;AACf,uDAAyE;AACzE,iFAG+C;AAC/C,qFAGiD;AACjD,mGAA6F;AAO7F,uEAAkE;AAClE,qFAA8E;AAW9E;;;GAGG;AACU,QAAA,oBAAoB,GAAG,IAAA,qBAAa,EAAuB,IAAI,CAAC,CAAC;AAE9E;;;;GAIG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,4BAAoB,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAmFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,SAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,QAAQ,GACgC;IACxC,wDAAwD;IACxD,mEAAmE;IACnE,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EACnC,GAAG,EAAE,CACH,IAAI,yBAAW,CAAC;QACd,cAAc,EAAE;YACd,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC;aACT;SACF;KACF,CAAC,CACL,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,IAAI,kBAAkB,CAAC;IAEjD,oDAAoD;IACpD,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,CAAC;IAE1C,OAAO,CACL,8BAAC,iCAAmB,IAAC,MAAM,EAAE,MAAM;QACjC,8BAAC,2CAAmB,IAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS;YAEpB,8BAAC,+CAAqB,IACpB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW;gBAExB,8BAAC,4DAA2B,IAAC,cAAc,EAAE,cAAc;oBACzD,8BAAC,4BAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM;wBAC1C,8BAAC,+CAAqB;4BACpB,8BAAC,2DAA0B,QACxB,QAAQ,CACkB,CACP,CACM,CACJ,CACR,CACJ,CACF,CACvB,CAAC;AACJ,CAAC","sourcesContent":["\"use client\";\n\n/**\n * TamboV1Provider - Main Provider for v1 API\n *\n * Composes the necessary providers for the v1 SDK:\n * - TamboClientProvider: API client and authentication\n * - TamboRegistryProvider: Component and tool registration\n * - TamboContextHelpersProvider: Context helper functions\n * - TamboV1StreamProvider: Streaming state management\n *\n * This provider should wrap your entire application or the portion\n * that needs access to Tambo v1 functionality.\n */\n\nimport React, {\n createContext,\n useContext,\n type PropsWithChildren,\n useState,\n} from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n TamboClientProvider,\n type TamboClientProviderProps,\n} from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryProvider,\n type TamboRegistryProviderProps,\n} from \"../../providers/tambo-registry-provider\";\nimport { TamboContextHelpersProvider } from \"../../providers/tambo-context-helpers-provider\";\nimport type { ContextHelpers } from \"../../context-helpers\";\nimport type { McpServerInfo } from \"../../model/mcp-server-info\";\nimport type {\n ListResourceItem,\n ResourceSource,\n} from \"../../model/resource-info\";\nimport { TamboV1StreamProvider } from \"./tambo-v1-stream-context\";\nimport { TamboV1ThreadInputProvider } from \"./tambo-v1-thread-input-provider\";\n\n/**\n * Configuration values for v1 SDK.\n * These are static values that don't change during the session.\n */\nexport interface TamboV1Config {\n /** User key for thread ownership and scoping */\n userKey?: string;\n}\n\n/**\n * Context for v1 SDK configuration.\n * @internal\n */\nexport const TamboV1ConfigContext = createContext<TamboV1Config | null>(null);\n\n/**\n * Hook to access v1 SDK configuration.\n * @returns Configuration values including userKey\n * @throws {Error} If used outside TamboV1Provider\n */\nexport function useTamboV1Config(): TamboV1Config {\n const config = useContext(TamboV1ConfigContext);\n if (!config) {\n throw new Error(\"useTamboV1Config must be used within TamboV1Provider\");\n }\n return config;\n}\n\n/**\n * Props for TamboV1Provider\n */\nexport interface TamboV1ProviderProps extends Pick<\n TamboClientProviderProps,\n \"apiKey\" | \"tamboUrl\" | \"environment\" | \"userToken\"\n> {\n /**\n * Components to register with the registry.\n * These will be available for the AI to use in responses.\n */\n components?: TamboRegistryProviderProps[\"components\"];\n\n /**\n * Tools to register with the registry.\n * These will be executed client-side when requested by the AI.\n */\n tools?: TamboRegistryProviderProps[\"tools\"];\n\n /**\n * MCP servers to register with the registry.\n * These provide additional tools and resources from MCP-compatible servers.\n */\n mcpServers?: (McpServerInfo | string)[];\n\n /**\n * Callback function called when an unregistered tool is called.\n * If not provided, an error will be thrown for unknown tools.\n */\n onCallUnregisteredTool?: TamboRegistryProviderProps[\"onCallUnregisteredTool\"];\n\n /**\n * Static resources to register with the registry.\n * These will be available for the AI to access.\n */\n resources?: ListResourceItem[];\n\n /**\n * Dynamic resource search function.\n * Must be paired with getResource.\n * Called when searching for resources dynamically.\n */\n listResources?: ResourceSource[\"listResources\"];\n\n /**\n * Dynamic resource fetch function.\n * Must be paired with listResources.\n * Called when fetching a specific resource by URI.\n */\n getResource?: ResourceSource[\"getResource\"];\n\n /**\n * Configuration for context helpers.\n * A dictionary of functions that provide additional context to the AI.\n * Each key becomes the context name, and the function returns the value.\n */\n contextHelpers?: ContextHelpers;\n\n /**\n * User key for thread ownership and scoping.\n *\n * **Required**: You must provide either `userKey` OR `userToken` (which contains a userKey).\n * All thread operations (create, list, fetch) only return threads owned by this userKey.\n *\n * - Use `userKey` for server-side or trusted environments where you control the user identity\n * - Use `userToken` (OAuth bearer token) for client-side apps where the token contains the userKey\n */\n userKey?: string;\n\n /**\n * Optional custom QueryClient instance.\n * If not provided, a default client will be created.\n */\n queryClient?: QueryClient;\n\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * Main provider for the Tambo v1 SDK.\n *\n * Composes TamboClientProvider, TamboRegistryProvider, and TamboV1StreamProvider\n * to provide a complete context for building AI-powered applications.\n *\n * Threads are managed dynamically through useTamboV1() hook functions:\n * - startNewThread() - Begin a new conversation\n * - switchThread(threadId) - Switch to an existing thread\n * - initThread(threadId) - Initialize a thread for receiving events\n * @param props - Provider configuration\n * @param props.apiKey - Tambo API key for authentication\n * @param props.tamboUrl - Optional custom Tambo API URL\n * @param props.environment - Optional environment configuration\n * @param props.userToken - Optional OAuth token for user authentication\n * @param props.components - Components to register with the AI\n * @param props.tools - Tools to register for client-side execution\n * @param props.mcpServers - MCP servers to register for additional tools/resources\n * @param props.onCallUnregisteredTool - Callback for handling unknown tool calls\n * @param props.resources - Static resources to register with the AI\n * @param props.listResources - Dynamic resource search function (must be paired with getResource)\n * @param props.getResource - Dynamic resource fetch function (must be paired with listResources)\n * @param props.contextHelpers - Configuration for context helper functions\n * @param props.userKey - User key for thread ownership (required if not using userToken)\n * @param props.queryClient - Optional custom React Query client\n * @param props.children - Child components\n * @returns Provider component tree\n * @example\n * ```tsx\n * import { TamboV1Provider } from '@tambo-ai/react/v1';\n *\n * function App() {\n * return (\n * <TamboV1Provider\n * apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}\n * components={[WeatherCard, StockChart]}\n * tools={[searchTool, calculatorTool]}\n * >\n * <ChatInterface />\n * </TamboV1Provider>\n * );\n * }\n * ```\n */\nexport function TamboV1Provider({\n apiKey,\n tamboUrl,\n environment,\n userToken,\n components,\n tools,\n mcpServers,\n onCallUnregisteredTool,\n resources,\n listResources,\n getResource,\n contextHelpers,\n userKey,\n queryClient,\n children,\n}: PropsWithChildren<TamboV1ProviderProps>) {\n // Create a stable default QueryClient if none provided.\n // Using useState to avoid SSR issues with module-level singletons.\n const [defaultQueryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000,\n retry: 1,\n },\n },\n }),\n );\n\n const client = queryClient ?? defaultQueryClient;\n\n // Config is static - created once and never changes\n const config: TamboV1Config = { userKey };\n\n return (\n <QueryClientProvider client={client}>\n <TamboClientProvider\n apiKey={apiKey}\n tamboUrl={tamboUrl}\n environment={environment}\n userToken={userToken}\n >\n <TamboRegistryProvider\n components={components}\n tools={tools}\n mcpServers={mcpServers}\n onCallUnregisteredTool={onCallUnregisteredTool}\n resources={resources}\n listResources={listResources}\n getResource={getResource}\n >\n <TamboContextHelpersProvider contextHelpers={contextHelpers}>\n <TamboV1ConfigContext.Provider value={config}>\n <TamboV1StreamProvider>\n <TamboV1ThreadInputProvider>\n {children}\n </TamboV1ThreadInputProvider>\n </TamboV1StreamProvider>\n </TamboV1ConfigContext.Provider>\n </TamboContextHelpersProvider>\n </TamboRegistryProvider>\n </TamboClientProvider>\n </QueryClientProvider>\n );\n}\n"]}