@axiom-lattice/react-sdk 1.0.38 → 1.0.40
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/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -121,7 +121,7 @@ function useChat(threadId, options = {}) {
|
|
|
121
121
|
stopStreamingRef.current = null;
|
|
122
122
|
}
|
|
123
123
|
const { input, command, streaming = true } = data;
|
|
124
|
-
const { message, files } = input || {};
|
|
124
|
+
const { message, files, ...rest } = input || {};
|
|
125
125
|
setState((prev) => ({
|
|
126
126
|
...prev,
|
|
127
127
|
isLoading: true,
|
|
@@ -150,8 +150,9 @@ function useChat(threadId, options = {}) {
|
|
|
150
150
|
const stopStreaming2 = client.chat.stream(
|
|
151
151
|
{
|
|
152
152
|
threadId,
|
|
153
|
-
messages: [userMessage]
|
|
154
|
-
|
|
153
|
+
messages: [userMessage],
|
|
154
|
+
command,
|
|
155
|
+
...rest
|
|
155
156
|
},
|
|
156
157
|
(chunk) => handleStreamEvent(chunk),
|
|
157
158
|
async () => {
|
|
@@ -178,8 +179,9 @@ function useChat(threadId, options = {}) {
|
|
|
178
179
|
} else {
|
|
179
180
|
const response = await client.chat.send({
|
|
180
181
|
threadId,
|
|
181
|
-
messages: [userMessage]
|
|
182
|
-
|
|
182
|
+
messages: [userMessage],
|
|
183
|
+
command,
|
|
184
|
+
...rest
|
|
183
185
|
});
|
|
184
186
|
chunkMessageMerger.current.initialMessages(response.messages);
|
|
185
187
|
setState((prev) => ({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/hooks/useChat.ts","../src/context.tsx","../src/hooks/useThread.ts","../src/hooks/useAgentState.ts","../src/hooks/useAgentGraph.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * Axiom Lattice React SDK - React hooks for the Axiom Lattice Agent Service API\n */\n\n// Export types\nexport * from \"./types\";\n\n// Export hooks\nexport * from \"./hooks/useChat\";\nexport * from \"./hooks/useThread\";\nexport * from \"./hooks/useAgentState\";\nexport * from \"./hooks/useAgentGraph\";\n\n// Export context\nexport * from \"./context\";\n\nexport * from \"@axiom-lattice/protocols\";\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport {\n ChatState,\n ChatStateWithAgent,\n UseChatOptions,\n StreamEventHandlerOptions,\n ChatResponse,\n AgentState,\n} from \"../types\";\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\nimport { createSimpleMessageMerger } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Hook for managing chat interactions with an agent\n *\n * This hook provides functionality for:\n * - Sending messages to an agent\n * - Receiving streaming and non-streaming responses\n * - Loading message history\n * - Managing the chat state\n * - Optionally returning agent state when streaming completes\n *\n * @param threadId - Thread ID to use for chat\n * @param options - Chat options\n * @returns Chat state and operations\n */\nexport function useChat<T extends UseChatOptions>(\n threadId: string | null,\n options: T = {} as T\n): (T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState) & {\n sendMessage: (data: {\n input?: { message: string; files?: { name: string; id: string }[] };\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => Promise<void>;\n stopStreaming: () => void;\n loadMessages: (limit?: number) => Promise<void>;\n clearMessages: () => void;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<\n T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState\n >({\n messages: options.initialMessages || [],\n isLoading: false,\n error: null,\n streamingMessage: null,\n ...(options.enableReturnStateWhenStreamCompleted\n ? { agentState: null }\n : {}),\n } as T[\"enableReturnStateWhenStreamCompleted\"] extends true ? ChatStateWithAgent : ChatState);\n\n // Reference to the stop function for streaming\n const stopStreamingRef = useRef<(() => void) | null>(null);\n\n // Create a message merger to handle streaming chunks\n const chunkMessageMerger = useRef(createSimpleMessageMerger());\n\n /**\n * Fetches and updates the agent state when streaming completes\n * @param threadId - Thread ID to fetch state for\n */\n const fetchAndUpdateAgentState = useCallback(\n async (threadId: string) => {\n if (!options.enableReturnStateWhenStreamCompleted) return;\n\n try {\n const agentState = await client.getAgentState(threadId);\n setState(\n (prev) =>\n ({\n ...prev,\n agentState,\n } as T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState)\n );\n } catch (error) {\n console.warn(\"Failed to fetch agent state:\", error);\n // Don't throw error, just log it to avoid breaking the chat flow\n }\n },\n [client, options.enableReturnStateWhenStreamCompleted]\n );\n\n // Initialize message merger with initial messages\n useEffect(() => {\n if (options.initialMessages && options.initialMessages.length > 0) {\n chunkMessageMerger.current.initialMessages(options.initialMessages);\n }\n }, [options.initialMessages]);\n\n /**\n * Handles stream events\n * @param chunk - Message chunk\n * @param customHandlers - Custom event handlers\n */\n const handleStreamEvent = useCallback((chunk: MessageChunk) => {\n // Push the chunk to the message merger\n chunkMessageMerger.current.push(chunk);\n\n // Get the updated messages\n const updatedMessages = chunkMessageMerger.current.getMessages();\n\n // Update the state with the updated messages\n // Keep isLoading: true during streaming, only set to false when streaming completes\n setState((prev) => ({\n ...prev,\n messages: updatedMessages,\n isLoading: true,\n streamingMessage: null,\n }));\n }, []);\n\n /**\n * Sends a message to the agent\n * @param data - Message data\n */\n const sendMessage = useCallback(\n async (data: {\n input?: { message: string; files?: { name: string; id: string }[] };\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => {\n if (!threadId) {\n throw new Error(\"Thread ID is required to send messages\");\n }\n\n // Stop any ongoing streaming\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n\n const { input, command, streaming = true } = data;\n const { message, files } = input || {};\n\n setState((prev) => ({\n ...prev,\n isLoading: true,\n error: null,\n streamingMessage: null,\n }));\n\n // Create user message\n const userMessage: Message = {\n id: Date.now().toString(),\n content: message || command?.resume?.message || \"\",\n files,\n role: \"human\",\n };\n\n // Add user message to the message merger\n chunkMessageMerger.current.push({\n type: \"human\",\n data: {\n id: userMessage.id,\n content: userMessage.content,\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n }));\n\n try {\n if (options.streaming !== false && streaming !== false) {\n // Use streaming API\n const stopStreaming = client.chat.stream(\n {\n threadId,\n messages: [userMessage as any], // Cast to any to avoid type conflicts\n },\n (chunk: MessageChunk) => handleStreamEvent(chunk),\n async () => {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n // Stream completed - fetch agent state if enabled\n if (options.enableReturnStateWhenStreamCompleted) {\n await fetchAndUpdateAgentState(threadId);\n }\n stopStreamingRef.current = null;\n },\n (error: Error) => {\n // Stream error\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error,\n streamingMessage: null,\n }));\n stopStreamingRef.current = null;\n }\n );\n\n stopStreamingRef.current = stopStreaming;\n } else {\n // Use non-streaming API\n const response = await client.chat.send({\n threadId,\n messages: [userMessage as any], // Cast to any to avoid type conflicts\n });\n\n // Add the response to the message merger\n chunkMessageMerger.current.initialMessages(response.messages);\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n }\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [\n client,\n threadId,\n options.streaming,\n options.enableReturnStateWhenStreamCompleted,\n handleStreamEvent,\n fetchAndUpdateAgentState,\n ]\n );\n\n /**\n * Stops any ongoing streaming\n */\n const stopStreaming = useCallback(() => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n\n // Get the current messages from the merger\n const currentMessages = chunkMessageMerger.current\n .getMessages()\n .map((msg) => ({\n id: msg.id,\n role:\n msg.role === \"ai\"\n ? \"assistant\"\n : msg.role === \"human\"\n ? \"user\"\n : msg.role === \"system\"\n ? \"system\"\n : \"tool\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content || \"\"),\n createdAt: new Date().toISOString(),\n })) as Message[];\n\n setState((prev) => ({\n ...prev,\n messages: currentMessages,\n isLoading: false,\n streamingMessage: null,\n }));\n }\n }, []);\n\n /**\n * Loads messages from the thread\n * @param limit - Maximum number of messages to load\n */\n const loadMessages = useCallback(\n async (limit?: number) => {\n if (!threadId) {\n return;\n }\n\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n\n try {\n const fetchedMessages = await client.getMessages({\n threadId,\n limit,\n });\n\n // Reset and initialize the message merger with fetched messages\n chunkMessageMerger.current.reset();\n chunkMessageMerger.current.initialMessages(fetchedMessages);\n\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client, threadId]\n );\n\n /**\n * Clears all messages from state\n */\n const clearMessages = useCallback(() => {\n chunkMessageMerger.current.reset();\n setState((prev) => ({\n ...prev,\n messages: [],\n streamingMessage: null,\n }));\n }, []);\n\n // Load messages when thread ID changes\n useEffect(() => {\n if (threadId) {\n loadMessages();\n } else {\n clearMessages();\n }\n\n // Clean up streaming when component unmounts or thread changes\n return () => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n };\n }, [threadId, loadMessages, clearMessages]);\n\n return {\n ...state,\n sendMessage,\n stopStreaming,\n loadMessages,\n clearMessages,\n };\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { AxiomLatticeProviderProps, ClientConfig } from \"./types\";\nimport { Client } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Context for the Axiom Lattice client\n */\ninterface AxiomLatticeContextValue {\n client: Client | null;\n}\n\n/**\n * Context object for the Axiom Lattice client\n */\nconst AxiomLatticeContext = createContext<AxiomLatticeContextValue>({\n client: null,\n});\n\n/**\n * Provider component for the Axiom Lattice client\n * @param props - Provider props\n * @returns Provider component\n */\nexport function AxiomLatticeProvider({\n config,\n children,\n}: AxiomLatticeProviderProps) {\n // Create client instance\n const client = useMemo(\n () => new Client(config),\n [config.baseURL, config.apiKey, config.assistantId, config.transport]\n );\n\n // Set tenant ID if provided\n useMemo(() => {\n if (config.headers?.[\"x-tenant-id\"]) {\n client.setTenantId(config.headers[\"x-tenant-id\"]);\n }\n }, [client, config.headers]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <AxiomLatticeContext.Provider value={value}>\n {children}\n </AxiomLatticeContext.Provider>\n );\n}\n\n/**\n * Hook to access the Axiom Lattice client\n * @returns The Axiom Lattice client\n * @throws Error if used outside of AxiomLatticeProvider\n */\nexport function useAxiomLattice(): Client {\n const context = useContext(AxiomLatticeContext);\n\n if (!context.client) {\n throw new Error(\n \"useAxiomLattice must be used within an AxiomLatticeProvider\"\n );\n }\n\n return context.client;\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { ThreadState, Thread } from \"../types\";\n\n/**\n * Interface for thread creation options\n */\ninterface CreateThreadOptions {\n metadata?: Record<string, any>;\n}\n\n/**\n * Hook for managing threads\n * @returns Thread state and operations\n */\nexport function useThread(): ThreadState & {\n createThread: (options?: CreateThreadOptions) => Promise<string>;\n getThread: (threadId: string) => Promise<Thread>;\n listThreads: (limit?: number, offset?: number) => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n selectThread: (threadId: string) => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<ThreadState>({\n threads: [],\n currentThread: null,\n isLoading: false,\n error: null,\n });\n\n /**\n * Creates a new thread\n * @param options - Thread creation options\n * @returns Promise resolving to the thread ID\n */\n const createThread = useCallback(\n async (options: CreateThreadOptions = {}) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threadId = await client.createThread(options);\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: [...prev.threads, thread],\n currentThread: thread,\n isLoading: false,\n }));\n\n return threadId;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Gets a thread by ID\n * @param threadId - Thread ID\n * @returns Promise resolving to the thread\n */\n const getThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n\n return thread;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Lists all threads\n * @param limit - Maximum number of threads to return\n * @param offset - Offset for pagination\n */\n const listThreads = useCallback(\n async (limit?: number, offset?: number) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threads = await client.listThreads({ limit, offset });\n\n setState((prev) => ({\n ...prev,\n threads,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client]\n );\n\n /**\n * Deletes a thread\n * @param threadId - Thread ID\n */\n const deleteThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n await client.deleteThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: prev.threads.filter((t) => t.id !== threadId),\n currentThread:\n prev.currentThread?.id === threadId ? null : prev.currentThread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Selects a thread as the current thread\n * @param threadId - Thread ID\n */\n const selectThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n currentThread: thread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n return {\n ...state,\n createThread,\n getThread,\n listThreads,\n deleteThread,\n selectThread,\n };\n}","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { UseAgentStateOptions, UseAgentStateReturn, AgentState } from \"../types\";\n\n/**\n * Hook for monitoring agent state\n * @param threadId - Thread ID to monitor\n * @param options - Agent state options\n * @returns Agent state and control functions\n */\nexport function useAgentState(\n threadId: string | null,\n options: UseAgentStateOptions = {}\n): UseAgentStateReturn {\n const client = useAxiomLattice();\n const [agentState, setAgentState] = useState<AgentState | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pollingIntervalRef = useRef<number | null>(null);\n const pollingTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Default options\n const {\n pollingInterval = 2000, // 2 seconds by default\n autoStart = true,\n } = options;\n\n /**\n * Fetches the current agent state\n */\n const fetchAgentState = useCallback(async () => {\n if (!threadId) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const state = await client.getAgentState(threadId);\n setAgentState(state);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, threadId]);\n\n /**\n * Starts polling for agent state\n */\n const startPolling = useCallback(() => {\n if (!threadId) {\n return;\n }\n\n // Clear any existing polling\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n\n // Generate a unique ID for this polling session\n const pollingId = Date.now();\n pollingIntervalRef.current = pollingId;\n\n // Define the polling function\n const poll = async () => {\n // Check if this polling session is still active\n if (pollingIntervalRef.current !== pollingId) {\n return;\n }\n\n await fetchAgentState();\n\n // Schedule next poll if still active\n if (pollingIntervalRef.current === pollingId) {\n pollingTimeoutRef.current = setTimeout(poll, pollingInterval);\n }\n };\n\n // Start polling\n poll();\n }, [threadId, pollingInterval, fetchAgentState]);\n\n /**\n * Stops polling for agent state\n */\n const stopPolling = useCallback(() => {\n pollingIntervalRef.current = null;\n\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n }, []);\n\n /**\n * Manually refreshes agent state\n */\n const refresh = useCallback(async () => {\n await fetchAgentState();\n }, [fetchAgentState]);\n\n // Start/stop polling when thread ID changes\n useEffect(() => {\n if (threadId && autoStart) {\n startPolling();\n } else {\n stopPolling();\n }\n\n return () => {\n stopPolling();\n };\n }, [threadId, autoStart, startPolling, stopPolling]);\n\n return {\n agentState,\n isLoading,\n error,\n startPolling,\n stopPolling,\n refresh,\n };\n}","import { useState, useCallback } from \"react\";\nimport { useAxiomLattice } from \"../context\";\n\n/**\n * Hook for fetching agent graph visualization\n * @returns Graph state and operations\n */\nexport function useAgentGraph(): {\n graphImage: string | null;\n isLoading: boolean;\n error: Error | null;\n fetchGraph: () => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [graphImage, setGraphImage] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n /**\n * Fetches the agent graph visualization\n */\n const fetchGraph = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const image = await client.getAgentGraph();\n setGraphImage(image);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n return {\n graphImage,\n isLoading,\n error,\n fetchGraph,\n };\n}\n"],"mappings":"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","names":["import_react","import_client_sdk","threadId","stopStreaming","import_react","import_react","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/hooks/useChat.ts","../src/context.tsx","../src/hooks/useThread.ts","../src/hooks/useAgentState.ts","../src/hooks/useAgentGraph.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * Axiom Lattice React SDK - React hooks for the Axiom Lattice Agent Service API\n */\n\n// Export types\nexport * from \"./types\";\n\n// Export hooks\nexport * from \"./hooks/useChat\";\nexport * from \"./hooks/useThread\";\nexport * from \"./hooks/useAgentState\";\nexport * from \"./hooks/useAgentGraph\";\n\n// Export context\nexport * from \"./context\";\n\nexport * from \"@axiom-lattice/protocols\";\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport {\n ChatState,\n ChatStateWithAgent,\n UseChatOptions,\n StreamEventHandlerOptions,\n ChatResponse,\n AgentState,\n} from \"../types\";\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\nimport { createSimpleMessageMerger } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Hook for managing chat interactions with an agent\n *\n * This hook provides functionality for:\n * - Sending messages to an agent\n * - Receiving streaming and non-streaming responses\n * - Loading message history\n * - Managing the chat state\n * - Optionally returning agent state when streaming completes\n *\n * @param threadId - Thread ID to use for chat\n * @param options - Chat options\n * @returns Chat state and operations\n */\nexport function useChat<T extends UseChatOptions>(\n threadId: string | null,\n options: T = {} as T\n): (T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState) & {\n sendMessage: (data: {\n input?: { message: string; files?: { name: string; id: string }[] };\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => Promise<void>;\n stopStreaming: () => void;\n loadMessages: (limit?: number) => Promise<void>;\n clearMessages: () => void;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<\n T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState\n >({\n messages: options.initialMessages || [],\n isLoading: false,\n error: null,\n streamingMessage: null,\n ...(options.enableReturnStateWhenStreamCompleted\n ? { agentState: null }\n : {}),\n } as T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState);\n\n // Reference to the stop function for streaming\n const stopStreamingRef = useRef<(() => void) | null>(null);\n\n // Create a message merger to handle streaming chunks\n const chunkMessageMerger = useRef(createSimpleMessageMerger());\n\n /**\n * Fetches and updates the agent state when streaming completes\n * @param threadId - Thread ID to fetch state for\n */\n const fetchAndUpdateAgentState = useCallback(\n async (threadId: string) => {\n if (!options.enableReturnStateWhenStreamCompleted) return;\n\n try {\n const agentState = await client.getAgentState(threadId);\n setState(\n (prev) =>\n ({\n ...prev,\n agentState,\n }) as T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState\n );\n } catch (error) {\n console.warn(\"Failed to fetch agent state:\", error);\n // Don't throw error, just log it to avoid breaking the chat flow\n }\n },\n [client, options.enableReturnStateWhenStreamCompleted]\n );\n\n // Initialize message merger with initial messages\n useEffect(() => {\n if (options.initialMessages && options.initialMessages.length > 0) {\n chunkMessageMerger.current.initialMessages(options.initialMessages);\n }\n }, [options.initialMessages]);\n\n /**\n * Handles stream events\n * @param chunk - Message chunk\n * @param customHandlers - Custom event handlers\n */\n const handleStreamEvent = useCallback((chunk: MessageChunk) => {\n // Push the chunk to the message merger\n chunkMessageMerger.current.push(chunk);\n\n // Get the updated messages\n const updatedMessages = chunkMessageMerger.current.getMessages();\n\n // Update the state with the updated messages\n // Keep isLoading: true during streaming, only set to false when streaming completes\n setState((prev) => ({\n ...prev,\n messages: updatedMessages,\n isLoading: true,\n streamingMessage: null,\n }));\n }, []);\n\n /**\n * Sends a message to the agent\n * @param data - Message data\n */\n const sendMessage = useCallback(\n async (data: {\n input?: {\n message: string;\n files?: { name: string; id: string }[];\n } & Record<string, any>;\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => {\n if (!threadId) {\n throw new Error(\"Thread ID is required to send messages\");\n }\n\n // Stop any ongoing streaming\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n\n const { input, command, streaming = true } = data;\n const { message, files, ...rest } = input || {};\n\n setState((prev) => ({\n ...prev,\n isLoading: true,\n error: null,\n streamingMessage: null,\n }));\n\n // Create user message\n const userMessage: Message = {\n id: Date.now().toString(),\n content: message || command?.resume?.message || \"\",\n files,\n role: \"human\",\n };\n\n // Add user message to the message merger\n chunkMessageMerger.current.push({\n type: \"human\",\n data: {\n id: userMessage.id,\n content: userMessage.content,\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n }));\n\n try {\n if (options.streaming !== false && streaming !== false) {\n // Use streaming API\n const stopStreaming = client.chat.stream(\n {\n threadId,\n messages: [userMessage as any],\n command,\n ...rest,\n },\n (chunk: MessageChunk) => handleStreamEvent(chunk),\n async () => {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n // Stream completed - fetch agent state if enabled\n if (options.enableReturnStateWhenStreamCompleted) {\n await fetchAndUpdateAgentState(threadId);\n }\n stopStreamingRef.current = null;\n },\n (error: Error) => {\n // Stream error\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error,\n streamingMessage: null,\n }));\n stopStreamingRef.current = null;\n }\n );\n\n stopStreamingRef.current = stopStreaming;\n } else {\n // Use non-streaming API\n const response = await client.chat.send({\n threadId,\n messages: [userMessage as any],\n command,\n ...rest,\n });\n\n // Add the response to the message merger\n chunkMessageMerger.current.initialMessages(response.messages);\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n }\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [\n client,\n threadId,\n options.streaming,\n options.enableReturnStateWhenStreamCompleted,\n handleStreamEvent,\n fetchAndUpdateAgentState,\n ]\n );\n\n /**\n * Stops any ongoing streaming\n */\n const stopStreaming = useCallback(() => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n\n // Get the current messages from the merger\n const currentMessages = chunkMessageMerger.current\n .getMessages()\n .map((msg) => ({\n id: msg.id,\n role:\n msg.role === \"ai\"\n ? \"assistant\"\n : msg.role === \"human\"\n ? \"user\"\n : msg.role === \"system\"\n ? \"system\"\n : \"tool\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content || \"\"),\n createdAt: new Date().toISOString(),\n })) as Message[];\n\n setState((prev) => ({\n ...prev,\n messages: currentMessages,\n isLoading: false,\n streamingMessage: null,\n }));\n }\n }, []);\n\n /**\n * Loads messages from the thread\n * @param limit - Maximum number of messages to load\n */\n const loadMessages = useCallback(\n async (limit?: number) => {\n if (!threadId) {\n return;\n }\n\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n\n try {\n const fetchedMessages = await client.getMessages({\n threadId,\n limit,\n });\n\n // Reset and initialize the message merger with fetched messages\n chunkMessageMerger.current.reset();\n chunkMessageMerger.current.initialMessages(fetchedMessages);\n\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client, threadId]\n );\n\n /**\n * Clears all messages from state\n */\n const clearMessages = useCallback(() => {\n chunkMessageMerger.current.reset();\n setState((prev) => ({\n ...prev,\n messages: [],\n streamingMessage: null,\n }));\n }, []);\n\n // Load messages when thread ID changes\n useEffect(() => {\n if (threadId) {\n loadMessages();\n } else {\n clearMessages();\n }\n\n // Clean up streaming when component unmounts or thread changes\n return () => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n };\n }, [threadId, loadMessages, clearMessages]);\n\n return {\n ...state,\n sendMessage,\n stopStreaming,\n loadMessages,\n clearMessages,\n };\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { AxiomLatticeProviderProps, ClientConfig } from \"./types\";\nimport { Client } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Context for the Axiom Lattice client\n */\ninterface AxiomLatticeContextValue {\n client: Client | null;\n}\n\n/**\n * Context object for the Axiom Lattice client\n */\nconst AxiomLatticeContext = createContext<AxiomLatticeContextValue>({\n client: null,\n});\n\n/**\n * Provider component for the Axiom Lattice client\n * @param props - Provider props\n * @returns Provider component\n */\nexport function AxiomLatticeProvider({\n config,\n children,\n}: AxiomLatticeProviderProps) {\n // Create client instance\n const client = useMemo(\n () => new Client(config),\n [config.baseURL, config.apiKey, config.assistantId, config.transport]\n );\n\n // Set tenant ID if provided\n useMemo(() => {\n if (config.headers?.[\"x-tenant-id\"]) {\n client.setTenantId(config.headers[\"x-tenant-id\"]);\n }\n }, [client, config.headers]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <AxiomLatticeContext.Provider value={value}>\n {children}\n </AxiomLatticeContext.Provider>\n );\n}\n\n/**\n * Hook to access the Axiom Lattice client\n * @returns The Axiom Lattice client\n * @throws Error if used outside of AxiomLatticeProvider\n */\nexport function useAxiomLattice(): Client {\n const context = useContext(AxiomLatticeContext);\n\n if (!context.client) {\n throw new Error(\n \"useAxiomLattice must be used within an AxiomLatticeProvider\"\n );\n }\n\n return context.client;\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { ThreadState, Thread } from \"../types\";\n\n/**\n * Interface for thread creation options\n */\ninterface CreateThreadOptions {\n metadata?: Record<string, any>;\n}\n\n/**\n * Hook for managing threads\n * @returns Thread state and operations\n */\nexport function useThread(): ThreadState & {\n createThread: (options?: CreateThreadOptions) => Promise<string>;\n getThread: (threadId: string) => Promise<Thread>;\n listThreads: (limit?: number, offset?: number) => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n selectThread: (threadId: string) => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<ThreadState>({\n threads: [],\n currentThread: null,\n isLoading: false,\n error: null,\n });\n\n /**\n * Creates a new thread\n * @param options - Thread creation options\n * @returns Promise resolving to the thread ID\n */\n const createThread = useCallback(\n async (options: CreateThreadOptions = {}) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threadId = await client.createThread(options);\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: [...prev.threads, thread],\n currentThread: thread,\n isLoading: false,\n }));\n\n return threadId;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Gets a thread by ID\n * @param threadId - Thread ID\n * @returns Promise resolving to the thread\n */\n const getThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n\n return thread;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Lists all threads\n * @param limit - Maximum number of threads to return\n * @param offset - Offset for pagination\n */\n const listThreads = useCallback(\n async (limit?: number, offset?: number) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threads = await client.listThreads({ limit, offset });\n\n setState((prev) => ({\n ...prev,\n threads,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client]\n );\n\n /**\n * Deletes a thread\n * @param threadId - Thread ID\n */\n const deleteThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n await client.deleteThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: prev.threads.filter((t) => t.id !== threadId),\n currentThread:\n prev.currentThread?.id === threadId ? null : prev.currentThread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Selects a thread as the current thread\n * @param threadId - Thread ID\n */\n const selectThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n currentThread: thread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n return {\n ...state,\n createThread,\n getThread,\n listThreads,\n deleteThread,\n selectThread,\n };\n}","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { UseAgentStateOptions, UseAgentStateReturn, AgentState } from \"../types\";\n\n/**\n * Hook for monitoring agent state\n * @param threadId - Thread ID to monitor\n * @param options - Agent state options\n * @returns Agent state and control functions\n */\nexport function useAgentState(\n threadId: string | null,\n options: UseAgentStateOptions = {}\n): UseAgentStateReturn {\n const client = useAxiomLattice();\n const [agentState, setAgentState] = useState<AgentState | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pollingIntervalRef = useRef<number | null>(null);\n const pollingTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Default options\n const {\n pollingInterval = 2000, // 2 seconds by default\n autoStart = true,\n } = options;\n\n /**\n * Fetches the current agent state\n */\n const fetchAgentState = useCallback(async () => {\n if (!threadId) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const state = await client.getAgentState(threadId);\n setAgentState(state);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, threadId]);\n\n /**\n * Starts polling for agent state\n */\n const startPolling = useCallback(() => {\n if (!threadId) {\n return;\n }\n\n // Clear any existing polling\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n\n // Generate a unique ID for this polling session\n const pollingId = Date.now();\n pollingIntervalRef.current = pollingId;\n\n // Define the polling function\n const poll = async () => {\n // Check if this polling session is still active\n if (pollingIntervalRef.current !== pollingId) {\n return;\n }\n\n await fetchAgentState();\n\n // Schedule next poll if still active\n if (pollingIntervalRef.current === pollingId) {\n pollingTimeoutRef.current = setTimeout(poll, pollingInterval);\n }\n };\n\n // Start polling\n poll();\n }, [threadId, pollingInterval, fetchAgentState]);\n\n /**\n * Stops polling for agent state\n */\n const stopPolling = useCallback(() => {\n pollingIntervalRef.current = null;\n\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n }, []);\n\n /**\n * Manually refreshes agent state\n */\n const refresh = useCallback(async () => {\n await fetchAgentState();\n }, [fetchAgentState]);\n\n // Start/stop polling when thread ID changes\n useEffect(() => {\n if (threadId && autoStart) {\n startPolling();\n } else {\n stopPolling();\n }\n\n return () => {\n stopPolling();\n };\n }, [threadId, autoStart, startPolling, stopPolling]);\n\n return {\n agentState,\n isLoading,\n error,\n startPolling,\n stopPolling,\n refresh,\n };\n}","import { useState, useCallback } from \"react\";\nimport { useAxiomLattice } from \"../context\";\n\n/**\n * Hook for fetching agent graph visualization\n * @returns Graph state and operations\n */\nexport function useAgentGraph(): {\n graphImage: string | null;\n isLoading: boolean;\n error: Error | null;\n fetchGraph: () => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [graphImage, setGraphImage] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n /**\n * Fetches the agent graph visualization\n */\n const fetchGraph = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const image = await client.getAgentGraph();\n setGraphImage(image);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n return {\n graphImage,\n isLoading,\n error,\n fetchGraph,\n };\n}\n"],"mappings":"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","names":["import_react","import_client_sdk","threadId","stopStreaming","import_react","import_react","import_react"]}
|
package/dist/index.mjs
CHANGED
|
@@ -89,7 +89,7 @@ function useChat(threadId, options = {}) {
|
|
|
89
89
|
stopStreamingRef.current = null;
|
|
90
90
|
}
|
|
91
91
|
const { input, command, streaming = true } = data;
|
|
92
|
-
const { message, files } = input || {};
|
|
92
|
+
const { message, files, ...rest } = input || {};
|
|
93
93
|
setState((prev) => ({
|
|
94
94
|
...prev,
|
|
95
95
|
isLoading: true,
|
|
@@ -118,8 +118,9 @@ function useChat(threadId, options = {}) {
|
|
|
118
118
|
const stopStreaming2 = client.chat.stream(
|
|
119
119
|
{
|
|
120
120
|
threadId,
|
|
121
|
-
messages: [userMessage]
|
|
122
|
-
|
|
121
|
+
messages: [userMessage],
|
|
122
|
+
command,
|
|
123
|
+
...rest
|
|
123
124
|
},
|
|
124
125
|
(chunk) => handleStreamEvent(chunk),
|
|
125
126
|
async () => {
|
|
@@ -146,8 +147,9 @@ function useChat(threadId, options = {}) {
|
|
|
146
147
|
} else {
|
|
147
148
|
const response = await client.chat.send({
|
|
148
149
|
threadId,
|
|
149
|
-
messages: [userMessage]
|
|
150
|
-
|
|
150
|
+
messages: [userMessage],
|
|
151
|
+
command,
|
|
152
|
+
...rest
|
|
151
153
|
});
|
|
152
154
|
chunkMessageMerger.current.initialMessages(response.messages);
|
|
153
155
|
setState((prev) => ({
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useChat.ts","../src/context.tsx","../src/hooks/useThread.ts","../src/hooks/useAgentState.ts","../src/hooks/useAgentGraph.ts","../src/index.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport {\n ChatState,\n ChatStateWithAgent,\n UseChatOptions,\n StreamEventHandlerOptions,\n ChatResponse,\n AgentState,\n} from \"../types\";\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\nimport { createSimpleMessageMerger } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Hook for managing chat interactions with an agent\n *\n * This hook provides functionality for:\n * - Sending messages to an agent\n * - Receiving streaming and non-streaming responses\n * - Loading message history\n * - Managing the chat state\n * - Optionally returning agent state when streaming completes\n *\n * @param threadId - Thread ID to use for chat\n * @param options - Chat options\n * @returns Chat state and operations\n */\nexport function useChat<T extends UseChatOptions>(\n threadId: string | null,\n options: T = {} as T\n): (T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState) & {\n sendMessage: (data: {\n input?: { message: string; files?: { name: string; id: string }[] };\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => Promise<void>;\n stopStreaming: () => void;\n loadMessages: (limit?: number) => Promise<void>;\n clearMessages: () => void;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<\n T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState\n >({\n messages: options.initialMessages || [],\n isLoading: false,\n error: null,\n streamingMessage: null,\n ...(options.enableReturnStateWhenStreamCompleted\n ? { agentState: null }\n : {}),\n } as T[\"enableReturnStateWhenStreamCompleted\"] extends true ? ChatStateWithAgent : ChatState);\n\n // Reference to the stop function for streaming\n const stopStreamingRef = useRef<(() => void) | null>(null);\n\n // Create a message merger to handle streaming chunks\n const chunkMessageMerger = useRef(createSimpleMessageMerger());\n\n /**\n * Fetches and updates the agent state when streaming completes\n * @param threadId - Thread ID to fetch state for\n */\n const fetchAndUpdateAgentState = useCallback(\n async (threadId: string) => {\n if (!options.enableReturnStateWhenStreamCompleted) return;\n\n try {\n const agentState = await client.getAgentState(threadId);\n setState(\n (prev) =>\n ({\n ...prev,\n agentState,\n } as T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState)\n );\n } catch (error) {\n console.warn(\"Failed to fetch agent state:\", error);\n // Don't throw error, just log it to avoid breaking the chat flow\n }\n },\n [client, options.enableReturnStateWhenStreamCompleted]\n );\n\n // Initialize message merger with initial messages\n useEffect(() => {\n if (options.initialMessages && options.initialMessages.length > 0) {\n chunkMessageMerger.current.initialMessages(options.initialMessages);\n }\n }, [options.initialMessages]);\n\n /**\n * Handles stream events\n * @param chunk - Message chunk\n * @param customHandlers - Custom event handlers\n */\n const handleStreamEvent = useCallback((chunk: MessageChunk) => {\n // Push the chunk to the message merger\n chunkMessageMerger.current.push(chunk);\n\n // Get the updated messages\n const updatedMessages = chunkMessageMerger.current.getMessages();\n\n // Update the state with the updated messages\n // Keep isLoading: true during streaming, only set to false when streaming completes\n setState((prev) => ({\n ...prev,\n messages: updatedMessages,\n isLoading: true,\n streamingMessage: null,\n }));\n }, []);\n\n /**\n * Sends a message to the agent\n * @param data - Message data\n */\n const sendMessage = useCallback(\n async (data: {\n input?: { message: string; files?: { name: string; id: string }[] };\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => {\n if (!threadId) {\n throw new Error(\"Thread ID is required to send messages\");\n }\n\n // Stop any ongoing streaming\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n\n const { input, command, streaming = true } = data;\n const { message, files } = input || {};\n\n setState((prev) => ({\n ...prev,\n isLoading: true,\n error: null,\n streamingMessage: null,\n }));\n\n // Create user message\n const userMessage: Message = {\n id: Date.now().toString(),\n content: message || command?.resume?.message || \"\",\n files,\n role: \"human\",\n };\n\n // Add user message to the message merger\n chunkMessageMerger.current.push({\n type: \"human\",\n data: {\n id: userMessage.id,\n content: userMessage.content,\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n }));\n\n try {\n if (options.streaming !== false && streaming !== false) {\n // Use streaming API\n const stopStreaming = client.chat.stream(\n {\n threadId,\n messages: [userMessage as any], // Cast to any to avoid type conflicts\n },\n (chunk: MessageChunk) => handleStreamEvent(chunk),\n async () => {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n // Stream completed - fetch agent state if enabled\n if (options.enableReturnStateWhenStreamCompleted) {\n await fetchAndUpdateAgentState(threadId);\n }\n stopStreamingRef.current = null;\n },\n (error: Error) => {\n // Stream error\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error,\n streamingMessage: null,\n }));\n stopStreamingRef.current = null;\n }\n );\n\n stopStreamingRef.current = stopStreaming;\n } else {\n // Use non-streaming API\n const response = await client.chat.send({\n threadId,\n messages: [userMessage as any], // Cast to any to avoid type conflicts\n });\n\n // Add the response to the message merger\n chunkMessageMerger.current.initialMessages(response.messages);\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n }\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [\n client,\n threadId,\n options.streaming,\n options.enableReturnStateWhenStreamCompleted,\n handleStreamEvent,\n fetchAndUpdateAgentState,\n ]\n );\n\n /**\n * Stops any ongoing streaming\n */\n const stopStreaming = useCallback(() => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n\n // Get the current messages from the merger\n const currentMessages = chunkMessageMerger.current\n .getMessages()\n .map((msg) => ({\n id: msg.id,\n role:\n msg.role === \"ai\"\n ? \"assistant\"\n : msg.role === \"human\"\n ? \"user\"\n : msg.role === \"system\"\n ? \"system\"\n : \"tool\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content || \"\"),\n createdAt: new Date().toISOString(),\n })) as Message[];\n\n setState((prev) => ({\n ...prev,\n messages: currentMessages,\n isLoading: false,\n streamingMessage: null,\n }));\n }\n }, []);\n\n /**\n * Loads messages from the thread\n * @param limit - Maximum number of messages to load\n */\n const loadMessages = useCallback(\n async (limit?: number) => {\n if (!threadId) {\n return;\n }\n\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n\n try {\n const fetchedMessages = await client.getMessages({\n threadId,\n limit,\n });\n\n // Reset and initialize the message merger with fetched messages\n chunkMessageMerger.current.reset();\n chunkMessageMerger.current.initialMessages(fetchedMessages);\n\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client, threadId]\n );\n\n /**\n * Clears all messages from state\n */\n const clearMessages = useCallback(() => {\n chunkMessageMerger.current.reset();\n setState((prev) => ({\n ...prev,\n messages: [],\n streamingMessage: null,\n }));\n }, []);\n\n // Load messages when thread ID changes\n useEffect(() => {\n if (threadId) {\n loadMessages();\n } else {\n clearMessages();\n }\n\n // Clean up streaming when component unmounts or thread changes\n return () => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n };\n }, [threadId, loadMessages, clearMessages]);\n\n return {\n ...state,\n sendMessage,\n stopStreaming,\n loadMessages,\n clearMessages,\n };\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { AxiomLatticeProviderProps, ClientConfig } from \"./types\";\nimport { Client } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Context for the Axiom Lattice client\n */\ninterface AxiomLatticeContextValue {\n client: Client | null;\n}\n\n/**\n * Context object for the Axiom Lattice client\n */\nconst AxiomLatticeContext = createContext<AxiomLatticeContextValue>({\n client: null,\n});\n\n/**\n * Provider component for the Axiom Lattice client\n * @param props - Provider props\n * @returns Provider component\n */\nexport function AxiomLatticeProvider({\n config,\n children,\n}: AxiomLatticeProviderProps) {\n // Create client instance\n const client = useMemo(\n () => new Client(config),\n [config.baseURL, config.apiKey, config.assistantId, config.transport]\n );\n\n // Set tenant ID if provided\n useMemo(() => {\n if (config.headers?.[\"x-tenant-id\"]) {\n client.setTenantId(config.headers[\"x-tenant-id\"]);\n }\n }, [client, config.headers]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <AxiomLatticeContext.Provider value={value}>\n {children}\n </AxiomLatticeContext.Provider>\n );\n}\n\n/**\n * Hook to access the Axiom Lattice client\n * @returns The Axiom Lattice client\n * @throws Error if used outside of AxiomLatticeProvider\n */\nexport function useAxiomLattice(): Client {\n const context = useContext(AxiomLatticeContext);\n\n if (!context.client) {\n throw new Error(\n \"useAxiomLattice must be used within an AxiomLatticeProvider\"\n );\n }\n\n return context.client;\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { ThreadState, Thread } from \"../types\";\n\n/**\n * Interface for thread creation options\n */\ninterface CreateThreadOptions {\n metadata?: Record<string, any>;\n}\n\n/**\n * Hook for managing threads\n * @returns Thread state and operations\n */\nexport function useThread(): ThreadState & {\n createThread: (options?: CreateThreadOptions) => Promise<string>;\n getThread: (threadId: string) => Promise<Thread>;\n listThreads: (limit?: number, offset?: number) => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n selectThread: (threadId: string) => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<ThreadState>({\n threads: [],\n currentThread: null,\n isLoading: false,\n error: null,\n });\n\n /**\n * Creates a new thread\n * @param options - Thread creation options\n * @returns Promise resolving to the thread ID\n */\n const createThread = useCallback(\n async (options: CreateThreadOptions = {}) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threadId = await client.createThread(options);\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: [...prev.threads, thread],\n currentThread: thread,\n isLoading: false,\n }));\n\n return threadId;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Gets a thread by ID\n * @param threadId - Thread ID\n * @returns Promise resolving to the thread\n */\n const getThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n\n return thread;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Lists all threads\n * @param limit - Maximum number of threads to return\n * @param offset - Offset for pagination\n */\n const listThreads = useCallback(\n async (limit?: number, offset?: number) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threads = await client.listThreads({ limit, offset });\n\n setState((prev) => ({\n ...prev,\n threads,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client]\n );\n\n /**\n * Deletes a thread\n * @param threadId - Thread ID\n */\n const deleteThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n await client.deleteThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: prev.threads.filter((t) => t.id !== threadId),\n currentThread:\n prev.currentThread?.id === threadId ? null : prev.currentThread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Selects a thread as the current thread\n * @param threadId - Thread ID\n */\n const selectThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n currentThread: thread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n return {\n ...state,\n createThread,\n getThread,\n listThreads,\n deleteThread,\n selectThread,\n };\n}","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { UseAgentStateOptions, UseAgentStateReturn, AgentState } from \"../types\";\n\n/**\n * Hook for monitoring agent state\n * @param threadId - Thread ID to monitor\n * @param options - Agent state options\n * @returns Agent state and control functions\n */\nexport function useAgentState(\n threadId: string | null,\n options: UseAgentStateOptions = {}\n): UseAgentStateReturn {\n const client = useAxiomLattice();\n const [agentState, setAgentState] = useState<AgentState | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pollingIntervalRef = useRef<number | null>(null);\n const pollingTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Default options\n const {\n pollingInterval = 2000, // 2 seconds by default\n autoStart = true,\n } = options;\n\n /**\n * Fetches the current agent state\n */\n const fetchAgentState = useCallback(async () => {\n if (!threadId) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const state = await client.getAgentState(threadId);\n setAgentState(state);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, threadId]);\n\n /**\n * Starts polling for agent state\n */\n const startPolling = useCallback(() => {\n if (!threadId) {\n return;\n }\n\n // Clear any existing polling\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n\n // Generate a unique ID for this polling session\n const pollingId = Date.now();\n pollingIntervalRef.current = pollingId;\n\n // Define the polling function\n const poll = async () => {\n // Check if this polling session is still active\n if (pollingIntervalRef.current !== pollingId) {\n return;\n }\n\n await fetchAgentState();\n\n // Schedule next poll if still active\n if (pollingIntervalRef.current === pollingId) {\n pollingTimeoutRef.current = setTimeout(poll, pollingInterval);\n }\n };\n\n // Start polling\n poll();\n }, [threadId, pollingInterval, fetchAgentState]);\n\n /**\n * Stops polling for agent state\n */\n const stopPolling = useCallback(() => {\n pollingIntervalRef.current = null;\n\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n }, []);\n\n /**\n * Manually refreshes agent state\n */\n const refresh = useCallback(async () => {\n await fetchAgentState();\n }, [fetchAgentState]);\n\n // Start/stop polling when thread ID changes\n useEffect(() => {\n if (threadId && autoStart) {\n startPolling();\n } else {\n stopPolling();\n }\n\n return () => {\n stopPolling();\n };\n }, [threadId, autoStart, startPolling, stopPolling]);\n\n return {\n agentState,\n isLoading,\n error,\n startPolling,\n stopPolling,\n refresh,\n };\n}","import { useState, useCallback } from \"react\";\nimport { useAxiomLattice } from \"../context\";\n\n/**\n * Hook for fetching agent graph visualization\n * @returns Graph state and operations\n */\nexport function useAgentGraph(): {\n graphImage: string | null;\n isLoading: boolean;\n error: Error | null;\n fetchGraph: () => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [graphImage, setGraphImage] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n /**\n * Fetches the agent graph visualization\n */\n const fetchGraph = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const image = await client.getAgentGraph();\n setGraphImage(image);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n return {\n graphImage,\n isLoading,\n error,\n fetchGraph,\n };\n}\n","/**\n * @packageDocumentation\n * Axiom Lattice React SDK - React hooks for the Axiom Lattice Agent Service API\n */\n\n// Export types\nexport * from \"./types\";\n\n// Export hooks\nexport * from \"./hooks/useChat\";\nexport * from \"./hooks/useThread\";\nexport * from \"./hooks/useAgentState\";\nexport * from \"./hooks/useAgentGraph\";\n\n// Export context\nexport * from \"./context\";\n\nexport * from \"@axiom-lattice/protocols\";\n"],"mappings":";AAAA,SAAS,UAAU,aAAa,WAAW,cAAc;;;ACAzD,SAAgB,eAAe,YAAY,eAAe;AAE1D,SAAS,cAAc;AAyCnB;AA7BJ,IAAM,sBAAsB,cAAwC;AAAA,EAClE,QAAQ;AACV,CAAC;AAOM,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AACF,GAA8B;AAE5B,QAAM,SAAS;AAAA,IACb,MAAM,IAAI,OAAO,MAAM;AAAA,IACvB,CAAC,OAAO,SAAS,OAAO,QAAQ,OAAO,aAAa,OAAO,SAAS;AAAA,EACtE;AAGA,UAAQ,MAAM;AACZ,QAAI,OAAO,UAAU,aAAa,GAAG;AACnC,aAAO,YAAY,OAAO,QAAQ,aAAa,CAAC;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,OAAO,CAAC;AAE3B,QAAM,QAAQ,QAAQ,OAAO,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC;AAElD,SACE,oBAAC,oBAAoB,UAApB,EAA6B,OAC3B,UACH;AAEJ;AAOO,SAAS,kBAA0B;AACxC,QAAM,UAAU,WAAW,mBAAmB;AAE9C,MAAI,CAAC,QAAQ,QAAQ;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QAAQ;AACjB;;;ADrDA,SAAS,iCAAiC;AAgBnC,SAAS,QACd,UACA,UAAa,CAAC,GAsBd;AACA,QAAM,SAAS,gBAAgB;AAC/B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAIxB;AAAA,IACA,UAAU,QAAQ,mBAAmB,CAAC;AAAA,IACtC,WAAW;AAAA,IACX,OAAO;AAAA,IACP,kBAAkB;AAAA,IAClB,GAAI,QAAQ,uCACR,EAAE,YAAY,KAAK,IACnB,CAAC;AAAA,EACP,CAA4F;AAG5F,QAAM,mBAAmB,OAA4B,IAAI;AAGzD,QAAM,qBAAqB,OAAO,0BAA0B,CAAC;AAM7D,QAAM,2BAA2B;AAAA,IAC/B,OAAOA,cAAqB;AAC1B,UAAI,CAAC,QAAQ,qCAAsC;AAEnD,UAAI;AACF,cAAM,aAAa,MAAM,OAAO,cAAcA,SAAQ;AACtD;AAAA,UACE,CAAC,UACE;AAAA,YACC,GAAG;AAAA,YACH;AAAA,UACF;AAAA,QAGJ;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,KAAK,gCAAgC,KAAK;AAAA,MAEpD;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,QAAQ,oCAAoC;AAAA,EACvD;AAGA,YAAU,MAAM;AACd,QAAI,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS,GAAG;AACjE,yBAAmB,QAAQ,gBAAgB,QAAQ,eAAe;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,QAAQ,eAAe,CAAC;AAO5B,QAAM,oBAAoB,YAAY,CAAC,UAAwB;AAE7D,uBAAmB,QAAQ,KAAK,KAAK;AAGrC,UAAM,kBAAkB,mBAAmB,QAAQ,YAAY;AAI/D,aAAS,CAAC,UAAU;AAAA,MAClB,GAAG;AAAA,MACH,UAAU;AAAA,MACV,WAAW;AAAA,MACX,kBAAkB;AAAA,IACpB,EAAE;AAAA,EACJ,GAAG,CAAC,CAAC;AAML,QAAM,cAAc;AAAA,IAClB,OAAO,SAcD;AACJ,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAGA,UAAI,iBAAiB,SAAS;AAC5B,yBAAiB,QAAQ;AACzB,yBAAiB,UAAU;AAAA,MAC7B;AAEA,YAAM,EAAE,OAAO,SAAS,YAAY,KAAK,IAAI;AAC7C,YAAM,EAAE,SAAS,MAAM,IAAI,SAAS,CAAC;AAErC,eAAS,CAAC,UAAU;AAAA,QAClB,GAAG;AAAA,QACH,WAAW;AAAA,QACX,OAAO;AAAA,QACP,kBAAkB;AAAA,MACpB,EAAE;AAGF,YAAM,cAAuB;AAAA,QAC3B,IAAI,KAAK,IAAI,EAAE,SAAS;AAAA,QACxB,SAAS,WAAW,SAAS,QAAQ,WAAW;AAAA,QAChD;AAAA,QACA,MAAM;AAAA,MACR;AAGA,yBAAmB,QAAQ,KAAK;AAAA,QAC9B,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,YAAY;AAAA,UAChB,SAAS,YAAY;AAAA,QACvB;AAAA,MACF,CAAC;AAGD,eAAS,CAAC,UAAU;AAAA,QAClB,GAAG;AAAA,QACH,UAAU,mBAAmB,QAAQ,YAAY;AAAA,MACnD,EAAE;AAEF,UAAI;AACF,YAAI,QAAQ,cAAc,SAAS,cAAc,OAAO;AAEtD,gBAAMC,iBAAgB,OAAO,KAAK;AAAA,YAChC;AAAA,cACE;AAAA,cACA,UAAU,CAAC,WAAkB;AAAA;AAAA,YAC/B;AAAA,YACA,CAAC,UAAwB,kBAAkB,KAAK;AAAA,YAChD,YAAY;AACV,uBAAS,CAAC,UAAU;AAAA,gBAClB,GAAG;AAAA,gBACH,WAAW;AAAA,cACb,EAAE;AAEF,kBAAI,QAAQ,sCAAsC;AAChD,sBAAM,yBAAyB,QAAQ;AAAA,cACzC;AACA,+BAAiB,UAAU;AAAA,YAC7B;AAAA,YACA,CAAC,UAAiB;AAEhB,uBAAS,CAAC,UAAU;AAAA,gBAClB,GAAG;AAAA,gBACH,WAAW;AAAA,gBACX;AAAA,gBACA,kBAAkB;AAAA,cACpB,EAAE;AACF,+BAAiB,UAAU;AAAA,YAC7B;AAAA,UACF;AAEA,2BAAiB,UAAUA;AAAA,QAC7B,OAAO;AAEL,gBAAM,WAAW,MAAM,OAAO,KAAK,KAAK;AAAA,YACtC;AAAA,YACA,UAAU,CAAC,WAAkB;AAAA;AAAA,UAC/B,CAAC;AAGD,6BAAmB,QAAQ,gBAAgB,SAAS,QAAQ;AAG5D,mBAAS,CAAC,UAAU;AAAA,YAClB,GAAG;AAAA,YACH,UAAU,mBAAmB,QAAQ,YAAY;AAAA,YACjD,WAAW;AAAA,UACb,EAAE;AAAA,QACJ;AAAA,MACF,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAKA,QAAM,gBAAgB,YAAY,MAAM;AACtC,QAAI,iBAAiB,SAAS;AAC5B,uBAAiB,QAAQ;AACzB,uBAAiB,UAAU;AAG3B,YAAM,kBAAkB,mBAAmB,QACxC,YAAY,EACZ,IAAI,CAAC,SAAS;AAAA,QACb,IAAI,IAAI;AAAA,QACR,MACE,IAAI,SAAS,OACT,cACA,IAAI,SAAS,UACb,SACA,IAAI,SAAS,WACb,WACA;AAAA,QACN,SACE,OAAO,IAAI,YAAY,WACnB,IAAI,UACJ,KAAK,UAAU,IAAI,WAAW,EAAE;AAAA,QACtC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC,EAAE;AAEJ,eAAS,CAAC,UAAU;AAAA,QAClB,GAAG;AAAA,QACH,UAAU;AAAA,QACV,WAAW;AAAA,QACX,kBAAkB;AAAA,MACpB,EAAE;AAAA,IACJ;AAAA,EACF,GAAG,CAAC,CAAC;AAML,QAAM,eAAe;AAAA,IACnB,OAAO,UAAmB;AACxB,UAAI,CAAC,UAAU;AACb;AAAA,MACF;AAEA,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE;AAE9D,UAAI;AACF,cAAM,kBAAkB,MAAM,OAAO,YAAY;AAAA,UAC/C;AAAA,UACA;AAAA,QACF,CAAC;AAGD,2BAAmB,QAAQ,MAAM;AACjC,2BAAmB,QAAQ,gBAAgB,eAAe;AAE1D,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,UAAU,mBAAmB,QAAQ,YAAY;AAAA,UACjD,WAAW;AAAA,QACb,EAAE;AAAA,MACJ,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,QAAQ;AAAA,EACnB;AAKA,QAAM,gBAAgB,YAAY,MAAM;AACtC,uBAAmB,QAAQ,MAAM;AACjC,aAAS,CAAC,UAAU;AAAA,MAClB,GAAG;AAAA,MACH,UAAU,CAAC;AAAA,MACX,kBAAkB;AAAA,IACpB,EAAE;AAAA,EACJ,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,UAAU;AACZ,mBAAa;AAAA,IACf,OAAO;AACL,oBAAc;AAAA,IAChB;AAGA,WAAO,MAAM;AACX,UAAI,iBAAiB,SAAS;AAC5B,yBAAiB,QAAQ;AACzB,yBAAiB,UAAU;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,cAAc,aAAa,CAAC;AAE1C,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AEnXA,SAAS,YAAAC,WAAU,eAAAC,oBAA8B;AAe1C,SAAS,YAMd;AACA,QAAM,SAAS,gBAAgB;AAC/B,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAsB;AAAA,IAC9C,SAAS,CAAC;AAAA,IACV,eAAe;AAAA,IACf,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AAOD,QAAM,eAAeC;AAAA,IACnB,OAAO,UAA+B,CAAC,MAAM;AAC3C,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE;AAC9D,UAAI;AACF,cAAM,WAAW,MAAM,OAAO,aAAa,OAAO;AAClD,cAAM,SAAS,MAAM,OAAO,UAAU,QAAQ;AAE9C,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,SAAS,CAAC,GAAG,KAAK,SAAS,MAAM;AAAA,UACjC,eAAe;AAAA,UACf,WAAW;AAAA,QACb,EAAE;AAEF,eAAO;AAAA,MACT,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AACF,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAOA,QAAM,YAAYA;AAAA,IAChB,OAAO,aAAqB;AAC1B,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE;AAC9D,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,UAAU,QAAQ;AAE9C,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,QACb,EAAE;AAEF,eAAO;AAAA,MACT,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AACF,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAOA,QAAM,cAAcA;AAAA,IAClB,OAAO,OAAgB,WAAoB;AACzC,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE;AAC9D,UAAI;AACF,cAAM,UAAU,MAAM,OAAO,YAAY,EAAE,OAAO,OAAO,CAAC;AAE1D,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH;AAAA,UACA,WAAW;AAAA,QACb,EAAE;AAAA,MACJ,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAMA,QAAM,eAAeA;AAAA,IACnB,OAAO,aAAqB;AAC1B,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE;AAC9D,UAAI;AACF,cAAM,OAAO,aAAa,QAAQ;AAElC,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,SAAS,KAAK,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,QAAQ;AAAA,UACrD,eACE,KAAK,eAAe,OAAO,WAAW,OAAO,KAAK;AAAA,UACpD,WAAW;AAAA,QACb,EAAE;AAAA,MACJ,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AACF,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAMA,QAAM,eAAeA;AAAA,IACnB,OAAO,aAAqB;AAC1B,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE;AAC9D,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,UAAU,QAAQ;AAE9C,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,eAAe;AAAA,UACf,WAAW;AAAA,QACb,EAAE;AAAA,MACJ,SAAS,OAAO;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,WAAW;AAAA,UACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QACjE,EAAE;AACF,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACtLA,SAAS,YAAAC,WAAU,eAAAC,cAAa,aAAAC,YAAW,UAAAC,eAAc;AAUlD,SAAS,cACd,UACA,UAAgC,CAAC,GACZ;AACrB,QAAM,SAAS,gBAAgB;AAC/B,QAAM,CAAC,YAAY,aAAa,IAAIC,UAA4B,IAAI;AACpE,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAkB,KAAK;AACzD,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AAErD,QAAM,qBAAqBC,QAAsB,IAAI;AACrD,QAAM,oBAAoBA,QAA8B,IAAI;AAG5D,QAAM;AAAA,IACJ,kBAAkB;AAAA;AAAA,IAClB,YAAY;AAAA,EACd,IAAI;AAKJ,QAAM,kBAAkBC,aAAY,YAAY;AAC9C,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,cAAc,QAAQ;AACjD,oBAAc,KAAK;AAAA,IACrB,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAKrB,QAAM,eAAeA,aAAY,MAAM;AACrC,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAGA,QAAI,kBAAkB,SAAS;AAC7B,mBAAa,kBAAkB,OAAO;AACtC,wBAAkB,UAAU;AAAA,IAC9B;AAGA,UAAM,YAAY,KAAK,IAAI;AAC3B,uBAAmB,UAAU;AAG7B,UAAM,OAAO,YAAY;AAEvB,UAAI,mBAAmB,YAAY,WAAW;AAC5C;AAAA,MACF;AAEA,YAAM,gBAAgB;AAGtB,UAAI,mBAAmB,YAAY,WAAW;AAC5C,0BAAkB,UAAU,WAAW,MAAM,eAAe;AAAA,MAC9D;AAAA,IACF;AAGA,SAAK;AAAA,EACP,GAAG,CAAC,UAAU,iBAAiB,eAAe,CAAC;AAK/C,QAAM,cAAcA,aAAY,MAAM;AACpC,uBAAmB,UAAU;AAE7B,QAAI,kBAAkB,SAAS;AAC7B,mBAAa,kBAAkB,OAAO;AACtC,wBAAkB,UAAU;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,CAAC;AAKL,QAAM,UAAUA,aAAY,YAAY;AACtC,UAAM,gBAAgB;AAAA,EACxB,GAAG,CAAC,eAAe,CAAC;AAGpB,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY,WAAW;AACzB,mBAAa;AAAA,IACf,OAAO;AACL,kBAAY;AAAA,IACd;AAEA,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,UAAU,WAAW,cAAc,WAAW,CAAC;AAEnD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC9HA,SAAS,YAAAC,WAAU,eAAAC,oBAAmB;AAO/B,SAAS,gBAKd;AACA,QAAM,SAAS,gBAAgB;AAC/B,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAwB,IAAI;AAChE,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAkB,KAAK;AACzD,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AAKrD,QAAM,aAAaC,aAAY,YAAY;AACzC,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,cAAc;AACzC,oBAAc,KAAK;AAAA,IACrB,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACxBA,cAAc;","names":["threadId","stopStreaming","useState","useCallback","useState","useCallback","useState","useCallback","useEffect","useRef","useState","useRef","useCallback","useEffect","useState","useCallback","useState","useCallback"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useChat.ts","../src/context.tsx","../src/hooks/useThread.ts","../src/hooks/useAgentState.ts","../src/hooks/useAgentGraph.ts","../src/index.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport {\n ChatState,\n ChatStateWithAgent,\n UseChatOptions,\n StreamEventHandlerOptions,\n ChatResponse,\n AgentState,\n} from \"../types\";\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\nimport { createSimpleMessageMerger } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Hook for managing chat interactions with an agent\n *\n * This hook provides functionality for:\n * - Sending messages to an agent\n * - Receiving streaming and non-streaming responses\n * - Loading message history\n * - Managing the chat state\n * - Optionally returning agent state when streaming completes\n *\n * @param threadId - Thread ID to use for chat\n * @param options - Chat options\n * @returns Chat state and operations\n */\nexport function useChat<T extends UseChatOptions>(\n threadId: string | null,\n options: T = {} as T\n): (T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState) & {\n sendMessage: (data: {\n input?: { message: string; files?: { name: string; id: string }[] };\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => Promise<void>;\n stopStreaming: () => void;\n loadMessages: (limit?: number) => Promise<void>;\n clearMessages: () => void;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<\n T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState\n >({\n messages: options.initialMessages || [],\n isLoading: false,\n error: null,\n streamingMessage: null,\n ...(options.enableReturnStateWhenStreamCompleted\n ? { agentState: null }\n : {}),\n } as T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState);\n\n // Reference to the stop function for streaming\n const stopStreamingRef = useRef<(() => void) | null>(null);\n\n // Create a message merger to handle streaming chunks\n const chunkMessageMerger = useRef(createSimpleMessageMerger());\n\n /**\n * Fetches and updates the agent state when streaming completes\n * @param threadId - Thread ID to fetch state for\n */\n const fetchAndUpdateAgentState = useCallback(\n async (threadId: string) => {\n if (!options.enableReturnStateWhenStreamCompleted) return;\n\n try {\n const agentState = await client.getAgentState(threadId);\n setState(\n (prev) =>\n ({\n ...prev,\n agentState,\n }) as T[\"enableReturnStateWhenStreamCompleted\"] extends true\n ? ChatStateWithAgent\n : ChatState\n );\n } catch (error) {\n console.warn(\"Failed to fetch agent state:\", error);\n // Don't throw error, just log it to avoid breaking the chat flow\n }\n },\n [client, options.enableReturnStateWhenStreamCompleted]\n );\n\n // Initialize message merger with initial messages\n useEffect(() => {\n if (options.initialMessages && options.initialMessages.length > 0) {\n chunkMessageMerger.current.initialMessages(options.initialMessages);\n }\n }, [options.initialMessages]);\n\n /**\n * Handles stream events\n * @param chunk - Message chunk\n * @param customHandlers - Custom event handlers\n */\n const handleStreamEvent = useCallback((chunk: MessageChunk) => {\n // Push the chunk to the message merger\n chunkMessageMerger.current.push(chunk);\n\n // Get the updated messages\n const updatedMessages = chunkMessageMerger.current.getMessages();\n\n // Update the state with the updated messages\n // Keep isLoading: true during streaming, only set to false when streaming completes\n setState((prev) => ({\n ...prev,\n messages: updatedMessages,\n isLoading: true,\n streamingMessage: null,\n }));\n }, []);\n\n /**\n * Sends a message to the agent\n * @param data - Message data\n */\n const sendMessage = useCallback(\n async (data: {\n input?: {\n message: string;\n files?: { name: string; id: string }[];\n } & Record<string, any>;\n command?: {\n resume?: {\n action: string;\n data: Record<string, any> & {\n config?: { thread_id?: string; work_log_id?: string };\n };\n message: string;\n };\n update?: any;\n send?: { node: string; input: any };\n };\n streaming?: boolean;\n }) => {\n if (!threadId) {\n throw new Error(\"Thread ID is required to send messages\");\n }\n\n // Stop any ongoing streaming\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n\n const { input, command, streaming = true } = data;\n const { message, files, ...rest } = input || {};\n\n setState((prev) => ({\n ...prev,\n isLoading: true,\n error: null,\n streamingMessage: null,\n }));\n\n // Create user message\n const userMessage: Message = {\n id: Date.now().toString(),\n content: message || command?.resume?.message || \"\",\n files,\n role: \"human\",\n };\n\n // Add user message to the message merger\n chunkMessageMerger.current.push({\n type: \"human\",\n data: {\n id: userMessage.id,\n content: userMessage.content,\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n }));\n\n try {\n if (options.streaming !== false && streaming !== false) {\n // Use streaming API\n const stopStreaming = client.chat.stream(\n {\n threadId,\n messages: [userMessage as any],\n command,\n ...rest,\n },\n (chunk: MessageChunk) => handleStreamEvent(chunk),\n async () => {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n // Stream completed - fetch agent state if enabled\n if (options.enableReturnStateWhenStreamCompleted) {\n await fetchAndUpdateAgentState(threadId);\n }\n stopStreamingRef.current = null;\n },\n (error: Error) => {\n // Stream error\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error,\n streamingMessage: null,\n }));\n stopStreamingRef.current = null;\n }\n );\n\n stopStreamingRef.current = stopStreaming;\n } else {\n // Use non-streaming API\n const response = await client.chat.send({\n threadId,\n messages: [userMessage as any],\n command,\n ...rest,\n });\n\n // Add the response to the message merger\n chunkMessageMerger.current.initialMessages(response.messages);\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n }\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [\n client,\n threadId,\n options.streaming,\n options.enableReturnStateWhenStreamCompleted,\n handleStreamEvent,\n fetchAndUpdateAgentState,\n ]\n );\n\n /**\n * Stops any ongoing streaming\n */\n const stopStreaming = useCallback(() => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n\n // Get the current messages from the merger\n const currentMessages = chunkMessageMerger.current\n .getMessages()\n .map((msg) => ({\n id: msg.id,\n role:\n msg.role === \"ai\"\n ? \"assistant\"\n : msg.role === \"human\"\n ? \"user\"\n : msg.role === \"system\"\n ? \"system\"\n : \"tool\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : JSON.stringify(msg.content || \"\"),\n createdAt: new Date().toISOString(),\n })) as Message[];\n\n setState((prev) => ({\n ...prev,\n messages: currentMessages,\n isLoading: false,\n streamingMessage: null,\n }));\n }\n }, []);\n\n /**\n * Loads messages from the thread\n * @param limit - Maximum number of messages to load\n */\n const loadMessages = useCallback(\n async (limit?: number) => {\n if (!threadId) {\n return;\n }\n\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n\n try {\n const fetchedMessages = await client.getMessages({\n threadId,\n limit,\n });\n\n // Reset and initialize the message merger with fetched messages\n chunkMessageMerger.current.reset();\n chunkMessageMerger.current.initialMessages(fetchedMessages);\n\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages(),\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client, threadId]\n );\n\n /**\n * Clears all messages from state\n */\n const clearMessages = useCallback(() => {\n chunkMessageMerger.current.reset();\n setState((prev) => ({\n ...prev,\n messages: [],\n streamingMessage: null,\n }));\n }, []);\n\n // Load messages when thread ID changes\n useEffect(() => {\n if (threadId) {\n loadMessages();\n } else {\n clearMessages();\n }\n\n // Clean up streaming when component unmounts or thread changes\n return () => {\n if (stopStreamingRef.current) {\n stopStreamingRef.current();\n stopStreamingRef.current = null;\n }\n };\n }, [threadId, loadMessages, clearMessages]);\n\n return {\n ...state,\n sendMessage,\n stopStreaming,\n loadMessages,\n clearMessages,\n };\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { AxiomLatticeProviderProps, ClientConfig } from \"./types\";\nimport { Client } from \"@axiom-lattice/client-sdk\";\n\n/**\n * Context for the Axiom Lattice client\n */\ninterface AxiomLatticeContextValue {\n client: Client | null;\n}\n\n/**\n * Context object for the Axiom Lattice client\n */\nconst AxiomLatticeContext = createContext<AxiomLatticeContextValue>({\n client: null,\n});\n\n/**\n * Provider component for the Axiom Lattice client\n * @param props - Provider props\n * @returns Provider component\n */\nexport function AxiomLatticeProvider({\n config,\n children,\n}: AxiomLatticeProviderProps) {\n // Create client instance\n const client = useMemo(\n () => new Client(config),\n [config.baseURL, config.apiKey, config.assistantId, config.transport]\n );\n\n // Set tenant ID if provided\n useMemo(() => {\n if (config.headers?.[\"x-tenant-id\"]) {\n client.setTenantId(config.headers[\"x-tenant-id\"]);\n }\n }, [client, config.headers]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return (\n <AxiomLatticeContext.Provider value={value}>\n {children}\n </AxiomLatticeContext.Provider>\n );\n}\n\n/**\n * Hook to access the Axiom Lattice client\n * @returns The Axiom Lattice client\n * @throws Error if used outside of AxiomLatticeProvider\n */\nexport function useAxiomLattice(): Client {\n const context = useContext(AxiomLatticeContext);\n\n if (!context.client) {\n throw new Error(\n \"useAxiomLattice must be used within an AxiomLatticeProvider\"\n );\n }\n\n return context.client;\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { ThreadState, Thread } from \"../types\";\n\n/**\n * Interface for thread creation options\n */\ninterface CreateThreadOptions {\n metadata?: Record<string, any>;\n}\n\n/**\n * Hook for managing threads\n * @returns Thread state and operations\n */\nexport function useThread(): ThreadState & {\n createThread: (options?: CreateThreadOptions) => Promise<string>;\n getThread: (threadId: string) => Promise<Thread>;\n listThreads: (limit?: number, offset?: number) => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n selectThread: (threadId: string) => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [state, setState] = useState<ThreadState>({\n threads: [],\n currentThread: null,\n isLoading: false,\n error: null,\n });\n\n /**\n * Creates a new thread\n * @param options - Thread creation options\n * @returns Promise resolving to the thread ID\n */\n const createThread = useCallback(\n async (options: CreateThreadOptions = {}) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threadId = await client.createThread(options);\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: [...prev.threads, thread],\n currentThread: thread,\n isLoading: false,\n }));\n\n return threadId;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Gets a thread by ID\n * @param threadId - Thread ID\n * @returns Promise resolving to the thread\n */\n const getThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n isLoading: false,\n }));\n\n return thread;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Lists all threads\n * @param limit - Maximum number of threads to return\n * @param offset - Offset for pagination\n */\n const listThreads = useCallback(\n async (limit?: number, offset?: number) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const threads = await client.listThreads({ limit, offset });\n\n setState((prev) => ({\n ...prev,\n threads,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n },\n [client]\n );\n\n /**\n * Deletes a thread\n * @param threadId - Thread ID\n */\n const deleteThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n await client.deleteThread(threadId);\n\n setState((prev) => ({\n ...prev,\n threads: prev.threads.filter((t) => t.id !== threadId),\n currentThread:\n prev.currentThread?.id === threadId ? null : prev.currentThread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n /**\n * Selects a thread as the current thread\n * @param threadId - Thread ID\n */\n const selectThread = useCallback(\n async (threadId: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n try {\n const thread = await client.getThread(threadId);\n\n setState((prev) => ({\n ...prev,\n currentThread: thread,\n isLoading: false,\n }));\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n throw error;\n }\n },\n [client]\n );\n\n return {\n ...state,\n createThread,\n getThread,\n listThreads,\n deleteThread,\n selectThread,\n };\n}","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useAxiomLattice } from \"../context\";\nimport { UseAgentStateOptions, UseAgentStateReturn, AgentState } from \"../types\";\n\n/**\n * Hook for monitoring agent state\n * @param threadId - Thread ID to monitor\n * @param options - Agent state options\n * @returns Agent state and control functions\n */\nexport function useAgentState(\n threadId: string | null,\n options: UseAgentStateOptions = {}\n): UseAgentStateReturn {\n const client = useAxiomLattice();\n const [agentState, setAgentState] = useState<AgentState | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pollingIntervalRef = useRef<number | null>(null);\n const pollingTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Default options\n const {\n pollingInterval = 2000, // 2 seconds by default\n autoStart = true,\n } = options;\n\n /**\n * Fetches the current agent state\n */\n const fetchAgentState = useCallback(async () => {\n if (!threadId) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const state = await client.getAgentState(threadId);\n setAgentState(state);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, threadId]);\n\n /**\n * Starts polling for agent state\n */\n const startPolling = useCallback(() => {\n if (!threadId) {\n return;\n }\n\n // Clear any existing polling\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n\n // Generate a unique ID for this polling session\n const pollingId = Date.now();\n pollingIntervalRef.current = pollingId;\n\n // Define the polling function\n const poll = async () => {\n // Check if this polling session is still active\n if (pollingIntervalRef.current !== pollingId) {\n return;\n }\n\n await fetchAgentState();\n\n // Schedule next poll if still active\n if (pollingIntervalRef.current === pollingId) {\n pollingTimeoutRef.current = setTimeout(poll, pollingInterval);\n }\n };\n\n // Start polling\n poll();\n }, [threadId, pollingInterval, fetchAgentState]);\n\n /**\n * Stops polling for agent state\n */\n const stopPolling = useCallback(() => {\n pollingIntervalRef.current = null;\n\n if (pollingTimeoutRef.current) {\n clearTimeout(pollingTimeoutRef.current);\n pollingTimeoutRef.current = null;\n }\n }, []);\n\n /**\n * Manually refreshes agent state\n */\n const refresh = useCallback(async () => {\n await fetchAgentState();\n }, [fetchAgentState]);\n\n // Start/stop polling when thread ID changes\n useEffect(() => {\n if (threadId && autoStart) {\n startPolling();\n } else {\n stopPolling();\n }\n\n return () => {\n stopPolling();\n };\n }, [threadId, autoStart, startPolling, stopPolling]);\n\n return {\n agentState,\n isLoading,\n error,\n startPolling,\n stopPolling,\n refresh,\n };\n}","import { useState, useCallback } from \"react\";\nimport { useAxiomLattice } from \"../context\";\n\n/**\n * Hook for fetching agent graph visualization\n * @returns Graph state and operations\n */\nexport function useAgentGraph(): {\n graphImage: string | null;\n isLoading: boolean;\n error: Error | null;\n fetchGraph: () => Promise<void>;\n} {\n const client = useAxiomLattice();\n const [graphImage, setGraphImage] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n /**\n * Fetches the agent graph visualization\n */\n const fetchGraph = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const image = await client.getAgentGraph();\n setGraphImage(image);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n return {\n graphImage,\n isLoading,\n error,\n fetchGraph,\n };\n}\n","/**\n * @packageDocumentation\n * Axiom Lattice React SDK - React hooks for the Axiom Lattice Agent Service API\n */\n\n// Export types\nexport * from \"./types\";\n\n// Export hooks\nexport * from \"./hooks/useChat\";\nexport * from \"./hooks/useThread\";\nexport * from \"./hooks/useAgentState\";\nexport * from \"./hooks/useAgentGraph\";\n\n// Export context\nexport * from \"./context\";\n\nexport * from \"@axiom-lattice/protocols\";\n"],"mappings":"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","names":["threadId","stopStreaming","useState","useCallback","useState","useCallback","useState","useCallback","useEffect","useRef","useState","useRef","useCallback","useEffect","useState","useCallback","useState","useCallback"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axiom-lattice/react-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.40",
|
|
4
4
|
"description": "React hooks for interacting with the Axiom Lattice Agent Service API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"react": "^18.0.0",
|
|
38
38
|
"react-dom": "^18.0.0",
|
|
39
|
-
"@axiom-lattice/client-sdk": "1.0.
|
|
40
|
-
"@axiom-lattice/protocols": "1.0.
|
|
39
|
+
"@axiom-lattice/client-sdk": "1.0.40",
|
|
40
|
+
"@axiom-lattice/protocols": "1.0.40"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"react": ">=16.8.0",
|