@axiom-lattice/react-sdk 1.0.22 → 1.0.23
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.d.mts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +36 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +36 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -86,6 +86,15 @@ interface ChatState {
|
|
|
86
86
|
*/
|
|
87
87
|
streamingMessage: MessageChunk | null;
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Extended chat state with agent state
|
|
91
|
+
*/
|
|
92
|
+
interface ChatStateWithAgent extends ChatState {
|
|
93
|
+
/**
|
|
94
|
+
* Current agent state (when enableReturnStateWhenStreamCompleted is true)
|
|
95
|
+
*/
|
|
96
|
+
agentState: AgentState | null;
|
|
97
|
+
}
|
|
89
98
|
/**
|
|
90
99
|
* Chat hook options
|
|
91
100
|
*/
|
|
@@ -98,6 +107,10 @@ interface UseChatOptions {
|
|
|
98
107
|
* Initial messages to populate the chat with
|
|
99
108
|
*/
|
|
100
109
|
initialMessages?: Message[];
|
|
110
|
+
/**
|
|
111
|
+
* Whether to return and update agent state when streaming is completed
|
|
112
|
+
*/
|
|
113
|
+
enableReturnStateWhenStreamCompleted?: boolean;
|
|
101
114
|
}
|
|
102
115
|
/**
|
|
103
116
|
* Thread hook state
|
|
@@ -196,12 +209,13 @@ interface StreamEventHandlerOptions {
|
|
|
196
209
|
* - Receiving streaming and non-streaming responses
|
|
197
210
|
* - Loading message history
|
|
198
211
|
* - Managing the chat state
|
|
212
|
+
* - Optionally returning agent state when streaming completes
|
|
199
213
|
*
|
|
200
214
|
* @param threadId - Thread ID to use for chat
|
|
201
215
|
* @param options - Chat options
|
|
202
216
|
* @returns Chat state and operations
|
|
203
217
|
*/
|
|
204
|
-
declare function useChat(threadId: string | null, options?:
|
|
218
|
+
declare function useChat<T extends UseChatOptions>(threadId: string | null, options?: T): (T["enableReturnStateWhenStreamCompleted"] extends true ? ChatStateWithAgent : ChatState) & {
|
|
205
219
|
sendMessage: (data: {
|
|
206
220
|
input?: {
|
|
207
221
|
message: string;
|
|
@@ -284,4 +298,4 @@ declare function AxiomLatticeProvider({ config, children, }: AxiomLatticeProvide
|
|
|
284
298
|
*/
|
|
285
299
|
declare function useAxiomLattice(): Client;
|
|
286
300
|
|
|
287
|
-
export { type AgentState, AxiomLatticeProvider, type AxiomLatticeProviderProps, type ChatResponse, type ChatState, type ClientConfig, type StreamEventHandlerOptions, type Thread, type ThreadState, type UseAgentStateOptions, type UseAgentStateReturn, type UseChatOptions, useAgentGraph, useAgentState, useAxiomLattice, useChat, useThread };
|
|
301
|
+
export { type AgentState, AxiomLatticeProvider, type AxiomLatticeProviderProps, type ChatResponse, type ChatState, type ChatStateWithAgent, type ClientConfig, type StreamEventHandlerOptions, type Thread, type ThreadState, type UseAgentStateOptions, type UseAgentStateReturn, type UseChatOptions, useAgentGraph, useAgentState, useAxiomLattice, useChat, useThread };
|
package/dist/index.d.ts
CHANGED
|
@@ -86,6 +86,15 @@ interface ChatState {
|
|
|
86
86
|
*/
|
|
87
87
|
streamingMessage: MessageChunk | null;
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Extended chat state with agent state
|
|
91
|
+
*/
|
|
92
|
+
interface ChatStateWithAgent extends ChatState {
|
|
93
|
+
/**
|
|
94
|
+
* Current agent state (when enableReturnStateWhenStreamCompleted is true)
|
|
95
|
+
*/
|
|
96
|
+
agentState: AgentState | null;
|
|
97
|
+
}
|
|
89
98
|
/**
|
|
90
99
|
* Chat hook options
|
|
91
100
|
*/
|
|
@@ -98,6 +107,10 @@ interface UseChatOptions {
|
|
|
98
107
|
* Initial messages to populate the chat with
|
|
99
108
|
*/
|
|
100
109
|
initialMessages?: Message[];
|
|
110
|
+
/**
|
|
111
|
+
* Whether to return and update agent state when streaming is completed
|
|
112
|
+
*/
|
|
113
|
+
enableReturnStateWhenStreamCompleted?: boolean;
|
|
101
114
|
}
|
|
102
115
|
/**
|
|
103
116
|
* Thread hook state
|
|
@@ -196,12 +209,13 @@ interface StreamEventHandlerOptions {
|
|
|
196
209
|
* - Receiving streaming and non-streaming responses
|
|
197
210
|
* - Loading message history
|
|
198
211
|
* - Managing the chat state
|
|
212
|
+
* - Optionally returning agent state when streaming completes
|
|
199
213
|
*
|
|
200
214
|
* @param threadId - Thread ID to use for chat
|
|
201
215
|
* @param options - Chat options
|
|
202
216
|
* @returns Chat state and operations
|
|
203
217
|
*/
|
|
204
|
-
declare function useChat(threadId: string | null, options?:
|
|
218
|
+
declare function useChat<T extends UseChatOptions>(threadId: string | null, options?: T): (T["enableReturnStateWhenStreamCompleted"] extends true ? ChatStateWithAgent : ChatState) & {
|
|
205
219
|
sendMessage: (data: {
|
|
206
220
|
input?: {
|
|
207
221
|
message: string;
|
|
@@ -284,4 +298,4 @@ declare function AxiomLatticeProvider({ config, children, }: AxiomLatticeProvide
|
|
|
284
298
|
*/
|
|
285
299
|
declare function useAxiomLattice(): Client;
|
|
286
300
|
|
|
287
|
-
export { type AgentState, AxiomLatticeProvider, type AxiomLatticeProviderProps, type ChatResponse, type ChatState, type ClientConfig, type StreamEventHandlerOptions, type Thread, type ThreadState, type UseAgentStateOptions, type UseAgentStateReturn, type UseChatOptions, useAgentGraph, useAgentState, useAxiomLattice, useChat, useThread };
|
|
301
|
+
export { type AgentState, AxiomLatticeProvider, type AxiomLatticeProviderProps, type ChatResponse, type ChatState, type ChatStateWithAgent, type ClientConfig, type StreamEventHandlerOptions, type Thread, type ThreadState, type UseAgentStateOptions, type UseAgentStateReturn, type UseChatOptions, useAgentGraph, useAgentState, useAxiomLattice, useChat, useThread };
|
package/dist/index.js
CHANGED
|
@@ -74,10 +74,28 @@ function useChat(threadId, options = {}) {
|
|
|
74
74
|
messages: options.initialMessages || [],
|
|
75
75
|
isLoading: false,
|
|
76
76
|
error: null,
|
|
77
|
-
streamingMessage: null
|
|
77
|
+
streamingMessage: null,
|
|
78
|
+
...options.enableReturnStateWhenStreamCompleted ? { agentState: null } : {}
|
|
78
79
|
});
|
|
79
80
|
const stopStreamingRef = (0, import_react2.useRef)(null);
|
|
80
81
|
const chunkMessageMerger = (0, import_react2.useRef)((0, import_client_sdk2.createSimpleMessageMerger)());
|
|
82
|
+
const fetchAndUpdateAgentState = (0, import_react2.useCallback)(
|
|
83
|
+
async (threadId2) => {
|
|
84
|
+
if (!options.enableReturnStateWhenStreamCompleted) return;
|
|
85
|
+
try {
|
|
86
|
+
const agentState = await client.getAgentState(threadId2);
|
|
87
|
+
setState(
|
|
88
|
+
(prev) => ({
|
|
89
|
+
...prev,
|
|
90
|
+
agentState
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.warn("Failed to fetch agent state:", error);
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
[client, options.enableReturnStateWhenStreamCompleted]
|
|
98
|
+
);
|
|
81
99
|
(0, import_react2.useEffect)(() => {
|
|
82
100
|
if (options.initialMessages && options.initialMessages.length > 0) {
|
|
83
101
|
chunkMessageMerger.current.initialMessages(options.initialMessages);
|
|
@@ -89,7 +107,7 @@ function useChat(threadId, options = {}) {
|
|
|
89
107
|
setState((prev) => ({
|
|
90
108
|
...prev,
|
|
91
109
|
messages: updatedMessages,
|
|
92
|
-
isLoading:
|
|
110
|
+
isLoading: true,
|
|
93
111
|
streamingMessage: null
|
|
94
112
|
}));
|
|
95
113
|
}, []);
|
|
@@ -136,7 +154,14 @@ function useChat(threadId, options = {}) {
|
|
|
136
154
|
// Cast to any to avoid type conflicts
|
|
137
155
|
},
|
|
138
156
|
(chunk) => handleStreamEvent(chunk),
|
|
139
|
-
() => {
|
|
157
|
+
async () => {
|
|
158
|
+
setState((prev) => ({
|
|
159
|
+
...prev,
|
|
160
|
+
isLoading: false
|
|
161
|
+
}));
|
|
162
|
+
if (options.enableReturnStateWhenStreamCompleted) {
|
|
163
|
+
await fetchAndUpdateAgentState(threadId);
|
|
164
|
+
}
|
|
140
165
|
stopStreamingRef.current = null;
|
|
141
166
|
},
|
|
142
167
|
(error) => {
|
|
@@ -182,7 +207,14 @@ function useChat(threadId, options = {}) {
|
|
|
182
207
|
}));
|
|
183
208
|
}
|
|
184
209
|
},
|
|
185
|
-
[
|
|
210
|
+
[
|
|
211
|
+
client,
|
|
212
|
+
threadId,
|
|
213
|
+
options.streaming,
|
|
214
|
+
options.enableReturnStateWhenStreamCompleted,
|
|
215
|
+
handleStreamEvent,
|
|
216
|
+
fetchAndUpdateAgentState
|
|
217
|
+
]
|
|
186
218
|
);
|
|
187
219
|
const stopStreaming = (0, import_react2.useCallback)(() => {
|
|
188
220
|
if (stopStreamingRef.current) {
|
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 UseChatOptions,\n StreamEventHandlerOptions,\n ChatResponse,\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 *\n * @param threadId - Thread ID to use for chat\n * @param options - Chat options\n * @returns Chat state and operations\n */\nexport function useChat(\n threadId: string | null,\n options: UseChatOptions = {}\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<ChatState>({\n messages: options.initialMessages || [],\n isLoading: false,\n error: null,\n streamingMessage: null,\n });\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 // 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 setState((prev) => ({\n ...prev,\n messages: updatedMessages,\n isLoading: false,\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 () => {\n // Stream completed\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.push({\n type: \"ai\",\n data: {\n id: response.message.id || `assistant-${Date.now()}`,\n content: response.message.content || \"\",\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages().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 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 [client, threadId, options.streaming, handleStreamEvent]\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","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 ? 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.push({\n type: \"ai\",\n data: {\n id: response.message.id || `assistant-${Date.now()}`,\n content: response.message.content || \"\",\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages().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 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
|
@@ -42,10 +42,28 @@ function useChat(threadId, options = {}) {
|
|
|
42
42
|
messages: options.initialMessages || [],
|
|
43
43
|
isLoading: false,
|
|
44
44
|
error: null,
|
|
45
|
-
streamingMessage: null
|
|
45
|
+
streamingMessage: null,
|
|
46
|
+
...options.enableReturnStateWhenStreamCompleted ? { agentState: null } : {}
|
|
46
47
|
});
|
|
47
48
|
const stopStreamingRef = useRef(null);
|
|
48
49
|
const chunkMessageMerger = useRef(createSimpleMessageMerger());
|
|
50
|
+
const fetchAndUpdateAgentState = useCallback(
|
|
51
|
+
async (threadId2) => {
|
|
52
|
+
if (!options.enableReturnStateWhenStreamCompleted) return;
|
|
53
|
+
try {
|
|
54
|
+
const agentState = await client.getAgentState(threadId2);
|
|
55
|
+
setState(
|
|
56
|
+
(prev) => ({
|
|
57
|
+
...prev,
|
|
58
|
+
agentState
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
console.warn("Failed to fetch agent state:", error);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
[client, options.enableReturnStateWhenStreamCompleted]
|
|
66
|
+
);
|
|
49
67
|
useEffect(() => {
|
|
50
68
|
if (options.initialMessages && options.initialMessages.length > 0) {
|
|
51
69
|
chunkMessageMerger.current.initialMessages(options.initialMessages);
|
|
@@ -57,7 +75,7 @@ function useChat(threadId, options = {}) {
|
|
|
57
75
|
setState((prev) => ({
|
|
58
76
|
...prev,
|
|
59
77
|
messages: updatedMessages,
|
|
60
|
-
isLoading:
|
|
78
|
+
isLoading: true,
|
|
61
79
|
streamingMessage: null
|
|
62
80
|
}));
|
|
63
81
|
}, []);
|
|
@@ -104,7 +122,14 @@ function useChat(threadId, options = {}) {
|
|
|
104
122
|
// Cast to any to avoid type conflicts
|
|
105
123
|
},
|
|
106
124
|
(chunk) => handleStreamEvent(chunk),
|
|
107
|
-
() => {
|
|
125
|
+
async () => {
|
|
126
|
+
setState((prev) => ({
|
|
127
|
+
...prev,
|
|
128
|
+
isLoading: false
|
|
129
|
+
}));
|
|
130
|
+
if (options.enableReturnStateWhenStreamCompleted) {
|
|
131
|
+
await fetchAndUpdateAgentState(threadId);
|
|
132
|
+
}
|
|
108
133
|
stopStreamingRef.current = null;
|
|
109
134
|
},
|
|
110
135
|
(error) => {
|
|
@@ -150,7 +175,14 @@ function useChat(threadId, options = {}) {
|
|
|
150
175
|
}));
|
|
151
176
|
}
|
|
152
177
|
},
|
|
153
|
-
[
|
|
178
|
+
[
|
|
179
|
+
client,
|
|
180
|
+
threadId,
|
|
181
|
+
options.streaming,
|
|
182
|
+
options.enableReturnStateWhenStreamCompleted,
|
|
183
|
+
handleStreamEvent,
|
|
184
|
+
fetchAndUpdateAgentState
|
|
185
|
+
]
|
|
154
186
|
);
|
|
155
187
|
const stopStreaming = useCallback(() => {
|
|
156
188
|
if (stopStreamingRef.current) {
|
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 UseChatOptions,\n StreamEventHandlerOptions,\n ChatResponse,\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 *\n * @param threadId - Thread ID to use for chat\n * @param options - Chat options\n * @returns Chat state and operations\n */\nexport function useChat(\n threadId: string | null,\n options: UseChatOptions = {}\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<ChatState>({\n messages: options.initialMessages || [],\n isLoading: false,\n error: null,\n streamingMessage: null,\n });\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 // 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 setState((prev) => ({\n ...prev,\n messages: updatedMessages,\n isLoading: false,\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 () => {\n // Stream completed\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.push({\n type: \"ai\",\n data: {\n id: response.message.id || `assistant-${Date.now()}`,\n content: response.message.content || \"\",\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages().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 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 [client, threadId, options.streaming, handleStreamEvent]\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":["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 ? 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.push({\n type: \"ai\",\n data: {\n id: response.message.id || `assistant-${Date.now()}`,\n content: response.message.content || \"\",\n },\n });\n\n // Update state with messages from the merger\n setState((prev) => ({\n ...prev,\n messages: chunkMessageMerger.current.getMessages().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 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.23",
|
|
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.23",
|
|
40
|
+
"@axiom-lattice/protocols": "1.0.23"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"react": ">=16.8.0",
|