@tambo-ai/react 0.12.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 (158) hide show
  1. package/README.md +9 -0
  2. package/dist/hooks/__tests__/use-suggestions.test.d.ts +1 -0
  3. package/dist/hooks/__tests__/use-suggestions.test.js +167 -0
  4. package/dist/hooks/__tests__/use-suggestions.test.js.map +1 -0
  5. package/dist/hooks/react-query-hooks.d.ts +21 -0
  6. package/dist/hooks/react-query-hooks.js +33 -0
  7. package/dist/hooks/react-query-hooks.js.map +1 -0
  8. package/dist/hooks/use-component-state.d.ts +8 -0
  9. package/dist/hooks/use-component-state.js +42 -0
  10. package/dist/hooks/use-component-state.js.map +1 -0
  11. package/dist/hooks/use-current-message.d.ts +18 -0
  12. package/dist/hooks/use-current-message.js +73 -0
  13. package/dist/hooks/use-current-message.js.map +1 -0
  14. package/dist/hooks/use-query-client.d.ts +0 -0
  15. package/dist/hooks/use-query-client.js +2 -0
  16. package/dist/hooks/use-query-client.js.map +1 -0
  17. package/dist/hooks/use-suggestions.d.ts +44 -0
  18. package/dist/hooks/use-suggestions.js +111 -0
  19. package/dist/hooks/use-suggestions.js.map +1 -0
  20. package/dist/hooks/use-tambo-threads.d.ts +137 -0
  21. package/dist/hooks/use-tambo-threads.js +33 -0
  22. package/dist/hooks/use-tambo-threads.js.map +1 -0
  23. package/dist/hooks/use-thread-input.d.ts +48 -0
  24. package/dist/hooks/use-thread-input.js +53 -0
  25. package/dist/hooks/use-thread-input.js.map +1 -0
  26. package/dist/index.d.ts +12 -0
  27. package/dist/index.js +34 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/model/component-metadata.d.ts +32 -0
  30. package/dist/model/component-metadata.js +3 -0
  31. package/dist/model/component-metadata.js.map +1 -0
  32. package/dist/model/generate-component-response.d.ts +17 -0
  33. package/dist/model/generate-component-response.js +22 -0
  34. package/dist/model/generate-component-response.js.map +1 -0
  35. package/dist/model/tambo-thread.d.ts +7 -0
  36. package/dist/model/tambo-thread.js +3 -0
  37. package/dist/model/tambo-thread.js.map +1 -0
  38. package/dist/model/thread-input-error.d.ts +3 -0
  39. package/dist/model/thread-input-error.js +8 -0
  40. package/dist/model/thread-input-error.js.map +1 -0
  41. package/dist/model/validate-input.d.ts +6 -0
  42. package/dist/model/validate-input.js +27 -0
  43. package/dist/model/validate-input.js.map +1 -0
  44. package/dist/providers/index.d.ts +5 -0
  45. package/dist/providers/index.js +21 -0
  46. package/dist/providers/index.js.map +1 -0
  47. package/dist/providers/tambo-client-provider.d.ts +15 -0
  48. package/dist/providers/tambo-client-provider.js +66 -0
  49. package/dist/providers/tambo-client-provider.js.map +1 -0
  50. package/dist/providers/tambo-component-provider.d.ts +18 -0
  51. package/dist/providers/tambo-component-provider.js +129 -0
  52. package/dist/providers/tambo-component-provider.js.map +1 -0
  53. package/dist/providers/tambo-provider.d.ts +10 -0
  54. package/dist/providers/tambo-provider.js +70 -0
  55. package/dist/providers/tambo-provider.js.map +1 -0
  56. package/dist/providers/tambo-registry-provider.d.ts +21 -0
  57. package/dist/providers/tambo-registry-provider.js +117 -0
  58. package/dist/providers/tambo-registry-provider.js.map +1 -0
  59. package/dist/providers/tambo-thread-provider.d.ts +28 -0
  60. package/dist/providers/tambo-thread-provider.js +417 -0
  61. package/dist/providers/tambo-thread-provider.js.map +1 -0
  62. package/dist/setupTests.d.ts +1 -0
  63. package/dist/setupTests.js +20 -0
  64. package/dist/setupTests.js.map +1 -0
  65. package/dist/util/generate-component.d.ts +8 -0
  66. package/dist/util/generate-component.js +209 -0
  67. package/dist/util/generate-component.js.map +1 -0
  68. package/dist/util/messages.d.ts +2 -0
  69. package/dist/util/messages.js +12 -0
  70. package/dist/util/messages.js.map +1 -0
  71. package/dist/util/query-utils.d.ts +5 -0
  72. package/dist/util/query-utils.js +63 -0
  73. package/dist/util/query-utils.js.map +1 -0
  74. package/dist/util/registry.d.ts +7 -0
  75. package/dist/util/registry.js +99 -0
  76. package/dist/util/registry.js.map +1 -0
  77. package/dist/util/tool-caller.d.ts +3 -0
  78. package/dist/util/tool-caller.js +30 -0
  79. package/dist/util/tool-caller.js.map +1 -0
  80. package/esm/hooks/__tests__/use-suggestions.test.d.ts +1 -0
  81. package/esm/hooks/__tests__/use-suggestions.test.js +165 -0
  82. package/esm/hooks/__tests__/use-suggestions.test.js.map +1 -0
  83. package/esm/hooks/react-query-hooks.d.ts +21 -0
  84. package/esm/hooks/react-query-hooks.js +28 -0
  85. package/esm/hooks/react-query-hooks.js.map +1 -0
  86. package/esm/hooks/use-component-state.d.ts +8 -0
  87. package/esm/hooks/use-component-state.js +39 -0
  88. package/esm/hooks/use-component-state.js.map +1 -0
  89. package/esm/hooks/use-current-message.d.ts +18 -0
  90. package/esm/hooks/use-current-message.js +33 -0
  91. package/esm/hooks/use-current-message.js.map +1 -0
  92. package/esm/hooks/use-query-client.d.ts +0 -0
  93. package/esm/hooks/use-query-client.js +2 -0
  94. package/esm/hooks/use-query-client.js.map +1 -0
  95. package/esm/hooks/use-suggestions.d.ts +44 -0
  96. package/esm/hooks/use-suggestions.js +108 -0
  97. package/esm/hooks/use-suggestions.js.map +1 -0
  98. package/esm/hooks/use-tambo-threads.d.ts +137 -0
  99. package/esm/hooks/use-tambo-threads.js +30 -0
  100. package/esm/hooks/use-tambo-threads.js.map +1 -0
  101. package/esm/hooks/use-thread-input.d.ts +48 -0
  102. package/esm/hooks/use-thread-input.js +49 -0
  103. package/esm/hooks/use-thread-input.js.map +1 -0
  104. package/esm/index.d.ts +12 -0
  105. package/esm/index.js +10 -0
  106. package/esm/index.js.map +1 -0
  107. package/esm/model/component-metadata.d.ts +32 -0
  108. package/esm/model/component-metadata.js +2 -0
  109. package/esm/model/component-metadata.js.map +1 -0
  110. package/esm/model/generate-component-response.d.ts +17 -0
  111. package/esm/model/generate-component-response.js +18 -0
  112. package/esm/model/generate-component-response.js.map +1 -0
  113. package/esm/model/tambo-thread.d.ts +7 -0
  114. package/esm/model/tambo-thread.js +2 -0
  115. package/esm/model/tambo-thread.js.map +1 -0
  116. package/esm/model/thread-input-error.d.ts +3 -0
  117. package/esm/model/thread-input-error.js +4 -0
  118. package/esm/model/thread-input-error.js.map +1 -0
  119. package/esm/model/validate-input.d.ts +6 -0
  120. package/esm/model/validate-input.js +24 -0
  121. package/esm/model/validate-input.js.map +1 -0
  122. package/esm/providers/index.d.ts +5 -0
  123. package/esm/providers/index.js +6 -0
  124. package/esm/providers/index.js.map +1 -0
  125. package/esm/providers/tambo-client-provider.d.ts +15 -0
  126. package/esm/providers/tambo-client-provider.js +24 -0
  127. package/esm/providers/tambo-client-provider.js.map +1 -0
  128. package/esm/providers/tambo-component-provider.d.ts +18 -0
  129. package/esm/providers/tambo-component-provider.js +91 -0
  130. package/esm/providers/tambo-component-provider.js.map +1 -0
  131. package/esm/providers/tambo-provider.d.ts +10 -0
  132. package/esm/providers/tambo-provider.js +32 -0
  133. package/esm/providers/tambo-provider.js.map +1 -0
  134. package/esm/providers/tambo-registry-provider.d.ts +21 -0
  135. package/esm/providers/tambo-registry-provider.js +79 -0
  136. package/esm/providers/tambo-registry-provider.js.map +1 -0
  137. package/esm/providers/tambo-thread-provider.d.ts +28 -0
  138. package/esm/providers/tambo-thread-provider.js +379 -0
  139. package/esm/providers/tambo-thread-provider.js.map +1 -0
  140. package/esm/setupTests.d.ts +1 -0
  141. package/esm/setupTests.js +18 -0
  142. package/esm/setupTests.js.map +1 -0
  143. package/esm/util/generate-component.d.ts +8 -0
  144. package/esm/util/generate-component.js +202 -0
  145. package/esm/util/generate-component.js.map +1 -0
  146. package/esm/util/messages.d.ts +2 -0
  147. package/esm/util/messages.js +9 -0
  148. package/esm/util/messages.js.map +1 -0
  149. package/esm/util/query-utils.d.ts +5 -0
  150. package/esm/util/query-utils.js +59 -0
  151. package/esm/util/query-utils.js.map +1 -0
  152. package/esm/util/registry.d.ts +7 -0
  153. package/esm/util/registry.js +88 -0
  154. package/esm/util/registry.js.map +1 -0
  155. package/esm/util/tool-caller.d.ts +3 -0
  156. package/esm/util/tool-caller.js +26 -0
  157. package/esm/util/tool-caller.js.map +1 -0
  158. package/package.json +84 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Get the threads for the specified project and optional context key.
