@tambo-ai/react 1.2.0 → 1.2.2
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/hoc/with-tambo-interactable.d.ts.map +1 -1
- package/dist/hoc/with-tambo-interactable.js +11 -2
- package/dist/hoc/with-tambo-interactable.js.map +1 -1
- package/dist/hoc/with-tambo-interactable.test.js +14 -0
- package/dist/hoc/with-tambo-interactable.test.js.map +1 -1
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js +2 -0
- package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.d.ts +3 -2
- package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/dist/providers/tambo-interactable-provider.js +49 -13
- package/dist/providers/tambo-interactable-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.test.js +165 -1
- package/dist/providers/tambo-interactable-provider.test.js.map +1 -1
- package/dist/providers/tambo-registry-provider.d.ts +1 -0
- package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
- package/dist/providers/tambo-registry-provider.js +19 -0
- package/dist/providers/tambo-registry-provider.js.map +1 -1
- package/dist/providers/tambo-registry-provider.test.js +47 -0
- package/dist/providers/tambo-registry-provider.test.js.map +1 -1
- package/dist/v1/__tests__/v1-interactables.test.js +5 -0
- package/dist/v1/__tests__/v1-interactables.test.js.map +1 -1
- package/dist/v1/components/v1-component-renderer.test.js +1 -0
- package/dist/v1/components/v1-component-renderer.test.js.map +1 -1
- package/dist/v1/hooks/use-tambo-v1.test.js +1 -0
- package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/dist/v1/providers/tambo-v1-stub-provider.js +1 -0
- package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/esm/hoc/with-tambo-interactable.d.ts.map +1 -1
- package/esm/hoc/with-tambo-interactable.js +11 -2
- package/esm/hoc/with-tambo-interactable.js.map +1 -1
- package/esm/hoc/with-tambo-interactable.test.js +14 -0
- package/esm/hoc/with-tambo-interactable.test.js.map +1 -1
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js +2 -0
- package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.d.ts +3 -2
- package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
- package/esm/providers/tambo-interactable-provider.js +49 -13
- package/esm/providers/tambo-interactable-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.test.js +165 -1
- package/esm/providers/tambo-interactable-provider.test.js.map +1 -1
- package/esm/providers/tambo-registry-provider.d.ts +1 -0
- package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
- package/esm/providers/tambo-registry-provider.js +19 -0
- package/esm/providers/tambo-registry-provider.js.map +1 -1
- package/esm/providers/tambo-registry-provider.test.js +47 -0
- package/esm/providers/tambo-registry-provider.test.js.map +1 -1
- package/esm/v1/__tests__/v1-interactables.test.js +5 -0
- package/esm/v1/__tests__/v1-interactables.test.js.map +1 -1
- package/esm/v1/components/v1-component-renderer.test.js +1 -0
- package/esm/v1/components/v1-component-renderer.test.js.map +1 -1
- package/esm/v1/hooks/use-tambo-v1.test.js +1 -0
- package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
- package/esm/v1/providers/tambo-v1-stub-provider.js +1 -0
- package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +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 { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport React, { useReducer } from \"react\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport { TamboStreamProvider } from \"../providers/tambo-v1-stream-context\";\nimport {\n streamReducer,\n type StreamState,\n type StreamAction,\n} from \"@tambo-ai/client\";\nimport type {\n TamboComponentContent,\n TamboToolUseContent,\n} from \"../types/message\";\nimport { useTambo } from \"./use-tambo-v1\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n}));\n\njest.mock(\"../providers/tambo-v1-provider\", () => {\n const actual = jest.requireActual(\"../providers/tambo-v1-provider\");\n return {\n ...actual,\n useTamboConfig: () => ({ userKey: undefined }),\n };\n});\n\njest.mock(\"./use-tambo-v1-auth-state\", () => ({\n useTamboAuthState: () => ({\n status: \"identified\",\n source: \"userKey\",\n }),\n}));\n\nimport { useTamboQueryClient } from \"../../providers/tambo-client-provider\";\n\ndescribe(\"useTambo\", () => {\n let queryClient: QueryClient;\n\n const mockTamboClient = {\n apiKey: \"\",\n threads: {\n messages: {\n list: jest.fn().mockResolvedValue({ messages: [], hasMore: false }),\n },\n runs: {\n delete: jest.fn().mockResolvedValue({}),\n },\n },\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 <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n function createWrapperWithState(\n state: StreamState,\n registry: TamboRegistryContextType = mockRegistry,\n ) {\n const noopDispatch: React.Dispatch<StreamAction> = () => {};\n return function WrapperWithState({\n children,\n }: {\n children: React.ReactNode;\n }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={registry}>\n <TamboStreamProvider state={state} dispatch={noopDispatch}>\n {children}\n </TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n };\n }\n\n // Wrapper that uses the real reducer so state updates properly\n function createWrapperWithRealReducer(\n initialState: StreamState,\n stateRef?: React.MutableRefObject<StreamState | undefined>,\n ) {\n return function WrapperWithRealReducer({\n children,\n }: {\n children: React.ReactNode;\n }) {\n const [state, dispatch] = useReducer(streamReducer, initialState);\n if (stateRef) {\n stateRef.current = state;\n }\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboStreamProvider state={state} dispatch={dispatch}>\n {children}\n </TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n };\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboClient);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.clearAllMocks();\n delete (mockTamboClient.threads as any).update;\n });\n\n it(\"returns client from useTamboClient\", () => {\n const { result } = renderHook(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.client).toBe(mockTamboClient);\n });\n\n it(\"returns registry functions\", () => {\n const { result } = renderHook(() => useTambo(), {\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 placeholder thread when no threadId provided\", () => {\n const { result } = renderHook(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Default state has placeholder thread for optimistic UI\n expect(result.current.thread).toBeDefined();\n expect(result.current.thread?.thread.id).toBe(\"placeholder\");\n expect(result.current.messages).toEqual([]);\n });\n\n it(\"returns thread state when switched to a thread\", () => {\n const { result } = renderHook(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initialize and switch to thread\n act(() => {\n result.current.initThread(\"thread_123\");\n result.current.switchThread(\"thread_123\");\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(() => useTambo(), {\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initialize and switch to thread\n act(() => {\n result.current.initThread(\"thread_123\");\n result.current.switchThread(\"thread_123\");\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(() => useTambo(), {\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(() => useTambo(), {\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initially has placeholder thread for optimistic UI\n expect(result.current.currentThreadId).toBe(\"placeholder\");\n expect(result.current.thread).toBeDefined();\n expect(result.current.thread?.thread.id).toBe(\"placeholder\");\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n let newThreadId: string;\n act(() => {\n newThreadId = result.current.startNewThread();\n });\n\n expect(newThreadId!).toBe(\"placeholder\");\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initialize and switch to a thread\n act(() => {\n result.current.initThread(\"thread_123\");\n result.current.switchThread(\"thread_123\");\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 describe(\"component content transformation\", () => {\n const createComponentContent = (\n id: string,\n name: string,\n props: Record<string, unknown>,\n ): TamboComponentContent => ({\n type: \"component\",\n id,\n name,\n props,\n streamingState: \"done\",\n });\n\n it(\"adds renderedComponent to component content blocks\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hello\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n expect(result.current.messages).toHaveLength(1);\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"preserves non-component content blocks unchanged\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"Hello world\" },\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hi\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n expect(result.current.messages).toHaveLength(1);\n const textContent = result.current.messages[0].content[0];\n expect(textContent.type).toBe(\"text\");\n expect(textContent).toEqual({ type: \"text\", text: \"Hello world\" });\n\n const componentContent = result.current.messages[0].content[1];\n expect(componentContent.type).toBe(\"component\");\n expect(\n (componentContent as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"caches rendered components and returns same reference when props unchanged\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hello\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result, rerender } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const firstRender = (\n result.current.messages[0].content[0] as TamboComponentContent\n ).renderedComponent;\n\n // Re-render with same state\n rerender();\n\n const secondRender = (\n result.current.messages[0].content[0] as TamboComponentContent\n ).renderedComponent;\n\n // Should return the same cached element reference\n expect(secondRender).toBe(firstRender);\n });\n\n it(\"handles empty props on components\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {}),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"handles undefined props on components\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"TestComponent\",\n props: undefined,\n streamingState: \"done\",\n } as TamboComponentContent,\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"handles multiple component content blocks in same message\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"ComponentA\", {\n value: 1,\n }),\n createComponentContent(\"comp_2\", \"ComponentB\", {\n value: 2,\n }),\n createComponentContent(\"comp_3\", \"ComponentC\", {\n value: 3,\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n expect(result.current.messages[0].content).toHaveLength(3);\n result.current.messages[0].content.forEach((content) => {\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n });\n\n it(\"uses currentThreadId from stream state\", () => {\n const state: StreamState = {\n threadMap: {\n placeholder: {\n thread: {\n id: \"placeholder\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hello\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"placeholder\",\n };\n\n // No explicit threadId - uses currentThreadId from state\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n // Component should render using the placeholder thread\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n });\n\n describe(\"tool_use content transformation\", () => {\n it(\"adds computed properties to tool_use content\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: { location: \"NYC\" },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.type).toBe(\"tool_use\");\n expect(content.hasCompleted).toBe(false);\n expect(content.statusMessage).toBe(\"Calling getWeather\");\n expect(content.tamboDisplayProps).toBeDefined();\n });\n\n it(\"sets hasCompleted to true when matching tool_result exists\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: { location: \"NYC\" },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n {\n id: \"msg_2\",\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n toolUseId: \"tool_1\",\n content: [{ type: \"text\", text: \"Sunny\" }],\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.hasCompleted).toBe(true);\n expect(content.statusMessage).toBe(\"Called getWeather\");\n });\n\n it(\"uses _tambo_statusMessage when tool is in progress\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: {\n location: \"NYC\",\n _tambo_statusMessage: \"Fetching weather for NYC...\",\n },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.statusMessage).toBe(\"Fetching weather for NYC...\");\n expect(content.tamboDisplayProps?._tambo_statusMessage).toBe(\n \"Fetching weather for NYC...\",\n );\n });\n\n it(\"uses _tambo_completionStatusMessage when tool is completed\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: {\n location: \"NYC\",\n _tambo_statusMessage: \"Fetching weather...\",\n _tambo_completionStatusMessage: \"Got weather for NYC\",\n },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n {\n id: \"msg_2\",\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n toolUseId: \"tool_1\",\n content: [{ type: \"text\", text: \"Sunny\" }],\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.hasCompleted).toBe(true);\n expect(content.statusMessage).toBe(\"Got weather for NYC\");\n });\n\n it(\"filters _tambo_* properties from input\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: {\n location: \"NYC\",\n units: \"celsius\",\n _tambo_statusMessage: \"Fetching...\",\n _tambo_completionStatusMessage: \"Done\",\n },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n // Input should only have non-_tambo_ properties\n expect(content.input).toEqual({ location: \"NYC\", units: \"celsius\" });\n expect(content.input._tambo_statusMessage).toBeUndefined();\n expect(content.input._tambo_completionStatusMessage).toBeUndefined();\n });\n\n it(\"handles tool_use with empty input\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getCurrentTime\",\n input: {},\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.input).toEqual({});\n expect(content.hasCompleted).toBe(false);\n expect(content.statusMessage).toBe(\"Calling getCurrentTime\");\n });\n\n it(\"handles tool_use with undefined input\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getCurrentTime\",\n input: undefined,\n } as unknown as TamboToolUseContent,\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.input).toEqual({});\n expect(content.hasCompleted).toBe(false);\n });\n\n it(\"handles multiple tool_use blocks with different completion states\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: { location: \"NYC\" },\n },\n {\n type: \"tool_use\",\n id: \"tool_2\",\n name: \"getTime\",\n input: { timezone: \"EST\" },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n {\n id: \"msg_2\",\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n toolUseId: \"tool_1\",\n content: [{ type: \"text\", text: \"Sunny\" }],\n },\n // tool_2 has no result yet\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const tool1 = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n const tool2 = result.current.messages[0]\n .content[1] as TamboToolUseContent;\n\n expect(tool1.hasCompleted).toBe(true);\n expect(tool1.statusMessage).toBe(\"Called getWeather\");\n\n expect(tool2.hasCompleted).toBe(false);\n expect(tool2.statusMessage).toBe(\"Calling getTime\");\n });\n });\n\n describe(\"cancelRun\", () => {\n it(\"sets thread to idle and lastRunCancelled to true when cancelled\", async () => {\n const initialState: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [],\n status: \"streaming\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"streaming\", runId: \"run_456\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n // Before cancel: streaming and lastRunCancelled is false\n expect(result.current.isStreaming).toBe(true);\n expect(result.current.isIdle).toBe(false);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // After cancel: idle and lastRunCancelled is true\n expect(result.current.isStreaming).toBe(false);\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(true);\n\n // Verify API was called to cancel the run\n expect(mockTamboClient.threads.runs.delete).toHaveBeenCalledWith(\n \"run_456\",\n { threadId: \"thread_123\" },\n );\n });\n\n it(\"is a no-op when there is no active run\", async () => {\n const initialState: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" }, // No runId\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n // Idle before\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // Still idle, lastRunCancelled unchanged\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n // API should not have been called\n expect(mockTamboClient.threads.runs.delete).not.toHaveBeenCalled();\n });\n\n it(\"is a no-op when on a placeholder thread\", async () => {\n const initialState: StreamState = {\n threadMap: {\n placeholder: {\n thread: {\n id: \"placeholder\",\n messages: [],\n status: \"streaming\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"streaming\", runId: \"run_123\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"placeholder\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n // Before: streaming on placeholder\n expect(result.current.isStreaming).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // After: state should be unchanged (placeholder threads are skipped)\n expect(result.current.isStreaming).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n // API should not have been called for placeholder threads\n expect(mockTamboClient.threads.runs.delete).not.toHaveBeenCalled();\n });\n\n it(\"still updates local state even if API call fails\", async () => {\n const consoleWarnSpy = jest\n .spyOn(console, \"warn\")\n .mockImplementation(() => {});\n\n // Make the API call fail\n jest\n .mocked(mockTamboClient.threads.runs.delete)\n .mockRejectedValueOnce(new Error(\"Network error\"));\n\n const initialState: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [],\n status: \"streaming\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"streaming\", runId: \"run_456\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // Local state should still be updated (optimistic update)\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(true);\n\n // Warning should have been logged\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n \"Failed to cancel run on server:\",\n expect.any(Error),\n );\n\n consoleWarnSpy.mockRestore();\n });\n });\n\n describe(\"updateThreadName\", () => {\n it(\"updates local thread name and invalidates caches on success\", async () => {\n const mockUpdate = jest.fn().mockResolvedValue({});\n // TypeScript SDK will be updated to include this method\n (mockTamboClient.threads as any).update = mockUpdate;\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n const initialState: StreamState = {\n threadMap: {\n thread_456: {\n thread: {\n id: \"thread_456\",\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n name: \"Old Name\",\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_456\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n await act(async () => {\n await result.current.updateThreadName(\"thread_456\", \"My New Thread\");\n });\n\n expect(mockUpdate).toHaveBeenCalledWith(\"thread_456\", {\n name: \"My New Thread\",\n userKey: undefined,\n });\n\n expect(result.current.thread?.thread.name).toBe(\"My New Thread\");\n const invalidatedKeys = invalidateQueriesSpy.mock.calls\n .map(([arg]) => (arg as any).queryKey)\n .filter(Boolean);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"list\"]);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"thread_456\"]);\n });\n\n it(\"does not create local thread state when thread isn't loaded\", async () => {\n const mockUpdate = jest.fn().mockResolvedValue({});\n // TypeScript SDK will be updated to include this method\n (mockTamboClient.threads as any).update = mockUpdate;\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n // Track the internal StreamState from the real reducer so we can assert we\n // don't create a local thread entry for threads that haven't been loaded.\n const stateRef: React.MutableRefObject<StreamState | undefined> = {\n current: undefined,\n };\n const initialState: StreamState = {\n threadMap: {},\n currentThreadId: \"placeholder\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState, stateRef),\n });\n\n await act(async () => {\n await result.current.updateThreadName(\"thread_789\", \"New Title\");\n });\n\n expect(mockUpdate).toHaveBeenCalledWith(\"thread_789\", {\n name: \"New Title\",\n userKey: undefined,\n });\n const invalidatedKeys = invalidateQueriesSpy.mock.calls\n .map(([arg]) => (arg as any).queryKey)\n .filter(Boolean);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"list\"]);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"thread_789\"]);\n\n expect(stateRef.current?.threadMap.thread_789).toBeUndefined();\n\n act(() => {\n result.current.switchThread(\"thread_789\");\n });\n\n expect(result.current.thread).toBeUndefined();\n });\n\n it(\"propagates errors and does not update local state\", async () => {\n const mockUpdate = jest\n .fn()\n .mockRejectedValue(new Error(\"Network error\"));\n // TypeScript SDK will be updated to include this method\n (mockTamboClient.threads as any).update = mockUpdate;\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n const initialState: StreamState = {\n threadMap: {\n thread_456: {\n thread: {\n id: \"thread_456\",\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n name: \"Old Name\",\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_456\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n let caughtError: unknown;\n await act(async () => {\n try {\n await result.current.updateThreadName(\"thread_456\", \"My New Thread\");\n } catch (error) {\n caughtError = error;\n }\n });\n\n expect(caughtError).toBeInstanceOf(Error);\n expect((caughtError as Error).message).toBe(\"Network error\");\n expect(result.current.thread?.thread.name).toBe(\"Old Name\");\n expect(invalidateQueriesSpy).not.toHaveBeenCalled();\n });\n });\n});\n"]}
|
|
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 { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport React, { useReducer } from \"react\";\nimport { useTamboClient } from \"../../providers/tambo-client-provider\";\nimport {\n TamboRegistryContext,\n type TamboRegistryContext as TamboRegistryContextType,\n} from \"../../providers/tambo-registry-provider\";\nimport { TamboStreamProvider } from \"../providers/tambo-v1-stream-context\";\nimport {\n streamReducer,\n type StreamState,\n type StreamAction,\n} from \"@tambo-ai/client\";\nimport type {\n TamboComponentContent,\n TamboToolUseContent,\n} from \"../types/message\";\nimport { useTambo } from \"./use-tambo-v1\";\n\njest.mock(\"../../providers/tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n useTamboQueryClient: jest.fn(),\n}));\n\njest.mock(\"../providers/tambo-v1-provider\", () => {\n const actual = jest.requireActual(\"../providers/tambo-v1-provider\");\n return {\n ...actual,\n useTamboConfig: () => ({ userKey: undefined }),\n };\n});\n\njest.mock(\"./use-tambo-v1-auth-state\", () => ({\n useTamboAuthState: () => ({\n status: \"identified\",\n source: \"userKey\",\n }),\n}));\n\nimport { useTamboQueryClient } from \"../../providers/tambo-client-provider\";\n\ndescribe(\"useTambo\", () => {\n let queryClient: QueryClient;\n\n const mockTamboClient = {\n apiKey: \"\",\n threads: {\n messages: {\n list: jest.fn().mockResolvedValue({ messages: [], hasMore: false }),\n },\n runs: {\n delete: jest.fn().mockResolvedValue({}),\n },\n },\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 unregisterTools: 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 <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboStreamProvider>{children}</TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n }\n\n function createWrapperWithState(\n state: StreamState,\n registry: TamboRegistryContextType = mockRegistry,\n ) {\n const noopDispatch: React.Dispatch<StreamAction> = () => {};\n return function WrapperWithState({\n children,\n }: {\n children: React.ReactNode;\n }) {\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={registry}>\n <TamboStreamProvider state={state} dispatch={noopDispatch}>\n {children}\n </TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n };\n }\n\n // Wrapper that uses the real reducer so state updates properly\n function createWrapperWithRealReducer(\n initialState: StreamState,\n stateRef?: React.MutableRefObject<StreamState | undefined>,\n ) {\n return function WrapperWithRealReducer({\n children,\n }: {\n children: React.ReactNode;\n }) {\n const [state, dispatch] = useReducer(streamReducer, initialState);\n if (stateRef) {\n stateRef.current = state;\n }\n return (\n <QueryClientProvider client={queryClient}>\n <TamboRegistryContext.Provider value={mockRegistry}>\n <TamboStreamProvider state={state} dispatch={dispatch}>\n {children}\n </TamboStreamProvider>\n </TamboRegistryContext.Provider>\n </QueryClientProvider>\n );\n };\n }\n\n beforeEach(() => {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n },\n });\n jest.mocked(useTamboClient).mockReturnValue(mockTamboClient);\n jest.mocked(useTamboQueryClient).mockReturnValue(queryClient);\n jest.clearAllMocks();\n delete (mockTamboClient.threads as any).update;\n });\n\n it(\"returns client from useTamboClient\", () => {\n const { result } = renderHook(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n expect(result.current.client).toBe(mockTamboClient);\n });\n\n it(\"returns registry functions\", () => {\n const { result } = renderHook(() => useTambo(), {\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 placeholder thread when no threadId provided\", () => {\n const { result } = renderHook(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Default state has placeholder thread for optimistic UI\n expect(result.current.thread).toBeDefined();\n expect(result.current.thread?.thread.id).toBe(\"placeholder\");\n expect(result.current.messages).toEqual([]);\n });\n\n it(\"returns thread state when switched to a thread\", () => {\n const { result } = renderHook(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initialize and switch to thread\n act(() => {\n result.current.initThread(\"thread_123\");\n result.current.switchThread(\"thread_123\");\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(() => useTambo(), {\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initialize and switch to thread\n act(() => {\n result.current.initThread(\"thread_123\");\n result.current.switchThread(\"thread_123\");\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(() => useTambo(), {\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(() => useTambo(), {\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initially has placeholder thread for optimistic UI\n expect(result.current.currentThreadId).toBe(\"placeholder\");\n expect(result.current.thread).toBeDefined();\n expect(result.current.thread?.thread.id).toBe(\"placeholder\");\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n let newThreadId: string;\n act(() => {\n newThreadId = result.current.startNewThread();\n });\n\n expect(newThreadId!).toBe(\"placeholder\");\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(() => useTambo(), {\n wrapper: TestWrapper,\n });\n\n // Initialize and switch to a thread\n act(() => {\n result.current.initThread(\"thread_123\");\n result.current.switchThread(\"thread_123\");\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 describe(\"component content transformation\", () => {\n const createComponentContent = (\n id: string,\n name: string,\n props: Record<string, unknown>,\n ): TamboComponentContent => ({\n type: \"component\",\n id,\n name,\n props,\n streamingState: \"done\",\n });\n\n it(\"adds renderedComponent to component content blocks\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hello\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n expect(result.current.messages).toHaveLength(1);\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"preserves non-component content blocks unchanged\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"Hello world\" },\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hi\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n expect(result.current.messages).toHaveLength(1);\n const textContent = result.current.messages[0].content[0];\n expect(textContent.type).toBe(\"text\");\n expect(textContent).toEqual({ type: \"text\", text: \"Hello world\" });\n\n const componentContent = result.current.messages[0].content[1];\n expect(componentContent.type).toBe(\"component\");\n expect(\n (componentContent as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"caches rendered components and returns same reference when props unchanged\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hello\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result, rerender } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const firstRender = (\n result.current.messages[0].content[0] as TamboComponentContent\n ).renderedComponent;\n\n // Re-render with same state\n rerender();\n\n const secondRender = (\n result.current.messages[0].content[0] as TamboComponentContent\n ).renderedComponent;\n\n // Should return the same cached element reference\n expect(secondRender).toBe(firstRender);\n });\n\n it(\"handles empty props on components\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {}),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"handles undefined props on components\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"component\",\n id: \"comp_1\",\n name: \"TestComponent\",\n props: undefined,\n streamingState: \"done\",\n } as TamboComponentContent,\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n\n it(\"handles multiple component content blocks in same message\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"ComponentA\", {\n value: 1,\n }),\n createComponentContent(\"comp_2\", \"ComponentB\", {\n value: 2,\n }),\n createComponentContent(\"comp_3\", \"ComponentC\", {\n value: 3,\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n expect(result.current.messages[0].content).toHaveLength(3);\n result.current.messages[0].content.forEach((content) => {\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n });\n\n it(\"uses currentThreadId from stream state\", () => {\n const state: StreamState = {\n threadMap: {\n placeholder: {\n thread: {\n id: \"placeholder\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n createComponentContent(\"comp_1\", \"TestComponent\", {\n title: \"Hello\",\n }),\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"placeholder\",\n };\n\n // No explicit threadId - uses currentThreadId from state\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n // Component should render using the placeholder thread\n const content = result.current.messages[0].content[0];\n expect(content.type).toBe(\"component\");\n expect(\n (content as TamboComponentContent).renderedComponent,\n ).toBeDefined();\n });\n });\n\n describe(\"tool_use content transformation\", () => {\n it(\"adds computed properties to tool_use content\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: { location: \"NYC\" },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.type).toBe(\"tool_use\");\n expect(content.hasCompleted).toBe(false);\n expect(content.statusMessage).toBe(\"Calling getWeather\");\n expect(content.tamboDisplayProps).toBeDefined();\n });\n\n it(\"sets hasCompleted to true when matching tool_result exists\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: { location: \"NYC\" },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n {\n id: \"msg_2\",\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n toolUseId: \"tool_1\",\n content: [{ type: \"text\", text: \"Sunny\" }],\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.hasCompleted).toBe(true);\n expect(content.statusMessage).toBe(\"Called getWeather\");\n });\n\n it(\"uses _tambo_statusMessage when tool is in progress\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: {\n location: \"NYC\",\n _tambo_statusMessage: \"Fetching weather for NYC...\",\n },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.statusMessage).toBe(\"Fetching weather for NYC...\");\n expect(content.tamboDisplayProps?._tambo_statusMessage).toBe(\n \"Fetching weather for NYC...\",\n );\n });\n\n it(\"uses _tambo_completionStatusMessage when tool is completed\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: {\n location: \"NYC\",\n _tambo_statusMessage: \"Fetching weather...\",\n _tambo_completionStatusMessage: \"Got weather for NYC\",\n },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n {\n id: \"msg_2\",\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n toolUseId: \"tool_1\",\n content: [{ type: \"text\", text: \"Sunny\" }],\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.hasCompleted).toBe(true);\n expect(content.statusMessage).toBe(\"Got weather for NYC\");\n });\n\n it(\"filters _tambo_* properties from input\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: {\n location: \"NYC\",\n units: \"celsius\",\n _tambo_statusMessage: \"Fetching...\",\n _tambo_completionStatusMessage: \"Done\",\n },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n // Input should only have non-_tambo_ properties\n expect(content.input).toEqual({ location: \"NYC\", units: \"celsius\" });\n expect(content.input._tambo_statusMessage).toBeUndefined();\n expect(content.input._tambo_completionStatusMessage).toBeUndefined();\n });\n\n it(\"handles tool_use with empty input\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getCurrentTime\",\n input: {},\n },\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.input).toEqual({});\n expect(content.hasCompleted).toBe(false);\n expect(content.statusMessage).toBe(\"Calling getCurrentTime\");\n });\n\n it(\"handles tool_use with undefined input\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getCurrentTime\",\n input: undefined,\n } as unknown as TamboToolUseContent,\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const content = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n expect(content.input).toEqual({});\n expect(content.hasCompleted).toBe(false);\n });\n\n it(\"handles multiple tool_use blocks with different completion states\", () => {\n const state: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [\n {\n id: \"msg_1\",\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n id: \"tool_1\",\n name: \"getWeather\",\n input: { location: \"NYC\" },\n },\n {\n type: \"tool_use\",\n id: \"tool_2\",\n name: \"getTime\",\n input: { timezone: \"EST\" },\n },\n ],\n createdAt: new Date().toISOString(),\n },\n {\n id: \"msg_2\",\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n toolUseId: \"tool_1\",\n content: [{ type: \"text\", text: \"Sunny\" }],\n },\n // tool_2 has no result yet\n ],\n createdAt: new Date().toISOString(),\n },\n ],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithState(state),\n });\n\n const tool1 = result.current.messages[0]\n .content[0] as TamboToolUseContent;\n const tool2 = result.current.messages[0]\n .content[1] as TamboToolUseContent;\n\n expect(tool1.hasCompleted).toBe(true);\n expect(tool1.statusMessage).toBe(\"Called getWeather\");\n\n expect(tool2.hasCompleted).toBe(false);\n expect(tool2.statusMessage).toBe(\"Calling getTime\");\n });\n });\n\n describe(\"cancelRun\", () => {\n it(\"sets thread to idle and lastRunCancelled to true when cancelled\", async () => {\n const initialState: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [],\n status: \"streaming\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"streaming\", runId: \"run_456\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n // Before cancel: streaming and lastRunCancelled is false\n expect(result.current.isStreaming).toBe(true);\n expect(result.current.isIdle).toBe(false);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // After cancel: idle and lastRunCancelled is true\n expect(result.current.isStreaming).toBe(false);\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(true);\n\n // Verify API was called to cancel the run\n expect(mockTamboClient.threads.runs.delete).toHaveBeenCalledWith(\n \"run_456\",\n { threadId: \"thread_123\" },\n );\n });\n\n it(\"is a no-op when there is no active run\", async () => {\n const initialState: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"idle\" }, // No runId\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n // Idle before\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // Still idle, lastRunCancelled unchanged\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n // API should not have been called\n expect(mockTamboClient.threads.runs.delete).not.toHaveBeenCalled();\n });\n\n it(\"is a no-op when on a placeholder thread\", async () => {\n const initialState: StreamState = {\n threadMap: {\n placeholder: {\n thread: {\n id: \"placeholder\",\n messages: [],\n status: \"streaming\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"streaming\", runId: \"run_123\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"placeholder\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n // Before: streaming on placeholder\n expect(result.current.isStreaming).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // After: state should be unchanged (placeholder threads are skipped)\n expect(result.current.isStreaming).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(false);\n\n // API should not have been called for placeholder threads\n expect(mockTamboClient.threads.runs.delete).not.toHaveBeenCalled();\n });\n\n it(\"still updates local state even if API call fails\", async () => {\n const consoleWarnSpy = jest\n .spyOn(console, \"warn\")\n .mockImplementation(() => {});\n\n // Make the API call fail\n jest\n .mocked(mockTamboClient.threads.runs.delete)\n .mockRejectedValueOnce(new Error(\"Network error\"));\n\n const initialState: StreamState = {\n threadMap: {\n thread_123: {\n thread: {\n id: \"thread_123\",\n messages: [],\n status: \"streaming\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n },\n streaming: { status: \"streaming\", runId: \"run_456\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_123\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n await act(async () => {\n await result.current.cancelRun();\n });\n\n // Local state should still be updated (optimistic update)\n expect(result.current.isIdle).toBe(true);\n expect(result.current.thread?.thread.lastRunCancelled).toBe(true);\n\n // Warning should have been logged\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n \"Failed to cancel run on server:\",\n expect.any(Error),\n );\n\n consoleWarnSpy.mockRestore();\n });\n });\n\n describe(\"updateThreadName\", () => {\n it(\"updates local thread name and invalidates caches on success\", async () => {\n const mockUpdate = jest.fn().mockResolvedValue({});\n // TypeScript SDK will be updated to include this method\n (mockTamboClient.threads as any).update = mockUpdate;\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n const initialState: StreamState = {\n threadMap: {\n thread_456: {\n thread: {\n id: \"thread_456\",\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n name: \"Old Name\",\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_456\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n await act(async () => {\n await result.current.updateThreadName(\"thread_456\", \"My New Thread\");\n });\n\n expect(mockUpdate).toHaveBeenCalledWith(\"thread_456\", {\n name: \"My New Thread\",\n userKey: undefined,\n });\n\n expect(result.current.thread?.thread.name).toBe(\"My New Thread\");\n const invalidatedKeys = invalidateQueriesSpy.mock.calls\n .map(([arg]) => (arg as any).queryKey)\n .filter(Boolean);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"list\"]);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"thread_456\"]);\n });\n\n it(\"does not create local thread state when thread isn't loaded\", async () => {\n const mockUpdate = jest.fn().mockResolvedValue({});\n // TypeScript SDK will be updated to include this method\n (mockTamboClient.threads as any).update = mockUpdate;\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n // Track the internal StreamState from the real reducer so we can assert we\n // don't create a local thread entry for threads that haven't been loaded.\n const stateRef: React.MutableRefObject<StreamState | undefined> = {\n current: undefined,\n };\n const initialState: StreamState = {\n threadMap: {},\n currentThreadId: \"placeholder\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState, stateRef),\n });\n\n await act(async () => {\n await result.current.updateThreadName(\"thread_789\", \"New Title\");\n });\n\n expect(mockUpdate).toHaveBeenCalledWith(\"thread_789\", {\n name: \"New Title\",\n userKey: undefined,\n });\n const invalidatedKeys = invalidateQueriesSpy.mock.calls\n .map(([arg]) => (arg as any).queryKey)\n .filter(Boolean);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"list\"]);\n expect(invalidatedKeys).toContainEqual([\"v1-threads\", \"thread_789\"]);\n\n expect(stateRef.current?.threadMap.thread_789).toBeUndefined();\n\n act(() => {\n result.current.switchThread(\"thread_789\");\n });\n\n expect(result.current.thread).toBeUndefined();\n });\n\n it(\"propagates errors and does not update local state\", async () => {\n const mockUpdate = jest\n .fn()\n .mockRejectedValue(new Error(\"Network error\"));\n // TypeScript SDK will be updated to include this method\n (mockTamboClient.threads as any).update = mockUpdate;\n\n const invalidateQueriesSpy = jest.spyOn(queryClient, \"invalidateQueries\");\n\n const initialState: StreamState = {\n threadMap: {\n thread_456: {\n thread: {\n id: \"thread_456\",\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n name: \"Old Name\",\n },\n streaming: { status: \"idle\" },\n accumulatingToolArgs: {},\n },\n },\n currentThreadId: \"thread_456\",\n };\n\n const { result } = renderHook(() => useTambo(), {\n wrapper: createWrapperWithRealReducer(initialState),\n });\n\n let caughtError: unknown;\n await act(async () => {\n try {\n await result.current.updateThreadName(\"thread_456\", \"My New Thread\");\n } catch (error) {\n caughtError = error;\n }\n });\n\n expect(caughtError).toBeInstanceOf(Error);\n expect((caughtError as Error).message).toBe(\"Network error\");\n expect(result.current.thread?.thread.name).toBe(\"Old Name\");\n expect(invalidateQueriesSpy).not.toHaveBeenCalled();\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tambo-v1-stub-provider.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-stub-provider.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,EAAW,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EAEV,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAYpD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG;QAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;KAAE,CAAC;IAE1D;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC;IAElE;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAEhC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAmCD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAe,EACf,KAAU,EACV,OAAO,EACP,UAAU,EAAE,iBAAsB,EAClC,WAAmB,EACnB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"tambo-v1-stub-provider.d.ts","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-stub-provider.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,EAAW,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EAEV,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAYpD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG;QAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;KAAE,CAAC;IAE1D;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC;IAElE;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAEhC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAmCD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAe,EACf,KAAU,EACV,OAAO,EACP,UAAU,EAAE,iBAAsB,EAClC,WAAmB,EACnB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,qBA6L3C"}
|
|
@@ -156,6 +156,7 @@ export function TamboStubProvider({ children, thread: threadData, threadId: prov
|
|
|
156
156
|
registerComponent: () => { },
|
|
157
157
|
registerTool: () => { },
|
|
158
158
|
registerTools: () => { },
|
|
159
|
+
unregisterTools: () => { },
|
|
159
160
|
addToolAssociation: () => { },
|
|
160
161
|
registerMcpServer: () => { },
|
|
161
162
|
registerMcpServers: () => { },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tambo-v1-stub-provider.js","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-stub-provider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\n/**\n * TamboStubProvider - Mock Provider for Testing\n *\n * Provides stubbed versions of all contexts for testing components\n * that use Tambo hooks without making real API calls.\n * @example\n * ```tsx\n * const mockThread = {\n * id: \"thread_123\",\n * messages: [\n * { id: \"msg_1\", role: \"user\", content: [{ type: \"text\", text: \"Hello\" }], createdAt: \"...\" },\n * { id: \"msg_2\", role: \"assistant\", content: [{ type: \"text\", text: \"Hi!\" }], createdAt: \"...\" },\n * ],\n * status: \"idle\",\n * createdAt: \"2024-01-01T00:00:00Z\",\n * updatedAt: \"2024-01-01T00:00:00Z\",\n * };\n *\n * function TestComponent() {\n * return (\n * <TamboStubProvider thread={mockThread}>\n * <MyComponent />\n * </TamboStubProvider>\n * );\n * }\n * ```\n */\n\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport React, { useMemo, type PropsWithChildren } from \"react\";\nimport type {\n TamboComponent,\n TamboTool,\n TamboToolRegistry,\n} from \"../../model/component-metadata\";\nimport { TamboClientContext } from \"../../providers/tambo-client-provider\";\nimport { TamboRegistryContext } from \"../../providers/tambo-registry-provider\";\nimport type { TamboThreadMessage } from \"../types/message\";\nimport type { TamboThread } from \"@tambo-ai/client\";\nimport type { StreamAction, StreamState, ThreadState } from \"@tambo-ai/client\";\nimport { TamboConfigContext, type TamboConfig } from \"./tambo-v1-provider\";\nimport {\n TamboStreamProvider,\n type ThreadManagement,\n} from \"./tambo-v1-stream-context\";\nimport {\n TamboThreadInputContext,\n type TamboThreadInputContextProps,\n} from \"./tambo-v1-thread-input-provider\";\n\n/**\n * Props for TamboStubProvider\n */\nexport interface TamboStubProviderProps {\n /**\n * Thread data to display.\n * Can be a full TamboThread or just an array of messages.\n */\n thread?: TamboThread | { messages: TamboThreadMessage[] };\n\n /**\n * Optional thread ID. Defaults to \"stub_thread\" or thread.id if provided.\n */\n threadId?: string;\n\n /**\n * Components to register with the registry.\n */\n components?: TamboComponent[];\n\n /**\n * Tools to register with the registry.\n */\n tools?: TamboTool[];\n\n /**\n * User key for the config context.\n */\n userKey?: string;\n\n /**\n * Initial input value for the thread input context.\n */\n inputValue?: string;\n\n /**\n * Whether the thread is currently streaming.\n */\n isStreaming?: boolean;\n\n /**\n * Override for the submit function.\n * If not provided, submit will be a no-op that returns the threadId.\n */\n onSubmit?: () => Promise<{ threadId: string }>;\n\n /**\n * Override for the setValue function.\n */\n onSetValue?: (value: string | ((prev: string) => string)) => void;\n\n /**\n * Override for startNewThread.\n */\n onStartNewThread?: () => string;\n\n /**\n * Override for switchThread.\n */\n onSwitchThread?: (threadId: string | null) => void;\n\n /**\n * Override for initThread.\n */\n onInitThread?: (threadId: string) => void;\n}\n\n/**\n * Creates a default TamboThread from messages or returns the full thread.\n * @returns A normalized thread object\n */\nfunction normalizeThread(\n threadData: TamboThread | { messages: TamboThreadMessage[] } | undefined,\n threadId: string,\n): TamboThread {\n if (!threadData) {\n return {\n id: threadId,\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n };\n }\n\n if (\"id\" in threadData && \"status\" in threadData) {\n return threadData;\n }\n\n return {\n id: threadId,\n messages: threadData.messages,\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n };\n}\n\n/**\n * TamboStubProvider provides mock implementations of all contexts\n * for testing components that use Tambo hooks.\n *\n * All operations are no-ops by default, returning stub data.\n * Override specific behaviors via props as needed for testing.\n * Stream state is derived once from props and is not updated by thread management.\n * @returns A provider wrapper suitable for tests\n */\nexport function TamboStubProvider({\n children,\n thread: threadData,\n threadId: providedThreadId,\n components = [],\n tools = [],\n userKey,\n inputValue: initialInputValue = \"\",\n isStreaming = false,\n onSubmit,\n onSetValue,\n onStartNewThread,\n onSwitchThread,\n onInitThread,\n}: PropsWithChildren<TamboStubProviderProps>) {\n // Determine thread ID\n const threadId =\n providedThreadId ??\n (threadData && \"id\" in threadData ? threadData.id : \"stub_thread\");\n\n // Normalize thread data\n const thread = normalizeThread(threadData, threadId);\n\n // Create stub QueryClient\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n }),\n [],\n );\n\n // Create stub client\n const stubClient = useMemo(() => ({}) as TamboAI, []);\n\n // Build component registry\n const componentList = useMemo(() => {\n const list: TamboRegistryContext[\"componentList\"] = {};\n\n for (const component of components) {\n list[component.name] = {\n component: component.component,\n loadingComponent: component.loadingComponent,\n name: component.name,\n description: component.description,\n props: component.propsDefinition ?? {},\n contextTools: [],\n };\n }\n\n return list;\n }, [components]);\n\n // Build tool registry\n const toolRegistry = useMemo(() => {\n return tools.reduce((acc, tool) => {\n acc[tool.name] = tool;\n return acc;\n }, {} as TamboToolRegistry);\n }, [tools]);\n\n // Stream state\n const streamState = useMemo<StreamState>(() => {\n const threadState: ThreadState = {\n thread,\n streaming: {\n status: isStreaming ? \"streaming\" : \"idle\",\n },\n accumulatingToolArgs: {},\n };\n\n return {\n threadMap: { [threadId]: threadState },\n currentThreadId: threadId,\n };\n }, [thread, threadId, isStreaming]);\n\n // Stream dispatch (no-op)\n const streamDispatch = useMemo<React.Dispatch<StreamAction>>(\n () => () => {},\n [],\n );\n\n // Thread management\n const threadManagement = useMemo<ThreadManagement>(\n () => ({\n initThread: onInitThread ?? (() => {}),\n switchThread: onSwitchThread ?? (() => {}),\n startNewThread:\n onStartNewThread ??\n (() => {\n const newId = `stub_${crypto.randomUUID()}`;\n return newId;\n }),\n }),\n [onInitThread, onSwitchThread, onStartNewThread],\n );\n\n // Config context\n const config = useMemo<TamboConfig>(() => ({ userKey }), [userKey]);\n\n // Input state (managed internally for stub)\n const [inputValue, setInputValueInternal] = React.useState(initialInputValue);\n\n // Thread input context\n const threadInputContext = useMemo<TamboThreadInputContextProps>(() => {\n const setValue: React.Dispatch<React.SetStateAction<string>> =\n onSetValue ?? setInputValueInternal;\n\n const submit: TamboThreadInputContextProps[\"submit\"] =\n onSubmit ??\n (async () => {\n return { threadId };\n });\n\n return {\n value: inputValue,\n setValue,\n submit,\n threadId,\n setThreadId: () => {},\n images: [],\n addImage: async () => {},\n addImages: async () => {},\n removeImage: () => {},\n clearImages: () => {},\n isPending: false,\n isError: false,\n error: null,\n isIdle: true,\n isSuccess: false,\n status: \"idle\",\n data: undefined,\n variables: undefined,\n failureCount: 0,\n failureReason: null,\n reset: () => {},\n context: undefined,\n submittedAt: 0,\n isPaused: false,\n isDisabled: false,\n };\n }, [inputValue, threadId, onSubmit, onSetValue, setInputValueInternal]);\n\n // Registry context\n const registryContext = useMemo<TamboRegistryContext>(\n () => ({\n componentList,\n toolRegistry,\n componentToolAssociations: {},\n mcpServerInfos: [],\n resources: [],\n resourceSource: null,\n onCallUnregisteredTool: undefined,\n registerComponent: () => {},\n registerTool: () => {},\n registerTools: () => {},\n addToolAssociation: () => {},\n registerMcpServer: () => {},\n registerMcpServers: () => {},\n registerResource: () => {},\n registerResources: () => {},\n registerResourceSource: () => {},\n }),\n [componentList, toolRegistry],\n );\n\n // Client context\n const clientContext = useMemo(\n () => ({\n client: stubClient,\n queryClient,\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n }),\n [stubClient, queryClient],\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <TamboClientContext.Provider value={clientContext}>\n <TamboRegistryContext.Provider value={registryContext}>\n <TamboConfigContext.Provider value={config}>\n <TamboStreamProvider\n state={streamState}\n dispatch={streamDispatch}\n threadManagement={threadManagement}\n >\n <TamboThreadInputContext.Provider value={threadInputContext}>\n {children}\n </TamboThreadInputContext.Provider>\n </TamboStreamProvider>\n </TamboConfigContext.Provider>\n </TamboRegistryContext.Provider>\n </TamboClientContext.Provider>\n </QueryClientProvider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tambo-v1-stub-provider.js","sourceRoot":"","sources":["../../../src/v1/providers/tambo-v1-stub-provider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\n/**\n * TamboStubProvider - Mock Provider for Testing\n *\n * Provides stubbed versions of all contexts for testing components\n * that use Tambo hooks without making real API calls.\n * @example\n * ```tsx\n * const mockThread = {\n * id: \"thread_123\",\n * messages: [\n * { id: \"msg_1\", role: \"user\", content: [{ type: \"text\", text: \"Hello\" }], createdAt: \"...\" },\n * { id: \"msg_2\", role: \"assistant\", content: [{ type: \"text\", text: \"Hi!\" }], createdAt: \"...\" },\n * ],\n * status: \"idle\",\n * createdAt: \"2024-01-01T00:00:00Z\",\n * updatedAt: \"2024-01-01T00:00:00Z\",\n * };\n *\n * function TestComponent() {\n * return (\n * <TamboStubProvider thread={mockThread}>\n * <MyComponent />\n * </TamboStubProvider>\n * );\n * }\n * ```\n */\n\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport React, { useMemo, type PropsWithChildren } from \"react\";\nimport type {\n TamboComponent,\n TamboTool,\n TamboToolRegistry,\n} from \"../../model/component-metadata\";\nimport { TamboClientContext } from \"../../providers/tambo-client-provider\";\nimport { TamboRegistryContext } from \"../../providers/tambo-registry-provider\";\nimport type { TamboThreadMessage } from \"../types/message\";\nimport type { TamboThread } from \"@tambo-ai/client\";\nimport type { StreamAction, StreamState, ThreadState } from \"@tambo-ai/client\";\nimport { TamboConfigContext, type TamboConfig } from \"./tambo-v1-provider\";\nimport {\n TamboStreamProvider,\n type ThreadManagement,\n} from \"./tambo-v1-stream-context\";\nimport {\n TamboThreadInputContext,\n type TamboThreadInputContextProps,\n} from \"./tambo-v1-thread-input-provider\";\n\n/**\n * Props for TamboStubProvider\n */\nexport interface TamboStubProviderProps {\n /**\n * Thread data to display.\n * Can be a full TamboThread or just an array of messages.\n */\n thread?: TamboThread | { messages: TamboThreadMessage[] };\n\n /**\n * Optional thread ID. Defaults to \"stub_thread\" or thread.id if provided.\n */\n threadId?: string;\n\n /**\n * Components to register with the registry.\n */\n components?: TamboComponent[];\n\n /**\n * Tools to register with the registry.\n */\n tools?: TamboTool[];\n\n /**\n * User key for the config context.\n */\n userKey?: string;\n\n /**\n * Initial input value for the thread input context.\n */\n inputValue?: string;\n\n /**\n * Whether the thread is currently streaming.\n */\n isStreaming?: boolean;\n\n /**\n * Override for the submit function.\n * If not provided, submit will be a no-op that returns the threadId.\n */\n onSubmit?: () => Promise<{ threadId: string }>;\n\n /**\n * Override for the setValue function.\n */\n onSetValue?: (value: string | ((prev: string) => string)) => void;\n\n /**\n * Override for startNewThread.\n */\n onStartNewThread?: () => string;\n\n /**\n * Override for switchThread.\n */\n onSwitchThread?: (threadId: string | null) => void;\n\n /**\n * Override for initThread.\n */\n onInitThread?: (threadId: string) => void;\n}\n\n/**\n * Creates a default TamboThread from messages or returns the full thread.\n * @returns A normalized thread object\n */\nfunction normalizeThread(\n threadData: TamboThread | { messages: TamboThreadMessage[] } | undefined,\n threadId: string,\n): TamboThread {\n if (!threadData) {\n return {\n id: threadId,\n messages: [],\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n };\n }\n\n if (\"id\" in threadData && \"status\" in threadData) {\n return threadData;\n }\n\n return {\n id: threadId,\n messages: threadData.messages,\n status: \"idle\",\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n lastRunCancelled: false,\n };\n}\n\n/**\n * TamboStubProvider provides mock implementations of all contexts\n * for testing components that use Tambo hooks.\n *\n * All operations are no-ops by default, returning stub data.\n * Override specific behaviors via props as needed for testing.\n * Stream state is derived once from props and is not updated by thread management.\n * @returns A provider wrapper suitable for tests\n */\nexport function TamboStubProvider({\n children,\n thread: threadData,\n threadId: providedThreadId,\n components = [],\n tools = [],\n userKey,\n inputValue: initialInputValue = \"\",\n isStreaming = false,\n onSubmit,\n onSetValue,\n onStartNewThread,\n onSwitchThread,\n onInitThread,\n}: PropsWithChildren<TamboStubProviderProps>) {\n // Determine thread ID\n const threadId =\n providedThreadId ??\n (threadData && \"id\" in threadData ? threadData.id : \"stub_thread\");\n\n // Normalize thread data\n const thread = normalizeThread(threadData, threadId);\n\n // Create stub QueryClient\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: false },\n mutations: { retry: false },\n },\n }),\n [],\n );\n\n // Create stub client\n const stubClient = useMemo(() => ({}) as TamboAI, []);\n\n // Build component registry\n const componentList = useMemo(() => {\n const list: TamboRegistryContext[\"componentList\"] = {};\n\n for (const component of components) {\n list[component.name] = {\n component: component.component,\n loadingComponent: component.loadingComponent,\n name: component.name,\n description: component.description,\n props: component.propsDefinition ?? {},\n contextTools: [],\n };\n }\n\n return list;\n }, [components]);\n\n // Build tool registry\n const toolRegistry = useMemo(() => {\n return tools.reduce((acc, tool) => {\n acc[tool.name] = tool;\n return acc;\n }, {} as TamboToolRegistry);\n }, [tools]);\n\n // Stream state\n const streamState = useMemo<StreamState>(() => {\n const threadState: ThreadState = {\n thread,\n streaming: {\n status: isStreaming ? \"streaming\" : \"idle\",\n },\n accumulatingToolArgs: {},\n };\n\n return {\n threadMap: { [threadId]: threadState },\n currentThreadId: threadId,\n };\n }, [thread, threadId, isStreaming]);\n\n // Stream dispatch (no-op)\n const streamDispatch = useMemo<React.Dispatch<StreamAction>>(\n () => () => {},\n [],\n );\n\n // Thread management\n const threadManagement = useMemo<ThreadManagement>(\n () => ({\n initThread: onInitThread ?? (() => {}),\n switchThread: onSwitchThread ?? (() => {}),\n startNewThread:\n onStartNewThread ??\n (() => {\n const newId = `stub_${crypto.randomUUID()}`;\n return newId;\n }),\n }),\n [onInitThread, onSwitchThread, onStartNewThread],\n );\n\n // Config context\n const config = useMemo<TamboConfig>(() => ({ userKey }), [userKey]);\n\n // Input state (managed internally for stub)\n const [inputValue, setInputValueInternal] = React.useState(initialInputValue);\n\n // Thread input context\n const threadInputContext = useMemo<TamboThreadInputContextProps>(() => {\n const setValue: React.Dispatch<React.SetStateAction<string>> =\n onSetValue ?? setInputValueInternal;\n\n const submit: TamboThreadInputContextProps[\"submit\"] =\n onSubmit ??\n (async () => {\n return { threadId };\n });\n\n return {\n value: inputValue,\n setValue,\n submit,\n threadId,\n setThreadId: () => {},\n images: [],\n addImage: async () => {},\n addImages: async () => {},\n removeImage: () => {},\n clearImages: () => {},\n isPending: false,\n isError: false,\n error: null,\n isIdle: true,\n isSuccess: false,\n status: \"idle\",\n data: undefined,\n variables: undefined,\n failureCount: 0,\n failureReason: null,\n reset: () => {},\n context: undefined,\n submittedAt: 0,\n isPaused: false,\n isDisabled: false,\n };\n }, [inputValue, threadId, onSubmit, onSetValue, setInputValueInternal]);\n\n // Registry context\n const registryContext = useMemo<TamboRegistryContext>(\n () => ({\n componentList,\n toolRegistry,\n componentToolAssociations: {},\n mcpServerInfos: [],\n resources: [],\n resourceSource: null,\n onCallUnregisteredTool: undefined,\n registerComponent: () => {},\n registerTool: () => {},\n registerTools: () => {},\n unregisterTools: () => {},\n addToolAssociation: () => {},\n registerMcpServer: () => {},\n registerMcpServers: () => {},\n registerResource: () => {},\n registerResources: () => {},\n registerResourceSource: () => {},\n }),\n [componentList, toolRegistry],\n );\n\n // Client context\n const clientContext = useMemo(\n () => ({\n client: stubClient,\n queryClient,\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n }),\n [stubClient, queryClient],\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <TamboClientContext.Provider value={clientContext}>\n <TamboRegistryContext.Provider value={registryContext}>\n <TamboConfigContext.Provider value={config}>\n <TamboStreamProvider\n state={streamState}\n dispatch={streamDispatch}\n threadManagement={threadManagement}\n >\n <TamboThreadInputContext.Provider value={threadInputContext}>\n {children}\n </TamboThreadInputContext.Provider>\n </TamboStreamProvider>\n </TamboConfigContext.Provider>\n </TamboRegistryContext.Provider>\n </TamboClientContext.Provider>\n </QueryClientProvider>\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tambo-ai/react",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "React client package for Tambo AI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"use-debounce": "^10.0.6"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
|
-
"@eslint/js": "^9.39.
|
|
92
|
+
"@eslint/js": "^9.39.4",
|
|
93
93
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
94
94
|
"@tambo-ai/eslint-config": "*",
|
|
95
95
|
"@tambo-ai/typescript-config": "*",
|
|
@@ -97,19 +97,19 @@
|
|
|
97
97
|
"@testing-library/react": "^16.3.2",
|
|
98
98
|
"@types/jest": "^30.0.0",
|
|
99
99
|
"@types/json-schema": "^7.0.15",
|
|
100
|
-
"@types/node": "^22.19.
|
|
100
|
+
"@types/node": "^22.19.15",
|
|
101
101
|
"@types/react": "^18.3.23",
|
|
102
102
|
"@types/react-dom": "^18.3.7",
|
|
103
103
|
"@valibot/to-json-schema": "^1.5.0",
|
|
104
104
|
"fast-json-patch": "^3.1.1",
|
|
105
105
|
"concurrently": "^9.2.1",
|
|
106
|
-
"eslint": "^9.39.
|
|
107
|
-
"eslint-plugin-jsdoc": "^62.
|
|
106
|
+
"eslint": "^9.39.4",
|
|
107
|
+
"eslint-plugin-jsdoc": "^62.7.1",
|
|
108
108
|
"eslint-plugin-react": "^7.37.5",
|
|
109
109
|
"eslint-plugin-react-hooks": "^6.1.1",
|
|
110
110
|
"jest": "^30.2.0",
|
|
111
111
|
"jest-environment-jsdom": "^30.2.0",
|
|
112
|
-
"lint-staged": "^16.2
|
|
112
|
+
"lint-staged": "^16.3.2",
|
|
113
113
|
"prettier": "^3.8.1",
|
|
114
114
|
"prettier-2": "npm:prettier@^2",
|
|
115
115
|
"react": "^18.3.1",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"tsc-esm-fix": "^3.1.2",
|
|
119
119
|
"typescript": "^5.9.3",
|
|
120
120
|
"type-fest": "^5.4.3",
|
|
121
|
-
"typescript-eslint": "^8.
|
|
121
|
+
"typescript-eslint": "^8.56.1",
|
|
122
122
|
"zod": "^3.25.76 || ^4",
|
|
123
123
|
"zod-to-json-schema": "^3.25.1"
|
|
124
124
|
}
|