@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 CHANGED
@@ -34,8 +34,8 @@ interface UseChatResult {
34
34
  error: Error | null;
35
35
  messages: Message[];
36
36
  isStreaming: boolean;
37
- sendMessage: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;
38
- sendMessageStream: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;
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, configuration?: MessageSendParams['configuration']) => Promise<void>;
38
- sendMessageStream: (text: string, configuration?: MessageSendParams['configuration']) => Promise<void>;
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, configuration) => {
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
- const userMessage = import_core2.DistriClient.initMessage(input, "user", contextId);
219
- setMessages((prev) => [...prev, userMessage]);
220
- const params = import_core2.DistriClient.initMessageParams(userMessage, configuration);
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, configuration) => {
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
- const userMessage = import_core2.DistriClient.initMessage(input, "user", contextId);
271
- setMessages((prev) => [...prev, userMessage]);
272
- console.log("userMessage", userMessage);
273
- const params = import_core2.DistriClient.initMessageParams(userMessage, {
274
- blocking: false,
275
- acceptedOutputModes: ["text/plain"],
276
- ...configuration
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":"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","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, configuration) => {
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
- const userMessage = DistriClient2.initMessage(input, "user", contextId);
190
- setMessages((prev) => [...prev, userMessage]);
191
- const params = DistriClient2.initMessageParams(userMessage, configuration);
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, configuration) => {
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
- const userMessage = DistriClient2.initMessage(input, "user", contextId);
242
- setMessages((prev) => [...prev, userMessage]);
243
- console.log("userMessage", userMessage);
244
- const params = DistriClient2.initMessageParams(userMessage, {
245
- blocking: false,
246
- acceptedOutputModes: ["text/plain"],
247
- ...configuration
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);
@@ -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":"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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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@distri/react",
3
- "version": "0.1.6",
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",