3
+ */
4
+ export declare function useTamboThreads({ projectId, contextKey, }?: {
5
+ projectId?: string;
6
+ contextKey?: string;
7
+ }): import("@tanstack/query-core").QueryObserverRefetchErrorResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverSuccessResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverLoadingErrorResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverPendingResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverPlaceholderResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | {
8
+ error: Error;
9
+ isError: true;
10
+ isPending: false;
11
+ isLoading: false;
12
+ isLoadingError: false;
13
+ isRefetchError: true;
14
+ isSuccess: false;
15
+ isPlaceholderData: false;
16
+ status: "error";
17
+ dataUpdatedAt: number;
18
+ errorUpdatedAt: number;
19
+ failureCount: number;
20
+ failureReason: Error | null;
21
+ errorUpdateCount: number;
22
+ isFetched: boolean;
23
+ isFetchedAfterMount: boolean;
24
+ isFetching: boolean;
25
+ isInitialLoading: boolean;
26
+ isPaused: boolean;
27
+ isRefetching: boolean;
28
+ isStale: boolean;
29
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
30
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
31
+ promise: Promise<string>;
32
+ data: null;
33
+ } | {
34
+ error: null;
35
+ isError: false;
36
+ isPending: false;
37
+ isLoading: false;
38
+ isLoadingError: false;
39
+ isRefetchError: false;
40
+ isSuccess: true;
41
+ isPlaceholderData: false;
42
+ status: "success";
43
+ dataUpdatedAt: number;
44
+ errorUpdatedAt: number;
45
+ failureCount: number;
46
+ failureReason: Error | null;
47
+ errorUpdateCount: number;
48
+ isFetched: boolean;
49
+ isFetchedAfterMount: boolean;
50
+ isFetching: boolean;
51
+ isInitialLoading: boolean;
52
+ isPaused: boolean;
53
+ isRefetching: boolean;
54
+ isStale: boolean;
55
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
56
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
57
+ promise: Promise<string>;
58
+ data: null;
59
+ } | {
60
+ error: Error;
61
+ isError: true;
62
+ isPending: false;
63
+ isLoading: false;
64
+ isLoadingError: true;
65
+ isRefetchError: false;
66
+ isSuccess: false;
67
+ isPlaceholderData: false;
68
+ status: "error";
69
+ dataUpdatedAt: number;
70
+ errorUpdatedAt: number;
71
+ failureCount: number;
72
+ failureReason: Error | null;
73
+ errorUpdateCount: number;
74
+ isFetched: boolean;
75
+ isFetchedAfterMount: boolean;
76
+ isFetching: boolean;
77
+ isInitialLoading: boolean;
78
+ isPaused: boolean;
79
+ isRefetching: boolean;
80
+ isStale: boolean;
81
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
82
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
83
+ promise: Promise<string>;
84
+ data: null;
85
+ } | {
86
+ error: null;
87
+ isError: false;
88
+ isPending: true;
89
+ isLoadingError: false;
90
+ isRefetchError: false;
91
+ isSuccess: false;
92
+ isPlaceholderData: false;
93
+ status: "pending";
94
+ dataUpdatedAt: number;
95
+ errorUpdatedAt: number;
96
+ failureCount: number;
97
+ failureReason: Error | null;
98
+ errorUpdateCount: number;
99
+ isFetched: boolean;
100
+ isFetchedAfterMount: boolean;
101
+ isFetching: boolean;
102
+ isLoading: boolean;
103
+ isInitialLoading: boolean;
104
+ isPaused: boolean;
105
+ isRefetching: boolean;
106
+ isStale: boolean;
107
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
108
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
109
+ promise: Promise<string>;
110
+ data: null;
111
+ } | {
112
+ isError: false;
113
+ error: null;
114
+ isPending: false;
115
+ isLoading: false;
116
+ isLoadingError: false;
117
+ isRefetchError: false;
118
+ isSuccess: true;
119
+ isPlaceholderData: true;
120
+ status: "success";
121
+ dataUpdatedAt: number;
122
+ errorUpdatedAt: number;
123
+ failureCount: number;
124
+ failureReason: Error | null;
125
+ errorUpdateCount: number;
126
+ isFetched: boolean;
127
+ isFetchedAfterMount: boolean;
128
+ isFetching: boolean;
129
+ isInitialLoading: boolean;
130
+ isPaused: boolean;
131
+ isRefetching: boolean;
132
+ isStale: boolean;
133
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
134
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
135
+ promise: Promise<string>;
136
+ data: null;
137
+ };
@@ -0,0 +1,30 @@
1
+ import { useTamboClient } from "../providers/tambo-client-provider";
2
+ import { useTamboQuery } from "./react-query-hooks";
3
+ /**
4
+ * Get the threads for the specified project and optional context key.
5
+ */
6
+ export function useTamboThreads({ projectId, contextKey, } = {}) {
7
+ const client = useTamboClient();
8
+ const { data: queriedProjectId, ...projectIdState } = useTamboQuery({
9
+ queryKey: ["projectId"],
10
+ queryFn: async () => {
11
+ return (await client.beta.projects.getCurrent()).id;
12
+ },
13
+ });
14
+ const currentProjectId = projectId ?? queriedProjectId;
15
+ const threadState = useTamboQuery({
16
+ enabled: !!currentProjectId,
17
+ queryKey: ["threads", currentProjectId, contextKey],
18
+ queryFn: async () => {
19
+ if (!currentProjectId) {
20
+ return null;
21
+ }
22
+ const threadIter = await client.beta.threads.list(currentProjectId, {
23
+ contextKey,
24
+ });
25
+ return threadIter;
26
+ },
27
+ });
28
+ return currentProjectId ? threadState : { data: null, ...projectIdState };
29
+ }
30
+ //# sourceMappingURL=use-tambo-threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-threads.js","sourceRoot":"","sources":["../../src/hooks/use-tambo-threads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,UAAU,MAIR,EAAE;IACJ,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,GAAG,aAAa,CAAC;QAClE,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;KACF,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,SAAS,IAAI,gBAAgB,CAAC;IAEvD,MAAM,WAAW,GAAG,aAAa,CAAC;QAChC,OAAO,EAAE,CAAC,CAAC,gBAAgB;QAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC;QACnD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAClE,UAAU;aACX,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,CAAC;AAC5E,CAAC","sourcesContent":["import { useTamboClient } from \"../providers/tambo-client-provider\";\nimport { useTamboQuery } from \"./react-query-hooks\";\n\n/**\n * Get the threads for the specified project and optional context key.\n */\nexport function useTamboThreads({\n projectId,\n contextKey,\n}: {\n projectId?: string;\n contextKey?: string;\n} = {}) {\n const client = useTamboClient();\n const { data: queriedProjectId, ...projectIdState } = useTamboQuery({\n queryKey: [\"projectId\"],\n queryFn: async () => {\n return (await client.beta.projects.getCurrent()).id;\n },\n });\n const currentProjectId = projectId ?? queriedProjectId;\n\n const threadState = useTamboQuery({\n enabled: !!currentProjectId,\n queryKey: [\"threads\", currentProjectId, contextKey],\n queryFn: async () => {\n if (!currentProjectId) {\n return null;\n }\n const threadIter = await client.beta.threads.list(currentProjectId, {\n contextKey,\n });\n return threadIter;\n },\n });\n\n return currentProjectId ? threadState : { data: null, ...projectIdState };\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import { UseMutationResult } from "@tanstack/react-query";
2
+ /**
3
+ * Error messages for various input-related error scenarios
4
+ * These messages are used to provide user-friendly error feedback
5
+ * @readonly
6
+ */
7
+ export declare const INPUT_ERROR_MESSAGES: {
8
+ /** Error when attempting to submit empty input */
9
+ readonly EMPTY: "Message cannot be empty";
10
+ /** Error when network connection fails */
11
+ readonly NETWORK: "Network error. Please check your connection";
12
+ /** Error when server fails to process the request */
13
+ readonly SERVER: "Server error. Please try again";
14
+ /** Error when input format is invalid */
15
+ readonly VALIDATION: "Invalid message format";
16
+ };
17
+ /**
18
+ * Interface for the thread input hook return value
19
+ * Provides all necessary functions and state for managing thread input
20
+ */
21
+ interface UseThreadInputInternal {
22
+ /** Current value of the input field */
23
+ value: string;
24
+ /**
25
+ * Function to update the input value
26
+ * @param value - New value for the input field
27
+ */
28
+ setValue: (value: string) => void;
29
+ /**
30
+ * Function to submit the current input value
31
+ * Validates input, handles errors, and cleans up state after submission
32
+ * @throws {ThreadInputError} If submission fails
33
+ * @returns Promise that resolves when submission is complete
34
+ */
35
+ submit: (options?: {
36
+ contextKey?: string;
37
+ }) => Promise<void>;
38
+ }
39
+ export type UseThreadInput = UseThreadInputInternal & UseMutationResult<void, Error, {
40
+ contextKey?: string;
41
+ }>;
42
+ /**
43
+ * Hook for managing thread message input state and submission
44
+ *
45
+ * @returns Interface for managing thread input state and submission
46
+ */
47
+ export declare function useTamboThreadInput(contextKey?: string): UseThreadInput;
48
+ export {};
@@ -0,0 +1,49 @@
1
+ import { useCallback } from "react";
2
+ import { ThreadInputError } from "../model/thread-input-error";
3
+ import { validateInput } from "../model/validate-input";
4
+ import { useTamboThread } from "../providers/tambo-thread-provider";
5
+ import { useTamboMutation } from "./react-query-hooks";
6
+ /**
7
+ * Error messages for various input-related error scenarios
8
+ * These messages are used to provide user-friendly error feedback
9
+ * @readonly
10
+ */
11
+ export const INPUT_ERROR_MESSAGES = {
12
+ /** Error when attempting to submit empty input */
13
+ EMPTY: "Message cannot be empty",
14
+ /** Error when network connection fails */
15
+ NETWORK: "Network error. Please check your connection",
16
+ /** Error when server fails to process the request */
17
+ SERVER: "Server error. Please try again",
18
+ /** Error when input format is invalid */
19
+ VALIDATION: "Invalid message format",
20
+ };
21
+ /**
22
+ * Hook for managing thread message input state and submission
23
+ *
24
+ * @returns Interface for managing thread input state and submission
25
+ */
26
+ export function useTamboThreadInput(contextKey) {
27
+ const { thread, inputValue, setInputValue, sendThreadMessage } = useTamboThread();
28
+ const submit = useCallback(async ({ contextKey: submitContextKey } = {}) => {
29
+ const validation = validateInput(inputValue);
30
+ if (!validation.isValid) {
31
+ throw new ThreadInputError(`Cannot submit message: ${validation.error ?? INPUT_ERROR_MESSAGES.VALIDATION}`, { cause: validation.error });
32
+ }
33
+ await sendThreadMessage(validation.sanitizedInput, {
34
+ threadId: thread.id,
35
+ contextKey: submitContextKey ?? contextKey ?? undefined,
36
+ });
37
+ setInputValue("");
38
+ }, [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue]);
39
+ const { mutateAsync: submitAsync, mutate: _unusedSubmit, ...mutationState } = useTamboMutation({
40
+ mutationFn: submit,
41
+ });
42
+ return {
43
+ ...mutationState,
44
+ value: inputValue,
45
+ setValue: setInputValue,
46
+ submit: submitAsync,
47
+ };
48
+ }
49
+ //# sourceMappingURL=use-thread-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-thread-input.js","sourceRoot":"","sources":["../../src/hooks/use-thread-input.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kDAAkD;IAClD,KAAK,EAAE,yBAAyB;IAChC,0CAA0C;IAC1C,OAAO,EAAE,6CAA6C;IACtD,qDAAqD;IACrD,MAAM,EAAE,gCAAgC;IACxC,yCAAyC;IACzC,UAAU,EAAE,wBAAwB;CAC5B,CAAC;AAyBX;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAmB;IACrD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,GAC5D,cAAc,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,EAAE,UAAU,EAAE,gBAAgB,KAA8B,EAAE,EAAE,EAAE;QACvE,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,gBAAgB,CACxB,0BAA0B,UAAU,CAAC,KAAK,IAAI,oBAAoB,CAAC,UAAU,EAAE,EAC/E,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAC5B,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,CAAC,cAAc,EAAE;YACjD,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,UAAU,EAAE,gBAAgB,IAAI,UAAU,IAAI,SAAS;SACxD,CAAC,CAAC;QACH,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CACtE,CAAC;IACF,MAAM,EACJ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,EACrB,GAAG,aAAa,EACjB,GAAG,gBAAgB,CAAC;QACnB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,aAAa;QAChB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,WAAW;KACF,CAAC;AACtB,CAAC","sourcesContent":["import { UseMutationResult } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { ThreadInputError } from \"../model/thread-input-error\";\nimport { validateInput } from \"../model/validate-input\";\nimport { useTamboThread } from \"../providers/tambo-thread-provider\";\nimport { useTamboMutation } from \"./react-query-hooks\";\n\n/**\n * Error messages for various input-related error scenarios\n * These messages are used to provide user-friendly error feedback\n * @readonly\n */\nexport const INPUT_ERROR_MESSAGES = {\n /** Error when attempting to submit empty input */\n EMPTY: \"Message cannot be empty\",\n /** Error when network connection fails */\n NETWORK: \"Network error. Please check your connection\",\n /** Error when server fails to process the request */\n SERVER: \"Server error. Please try again\",\n /** Error when input format is invalid */\n VALIDATION: \"Invalid message format\",\n} as const;\n\n/**\n * Interface for the thread input hook return value\n * Provides all necessary functions and state for managing thread input\n */\ninterface UseThreadInputInternal {\n /** Current value of the input field */\n value: string;\n /**\n * Function to update the input value\n * @param value - New value for the input field\n */\n setValue: (value: string) => void;\n /**\n * Function to submit the current input value\n * Validates input, handles errors, and cleans up state after submission\n * @throws {ThreadInputError} If submission fails\n * @returns Promise that resolves when submission is complete\n */\n submit: (options?: { contextKey?: string }) => Promise<void>;\n}\nexport type UseThreadInput = UseThreadInputInternal &\n UseMutationResult<void, Error, { contextKey?: string }>;\n\n/**\n * Hook for managing thread message input state and submission\n *\n * @returns Interface for managing thread input state and submission\n */\nexport function useTamboThreadInput(contextKey?: string): UseThreadInput {\n const { thread, inputValue, setInputValue, sendThreadMessage } =\n useTamboThread();\n\n const submit = useCallback(\n async ({ contextKey: submitContextKey }: { contextKey?: string } = {}) => {\n const validation = validateInput(inputValue);\n if (!validation.isValid) {\n throw new ThreadInputError(\n `Cannot submit message: ${validation.error ?? INPUT_ERROR_MESSAGES.VALIDATION}`,\n { cause: validation.error },\n );\n }\n\n await sendThreadMessage(validation.sanitizedInput, {\n threadId: thread.id,\n contextKey: submitContextKey ?? contextKey ?? undefined,\n });\n setInputValue(\"\");\n },\n [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue],\n );\n const {\n mutateAsync: submitAsync,\n mutate: _unusedSubmit,\n ...mutationState\n } = useTamboMutation({\n mutationFn: submit,\n });\n\n return {\n ...mutationState,\n value: inputValue,\n setValue: setInputValue,\n submit: submitAsync,\n } as UseThreadInput;\n}\n"]}
package/esm/index.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */
2
+ export { useTamboComponentState } from "./hooks/use-component-state";
3
+ export { TamboMessageProvider, useTamboCurrentMessage, useTamboMessageContext, } from "./hooks/use-current-message";
4
+ export * from "./hooks/use-suggestions";
5
+ export { useTamboThreadInput } from "./hooks/use-thread-input";
6
+ export * from "./providers";
7
+ export type { APIError, RateLimitError, TamboAIError, } from "@tambo-ai/typescript-sdk";
8
+ export type { Suggestion, SuggestionGenerateParams, SuggestionGenerateResponse, SuggestionListResponse, } from "@tambo-ai/typescript-sdk/resources/beta/threads/suggestions";
9
+ export { useTamboThreads } from "./hooks/use-tambo-threads";
10
+ export { ComponentContextToolMetadata, ComponentRegistry, ParameterSpec, RegisteredComponent, TamboTool, } from "./model/component-metadata";
11
+ export { GenerationStage, TamboThreadMessage, } from "./model/generate-component-response";
12
+ export { TamboThread } from "./model/tambo-thread";
package/esm/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */
2
+ export { useTamboComponentState } from "./hooks/use-component-state";
3
+ export { TamboMessageProvider, useTamboCurrentMessage, useTamboMessageContext, } from "./hooks/use-current-message";
4
+ export * from "./hooks/use-suggestions";
5
+ export { useTamboThreadInput } from "./hooks/use-thread-input";
6
+ // Re-export provider components
7
+ export * from "./providers";
8
+ export { useTamboThreads } from "./hooks/use-tambo-threads";
9
+ export { GenerationStage, } from "./model/generate-component-response";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wKAAwK;AACxK,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,gCAAgC;AAChC,cAAc,aAAa,CAAC;AAc5B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAQ5D,OAAO,EACL,eAAe,GAEhB,MAAM,qCAAqC,CAAC","sourcesContent":["/** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */\nexport { useTamboComponentState } from \"./hooks/use-component-state\";\nexport {\n TamboMessageProvider,\n useTamboCurrentMessage,\n useTamboMessageContext,\n} from \"./hooks/use-current-message\";\nexport * from \"./hooks/use-suggestions\";\nexport { useTamboThreadInput } from \"./hooks/use-thread-input\";\n\n// Re-export provider components\nexport * from \"./providers\";\n\n// Re-export types from Tambo Node SDK\nexport type {\n APIError,\n RateLimitError,\n TamboAIError,\n} from \"@tambo-ai/typescript-sdk\";\nexport type {\n Suggestion,\n SuggestionGenerateParams,\n SuggestionGenerateResponse,\n SuggestionListResponse,\n} from \"@tambo-ai/typescript-sdk/resources/beta/threads/suggestions\";\nexport { useTamboThreads } from \"./hooks/use-tambo-threads\";\nexport {\n ComponentContextToolMetadata,\n ComponentRegistry,\n ParameterSpec,\n RegisteredComponent,\n TamboTool,\n} from \"./model/component-metadata\";\nexport {\n GenerationStage,\n TamboThreadMessage,\n} from \"./model/generate-component-response\";\nexport { TamboThread } from \"./model/tambo-thread\";\n"]}
@@ -0,0 +1,32 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { ComponentType } from "react";
3
+ import z from "zod";
4
+ import type zodToJsonSchema from "zod-to-json-schema";
5
+ /** Extension of the ToolParameters interface from Tambo AI to include JSONSchema definition */
6
+ export type ParameterSpec = TamboAI.ToolParameters & {
7
+ schema?: ReturnType<typeof zodToJsonSchema>;
8
+ };
9
+ /**
10
+ * Extends the base ContextTool interface from Tambo AI to include schema information
11
+ * for parameter validation using zod-to-json-schema.
12
+ */
13
+ export interface ComponentContextToolMetadata extends TamboAI.ComponentContextToolMetadata {
14
+ parameters: ParameterSpec[];
15
+ }
16
+ export interface ComponentContextTool {
17
+ getComponentContext: (...args: any[]) => Promise<any>;
18
+ definition: ComponentContextToolMetadata;
19
+ }
20
+ export interface RegisteredComponent extends TamboAI.AvailableComponent {
21
+ component: ComponentType<any>;
22
+ loadingComponent?: ComponentType<any>;
23
+ }
24
+ export type ComponentRegistry = Record<string, RegisteredComponent>;
25
+ export type TamboToolRegistry = Record<string, TamboTool>;
26
+ export interface TamboTool<Args extends z.ZodTuple<any, any> = z.ZodTuple<any, any>, Returns extends z.ZodTypeAny = z.ZodTypeAny> {
27
+ name: string;
28
+ description: string;
29
+ tool: (...args: z.infer<Args>) => z.infer<Returns>;
30
+ toolSchema: z.ZodFunction<Args, Returns>;
31
+ }
32
+ export type TamboToolAssociations = Record<string, string[]>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=component-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-metadata.js","sourceRoot":"","sources":["../../src/model/component-metadata.ts"],"names":[],"mappings":"","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { ComponentType } from \"react\";\nimport z from \"zod\";\nimport type zodToJsonSchema from \"zod-to-json-schema\";\n/** Extension of the ToolParameters interface from Tambo AI to include JSONSchema definition */\nexport type ParameterSpec = TamboAI.ToolParameters & {\n schema?: ReturnType<typeof zodToJsonSchema>;\n};\n\n/**\n * Extends the base ContextTool interface from Tambo AI to include schema information\n * for parameter validation using zod-to-json-schema.\n */\nexport interface ComponentContextToolMetadata\n extends TamboAI.ComponentContextToolMetadata {\n parameters: ParameterSpec[];\n}\n\nexport interface ComponentContextTool {\n getComponentContext: (...args: any[]) => Promise<any>;\n definition: ComponentContextToolMetadata;\n}\n\nexport interface RegisteredComponent extends TamboAI.AvailableComponent {\n component: ComponentType<any>;\n loadingComponent?: ComponentType<any>;\n}\n\nexport type ComponentRegistry = Record<string, RegisteredComponent>;\n\nexport type TamboToolRegistry = Record<string, TamboTool>;\n\nexport interface TamboTool<\n Args extends z.ZodTuple<any, any> = z.ZodTuple<any, any>,\n Returns extends z.ZodTypeAny = z.ZodTypeAny,\n> {\n name: string;\n description: string;\n tool: (...args: z.infer<Args>) => z.infer<Returns>;\n toolSchema: z.ZodFunction<Args, Returns>;\n}\n\nexport type TamboToolAssociations = Record<string, string[]>;\n"]}
@@ -0,0 +1,17 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { ReactElement } from "react";
3
+ /** An extension of the TamboAI.Beta.Threads.ThreadMessage type that includes a
4
+ * renderedComponent */
5
+ export interface TamboThreadMessage extends TamboAI.Beta.Threads.ThreadMessage {
6
+ renderedComponent?: ReactElement | null;
7
+ }
8
+ export declare enum GenerationStage {
9
+ IDLE = "IDLE",
10
+ CHOOSING_COMPONENT = "CHOOSING_COMPONENT",
11
+ FETCHING_CONTEXT = "FETCHING_CONTEXT",
12
+ HYDRATING_COMPONENT = "HYDRATING_COMPONENT",
13
+ STREAMING_RESPONSE = "STREAMING_RESPONSE",
14
+ COMPLETE = "COMPLETE",
15
+ ERROR = "ERROR"
16
+ }
17
+ export declare function isIdleStage(generationStage: GenerationStage): boolean;
@@ -0,0 +1,18 @@
1
+ export var GenerationStage;
2
+ (function (GenerationStage) {
3
+ GenerationStage["IDLE"] = "IDLE";
4
+ GenerationStage["CHOOSING_COMPONENT"] = "CHOOSING_COMPONENT";
5
+ GenerationStage["FETCHING_CONTEXT"] = "FETCHING_CONTEXT";
6
+ GenerationStage["HYDRATING_COMPONENT"] = "HYDRATING_COMPONENT";
7
+ GenerationStage["STREAMING_RESPONSE"] = "STREAMING_RESPONSE";
8
+ GenerationStage["COMPLETE"] = "COMPLETE";
9
+ GenerationStage["ERROR"] = "ERROR";
10
+ })(GenerationStage || (GenerationStage = {}));
11
+ export function isIdleStage(generationStage) {
12
+ return [
13
+ GenerationStage.IDLE,
14
+ GenerationStage.COMPLETE,
15
+ GenerationStage.ERROR,
16
+ ].includes(generationStage);
17
+ }
18
+ //# sourceMappingURL=generate-component-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component-response.js","sourceRoot":"","sources":["../../src/model/generate-component-response.ts"],"names":[],"mappings":"AASA,MAAM,CAAN,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,4DAAyC,CAAA;IACzC,wDAAqC,CAAA;IACrC,8DAA2C,CAAA;IAC3C,4DAAyC,CAAA;IACzC,wCAAqB,CAAA;IACrB,kCAAe,CAAA;AACjB,CAAC,EARW,eAAe,KAAf,eAAe,QAQ1B;AACD,MAAM,UAAU,WAAW,CAAC,eAAgC;IAC1D,OAAO;QACL,eAAe,CAAC,IAAI;QACpB,eAAe,CAAC,QAAQ;QACxB,eAAe,CAAC,KAAK;KACtB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { ReactElement } from \"react\";\n\n/** An extension of the TamboAI.Beta.Threads.ThreadMessage type that includes a\n * renderedComponent */\nexport interface TamboThreadMessage extends TamboAI.Beta.Threads.ThreadMessage {\n renderedComponent?: ReactElement | null;\n}\n\nexport enum GenerationStage {\n IDLE = \"IDLE\",\n CHOOSING_COMPONENT = \"CHOOSING_COMPONENT\",\n FETCHING_CONTEXT = \"FETCHING_CONTEXT\",\n HYDRATING_COMPONENT = \"HYDRATING_COMPONENT\",\n STREAMING_RESPONSE = \"STREAMING_RESPONSE\",\n COMPLETE = \"COMPLETE\",\n ERROR = \"ERROR\",\n}\nexport function isIdleStage(generationStage: GenerationStage) {\n return [\n GenerationStage.IDLE,\n GenerationStage.COMPLETE,\n GenerationStage.ERROR,\n ].includes(generationStage);\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { TamboThreadMessage } from "./generate-component-response";
3
+ /** An extension of the TamboAI.Beta.Thread type that includes
4
+ * messages with renderedComponent */
5
+ export interface TamboThread extends TamboAI.Beta.Thread {
6
+ messages: TamboThreadMessage[];
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tambo-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tambo-thread.js","sourceRoot":"","sources":["../../src/model/tambo-thread.ts"],"names":[],"mappings":"","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { TamboThreadMessage } from \"./generate-component-response\";\n\n/** An extension of the TamboAI.Beta.Thread type that includes\n * messages with renderedComponent */\nexport interface TamboThread extends TamboAI.Beta.Thread {\n messages: TamboThreadMessage[];\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { TamboAIError } from "@tambo-ai/typescript-sdk";
2
+ export declare class ThreadInputError extends TamboAIError {
3
+ }
@@ -0,0 +1,4 @@
1
+ import { TamboAIError } from "@tambo-ai/typescript-sdk";
2
+ export class ThreadInputError extends TamboAIError {
3
+ }
4
+ //# sourceMappingURL=thread-input-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-input-error.js","sourceRoot":"","sources":["../../src/model/thread-input-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,OAAO,gBAAiB,SAAQ,YAAY;CAAG","sourcesContent":["import { TamboAIError } from \"@tambo-ai/typescript-sdk\";\n\nexport class ThreadInputError extends TamboAIError {}\n"]}
@@ -0,0 +1,6 @@
1
+ export interface ValidationResult {
2
+ isValid: boolean;
3
+ error?: Error;
4
+ sanitizedInput: string;
5
+ }
6
+ export declare function validateInput(input: string): ValidationResult;
@@ -0,0 +1,24 @@
1
+ // TODO(future): Consider adding more validation rules if needed
2
+ export function validateInput(input) {
3
+ const trimmed = input.trim();
4
+ if (trimmed.length === 0) {
5
+ return {
6
+ isValid: false,
7
+ error: new Error("Message cannot be empty"),
8
+ sanitizedInput: trimmed,
9
+ };
10
+ }
11
+ // TODO(perf): Make this configurable if needed
12
+ if (trimmed.length > 10000) {
13
+ return {
14
+ isValid: false,
15
+ error: new Error("Message is too long (max 10000 characters)"),
16
+ sanitizedInput: trimmed,
17
+ };
18
+ }
19
+ return {
20
+ isValid: true,
21
+ sanitizedInput: trimmed,
22
+ };
23
+ }
24
+ //# sourceMappingURL=validate-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-input.js","sourceRoot":"","sources":["../../src/model/validate-input.ts"],"names":[],"mappings":"AAMA,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,yBAAyB,CAAC;YAC3C,cAAc,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,4CAA4C,CAAC;YAC9D,cAAc,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,OAAO;KACxB,CAAC;AACJ,CAAC","sourcesContent":["export interface ValidationResult {\n isValid: boolean;\n error?: Error;\n sanitizedInput: string;\n}\n\n// TODO(future): Consider adding more validation rules if needed\nexport function validateInput(input: string): ValidationResult {\n const trimmed = input.trim();\n\n if (trimmed.length === 0) {\n return {\n isValid: false,\n error: new Error(\"Message cannot be empty\"),\n sanitizedInput: trimmed,\n };\n }\n\n // TODO(perf): Make this configurable if needed\n if (trimmed.length > 10000) {\n return {\n isValid: false,\n error: new Error(\"Message is too long (max 10000 characters)\"),\n sanitizedInput: trimmed,\n };\n }\n\n return {\n isValid: true,\n sanitizedInput: trimmed,\n };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export { TamboClientProvider, useTamboClient } from "./tambo-client-provider";
2
+ export { TamboComponentProvider, useTamboComponent, } from "./tambo-component-provider";
3
+ export { TamboContext, TamboProvider, useTambo } from "./tambo-provider";
4
+ export { RegisterComponentOptions, TamboRegistryContext, TamboRegistryProvider, useTamboRegistry, } from "./tambo-registry-provider";
5
+ export { TamboThreadContext, TamboThreadProvider, useTamboThread, } from "./tambo-thread-provider";
@@ -0,0 +1,6 @@
1
+ export { TamboClientProvider, useTamboClient } from "./tambo-client-provider";
2
+ export { TamboComponentProvider, useTamboComponent, } from "./tambo-component-provider";
3
+ export { TamboContext, TamboProvider, useTambo } from "./tambo-provider";
4
+ export { TamboRegistryProvider, useTamboRegistry, } from "./tambo-registry-provider";
5
+ export { TamboThreadContext, TamboThreadProvider, useTamboThread, } from "./tambo-thread-provider";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAGL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,yBAAyB,CAAC","sourcesContent":["export { TamboClientProvider, useTamboClient } from \"./tambo-client-provider\";\nexport {\n TamboComponentProvider,\n useTamboComponent,\n} from \"./tambo-component-provider\";\nexport { TamboContext, TamboProvider, useTambo } from \"./tambo-provider\";\nexport {\n RegisterComponentOptions,\n TamboRegistryContext,\n TamboRegistryProvider,\n useTamboRegistry,\n} from \"./tambo-registry-provider\";\nexport {\n TamboThreadContext,\n TamboThreadProvider,\n useTamboThread,\n} from \"./tambo-thread-provider\";\n"]}
@@ -0,0 +1,15 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { QueryClient } from "@tanstack/react-query";
3
+ import React, { PropsWithChildren } from "react";
4
+ export interface TamboClientProviderProps {
5
+ tamboUrl: string;
6
+ apiKey: string;
7
+ }
8
+ export interface TamboClientContextProps {
9
+ client: TamboAI;
10
+ /** The tambo-specific query client */
11
+ queryClient: QueryClient;
12
+ }
13
+ export declare const TamboClientProvider: React.FC<PropsWithChildren<TamboClientProviderProps>>;
14
+ export declare const useTamboClient: () => TamboAI;
15
+ export declare const useTamboQueryClient: () => QueryClient;
@@ -0,0 +1,24 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { QueryClient } from "@tanstack/react-query";
3
+ import React, { createContext, useState } from "react";
4
+ const TamboClientContext = createContext(undefined);
5
+ export const TamboClientProvider = ({ children, tamboUrl, apiKey }) => {
6
+ const [client] = useState(() => new TamboAI({ baseURL: tamboUrl, apiKey }));
7
+ const [queryClient] = useState(() => new QueryClient());
8
+ return (React.createElement(TamboClientContext.Provider, { value: { client, queryClient } }, children));
9
+ };
10
+ export const useTamboClient = () => {
11
+ const context = React.useContext(TamboClientContext);
12
+ if (context === undefined) {
13
+ throw new Error("useTamboClient must be used within a TamboClientProvider");
14
+ }
15
+ return context.client;
16
+ };
17
+ export const useTamboQueryClient = () => {
18
+ const context = React.useContext(TamboClientContext);
19
+ if (context === undefined) {
20
+ throw new Error("useTamboQueryClient must be used within a TamboClientProvider");
21
+ }
22
+ return context.queryClient;
23
+ };
24
+ //# sourceMappingURL=tambo-client-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tambo-client-provider.js","sourceRoot":"","sources":["../../src/providers/tambo-client-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,EAAE,aAAa,EAAqB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAY1E,MAAM,kBAAkB,GAAG,aAAa,CACtC,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAE5B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IACrC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACxD,OAAO,CACL,oBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,IACxD,QAAQ,CACmB,CAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,CAAC;AAC7B,CAAC,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport React, { createContext, PropsWithChildren, useState } from \"react\";\n\nexport interface TamboClientProviderProps {\n tamboUrl: string;\n apiKey: string;\n}\nexport interface TamboClientContextProps {\n client: TamboAI;\n /** The tambo-specific query client */\n queryClient: QueryClient;\n}\n\nconst TamboClientContext = createContext<TamboClientContextProps | undefined>(\n undefined,\n);\n\nexport const TamboClientProvider: React.FC<\n PropsWithChildren<TamboClientProviderProps>\n> = ({ children, tamboUrl, apiKey }) => {\n const [client] = useState(() => new TamboAI({ baseURL: tamboUrl, apiKey }));\n const [queryClient] = useState(() => new QueryClient());\n return (\n <TamboClientContext.Provider value={{ client, queryClient }}>\n {children}\n </TamboClientContext.Provider>\n );\n};\n\nexport const useTamboClient = () => {\n const context = React.useContext(TamboClientContext);\n if (context === undefined) {\n throw new Error(\"useTamboClient must be used within a TamboClientProvider\");\n }\n return context.client;\n};\n\nexport const useTamboQueryClient = () => {\n const context = React.useContext(TamboClientContext);\n if (context === undefined) {\n throw new Error(\n \"useTamboQueryClient must be used within a TamboClientProvider\",\n );\n }\n return context.queryClient;\n};\n"]}
@@ -0,0 +1,18 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import React, { PropsWithChildren } from "react";
3
+ import { TamboTool } from "../model/component-metadata";
4
+ import { GenerationStage, TamboThreadMessage } from "../model/generate-component-response";
5
+ import { RegisterComponentOptions } from "./tambo-registry-provider";
6
+ export interface TamboComponentContextProps {
7
+ registerComponent: (options: RegisterComponentOptions) => void;
8
+ generateComponent: (params: TamboAI.Beta.Components.ComponentGenerateParams & {
9
+ stream?: boolean;
10
+ }, options?: TamboAI.RequestOptions) => Promise<TamboThreadMessage>;
11
+ generationStage: GenerationStage;
12
+ isIdle: boolean;
13
+ registerTool: (tool: TamboTool) => void;
14
+ registerTools: (tools: TamboTool[]) => void;
15
+ addToolAssociation: (componentName: string, tool: TamboTool) => void;
16
+ }
17
+ export declare const TamboComponentProvider: React.FC<PropsWithChildren>;
18
+ export declare const useTamboComponent: () => TamboComponentContextProps;