@tambo-ai/react 0.29.1 → 0.30.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 (81) hide show
  1. package/dist/hooks/use-component-state.d.ts.map +1 -1
  2. package/dist/hooks/use-component-state.js +1 -0
  3. package/dist/hooks/use-component-state.js.map +1 -1
  4. package/dist/hooks/use-current-message.d.ts.map +1 -1
  5. package/dist/hooks/use-current-message.js +1 -0
  6. package/dist/hooks/use-current-message.js.map +1 -1
  7. package/dist/hooks/use-streaming-props.d.ts.map +1 -1
  8. package/dist/hooks/use-streaming-props.js +1 -0
  9. package/dist/hooks/use-streaming-props.js.map +1 -1
  10. package/dist/hooks/use-suggestions.d.ts.map +1 -1
  11. package/dist/hooks/use-suggestions.js +1 -0
  12. package/dist/hooks/use-suggestions.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/providers/__tests__/tambo-stubs.test.d.ts +2 -0
  18. package/dist/providers/__tests__/tambo-stubs.test.d.ts.map +1 -0
  19. package/dist/providers/__tests__/tambo-stubs.test.js +93 -0
  20. package/dist/providers/__tests__/tambo-stubs.test.js.map +1 -0
  21. package/dist/providers/index.d.ts +1 -0
  22. package/dist/providers/index.d.ts.map +1 -1
  23. package/dist/providers/index.js +3 -1
  24. package/dist/providers/index.js.map +1 -1
  25. package/dist/providers/tambo-client-provider.d.ts +1 -0
  26. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  27. package/dist/providers/tambo-client-provider.js +6 -5
  28. package/dist/providers/tambo-client-provider.js.map +1 -1
  29. package/dist/providers/tambo-provider.d.ts +8 -0
  30. package/dist/providers/tambo-provider.d.ts.map +1 -1
  31. package/dist/providers/tambo-provider.js +4 -3
  32. package/dist/providers/tambo-provider.js.map +1 -1
  33. package/dist/providers/tambo-registry-provider.d.ts +1 -0
  34. package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
  35. package/dist/providers/tambo-registry-provider.js +4 -4
  36. package/dist/providers/tambo-registry-provider.js.map +1 -1
  37. package/dist/providers/tambo-stubs.d.ts +85 -0
  38. package/dist/providers/tambo-stubs.d.ts.map +1 -0
  39. package/dist/providers/tambo-stubs.js +248 -0
  40. package/dist/providers/tambo-stubs.js.map +1 -0
  41. package/esm/hooks/use-component-state.d.ts.map +1 -1
  42. package/esm/hooks/use-component-state.js +1 -0
  43. package/esm/hooks/use-component-state.js.map +1 -1
  44. package/esm/hooks/use-current-message.d.ts.map +1 -1
  45. package/esm/hooks/use-current-message.js +1 -0
  46. package/esm/hooks/use-current-message.js.map +1 -1
  47. package/esm/hooks/use-streaming-props.d.ts.map +1 -1
  48. package/esm/hooks/use-streaming-props.js +1 -0
  49. package/esm/hooks/use-streaming-props.js.map +1 -1
  50. package/esm/hooks/use-suggestions.d.ts.map +1 -1
  51. package/esm/hooks/use-suggestions.js +1 -0
  52. package/esm/hooks/use-suggestions.js.map +1 -1
  53. package/esm/index.d.ts +1 -1
  54. package/esm/index.d.ts.map +1 -1
  55. package/esm/index.js +1 -1
  56. package/esm/index.js.map +1 -1
  57. package/esm/providers/__tests__/tambo-stubs.test.d.ts +2 -0
  58. package/esm/providers/__tests__/tambo-stubs.test.d.ts.map +1 -0
  59. package/esm/providers/__tests__/tambo-stubs.test.js +58 -0
  60. package/esm/providers/__tests__/tambo-stubs.test.js.map +1 -0
  61. package/esm/providers/index.d.ts +1 -0
  62. package/esm/providers/index.d.ts.map +1 -1
  63. package/esm/providers/index.js +1 -0
  64. package/esm/providers/index.js.map +1 -1
  65. package/esm/providers/tambo-client-provider.d.ts +1 -0
  66. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  67. package/esm/providers/tambo-client-provider.js +2 -1
  68. package/esm/providers/tambo-client-provider.js.map +1 -1
  69. package/esm/providers/tambo-provider.d.ts +8 -0
  70. package/esm/providers/tambo-provider.d.ts.map +1 -1
  71. package/esm/providers/tambo-provider.js +1 -1
  72. package/esm/providers/tambo-provider.js.map +1 -1
  73. package/esm/providers/tambo-registry-provider.d.ts +1 -0
  74. package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
  75. package/esm/providers/tambo-registry-provider.js +1 -1
  76. package/esm/providers/tambo-registry-provider.js.map +1 -1
  77. package/esm/providers/tambo-stubs.d.ts +85 -0
  78. package/esm/providers/tambo-stubs.d.ts.map +1 -0
  79. package/esm/providers/tambo-stubs.js +211 -0
  80. package/esm/providers/tambo-stubs.js.map +1 -0
  81. package/package.json +1 -1
