@distri/react 0.1.8 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -0
- package/dist/globals.css +2358 -0
- package/dist/globals.d.cts +2 -0
- package/dist/globals.d.ts +2 -0
- package/dist/index.cjs +4724 -0
- package/dist/index.d.cts +850 -0
- package/dist/index.d.ts +811 -17
- package/dist/index.js +4358 -217
- package/package.json +42 -32
- package/dist/index.d.mts +0 -56
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -434
- package/dist/index.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,52 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@distri/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "React hooks and components for Distri Framework",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.js",
|
|
7
8
|
"types": "dist/index.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
}
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./globals.css": "./dist/globals.css"
|
|
14
16
|
},
|
|
15
17
|
"files": [
|
|
16
18
|
"dist",
|
|
17
19
|
"README.md"
|
|
18
20
|
],
|
|
19
21
|
"dependencies": {
|
|
20
|
-
"react-
|
|
21
|
-
"react-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"react": "^
|
|
25
|
-
"@
|
|
22
|
+
"@radix-ui/react-avatar": "^1.1.10",
|
|
23
|
+
"@radix-ui/react-dialog": "^1.1.14",
|
|
24
|
+
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
|
25
|
+
"@radix-ui/react-select": "^2.2.5",
|
|
26
|
+
"@radix-ui/react-separator": "^1.1.7",
|
|
27
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
28
|
+
"@radix-ui/react-toast": "^1.2.14",
|
|
29
|
+
"@radix-ui/react-tooltip": "^1.2.7",
|
|
30
|
+
"class-variance-authority": "^0.7.0",
|
|
31
|
+
"clsx": "^2.0.0",
|
|
32
|
+
"lucide-react": "^0.460.0",
|
|
33
|
+
"next-themes": "^0.4.6",
|
|
34
|
+
"react-markdown": "^10.1.0",
|
|
35
|
+
"react-syntax-highlighter": "^15.5.0",
|
|
36
|
+
"sonner": "^2.0.6",
|
|
37
|
+
"tailwind-merge": "^2.0.0",
|
|
38
|
+
"tailwindcss-animate": "^1.0.7"
|
|
26
39
|
},
|
|
27
40
|
"devDependencies": {
|
|
41
|
+
"@types/node": "^20.0.0",
|
|
28
42
|
"@types/react": "^18.0.0",
|
|
43
|
+
"@types/react-dom": "^18.0.0",
|
|
29
44
|
"@types/react-syntax-highlighter": "^15.5.0",
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"tsup": "^
|
|
35
|
-
"typescript": "^5.0.0"
|
|
45
|
+
"autoprefixer": "^10.4.16",
|
|
46
|
+
"eslint": "^8.57.0",
|
|
47
|
+
"postcss": "^8.4.35",
|
|
48
|
+
"tailwindcss": "^3.4.0",
|
|
49
|
+
"tsup": "^8.0.0",
|
|
50
|
+
"typescript": "^5.0.0",
|
|
51
|
+
"@distri/core": "0.2.2"
|
|
36
52
|
},
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"react",
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"author": "Distri Team",
|
|
45
|
-
"license": "MIT",
|
|
46
|
-
"repository": {
|
|
47
|
-
"type": "git",
|
|
48
|
-
"url": "https://github.com/distrihub/distrijs.git",
|
|
49
|
-
"directory": "packages/react"
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"react": ">=18.0.0",
|
|
55
|
+
"react-dom": ">=18.0.0",
|
|
56
|
+
"@distri/core": "^0.2.2"
|
|
57
|
+
},
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
50
60
|
},
|
|
51
61
|
"scripts": {
|
|
52
62
|
"build": "tsup",
|
package/dist/index.d.mts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
import { DistriClientConfig, DistriClient, DistriAgent, Message, MessageSendParams, DistriThread } from '@distri/core';
|
|
4
|
-
export { AgentCard, DistriAgent, DistriClientConfig, DistriThread, Message, MessageSendParams, Task, TaskStatus } from '@distri/core';
|
|
5
|
-
|
|
6
|
-
interface DistriContextValue {
|
|
7
|
-
client: DistriClient | null;
|
|
8
|
-
error: Error | null;
|
|
9
|
-
isLoading: boolean;
|
|
10
|
-
}
|
|
11
|
-
interface DistriProviderProps {
|
|
12
|
-
config: DistriClientConfig;
|
|
13
|
-
children: ReactNode;
|
|
14
|
-
}
|
|
15
|
-
declare function DistriProvider({ config, children }: DistriProviderProps): react_jsx_runtime.JSX.Element;
|
|
16
|
-
declare function useDistri(): DistriContextValue;
|
|
17
|
-
declare function useDistriClient(): DistriClient;
|
|
18
|
-
|
|
19
|
-
interface UseAgentsResult {
|
|
20
|
-
agents: DistriAgent[];
|
|
21
|
-
loading: boolean;
|
|
22
|
-
error: Error | null;
|
|
23
|
-
refetch: () => Promise<void>;
|
|
24
|
-
getAgent: (agentId: string) => Promise<DistriAgent>;
|
|
25
|
-
}
|
|
26
|
-
declare function useAgents(): UseAgentsResult;
|
|
27
|
-
|
|
28
|
-
interface UseChatOptions {
|
|
29
|
-
agentId: string;
|
|
30
|
-
contextId?: string;
|
|
31
|
-
}
|
|
32
|
-
interface UseChatResult {
|
|
33
|
-
loading: boolean;
|
|
34
|
-
error: Error | null;
|
|
35
|
-
messages: Message[];
|
|
36
|
-
isStreaming: boolean;
|
|
37
|
-
sendMessage: (text: string | MessageSendParams) => Promise<void>;
|
|
38
|
-
sendMessageStream: (text: string | MessageSendParams) => Promise<void>;
|
|
39
|
-
clearMessages: () => void;
|
|
40
|
-
refreshMessages: () => Promise<void>;
|
|
41
|
-
abort: () => void;
|
|
42
|
-
}
|
|
43
|
-
declare function useChat({ agentId, contextId }: UseChatOptions): UseChatResult;
|
|
44
|
-
|
|
45
|
-
interface UseThreadsResult {
|
|
46
|
-
threads: DistriThread[];
|
|
47
|
-
loading: boolean;
|
|
48
|
-
error: Error | null;
|
|
49
|
-
refetch: () => Promise<void>;
|
|
50
|
-
deleteThread: (threadId: string) => Promise<void>;
|
|
51
|
-
fetchThread: (threadId: string) => Promise<DistriThread>;
|
|
52
|
-
updateThread: (threadId: string, localId?: string) => Promise<void>;
|
|
53
|
-
}
|
|
54
|
-
declare function useThreads(): UseThreadsResult;
|
|
55
|
-
|
|
56
|
-
export { DistriProvider, type UseAgentsResult, type UseChatOptions, type UseChatResult, useAgents, useChat, useDistri, useDistriClient, useThreads };
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
// src/DistriProvider.tsx
|
|
2
|
-
import { createContext, useContext, useEffect, useState } from "react";
|
|
3
|
-
import { DistriClient } from "@distri/core";
|
|
4
|
-
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
var DistriContext = createContext({
|
|
6
|
-
client: null,
|
|
7
|
-
error: null,
|
|
8
|
-
isLoading: true
|
|
9
|
-
});
|
|
10
|
-
var debug = (config, ...args) => {
|
|
11
|
-
if (config.debug) {
|
|
12
|
-
console.log("[DistriProvider]", ...args);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
function DistriProvider({ config, children }) {
|
|
16
|
-
const [client, setClient] = useState(null);
|
|
17
|
-
const [error, setError] = useState(null);
|
|
18
|
-
const [isLoading, setIsLoading] = useState(true);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
let currentClient = null;
|
|
21
|
-
try {
|
|
22
|
-
debug(config, "[DistriProvider] Initializing client with config:", config);
|
|
23
|
-
currentClient = new DistriClient(config);
|
|
24
|
-
setClient(currentClient);
|
|
25
|
-
setError(null);
|
|
26
|
-
setIsLoading(false);
|
|
27
|
-
debug(config, "[DistriProvider] Client initialized successfully");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
debug(config, "[DistriProvider] Failed to initialize client:", err);
|
|
30
|
-
const error2 = err instanceof Error ? err : new Error("Failed to initialize client");
|
|
31
|
-
setError(error2);
|
|
32
|
-
setClient(null);
|
|
33
|
-
setIsLoading(false);
|
|
34
|
-
}
|
|
35
|
-
}, [config.baseUrl, config.apiVersion, config.debug]);
|
|
36
|
-
const contextValue = {
|
|
37
|
-
client,
|
|
38
|
-
error,
|
|
39
|
-
isLoading
|
|
40
|
-
};
|
|
41
|
-
if (error) {
|
|
42
|
-
console.error(config, "[DistriProvider] Rendering error state:", error.message);
|
|
43
|
-
}
|
|
44
|
-
if (isLoading) {
|
|
45
|
-
debug(config, "[DistriProvider] Rendering loading state");
|
|
46
|
-
}
|
|
47
|
-
if (client) {
|
|
48
|
-
debug(config, "[DistriProvider] Rendering with client available");
|
|
49
|
-
}
|
|
50
|
-
return /* @__PURE__ */ jsx(DistriContext.Provider, { value: contextValue, children });
|
|
51
|
-
}
|
|
52
|
-
function useDistri() {
|
|
53
|
-
const context = useContext(DistriContext);
|
|
54
|
-
if (!context) {
|
|
55
|
-
throw new Error("useDistri must be used within a DistriProvider");
|
|
56
|
-
}
|
|
57
|
-
return context;
|
|
58
|
-
}
|
|
59
|
-
function useDistriClient() {
|
|
60
|
-
const { client, error, isLoading } = useDistri();
|
|
61
|
-
if (isLoading) {
|
|
62
|
-
throw new Error("Distri client is still loading");
|
|
63
|
-
}
|
|
64
|
-
if (error) {
|
|
65
|
-
throw new Error(`Distri client initialization failed: ${error.message}`);
|
|
66
|
-
}
|
|
67
|
-
if (!client) {
|
|
68
|
-
throw new Error("Distri client is not initialized");
|
|
69
|
-
}
|
|
70
|
-
return client;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// src/useAgents.ts
|
|
74
|
-
import { useState as useState2, useEffect as useEffect2, useCallback } from "react";
|
|
75
|
-
function useAgents() {
|
|
76
|
-
const { client, error: clientError, isLoading: clientLoading } = useDistri();
|
|
77
|
-
const [agents, setAgents] = useState2([]);
|
|
78
|
-
const [loading, setLoading] = useState2(true);
|
|
79
|
-
const [error, setError] = useState2(null);
|
|
80
|
-
const fetchAgents = useCallback(async () => {
|
|
81
|
-
if (!client) {
|
|
82
|
-
console.log("[useAgents] Client not available, skipping fetch");
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
try {
|
|
86
|
-
setLoading(true);
|
|
87
|
-
setError(null);
|
|
88
|
-
console.log("[useAgents] Fetching agents...");
|
|
89
|
-
const fetchedAgents = await client.getAgents();
|
|
90
|
-
console.log("[useAgents] Fetched agents:", fetchedAgents);
|
|
91
|
-
setAgents(fetchedAgents);
|
|
92
|
-
} catch (err) {
|
|
93
|
-
console.error("[useAgents] Failed to fetch agents:", err);
|
|
94
|
-
setError(err instanceof Error ? err : new Error("Failed to fetch agents"));
|
|
95
|
-
} finally {
|
|
96
|
-
setLoading(false);
|
|
97
|
-
}
|
|
98
|
-
}, [client]);
|
|
99
|
-
const getAgent = useCallback(async (agentId) => {
|
|
100
|
-
if (!client) {
|
|
101
|
-
throw new Error("Client not available");
|
|
102
|
-
}
|
|
103
|
-
try {
|
|
104
|
-
const agent = await client.getAgent(agentId);
|
|
105
|
-
setAgents((prev) => prev.map((a) => a.id === agentId ? agent : a));
|
|
106
|
-
return agent;
|
|
107
|
-
} catch (err) {
|
|
108
|
-
const error2 = err instanceof Error ? err : new Error("Failed to get agent");
|
|
109
|
-
setError(error2);
|
|
110
|
-
throw error2;
|
|
111
|
-
}
|
|
112
|
-
}, [client]);
|
|
113
|
-
useEffect2(() => {
|
|
114
|
-
if (clientLoading) {
|
|
115
|
-
console.log("[useAgents] Client is loading, waiting...");
|
|
116
|
-
setLoading(true);
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (clientError) {
|
|
120
|
-
console.error("[useAgents] Client error:", clientError);
|
|
121
|
-
setError(clientError);
|
|
122
|
-
setLoading(false);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
if (client) {
|
|
126
|
-
console.log("[useAgents] Client ready, fetching agents");
|
|
127
|
-
fetchAgents();
|
|
128
|
-
} else {
|
|
129
|
-
console.log("[useAgents] No client available");
|
|
130
|
-
setLoading(false);
|
|
131
|
-
}
|
|
132
|
-
}, [clientLoading, clientError, client, fetchAgents]);
|
|
133
|
-
return {
|
|
134
|
-
agents,
|
|
135
|
-
loading: loading || clientLoading,
|
|
136
|
-
error: error || clientError,
|
|
137
|
-
refetch: fetchAgents,
|
|
138
|
-
getAgent
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// src/useChat.ts
|
|
143
|
-
import { useState as useState3, useEffect as useEffect3, useCallback as useCallback2, useRef } from "react";
|
|
144
|
-
import {
|
|
145
|
-
DistriClient as DistriClient2
|
|
146
|
-
} from "@distri/core";
|
|
147
|
-
function useChat({ agentId, contextId }) {
|
|
148
|
-
const { client, error: clientError, isLoading: clientLoading } = useDistri();
|
|
149
|
-
const [loading, setLoading] = useState3(false);
|
|
150
|
-
const [error, setError] = useState3(null);
|
|
151
|
-
const [messages, setMessages] = useState3([]);
|
|
152
|
-
const [isStreaming, setIsStreaming] = useState3(false);
|
|
153
|
-
const abortControllerRef = useRef(null);
|
|
154
|
-
const fetchMessages = useCallback2(async () => {
|
|
155
|
-
if (!client || !contextId) {
|
|
156
|
-
setMessages([]);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
setLoading(true);
|
|
161
|
-
setError(null);
|
|
162
|
-
const fetchedMessages = await client.getThreadMessages(contextId);
|
|
163
|
-
setMessages(fetchedMessages);
|
|
164
|
-
} catch (err) {
|
|
165
|
-
console.error("[useThreadMessages] Failed to fetch messages:", err);
|
|
166
|
-
setError(err instanceof Error ? err : new Error("Failed to fetch messages"));
|
|
167
|
-
setMessages([]);
|
|
168
|
-
} finally {
|
|
169
|
-
setLoading(false);
|
|
170
|
-
}
|
|
171
|
-
}, [client, contextId]);
|
|
172
|
-
useEffect3(() => {
|
|
173
|
-
if (!clientLoading && !clientError && contextId) {
|
|
174
|
-
fetchMessages();
|
|
175
|
-
} else {
|
|
176
|
-
setMessages([]);
|
|
177
|
-
}
|
|
178
|
-
}, [clientLoading, clientError, contextId, fetchMessages]);
|
|
179
|
-
const sendMessage = useCallback2(async (input) => {
|
|
180
|
-
if (!client) {
|
|
181
|
-
setError(new Error("Client not available"));
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
try {
|
|
185
|
-
setLoading(true);
|
|
186
|
-
setError(null);
|
|
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]);
|
|
195
|
-
const result = await client.sendMessage(agentId, params);
|
|
196
|
-
let message = void 0;
|
|
197
|
-
if (result.kind === "message") {
|
|
198
|
-
message = result;
|
|
199
|
-
} else if (result.kind === "task") {
|
|
200
|
-
message = result.status.message;
|
|
201
|
-
}
|
|
202
|
-
if (!message) {
|
|
203
|
-
throw new Error("Invalid response format");
|
|
204
|
-
}
|
|
205
|
-
setMessages((prev) => {
|
|
206
|
-
if (prev.find((msg) => msg.messageId === message.messageId)) {
|
|
207
|
-
return prev.map((msg) => {
|
|
208
|
-
if (msg.messageId === message.messageId) {
|
|
209
|
-
return {
|
|
210
|
-
...msg,
|
|
211
|
-
parts: [...msg.parts, ...message.parts]
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
return msg;
|
|
215
|
-
});
|
|
216
|
-
} else {
|
|
217
|
-
return [...prev, message];
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
} catch (err) {
|
|
221
|
-
console.error(err);
|
|
222
|
-
setError(err instanceof Error ? err : new Error("Failed to send message"));
|
|
223
|
-
} finally {
|
|
224
|
-
setLoading(false);
|
|
225
|
-
}
|
|
226
|
-
}, [client, agentId]);
|
|
227
|
-
const sendMessageStream = useCallback2(async (input) => {
|
|
228
|
-
if (!client) {
|
|
229
|
-
setError(new Error("Client not available"));
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
try {
|
|
233
|
-
setLoading(true);
|
|
234
|
-
setError(null);
|
|
235
|
-
setIsStreaming(true);
|
|
236
|
-
if (abortControllerRef.current) {
|
|
237
|
-
abortControllerRef.current.abort();
|
|
238
|
-
}
|
|
239
|
-
abortControllerRef.current = new AbortController();
|
|
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
|
-
const stream = await client.sendMessageStream(agentId, params);
|
|
250
|
-
for await (const event of stream) {
|
|
251
|
-
if (abortControllerRef.current?.signal.aborted) {
|
|
252
|
-
console.log("abort signal received");
|
|
253
|
-
break;
|
|
254
|
-
}
|
|
255
|
-
let message = void 0;
|
|
256
|
-
if (event.kind === "message") {
|
|
257
|
-
message = event;
|
|
258
|
-
}
|
|
259
|
-
if (!message)
|
|
260
|
-
continue;
|
|
261
|
-
setMessages((prev) => {
|
|
262
|
-
if (prev.find((msg) => msg.messageId === message.messageId)) {
|
|
263
|
-
return prev.map((msg) => {
|
|
264
|
-
if (msg.messageId === message.messageId) {
|
|
265
|
-
return {
|
|
266
|
-
...msg,
|
|
267
|
-
parts: [...msg.parts, ...message.parts]
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
return msg;
|
|
271
|
-
});
|
|
272
|
-
} else {
|
|
273
|
-
return [...prev, message];
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
setIsStreaming(false);
|
|
278
|
-
} catch (err) {
|
|
279
|
-
if (err instanceof Error && err.name === "AbortError") {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
console.log("error", err);
|
|
283
|
-
setError(err instanceof Error ? err : new Error("Failed to stream message"));
|
|
284
|
-
} finally {
|
|
285
|
-
setLoading(false);
|
|
286
|
-
setIsStreaming(false);
|
|
287
|
-
}
|
|
288
|
-
}, [client, agentId]);
|
|
289
|
-
const clearMessages = useCallback2(() => {
|
|
290
|
-
setMessages([]);
|
|
291
|
-
}, []);
|
|
292
|
-
useEffect3(() => {
|
|
293
|
-
return () => {
|
|
294
|
-
if (abortControllerRef.current) {
|
|
295
|
-
abortControllerRef.current.abort();
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
}, []);
|
|
299
|
-
const abort = useCallback2(() => {
|
|
300
|
-
if (abortControllerRef.current) {
|
|
301
|
-
abortControllerRef.current.abort();
|
|
302
|
-
}
|
|
303
|
-
}, []);
|
|
304
|
-
return {
|
|
305
|
-
loading: loading || clientLoading,
|
|
306
|
-
error: error || clientError,
|
|
307
|
-
messages,
|
|
308
|
-
isStreaming,
|
|
309
|
-
sendMessage,
|
|
310
|
-
sendMessageStream,
|
|
311
|
-
clearMessages,
|
|
312
|
-
refreshMessages: fetchMessages,
|
|
313
|
-
abort
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// src/useThreads.ts
|
|
318
|
-
import { useState as useState4, useEffect as useEffect4, useCallback as useCallback3 } from "react";
|
|
319
|
-
function useThreads() {
|
|
320
|
-
const { client, error: clientError, isLoading: clientLoading } = useDistri();
|
|
321
|
-
const [threads, setThreads] = useState4([]);
|
|
322
|
-
const [loading, setLoading] = useState4(true);
|
|
323
|
-
const [error, setError] = useState4(null);
|
|
324
|
-
const fetchThreads = useCallback3(async () => {
|
|
325
|
-
if (!client) {
|
|
326
|
-
console.log("[useThreads] Client not available, skipping fetch");
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
try {
|
|
330
|
-
setLoading(true);
|
|
331
|
-
setError(null);
|
|
332
|
-
console.log("[useThreads] Fetching threads...");
|
|
333
|
-
const fetchedThreads = await client.getThreads();
|
|
334
|
-
console.log("[useThreads] Fetched threads:", fetchedThreads);
|
|
335
|
-
setThreads(fetchedThreads);
|
|
336
|
-
} catch (err) {
|
|
337
|
-
console.error("[useThreads] Failed to fetch threads:", err);
|
|
338
|
-
setError(err instanceof Error ? err : new Error("Failed to fetch threads"));
|
|
339
|
-
} finally {
|
|
340
|
-
setLoading(false);
|
|
341
|
-
}
|
|
342
|
-
}, [client]);
|
|
343
|
-
const fetchThread = useCallback3(async (threadId) => {
|
|
344
|
-
if (!client) {
|
|
345
|
-
throw new Error("Client not available");
|
|
346
|
-
}
|
|
347
|
-
try {
|
|
348
|
-
const response = await client.getThread(threadId);
|
|
349
|
-
return response;
|
|
350
|
-
} catch (err) {
|
|
351
|
-
console.error("[useThreads] Failed to fetch thread:", err);
|
|
352
|
-
throw err;
|
|
353
|
-
}
|
|
354
|
-
}, [client]);
|
|
355
|
-
const deleteThread = useCallback3(async (threadId) => {
|
|
356
|
-
if (!client) {
|
|
357
|
-
throw new Error("Client not available");
|
|
358
|
-
}
|
|
359
|
-
try {
|
|
360
|
-
const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`, {
|
|
361
|
-
method: "DELETE"
|
|
362
|
-
});
|
|
363
|
-
if (!response.ok) {
|
|
364
|
-
throw new Error("Failed to delete thread");
|
|
365
|
-
}
|
|
366
|
-
setThreads((prev) => prev.filter((thread) => thread.id !== threadId));
|
|
367
|
-
} catch (err) {
|
|
368
|
-
setThreads((prev) => prev.filter((thread) => thread.id !== threadId));
|
|
369
|
-
console.warn("Failed to delete thread from server, but removed locally:", err);
|
|
370
|
-
}
|
|
371
|
-
}, [client]);
|
|
372
|
-
const updateThread = useCallback3(async (threadId, localId) => {
|
|
373
|
-
if (!client) {
|
|
374
|
-
return;
|
|
375
|
-
}
|
|
376
|
-
try {
|
|
377
|
-
const response = await fetch(`${client.baseUrl}/api/v1/threads/${threadId}`);
|
|
378
|
-
if (response.ok) {
|
|
379
|
-
const updatedThread = await response.json();
|
|
380
|
-
setThreads((prev) => {
|
|
381
|
-
if (localId && prev.some((thread) => thread.id === localId)) {
|
|
382
|
-
return [
|
|
383
|
-
updatedThread,
|
|
384
|
-
...prev.filter((thread) => thread.id !== localId && thread.id !== threadId)
|
|
385
|
-
];
|
|
386
|
-
}
|
|
387
|
-
return prev.map(
|
|
388
|
-
(thread) => thread.id === threadId ? updatedThread : thread
|
|
389
|
-
);
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
} catch (err) {
|
|
393
|
-
console.warn("Failed to update thread:", err);
|
|
394
|
-
}
|
|
395
|
-
}, [client]);
|
|
396
|
-
useEffect4(() => {
|
|
397
|
-
if (clientLoading) {
|
|
398
|
-
console.log("[useThreads] Client is loading, waiting...");
|
|
399
|
-
setLoading(true);
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
if (clientError) {
|
|
403
|
-
console.error("[useThreads] Client error:", clientError);
|
|
404
|
-
setError(clientError);
|
|
405
|
-
setLoading(false);
|
|
406
|
-
return;
|
|
407
|
-
}
|
|
408
|
-
if (client) {
|
|
409
|
-
console.log("[useThreads] Client ready, fetching threads");
|
|
410
|
-
fetchThreads();
|
|
411
|
-
} else {
|
|
412
|
-
console.log("[useThreads] No client available");
|
|
413
|
-
setLoading(false);
|
|
414
|
-
}
|
|
415
|
-
}, [clientLoading, clientError, client, fetchThreads]);
|
|
416
|
-
return {
|
|
417
|
-
threads,
|
|
418
|
-
loading: loading || clientLoading,
|
|
419
|
-
error: error || clientError,
|
|
420
|
-
refetch: fetchThreads,
|
|
421
|
-
deleteThread,
|
|
422
|
-
fetchThread,
|
|
423
|
-
updateThread
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
export {
|
|
427
|
-
DistriProvider,
|
|
428
|
-
useAgents,
|
|
429
|
-
useChat,
|
|
430
|
-
useDistri,
|
|
431
|
-
useDistriClient,
|
|
432
|
-
useThreads
|
|
433
|
-
};
|
|
434
|
-
//# sourceMappingURL=index.mjs.map
|