@distri/react 0.1.6 → 0.1.8
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 +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +21 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -26
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -34,8 +34,8 @@ interface UseChatResult {
|
|
|
34
34
|
error: Error | null;
|
|
35
35
|
messages: Message[];
|
|
36
36
|
isStreaming: boolean;
|
|
37
|
-
sendMessage: (text: string
|
|
38
|
-
sendMessageStream: (text: string
|
|
37
|
+
sendMessage: (text: string | MessageSendParams) => Promise<void>;
|
|
38
|
+
sendMessageStream: (text: string | MessageSendParams) => Promise<void>;
|
|
39
39
|
clearMessages: () => void;
|
|
40
40
|
refreshMessages: () => Promise<void>;
|
|
41
41
|
abort: () => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -34,8 +34,8 @@ interface UseChatResult {
|
|
|
34
34
|
error: Error | null;
|
|
35
35
|
messages: Message[];
|
|
36
36
|
isStreaming: boolean;
|
|
37
|
-
sendMessage: (text: string
|
|
38
|
-
sendMessageStream: (text: string
|
|
37
|
+
sendMessage: (text: string | MessageSendParams) => Promise<void>;
|
|
38
|
+
sendMessageStream: (text: string | MessageSendParams) => Promise<void>;
|
|
39
39
|
clearMessages: () => void;
|
|
40
40
|
refreshMessages: () => Promise<void>;
|
|
41
41
|
abort: () => void;
|
package/dist/index.js
CHANGED
|
@@ -185,7 +185,6 @@ function useChat({ agentId, contextId }) {
|
|
|
185
185
|
setMessages([]);
|
|
186
186
|
return;
|
|
187
187
|
}
|
|
188
|
-
console.log("inside: fetchMessages", client, contextId);
|
|
189
188
|
try {
|
|
190
189
|
setLoading(true);
|
|
191
190
|
setError(null);
|
|
@@ -200,14 +199,13 @@ function useChat({ agentId, contextId }) {
|
|
|
200
199
|
}
|
|
201
200
|
}, [client, contextId]);
|
|
202
201
|
(0, import_react3.useEffect)(() => {
|
|
203
|
-
console.log("useEffect", clientLoading, clientError, contextId, !clientLoading && !clientError && contextId);
|
|
204
202
|
if (!clientLoading && !clientError && contextId) {
|
|
205
203
|
fetchMessages();
|
|
206
204
|
} else {
|
|
207
205
|
setMessages([]);
|
|
208
206
|
}
|
|
209
207
|
}, [clientLoading, clientError, contextId, fetchMessages]);
|
|
210
|
-
const sendMessage = (0, import_react3.useCallback)(async (input
|
|
208
|
+
const sendMessage = (0, import_react3.useCallback)(async (input) => {
|
|
211
209
|
if (!client) {
|
|
212
210
|
setError(new Error("Client not available"));
|
|
213
211
|
return;
|
|
@@ -215,9 +213,14 @@ function useChat({ agentId, contextId }) {
|
|
|
215
213
|
try {
|
|
216
214
|
setLoading(true);
|
|
217
215
|
setError(null);
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
216
|
+
let params;
|
|
217
|
+
if (typeof input === "string") {
|
|
218
|
+
let userMessage = import_core2.DistriClient.initMessage(input, "user", contextId);
|
|
219
|
+
params = import_core2.DistriClient.initMessageParams(userMessage);
|
|
220
|
+
} else {
|
|
221
|
+
params = input;
|
|
222
|
+
}
|
|
223
|
+
setMessages((prev) => [...prev, params.message]);
|
|
221
224
|
const result = await client.sendMessage(agentId, params);
|
|
222
225
|
let message = void 0;
|
|
223
226
|
if (result.kind === "message") {
|
|
@@ -229,9 +232,7 @@ function useChat({ agentId, contextId }) {
|
|
|
229
232
|
throw new Error("Invalid response format");
|
|
230
233
|
}
|
|
231
234
|
setMessages((prev) => {
|
|
232
|
-
console.log("message", message.messageId);
|
|
233
235
|
if (prev.find((msg) => msg.messageId === message.messageId)) {
|
|
234
|
-
console.log("message found", message.messageId);
|
|
235
236
|
return prev.map((msg) => {
|
|
236
237
|
if (msg.messageId === message.messageId) {
|
|
237
238
|
return {
|
|
@@ -242,7 +243,6 @@ function useChat({ agentId, contextId }) {
|
|
|
242
243
|
return msg;
|
|
243
244
|
});
|
|
244
245
|
} else {
|
|
245
|
-
console.log("message not found", message.messageId);
|
|
246
246
|
return [...prev, message];
|
|
247
247
|
}
|
|
248
248
|
});
|
|
@@ -253,7 +253,7 @@ function useChat({ agentId, contextId }) {
|
|
|
253
253
|
setLoading(false);
|
|
254
254
|
}
|
|
255
255
|
}, [client, agentId]);
|
|
256
|
-
const sendMessageStream = (0, import_react3.useCallback)(async (input
|
|
256
|
+
const sendMessageStream = (0, import_react3.useCallback)(async (input) => {
|
|
257
257
|
if (!client) {
|
|
258
258
|
setError(new Error("Client not available"));
|
|
259
259
|
return;
|
|
@@ -263,30 +263,27 @@ function useChat({ agentId, contextId }) {
|
|
|
263
263
|
setError(null);
|
|
264
264
|
setIsStreaming(true);
|
|
265
265
|
if (abortControllerRef.current) {
|
|
266
|
-
console.log("aborting existing stream");
|
|
267
266
|
abortControllerRef.current.abort();
|
|
268
267
|
}
|
|
269
268
|
abortControllerRef.current = new AbortController();
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
269
|
+
let params;
|
|
270
|
+
if (typeof input === "string") {
|
|
271
|
+
let userMessage = import_core2.DistriClient.initMessage(input, "user", contextId);
|
|
272
|
+
params = import_core2.DistriClient.initMessageParams(userMessage);
|
|
273
|
+
} else {
|
|
274
|
+
params = input;
|
|
275
|
+
}
|
|
276
|
+
setMessages((prev) => [...prev, params.message]);
|
|
277
|
+
setIsStreaming(true);
|
|
278
278
|
const stream = await client.sendMessageStream(agentId, params);
|
|
279
279
|
for await (const event of stream) {
|
|
280
280
|
if (abortControllerRef.current?.signal.aborted) {
|
|
281
281
|
console.log("abort signal received");
|
|
282
282
|
break;
|
|
283
283
|
}
|
|
284
|
-
console.log("Stream event:", event);
|
|
285
284
|
let message = void 0;
|
|
286
285
|
if (event.kind === "message") {
|
|
287
286
|
message = event;
|
|
288
|
-
} else if (event.kind === "status-update") {
|
|
289
|
-
message = event.status.message;
|
|
290
287
|
}
|
|
291
288
|
if (!message)
|
|
292
289
|
continue;
|
|
@@ -305,15 +302,13 @@ function useChat({ agentId, contextId }) {
|
|
|
305
302
|
return [...prev, message];
|
|
306
303
|
}
|
|
307
304
|
});
|
|
308
|
-
if (event.kind === "status-update" && event.final) {
|
|
309
|
-
setIsStreaming(false);
|
|
310
|
-
break;
|
|
311
|
-
}
|
|
312
305
|
}
|
|
306
|
+
setIsStreaming(false);
|
|
313
307
|
} catch (err) {
|
|
314
308
|
if (err instanceof Error && err.name === "AbortError") {
|
|
315
309
|
return;
|
|
316
310
|
}
|
|
311
|
+
console.log("error", err);
|
|
317
312
|
setError(err instanceof Error ? err : new Error("Failed to stream message"));
|
|
318
313
|
} finally {
|
|
319
314
|
setLoading(false);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/DistriProvider.tsx","../src/useAgents.ts","../src/useChat.ts","../src/useThreads.ts"],"sourcesContent":["// Main exports for @distri/react package\n\nexport { DistriProvider, useDistri, useDistriClient } from './DistriProvider';\nexport { useAgents } from './useAgents';\nexport { useChat } from './useChat';\nexport { useThreads } from './useThreads';\n\nexport type { UseAgentsResult } from './useAgents';\nexport type { UseChatOptions, UseChatResult } from './useChat';\n\n// Re-export types from core for convenience\nexport type {\n DistriClientConfig,\n DistriAgent,\n DistriThread,\n AgentCard,\n Task,\n Message,\n TaskStatus,\n MessageSendParams\n} from '@distri/core';","import { createContext, useContext, useEffect, useState, ReactNode } from 'react';\nimport { DistriClient, DistriClientConfig } from '@distri/core';\n\ninterface DistriContextValue {\n client: DistriClient | null;\n error: Error | null;\n isLoading: boolean;\n}\n\nconst DistriContext = createContext<DistriContextValue>({\n client: null,\n error: null,\n isLoading: true\n});\n\ninterface DistriProviderProps {\n config: DistriClientConfig;\n children: ReactNode;\n}\n\nconst debug = (config: DistriClientConfig, ...args: any[]): void => {\n if (config.debug) {\n console.log('[DistriProvider]', ...args);\n }\n}\n\n\nexport function DistriProvider({ config, children }: DistriProviderProps) {\n const [client, setClient] = useState<DistriClient | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let currentClient: DistriClient | null = null;\n\n try {\n debug(config, '[DistriProvider] Initializing client with config:', config);\n currentClient = new DistriClient(config);\n setClient(currentClient);\n setError(null);\n setIsLoading(false);\n debug(config, '[DistriProvider] Client initialized successfully');\n } catch (err) {\n debug(config, '[DistriProvider] Failed to initialize client:', err);\n const error = err instanceof Error ? err : new Error('Failed to initialize client');\n setError(error);\n setClient(null);\n setIsLoading(false);\n }\n\n }, [config.baseUrl, config.apiVersion, config.debug]); // Only depend on key config values\n\n const contextValue: DistriContextValue = {\n client,\n error,\n isLoading\n };\n\n if (error) {\n console.error(config, '[DistriProvider] Rendering error state:', error.message);\n }\n\n if (isLoading) {\n debug(config, '[DistriProvider] Rendering loading state');\n }\n\n if (client) {\n debug(config, '[DistriProvider] Rendering with client available');\n }\n\n return (\n <DistriContext.Provider value={contextValue}>\n {children}\n </DistriContext.Provider>\n );\n}\n\nexport function useDistri(): DistriContextValue {\n const context = useContext(DistriContext);\n if (!context) {\n throw new Error('useDistri must be used within a DistriProvider');\n }\n return context;\n}\n\nexport function useDistriClient(): DistriClient {\n const { client, error, isLoading } = useDistri();\n\n if (isLoading) {\n throw new Error('Distri client is still loading');\n }\n\n if (error) {\n throw new Error(`Distri client initialization failed: ${error.message}`);\n }\n\n if (!client) {\n throw new Error('Distri client is not initialized');\n }\n\n return client;\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriAgent } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseAgentsResult {\n agents: DistriAgent[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n getAgent: (agentId: string) => Promise<DistriAgent>;\n}\n\nexport function useAgents(): UseAgentsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [agents, setAgents] = useState<DistriAgent[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAgents = useCallback(async () => {\n if (!client) {\n console.log('[useAgents] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useAgents] Fetching agents...');\n const fetchedAgents = await client.getAgents();\n console.log('[useAgents] Fetched agents:', fetchedAgents);\n setAgents(fetchedAgents);\n } catch (err) {\n console.error('[useAgents] Failed to fetch agents:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch agents'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const getAgent = useCallback(async (agentId: string): Promise<DistriAgent> => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n const agent = await client.getAgent(agentId);\n \n // Update the agent in our local state if it exists\n setAgents(prev => prev.map(a => a.id === agentId ? agent : a));\n \n return agent;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get agent');\n setError(error);\n throw error;\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useAgents] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useAgents] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useAgents] Client ready, fetching agents');\n fetchAgents();\n } else {\n console.log('[useAgents] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchAgents]);\n\n return {\n agents,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchAgents,\n getAgent\n };\n}","import { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n Message,\n MessageSendParams,\n TaskStatusUpdateEvent,\n DistriClient\n} from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseChatOptions {\n agentId: string;\n contextId?: string;\n}\n\nexport interface UseChatResult {\n loading: boolean;\n error: Error | null;\n messages: Message[];\n isStreaming: boolean;\n sendMessage: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;\n sendMessageStream: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;\n clearMessages: () => void;\n refreshMessages: () => Promise<void>;\n abort: () => void;\n}\n\nexport function useChat({ agentId, contextId }: UseChatOptions): UseChatResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [messages, setMessages] = useState<Message[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchMessages = useCallback(async () => {\n if (!client || !contextId) {\n setMessages([]);\n return;\n }\n\n console.log('inside: fetchMessages', client, contextId);\n\n try {\n setLoading(true);\n setError(null);\n const fetchedMessages = await client.getThreadMessages(contextId);\n setMessages(fetchedMessages);\n } catch (err) {\n console.error('[useThreadMessages] Failed to fetch messages:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch messages'));\n setMessages([]); // Clear messages on error\n } finally {\n setLoading(false);\n }\n }, [client, contextId]);\n\n useEffect(() => {\n console.log('useEffect', clientLoading, clientError, contextId, !clientLoading && !clientError && contextId);\n if (!clientLoading && !clientError && contextId) {\n fetchMessages();\n } else {\n setMessages([]);\n }\n }, [clientLoading, clientError, contextId, fetchMessages]);\n\n const sendMessage = useCallback(async (\n input: string,\n configuration?: MessageSendParams['configuration']\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n const userMessage = DistriClient.initMessage(input, 'user', contextId);\n // Add user message to local state immediately\n setMessages(prev => [...prev, userMessage]);\n\n const params = DistriClient.initMessageParams(userMessage, configuration);\n\n const result = await client.sendMessage(agentId, params);\n\n let message = undefined;\n if (result.kind === 'message') {\n message = (result as Message);\n } else if (result.kind === 'task') {\n message = result.status.message as Message;\n }\n\n if (!message) {\n throw new Error('Invalid response format');\n }\n\n setMessages((prev: Message[]) => {\n console.log('message', message.messageId);\n if (prev.find(msg => msg.messageId === message.messageId)) {\n console.log('message found', message.messageId);\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n console.log('message not found', message.messageId);\n return [...prev, message];\n }\n });\n } catch (err) {\n console.error(err);\n setError(err instanceof Error ? err : new Error('Failed to send message'));\n } finally {\n setLoading(false);\n }\n }, [client, agentId]);\n\n const sendMessageStream = useCallback(async (\n input: string,\n configuration?: MessageSendParams['configuration']\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n setIsStreaming(true);\n\n // Cancel any existing stream\n if (abortControllerRef.current) {\n console.log('aborting existing stream');\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n const userMessage = DistriClient.initMessage(input, 'user', contextId);\n // Add user message to local state immediately\n setMessages(prev => [...prev, userMessage]);\n\n console.log('userMessage', userMessage);\n const params = DistriClient.initMessageParams(userMessage, {\n blocking: false,\n acceptedOutputModes: ['text/plain'],\n ...configuration\n });\n\n const stream = await client.sendMessageStream(agentId, params);\n\n for await (const event of stream) {\n if (abortControllerRef.current?.signal.aborted) {\n console.log('abort signal received');\n break;\n }\n\n console.log('Stream event:', event); // Debug logging\n\n let message = undefined;\n if (event.kind === 'message') {\n message = (event as Message);\n } else if (event.kind === 'status-update') {\n message = (event as TaskStatusUpdateEvent).status.message as Message;\n }\n\n if (!message) continue;\n setMessages((prev: Message[]) => {\n if (prev.find(msg => msg.messageId === message.messageId)) {\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n return [...prev, message];\n }\n });\n\n if (event.kind === 'status-update' && (event as TaskStatusUpdateEvent).final) {\n setIsStreaming(false);\n break;\n }\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n // Stream was cancelled, not an error\n return;\n }\n\n setError(err instanceof Error ? err : new Error('Failed to stream message'));\n } finally {\n setLoading(false);\n setIsStreaming(false);\n }\n }, [client, agentId]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n const abort = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n }, []);\n\n return {\n loading: loading || clientLoading,\n error: error || clientError,\n messages,\n isStreaming,\n sendMessage,\n sendMessageStream,\n clearMessages,\n refreshMessages: fetchMessages,\n abort,\n };\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriThread } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseThreadsResult {\n threads: DistriThread[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n fetchThread: (threadId: string) => Promise<DistriThread>;\n updateThread: (threadId: string, localId?: string) => Promise<void>;\n}\n\nexport function useThreads(): UseThreadsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [threads, setThreads] = useState<DistriThread[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchThreads = useCallback(async () => {\n if (!client) {\n console.log('[useThreads] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useThreads] Fetching threads...');\n const fetchedThreads = await client.getThreads();\n console.log('[useThreads] Fetched threads:', fetchedThreads);\n setThreads(fetchedThreads);\n } catch (err) {\n console.error('[useThreads] Failed to fetch threads:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch threads'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const fetchThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n try {\n const response = await client.getThread(threadId);\n return response;\n } catch (err) {\n console.error('[useThreads] Failed to fetch thread:', err);\n throw err;\n }\n }, [client]);\n\n const deleteThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n // Try to delete from server (may not exist yet for local threads)\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error('Failed to delete thread');\n }\n\n // Remove from local state regardless of server response\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n } catch (err) {\n // Still remove from local state even if server delete fails\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n console.warn('Failed to delete thread from server, but removed locally:', err);\n }\n }, [client]);\n\n const updateThread = useCallback(async (threadId: string, localId?: string) => {\n if (!client) {\n return;\n }\n\n try {\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`);\n if (response.ok) {\n const updatedThread = await response.json();\n setThreads(prev => {\n // If a local thread with localId exists, replace it with the backend thread\n if (localId && prev.some(thread => thread.id === localId)) {\n return [\n updatedThread,\n ...prev.filter(thread => thread.id !== localId && thread.id !== threadId)\n ];\n }\n // Otherwise, just update by threadId\n return prev.map(thread =>\n thread.id === threadId ? updatedThread : thread\n );\n });\n }\n } catch (err) {\n console.warn('Failed to update thread:', err);\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useThreads] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useThreads] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useThreads] Client ready, fetching threads');\n fetchThreads();\n } else {\n console.log('[useThreads] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchThreads]);\n\n return {\n threads,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchThreads,\n deleteThread,\n fetchThread,\n updateThread\n };\n}\n\nexport interface UseThreadMessagesOptions {\n threadId: string | null;\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA0E;AAC1E,kBAAiD;AAsE7C;AA9DJ,IAAM,oBAAgB,4BAAkC;AAAA,EACtD,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACb,CAAC;AAOD,IAAM,QAAQ,CAAC,WAA+B,SAAsB;AAClE,MAAI,OAAO,OAAO;AAChB,YAAQ,IAAI,oBAAoB,GAAG,IAAI;AAAA,EACzC;AACF;AAGO,SAAS,eAAe,EAAE,QAAQ,SAAS,GAAwB;AACxE,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAA8B,IAAI;AAC9D,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAE/C,8BAAU,MAAM;AACd,QAAI,gBAAqC;AAEzC,QAAI;AACF,YAAM,QAAQ,qDAAqD,MAAM;AACzE,sBAAgB,IAAI,yBAAa,MAAM;AACvC,gBAAU,aAAa;AACvB,eAAS,IAAI;AACb,mBAAa,KAAK;AAClB,YAAM,QAAQ,kDAAkD;AAAA,IAClE,SAAS,KAAK;AACZ,YAAM,QAAQ,iDAAiD,GAAG;AAClE,YAAMA,SAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,6BAA6B;AAClF,eAASA,MAAK;AACd,gBAAU,IAAI;AACd,mBAAa,KAAK;AAAA,IACpB;AAAA,EAEF,GAAG,CAAC,OAAO,SAAS,OAAO,YAAY,OAAO,KAAK,CAAC;AAEpD,QAAM,eAAmC;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,OAAO;AACT,YAAQ,MAAM,QAAQ,2CAA2C,MAAM,OAAO;AAAA,EAChF;AAEA,MAAI,WAAW;AACb,UAAM,QAAQ,0CAA0C;AAAA,EAC1D;AAEA,MAAI,QAAQ;AACV,UAAM,QAAQ,kDAAkD;AAAA,EAClE;AAEA,SACE,4CAAC,cAAc,UAAd,EAAuB,OAAO,cAC5B,UACH;AAEJ;AAEO,SAAS,YAAgC;AAC9C,QAAM,cAAU,yBAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;AAEO,SAAS,kBAAgC;AAC9C,QAAM,EAAE,QAAQ,OAAO,UAAU,IAAI,UAAU;AAE/C,MAAI,WAAW;AACb,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,MAAI,OAAO;AACT,UAAM,IAAI,MAAM,wCAAwC,MAAM,OAAO,EAAE;AAAA,EACzE;AAEA,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAEA,SAAO;AACT;;;ACrGA,IAAAC,gBAAiD;AAY1C,SAAS,YAA6B;AAC3C,QAAM,EAAE,QAAQ,OAAO,aAAa,WAAW,cAAc,IAAI,UAAU;AAC3E,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAwB,CAAC,CAAC;AACtD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAuB,IAAI;AAErD,QAAM,kBAAc,2BAAY,YAAY;AAC1C,QAAI,CAAC,QAAQ;AACX,cAAQ,IAAI,kDAAkD;AAC9D;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,cAAQ,IAAI,gCAAgC;AAC5C,YAAM,gBAAgB,MAAM,OAAO,UAAU;AAC7C,cAAQ,IAAI,+BAA+B,aAAa;AACxD,gBAAU,aAAa;AAAA,IACzB,SAAS,KAAK;AACZ,cAAQ,MAAM,uCAAuC,GAAG;AACxD,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAAA,IAC3E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAW,2BAAY,OAAO,YAA0C;AAC5E,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,SAAS,OAAO;AAG3C,gBAAU,UAAQ,KAAK,IAAI,OAAK,EAAE,OAAO,UAAU,QAAQ,CAAC,CAAC;AAE7D,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,YAAMC,SAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,qBAAqB;AAC1E,eAASA,MAAK;AACd,YAAMA;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,+BAAU,MAAM;AACd,QAAI,eAAe;AACjB,cAAQ,IAAI,2CAA2C;AACvD,iBAAW,IAAI;AACf;AAAA,IACF;AAEA,QAAI,aAAa;AACf,cAAQ,MAAM,6BAA6B,WAAW;AACtD,eAAS,WAAW;AACpB,iBAAW,KAAK;AAChB;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,cAAQ,IAAI,2CAA2C;AACvD,kBAAY;AAAA,IACd,OAAO;AACL,cAAQ,IAAI,iCAAiC;AAC7C,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,QAAQ,WAAW,CAAC;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB,SAAS;AAAA,IACT;AAAA,EACF;AACF;;;ACxFA,IAAAC,gBAAyD;AACzD,IAAAC,eAKO;AAoBA,SAAS,QAAQ,EAAE,SAAS,UAAU,GAAkC;AAC7E,QAAM,EAAE,QAAQ,OAAO,aAAa,WAAW,cAAc,IAAI,UAAU;AAC3E,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAuB,IAAI;AACrD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAoB,CAAC,CAAC;AACtD,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,KAAK;AACpD,QAAM,yBAAqB,sBAA+B,IAAI;AAE9D,QAAM,oBAAgB,2BAAY,YAAY;AAC5C,QAAI,CAAC,UAAU,CAAC,WAAW;AACzB,kBAAY,CAAC,CAAC;AACd;AAAA,IACF;AAEA,YAAQ,IAAI,yBAAyB,QAAQ,SAAS;AAEtD,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,YAAM,kBAAkB,MAAM,OAAO,kBAAkB,SAAS;AAChE,kBAAY,eAAe;AAAA,IAC7B,SAAS,KAAK;AACZ,cAAQ,MAAM,iDAAiD,GAAG;AAClE,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,0BAA0B,CAAC;AAC3E,kBAAY,CAAC,CAAC;AAAA,IAChB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,+BAAU,MAAM;AACd,YAAQ,IAAI,aAAa,eAAe,aAAa,WAAW,CAAC,iBAAiB,CAAC,eAAe,SAAS;AAC3G,QAAI,CAAC,iBAAiB,CAAC,eAAe,WAAW;AAC/C,oBAAc;AAAA,IAChB,OAAO;AACL,kBAAY,CAAC,CAAC;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,WAAW,aAAa,CAAC;AAEzD,QAAM,kBAAc,2BAAY,OAC9B,OACA,kBACG;AACH,QAAI,CAAC,QAAQ;AACX,eAAS,IAAI,MAAM,sBAAsB,CAAC;AAC1C;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AAEb,YAAM,cAAc,0BAAa,YAAY,OAAO,QAAQ,SAAS;AAErE,kBAAY,UAAQ,CAAC,GAAG,MAAM,WAAW,CAAC;AAE1C,YAAM,SAAS,0BAAa,kBAAkB,aAAa,aAAa;AAExE,YAAM,SAAS,MAAM,OAAO,YAAY,SAAS,MAAM;AAEvD,UAAI,UAAU;AACd,UAAI,OAAO,SAAS,WAAW;AAC7B,kBAAW;AAAA,MACb,WAAW,OAAO,SAAS,QAAQ;AACjC,kBAAU,OAAO,OAAO;AAAA,MAC1B;AAEA,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAEA,kBAAY,CAAC,SAAoB;AAC/B,gBAAQ,IAAI,WAAW,QAAQ,SAAS;AACxC,YAAI,KAAK,KAAK,SAAO,IAAI,cAAc,QAAQ,SAAS,GAAG;AACzD,kBAAQ,IAAI,iBAAiB,QAAQ,SAAS;AAC9C,iBAAO,KAAK,IAAI,SAAO;AACrB,gBAAI,IAAI,cAAc,QAAQ,WAAW;AACvC,qBAAO;AAAA,gBACL,GAAG;AAAA,gBACH,OAAO,CAAC,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK;AAAA,cACxC;AAAA,YACF;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,OAAO;AACL,kBAAQ,IAAI,qBAAqB,QAAQ,SAAS;AAClD,iBAAO,CAAC,GAAG,MAAM,OAAO;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,cAAQ,MAAM,GAAG;AACjB,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAAA,IAC3E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,QAAM,wBAAoB,2BAAY,OACpC,OACA,kBACG;AACH,QAAI,CAAC,QAAQ;AACX,eAAS,IAAI,MAAM,sBAAsB,CAAC;AAC1C;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,qBAAe,IAAI;AAGnB,UAAI,mBAAmB,SAAS;AAC9B,gBAAQ,IAAI,0BAA0B;AACtC,2BAAmB,QAAQ,MAAM;AAAA,MACnC;AACA,yBAAmB,UAAU,IAAI,gBAAgB;AAEjD,YAAM,cAAc,0BAAa,YAAY,OAAO,QAAQ,SAAS;AAErE,kBAAY,UAAQ,CAAC,GAAG,MAAM,WAAW,CAAC;AAE1C,cAAQ,IAAI,eAAe,WAAW;AACtC,YAAM,SAAS,0BAAa,kBAAkB,aAAa;AAAA,QACzD,UAAU;AAAA,QACV,qBAAqB,CAAC,YAAY;AAAA,QAClC,GAAG;AAAA,MACL,CAAC;AAED,YAAM,SAAS,MAAM,OAAO,kBAAkB,SAAS,MAAM;AAE7D,uBAAiB,SAAS,QAAQ;AAChC,YAAI,mBAAmB,SAAS,OAAO,SAAS;AAC9C,kBAAQ,IAAI,uBAAuB;AACnC;AAAA,QACF;AAEA,gBAAQ,IAAI,iBAAiB,KAAK;AAElC,YAAI,UAAU;AACd,YAAI,MAAM,SAAS,WAAW;AAC5B,oBAAW;AAAA,QACb,WAAW,MAAM,SAAS,iBAAiB;AACzC,oBAAW,MAAgC,OAAO;AAAA,QACpD;AAEA,YAAI,CAAC;AAAS;AACd,oBAAY,CAAC,SAAoB;AAC/B,cAAI,KAAK,KAAK,SAAO,IAAI,cAAc,QAAQ,SAAS,GAAG;AACzD,mBAAO,KAAK,IAAI,SAAO;AACrB,kBAAI,IAAI,cAAc,QAAQ,WAAW;AACvC,uBAAO;AAAA,kBACL,GAAG;AAAA,kBACH,OAAO,CAAC,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK;AAAA,gBACxC;AAAA,cACF;AACA,qBAAO;AAAA,YACT,CAAC;AAAA,UACH,OAAO;AACL,mBAAO,CAAC,GAAG,MAAM,OAAO;AAAA,UAC1B;AAAA,QACF,CAAC;AAED,YAAI,MAAM,SAAS,mBAAoB,MAAgC,OAAO;AAC5E,yBAAe,KAAK;AACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AAErD;AAAA,MACF;AAEA,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,0BAA0B,CAAC;AAAA,IAC7E,UAAE;AACA,iBAAW,KAAK;AAChB,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,QAAM,oBAAgB,2BAAY,MAAM;AACtC,gBAAY,CAAC,CAAC;AAAA,EAChB,GAAG,CAAC,CAAC;AAGL,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,mBAAmB,SAAS;AAC9B,2BAAmB,QAAQ,MAAM;AAAA,MACnC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,YAAQ,2BAAY,MAAM;AAC9B,QAAI,mBAAmB,SAAS;AAC9B,yBAAmB,QAAQ,MAAM;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,EACF;AACF;;;AC7OA,IAAAC,gBAAiD;AAc1C,SAAS,aAA+B;AAC7C,QAAM,EAAE,QAAQ,OAAO,aAAa,WAAW,cAAc,IAAI,UAAU;AAC3E,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAyB,CAAC,CAAC;AACzD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAuB,IAAI;AAErD,QAAM,mBAAe,2BAAY,YAAY;AAC3C,QAAI,CAAC,QAAQ;AACX,cAAQ,IAAI,mDAAmD;AAC/D;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,cAAQ,IAAI,kCAAkC;AAC9C,YAAM,iBAAiB,MAAM,OAAO,WAAW;AAC/C,cAAQ,IAAI,iCAAiC,cAAc;AAC3D,iBAAW,cAAc;AAAA,IAC3B,SAAS,KAAK;AACZ,cAAQ,MAAM,yCAAyC,GAAG;AAC1D,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,yBAAyB,CAAC;AAAA,IAC5E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,kBAAc,2BAAY,OAAO,aAAqB;AAC1D,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,UAAU,QAAQ;AAChD,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,cAAQ,MAAM,wCAAwC,GAAG;AACzD,YAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,mBAAe,2BAAY,OAAO,aAAqB;AAC3D,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,mBAAmB,QAAQ,IAAI;AAAA,QAC3E,QAAQ;AAAA,MACV,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAGA,iBAAW,UAAQ,KAAK,OAAO,YAAU,OAAO,OAAO,QAAQ,CAAC;AAAA,IAClE,SAAS,KAAK;AAEZ,iBAAW,UAAQ,KAAK,OAAO,YAAU,OAAO,OAAO,QAAQ,CAAC;AAChE,cAAQ,KAAK,6DAA6D,GAAG;AAAA,IAC/E;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,mBAAe,2BAAY,OAAO,UAAkB,YAAqB;AAC7E,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,mBAAmB,QAAQ,EAAE;AAC3E,UAAI,SAAS,IAAI;AACf,cAAM,gBAAgB,MAAM,SAAS,KAAK;AAC1C,mBAAW,UAAQ;AAEjB,cAAI,WAAW,KAAK,KAAK,YAAU,OAAO,OAAO,OAAO,GAAG;AACzD,mBAAO;AAAA,cACL;AAAA,cACA,GAAG,KAAK,OAAO,YAAU,OAAO,OAAO,WAAW,OAAO,OAAO,QAAQ;AAAA,YAC1E;AAAA,UACF;AAEA,iBAAO,KAAK;AAAA,YAAI,YACd,OAAO,OAAO,WAAW,gBAAgB;AAAA,UAC3C;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,KAAK,4BAA4B,GAAG;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,+BAAU,MAAM;AACd,QAAI,eAAe;AACjB,cAAQ,IAAI,4CAA4C;AACxD,iBAAW,IAAI;AACf;AAAA,IACF;AAEA,QAAI,aAAa;AACf,cAAQ,MAAM,8BAA8B,WAAW;AACvD,eAAS,WAAW;AACpB,iBAAW,KAAK;AAChB;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,cAAQ,IAAI,6CAA6C;AACzD,mBAAa;AAAA,IACf,OAAO;AACL,cAAQ,IAAI,kCAAkC;AAC9C,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,QAAQ,YAAY,CAAC;AAErD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["error","import_react","error","import_react","import_core","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/DistriProvider.tsx","../src/useAgents.ts","../src/useChat.ts","../src/useThreads.ts"],"sourcesContent":["// Main exports for @distri/react package\n\nexport { DistriProvider, useDistri, useDistriClient } from './DistriProvider';\nexport { useAgents } from './useAgents';\nexport { useChat } from './useChat';\nexport { useThreads } from './useThreads';\n\nexport type { UseAgentsResult } from './useAgents';\nexport type { UseChatOptions, UseChatResult } from './useChat';\n\n// Re-export types from core for convenience\nexport type {\n DistriClientConfig,\n DistriAgent,\n DistriThread,\n AgentCard,\n Task,\n Message,\n TaskStatus,\n MessageSendParams\n} from '@distri/core';","import { createContext, useContext, useEffect, useState, ReactNode } from 'react';\nimport { DistriClient, DistriClientConfig } from '@distri/core';\n\ninterface DistriContextValue {\n client: DistriClient | null;\n error: Error | null;\n isLoading: boolean;\n}\n\nconst DistriContext = createContext<DistriContextValue>({\n client: null,\n error: null,\n isLoading: true\n});\n\ninterface DistriProviderProps {\n config: DistriClientConfig;\n children: ReactNode;\n}\n\nconst debug = (config: DistriClientConfig, ...args: any[]): void => {\n if (config.debug) {\n console.log('[DistriProvider]', ...args);\n }\n}\n\n\nexport function DistriProvider({ config, children }: DistriProviderProps) {\n const [client, setClient] = useState<DistriClient | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let currentClient: DistriClient | null = null;\n\n try {\n debug(config, '[DistriProvider] Initializing client with config:', config);\n currentClient = new DistriClient(config);\n setClient(currentClient);\n setError(null);\n setIsLoading(false);\n debug(config, '[DistriProvider] Client initialized successfully');\n } catch (err) {\n debug(config, '[DistriProvider] Failed to initialize client:', err);\n const error = err instanceof Error ? err : new Error('Failed to initialize client');\n setError(error);\n setClient(null);\n setIsLoading(false);\n }\n\n }, [config.baseUrl, config.apiVersion, config.debug]); // Only depend on key config values\n\n const contextValue: DistriContextValue = {\n client,\n error,\n isLoading\n };\n\n if (error) {\n console.error(config, '[DistriProvider] Rendering error state:', error.message);\n }\n\n if (isLoading) {\n debug(config, '[DistriProvider] Rendering loading state');\n }\n\n if (client) {\n debug(config, '[DistriProvider] Rendering with client available');\n }\n\n return (\n <DistriContext.Provider value={contextValue}>\n {children}\n </DistriContext.Provider>\n );\n}\n\nexport function useDistri(): DistriContextValue {\n const context = useContext(DistriContext);\n if (!context) {\n throw new Error('useDistri must be used within a DistriProvider');\n }\n return context;\n}\n\nexport function useDistriClient(): DistriClient {\n const { client, error, isLoading } = useDistri();\n\n if (isLoading) {\n throw new Error('Distri client is still loading');\n }\n\n if (error) {\n throw new Error(`Distri client initialization failed: ${error.message}`);\n }\n\n if (!client) {\n throw new Error('Distri client is not initialized');\n }\n\n return client;\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriAgent } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseAgentsResult {\n agents: DistriAgent[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n getAgent: (agentId: string) => Promise<DistriAgent>;\n}\n\nexport function useAgents(): UseAgentsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [agents, setAgents] = useState<DistriAgent[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAgents = useCallback(async () => {\n if (!client) {\n console.log('[useAgents] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useAgents] Fetching agents...');\n const fetchedAgents = await client.getAgents();\n console.log('[useAgents] Fetched agents:', fetchedAgents);\n setAgents(fetchedAgents);\n } catch (err) {\n console.error('[useAgents] Failed to fetch agents:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch agents'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const getAgent = useCallback(async (agentId: string): Promise<DistriAgent> => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n const agent = await client.getAgent(agentId);\n \n // Update the agent in our local state if it exists\n setAgents(prev => prev.map(a => a.id === agentId ? agent : a));\n \n return agent;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get agent');\n setError(error);\n throw error;\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useAgents] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useAgents] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useAgents] Client ready, fetching agents');\n fetchAgents();\n } else {\n console.log('[useAgents] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchAgents]);\n\n return {\n agents,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchAgents,\n getAgent\n };\n}","import { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n Message,\n MessageSendParams,\n DistriClient\n} from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseChatOptions {\n agentId: string;\n contextId?: string;\n}\n\nexport interface UseChatResult {\n loading: boolean;\n error: Error | null;\n messages: Message[];\n isStreaming: boolean;\n sendMessage: (text: string | MessageSendParams) => Promise<void>;\n sendMessageStream: (text: string | MessageSendParams) => Promise<void>;\n clearMessages: () => void;\n refreshMessages: () => Promise<void>;\n abort: () => void;\n}\n\nexport function useChat({ agentId, contextId }: UseChatOptions): UseChatResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [messages, setMessages] = useState<Message[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchMessages = useCallback(async () => {\n if (!client || !contextId) {\n setMessages([]);\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n const fetchedMessages = await client.getThreadMessages(contextId);\n setMessages(fetchedMessages);\n } catch (err) {\n console.error('[useThreadMessages] Failed to fetch messages:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch messages'));\n setMessages([]); // Clear messages on error\n } finally {\n setLoading(false);\n }\n }, [client, contextId]);\n\n useEffect(() => {\n if (!clientLoading && !clientError && contextId) {\n fetchMessages();\n } else {\n setMessages([]);\n }\n }, [clientLoading, clientError, contextId, fetchMessages]);\n\n const sendMessage = useCallback(async (\n input: string | MessageSendParams,\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n let params: MessageSendParams;\n if (typeof input === 'string') {\n let userMessage = DistriClient.initMessage(input, 'user', contextId);\n params = DistriClient.initMessageParams(userMessage);\n } else {\n params = input;\n }\n // Add user message to local state immediately\n setMessages(prev => [...prev, params.message]);\n\n const result = await client.sendMessage(agentId, params);\n\n let message = undefined;\n if (result.kind === 'message') {\n message = (result as Message);\n } else if (result.kind === 'task') {\n message = result.status.message as Message;\n }\n\n if (!message) {\n throw new Error('Invalid response format');\n }\n\n setMessages((prev: Message[]) => {\n if (prev.find(msg => msg.messageId === message.messageId)) {\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n return [...prev, message];\n }\n });\n } catch (err) {\n console.error(err);\n setError(err instanceof Error ? err : new Error('Failed to send message'));\n } finally {\n setLoading(false);\n }\n }, [client, agentId]);\n\n const sendMessageStream = useCallback(async (\n input: string | MessageSendParams,\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n setIsStreaming(true);\n\n // Cancel any existing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n let params: MessageSendParams;\n if (typeof input === 'string') {\n let userMessage = DistriClient.initMessage(input, 'user', contextId);\n params = DistriClient.initMessageParams(userMessage);\n } else {\n params = input;\n }\n // Add user message to local state immediately\n setMessages(prev => [...prev, params.message]);\n\n setIsStreaming(true);\n\n const stream = await client.sendMessageStream(agentId, params);\n\n for await (const event of stream) {\n\n if (abortControllerRef.current?.signal.aborted) {\n console.log('abort signal received');\n break;\n }\n\n let message = undefined;\n if (event.kind === 'message') {\n message = (event as Message);\n }\n\n if (!message) continue;\n setMessages((prev: Message[]) => {\n if (prev.find(msg => msg.messageId === message.messageId)) {\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n return [...prev, message];\n }\n });\n }\n setIsStreaming(false);\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n // Stream was cancelled, not an error\n return;\n }\n console.log('error', err);\n\n setError(err instanceof Error ? err : new Error('Failed to stream message'));\n } finally {\n setLoading(false);\n setIsStreaming(false);\n }\n }, [client, agentId]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n const abort = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n }, []);\n\n return {\n loading: loading || clientLoading,\n error: error || clientError,\n messages,\n isStreaming,\n sendMessage,\n sendMessageStream,\n clearMessages,\n refreshMessages: fetchMessages,\n abort,\n };\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriThread } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseThreadsResult {\n threads: DistriThread[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n fetchThread: (threadId: string) => Promise<DistriThread>;\n updateThread: (threadId: string, localId?: string) => Promise<void>;\n}\n\nexport function useThreads(): UseThreadsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [threads, setThreads] = useState<DistriThread[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchThreads = useCallback(async () => {\n if (!client) {\n console.log('[useThreads] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useThreads] Fetching threads...');\n const fetchedThreads = await client.getThreads();\n console.log('[useThreads] Fetched threads:', fetchedThreads);\n setThreads(fetchedThreads);\n } catch (err) {\n console.error('[useThreads] Failed to fetch threads:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch threads'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const fetchThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n try {\n const response = await client.getThread(threadId);\n return response;\n } catch (err) {\n console.error('[useThreads] Failed to fetch thread:', err);\n throw err;\n }\n }, [client]);\n\n const deleteThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n // Try to delete from server (may not exist yet for local threads)\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error('Failed to delete thread');\n }\n\n // Remove from local state regardless of server response\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n } catch (err) {\n // Still remove from local state even if server delete fails\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n console.warn('Failed to delete thread from server, but removed locally:', err);\n }\n }, [client]);\n\n const updateThread = useCallback(async (threadId: string, localId?: string) => {\n if (!client) {\n return;\n }\n\n try {\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`);\n if (response.ok) {\n const updatedThread = await response.json();\n setThreads(prev => {\n // If a local thread with localId exists, replace it with the backend thread\n if (localId && prev.some(thread => thread.id === localId)) {\n return [\n updatedThread,\n ...prev.filter(thread => thread.id !== localId && thread.id !== threadId)\n ];\n }\n // Otherwise, just update by threadId\n return prev.map(thread =>\n thread.id === threadId ? updatedThread : thread\n );\n });\n }\n } catch (err) {\n console.warn('Failed to update thread:', err);\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useThreads] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useThreads] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useThreads] Client ready, fetching threads');\n fetchThreads();\n } else {\n console.log('[useThreads] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchThreads]);\n\n return {\n threads,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchThreads,\n deleteThread,\n fetchThread,\n updateThread\n };\n}\n\nexport interface UseThreadMessagesOptions {\n threadId: string | null;\n}"],"mappings":"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","names":["error","import_react","error","import_react","import_core","import_react"]}
|
package/dist/index.mjs
CHANGED
|
@@ -156,7 +156,6 @@ function useChat({ agentId, contextId }) {
|
|
|
156
156
|
setMessages([]);
|
|
157
157
|
return;
|
|
158
158
|
}
|
|
159
|
-
console.log("inside: fetchMessages", client, contextId);
|
|
160
159
|
try {
|
|
161
160
|
setLoading(true);
|
|
162
161
|
setError(null);
|
|
@@ -171,14 +170,13 @@ function useChat({ agentId, contextId }) {
|
|
|
171
170
|
}
|
|
172
171
|
}, [client, contextId]);
|
|
173
172
|
useEffect3(() => {
|
|
174
|
-
console.log("useEffect", clientLoading, clientError, contextId, !clientLoading && !clientError && contextId);
|
|
175
173
|
if (!clientLoading && !clientError && contextId) {
|
|
176
174
|
fetchMessages();
|
|
177
175
|
} else {
|
|
178
176
|
setMessages([]);
|
|
179
177
|
}
|
|
180
178
|
}, [clientLoading, clientError, contextId, fetchMessages]);
|
|
181
|
-
const sendMessage = useCallback2(async (input
|
|
179
|
+
const sendMessage = useCallback2(async (input) => {
|
|
182
180
|
if (!client) {
|
|
183
181
|
setError(new Error("Client not available"));
|
|
184
182
|
return;
|
|
@@ -186,9 +184,14 @@ function useChat({ agentId, contextId }) {
|
|
|
186
184
|
try {
|
|
187
185
|
setLoading(true);
|
|
188
186
|
setError(null);
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
187
|
+
let params;
|
|
188
|
+
if (typeof input === "string") {
|
|
189
|
+
let userMessage = DistriClient2.initMessage(input, "user", contextId);
|
|
190
|
+
params = DistriClient2.initMessageParams(userMessage);
|
|
191
|
+
} else {
|
|
192
|
+
params = input;
|
|
193
|
+
}
|
|
194
|
+
setMessages((prev) => [...prev, params.message]);
|
|
192
195
|
const result = await client.sendMessage(agentId, params);
|
|
193
196
|
let message = void 0;
|
|
194
197
|
if (result.kind === "message") {
|
|
@@ -200,9 +203,7 @@ function useChat({ agentId, contextId }) {
|
|
|
200
203
|
throw new Error("Invalid response format");
|
|
201
204
|
}
|
|
202
205
|
setMessages((prev) => {
|
|
203
|
-
console.log("message", message.messageId);
|
|
204
206
|
if (prev.find((msg) => msg.messageId === message.messageId)) {
|
|
205
|
-
console.log("message found", message.messageId);
|
|
206
207
|
return prev.map((msg) => {
|
|
207
208
|
if (msg.messageId === message.messageId) {
|
|
208
209
|
return {
|
|
@@ -213,7 +214,6 @@ function useChat({ agentId, contextId }) {
|
|
|
213
214
|
return msg;
|
|
214
215
|
});
|
|
215
216
|
} else {
|
|
216
|
-
console.log("message not found", message.messageId);
|
|
217
217
|
return [...prev, message];
|
|
218
218
|
}
|
|
219
219
|
});
|
|
@@ -224,7 +224,7 @@ function useChat({ agentId, contextId }) {
|
|
|
224
224
|
setLoading(false);
|
|
225
225
|
}
|
|
226
226
|
}, [client, agentId]);
|
|
227
|
-
const sendMessageStream = useCallback2(async (input
|
|
227
|
+
const sendMessageStream = useCallback2(async (input) => {
|
|
228
228
|
if (!client) {
|
|
229
229
|
setError(new Error("Client not available"));
|
|
230
230
|
return;
|
|
@@ -234,30 +234,27 @@ function useChat({ agentId, contextId }) {
|
|
|
234
234
|
setError(null);
|
|
235
235
|
setIsStreaming(true);
|
|
236
236
|
if (abortControllerRef.current) {
|
|
237
|
-
console.log("aborting existing stream");
|
|
238
237
|
abortControllerRef.current.abort();
|
|
239
238
|
}
|
|
240
239
|
abortControllerRef.current = new AbortController();
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
240
|
+
let params;
|
|
241
|
+
if (typeof input === "string") {
|
|
242
|
+
let userMessage = DistriClient2.initMessage(input, "user", contextId);
|
|
243
|
+
params = DistriClient2.initMessageParams(userMessage);
|
|
244
|
+
} else {
|
|
245
|
+
params = input;
|
|
246
|
+
}
|
|
247
|
+
setMessages((prev) => [...prev, params.message]);
|
|
248
|
+
setIsStreaming(true);
|
|
249
249
|
const stream = await client.sendMessageStream(agentId, params);
|
|
250
250
|
for await (const event of stream) {
|
|
251
251
|
if (abortControllerRef.current?.signal.aborted) {
|
|
252
252
|
console.log("abort signal received");
|
|
253
253
|
break;
|
|
254
254
|
}
|
|
255
|
-
console.log("Stream event:", event);
|
|
256
255
|
let message = void 0;
|
|
257
256
|
if (event.kind === "message") {
|
|
258
257
|
message = event;
|
|
259
|
-
} else if (event.kind === "status-update") {
|
|
260
|
-
message = event.status.message;
|
|
261
258
|
}
|
|
262
259
|
if (!message)
|
|
263
260
|
continue;
|
|
@@ -276,15 +273,13 @@ function useChat({ agentId, contextId }) {
|
|
|
276
273
|
return [...prev, message];
|
|
277
274
|
}
|
|
278
275
|
});
|
|
279
|
-
if (event.kind === "status-update" && event.final) {
|
|
280
|
-
setIsStreaming(false);
|
|
281
|
-
break;
|
|
282
|
-
}
|
|
283
276
|
}
|
|
277
|
+
setIsStreaming(false);
|
|
284
278
|
} catch (err) {
|
|
285
279
|
if (err instanceof Error && err.name === "AbortError") {
|
|
286
280
|
return;
|
|
287
281
|
}
|
|
282
|
+
console.log("error", err);
|
|
288
283
|
setError(err instanceof Error ? err : new Error("Failed to stream message"));
|
|
289
284
|
} finally {
|
|
290
285
|
setLoading(false);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DistriProvider.tsx","../src/useAgents.ts","../src/useChat.ts","../src/useThreads.ts"],"sourcesContent":["import { createContext, useContext, useEffect, useState, ReactNode } from 'react';\nimport { DistriClient, DistriClientConfig } from '@distri/core';\n\ninterface DistriContextValue {\n client: DistriClient | null;\n error: Error | null;\n isLoading: boolean;\n}\n\nconst DistriContext = createContext<DistriContextValue>({\n client: null,\n error: null,\n isLoading: true\n});\n\ninterface DistriProviderProps {\n config: DistriClientConfig;\n children: ReactNode;\n}\n\nconst debug = (config: DistriClientConfig, ...args: any[]): void => {\n if (config.debug) {\n console.log('[DistriProvider]', ...args);\n }\n}\n\n\nexport function DistriProvider({ config, children }: DistriProviderProps) {\n const [client, setClient] = useState<DistriClient | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let currentClient: DistriClient | null = null;\n\n try {\n debug(config, '[DistriProvider] Initializing client with config:', config);\n currentClient = new DistriClient(config);\n setClient(currentClient);\n setError(null);\n setIsLoading(false);\n debug(config, '[DistriProvider] Client initialized successfully');\n } catch (err) {\n debug(config, '[DistriProvider] Failed to initialize client:', err);\n const error = err instanceof Error ? err : new Error('Failed to initialize client');\n setError(error);\n setClient(null);\n setIsLoading(false);\n }\n\n }, [config.baseUrl, config.apiVersion, config.debug]); // Only depend on key config values\n\n const contextValue: DistriContextValue = {\n client,\n error,\n isLoading\n };\n\n if (error) {\n console.error(config, '[DistriProvider] Rendering error state:', error.message);\n }\n\n if (isLoading) {\n debug(config, '[DistriProvider] Rendering loading state');\n }\n\n if (client) {\n debug(config, '[DistriProvider] Rendering with client available');\n }\n\n return (\n <DistriContext.Provider value={contextValue}>\n {children}\n </DistriContext.Provider>\n );\n}\n\nexport function useDistri(): DistriContextValue {\n const context = useContext(DistriContext);\n if (!context) {\n throw new Error('useDistri must be used within a DistriProvider');\n }\n return context;\n}\n\nexport function useDistriClient(): DistriClient {\n const { client, error, isLoading } = useDistri();\n\n if (isLoading) {\n throw new Error('Distri client is still loading');\n }\n\n if (error) {\n throw new Error(`Distri client initialization failed: ${error.message}`);\n }\n\n if (!client) {\n throw new Error('Distri client is not initialized');\n }\n\n return client;\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriAgent } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseAgentsResult {\n agents: DistriAgent[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n getAgent: (agentId: string) => Promise<DistriAgent>;\n}\n\nexport function useAgents(): UseAgentsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [agents, setAgents] = useState<DistriAgent[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAgents = useCallback(async () => {\n if (!client) {\n console.log('[useAgents] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useAgents] Fetching agents...');\n const fetchedAgents = await client.getAgents();\n console.log('[useAgents] Fetched agents:', fetchedAgents);\n setAgents(fetchedAgents);\n } catch (err) {\n console.error('[useAgents] Failed to fetch agents:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch agents'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const getAgent = useCallback(async (agentId: string): Promise<DistriAgent> => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n const agent = await client.getAgent(agentId);\n \n // Update the agent in our local state if it exists\n setAgents(prev => prev.map(a => a.id === agentId ? agent : a));\n \n return agent;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get agent');\n setError(error);\n throw error;\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useAgents] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useAgents] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useAgents] Client ready, fetching agents');\n fetchAgents();\n } else {\n console.log('[useAgents] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchAgents]);\n\n return {\n agents,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchAgents,\n getAgent\n };\n}","import { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n Message,\n MessageSendParams,\n TaskStatusUpdateEvent,\n DistriClient\n} from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseChatOptions {\n agentId: string;\n contextId?: string;\n}\n\nexport interface UseChatResult {\n loading: boolean;\n error: Error | null;\n messages: Message[];\n isStreaming: boolean;\n sendMessage: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;\n sendMessageStream: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;\n clearMessages: () => void;\n refreshMessages: () => Promise<void>;\n abort: () => void;\n}\n\nexport function useChat({ agentId, contextId }: UseChatOptions): UseChatResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [messages, setMessages] = useState<Message[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchMessages = useCallback(async () => {\n if (!client || !contextId) {\n setMessages([]);\n return;\n }\n\n console.log('inside: fetchMessages', client, contextId);\n\n try {\n setLoading(true);\n setError(null);\n const fetchedMessages = await client.getThreadMessages(contextId);\n setMessages(fetchedMessages);\n } catch (err) {\n console.error('[useThreadMessages] Failed to fetch messages:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch messages'));\n setMessages([]); // Clear messages on error\n } finally {\n setLoading(false);\n }\n }, [client, contextId]);\n\n useEffect(() => {\n console.log('useEffect', clientLoading, clientError, contextId, !clientLoading && !clientError && contextId);\n if (!clientLoading && !clientError && contextId) {\n fetchMessages();\n } else {\n setMessages([]);\n }\n }, [clientLoading, clientError, contextId, fetchMessages]);\n\n const sendMessage = useCallback(async (\n input: string,\n configuration?: MessageSendParams['configuration']\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n const userMessage = DistriClient.initMessage(input, 'user', contextId);\n // Add user message to local state immediately\n setMessages(prev => [...prev, userMessage]);\n\n const params = DistriClient.initMessageParams(userMessage, configuration);\n\n const result = await client.sendMessage(agentId, params);\n\n let message = undefined;\n if (result.kind === 'message') {\n message = (result as Message);\n } else if (result.kind === 'task') {\n message = result.status.message as Message;\n }\n\n if (!message) {\n throw new Error('Invalid response format');\n }\n\n setMessages((prev: Message[]) => {\n console.log('message', message.messageId);\n if (prev.find(msg => msg.messageId === message.messageId)) {\n console.log('message found', message.messageId);\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n console.log('message not found', message.messageId);\n return [...prev, message];\n }\n });\n } catch (err) {\n console.error(err);\n setError(err instanceof Error ? err : new Error('Failed to send message'));\n } finally {\n setLoading(false);\n }\n }, [client, agentId]);\n\n const sendMessageStream = useCallback(async (\n input: string,\n configuration?: MessageSendParams['configuration']\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n setIsStreaming(true);\n\n // Cancel any existing stream\n if (abortControllerRef.current) {\n console.log('aborting existing stream');\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n const userMessage = DistriClient.initMessage(input, 'user', contextId);\n // Add user message to local state immediately\n setMessages(prev => [...prev, userMessage]);\n\n console.log('userMessage', userMessage);\n const params = DistriClient.initMessageParams(userMessage, {\n blocking: false,\n acceptedOutputModes: ['text/plain'],\n ...configuration\n });\n\n const stream = await client.sendMessageStream(agentId, params);\n\n for await (const event of stream) {\n if (abortControllerRef.current?.signal.aborted) {\n console.log('abort signal received');\n break;\n }\n\n console.log('Stream event:', event); // Debug logging\n\n let message = undefined;\n if (event.kind === 'message') {\n message = (event as Message);\n } else if (event.kind === 'status-update') {\n message = (event as TaskStatusUpdateEvent).status.message as Message;\n }\n\n if (!message) continue;\n setMessages((prev: Message[]) => {\n if (prev.find(msg => msg.messageId === message.messageId)) {\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n return [...prev, message];\n }\n });\n\n if (event.kind === 'status-update' && (event as TaskStatusUpdateEvent).final) {\n setIsStreaming(false);\n break;\n }\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n // Stream was cancelled, not an error\n return;\n }\n\n setError(err instanceof Error ? err : new Error('Failed to stream message'));\n } finally {\n setLoading(false);\n setIsStreaming(false);\n }\n }, [client, agentId]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n const abort = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n }, []);\n\n return {\n loading: loading || clientLoading,\n error: error || clientError,\n messages,\n isStreaming,\n sendMessage,\n sendMessageStream,\n clearMessages,\n refreshMessages: fetchMessages,\n abort,\n };\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriThread } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseThreadsResult {\n threads: DistriThread[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n fetchThread: (threadId: string) => Promise<DistriThread>;\n updateThread: (threadId: string, localId?: string) => Promise<void>;\n}\n\nexport function useThreads(): UseThreadsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [threads, setThreads] = useState<DistriThread[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchThreads = useCallback(async () => {\n if (!client) {\n console.log('[useThreads] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useThreads] Fetching threads...');\n const fetchedThreads = await client.getThreads();\n console.log('[useThreads] Fetched threads:', fetchedThreads);\n setThreads(fetchedThreads);\n } catch (err) {\n console.error('[useThreads] Failed to fetch threads:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch threads'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const fetchThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n try {\n const response = await client.getThread(threadId);\n return response;\n } catch (err) {\n console.error('[useThreads] Failed to fetch thread:', err);\n throw err;\n }\n }, [client]);\n\n const deleteThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n // Try to delete from server (may not exist yet for local threads)\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error('Failed to delete thread');\n }\n\n // Remove from local state regardless of server response\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n } catch (err) {\n // Still remove from local state even if server delete fails\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n console.warn('Failed to delete thread from server, but removed locally:', err);\n }\n }, [client]);\n\n const updateThread = useCallback(async (threadId: string, localId?: string) => {\n if (!client) {\n return;\n }\n\n try {\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`);\n if (response.ok) {\n const updatedThread = await response.json();\n setThreads(prev => {\n // If a local thread with localId exists, replace it with the backend thread\n if (localId && prev.some(thread => thread.id === localId)) {\n return [\n updatedThread,\n ...prev.filter(thread => thread.id !== localId && thread.id !== threadId)\n ];\n }\n // Otherwise, just update by threadId\n return prev.map(thread =>\n thread.id === threadId ? updatedThread : thread\n );\n });\n }\n } catch (err) {\n console.warn('Failed to update thread:', err);\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useThreads] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useThreads] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useThreads] Client ready, fetching threads');\n fetchThreads();\n } else {\n console.log('[useThreads] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchThreads]);\n\n return {\n threads,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchThreads,\n deleteThread,\n fetchThread,\n updateThread\n };\n}\n\nexport interface UseThreadMessagesOptions {\n threadId: string | null;\n}"],"mappings":"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","names":["error","useState","useEffect","useState","error","useEffect","useState","useEffect","useCallback","DistriClient","useState","useCallback","useEffect","DistriClient","useState","useEffect","useCallback","useState","useCallback","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/DistriProvider.tsx","../src/useAgents.ts","../src/useChat.ts","../src/useThreads.ts"],"sourcesContent":["import { createContext, useContext, useEffect, useState, ReactNode } from 'react';\nimport { DistriClient, DistriClientConfig } from '@distri/core';\n\ninterface DistriContextValue {\n client: DistriClient | null;\n error: Error | null;\n isLoading: boolean;\n}\n\nconst DistriContext = createContext<DistriContextValue>({\n client: null,\n error: null,\n isLoading: true\n});\n\ninterface DistriProviderProps {\n config: DistriClientConfig;\n children: ReactNode;\n}\n\nconst debug = (config: DistriClientConfig, ...args: any[]): void => {\n if (config.debug) {\n console.log('[DistriProvider]', ...args);\n }\n}\n\n\nexport function DistriProvider({ config, children }: DistriProviderProps) {\n const [client, setClient] = useState<DistriClient | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let currentClient: DistriClient | null = null;\n\n try {\n debug(config, '[DistriProvider] Initializing client with config:', config);\n currentClient = new DistriClient(config);\n setClient(currentClient);\n setError(null);\n setIsLoading(false);\n debug(config, '[DistriProvider] Client initialized successfully');\n } catch (err) {\n debug(config, '[DistriProvider] Failed to initialize client:', err);\n const error = err instanceof Error ? err : new Error('Failed to initialize client');\n setError(error);\n setClient(null);\n setIsLoading(false);\n }\n\n }, [config.baseUrl, config.apiVersion, config.debug]); // Only depend on key config values\n\n const contextValue: DistriContextValue = {\n client,\n error,\n isLoading\n };\n\n if (error) {\n console.error(config, '[DistriProvider] Rendering error state:', error.message);\n }\n\n if (isLoading) {\n debug(config, '[DistriProvider] Rendering loading state');\n }\n\n if (client) {\n debug(config, '[DistriProvider] Rendering with client available');\n }\n\n return (\n <DistriContext.Provider value={contextValue}>\n {children}\n </DistriContext.Provider>\n );\n}\n\nexport function useDistri(): DistriContextValue {\n const context = useContext(DistriContext);\n if (!context) {\n throw new Error('useDistri must be used within a DistriProvider');\n }\n return context;\n}\n\nexport function useDistriClient(): DistriClient {\n const { client, error, isLoading } = useDistri();\n\n if (isLoading) {\n throw new Error('Distri client is still loading');\n }\n\n if (error) {\n throw new Error(`Distri client initialization failed: ${error.message}`);\n }\n\n if (!client) {\n throw new Error('Distri client is not initialized');\n }\n\n return client;\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriAgent } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseAgentsResult {\n agents: DistriAgent[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n getAgent: (agentId: string) => Promise<DistriAgent>;\n}\n\nexport function useAgents(): UseAgentsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [agents, setAgents] = useState<DistriAgent[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAgents = useCallback(async () => {\n if (!client) {\n console.log('[useAgents] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useAgents] Fetching agents...');\n const fetchedAgents = await client.getAgents();\n console.log('[useAgents] Fetched agents:', fetchedAgents);\n setAgents(fetchedAgents);\n } catch (err) {\n console.error('[useAgents] Failed to fetch agents:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch agents'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const getAgent = useCallback(async (agentId: string): Promise<DistriAgent> => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n const agent = await client.getAgent(agentId);\n \n // Update the agent in our local state if it exists\n setAgents(prev => prev.map(a => a.id === agentId ? agent : a));\n \n return agent;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get agent');\n setError(error);\n throw error;\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useAgents] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useAgents] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useAgents] Client ready, fetching agents');\n fetchAgents();\n } else {\n console.log('[useAgents] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchAgents]);\n\n return {\n agents,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchAgents,\n getAgent\n };\n}","import { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n Message,\n MessageSendParams,\n DistriClient\n} from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseChatOptions {\n agentId: string;\n contextId?: string;\n}\n\nexport interface UseChatResult {\n loading: boolean;\n error: Error | null;\n messages: Message[];\n isStreaming: boolean;\n sendMessage: (text: string | MessageSendParams) => Promise<void>;\n sendMessageStream: (text: string | MessageSendParams) => Promise<void>;\n clearMessages: () => void;\n refreshMessages: () => Promise<void>;\n abort: () => void;\n}\n\nexport function useChat({ agentId, contextId }: UseChatOptions): UseChatResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [messages, setMessages] = useState<Message[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchMessages = useCallback(async () => {\n if (!client || !contextId) {\n setMessages([]);\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n const fetchedMessages = await client.getThreadMessages(contextId);\n setMessages(fetchedMessages);\n } catch (err) {\n console.error('[useThreadMessages] Failed to fetch messages:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch messages'));\n setMessages([]); // Clear messages on error\n } finally {\n setLoading(false);\n }\n }, [client, contextId]);\n\n useEffect(() => {\n if (!clientLoading && !clientError && contextId) {\n fetchMessages();\n } else {\n setMessages([]);\n }\n }, [clientLoading, clientError, contextId, fetchMessages]);\n\n const sendMessage = useCallback(async (\n input: string | MessageSendParams,\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n let params: MessageSendParams;\n if (typeof input === 'string') {\n let userMessage = DistriClient.initMessage(input, 'user', contextId);\n params = DistriClient.initMessageParams(userMessage);\n } else {\n params = input;\n }\n // Add user message to local state immediately\n setMessages(prev => [...prev, params.message]);\n\n const result = await client.sendMessage(agentId, params);\n\n let message = undefined;\n if (result.kind === 'message') {\n message = (result as Message);\n } else if (result.kind === 'task') {\n message = result.status.message as Message;\n }\n\n if (!message) {\n throw new Error('Invalid response format');\n }\n\n setMessages((prev: Message[]) => {\n if (prev.find(msg => msg.messageId === message.messageId)) {\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n return [...prev, message];\n }\n });\n } catch (err) {\n console.error(err);\n setError(err instanceof Error ? err : new Error('Failed to send message'));\n } finally {\n setLoading(false);\n }\n }, [client, agentId]);\n\n const sendMessageStream = useCallback(async (\n input: string | MessageSendParams,\n ) => {\n if (!client) {\n setError(new Error('Client not available'));\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n setIsStreaming(true);\n\n // Cancel any existing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n let params: MessageSendParams;\n if (typeof input === 'string') {\n let userMessage = DistriClient.initMessage(input, 'user', contextId);\n params = DistriClient.initMessageParams(userMessage);\n } else {\n params = input;\n }\n // Add user message to local state immediately\n setMessages(prev => [...prev, params.message]);\n\n setIsStreaming(true);\n\n const stream = await client.sendMessageStream(agentId, params);\n\n for await (const event of stream) {\n\n if (abortControllerRef.current?.signal.aborted) {\n console.log('abort signal received');\n break;\n }\n\n let message = undefined;\n if (event.kind === 'message') {\n message = (event as Message);\n }\n\n if (!message) continue;\n setMessages((prev: Message[]) => {\n if (prev.find(msg => msg.messageId === message.messageId)) {\n return prev.map(msg => {\n if (msg.messageId === message.messageId) {\n return {\n ...msg,\n parts: [...msg.parts, ...message.parts],\n };\n }\n return msg;\n });\n } else {\n return [...prev, message];\n }\n });\n }\n setIsStreaming(false);\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n // Stream was cancelled, not an error\n return;\n }\n console.log('error', err);\n\n setError(err instanceof Error ? err : new Error('Failed to stream message'));\n } finally {\n setLoading(false);\n setIsStreaming(false);\n }\n }, [client, agentId]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n const abort = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n }, []);\n\n return {\n loading: loading || clientLoading,\n error: error || clientError,\n messages,\n isStreaming,\n sendMessage,\n sendMessageStream,\n clearMessages,\n refreshMessages: fetchMessages,\n abort,\n };\n}","import { useState, useEffect, useCallback } from 'react';\nimport { DistriThread } from '@distri/core';\nimport { useDistri } from './DistriProvider';\n\nexport interface UseThreadsResult {\n threads: DistriThread[];\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n deleteThread: (threadId: string) => Promise<void>;\n fetchThread: (threadId: string) => Promise<DistriThread>;\n updateThread: (threadId: string, localId?: string) => Promise<void>;\n}\n\nexport function useThreads(): UseThreadsResult {\n const { client, error: clientError, isLoading: clientLoading } = useDistri();\n const [threads, setThreads] = useState<DistriThread[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchThreads = useCallback(async () => {\n if (!client) {\n console.log('[useThreads] Client not available, skipping fetch');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n console.log('[useThreads] Fetching threads...');\n const fetchedThreads = await client.getThreads();\n console.log('[useThreads] Fetched threads:', fetchedThreads);\n setThreads(fetchedThreads);\n } catch (err) {\n console.error('[useThreads] Failed to fetch threads:', err);\n setError(err instanceof Error ? err : new Error('Failed to fetch threads'));\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const fetchThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n try {\n const response = await client.getThread(threadId);\n return response;\n } catch (err) {\n console.error('[useThreads] Failed to fetch thread:', err);\n throw err;\n }\n }, [client]);\n\n const deleteThread = useCallback(async (threadId: string) => {\n if (!client) {\n throw new Error('Client not available');\n }\n\n try {\n // Try to delete from server (may not exist yet for local threads)\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error('Failed to delete thread');\n }\n\n // Remove from local state regardless of server response\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n } catch (err) {\n // Still remove from local state even if server delete fails\n setThreads(prev => prev.filter(thread => thread.id !== threadId));\n console.warn('Failed to delete thread from server, but removed locally:', err);\n }\n }, [client]);\n\n const updateThread = useCallback(async (threadId: string, localId?: string) => {\n if (!client) {\n return;\n }\n\n try {\n const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`);\n if (response.ok) {\n const updatedThread = await response.json();\n setThreads(prev => {\n // If a local thread with localId exists, replace it with the backend thread\n if (localId && prev.some(thread => thread.id === localId)) {\n return [\n updatedThread,\n ...prev.filter(thread => thread.id !== localId && thread.id !== threadId)\n ];\n }\n // Otherwise, just update by threadId\n return prev.map(thread =>\n thread.id === threadId ? updatedThread : thread\n );\n });\n }\n } catch (err) {\n console.warn('Failed to update thread:', err);\n }\n }, [client]);\n\n useEffect(() => {\n if (clientLoading) {\n console.log('[useThreads] Client is loading, waiting...');\n setLoading(true);\n return;\n }\n\n if (clientError) {\n console.error('[useThreads] Client error:', clientError);\n setError(clientError);\n setLoading(false);\n return;\n }\n\n if (client) {\n console.log('[useThreads] Client ready, fetching threads');\n fetchThreads();\n } else {\n console.log('[useThreads] No client available');\n setLoading(false);\n }\n }, [clientLoading, clientError, client, fetchThreads]);\n\n return {\n threads,\n loading: loading || clientLoading,\n error: error || clientError,\n refetch: fetchThreads,\n deleteThread,\n fetchThread,\n updateThread\n };\n}\n\nexport interface UseThreadMessagesOptions {\n threadId: string | null;\n}"],"mappings":";AAAA,SAAS,eAAe,YAAY,WAAW,gBAA2B;AAC1E,SAAS,oBAAwC;AAsE7C;AA9DJ,IAAM,gBAAgB,cAAkC;AAAA,EACtD,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACb,CAAC;AAOD,IAAM,QAAQ,CAAC,WAA+B,SAAsB;AAClE,MAAI,OAAO,OAAO;AAChB,YAAQ,IAAI,oBAAoB,GAAG,IAAI;AAAA,EACzC;AACF;AAGO,SAAS,eAAe,EAAE,QAAQ,SAAS,GAAwB;AACxE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA8B,IAAI;AAC9D,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,IAAI;AAE/C,YAAU,MAAM;AACd,QAAI,gBAAqC;AAEzC,QAAI;AACF,YAAM,QAAQ,qDAAqD,MAAM;AACzE,sBAAgB,IAAI,aAAa,MAAM;AACvC,gBAAU,aAAa;AACvB,eAAS,IAAI;AACb,mBAAa,KAAK;AAClB,YAAM,QAAQ,kDAAkD;AAAA,IAClE,SAAS,KAAK;AACZ,YAAM,QAAQ,iDAAiD,GAAG;AAClE,YAAMA,SAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,6BAA6B;AAClF,eAASA,MAAK;AACd,gBAAU,IAAI;AACd,mBAAa,KAAK;AAAA,IACpB;AAAA,EAEF,GAAG,CAAC,OAAO,SAAS,OAAO,YAAY,OAAO,KAAK,CAAC;AAEpD,QAAM,eAAmC;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,OAAO;AACT,YAAQ,MAAM,QAAQ,2CAA2C,MAAM,OAAO;AAAA,EAChF;AAEA,MAAI,WAAW;AACb,UAAM,QAAQ,0CAA0C;AAAA,EAC1D;AAEA,MAAI,QAAQ;AACV,UAAM,QAAQ,kDAAkD;AAAA,EAClE;AAEA,SACE,oBAAC,cAAc,UAAd,EAAuB,OAAO,cAC5B,UACH;AAEJ;AAEO,SAAS,YAAgC;AAC9C,QAAM,UAAU,WAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;AAEO,SAAS,kBAAgC;AAC9C,QAAM,EAAE,QAAQ,OAAO,UAAU,IAAI,UAAU;AAE/C,MAAI,WAAW;AACb,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,MAAI,OAAO;AACT,UAAM,IAAI,MAAM,wCAAwC,MAAM,OAAO,EAAE;AAAA,EACzE;AAEA,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAEA,SAAO;AACT;;;ACrGA,SAAS,YAAAC,WAAU,aAAAC,YAAW,mBAAmB;AAY1C,SAAS,YAA6B;AAC3C,QAAM,EAAE,QAAQ,OAAO,aAAa,WAAW,cAAc,IAAI,UAAU;AAC3E,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAwB,CAAC,CAAC;AACtD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AAErD,QAAM,cAAc,YAAY,YAAY;AAC1C,QAAI,CAAC,QAAQ;AACX,cAAQ,IAAI,kDAAkD;AAC9D;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,cAAQ,IAAI,gCAAgC;AAC5C,YAAM,gBAAgB,MAAM,OAAO,UAAU;AAC7C,cAAQ,IAAI,+BAA+B,aAAa;AACxD,gBAAU,aAAa;AAAA,IACzB,SAAS,KAAK;AACZ,cAAQ,MAAM,uCAAuC,GAAG;AACxD,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAAA,IAC3E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,WAAW,YAAY,OAAO,YAA0C;AAC5E,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,SAAS,OAAO;AAG3C,gBAAU,UAAQ,KAAK,IAAI,OAAK,EAAE,OAAO,UAAU,QAAQ,CAAC,CAAC;AAE7D,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,YAAMC,SAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,qBAAqB;AAC1E,eAASA,MAAK;AACd,YAAMA;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,EAAAC,WAAU,MAAM;AACd,QAAI,eAAe;AACjB,cAAQ,IAAI,2CAA2C;AACvD,iBAAW,IAAI;AACf;AAAA,IACF;AAEA,QAAI,aAAa;AACf,cAAQ,MAAM,6BAA6B,WAAW;AACtD,eAAS,WAAW;AACpB,iBAAW,KAAK;AAChB;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,cAAQ,IAAI,2CAA2C;AACvD,kBAAY;AAAA,IACd,OAAO;AACL,cAAQ,IAAI,iCAAiC;AAC7C,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,QAAQ,WAAW,CAAC;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB,SAAS;AAAA,IACT;AAAA,EACF;AACF;;;ACxFA,SAAS,YAAAC,WAAU,aAAAC,YAAW,eAAAC,cAAa,cAAc;AACzD;AAAA,EAGE,gBAAAC;AAAA,OACK;AAoBA,SAAS,QAAQ,EAAE,SAAS,UAAU,GAAkC;AAC7E,QAAM,EAAE,QAAQ,OAAO,aAAa,WAAW,cAAc,IAAI,UAAU;AAC3E,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AACrD,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAoB,CAAC,CAAC;AACtD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,qBAAqB,OAA+B,IAAI;AAE9D,QAAM,gBAAgBC,aAAY,YAAY;AAC5C,QAAI,CAAC,UAAU,CAAC,WAAW;AACzB,kBAAY,CAAC,CAAC;AACd;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,YAAM,kBAAkB,MAAM,OAAO,kBAAkB,SAAS;AAChE,kBAAY,eAAe;AAAA,IAC7B,SAAS,KAAK;AACZ,cAAQ,MAAM,iDAAiD,GAAG;AAClE,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,0BAA0B,CAAC;AAC3E,kBAAY,CAAC,CAAC;AAAA,IAChB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,iBAAiB,CAAC,eAAe,WAAW;AAC/C,oBAAc;AAAA,IAChB,OAAO;AACL,kBAAY,CAAC,CAAC;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,WAAW,aAAa,CAAC;AAEzD,QAAM,cAAcD,aAAY,OAC9B,UACG;AACH,QAAI,CAAC,QAAQ;AACX,eAAS,IAAI,MAAM,sBAAsB,CAAC;AAC1C;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AAEb,UAAI;AACJ,UAAI,OAAO,UAAU,UAAU;AAC7B,YAAI,cAAcE,cAAa,YAAY,OAAO,QAAQ,SAAS;AACnE,iBAASA,cAAa,kBAAkB,WAAW;AAAA,MACrD,OAAO;AACL,iBAAS;AAAA,MACX;AAEA,kBAAY,UAAQ,CAAC,GAAG,MAAM,OAAO,OAAO,CAAC;AAE7C,YAAM,SAAS,MAAM,OAAO,YAAY,SAAS,MAAM;AAEvD,UAAI,UAAU;AACd,UAAI,OAAO,SAAS,WAAW;AAC7B,kBAAW;AAAA,MACb,WAAW,OAAO,SAAS,QAAQ;AACjC,kBAAU,OAAO,OAAO;AAAA,MAC1B;AAEA,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAEA,kBAAY,CAAC,SAAoB;AAC/B,YAAI,KAAK,KAAK,SAAO,IAAI,cAAc,QAAQ,SAAS,GAAG;AACzD,iBAAO,KAAK,IAAI,SAAO;AACrB,gBAAI,IAAI,cAAc,QAAQ,WAAW;AACvC,qBAAO;AAAA,gBACL,GAAG;AAAA,gBACH,OAAO,CAAC,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK;AAAA,cACxC;AAAA,YACF;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,OAAO;AACL,iBAAO,CAAC,GAAG,MAAM,OAAO;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,cAAQ,MAAM,GAAG;AACjB,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAAA,IAC3E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,QAAM,oBAAoBF,aAAY,OACpC,UACG;AACH,QAAI,CAAC,QAAQ;AACX,eAAS,IAAI,MAAM,sBAAsB,CAAC;AAC1C;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,qBAAe,IAAI;AAGnB,UAAI,mBAAmB,SAAS;AAC9B,2BAAmB,QAAQ,MAAM;AAAA,MACnC;AACA,yBAAmB,UAAU,IAAI,gBAAgB;AAEjD,UAAI;AACJ,UAAI,OAAO,UAAU,UAAU;AAC7B,YAAI,cAAcE,cAAa,YAAY,OAAO,QAAQ,SAAS;AACnE,iBAASA,cAAa,kBAAkB,WAAW;AAAA,MACrD,OAAO;AACL,iBAAS;AAAA,MACX;AAEA,kBAAY,UAAQ,CAAC,GAAG,MAAM,OAAO,OAAO,CAAC;AAE7C,qBAAe,IAAI;AAEnB,YAAM,SAAS,MAAM,OAAO,kBAAkB,SAAS,MAAM;AAE7D,uBAAiB,SAAS,QAAQ;AAEhC,YAAI,mBAAmB,SAAS,OAAO,SAAS;AAC9C,kBAAQ,IAAI,uBAAuB;AACnC;AAAA,QACF;AAEA,YAAI,UAAU;AACd,YAAI,MAAM,SAAS,WAAW;AAC5B,oBAAW;AAAA,QACb;AAEA,YAAI,CAAC;AAAS;AACd,oBAAY,CAAC,SAAoB;AAC/B,cAAI,KAAK,KAAK,SAAO,IAAI,cAAc,QAAQ,SAAS,GAAG;AACzD,mBAAO,KAAK,IAAI,SAAO;AACrB,kBAAI,IAAI,cAAc,QAAQ,WAAW;AACvC,uBAAO;AAAA,kBACL,GAAG;AAAA,kBACH,OAAO,CAAC,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK;AAAA,gBACxC;AAAA,cACF;AACA,qBAAO;AAAA,YACT,CAAC;AAAA,UACH,OAAO;AACL,mBAAO,CAAC,GAAG,MAAM,OAAO;AAAA,UAC1B;AAAA,QACF,CAAC;AAAA,MACH;AACA,qBAAe,KAAK;AAAA,IACtB,SAAS,KAAK;AACZ,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AAErD;AAAA,MACF;AACA,cAAQ,IAAI,SAAS,GAAG;AAExB,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,0BAA0B,CAAC;AAAA,IAC7E,UAAE;AACA,iBAAW,KAAK;AAChB,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,QAAM,gBAAgBF,aAAY,MAAM;AACtC,gBAAY,CAAC,CAAC;AAAA,EAChB,GAAG,CAAC,CAAC;AAGL,EAAAC,WAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,mBAAmB,SAAS;AAC9B,2BAAmB,QAAQ,MAAM;AAAA,MACnC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQD,aAAY,MAAM;AAC9B,QAAI,mBAAmB,SAAS;AAC9B,yBAAmB,QAAQ,MAAM;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,EACF;AACF;;;AClOA,SAAS,YAAAG,WAAU,aAAAC,YAAW,eAAAC,oBAAmB;AAc1C,SAAS,aAA+B;AAC7C,QAAM,EAAE,QAAQ,OAAO,aAAa,WAAW,cAAc,IAAI,UAAU;AAC3E,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAyB,CAAC,CAAC;AACzD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AAErD,QAAM,eAAeC,aAAY,YAAY;AAC3C,QAAI,CAAC,QAAQ;AACX,cAAQ,IAAI,mDAAmD;AAC/D;AAAA,IACF;AAEA,QAAI;AACF,iBAAW,IAAI;AACf,eAAS,IAAI;AACb,cAAQ,IAAI,kCAAkC;AAC9C,YAAM,iBAAiB,MAAM,OAAO,WAAW;AAC/C,cAAQ,IAAI,iCAAiC,cAAc;AAC3D,iBAAW,cAAc;AAAA,IAC3B,SAAS,KAAK;AACZ,cAAQ,MAAM,yCAAyC,GAAG;AAC1D,eAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,yBAAyB,CAAC;AAAA,IAC5E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,cAAcA,aAAY,OAAO,aAAqB;AAC1D,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,UAAU,QAAQ;AAChD,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,cAAQ,MAAM,wCAAwC,GAAG;AACzD,YAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAeA,aAAY,OAAO,aAAqB;AAC3D,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,mBAAmB,QAAQ,IAAI;AAAA,QAC3E,QAAQ;AAAA,MACV,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAGA,iBAAW,UAAQ,KAAK,OAAO,YAAU,OAAO,OAAO,QAAQ,CAAC;AAAA,IAClE,SAAS,KAAK;AAEZ,iBAAW,UAAQ,KAAK,OAAO,YAAU,OAAO,OAAO,QAAQ,CAAC;AAChE,cAAQ,KAAK,6DAA6D,GAAG;AAAA,IAC/E;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAeA,aAAY,OAAO,UAAkB,YAAqB;AAC7E,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,mBAAmB,QAAQ,EAAE;AAC3E,UAAI,SAAS,IAAI;AACf,cAAM,gBAAgB,MAAM,SAAS,KAAK;AAC1C,mBAAW,UAAQ;AAEjB,cAAI,WAAW,KAAK,KAAK,YAAU,OAAO,OAAO,OAAO,GAAG;AACzD,mBAAO;AAAA,cACL;AAAA,cACA,GAAG,KAAK,OAAO,YAAU,OAAO,OAAO,WAAW,OAAO,OAAO,QAAQ;AAAA,YAC1E;AAAA,UACF;AAEA,iBAAO,KAAK;AAAA,YAAI,YACd,OAAO,OAAO,WAAW,gBAAgB;AAAA,UAC3C;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,KAAK,4BAA4B,GAAG;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,EAAAC,WAAU,MAAM;AACd,QAAI,eAAe;AACjB,cAAQ,IAAI,4CAA4C;AACxD,iBAAW,IAAI;AACf;AAAA,IACF;AAEA,QAAI,aAAa;AACf,cAAQ,MAAM,8BAA8B,WAAW;AACvD,eAAS,WAAW;AACpB,iBAAW,KAAK;AAChB;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,cAAQ,IAAI,6CAA6C;AACzD,mBAAa;AAAA,IACf,OAAO;AACL,cAAQ,IAAI,kCAAkC;AAC9C,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,QAAQ,YAAY,CAAC;AAErD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["error","useState","useEffect","useState","error","useEffect","useState","useEffect","useCallback","DistriClient","useState","useCallback","useEffect","DistriClient","useState","useEffect","useCallback","useState","useCallback","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@distri/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "React hooks and components for Distri Framework",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
"README.md"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@distri/core": "0.1.6",
|
|
21
20
|
"react-markdown": "^9.0.0",
|
|
22
21
|
"react-syntax-highlighter": "^15.5.0"
|
|
23
22
|
},
|
|
24
23
|
"peerDependencies": {
|
|
25
|
-
"react": "^18.0.0"
|
|
24
|
+
"react": "^18.0.0",
|
|
25
|
+
"@distri/core": "0.1.8"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/react": "^18.0.0",
|