@@ -0,0 +1,211 @@
1
+ "use client";
2
+ import { QueryClient } from "@tanstack/react-query";
3
+ import React, { useEffect } from "react";
4
+ import { GenerationStage } from "../model/generate-component-response";
5
+ import { TamboClientContext } from "./tambo-client-provider";
6
+ import { TamboComponentProvider, } from "./tambo-component-provider";
7
+ import { TamboCompositeProvider, } from "./tambo-provider";
8
+ import { TamboRegistryContext } from "./tambo-registry-provider";
9
+ import { TamboThreadContext, } from "./tambo-thread-provider";
10
+ /**
11
+ * Stub client provider that accepts a client and queryClient as props
12
+ * @returns The TamboStubClientProvider component
13
+ */
14
+ const TamboStubClientProvider = ({ children, client, queryClient, threads, projectId, contextKey }) => {
15
+ // Prepopulate the query cache with threads data if provided
16
+ useEffect(() => {
17
+ if (threads) {
18
+ // Set the project ID in the cache
19
+ queryClient.setQueryData(["projectId"], projectId);
20
+ // Set the threads data in the cache using the same query key pattern as useTamboThreadList
21
+ queryClient.setQueryData(["threads", projectId, contextKey], threads);
22
+ }
23
+ }, [threads, projectId, contextKey, queryClient]);
24
+ return (React.createElement(TamboClientContext.Provider, { value: { client, queryClient } }, children));
25
+ };
26
+ /**
27
+ * Stub registry provider that accepts componentList, toolRegistry, and componentToolAssociations as props
28
+ * @returns The TamboStubRegistryProvider component
29
+ */
30
+ const TamboStubRegistryProvider = ({ children, componentList, toolRegistry, componentToolAssociations, registerComponent, registerTool, registerTools, addToolAssociation, }) => {
31
+ return (React.createElement(TamboRegistryContext.Provider, { value: {
32
+ componentList,
33
+ toolRegistry,
34
+ componentToolAssociations,
35
+ registerComponent,
36
+ registerTool,
37
+ registerTools,
38
+ addToolAssociation,
39
+ } }, children));
40
+ };
41
+ /**
42
+ * Stub thread provider that accepts all thread context props
43
+ * @returns The TamboStubThreadProvider component
44
+ */
45
+ const TamboStubThreadProvider = ({ children, ...threadContextProps }) => {
46
+ return (React.createElement(TamboThreadContext.Provider, { value: threadContextProps }, children));
47
+ };
48
+ /**
49
+ * Default no-op functions that throw errors - used when callbacks are not provided
50
+ * @returns The default callbacks
51
+ */
52
+ const createDefaultCallbacks = () => ({
53
+ switchCurrentThread: () => {
54
+ throw new Error("switchCurrentThread not implemented in stub");
55
+ },
56
+ startNewThread: () => {
57
+ throw new Error("startNewThread not implemented in stub");
58
+ },
59
+ updateThreadName: () => {
60
+ throw new Error("updateThreadName not implemented in stub");
61
+ },
62
+ generateThreadName: () => {
63
+ throw new Error("generateThreadName not implemented in stub");
64
+ },
65
+ addThreadMessage: () => {
66
+ throw new Error("addThreadMessage not implemented in stub");
67
+ },
68
+ updateThreadMessage: () => {
69
+ throw new Error("updateThreadMessage not implemented in stub");
70
+ },
71
+ setInputValue: () => {
72
+ throw new Error("setInputValue not implemented in stub");
73
+ },
74
+ sendThreadMessage: () => {
75
+ throw new Error("sendThreadMessage not implemented in stub");
76
+ },
77
+ registerComponent: () => {
78
+ throw new Error("registerComponent not implemented in stub");
79
+ },
80
+ registerTool: () => {
81
+ throw new Error("registerTool not implemented in stub");
82
+ },
83
+ registerTools: () => {
84
+ throw new Error("registerTools not implemented in stub");
85
+ },
86
+ addToolAssociation: () => {
87
+ throw new Error("addToolAssociation not implemented in stub");
88
+ },
89
+ });
90
+ /**
91
+ * The TamboStubProvider provides a way to use the Tambo API with static/stub data.
92
+ * This is useful for testing, samples, and static UI development.
93
+ *
94
+ * Unlike TamboProvider, all data must be provided as props rather than being inferred.
95
+ * @example
96
+ * ```tsx
97
+ * import { TamboStubProvider } from '@tambo-ai/react-sdk';
98
+ *
99
+ * const exampleThread = {
100
+ * id: "example-thread",
101
+ * messages: [
102
+ * {
103
+ * id: "msg-1",
104
+ * role: "user",
105
+ * content: [{ type: "text", text: "Hello!" }],
106
+ * createdAt: new Date().toISOString(),
107
+ * threadId: "example-thread",
108
+ * componentState: {},
109
+ * },
110
+ * {
111
+ * id: "msg-2",
112
+ * role: "assistant",
113
+ * content: [{ type: "text", text: "Hi there!" }],
114
+ * createdAt: new Date().toISOString(),
115
+ * threadId: "example-thread",
116
+ * componentState: {},
117
+ * }
118
+ * ],
119
+ * createdAt: new Date().toISOString(),
120
+ * projectId: "example-project",
121
+ * updatedAt: new Date().toISOString(),
122
+ * metadata: {},
123
+ * };
124
+ *
125
+ * const exampleThreadList = [exampleThread];
126
+ *
127
+ * function MyComponent() {
128
+ * return (
129
+ * <TamboStubProvider
130
+ * thread={exampleThread}
131
+ * components={[]}
132
+ * tools={[]}
133
+ * threads={exampleThreadList}
134
+ * projectId="example-project"
135
+ * >
136
+ * <MessageThreadFull />
137
+ * </TamboStubProvider>
138
+ * );
139
+ * }
140
+ * ```
141
+ * @param props - The props for the TamboStubProvider
142
+ * @param props.children - The children to wrap
143
+ * @param props.thread - The thread data to display
144
+ * @param props.components - Optional components registry
145
+ * @param props.tools - Optional tools registry
146
+ * @param props.threads - Optional threads data to populate thread list (overrides useTamboThreadList)
147
+ * @param props.projectId - Optional project ID for query cache (defaults to thread.projectId)
148
+ * @param props.contextKey - Optional context key for thread list queries
149
+ * @returns The TamboStubProvider component
150
+ */
151
+ export const TamboStubProvider = ({ children, thread, components = [], tools = [], threads, projectId, contextKey, ...overrides }) => {
152
+ const defaults = createDefaultCallbacks();
153
+ // Create stub client and queryClient
154
+ const stubClient = {};
155
+ const stubQueryClient = new QueryClient();
156
+ // Use provided projectId or fall back to thread's projectId
157
+ const resolvedProjectId = projectId ?? thread.projectId;
158
+ // Build component registry from components prop
159
+ const componentList = components.reduce((acc, component) => {
160
+ acc[component.name] = {
161
+ component: component.component,
162
+ loadingComponent: component.loadingComponent,
163
+ name: component.name,
164
+ description: component.description,
165
+ props: component.propsDefinition ?? {},
166
+ contextTools: [],
167
+ };
168
+ return acc;
169
+ }, {});
170
+ // Build tool registry from tools prop
171
+ const toolRegistry = tools.reduce((acc, tool) => {
172
+ acc[tool.name] = tool;
173
+ return acc;
174
+ }, {});
175
+ // Build tool associations from components
176
+ const componentToolAssociations = components.reduce((acc, component) => {
177
+ if (component.associatedTools) {
178
+ acc[component.name] = component.associatedTools.map((tool) => tool.name);
179
+ }
180
+ return acc;
181
+ }, {});
182
+ // Merge defaults with provided overrides
183
+ const threadContextProps = {
184
+ thread,
185
+ switchCurrentThread: overrides.switchCurrentThread ?? defaults.switchCurrentThread,
186
+ startNewThread: overrides.startNewThread ?? defaults.startNewThread,
187
+ updateThreadName: overrides.updateThreadName ?? defaults.updateThreadName,
188
+ generateThreadName: overrides.generateThreadName ?? defaults.generateThreadName,
189
+ addThreadMessage: overrides.addThreadMessage ?? defaults.addThreadMessage,
190
+ updateThreadMessage: overrides.updateThreadMessage ?? defaults.updateThreadMessage,
191
+ inputValue: overrides.inputValue ?? "",
192
+ streaming: overrides.streaming ?? true,
193
+ setInputValue: overrides.setInputValue ?? defaults.setInputValue,
194
+ sendThreadMessage: overrides.sendThreadMessage ?? defaults.sendThreadMessage,
195
+ generationStage: overrides.generationStage ?? GenerationStage.IDLE,
196
+ generationStatusMessage: overrides.generationStatusMessage ?? "",
197
+ isIdle: overrides.isIdle ?? true,
198
+ };
199
+ const componentContextProps = {
200
+ registerComponent: overrides.registerComponent ?? defaults.registerComponent,
201
+ registerTool: overrides.registerTool ?? defaults.registerTool,
202
+ registerTools: overrides.registerTools ?? defaults.registerTools,
203
+ addToolAssociation: overrides.addToolAssociation ?? defaults.addToolAssociation,
204
+ };
205
+ return (React.createElement(TamboStubClientProvider, { client: stubClient, queryClient: stubQueryClient, threads: threads, projectId: resolvedProjectId, contextKey: contextKey },
206
+ React.createElement(TamboStubRegistryProvider, { componentList: componentList, toolRegistry: toolRegistry, componentToolAssociations: componentToolAssociations, registerComponent: componentContextProps.registerComponent, registerTool: componentContextProps.registerTool, registerTools: componentContextProps.registerTools, addToolAssociation: componentContextProps.addToolAssociation },
207
+ React.createElement(TamboStubThreadProvider, { ...threadContextProps },
208
+ React.createElement(TamboComponentProvider, null,
209
+ React.createElement(TamboCompositeProvider, null, children))))));
210
+ };
211
+ //# sourceMappingURL=tambo-stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tambo-stubs.js","sourceRoot":"","sources":["../../src/providers/tambo-stubs.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport React, { PropsWithChildren, useEffect } from \"react\";\nimport { TamboComponent, TamboTool } from \"../model/component-metadata\";\nimport { GenerationStage } from \"../model/generate-component-response\";\nimport { TamboThread } from \"../model/tambo-thread\";\nimport { TamboClientContext } from \"./tambo-client-provider\";\nimport {\n TamboComponentContextProps,\n TamboComponentProvider,\n} from \"./tambo-component-provider\";\nimport {\n TamboCompositeProvider,\n type TamboContextProps,\n} from \"./tambo-provider\";\nimport { TamboRegistryContext } from \"./tambo-registry-provider\";\nimport {\n TamboThreadContext,\n TamboThreadContextProps,\n} from \"./tambo-thread-provider\";\n\n/**\n * TamboStubProvider props - includes all the data that would normally be inferred\n */\nexport interface TamboStubProviderProps extends Partial<TamboContextProps> {\n /** Required: The thread data to display */\n thread: TamboThread;\n /** Optional: Components registry - defaults to empty */\n components?: TamboComponent[];\n /** Optional: Tools registry - defaults to empty */\n tools?: TamboTool[];\n /** Optional: Threads data to populate thread list - overrides useTamboThreadList() */\n threads?: Partial<TamboAI.Beta.Threads.ThreadsOffsetAndLimit>;\n /** Optional: Project ID to use for query cache - defaults to thread.projectId */\n projectId?: string;\n /** Optional: Context key for thread list queries */\n contextKey?: string;\n}\n\n/**\n * Stub client provider that accepts a client and queryClient as props\n * @returns The TamboStubClientProvider component\n */\nconst TamboStubClientProvider: React.FC<\n PropsWithChildren<{\n client: TamboAI;\n queryClient: QueryClient;\n threads?: Partial<TamboAI.Beta.Threads.ThreadsOffsetAndLimit>;\n projectId?: string;\n contextKey?: string;\n }>\n> = ({ children, client, queryClient, threads, projectId, contextKey }) => {\n // Prepopulate the query cache with threads data if provided\n useEffect(() => {\n if (threads) {\n // Set the project ID in the cache\n queryClient.setQueryData([\"projectId\"], projectId);\n\n // Set the threads data in the cache using the same query key pattern as useTamboThreadList\n queryClient.setQueryData([\"threads\", projectId, contextKey], threads);\n }\n }, [threads, projectId, contextKey, queryClient]);\n\n return (\n <TamboClientContext.Provider value={{ client, queryClient }}>\n {children}\n </TamboClientContext.Provider>\n );\n};\n\n/**\n * Stub registry provider that accepts componentList, toolRegistry, and componentToolAssociations as props\n * @returns The TamboStubRegistryProvider component\n */\nconst TamboStubRegistryProvider: React.FC<\n PropsWithChildren<{\n componentList: Record<string, any>;\n toolRegistry: Record<string, TamboTool>;\n componentToolAssociations: Record<string, string[]>;\n registerComponent: (options: TamboComponent) => void;\n registerTool: (tool: TamboTool) => void;\n registerTools: (tools: TamboTool[]) => void;\n addToolAssociation: (componentName: string, tool: TamboTool) => void;\n }>\n> = ({\n children,\n componentList,\n toolRegistry,\n componentToolAssociations,\n registerComponent,\n registerTool,\n registerTools,\n addToolAssociation,\n}) => {\n return (\n <TamboRegistryContext.Provider\n value={{\n componentList,\n toolRegistry,\n componentToolAssociations,\n registerComponent,\n registerTool,\n registerTools,\n addToolAssociation,\n }}\n >\n {children}\n </TamboRegistryContext.Provider>\n );\n};\n\n/**\n * Stub thread provider that accepts all thread context props\n * @returns The TamboStubThreadProvider component\n */\nconst TamboStubThreadProvider: React.FC<\n PropsWithChildren<TamboThreadContextProps>\n> = ({ children, ...threadContextProps }) => {\n return (\n <TamboThreadContext.Provider value={threadContextProps}>\n {children}\n </TamboThreadContext.Provider>\n );\n};\n\n/**\n * Default no-op functions that throw errors - used when callbacks are not provided\n * @returns The default callbacks\n */\nconst createDefaultCallbacks = () => ({\n switchCurrentThread: () => {\n throw new Error(\"switchCurrentThread not implemented in stub\");\n },\n startNewThread: () => {\n throw new Error(\"startNewThread not implemented in stub\");\n },\n updateThreadName: () => {\n throw new Error(\"updateThreadName not implemented in stub\");\n },\n generateThreadName: () => {\n throw new Error(\"generateThreadName not implemented in stub\");\n },\n addThreadMessage: () => {\n throw new Error(\"addThreadMessage not implemented in stub\");\n },\n updateThreadMessage: () => {\n throw new Error(\"updateThreadMessage not implemented in stub\");\n },\n setInputValue: () => {\n throw new Error(\"setInputValue not implemented in stub\");\n },\n sendThreadMessage: () => {\n throw new Error(\"sendThreadMessage not implemented in stub\");\n },\n registerComponent: () => {\n throw new Error(\"registerComponent not implemented in stub\");\n },\n registerTool: () => {\n throw new Error(\"registerTool not implemented in stub\");\n },\n registerTools: () => {\n throw new Error(\"registerTools not implemented in stub\");\n },\n addToolAssociation: () => {\n throw new Error(\"addToolAssociation not implemented in stub\");\n },\n});\n\n/**\n * The TamboStubProvider provides a way to use the Tambo API with static/stub data.\n * This is useful for testing, samples, and static UI development.\n *\n * Unlike TamboProvider, all data must be provided as props rather than being inferred.\n * @example\n * ```tsx\n * import { TamboStubProvider } from '@tambo-ai/react-sdk';\n *\n * const exampleThread = {\n * id: \"example-thread\",\n * messages: [\n * {\n * id: \"msg-1\",\n * role: \"user\",\n * content: [{ type: \"text\", text: \"Hello!\" }],\n * createdAt: new Date().toISOString(),\n * threadId: \"example-thread\",\n * componentState: {},\n * },\n * {\n * id: \"msg-2\",\n * role: \"assistant\",\n * content: [{ type: \"text\", text: \"Hi there!\" }],\n * createdAt: new Date().toISOString(),\n * threadId: \"example-thread\",\n * componentState: {},\n * }\n * ],\n * createdAt: new Date().toISOString(),\n * projectId: \"example-project\",\n * updatedAt: new Date().toISOString(),\n * metadata: {},\n * };\n *\n * const exampleThreadList = [exampleThread];\n *\n * function MyComponent() {\n * return (\n * <TamboStubProvider\n * thread={exampleThread}\n * components={[]}\n * tools={[]}\n * threads={exampleThreadList}\n * projectId=\"example-project\"\n * >\n * <MessageThreadFull />\n * </TamboStubProvider>\n * );\n * }\n * ```\n * @param props - The props for the TamboStubProvider\n * @param props.children - The children to wrap\n * @param props.thread - The thread data to display\n * @param props.components - Optional components registry\n * @param props.tools - Optional tools registry\n * @param props.threads - Optional threads data to populate thread list (overrides useTamboThreadList)\n * @param props.projectId - Optional project ID for query cache (defaults to thread.projectId)\n * @param props.contextKey - Optional context key for thread list queries\n * @returns The TamboStubProvider component\n */\nexport const TamboStubProvider: React.FC<\n PropsWithChildren<TamboStubProviderProps>\n> = ({\n children,\n thread,\n components = [],\n tools = [],\n threads,\n projectId,\n contextKey,\n ...overrides\n}) => {\n const defaults = createDefaultCallbacks();\n\n // Create stub client and queryClient\n const stubClient = {} as TamboAI;\n const stubQueryClient = new QueryClient();\n\n // Use provided projectId or fall back to thread's projectId\n const resolvedProjectId = projectId ?? thread.projectId;\n\n // Build component registry from components prop\n const componentList = components.reduce(\n (acc, component) => {\n acc[component.name] = {\n component: component.component,\n loadingComponent: component.loadingComponent,\n name: component.name,\n description: component.description,\n props: component.propsDefinition ?? {},\n contextTools: [],\n };\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Build tool registry from tools prop\n const toolRegistry = tools.reduce(\n (acc, tool) => {\n acc[tool.name] = tool;\n return acc;\n },\n {} as Record<string, TamboTool>,\n );\n\n // Build tool associations from components\n const componentToolAssociations = components.reduce(\n (acc, component) => {\n if (component.associatedTools) {\n acc[component.name] = component.associatedTools.map(\n (tool) => tool.name,\n );\n }\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n // Merge defaults with provided overrides\n const threadContextProps: TamboThreadContextProps = {\n thread,\n switchCurrentThread:\n overrides.switchCurrentThread ?? defaults.switchCurrentThread,\n startNewThread: overrides.startNewThread ?? defaults.startNewThread,\n updateThreadName: overrides.updateThreadName ?? defaults.updateThreadName,\n generateThreadName:\n overrides.generateThreadName ?? defaults.generateThreadName,\n addThreadMessage: overrides.addThreadMessage ?? defaults.addThreadMessage,\n updateThreadMessage:\n overrides.updateThreadMessage ?? defaults.updateThreadMessage,\n inputValue: overrides.inputValue ?? \"\",\n streaming: overrides.streaming ?? true,\n setInputValue: overrides.setInputValue ?? defaults.setInputValue,\n sendThreadMessage:\n overrides.sendThreadMessage ?? defaults.sendThreadMessage,\n generationStage: overrides.generationStage ?? GenerationStage.IDLE,\n generationStatusMessage: overrides.generationStatusMessage ?? \"\",\n isIdle: overrides.isIdle ?? true,\n };\n\n const componentContextProps: TamboComponentContextProps = {\n registerComponent:\n overrides.registerComponent ?? defaults.registerComponent,\n registerTool: overrides.registerTool ?? defaults.registerTool,\n registerTools: overrides.registerTools ?? defaults.registerTools,\n addToolAssociation:\n overrides.addToolAssociation ?? defaults.addToolAssociation,\n };\n\n return (\n <TamboStubClientProvider\n client={stubClient}\n queryClient={stubQueryClient}\n threads={threads}\n projectId={resolvedProjectId}\n contextKey={contextKey}\n >\n <TamboStubRegistryProvider\n componentList={componentList}\n toolRegistry={toolRegistry}\n componentToolAssociations={componentToolAssociations}\n registerComponent={componentContextProps.registerComponent}\n registerTool={componentContextProps.registerTool}\n registerTools={componentContextProps.registerTools}\n addToolAssociation={componentContextProps.addToolAssociation}\n >\n <TamboStubThreadProvider {...threadContextProps}>\n <TamboComponentProvider>\n <TamboCompositeProvider>{children}</TamboCompositeProvider>\n </TamboComponentProvider>\n </TamboStubThreadProvider>\n </TamboStubRegistryProvider>\n </TamboStubClientProvider>\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tambo-ai/react",
3
- "version": "0.29.1",
3
+ "version": "0.30.0",
4
4
  "description": "React client package for Tambo AI",
5
5
  "repository": {
6
6
  "type": "git",