@tambo-ai/react 0.70.0 → 0.71.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.
- package/dist/v1/hooks/use-tambo-v1-messages.d.ts +58 -0
- package/dist/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.js +54 -0
- package/dist/v1/hooks/use-tambo-v1-messages.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.js +137 -0
- package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +96 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.js +227 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js +827 -0
- package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts +61 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.js +56 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +98 -0
- package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts +37 -0
- package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.js +49 -0
- package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.js +83 -0
- package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.d.ts +107 -0
- package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.js +87 -0
- package/dist/v1/hooks/use-tambo-v1.js.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.test.d.ts +2 -0
- package/dist/v1/hooks/use-tambo-v1.test.d.ts.map +1 -0
- package/dist/v1/hooks/use-tambo-v1.test.js +150 -0
- package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -0
- package/dist/v1/index.d.ts +54 -16
- package/dist/v1/index.d.ts.map +1 -1
- package/dist/v1/index.js +85 -26
- package/dist/v1/index.js.map +1 -1
- package/dist/v1/providers/tambo-v1-provider.d.ts +91 -0
- package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-provider.js +110 -0
- package/dist/v1/providers/tambo-v1-provider.js.map +1 -0
- package/dist/v1/providers/tambo-v1-provider.test.d.ts +2 -0
- package/dist/v1/providers/tambo-v1-provider.test.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-provider.test.js +123 -0
- package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.d.ts +136 -0
- package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.js +230 -0
- package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.d.ts +2 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.d.ts.map +1 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.js +85 -0
- package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -0
- package/dist/v1/types/component.d.ts +5 -2
- package/dist/v1/types/component.d.ts.map +1 -1
- package/dist/v1/types/component.js +5 -2
- package/dist/v1/types/component.js.map +1 -1
- package/dist/v1/types/event.d.ts +21 -12
- package/dist/v1/types/event.d.ts.map +1 -1
- package/dist/v1/types/event.js +46 -1
- package/dist/v1/types/event.js.map +1 -1
- package/dist/v1/types/event.test.d.ts +2 -0
- package/dist/v1/types/event.test.d.ts.map +1 -0
- package/dist/v1/types/event.test.js +70 -0
- package/dist/v1/types/event.test.js.map +1 -0
- package/dist/v1/types/message.d.ts +4 -8
- package/dist/v1/types/message.d.ts.map +1 -1
- package/dist/v1/types/message.js +1 -1
- package/dist/v1/types/message.js.map +1 -1
- package/dist/v1/types/thread.d.ts +1 -3
- package/dist/v1/types/thread.d.ts.map +1 -1
- package/dist/v1/types/thread.js +1 -1
- package/dist/v1/types/thread.js.map +1 -1
- package/dist/v1/utils/event-accumulator.d.ts +100 -0
- package/dist/v1/utils/event-accumulator.d.ts.map +1 -0
- package/dist/v1/utils/event-accumulator.js +715 -0
- package/dist/v1/utils/event-accumulator.js.map +1 -0
- package/dist/v1/utils/event-accumulator.test.d.ts +2 -0
- package/dist/v1/utils/event-accumulator.test.d.ts.map +1 -0
- package/dist/v1/utils/event-accumulator.test.js +1010 -0
- package/dist/v1/utils/event-accumulator.test.js.map +1 -0
- package/dist/v1/utils/json-patch.d.ts +18 -0
- package/dist/v1/utils/json-patch.d.ts.map +1 -0
- package/dist/v1/utils/json-patch.js +35 -0
- package/dist/v1/utils/json-patch.js.map +1 -0
- package/dist/v1/utils/json-patch.test.d.ts +2 -0
- package/dist/v1/utils/json-patch.test.d.ts.map +1 -0
- package/dist/v1/utils/json-patch.test.js +28 -0
- package/dist/v1/utils/json-patch.test.js.map +1 -0
- package/dist/v1/utils/registry-conversion.d.ts +53 -0
- package/dist/v1/utils/registry-conversion.d.ts.map +1 -0
- package/dist/v1/utils/registry-conversion.js +114 -0
- package/dist/v1/utils/registry-conversion.js.map +1 -0
- package/dist/v1/utils/registry-conversion.test.d.ts +2 -0
- package/dist/v1/utils/registry-conversion.test.d.ts.map +1 -0
- package/dist/v1/utils/registry-conversion.test.js +179 -0
- package/dist/v1/utils/registry-conversion.test.js.map +1 -0
- package/dist/v1/utils/stream-handler.d.ts +45 -0
- package/dist/v1/utils/stream-handler.d.ts.map +1 -0
- package/dist/v1/utils/stream-handler.js +47 -0
- package/dist/v1/utils/stream-handler.js.map +1 -0
- package/dist/v1/utils/stream-handler.test.d.ts +2 -0
- package/dist/v1/utils/stream-handler.test.d.ts.map +1 -0
- package/dist/v1/utils/stream-handler.test.js +74 -0
- package/dist/v1/utils/stream-handler.test.js.map +1 -0
- package/dist/v1/utils/tool-call-tracker.d.ts +41 -0
- package/dist/v1/utils/tool-call-tracker.d.ts.map +1 -0
- package/dist/v1/utils/tool-call-tracker.js +90 -0
- package/dist/v1/utils/tool-call-tracker.js.map +1 -0
- package/dist/v1/utils/tool-executor.d.ts +33 -0
- package/dist/v1/utils/tool-executor.d.ts.map +1 -0
- package/dist/v1/utils/tool-executor.js +103 -0
- package/dist/v1/utils/tool-executor.js.map +1 -0
- package/dist/v1/utils/tool-executor.test.d.ts +2 -0
- package/dist/v1/utils/tool-executor.test.d.ts.map +1 -0
- package/dist/v1/utils/tool-executor.test.js +222 -0
- package/dist/v1/utils/tool-executor.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.d.ts +58 -0
- package/esm/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.js +51 -0
- package/esm/v1/hooks/use-tambo-v1-messages.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.js +132 -0
- package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +96 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.js +223 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js +822 -0
- package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts +61 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.js +53 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +93 -0
- package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts +37 -0
- package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.js +46 -0
- package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.js +78 -0
- package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.d.ts +107 -0
- package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.js +84 -0
- package/esm/v1/hooks/use-tambo-v1.js.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.test.d.ts +2 -0
- package/esm/v1/hooks/use-tambo-v1.test.d.ts.map +1 -0
- package/esm/v1/hooks/use-tambo-v1.test.js +145 -0
- package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -0
- package/esm/v1/index.d.ts +54 -16
- package/esm/v1/index.d.ts.map +1 -1
- package/esm/v1/index.js +64 -27
- package/esm/v1/index.js.map +1 -1
- package/esm/v1/providers/tambo-v1-provider.d.ts +91 -0
- package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-provider.js +74 -0
- package/esm/v1/providers/tambo-v1-provider.js.map +1 -0
- package/esm/v1/providers/tambo-v1-provider.test.d.ts +2 -0
- package/esm/v1/providers/tambo-v1-provider.test.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-provider.test.js +118 -0
- package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.d.ts +136 -0
- package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.js +191 -0
- package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.d.ts +2 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.d.ts.map +1 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.js +80 -0
- package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -0
- package/esm/v1/types/component.d.ts +5 -2
- package/esm/v1/types/component.d.ts.map +1 -1
- package/esm/v1/types/component.js +5 -2
- package/esm/v1/types/component.js.map +1 -1
- package/esm/v1/types/event.d.ts +21 -12
- package/esm/v1/types/event.d.ts.map +1 -1
- package/esm/v1/types/event.js +44 -2
- package/esm/v1/types/event.js.map +1 -1
- package/esm/v1/types/event.test.d.ts +2 -0
- package/esm/v1/types/event.test.d.ts.map +1 -0
- package/esm/v1/types/event.test.js +68 -0
- package/esm/v1/types/event.test.js.map +1 -0
- package/esm/v1/types/message.d.ts +4 -8
- package/esm/v1/types/message.d.ts.map +1 -1
- package/esm/v1/types/message.js +1 -1
- package/esm/v1/types/message.js.map +1 -1
- package/esm/v1/types/thread.d.ts +1 -3
- package/esm/v1/types/thread.d.ts.map +1 -1
- package/esm/v1/types/thread.js +1 -1
- package/esm/v1/types/thread.js.map +1 -1
- package/esm/v1/utils/event-accumulator.d.ts +100 -0
- package/esm/v1/utils/event-accumulator.d.ts.map +1 -0
- package/esm/v1/utils/event-accumulator.js +708 -0
- package/esm/v1/utils/event-accumulator.js.map +1 -0
- package/esm/v1/utils/event-accumulator.test.d.ts +2 -0
- package/esm/v1/utils/event-accumulator.test.d.ts.map +1 -0
- package/esm/v1/utils/event-accumulator.test.js +1008 -0
- package/esm/v1/utils/event-accumulator.test.js.map +1 -0
- package/esm/v1/utils/json-patch.d.ts +18 -0
- package/esm/v1/utils/json-patch.d.ts.map +1 -0
- package/esm/v1/utils/json-patch.js +32 -0
- package/esm/v1/utils/json-patch.js.map +1 -0
- package/esm/v1/utils/json-patch.test.d.ts +2 -0
- package/esm/v1/utils/json-patch.test.d.ts.map +1 -0
- package/esm/v1/utils/json-patch.test.js +26 -0
- package/esm/v1/utils/json-patch.test.js.map +1 -0
- package/esm/v1/utils/registry-conversion.d.ts +53 -0
- package/esm/v1/utils/registry-conversion.d.ts.map +1 -0
- package/esm/v1/utils/registry-conversion.js +108 -0
- package/esm/v1/utils/registry-conversion.js.map +1 -0
- package/esm/v1/utils/registry-conversion.test.d.ts +2 -0
- package/esm/v1/utils/registry-conversion.test.d.ts.map +1 -0
- package/esm/v1/utils/registry-conversion.test.js +177 -0
- package/esm/v1/utils/registry-conversion.test.js.map +1 -0
- package/esm/v1/utils/stream-handler.d.ts +45 -0
- package/esm/v1/utils/stream-handler.d.ts.map +1 -0
- package/esm/v1/utils/stream-handler.js +44 -0
- package/esm/v1/utils/stream-handler.js.map +1 -0
- package/esm/v1/utils/stream-handler.test.d.ts +2 -0
- package/esm/v1/utils/stream-handler.test.d.ts.map +1 -0
- package/esm/v1/utils/stream-handler.test.js +72 -0
- package/esm/v1/utils/stream-handler.test.js.map +1 -0
- package/esm/v1/utils/tool-call-tracker.d.ts +41 -0
- package/esm/v1/utils/tool-call-tracker.d.ts.map +1 -0
- package/esm/v1/utils/tool-call-tracker.js +86 -0
- package/esm/v1/utils/tool-call-tracker.js.map +1 -0
- package/esm/v1/utils/tool-executor.d.ts +33 -0
- package/esm/v1/utils/tool-executor.d.ts.map +1 -0
- package/esm/v1/utils/tool-executor.js +99 -0
- package/esm/v1/utils/tool-executor.js.map +1 -0
- package/esm/v1/utils/tool-executor.test.d.ts +2 -0
- package/esm/v1/utils/tool-executor.test.d.ts.map +1 -0
- package/esm/v1/utils/tool-executor.test.js +220 -0
- package/esm/v1/utils/tool-executor.test.js.map +1 -0
- package/package.json +7 -6
- package/dist/v1/types/tool.d.ts +0 -52
- package/dist/v1/types/tool.d.ts.map +0 -1
- package/dist/v1/types/tool.js +0 -11
- package/dist/v1/types/tool.js.map +0 -1
- package/esm/v1/types/tool.d.ts +0 -52
- package/esm/v1/types/tool.d.ts.map +0 -1
- package/esm/v1/types/tool.js +0 -10
- package/esm/v1/types/tool.js.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type TamboAI from "@tambo-ai/typescript-sdk";
|
|
2
|
+
import { type TamboRegistryContext as TamboRegistryContextType } from "../../providers/tambo-registry-provider";
|
|
3
|
+
import { useStreamDispatch, type ThreadManagement } from "../providers/tambo-v1-stream-context";
|
|
4
|
+
import type { StreamingState } from "../types/thread";
|
|
5
|
+
import type { TamboV1Message } from "../types/message";
|
|
6
|
+
import type { ThreadState } from "../utils/event-accumulator";
|
|
7
|
+
/**
|
|
8
|
+
* Return type for useTamboV1 hook
|
|
9
|
+
*/
|
|
10
|
+
export interface UseTamboV1Return {
|
|
11
|
+
/**
|
|
12
|
+
* The Tambo API client instance
|
|
13
|
+
*/
|
|
14
|
+
client: TamboAI;
|
|
15
|
+
/**
|
|
16
|
+
* Current thread state for the given threadId, or undefined if not loaded
|
|
17
|
+
*/
|
|
18
|
+
thread: ThreadState | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Messages in the current thread
|
|
21
|
+
*/
|
|
22
|
+
messages: TamboV1Message[];
|
|
23
|
+
/**
|
|
24
|
+
* Current streaming state
|
|
25
|
+
*/
|
|
26
|
+
streamingState: StreamingState;
|
|
27
|
+
/**
|
|
28
|
+
* Whether the thread is currently streaming a response
|
|
29
|
+
*/
|
|
30
|
+
isStreaming: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Whether the thread is waiting for the AI to start responding
|
|
33
|
+
*/
|
|
34
|
+
isWaiting: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the thread is idle (not streaming or waiting)
|
|
37
|
+
*/
|
|
38
|
+
isIdle: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Register a component with the registry
|
|
41
|
+
*/
|
|
42
|
+
registerComponent: TamboRegistryContextType["registerComponent"];
|
|
43
|
+
/**
|
|
44
|
+
* Register a tool with the registry
|
|
45
|
+
*/
|
|
46
|
+
registerTool: TamboRegistryContextType["registerTool"];
|
|
47
|
+
/**
|
|
48
|
+
* Register multiple tools with the registry
|
|
49
|
+
*/
|
|
50
|
+
registerTools: TamboRegistryContextType["registerTools"];
|
|
51
|
+
/**
|
|
52
|
+
* The component registry (Map of name -> component definition)
|
|
53
|
+
*/
|
|
54
|
+
componentList: TamboRegistryContextType["componentList"];
|
|
55
|
+
/**
|
|
56
|
+
* The tool registry (Map of name -> tool definition)
|
|
57
|
+
*/
|
|
58
|
+
toolRegistry: TamboRegistryContextType["toolRegistry"];
|
|
59
|
+
/**
|
|
60
|
+
* Current thread ID (may be null if no thread is active)
|
|
61
|
+
*/
|
|
62
|
+
currentThreadId: string | null;
|
|
63
|
+
/**
|
|
64
|
+
* Initialize a new thread in the stream context
|
|
65
|
+
*/
|
|
66
|
+
initThread: ThreadManagement["initThread"];
|
|
67
|
+
/**
|
|
68
|
+
* Switch the current active thread
|
|
69
|
+
*/
|
|
70
|
+
switchThread: ThreadManagement["switchThread"];
|
|
71
|
+
/**
|
|
72
|
+
* Start a new thread (generates a temporary ID)
|
|
73
|
+
*/
|
|
74
|
+
startNewThread: ThreadManagement["startNewThread"];
|
|
75
|
+
/**
|
|
76
|
+
* Dispatch function for stream events (advanced usage)
|
|
77
|
+
*/
|
|
78
|
+
dispatch: ReturnType<typeof useStreamDispatch>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Main hook for accessing Tambo v1 functionality.
|
|
82
|
+
*
|
|
83
|
+
* Combines thread state, streaming status, registry, and client
|
|
84
|
+
* into a single convenient hook.
|
|
85
|
+
* @param threadId - Optional thread ID to get state for
|
|
86
|
+
* @returns Combined v1 context with thread state and utilities
|
|
87
|
+
* @example
|
|
88
|
+
* ```tsx
|
|
89
|
+
* function ChatInterface() {
|
|
90
|
+
* const {
|
|
91
|
+
* thread,
|
|
92
|
+
* messages,
|
|
93
|
+
* isStreaming,
|
|
94
|
+
* registerComponent,
|
|
95
|
+
* } = useTamboV1('thread_123');
|
|
96
|
+
*
|
|
97
|
+
* return (
|
|
98
|
+
* <div>
|
|
99
|
+
* {messages.map(msg => <Message key={msg.id} message={msg} />)}
|
|
100
|
+
* {isStreaming && <LoadingIndicator />}
|
|
101
|
+
* </div>
|
|
102
|
+
* );
|
|
103
|
+
* }
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function useTamboV1(threadId?: string): UseTamboV1Return;
|
|
107
|
+
//# sourceMappingURL=use-tambo-v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tambo-v1.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAEL,KAAK,oBAAoB,IAAI,wBAAwB,EACtD,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,iBAAiB,EAEjB,KAAK,gBAAgB,EACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,cAAc,EAAE,CAAC;IAE3B;;OAEG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,iBAAiB,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;IAEjE;;OAEG;IACH,YAAY,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAEvD;;OAEG;IACH,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IAEzD;;OAEG;IACH,aAAa,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IAEzD;;OAEG;IACH,YAAY,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAEvD;;OAEG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAE3C;;OAEG;IACH,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAE/C;;OAEG;IACH,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgD9D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useTamboV1 = useTamboV1;
|
|
5
|
+
/**
|
|
6
|
+
* useTamboV1 - Main Hook for v1 API
|
|
7
|
+
*
|
|
8
|
+
* Combines all v1 contexts into a single hook for convenient access
|
|
9
|
+
* to thread state, streaming status, registry, and client.
|
|
10
|
+
*/
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const tambo_client_provider_1 = require("../../providers/tambo-client-provider");
|
|
13
|
+
const tambo_registry_provider_1 = require("../../providers/tambo-registry-provider");
|
|
14
|
+
const tambo_v1_stream_context_1 = require("../providers/tambo-v1-stream-context");
|
|
15
|
+
/**
|
|
16
|
+
* Main hook for accessing Tambo v1 functionality.
|
|
17
|
+
*
|
|
18
|
+
* Combines thread state, streaming status, registry, and client
|
|
19
|
+
* into a single convenient hook.
|
|
20
|
+
* @param threadId - Optional thread ID to get state for
|
|
21
|
+
* @returns Combined v1 context with thread state and utilities
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* function ChatInterface() {
|
|
25
|
+
* const {
|
|
26
|
+
* thread,
|
|
27
|
+
* messages,
|
|
28
|
+
* isStreaming,
|
|
29
|
+
* registerComponent,
|
|
30
|
+
* } = useTamboV1('thread_123');
|
|
31
|
+
*
|
|
32
|
+
* return (
|
|
33
|
+
* <div>
|
|
34
|
+
* {messages.map(msg => <Message key={msg.id} message={msg} />)}
|
|
35
|
+
* {isStreaming && <LoadingIndicator />}
|
|
36
|
+
* </div>
|
|
37
|
+
* );
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function useTamboV1(threadId) {
|
|
42
|
+
const client = (0, tambo_client_provider_1.useTamboClient)();
|
|
43
|
+
const streamState = (0, tambo_v1_stream_context_1.useStreamState)();
|
|
44
|
+
const dispatch = (0, tambo_v1_stream_context_1.useStreamDispatch)();
|
|
45
|
+
const registry = (0, react_1.useContext)(tambo_registry_provider_1.TamboRegistryContext);
|
|
46
|
+
const threadManagement = (0, tambo_v1_stream_context_1.useThreadManagement)();
|
|
47
|
+
// Get thread state for the given threadId (or current thread if not specified)
|
|
48
|
+
const effectiveThreadId = threadId ?? streamState.currentThreadId;
|
|
49
|
+
const threadState = effectiveThreadId
|
|
50
|
+
? streamState.threadMap[effectiveThreadId]
|
|
51
|
+
: undefined;
|
|
52
|
+
// Memoize the return object to prevent unnecessary re-renders
|
|
53
|
+
return (0, react_1.useMemo)(() => {
|
|
54
|
+
const thread = threadState;
|
|
55
|
+
const messages = thread?.thread.messages ?? [];
|
|
56
|
+
const streamingState = thread?.streaming ?? {
|
|
57
|
+
status: "idle",
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
client,
|
|
61
|
+
thread,
|
|
62
|
+
messages,
|
|
63
|
+
streamingState,
|
|
64
|
+
isStreaming: streamingState.status === "streaming",
|
|
65
|
+
isWaiting: streamingState.status === "waiting",
|
|
66
|
+
isIdle: streamingState.status === "idle",
|
|
67
|
+
registerComponent: registry.registerComponent,
|
|
68
|
+
registerTool: registry.registerTool,
|
|
69
|
+
registerTools: registry.registerTools,
|
|
70
|
+
componentList: registry.componentList,
|
|
71
|
+
toolRegistry: registry.toolRegistry,
|
|
72
|
+
currentThreadId: streamState.currentThreadId,
|
|
73
|
+
initThread: threadManagement.initThread,
|
|
74
|
+
switchThread: threadManagement.switchThread,
|
|
75
|
+
startNewThread: threadManagement.startNewThread,
|
|
76
|
+
dispatch,
|
|
77
|
+
};
|
|
78
|
+
}, [
|
|
79
|
+
client,
|
|
80
|
+
threadState,
|
|
81
|
+
registry,
|
|
82
|
+
streamState.currentThreadId,
|
|
83
|
+
threadManagement,
|
|
84
|
+
dispatch,
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=use-tambo-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tambo-v1.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AA8Ib,gCAgDC;AA5LD;;;;;GAKG;AAEH,iCAA4C;AAE5C,iFAAuE;AACvE,qFAGiD;AACjD,kFAK8C;AA+F9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,UAAU,CAAC,QAAiB;IAC1C,MAAM,MAAM,GAAG,IAAA,sCAAc,GAAE,CAAC;IAChC,MAAM,WAAW,GAAG,IAAA,wCAAc,GAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAA,2CAAiB,GAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAC,8CAAoB,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,IAAA,6CAAmB,GAAE,CAAC;IAE/C,+EAA+E;IAC/E,MAAM,iBAAiB,GAAG,QAAQ,IAAI,WAAW,CAAC,eAAe,CAAC;IAClE,MAAM,WAAW,GAAG,iBAAiB;QACnC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,iBAAiB,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAC;IAEd,8DAA8D;IAC9D,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,WAAW,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAmB,MAAM,EAAE,SAAS,IAAI;YAC1D,MAAM,EAAE,MAAe;SACxB,CAAC;QAEF,OAAO;YACL,MAAM;YACN,MAAM;YACN,QAAQ;YACR,cAAc;YACd,WAAW,EAAE,cAAc,CAAC,MAAM,KAAK,WAAW;YAClD,SAAS,EAAE,cAAc,CAAC,MAAM,KAAK,SAAS;YAC9C,MAAM,EAAE,cAAc,CAAC,MAAM,KAAK,MAAM;YACxC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;YAC7C,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,YAAY,EAAE,gBAAgB,CAAC,YAAY;YAC3C,cAAc,EAAE,gBAAgB,CAAC,cAAc;YAC/C,QAAQ;SACT,CAAC;IACJ,CAAC,EAAE;QACD,MAAM;QACN,WAAW;QACX,QAAQ;QACR,WAAW,CAAC,eAAe;QAC3B,gBAAgB;QAChB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC","sourcesContent":["\"use client\";\n\n/**\n * useTamboV1 - Main Hook for v1 API\n *\n * Combines all v1 contexts into a single hook for convenient access\n * to thread state, streaming status, registry, and client.\n */\n\nimport { useContext, useMemo } from \"react\";\nimport type TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport {\n useStreamState,\n useStreamDispatch,\n useThreadManagement,\n type ThreadManagement,\n} from \"../providers/tambo-v1-stream-context\";\nimport type { StreamingState } from \"../types/thread\";\nimport type { TamboV1Message } from \"../types/message\";\nimport type { ThreadState } from \"../utils/event-accumulator\";\n\n/**\n * Return type for useTamboV1 hook\n */\nexport interface UseTamboV1Return {\n /**\n * The Tambo API client instance\n */\n client: TamboAI;\n\n /**\n * Current thread state for the given threadId, or undefined if not loaded\n */\n thread: ThreadState | undefined;\n\n /**\n * Messages in the current thread\n */\n messages: TamboV1Message[];\n\n /**\n * Current streaming state\n */\n streamingState: StreamingState;\n\n /**\n * Whether the thread is currently streaming a response\n */\n isStreaming: boolean;\n\n /**\n * Whether the thread is waiting for the AI to start responding\n */\n isWaiting: boolean;\n\n /**\n * Whether the thread is idle (not streaming or waiting)\n */\n isIdle: boolean;\n\n /**\n * Register a component with the registry\n */\n registerComponent: TamboRegistryContextType[\"registerComponent\"];\n\n /**\n * Register a tool with the registry\n */\n registerTool: TamboRegistryContextType[\"registerTool\"];\n\n /**\n * Register multiple tools with the registry\n */\n registerTools: TamboRegistryContextType[\"registerTools\"];\n\n /**\n * The component registry (Map of name -> component definition)\n */\n componentList: TamboRegistryContextType[\"componentList\"];\n\n /**\n * The tool registry (Map of name -> tool definition)\n */\n toolRegistry: TamboRegistryContextType[\"toolRegistry\"];\n\n /**\n * Current thread ID (may be null if no thread is active)\n */\n currentThreadId: string | null;\n\n /**\n * Initialize a new thread in the stream context\n */\n initThread: ThreadManagement[\"initThread\"];\n\n /**\n * Switch the current active thread\n */\n switchThread: ThreadManagement[\"switchThread\"];\n\n /**\n * Start a new thread (generates a temporary ID)\n */\n startNewThread: ThreadManagement[\"startNewThread\"];\n\n /**\n * Dispatch function for stream events (advanced usage)\n */\n dispatch: ReturnType<typeof useStreamDispatch>;\n}\n\n/**\n * Main hook for accessing Tambo v1 functionality.\n *\n * Combines thread state, streaming status, registry, and client\n * into a single convenient hook.\n * @param threadId - Optional thread ID to get state for\n * @returns Combined v1 context with thread state and utilities\n * @example\n * ```tsx\n * function ChatInterface() {\n * const {\n * thread,\n * messages,\n * isStreaming,\n * registerComponent,\n * } = useTamboV1('thread_123');\n *\n * return (\n * <div>\n * {messages.map(msg => <Message key={msg.id} message={msg} />)}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useTamboV1(threadId?: string): UseTamboV1Return {\n const client = useTamboClient();\n const streamState = useStreamState();\n const dispatch = useStreamDispatch();\n const registry = useContext(TamboRegistryContext);\n const threadManagement = useThreadManagement();\n\n // Get thread state for the given threadId (or current thread if not specified)\n const effectiveThreadId = threadId ?? streamState.currentThreadId;\n const threadState = effectiveThreadId\n ? streamState.threadMap[effectiveThreadId]\n : undefined;\n\n // Memoize the return object to prevent unnecessary re-renders\n return useMemo(() => {\n const thread = threadState;\n const messages = thread?.thread.messages ?? [];\n const streamingState: StreamingState = thread?.streaming ?? {\n status: \"idle\" as const,\n };\n\n return {\n client,\n thread,\n messages,\n streamingState,\n isStreaming: streamingState.status === \"streaming\",\n isWaiting: streamingState.status === \"waiting\",\n isIdle: streamingState.status === \"idle\",\n registerComponent: registry.registerComponent,\n registerTool: registry.registerTool,\n registerTools: registry.registerTools,\n componentList: registry.componentList,\n toolRegistry: registry.toolRegistry,\n currentThreadId: streamState.currentThreadId,\n initThread: threadManagement.initThread,\n switchThread: threadManagement.switchThread,\n startNewThread: threadManagement.startNewThread,\n dispatch,\n };\n }, [\n client,\n threadState,\n registry,\n streamState.currentThreadId,\n threadManagement,\n dispatch,\n ]);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tambo-v1.test.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = require("@testing-library/react");
|
|
7
|
+
const react_2 = __importDefault(require("react"));
|
|
8
|
+
const tambo_client_provider_1 = require("../../providers/tambo-client-provider");
|
|
9
|
+
const tambo_registry_provider_1 = require("../../providers/tambo-registry-provider");
|
|
10
|
+
const tambo_v1_stream_context_1 = require("../providers/tambo-v1-stream-context");
|
|
11
|
+
const use_tambo_v1_1 = require("./use-tambo-v1");
|
|
12
|
+
jest.mock("../../providers/tambo-client-provider", () => ({
|
|
13
|
+
useTamboClient: jest.fn(),
|
|
14
|
+
}));
|
|
15
|
+
describe("useTamboV1", () => {
|
|
16
|
+
const mockTamboClient = {
|
|
17
|
+
apiKey: "",
|
|
18
|
+
threads: {},
|
|
19
|
+
};
|
|
20
|
+
const mockRegistry = {
|
|
21
|
+
componentList: {},
|
|
22
|
+
toolRegistry: {},
|
|
23
|
+
componentToolAssociations: {},
|
|
24
|
+
mcpServerInfos: [],
|
|
25
|
+
resources: [],
|
|
26
|
+
resourceSource: null,
|
|
27
|
+
registerComponent: jest.fn(),
|
|
28
|
+
registerTool: jest.fn(),
|
|
29
|
+
registerTools: jest.fn(),
|
|
30
|
+
addToolAssociation: jest.fn(),
|
|
31
|
+
registerMcpServer: jest.fn(),
|
|
32
|
+
registerMcpServers: jest.fn(),
|
|
33
|
+
registerResource: jest.fn(),
|
|
34
|
+
registerResources: jest.fn(),
|
|
35
|
+
registerResourceSource: jest.fn(),
|
|
36
|
+
};
|
|
37
|
+
function TestWrapper({ children }) {
|
|
38
|
+
return (react_2.default.createElement(tambo_registry_provider_1.TamboRegistryContext.Provider, { value: mockRegistry },
|
|
39
|
+
react_2.default.createElement(tambo_v1_stream_context_1.TamboV1StreamProvider, null, children)));
|
|
40
|
+
}
|
|
41
|
+
function TestWrapperWithThreadId({ children, }) {
|
|
42
|
+
return (react_2.default.createElement(tambo_registry_provider_1.TamboRegistryContext.Provider, { value: mockRegistry },
|
|
43
|
+
react_2.default.createElement(tambo_v1_stream_context_1.TamboV1StreamProvider, { threadId: "thread_123" }, children)));
|
|
44
|
+
}
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
jest.mocked(tambo_client_provider_1.useTamboClient).mockReturnValue(mockTamboClient);
|
|
47
|
+
jest.clearAllMocks();
|
|
48
|
+
});
|
|
49
|
+
it("returns client from useTamboClient", () => {
|
|
50
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
51
|
+
wrapper: TestWrapper,
|
|
52
|
+
});
|
|
53
|
+
expect(result.current.client).toBe(mockTamboClient);
|
|
54
|
+
});
|
|
55
|
+
it("returns registry functions", () => {
|
|
56
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
57
|
+
wrapper: TestWrapper,
|
|
58
|
+
});
|
|
59
|
+
expect(result.current.registerComponent).toBe(mockRegistry.registerComponent);
|
|
60
|
+
expect(result.current.registerTool).toBe(mockRegistry.registerTool);
|
|
61
|
+
expect(result.current.registerTools).toBe(mockRegistry.registerTools);
|
|
62
|
+
expect(result.current.componentList).toBe(mockRegistry.componentList);
|
|
63
|
+
expect(result.current.toolRegistry).toBe(mockRegistry.toolRegistry);
|
|
64
|
+
});
|
|
65
|
+
it("returns undefined thread when no threadId provided", () => {
|
|
66
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
67
|
+
wrapper: TestWrapper,
|
|
68
|
+
});
|
|
69
|
+
expect(result.current.thread).toBeUndefined();
|
|
70
|
+
expect(result.current.messages).toEqual([]);
|
|
71
|
+
});
|
|
72
|
+
it("returns thread state when threadId provided", () => {
|
|
73
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)("thread_123"), {
|
|
74
|
+
wrapper: TestWrapperWithThreadId,
|
|
75
|
+
});
|
|
76
|
+
expect(result.current.thread).toBeDefined();
|
|
77
|
+
expect(result.current.thread?.thread.id).toBe("thread_123");
|
|
78
|
+
expect(result.current.messages).toEqual([]);
|
|
79
|
+
});
|
|
80
|
+
it("returns default streaming state when thread not loaded", () => {
|
|
81
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
82
|
+
wrapper: TestWrapper,
|
|
83
|
+
});
|
|
84
|
+
expect(result.current.streamingState).toEqual({ status: "idle" });
|
|
85
|
+
expect(result.current.isIdle).toBe(true);
|
|
86
|
+
expect(result.current.isStreaming).toBe(false);
|
|
87
|
+
expect(result.current.isWaiting).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
it("returns thread streaming state when thread loaded", () => {
|
|
90
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)("thread_123"), {
|
|
91
|
+
wrapper: TestWrapperWithThreadId,
|
|
92
|
+
});
|
|
93
|
+
expect(result.current.streamingState.status).toBe("idle");
|
|
94
|
+
expect(result.current.isIdle).toBe(true);
|
|
95
|
+
expect(result.current.isStreaming).toBe(false);
|
|
96
|
+
expect(result.current.isWaiting).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
it("provides dispatch function for advanced usage", () => {
|
|
99
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
100
|
+
wrapper: TestWrapper,
|
|
101
|
+
});
|
|
102
|
+
expect(typeof result.current.dispatch).toBe("function");
|
|
103
|
+
});
|
|
104
|
+
it("provides thread management functions", () => {
|
|
105
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
106
|
+
wrapper: TestWrapper,
|
|
107
|
+
});
|
|
108
|
+
expect(typeof result.current.initThread).toBe("function");
|
|
109
|
+
expect(typeof result.current.switchThread).toBe("function");
|
|
110
|
+
expect(typeof result.current.startNewThread).toBe("function");
|
|
111
|
+
});
|
|
112
|
+
it("initializes and switches threads", () => {
|
|
113
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
114
|
+
wrapper: TestWrapper,
|
|
115
|
+
});
|
|
116
|
+
// Initially no current thread
|
|
117
|
+
expect(result.current.currentThreadId).toBeNull();
|
|
118
|
+
expect(result.current.thread).toBeUndefined();
|
|
119
|
+
// Initialize a new thread
|
|
120
|
+
(0, react_1.act)(() => {
|
|
121
|
+
result.current.initThread("new_thread_1");
|
|
122
|
+
});
|
|
123
|
+
// Switch to the new thread
|
|
124
|
+
(0, react_1.act)(() => {
|
|
125
|
+
result.current.switchThread("new_thread_1");
|
|
126
|
+
});
|
|
127
|
+
expect(result.current.currentThreadId).toBe("new_thread_1");
|
|
128
|
+
});
|
|
129
|
+
it("starts new thread with generated ID", () => {
|
|
130
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
131
|
+
wrapper: TestWrapper,
|
|
132
|
+
});
|
|
133
|
+
let newThreadId;
|
|
134
|
+
(0, react_1.act)(() => {
|
|
135
|
+
newThreadId = result.current.startNewThread();
|
|
136
|
+
});
|
|
137
|
+
expect(newThreadId).toMatch(/^temp_/);
|
|
138
|
+
expect(result.current.currentThreadId).toBe(newThreadId);
|
|
139
|
+
expect(result.current.thread).toBeDefined();
|
|
140
|
+
});
|
|
141
|
+
it("uses current thread when no threadId argument provided", () => {
|
|
142
|
+
const { result } = (0, react_1.renderHook)(() => (0, use_tambo_v1_1.useTamboV1)(), {
|
|
143
|
+
wrapper: TestWrapperWithThreadId,
|
|
144
|
+
});
|
|
145
|
+
// Should use current thread from context (thread_123)
|
|
146
|
+
expect(result.current.currentThreadId).toBe("thread_123");
|
|
147
|
+
expect(result.current.thread?.thread.id).toBe("thread_123");
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=use-tambo-v1.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tambo-v1.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport React from \"react\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport { TamboV1StreamProvider } from \"../providers/tambo-v1-stream-context\";\nimport { useTamboV1 } from \"./use-tambo-v1\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n}));\n\ndescribe(\"useTamboV1\", () => {\n const mockTamboClient = {\n apiKey: \"\",\n threads: {},\n } as unknown as TamboAI;\n\n const mockRegistry: TamboRegistryContextType = {\n componentList: {},\n toolRegistry: {},\n componentToolAssociations: {},\n mcpServerInfos: [],\n resources: [],\n resourceSource: null,\n registerComponent: jest.fn(),\n registerTool: jest.fn(),\n registerTools: jest.fn(),\n addToolAssociation: jest.fn(),\n registerMcpServer: jest.fn(),\n registerMcpServers: jest.fn(),\n registerResource: jest.fn(),\n registerResources: jest.fn(),\n registerResourceSource: jest.fn(),\n };\n\n function TestWrapper({ children }: { children: React.ReactNode }) {\n return (\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboV1StreamProvider>{children}</TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n );\n }\n\n function TestWrapperWithThreadId({\n children,\n }: {\n children: React.ReactNode;\n }) {\n return (\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboV1StreamProvider threadId=\"thread_123\">\n {children}\n </TamboV1StreamProvider>\n </TamboRegistryContext.Provider>\n );\n }\n\n beforeEach(() => {\n jest.mocked(useTamboClient).mockReturnValue(mockTamboClient);\n jest.clearAllMocks();\n });\n\n it(\"returns client from useTamboClient\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.client).toBe(mockTamboClient);\n });\n\n it(\"returns registry functions\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.registerComponent).toBe(\n mockRegistry.registerComponent,\n );\n expect(result.current.registerTool).toBe(mockRegistry.registerTool);\n expect(result.current.registerTools).toBe(mockRegistry.registerTools);\n expect(result.current.componentList).toBe(mockRegistry.componentList);\n expect(result.current.toolRegistry).toBe(mockRegistry.toolRegistry);\n });\n\n it(\"returns undefined thread when no threadId provided\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.thread).toBeUndefined();\n expect(result.current.messages).toEqual([]);\n });\n\n it(\"returns thread state when threadId provided\", () => {\n const { result } = renderHook(() => useTamboV1(\"thread_123\"), {\n wrapper: TestWrapperWithThreadId,\n });\n\n expect(result.current.thread).toBeDefined();\n expect(result.current.thread?.thread.id).toBe(\"thread_123\");\n expect(result.current.messages).toEqual([]);\n });\n\n it(\"returns default streaming state when thread not loaded\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.streamingState).toEqual({ status: \"idle\" });\n expect(result.current.isIdle).toBe(true);\n expect(result.current.isStreaming).toBe(false);\n expect(result.current.isWaiting).toBe(false);\n });\n\n it(\"returns thread streaming state when thread loaded\", () => {\n const { result } = renderHook(() => useTamboV1(\"thread_123\"), {\n wrapper: TestWrapperWithThreadId,\n });\n\n expect(result.current.streamingState.status).toBe(\"idle\");\n expect(result.current.isIdle).toBe(true);\n expect(result.current.isStreaming).toBe(false);\n expect(result.current.isWaiting).toBe(false);\n });\n\n it(\"provides dispatch function for advanced usage\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(typeof result.current.dispatch).toBe(\"function\");\n });\n\n it(\"provides thread management functions\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n expect(typeof result.current.initThread).toBe(\"function\");\n expect(typeof result.current.switchThread).toBe(\"function\");\n expect(typeof result.current.startNewThread).toBe(\"function\");\n });\n\n it(\"initializes and switches threads\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n // Initially no current thread\n expect(result.current.currentThreadId).toBeNull();\n expect(result.current.thread).toBeUndefined();\n\n // Initialize a new thread\n act(() => {\n result.current.initThread(\"new_thread_1\");\n });\n\n // Switch to the new thread\n act(() => {\n result.current.switchThread(\"new_thread_1\");\n });\n\n expect(result.current.currentThreadId).toBe(\"new_thread_1\");\n });\n\n it(\"starts new thread with generated ID\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapper,\n });\n\n let newThreadId: string;\n act(() => {\n newThreadId = result.current.startNewThread();\n });\n\n expect(newThreadId!).toMatch(/^temp_/);\n expect(result.current.currentThreadId).toBe(newThreadId!);\n expect(result.current.thread).toBeDefined();\n });\n\n it(\"uses current thread when no threadId argument provided\", () => {\n const { result } = renderHook(() => useTamboV1(), {\n wrapper: TestWrapperWithThreadId,\n });\n\n // Should use current thread from context (thread_123)\n expect(result.current.currentThreadId).toBe(\"thread_123\");\n expect(result.current.thread?.thread.id).toBe(\"thread_123\");\n });\n});\n"]}
|
package/dist/v1/index.d.ts
CHANGED
|
@@ -1,35 +1,73 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `@tambo-ai/react/v1` - React SDK for Tambo v1 API
|
|
3
3
|
*
|
|
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
|
-
*
|
|
8
|
-
* - Custom events: import from '@tambo-ai/react/v1/types/event'
|
|
9
|
-
* - Thread state: import from '@tambo-ai/react/v1/types/thread'
|
|
10
|
-
* - Messages: import from '@tambo-ai/react/v1/types/message'
|
|
11
|
-
* - Components: import from '@tambo-ai/react/v1/types/component'
|
|
12
|
-
* - Tools: import from '@tambo-ai/react/v1/types/tool'
|
|
7
|
+
* ## Quick Start
|
|
13
8
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
9
|
+
* ```tsx
|
|
10
|
+
* import {
|
|
11
|
+
* TamboV1Provider,
|
|
12
|
+
* useTamboV1,
|
|
13
|
+
* useTamboV1SendMessage,
|
|
14
|
+
* } from '@tambo-ai/react/v1';
|
|
19
15
|
*
|
|
20
16
|
* function App() {
|
|
21
17
|
* return (
|
|
22
|
-
* <TamboV1Provider
|
|
18
|
+
* <TamboV1Provider
|
|
19
|
+
* apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
|
|
20
|
+
* components={[WeatherCard]}
|
|
21
|
+
* tools={[searchTool]}
|
|
22
|
+
* >
|
|
23
23
|
* <ChatInterface />
|
|
24
24
|
* </TamboV1Provider>
|
|
25
25
|
* );
|
|
26
26
|
* }
|
|
27
27
|
*
|
|
28
28
|
* function ChatInterface() {
|
|
29
|
-
* const
|
|
30
|
-
*
|
|
29
|
+
* const [threadId, setThreadId] = useState<string>();
|
|
30
|
+
* const { messages, isStreaming } = useTamboV1(threadId);
|
|
31
|
+
* const sendMessage = useTamboV1SendMessage(threadId);
|
|
32
|
+
*
|
|
33
|
+
* const handleSend = async (text: string) => {
|
|
34
|
+
* const result = await sendMessage.mutateAsync({
|
|
35
|
+
* message: { role: 'user', content: [{ type: 'text', text }] },
|
|
36
|
+
* });
|
|
37
|
+
* if (!threadId) setThreadId(result.threadId);
|
|
38
|
+
* };
|
|
39
|
+
*
|
|
40
|
+
* return (
|
|
41
|
+
* <div>
|
|
42
|
+
* {messages.map(msg => <Message key={msg.id} message={msg} />)}
|
|
43
|
+
* {isStreaming && <LoadingIndicator />}
|
|
44
|
+
* <MessageInput onSend={handleSend} />
|
|
45
|
+
* </div>
|
|
46
|
+
* );
|
|
31
47
|
* }
|
|
32
48
|
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## Type Imports
|
|
51
|
+
*
|
|
52
|
+
* Types are imported directly from specific files:
|
|
53
|
+
* - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`
|
|
54
|
+
* - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`
|
|
55
|
+
* - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`
|
|
56
|
+
*
|
|
57
|
+
* SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`
|
|
58
|
+
* AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`
|
|
33
59
|
*/
|
|
34
|
-
export {};
|
|
60
|
+
export { TamboV1Provider, type TamboV1ProviderProps, } from "./providers/tambo-v1-provider";
|
|
61
|
+
export { TamboV1StreamProvider, useStreamState, useStreamDispatch, useThreadManagement, type ThreadManagement, } from "./providers/tambo-v1-stream-context";
|
|
62
|
+
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";
|
|
66
|
+
export { useTamboV1Thread } from "./hooks/use-tambo-v1-thread";
|
|
67
|
+
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";
|
|
35
73
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/v1/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
package/dist/v1/index.js
CHANGED
|
@@ -1,47 +1,106 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* `@tambo-ai/react/v1` - React SDK for Tambo v1 API
|
|
4
4
|
*
|
|
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
|
-
*
|
|
9
|
-
* - Custom events: import from '@tambo-ai/react/v1/types/event'
|
|
10
|
-
* - Thread state: import from '@tambo-ai/react/v1/types/thread'
|
|
11
|
-
* - Messages: import from '@tambo-ai/react/v1/types/message'
|
|
12
|
-
* - Components: import from '@tambo-ai/react/v1/types/component'
|
|
13
|
-
* - Tools: import from '@tambo-ai/react/v1/types/tool'
|
|
8
|
+
* ## Quick Start
|
|
14
9
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import {
|
|
12
|
+
* TamboV1Provider,
|
|
13
|
+
* useTamboV1,
|
|
14
|
+
* useTamboV1SendMessage,
|
|
15
|
+
* } from '@tambo-ai/react/v1';
|
|
20
16
|
*
|
|
21
17
|
* function App() {
|
|
22
18
|
* return (
|
|
23
|
-
* <TamboV1Provider
|
|
19
|
+
* <TamboV1Provider
|
|
20
|
+
* apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
|
|
21
|
+
* components={[WeatherCard]}
|
|
22
|
+
* tools={[searchTool]}
|
|
23
|
+
* >
|
|
24
24
|
* <ChatInterface />
|
|
25
25
|
* </TamboV1Provider>
|
|
26
26
|
* );
|
|
27
27
|
* }
|
|
28
28
|
*
|
|
29
29
|
* function ChatInterface() {
|
|
30
|
-
* const
|
|
31
|
-
*
|
|
30
|
+
* const [threadId, setThreadId] = useState<string>();
|
|
31
|
+
* const { messages, isStreaming } = useTamboV1(threadId);
|
|
32
|
+
* const sendMessage = useTamboV1SendMessage(threadId);
|
|
33
|
+
*
|
|
34
|
+
* const handleSend = async (text: string) => {
|
|
35
|
+
* const result = await sendMessage.mutateAsync({
|
|
36
|
+
* message: { role: 'user', content: [{ type: 'text', text }] },
|
|
37
|
+
* });
|
|
38
|
+
* if (!threadId) setThreadId(result.threadId);
|
|
39
|
+
* };
|
|
40
|
+
*
|
|
41
|
+
* return (
|
|
42
|
+
* <div>
|
|
43
|
+
* {messages.map(msg => <Message key={msg.id} message={msg} />)}
|
|
44
|
+
* {isStreaming && <LoadingIndicator />}
|
|
45
|
+
* <MessageInput onSend={handleSend} />
|
|
46
|
+
* </div>
|
|
47
|
+
* );
|
|
32
48
|
* }
|
|
33
49
|
* ```
|
|
50
|
+
*
|
|
51
|
+
* ## Type Imports
|
|
52
|
+
*
|
|
53
|
+
* Types are imported directly from specific files:
|
|
54
|
+
* - Thread state: `import type { TamboV1Thread } from '@tambo-ai/react/v1/types/thread'`
|
|
55
|
+
* - Messages: `import type { TamboV1Message } from '@tambo-ai/react/v1/types/message'`
|
|
56
|
+
* - Custom events: `import type { ComponentStartEvent } from '@tambo-ai/react/v1/types/event'`
|
|
57
|
+
*
|
|
58
|
+
* SDK types: `import type { ... } from '@tambo-ai/typescript-sdk'`
|
|
59
|
+
* AG-UI events: `import { EventType, type BaseEvent } from '@ag-ui/core'`
|
|
34
60
|
*/
|
|
35
61
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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;
|
|
63
|
+
// =============================================================================
|
|
64
|
+
// Providers
|
|
65
|
+
// =============================================================================
|
|
66
|
+
var tambo_v1_provider_1 = require("./providers/tambo-v1-provider");
|
|
67
|
+
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; } });
|
|
73
|
+
// Re-export registry provider from beta SDK (works with v1)
|
|
74
|
+
var tambo_registry_provider_1 = require("../providers/tambo-registry-provider");
|
|
75
|
+
Object.defineProperty(exports, "TamboRegistryProvider", { enumerable: true, get: function () { return tambo_registry_provider_1.TamboRegistryProvider; } });
|
|
76
|
+
// =============================================================================
|
|
77
|
+
// Hooks
|
|
78
|
+
// =============================================================================
|
|
79
|
+
var use_tambo_v1_1 = require("./hooks/use-tambo-v1");
|
|
80
|
+
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; } });
|
|
85
|
+
var use_tambo_v1_thread_1 = require("./hooks/use-tambo-v1-thread");
|
|
86
|
+
Object.defineProperty(exports, "useTamboV1Thread", { enumerable: true, get: function () { return use_tambo_v1_thread_1.useTamboV1Thread; } });
|
|
87
|
+
var use_tambo_v1_thread_list_1 = require("./hooks/use-tambo-v1-thread-list");
|
|
88
|
+
Object.defineProperty(exports, "useTamboV1ThreadList", { enumerable: true, get: function () { return use_tambo_v1_thread_list_1.useTamboV1ThreadList; } });
|
|
89
|
+
// =============================================================================
|
|
90
|
+
// Utilities
|
|
91
|
+
// =============================================================================
|
|
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; } });
|
|
47
106
|
//# sourceMappingURL=index.js.map
|