@curaious/uno-converse 0.1.10 → 0.1.12

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.cjs CHANGED
@@ -676,7 +676,7 @@ function useConversation(options) {
676
676
  if (projectId) {
677
677
  params.append('project_id', projectId);
678
678
  }
679
- params.append('agent_name', config.agentName);
679
+ params.append('agent_id', config.agentId);
680
680
  let url = `${baseUrl}/converse?${params.toString()}`;
681
681
  if (!!config.baseUrl) {
682
682
  url = config.baseUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/types.ts","../src/streaming/ChunkProcessor.ts","../src/streaming/streamSSE.ts","../src/hooks/useConversation.ts"],"sourcesContent":["// Message Roles\nexport enum Role {\n User = \"user\",\n Developer = \"developer\",\n System = \"system\",\n Assistant = \"assistant\",\n}\n\n// Message Types\nexport enum MessageType {\n Message = \"message\",\n FunctionCall = \"function_call\",\n FunctionCallOutput = \"function_call_output\",\n Reasoning = \"reasoning\",\n ImageGenerationCall = \"image_generation_call\",\n FunctionCallApprovalResponse = \"function_call_approval_response\",\n}\n\n// Content Types\nexport enum ContentType {\n InputText = \"input_text\",\n OutputText = \"output_text\",\n SummaryText = \"summary_text\",\n InputImage = \"input_image\",\n}\n\n// Chunk Types\nexport enum ChunkType {\n ChunkTypeRunCreated = \"run.created\",\n ChunkTypeRunInProgress = \"run.in_progress\",\n ChunkTypeRunPaused = \"run.paused\",\n ChunkTypeRunCompleted = \"run.completed\",\n ChunkTypeResponseCreated = \"response.created\",\n ChunkTypeResponseInProgress = \"response.in_progress\",\n ChunkTypeResponseCompleted = \"response.completed\",\n ChunkTypeOutputItemAdded = \"response.output_item.added\",\n ChunkTypeOutputItemDone = \"response.output_item.done\",\n ChunkTypeContentPartAdded = \"response.content_part.added\",\n ChunkTypeContentPartDone = \"response.content_part.done\",\n ChunkTypeOutputTextDelta = \"response.output_text.delta\",\n ChunkTypeOutputTextDone = \"response.output_text.done\",\n ChunkTypeFunctionCallArgumentsDelta = \"response.function_call_arguments.delta\",\n ChunkTypeFunctionCallArgumentsDone = \"response.function_call_arguments.done\",\n ChunkTypeReasoningSummaryPartAdded = \"response.reasoning_summary_part.added\",\n ChunkTypeReasoningSummaryPartDone = \"response.reasoning_summary_part.done\",\n ChunkTypeReasoningSummaryTextDelta = \"response.reasoning_summary_text.delta\",\n ChunkTypeReasoningSummaryTextDone = \"response.reasoning_summary_text.done\",\n\n // Image generation\n ChunkTypeImageGenerationCallInProgress = \"response.image_generation_call.in_progress\",\n ChunkTypeImageGenerationCallGenerating = \"response.image_generation_call.generating\",\n ChunkTypeImageGenerationCallPartialImage = \"response.image_generation_call.partial_image\",\n\n // Extra\n ChunkTypeFunctionCallOutput = \"function_call_output\",\n}\n\n/**\n * Represents a conversation container\n */\nexport interface Conversation {\n namespace_id: string;\n conversation_id: string;\n name: string;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a thread within a conversation\n */\nexport interface Thread {\n conversation_id: string;\n origin_message_id: string;\n thread_id: string;\n meta: Record<string, any>;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a message within a conversation thread\n */\nexport interface ConversationMessage {\n conversation_id: string;\n thread_id: string;\n message_id: string;\n messages: MessageUnion[];\n meta: Record<string, any>;\n isStreaming?: boolean;\n}\n\n// Message union type - discriminated by 'type' field\nexport type MessageUnion =\n | EasyMessage\n | InputMessage\n | OutputMessage\n | FunctionCallMessage\n | FunctionCallApprovalResponseMessage\n | FunctionCallOutputMessage\n | ReasoningMessage\n | ImageGenerationCallMessage;\n\nexport interface EasyMessage {\n type: MessageType.Message;\n id: string;\n role?: Role;\n content: EasyInputContentUnion;\n}\n\nexport interface InputMessage {\n type: MessageType.Message;\n id?: string;\n role?: Role;\n content?: InputContentUnion[];\n}\n\nexport interface OutputMessage {\n id: string;\n type?: MessageType.Message;\n role?: Role;\n content?: OutputContentUnion[];\n}\n\nexport interface FunctionCallMessage {\n type: MessageType.FunctionCall;\n id: string;\n call_id?: string;\n name: string;\n arguments: string;\n}\n\nexport interface FunctionCallApprovalResponseMessage {\n type: MessageType.FunctionCallApprovalResponse;\n id: string;\n approved_call_ids: string[];\n rejected_call_ids: string[];\n}\n\nexport interface FunctionCallOutputMessage {\n type: MessageType.FunctionCallOutput;\n id: string;\n call_id: string;\n output: FunctionCallOutputContentUnion;\n}\n\nexport interface ReasoningMessage {\n type: MessageType.Reasoning;\n id: string;\n summary?: SummaryTextContent[];\n encrypted_content?: string;\n}\n\nexport interface ImageGenerationCallMessage {\n type: MessageType.ImageGenerationCall;\n id: string;\n status: string;\n background: string;\n output_format: string;\n quality: string;\n size: string;\n result: string;\n}\n\n// Content Unions\nexport type EasyInputContentUnion = string | InputContentUnion;\nexport type InputContentUnion = InputTextContent | OutputTextContent | InputImageContent;\nexport type FunctionCallOutputContentUnion = string | InputContentUnion;\nexport type OutputContentUnion =\n | OutputTextContent\n | FunctionCallMessage\n | SummaryTextContent;\n\n// Content types\nexport interface InputTextContent {\n type: ContentType.InputText;\n text: string;\n}\n\nexport interface OutputTextContent {\n type: ContentType.OutputText;\n text: string;\n}\n\nexport interface SummaryTextContent {\n type: ContentType.SummaryText;\n text: string;\n}\n\nexport interface InputImageContent {\n type: ContentType.InputImage;\n image_url: string;\n detail: string;\n}\n\n/**\n * Configuration for the converse API endpoint\n */\nexport interface ConverseConfig {\n namespace: string;\n agentName: string;\n baseUrl?: string;\n context?: Record<string, unknown>;\n headers?: Record<string, string>;\n}\n\n// Streaming chunk types\nexport interface ResponseChunk {\n type: ChunkType;\n sequence_number: number;\n\n // Only on run items\n run_state?: ChunkRunData;\n\n // Only on response items\n response?: ChunkResponseData;\n\n // On non-run and non-response items\n output_index?: number;\n\n // Only on output_item\n item?: ChunkOutputItemData;\n\n // Only on content_part and delta\n item_id?: string;\n content_index?: number;\n\n // Only on content_part\n part?: OutputContentUnion;\n\n // Only on output_text delta/done\n delta?: string;\n text?: string;\n\n // Only on function_call arguments delta/done\n arguments?: string;\n\n // Only on reasoning summary part/delta/done\n summary_index?: number;\n\n // Only on function_call_output\n output: string;\n\n // Only on image_generation_call.partial_image\n partial_image_index?: number;\n partial_image_b64?: string;\n background?: string;\n output_format?: string;\n quality?: string;\n size?: string;\n status?: string;\n}\n\nexport interface ChunkRunData {\n id: string;\n object: \"run\";\n status: \"created\" | \"in_progress\" | \"paused\" | \"resumed\" | \"completed\" | \"aborted\";\n pending_tool_calls: FunctionCallMessage[];\n usage: ChunkResponseUsage;\n traceid: string;\n}\n\nexport interface ChunkResponseData {\n id: string;\n object: string;\n created_at: number;\n status: string;\n background: boolean;\n error: unknown;\n incomplete_details: unknown;\n output: OutputMessageUnion[];\n usage: ChunkResponseUsage;\n}\n\nexport interface ChunkOutputItemData {\n type: string; // \"function_call\", \"message\", \"reasoning\"\n\n // Common fields\n id: string;\n status: string;\n\n // For output_item of type \"message\"\n content: OutputContentUnion[];\n role: Role;\n\n // For output_item of type \"function_call\"\n call_id?: string;\n name?: string;\n arguments?: string;\n\n // For \"reasoning\"\n encrypted_content?: string;\n summary?: OutputContentUnion[];\n\n // For output_item of type \"image_generation_call\"\n background?: string;\n output_format?: string;\n quality?: string;\n result?: string;\n size?: string;\n}\n\nexport type OutputMessageUnion =\n | (OutputMessage & { id: string })\n | (FunctionCallMessage & { id: string })\n | (ReasoningMessage & { id: string })\n | (ImageGenerationCallMessage & { id: string });\n\nexport interface ChunkResponseUsage {\n input_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens: number;\n output_tokens_details: {\n reasoning_tokens: number;\n };\n total_tokens: number;\n}\n\nexport interface Usage {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens_details: {\n reasoning_tokens: number;\n };\n}\n\n// Type guards\nexport function isEasyMessage(msg: MessageUnion): msg is EasyMessage {\n return msg.type === MessageType.Message && 'content' in msg && (typeof msg.content === 'string' || Array.isArray(msg.content));\n}\n\nexport function isInputMessage(msg: MessageUnion): msg is InputMessage {\n return msg.type === MessageType.Message && 'content' in msg && Array.isArray(msg.content);\n}\n\nexport function isFunctionCallMessage(msg: MessageUnion): msg is FunctionCallMessage {\n return msg.type === MessageType.FunctionCall;\n}\n\nexport function isFunctionCallOutputMessage(msg: MessageUnion): msg is FunctionCallOutputMessage {\n return msg.type === MessageType.FunctionCallOutput;\n}\n\nexport function isReasoningMessage(msg: MessageUnion): msg is ReasoningMessage {\n return msg.type === MessageType.Reasoning;\n}\n\nexport function isImageGenerationCallMessage(msg: MessageUnion): msg is ImageGenerationCallMessage {\n return msg.type === MessageType.ImageGenerationCall;\n}\n\n","import {\n ChunkType,\n ContentType,\n ConversationMessage,\n FunctionCallMessage,\n FunctionCallOutputMessage,\n ImageGenerationCallMessage,\n InputMessage,\n MessageUnion,\n ReasoningMessage,\n ResponseChunk,\n} from '../types';\n\n/**\n * Callback invoked when the conversation state changes\n */\nexport type OnChangeCallback = (conversation: ConversationMessage) => void;\n\n/**\n * Processes streaming chunks from the LLM response.\n * Builds up messages incrementally as chunks arrive.\n *\n * @example\n * ```ts\n * const processor = new ChunkProcessor(\n * 'conv-123',\n * 'thread-456',\n * (conversation) => {\n * // Update UI with new conversation state\n * setConversation(conversation);\n * }\n * );\n *\n * // Process incoming chunks\n * processor.processChunk(jsonData);\n *\n * // Get final conversation when done\n * const finalConversation = processor.getConversation();\n * ```\n */\nexport class ChunkProcessor {\n private messages: MessageUnion[] = [];\n private currentOutputItem: MessageUnion | null = null;\n private _onChange: OnChangeCallback;\n private conversation: ConversationMessage;\n\n constructor(\n conversationId: string,\n threadId: string,\n onChange: OnChangeCallback\n ) {\n this.conversation = {\n conversation_id: conversationId,\n thread_id: threadId,\n message_id: '',\n messages: [],\n meta: {},\n };\n this._onChange = onChange;\n }\n\n /**\n * Get all processed messages\n */\n getMessages(): MessageUnion[] {\n return this.messages;\n }\n\n /**\n * Get the current conversation state\n */\n getConversation(): ConversationMessage {\n return this.conversation;\n }\n\n private emitChange(): void {\n this.conversation.messages = [...this.messages];\n this._onChange({ ...this.conversation });\n }\n\n /**\n * Process a raw JSON chunk from the SSE stream\n */\n processChunk(data: string): void {\n try {\n const chunk: ResponseChunk = JSON.parse(data);\n this.handleChunk(chunk);\n } catch (e) {\n console.error('Failed to parse chunk:', e, data);\n }\n }\n\n private handleChunk(chunk: ResponseChunk): void {\n switch (chunk.type) {\n // Run lifecycle\n case ChunkType.ChunkTypeRunCreated:\n case ChunkType.ChunkTypeRunInProgress:\n case ChunkType.ChunkTypeRunCompleted:\n case ChunkType.ChunkTypeRunPaused:\n this.conversation.meta.run_state = chunk.run_state;\n this.conversation.message_id = chunk.run_state!.id;\n if (chunk.type !== ChunkType.ChunkTypeRunCreated && chunk.type !== ChunkType.ChunkTypeRunInProgress) {\n this.emitChange();\n }\n break;\n\n // Response lifecycle\n case ChunkType.ChunkTypeResponseCreated:\n case ChunkType.ChunkTypeResponseInProgress:\n break;\n\n case ChunkType.ChunkTypeResponseCompleted:\n if (chunk.response?.usage) {\n this.conversation.meta.usage = chunk.response.usage;\n this.emitChange();\n }\n break;\n\n // Output item lifecycle\n case ChunkType.ChunkTypeOutputItemAdded:\n this.handleOutputItemAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputItemDone:\n break;\n\n // Content parts\n case ChunkType.ChunkTypeContentPartAdded:\n this.handleContentPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeContentPartDone:\n break;\n\n // Text deltas\n case ChunkType.ChunkTypeOutputTextDelta:\n this.handleOutputTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputTextDone:\n break;\n\n // Reasoning summary\n case ChunkType.ChunkTypeReasoningSummaryPartAdded:\n this.handleReasoningSummaryPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryPartDone:\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDelta:\n this.handleReasoningSummaryTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDone:\n break;\n\n // Function calls\n case ChunkType.ChunkTypeFunctionCallArgumentsDelta:\n this.handleFunctionCallArgumentsDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeFunctionCallArgumentsDone:\n break;\n\n case ChunkType.ChunkTypeFunctionCallOutput:\n this.handleFunctionCallOutput(chunk);\n break;\n\n // Image Generation Calls\n case ChunkType.ChunkTypeImageGenerationCallInProgress:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallGenerating:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallPartialImage:\n this.handleImageGenerationCallPartialImage(chunk);\n break;\n }\n }\n\n private handleOutputItemAdded(chunk: ResponseChunk): void {\n if (!chunk.item) return;\n\n switch (chunk.item.type) {\n case \"message\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"message\",\n role: chunk.item.role || \"assistant\",\n content: [],\n } as InputMessage;\n break;\n\n case \"function_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"function_call\",\n name: chunk.item.name || \"\",\n call_id: chunk.item.call_id || \"\",\n arguments: \"\",\n } as FunctionCallMessage;\n break;\n\n case \"reasoning\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"reasoning\",\n summary: [],\n } as ReasoningMessage;\n break;\n\n case \"image_generation_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"image_generation_call\",\n status: chunk.item.status,\n } as ImageGenerationCallMessage;\n break;\n }\n\n if (this.currentOutputItem) {\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n }\n\n private handleContentPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n if (chunk.part?.type === ContentType.OutputText) {\n message.content = message.content || [];\n message.content.push({\n type: ContentType.OutputText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleOutputTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n const contents = message.content;\n if (!contents?.length || !chunk.delta) return;\n\n const lastContent = contents[contents.length - 1];\n if (lastContent && 'text' in lastContent) {\n lastContent.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n if (chunk.part?.type === ContentType.SummaryText) {\n reasoning.summary = reasoning.summary || [];\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n const summaries = reasoning.summary;\n if (!summaries?.length || !chunk.delta) return;\n\n const lastSummary = summaries[summaries.length - 1];\n if (lastSummary) {\n lastSummary.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleFunctionCallArgumentsDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"function_call\") return;\n\n const functionCall = this.currentOutputItem as FunctionCallMessage;\n functionCall.arguments += chunk.delta || \"\";\n this.emitChange();\n }\n\n private handleFunctionCallOutput(chunk: ResponseChunk): void {\n this.currentOutputItem = chunk as unknown as FunctionCallOutputMessage;\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n\n private handleImageGenerationCallPartialImage(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"image_generation_call\") return;\n\n const image = this.currentOutputItem as ImageGenerationCallMessage;\n image.result = chunk.partial_image_b64!;\n image.quality = chunk.quality!;\n image.size = chunk.size!;\n image.output_format = chunk.output_format!;\n image.background = chunk.background!;\n\n this.emitChange();\n }\n}\n\n","/**\n * Options for the SSE stream callbacks\n */\nexport interface SSEStreamOptions {\n /** Called for each data chunk received */\n onChunk: (data: string) => void;\n /** Called when an error occurs */\n onError?: (error: Error) => void;\n /** Called when the stream completes */\n onComplete?: () => void;\n}\n\n/**\n * Streams Server-Sent Events (SSE) from a URL.\n * Parses SSE frames and calls onChunk for each data payload.\n *\n * @param url - The URL to stream from\n * @param requestOptions - Fetch request options\n * @param callbacks - SSE event callbacks\n * @param abortSignal - Optional signal to abort the stream\n *\n * @example\n * ```ts\n * await streamSSE(\n * 'https://api.example.com/stream',\n * { method: 'POST', body: JSON.stringify({ message: 'Hello' }) },\n * {\n * onChunk: (data) => console.log('Received:', data),\n * onComplete: () => console.log('Done'),\n * onError: (err) => console.error('Error:', err),\n * }\n * );\n * ```\n */\nexport async function streamSSE(\n url: string,\n requestOptions: RequestInit,\n callbacks: SSEStreamOptions,\n abortSignal?: AbortSignal\n): Promise<void> {\n try {\n const response = await fetch(url, {\n ...requestOptions,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // Parse SSE frames: split on double newline\n let idx;\n while ((idx = buffer.indexOf('\\n\\n')) !== -1) {\n const frame = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 2);\n\n // Join all data: lines in the frame\n const data = frame\n .split('\\n')\n .filter(line => line.startsWith('data:'))\n .map(line => line.slice(5).trim())\n .join('\\n');\n\n if (data) {\n callbacks.onChunk(data);\n }\n }\n }\n\n // Final flush of decoder state\n decoder.decode();\n callbacks.onComplete?.();\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n return;\n }\n callbacks.onError?.(error as Error);\n }\n}\n\n","import axios from 'axios';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\n\n/**\n * Simple ID generator for message IDs\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n\n/**\n * Function type for providing custom headers.\n * Called before each request to get headers (useful for dynamic auth tokens).\n *\n * @example\n * ```ts\n * const getHeaders: GetHeadersFn = () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * 'X-Custom-Header': 'value',\n * });\n * ```\n */\nexport type GetHeadersFn = () => Record<string, string> | Promise<Record<string, string>>;\n\n/**\n * Options for the useConversation hook\n */\nexport interface UseConversationOptions {\n /** The namespace for conversations */\n namespace: string;\n /** Base URL of the Uno Agent Server (e.g., 'https://api.example.com/api/agent-server') */\n baseUrl: string;\n /** Project Name used to fetch the project ID */\n projectName: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: GetHeadersFn;\n /** Auto-load conversations on mount (default: true) */\n autoLoad?: boolean;\n}\n\n/**\n * Return type for the useConversation hook\n */\nexport interface UseConversationReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n\n // Conversation list state\n /** List of all conversations */\n conversations: Conversation[];\n /** Whether conversations are being loaded */\n conversationsLoading: boolean;\n\n // Thread state\n /** List of threads in the current conversation */\n threads: Thread[];\n /** Whether threads are being loaded */\n threadsLoading: boolean;\n /** Currently selected thread */\n currentThread: Thread | null;\n\n // Message state\n /** List of messages in the current thread */\n messages: ConversationMessage[];\n /** Message currently being streamed */\n streamingMessage: ConversationMessage | null;\n /** Whether messages are being loaded */\n messagesLoading: boolean;\n /** Whether a response is currently streaming */\n isStreaming: boolean;\n /** Whether waiting for a response */\n isThinking: boolean;\n\n // Current selection\n /** ID of the currently selected conversation */\n currentConversationId: string | null;\n /** ID of the currently selected thread */\n currentThreadId: string | null;\n\n // Actions - Conversations\n /** Load all conversations */\n loadConversations: () => Promise<void>;\n /** Select a conversation by ID */\n selectConversation: (conversationId: string) => void;\n\n // Actions - Threads\n /** Load threads for a conversation */\n loadThreads: (conversationId: string) => Promise<void>;\n /** Select a thread by ID */\n selectThread: (threadId: string) => void;\n\n // Actions - Messages\n /** Send a message and stream the response */\n sendMessage: (userMessages: MessageUnion[], config: ConverseConfig) => Promise<void>;\n\n // Actions - Utility\n /** Start a new chat (clears current state) */\n startNewChat: () => void;\n\n // Combined messages (loaded + streaming)\n /** All messages including the currently streaming one */\n allMessages: ConversationMessage[];\n}\n\n/**\n * A comprehensive hook for managing conversations, threads, messages, and streaming\n * with Uno Agent Server.\n *\n * @example\n * ```tsx\n * import { useConversation } from '@praveen001/uno-converse';\n *\n * function ChatComponent() {\n * const {\n * allMessages,\n * isStreaming,\n * sendMessage,\n * startNewChat,\n * } = useConversation({\n * namespace: 'my-app',\n * projectName: 'my-project',\n * baseUrl: 'https://my-uno-server.com/api/agent-server',\n * getHeaders: () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * }),\n * });\n *\n * const handleSend = async (text: string) => {\n * await sendMessage(\n * [{ type: 'message', id: '1', content: text }],\n * {\n * namespace: 'my-app',\n * agentName: 'my-agent',\n * }\n * );\n * };\n *\n * return (\n * <div>\n * {allMessages.map(msg => (\n * <MessageComponent key={msg.message_id} message={msg} />\n * ))}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useConversation(options: UseConversationOptions): UseConversationReturn {\n const { namespace, projectName, baseUrl, getHeaders, autoLoad = true } = options;\n\n // Create axios instance with request interceptor for custom headers\n const axiosInstance = useMemo(() => {\n const instance = axios.create({\n baseURL: baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Add request interceptor to inject custom headers\n if (getHeaders) {\n instance.interceptors.request.use(async (config) => {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n return config;\n });\n }\n\n return instance;\n }, [baseUrl, getHeaders]);\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Conversation list state\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [conversationsLoading, setConversationsLoading] = useState(false);\n\n // Thread state\n const [threads, setThreads] = useState<Thread[]>([]);\n const [threadsLoading, setThreadsLoading] = useState(false);\n\n // Message state\n const [messages, setMessages] = useState<ConversationMessage[]>([]);\n const [streamingMessage, setStreamingMessage] = useState<ConversationMessage | null>(null);\n const [messagesLoading, setMessagesLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isThinking, setIsThinking] = useState(false);\n\n // Current selection\n const [currentConversationId, setCurrentConversationId] = useState<string | null>(null);\n const [currentThreadId, setCurrentThreadId] = useState<string | null>(null);\n const [previousMessageId, setPreviousMessageId] = useState<string>('');\n\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params with project_id if available\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n const result: Record<string, string> = {};\n if (projectId) {\n result.project_id = projectId;\n }\n if (params) {\n Object.assign(result, params);\n }\n return result;\n }, [projectId]);\n\n /**\n * Get headers for streaming requests (combines default + custom headers)\n */\n const getRequestHeaders = useCallback(async (): Promise<Record<string, string>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(headers, customHeaders);\n }\n\n return headers;\n }, [getHeaders]);\n\n // ============================================\n // Project Management\n // ============================================\n\n /**\n * Fetch the project ID using the project name\n */\n const fetchProjectId = useCallback(async () => {\n if (!projectName) {\n return;\n }\n\n setProjectLoading(true);\n try {\n const response = await axiosInstance.get<{ data: string } | string>('/project/id', {\n params: { name: projectName },\n });\n const id = typeof response.data === 'string' ? response.data : response.data.data;\n setProjectId(id || '');\n } catch (error) {\n console.error('Failed to fetch project ID:', error);\n throw error;\n } finally {\n setProjectLoading(false);\n }\n }, [axiosInstance, projectName]);\n\n // ============================================\n // Conversation Management\n // ============================================\n\n /**\n * Load all conversations for the namespace\n */\n const loadConversations = useCallback(async () => {\n setConversationsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Conversation[] } | Conversation[]>('/conversations', {\n params: buildParams({ namespace }),\n });\n const data = 'data' in response.data ? response.data.data : response.data;\n setConversations(data || []);\n } catch (error) {\n console.error('Failed to load conversations:', error);\n throw error;\n } finally {\n setConversationsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a conversation and load its threads\n */\n const selectConversation = useCallback((conversationId: string) => {\n setCurrentConversationId(conversationId);\n // Threads will be loaded via useEffect\n }, []);\n\n // ============================================\n // Thread Management\n // ============================================\n\n /**\n * Load threads for a conversation\n */\n const loadThreads = useCallback(async (conversationId: string) => {\n setThreadsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Thread[] } | Thread[]>('/threads', {\n params: buildParams({ conversation_id: conversationId, namespace }),\n });\n const loadedThreads = 'data' in response.data ? response.data.data : response.data;\n\n // Sort by created_at descending\n loadedThreads.sort(\n (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n setThreads(loadedThreads);\n\n // Auto-select the latest thread\n if (loadedThreads.length > 0) {\n setCurrentThreadId(loadedThreads[0].thread_id);\n }\n } catch (error) {\n console.error('Failed to load threads:', error);\n throw error;\n } finally {\n setThreadsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a thread and load its messages\n */\n const selectThread = useCallback((threadId: string) => {\n setCurrentThreadId(threadId);\n // Messages will be loaded via useEffect\n }, []);\n\n // ============================================\n // Message Management\n // ============================================\n\n /**\n * Load messages for a thread\n */\n const loadMessages = useCallback(async (threadId: string) => {\n setMessagesLoading(true);\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage[] } | ConversationMessage[]>('/messages', {\n params: buildParams({ thread_id: threadId, namespace }),\n });\n const loadedMessages = 'data' in response.data ? response.data.data : response.data;\n\n // Extract last message ID for continuation\n if (loadedMessages.length > 0) {\n const lastMsgId = loadedMessages[loadedMessages.length - 1].message_id;\n setPreviousMessageId(lastMsgId);\n } else {\n setPreviousMessageId('');\n }\n\n setMessages(loadedMessages);\n } catch (error) {\n console.error('Failed to load messages:', error);\n throw error;\n } finally {\n setMessagesLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Send a user message and stream the response\n */\n const sendMessage = useCallback(async (userMessages: MessageUnion[], config: ConverseConfig) => {\n const messageId = generateId();\n\n // Check if this is a tool approval response (resuming a run)\n const isToolApproval = userMessages.length === 1 &&\n userMessages[0].type === MessageType.FunctionCallApprovalResponse;\n\n // Only add user message for regular messages, not for tool approvals\n if (!isToolApproval) {\n const userConversation: ConversationMessage = {\n conversation_id: currentConversationId || '',\n thread_id: currentThreadId || '',\n message_id: messageId + '-user',\n messages: userMessages,\n meta: {},\n };\n setMessages(prev => [...prev, userConversation]);\n }\n\n // Initialize the chunk processor for the assistant response\n processorRef.current = new ChunkProcessor(\n currentConversationId || '',\n currentThreadId || '',\n (conversation) => {\n setIsThinking(isThinking);\n setStreamingMessage({ ...conversation, isStreaming: true });\n }\n );\n\n setIsStreaming(true);\n setIsThinking(true);\n\n // Build URL with query parameters\n const params = new URLSearchParams();\n if (projectId) {\n params.append('project_id', projectId);\n }\n params.append('agent_name', config.agentName);\n\n let url = `${baseUrl}/converse?${params.toString()}`;\n if (!!config.baseUrl) {\n url = config.baseUrl;\n }\n\n // Prepare request body\n const body = JSON.stringify({\n namespace: config.namespace,\n previous_message_id: previousMessageId,\n message: userMessages[0],\n context: config.context || {},\n });\n\n // Abort any existing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n try {\n // Get headers (supports async getHeaders function)\n const requestHeaders = await getRequestHeaders();\n\n await streamSSE(\n url,\n {\n method: 'POST',\n body,\n headers: {\n ...requestHeaders,\n ...(config.headers || {}),\n },\n },\n {\n onChunk: (data) => {\n processorRef.current?.processChunk(data);\n },\n onComplete: () => {\n // Move streaming message to messages list\n if (processorRef.current) {\n const finalConversation = processorRef.current.getConversation();\n\n if (isToolApproval) {\n // For tool approvals, update the last message instead of appending\n setMessages(prev => {\n const newMessages = [...prev];\n if (newMessages.length > 0) {\n const lastMsg = newMessages[newMessages.length - 1];\n newMessages[newMessages.length - 1] = {\n ...lastMsg,\n messages: [...lastMsg.messages, ...finalConversation.messages],\n meta: finalConversation.meta,\n isStreaming: false,\n };\n }\n return newMessages;\n });\n } else {\n setMessages(prev => [...prev, { ...finalConversation, isStreaming: false }]);\n }\n\n setStreamingMessage(null);\n setPreviousMessageId(finalConversation.message_id);\n }\n },\n onError: (error) => {\n console.error('Streaming error:', error);\n setStreamingMessage(null);\n },\n },\n abortControllerRef.current.signal\n );\n\n // If this was a new conversation, fetch the conversation info\n if (previousMessageId === '' && processorRef.current) {\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage } | ConversationMessage>(\n `/messages/${processorRef.current.getConversation().message_id}`,\n { params: buildParams({ namespace }) }\n );\n const messageData = 'data' in response.data ? response.data.data : response.data;\n const newConversationId = messageData?.conversation_id;\n if (newConversationId) {\n // Add new conversation to list\n setConversations(prev => [{\n conversation_id: newConversationId,\n name: \"New Conversation\",\n namespace_id: namespace,\n created_at: new Date().toISOString(),\n last_updated: new Date().toISOString(),\n } as Conversation, ...prev.filter(c => c.conversation_id !== newConversationId)]);\n\n setCurrentConversationId(newConversationId);\n }\n } catch (e) {\n console.error('Failed to get conversation ID:', e);\n }\n }\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n }, [currentConversationId, currentThreadId, previousMessageId, namespace, baseUrl, projectId, axiosInstance, buildParams, getRequestHeaders]);\n\n // ============================================\n // Utility Actions\n // ============================================\n\n /**\n * Start a new chat (reset all state)\n */\n const startNewChat = useCallback(() => {\n // Abort any ongoing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setPreviousMessageId('');\n setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Fetch project ID on mount\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n // Load conversations after project ID is fetched\n useEffect(() => {\n if (autoLoad && projectId) {\n loadConversations();\n }\n }, [autoLoad, projectId, loadConversations]);\n\n // Load threads when conversation changes\n useEffect(() => {\n if (currentConversationId) {\n loadThreads(currentConversationId);\n }\n }, [currentConversationId, loadThreads]);\n\n // Load messages when thread changes\n useEffect(() => {\n if (currentThreadId) {\n loadMessages(currentThreadId);\n }\n }, [currentThreadId, loadMessages]);\n\n // ============================================\n // Computed values\n // ============================================\n\n const currentThread = threads.find(t => t.thread_id === currentThreadId) || null;\n\n const allMessages = streamingMessage\n ? [...messages, streamingMessage]\n : messages;\n\n return {\n // Project state\n projectId,\n projectLoading,\n\n // Conversation list state\n conversations,\n conversationsLoading,\n\n // Thread state\n threads,\n threadsLoading,\n currentThread,\n\n // Message state\n messages,\n streamingMessage,\n messagesLoading,\n isStreaming,\n isThinking,\n\n // Current selection\n currentConversationId,\n currentThreadId,\n\n // Actions - Conversations\n loadConversations,\n selectConversation,\n\n // Actions - Threads\n loadThreads,\n selectThread,\n\n // Actions - Messages\n sendMessage,\n\n // Actions - Utility\n startNewChat,\n\n // Combined messages\n allMessages,\n };\n}\n\n"],"names":["Role","MessageType","ContentType","ChunkType","useMemo","useState","useRef","useCallback","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/types.ts","../src/streaming/ChunkProcessor.ts","../src/streaming/streamSSE.ts","../src/hooks/useConversation.ts"],"sourcesContent":["// Message Roles\nexport enum Role {\n User = \"user\",\n Developer = \"developer\",\n System = \"system\",\n Assistant = \"assistant\",\n}\n\n// Message Types\nexport enum MessageType {\n Message = \"message\",\n FunctionCall = \"function_call\",\n FunctionCallOutput = \"function_call_output\",\n Reasoning = \"reasoning\",\n ImageGenerationCall = \"image_generation_call\",\n FunctionCallApprovalResponse = \"function_call_approval_response\",\n}\n\n// Content Types\nexport enum ContentType {\n InputText = \"input_text\",\n OutputText = \"output_text\",\n SummaryText = \"summary_text\",\n InputImage = \"input_image\",\n}\n\n// Chunk Types\nexport enum ChunkType {\n ChunkTypeRunCreated = \"run.created\",\n ChunkTypeRunInProgress = \"run.in_progress\",\n ChunkTypeRunPaused = \"run.paused\",\n ChunkTypeRunCompleted = \"run.completed\",\n ChunkTypeResponseCreated = \"response.created\",\n ChunkTypeResponseInProgress = \"response.in_progress\",\n ChunkTypeResponseCompleted = \"response.completed\",\n ChunkTypeOutputItemAdded = \"response.output_item.added\",\n ChunkTypeOutputItemDone = \"response.output_item.done\",\n ChunkTypeContentPartAdded = \"response.content_part.added\",\n ChunkTypeContentPartDone = \"response.content_part.done\",\n ChunkTypeOutputTextDelta = \"response.output_text.delta\",\n ChunkTypeOutputTextDone = \"response.output_text.done\",\n ChunkTypeFunctionCallArgumentsDelta = \"response.function_call_arguments.delta\",\n ChunkTypeFunctionCallArgumentsDone = \"response.function_call_arguments.done\",\n ChunkTypeReasoningSummaryPartAdded = \"response.reasoning_summary_part.added\",\n ChunkTypeReasoningSummaryPartDone = \"response.reasoning_summary_part.done\",\n ChunkTypeReasoningSummaryTextDelta = \"response.reasoning_summary_text.delta\",\n ChunkTypeReasoningSummaryTextDone = \"response.reasoning_summary_text.done\",\n\n // Image generation\n ChunkTypeImageGenerationCallInProgress = \"response.image_generation_call.in_progress\",\n ChunkTypeImageGenerationCallGenerating = \"response.image_generation_call.generating\",\n ChunkTypeImageGenerationCallPartialImage = \"response.image_generation_call.partial_image\",\n\n // Extra\n ChunkTypeFunctionCallOutput = \"function_call_output\",\n}\n\n/**\n * Represents a conversation container\n */\nexport interface Conversation {\n namespace_id: string;\n conversation_id: string;\n name: string;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a thread within a conversation\n */\nexport interface Thread {\n conversation_id: string;\n origin_message_id: string;\n thread_id: string;\n meta: Record<string, any>;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a message within a conversation thread\n */\nexport interface ConversationMessage {\n conversation_id: string;\n thread_id: string;\n message_id: string;\n messages: MessageUnion[];\n meta: Record<string, any>;\n isStreaming?: boolean;\n}\n\n// Message union type - discriminated by 'type' field\nexport type MessageUnion =\n | EasyMessage\n | InputMessage\n | OutputMessage\n | FunctionCallMessage\n | FunctionCallApprovalResponseMessage\n | FunctionCallOutputMessage\n | ReasoningMessage\n | ImageGenerationCallMessage;\n\nexport interface EasyMessage {\n type: MessageType.Message;\n id: string;\n role?: Role;\n content: EasyInputContentUnion;\n}\n\nexport interface InputMessage {\n type: MessageType.Message;\n id?: string;\n role?: Role;\n content?: InputContentUnion[];\n}\n\nexport interface OutputMessage {\n id: string;\n type?: MessageType.Message;\n role?: Role;\n content?: OutputContentUnion[];\n}\n\nexport interface FunctionCallMessage {\n type: MessageType.FunctionCall;\n id: string;\n call_id?: string;\n name: string;\n arguments: string;\n}\n\nexport interface FunctionCallApprovalResponseMessage {\n type: MessageType.FunctionCallApprovalResponse;\n id: string;\n approved_call_ids: string[];\n rejected_call_ids: string[];\n}\n\nexport interface FunctionCallOutputMessage {\n type: MessageType.FunctionCallOutput;\n id: string;\n call_id: string;\n output: FunctionCallOutputContentUnion;\n}\n\nexport interface ReasoningMessage {\n type: MessageType.Reasoning;\n id: string;\n summary?: SummaryTextContent[];\n encrypted_content?: string;\n}\n\nexport interface ImageGenerationCallMessage {\n type: MessageType.ImageGenerationCall;\n id: string;\n status: string;\n background: string;\n output_format: string;\n quality: string;\n size: string;\n result: string;\n}\n\n// Content Unions\nexport type EasyInputContentUnion = string | InputContentUnion;\nexport type InputContentUnion = InputTextContent | OutputTextContent | InputImageContent;\nexport type FunctionCallOutputContentUnion = string | InputContentUnion;\nexport type OutputContentUnion =\n | OutputTextContent\n | FunctionCallMessage\n | SummaryTextContent;\n\n// Content types\nexport interface InputTextContent {\n type: ContentType.InputText;\n text: string;\n}\n\nexport interface OutputTextContent {\n type: ContentType.OutputText;\n text: string;\n}\n\nexport interface SummaryTextContent {\n type: ContentType.SummaryText;\n text: string;\n}\n\nexport interface InputImageContent {\n type: ContentType.InputImage;\n image_url: string;\n detail: string;\n}\n\n/**\n * Configuration for the converse API endpoint\n */\nexport interface ConverseConfig {\n namespace: string;\n agentId: string;\n baseUrl?: string;\n context?: Record<string, unknown>;\n headers?: Record<string, string>;\n}\n\n// Streaming chunk types\nexport interface ResponseChunk {\n type: ChunkType;\n sequence_number: number;\n\n // Only on run items\n run_state?: ChunkRunData;\n\n // Only on response items\n response?: ChunkResponseData;\n\n // On non-run and non-response items\n output_index?: number;\n\n // Only on output_item\n item?: ChunkOutputItemData;\n\n // Only on content_part and delta\n item_id?: string;\n content_index?: number;\n\n // Only on content_part\n part?: OutputContentUnion;\n\n // Only on output_text delta/done\n delta?: string;\n text?: string;\n\n // Only on function_call arguments delta/done\n arguments?: string;\n\n // Only on reasoning summary part/delta/done\n summary_index?: number;\n\n // Only on function_call_output\n output: string;\n\n // Only on image_generation_call.partial_image\n partial_image_index?: number;\n partial_image_b64?: string;\n background?: string;\n output_format?: string;\n quality?: string;\n size?: string;\n status?: string;\n}\n\nexport interface ChunkRunData {\n id: string;\n object: \"run\";\n status: \"created\" | \"in_progress\" | \"paused\" | \"resumed\" | \"completed\" | \"aborted\";\n pending_tool_calls: FunctionCallMessage[];\n usage: ChunkResponseUsage;\n traceid: string;\n}\n\nexport interface ChunkResponseData {\n id: string;\n object: string;\n created_at: number;\n status: string;\n background: boolean;\n error: unknown;\n incomplete_details: unknown;\n output: OutputMessageUnion[];\n usage: ChunkResponseUsage;\n}\n\nexport interface ChunkOutputItemData {\n type: string; // \"function_call\", \"message\", \"reasoning\"\n\n // Common fields\n id: string;\n status: string;\n\n // For output_item of type \"message\"\n content: OutputContentUnion[];\n role: Role;\n\n // For output_item of type \"function_call\"\n call_id?: string;\n name?: string;\n arguments?: string;\n\n // For \"reasoning\"\n encrypted_content?: string;\n summary?: OutputContentUnion[];\n\n // For output_item of type \"image_generation_call\"\n background?: string;\n output_format?: string;\n quality?: string;\n result?: string;\n size?: string;\n}\n\nexport type OutputMessageUnion =\n | (OutputMessage & { id: string })\n | (FunctionCallMessage & { id: string })\n | (ReasoningMessage & { id: string })\n | (ImageGenerationCallMessage & { id: string });\n\nexport interface ChunkResponseUsage {\n input_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens: number;\n output_tokens_details: {\n reasoning_tokens: number;\n };\n total_tokens: number;\n}\n\nexport interface Usage {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens_details: {\n reasoning_tokens: number;\n };\n}\n\n// Type guards\nexport function isEasyMessage(msg: MessageUnion): msg is EasyMessage {\n return msg.type === MessageType.Message && 'content' in msg && (typeof msg.content === 'string' || Array.isArray(msg.content));\n}\n\nexport function isInputMessage(msg: MessageUnion): msg is InputMessage {\n return msg.type === MessageType.Message && 'content' in msg && Array.isArray(msg.content);\n}\n\nexport function isFunctionCallMessage(msg: MessageUnion): msg is FunctionCallMessage {\n return msg.type === MessageType.FunctionCall;\n}\n\nexport function isFunctionCallOutputMessage(msg: MessageUnion): msg is FunctionCallOutputMessage {\n return msg.type === MessageType.FunctionCallOutput;\n}\n\nexport function isReasoningMessage(msg: MessageUnion): msg is ReasoningMessage {\n return msg.type === MessageType.Reasoning;\n}\n\nexport function isImageGenerationCallMessage(msg: MessageUnion): msg is ImageGenerationCallMessage {\n return msg.type === MessageType.ImageGenerationCall;\n}\n\n","import {\n ChunkType,\n ContentType,\n ConversationMessage,\n FunctionCallMessage,\n FunctionCallOutputMessage,\n ImageGenerationCallMessage,\n InputMessage,\n MessageUnion,\n ReasoningMessage,\n ResponseChunk,\n} from '../types';\n\n/**\n * Callback invoked when the conversation state changes\n */\nexport type OnChangeCallback = (conversation: ConversationMessage) => void;\n\n/**\n * Processes streaming chunks from the LLM response.\n * Builds up messages incrementally as chunks arrive.\n *\n * @example\n * ```ts\n * const processor = new ChunkProcessor(\n * 'conv-123',\n * 'thread-456',\n * (conversation) => {\n * // Update UI with new conversation state\n * setConversation(conversation);\n * }\n * );\n *\n * // Process incoming chunks\n * processor.processChunk(jsonData);\n *\n * // Get final conversation when done\n * const finalConversation = processor.getConversation();\n * ```\n */\nexport class ChunkProcessor {\n private messages: MessageUnion[] = [];\n private currentOutputItem: MessageUnion | null = null;\n private _onChange: OnChangeCallback;\n private conversation: ConversationMessage;\n\n constructor(\n conversationId: string,\n threadId: string,\n onChange: OnChangeCallback\n ) {\n this.conversation = {\n conversation_id: conversationId,\n thread_id: threadId,\n message_id: '',\n messages: [],\n meta: {},\n };\n this._onChange = onChange;\n }\n\n /**\n * Get all processed messages\n */\n getMessages(): MessageUnion[] {\n return this.messages;\n }\n\n /**\n * Get the current conversation state\n */\n getConversation(): ConversationMessage {\n return this.conversation;\n }\n\n private emitChange(): void {\n this.conversation.messages = [...this.messages];\n this._onChange({ ...this.conversation });\n }\n\n /**\n * Process a raw JSON chunk from the SSE stream\n */\n processChunk(data: string): void {\n try {\n const chunk: ResponseChunk = JSON.parse(data);\n this.handleChunk(chunk);\n } catch (e) {\n console.error('Failed to parse chunk:', e, data);\n }\n }\n\n private handleChunk(chunk: ResponseChunk): void {\n switch (chunk.type) {\n // Run lifecycle\n case ChunkType.ChunkTypeRunCreated:\n case ChunkType.ChunkTypeRunInProgress:\n case ChunkType.ChunkTypeRunCompleted:\n case ChunkType.ChunkTypeRunPaused:\n this.conversation.meta.run_state = chunk.run_state;\n this.conversation.message_id = chunk.run_state!.id;\n if (chunk.type !== ChunkType.ChunkTypeRunCreated && chunk.type !== ChunkType.ChunkTypeRunInProgress) {\n this.emitChange();\n }\n break;\n\n // Response lifecycle\n case ChunkType.ChunkTypeResponseCreated:\n case ChunkType.ChunkTypeResponseInProgress:\n break;\n\n case ChunkType.ChunkTypeResponseCompleted:\n if (chunk.response?.usage) {\n this.conversation.meta.usage = chunk.response.usage;\n this.emitChange();\n }\n break;\n\n // Output item lifecycle\n case ChunkType.ChunkTypeOutputItemAdded:\n this.handleOutputItemAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputItemDone:\n break;\n\n // Content parts\n case ChunkType.ChunkTypeContentPartAdded:\n this.handleContentPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeContentPartDone:\n break;\n\n // Text deltas\n case ChunkType.ChunkTypeOutputTextDelta:\n this.handleOutputTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputTextDone:\n break;\n\n // Reasoning summary\n case ChunkType.ChunkTypeReasoningSummaryPartAdded:\n this.handleReasoningSummaryPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryPartDone:\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDelta:\n this.handleReasoningSummaryTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDone:\n break;\n\n // Function calls\n case ChunkType.ChunkTypeFunctionCallArgumentsDelta:\n this.handleFunctionCallArgumentsDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeFunctionCallArgumentsDone:\n break;\n\n case ChunkType.ChunkTypeFunctionCallOutput:\n this.handleFunctionCallOutput(chunk);\n break;\n\n // Image Generation Calls\n case ChunkType.ChunkTypeImageGenerationCallInProgress:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallGenerating:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallPartialImage:\n this.handleImageGenerationCallPartialImage(chunk);\n break;\n }\n }\n\n private handleOutputItemAdded(chunk: ResponseChunk): void {\n if (!chunk.item) return;\n\n switch (chunk.item.type) {\n case \"message\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"message\",\n role: chunk.item.role || \"assistant\",\n content: [],\n } as InputMessage;\n break;\n\n case \"function_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"function_call\",\n name: chunk.item.name || \"\",\n call_id: chunk.item.call_id || \"\",\n arguments: \"\",\n } as FunctionCallMessage;\n break;\n\n case \"reasoning\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"reasoning\",\n summary: [],\n } as ReasoningMessage;\n break;\n\n case \"image_generation_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"image_generation_call\",\n status: chunk.item.status,\n } as ImageGenerationCallMessage;\n break;\n }\n\n if (this.currentOutputItem) {\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n }\n\n private handleContentPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n if (chunk.part?.type === ContentType.OutputText) {\n message.content = message.content || [];\n message.content.push({\n type: ContentType.OutputText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleOutputTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n const contents = message.content;\n if (!contents?.length || !chunk.delta) return;\n\n const lastContent = contents[contents.length - 1];\n if (lastContent && 'text' in lastContent) {\n lastContent.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n if (chunk.part?.type === ContentType.SummaryText) {\n reasoning.summary = reasoning.summary || [];\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n const summaries = reasoning.summary;\n if (!summaries?.length || !chunk.delta) return;\n\n const lastSummary = summaries[summaries.length - 1];\n if (lastSummary) {\n lastSummary.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleFunctionCallArgumentsDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"function_call\") return;\n\n const functionCall = this.currentOutputItem as FunctionCallMessage;\n functionCall.arguments += chunk.delta || \"\";\n this.emitChange();\n }\n\n private handleFunctionCallOutput(chunk: ResponseChunk): void {\n this.currentOutputItem = chunk as unknown as FunctionCallOutputMessage;\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n\n private handleImageGenerationCallPartialImage(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"image_generation_call\") return;\n\n const image = this.currentOutputItem as ImageGenerationCallMessage;\n image.result = chunk.partial_image_b64!;\n image.quality = chunk.quality!;\n image.size = chunk.size!;\n image.output_format = chunk.output_format!;\n image.background = chunk.background!;\n\n this.emitChange();\n }\n}\n\n","/**\n * Options for the SSE stream callbacks\n */\nexport interface SSEStreamOptions {\n /** Called for each data chunk received */\n onChunk: (data: string) => void;\n /** Called when an error occurs */\n onError?: (error: Error) => void;\n /** Called when the stream completes */\n onComplete?: () => void;\n}\n\n/**\n * Streams Server-Sent Events (SSE) from a URL.\n * Parses SSE frames and calls onChunk for each data payload.\n *\n * @param url - The URL to stream from\n * @param requestOptions - Fetch request options\n * @param callbacks - SSE event callbacks\n * @param abortSignal - Optional signal to abort the stream\n *\n * @example\n * ```ts\n * await streamSSE(\n * 'https://api.example.com/stream',\n * { method: 'POST', body: JSON.stringify({ message: 'Hello' }) },\n * {\n * onChunk: (data) => console.log('Received:', data),\n * onComplete: () => console.log('Done'),\n * onError: (err) => console.error('Error:', err),\n * }\n * );\n * ```\n */\nexport async function streamSSE(\n url: string,\n requestOptions: RequestInit,\n callbacks: SSEStreamOptions,\n abortSignal?: AbortSignal\n): Promise<void> {\n try {\n const response = await fetch(url, {\n ...requestOptions,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // Parse SSE frames: split on double newline\n let idx;\n while ((idx = buffer.indexOf('\\n\\n')) !== -1) {\n const frame = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 2);\n\n // Join all data: lines in the frame\n const data = frame\n .split('\\n')\n .filter(line => line.startsWith('data:'))\n .map(line => line.slice(5).trim())\n .join('\\n');\n\n if (data) {\n callbacks.onChunk(data);\n }\n }\n }\n\n // Final flush of decoder state\n decoder.decode();\n callbacks.onComplete?.();\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n return;\n }\n callbacks.onError?.(error as Error);\n }\n}\n\n","import axios from 'axios';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\n\n/**\n * Simple ID generator for message IDs\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n\n/**\n * Function type for providing custom headers.\n * Called before each request to get headers (useful for dynamic auth tokens).\n *\n * @example\n * ```ts\n * const getHeaders: GetHeadersFn = () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * 'X-Custom-Header': 'value',\n * });\n * ```\n */\nexport type GetHeadersFn = () => Record<string, string> | Promise<Record<string, string>>;\n\n/**\n * Options for the useConversation hook\n */\nexport interface UseConversationOptions {\n /** The namespace for conversations */\n namespace: string;\n /** Base URL of the Uno Agent Server (e.g., 'https://api.example.com/api/agent-server') */\n baseUrl: string;\n /** Project Name used to fetch the project ID */\n projectName: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: GetHeadersFn;\n /** Auto-load conversations on mount (default: true) */\n autoLoad?: boolean;\n}\n\n/**\n * Return type for the useConversation hook\n */\nexport interface UseConversationReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n\n // Conversation list state\n /** List of all conversations */\n conversations: Conversation[];\n /** Whether conversations are being loaded */\n conversationsLoading: boolean;\n\n // Thread state\n /** List of threads in the current conversation */\n threads: Thread[];\n /** Whether threads are being loaded */\n threadsLoading: boolean;\n /** Currently selected thread */\n currentThread: Thread | null;\n\n // Message state\n /** List of messages in the current thread */\n messages: ConversationMessage[];\n /** Message currently being streamed */\n streamingMessage: ConversationMessage | null;\n /** Whether messages are being loaded */\n messagesLoading: boolean;\n /** Whether a response is currently streaming */\n isStreaming: boolean;\n /** Whether waiting for a response */\n isThinking: boolean;\n\n // Current selection\n /** ID of the currently selected conversation */\n currentConversationId: string | null;\n /** ID of the currently selected thread */\n currentThreadId: string | null;\n\n // Actions - Conversations\n /** Load all conversations */\n loadConversations: () => Promise<void>;\n /** Select a conversation by ID */\n selectConversation: (conversationId: string) => void;\n\n // Actions - Threads\n /** Load threads for a conversation */\n loadThreads: (conversationId: string) => Promise<void>;\n /** Select a thread by ID */\n selectThread: (threadId: string) => void;\n\n // Actions - Messages\n /** Send a message and stream the response */\n sendMessage: (userMessages: MessageUnion[], config: ConverseConfig) => Promise<void>;\n\n // Actions - Utility\n /** Start a new chat (clears current state) */\n startNewChat: () => void;\n\n // Combined messages (loaded + streaming)\n /** All messages including the currently streaming one */\n allMessages: ConversationMessage[];\n}\n\n/**\n * A comprehensive hook for managing conversations, threads, messages, and streaming\n * with Uno Agent Server.\n *\n * @example\n * ```tsx\n * import { useConversation } from '@praveen001/uno-converse';\n *\n * function ChatComponent() {\n * const {\n * allMessages,\n * isStreaming,\n * sendMessage,\n * startNewChat,\n * } = useConversation({\n * namespace: 'my-app',\n * projectName: 'my-project',\n * baseUrl: 'https://my-uno-server.com/api/agent-server',\n * getHeaders: () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * }),\n * });\n *\n * const handleSend = async (text: string) => {\n * await sendMessage(\n * [{ type: 'message', id: '1', content: text }],\n * {\n * namespace: 'my-app',\n * agentName: 'my-agent',\n * }\n * );\n * };\n *\n * return (\n * <div>\n * {allMessages.map(msg => (\n * <MessageComponent key={msg.message_id} message={msg} />\n * ))}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useConversation(options: UseConversationOptions): UseConversationReturn {\n const { namespace, projectName, baseUrl, getHeaders, autoLoad = true } = options;\n\n // Create axios instance with request interceptor for custom headers\n const axiosInstance = useMemo(() => {\n const instance = axios.create({\n baseURL: baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Add request interceptor to inject custom headers\n if (getHeaders) {\n instance.interceptors.request.use(async (config) => {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n return config;\n });\n }\n\n return instance;\n }, [baseUrl, getHeaders]);\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Conversation list state\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [conversationsLoading, setConversationsLoading] = useState(false);\n\n // Thread state\n const [threads, setThreads] = useState<Thread[]>([]);\n const [threadsLoading, setThreadsLoading] = useState(false);\n\n // Message state\n const [messages, setMessages] = useState<ConversationMessage[]>([]);\n const [streamingMessage, setStreamingMessage] = useState<ConversationMessage | null>(null);\n const [messagesLoading, setMessagesLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isThinking, setIsThinking] = useState(false);\n\n // Current selection\n const [currentConversationId, setCurrentConversationId] = useState<string | null>(null);\n const [currentThreadId, setCurrentThreadId] = useState<string | null>(null);\n const [previousMessageId, setPreviousMessageId] = useState<string>('');\n\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params with project_id if available\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n const result: Record<string, string> = {};\n if (projectId) {\n result.project_id = projectId;\n }\n if (params) {\n Object.assign(result, params);\n }\n return result;\n }, [projectId]);\n\n /**\n * Get headers for streaming requests (combines default + custom headers)\n */\n const getRequestHeaders = useCallback(async (): Promise<Record<string, string>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(headers, customHeaders);\n }\n\n return headers;\n }, [getHeaders]);\n\n // ============================================\n // Project Management\n // ============================================\n\n /**\n * Fetch the project ID using the project name\n */\n const fetchProjectId = useCallback(async () => {\n if (!projectName) {\n return;\n }\n\n setProjectLoading(true);\n try {\n const response = await axiosInstance.get<{ data: string } | string>('/project/id', {\n params: { name: projectName },\n });\n const id = typeof response.data === 'string' ? response.data : response.data.data;\n setProjectId(id || '');\n } catch (error) {\n console.error('Failed to fetch project ID:', error);\n throw error;\n } finally {\n setProjectLoading(false);\n }\n }, [axiosInstance, projectName]);\n\n // ============================================\n // Conversation Management\n // ============================================\n\n /**\n * Load all conversations for the namespace\n */\n const loadConversations = useCallback(async () => {\n setConversationsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Conversation[] } | Conversation[]>('/conversations', {\n params: buildParams({ namespace }),\n });\n const data = 'data' in response.data ? response.data.data : response.data;\n setConversations(data || []);\n } catch (error) {\n console.error('Failed to load conversations:', error);\n throw error;\n } finally {\n setConversationsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a conversation and load its threads\n */\n const selectConversation = useCallback((conversationId: string) => {\n setCurrentConversationId(conversationId);\n // Threads will be loaded via useEffect\n }, []);\n\n // ============================================\n // Thread Management\n // ============================================\n\n /**\n * Load threads for a conversation\n */\n const loadThreads = useCallback(async (conversationId: string) => {\n setThreadsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Thread[] } | Thread[]>('/threads', {\n params: buildParams({ conversation_id: conversationId, namespace }),\n });\n const loadedThreads = 'data' in response.data ? response.data.data : response.data;\n\n // Sort by created_at descending\n loadedThreads.sort(\n (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n setThreads(loadedThreads);\n\n // Auto-select the latest thread\n if (loadedThreads.length > 0) {\n setCurrentThreadId(loadedThreads[0].thread_id);\n }\n } catch (error) {\n console.error('Failed to load threads:', error);\n throw error;\n } finally {\n setThreadsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a thread and load its messages\n */\n const selectThread = useCallback((threadId: string) => {\n setCurrentThreadId(threadId);\n // Messages will be loaded via useEffect\n }, []);\n\n // ============================================\n // Message Management\n // ============================================\n\n /**\n * Load messages for a thread\n */\n const loadMessages = useCallback(async (threadId: string) => {\n setMessagesLoading(true);\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage[] } | ConversationMessage[]>('/messages', {\n params: buildParams({ thread_id: threadId, namespace }),\n });\n const loadedMessages = 'data' in response.data ? response.data.data : response.data;\n\n // Extract last message ID for continuation\n if (loadedMessages.length > 0) {\n const lastMsgId = loadedMessages[loadedMessages.length - 1].message_id;\n setPreviousMessageId(lastMsgId);\n } else {\n setPreviousMessageId('');\n }\n\n setMessages(loadedMessages);\n } catch (error) {\n console.error('Failed to load messages:', error);\n throw error;\n } finally {\n setMessagesLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Send a user message and stream the response\n */\n const sendMessage = useCallback(async (userMessages: MessageUnion[], config: ConverseConfig) => {\n const messageId = generateId();\n\n // Check if this is a tool approval response (resuming a run)\n const isToolApproval = userMessages.length === 1 &&\n userMessages[0].type === MessageType.FunctionCallApprovalResponse;\n\n // Only add user message for regular messages, not for tool approvals\n if (!isToolApproval) {\n const userConversation: ConversationMessage = {\n conversation_id: currentConversationId || '',\n thread_id: currentThreadId || '',\n message_id: messageId + '-user',\n messages: userMessages,\n meta: {},\n };\n setMessages(prev => [...prev, userConversation]);\n }\n\n // Initialize the chunk processor for the assistant response\n processorRef.current = new ChunkProcessor(\n currentConversationId || '',\n currentThreadId || '',\n (conversation) => {\n setIsThinking(isThinking);\n setStreamingMessage({ ...conversation, isStreaming: true });\n }\n );\n\n setIsStreaming(true);\n setIsThinking(true);\n\n // Build URL with query parameters\n const params = new URLSearchParams();\n if (projectId) {\n params.append('project_id', projectId);\n }\n params.append('agent_id', config.agentId);\n\n let url = `${baseUrl}/converse?${params.toString()}`;\n if (!!config.baseUrl) {\n url = config.baseUrl;\n }\n\n // Prepare request body\n const body = JSON.stringify({\n namespace: config.namespace,\n previous_message_id: previousMessageId,\n message: userMessages[0],\n context: config.context || {},\n });\n\n // Abort any existing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n try {\n // Get headers (supports async getHeaders function)\n const requestHeaders = await getRequestHeaders();\n\n await streamSSE(\n url,\n {\n method: 'POST',\n body,\n headers: {\n ...requestHeaders,\n ...(config.headers || {}),\n },\n },\n {\n onChunk: (data) => {\n processorRef.current?.processChunk(data);\n },\n onComplete: () => {\n // Move streaming message to messages list\n if (processorRef.current) {\n const finalConversation = processorRef.current.getConversation();\n\n if (isToolApproval) {\n // For tool approvals, update the last message instead of appending\n setMessages(prev => {\n const newMessages = [...prev];\n if (newMessages.length > 0) {\n const lastMsg = newMessages[newMessages.length - 1];\n newMessages[newMessages.length - 1] = {\n ...lastMsg,\n messages: [...lastMsg.messages, ...finalConversation.messages],\n meta: finalConversation.meta,\n isStreaming: false,\n };\n }\n return newMessages;\n });\n } else {\n setMessages(prev => [...prev, { ...finalConversation, isStreaming: false }]);\n }\n\n setStreamingMessage(null);\n setPreviousMessageId(finalConversation.message_id);\n }\n },\n onError: (error) => {\n console.error('Streaming error:', error);\n setStreamingMessage(null);\n },\n },\n abortControllerRef.current.signal\n );\n\n // If this was a new conversation, fetch the conversation info\n if (previousMessageId === '' && processorRef.current) {\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage } | ConversationMessage>(\n `/messages/${processorRef.current.getConversation().message_id}`,\n { params: buildParams({ namespace }) }\n );\n const messageData = 'data' in response.data ? response.data.data : response.data;\n const newConversationId = messageData?.conversation_id;\n if (newConversationId) {\n // Add new conversation to list\n setConversations(prev => [{\n conversation_id: newConversationId,\n name: \"New Conversation\",\n namespace_id: namespace,\n created_at: new Date().toISOString(),\n last_updated: new Date().toISOString(),\n } as Conversation, ...prev.filter(c => c.conversation_id !== newConversationId)]);\n\n setCurrentConversationId(newConversationId);\n }\n } catch (e) {\n console.error('Failed to get conversation ID:', e);\n }\n }\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n }, [currentConversationId, currentThreadId, previousMessageId, namespace, baseUrl, projectId, axiosInstance, buildParams, getRequestHeaders]);\n\n // ============================================\n // Utility Actions\n // ============================================\n\n /**\n * Start a new chat (reset all state)\n */\n const startNewChat = useCallback(() => {\n // Abort any ongoing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setPreviousMessageId('');\n setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Fetch project ID on mount\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n // Load conversations after project ID is fetched\n useEffect(() => {\n if (autoLoad && projectId) {\n loadConversations();\n }\n }, [autoLoad, projectId, loadConversations]);\n\n // Load threads when conversation changes\n useEffect(() => {\n if (currentConversationId) {\n loadThreads(currentConversationId);\n }\n }, [currentConversationId, loadThreads]);\n\n // Load messages when thread changes\n useEffect(() => {\n if (currentThreadId) {\n loadMessages(currentThreadId);\n }\n }, [currentThreadId, loadMessages]);\n\n // ============================================\n // Computed values\n // ============================================\n\n const currentThread = threads.find(t => t.thread_id === currentThreadId) || null;\n\n const allMessages = streamingMessage\n ? [...messages, streamingMessage]\n : messages;\n\n return {\n // Project state\n projectId,\n projectLoading,\n\n // Conversation list state\n conversations,\n conversationsLoading,\n\n // Thread state\n threads,\n threadsLoading,\n currentThread,\n\n // Message state\n messages,\n streamingMessage,\n messagesLoading,\n isStreaming,\n isThinking,\n\n // Current selection\n currentConversationId,\n currentThreadId,\n\n // Actions - Conversations\n loadConversations,\n selectConversation,\n\n // Actions - Threads\n loadThreads,\n selectThread,\n\n // Actions - Messages\n sendMessage,\n\n // Actions - Utility\n startNewChat,\n\n // Combined messages\n allMessages,\n };\n}\n\n"],"names":["Role","MessageType","ContentType","ChunkType","useMemo","useState","useRef","useCallback","useEffect"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -155,7 +155,7 @@ interface InputImageContent {
155
155
  */
156
156
  interface ConverseConfig {
157
157
  namespace: string;
158
- agentName: string;
158
+ agentId: string;
159
159
  baseUrl?: string;
160
160
  context?: Record<string, unknown>;
161
161
  headers?: Record<string, string>;
package/dist/index.d.ts CHANGED
@@ -155,7 +155,7 @@ interface InputImageContent {
155
155
  */
156
156
  interface ConverseConfig {
157
157
  namespace: string;
158
- agentName: string;
158
+ agentId: string;
159
159
  baseUrl?: string;
160
160
  context?: Record<string, unknown>;
161
161
  headers?: Record<string, string>;
package/dist/index.js CHANGED
@@ -674,7 +674,7 @@ function useConversation(options) {
674
674
  if (projectId) {
675
675
  params.append('project_id', projectId);
676
676
  }
677
- params.append('agent_name', config.agentName);
677
+ params.append('agent_id', config.agentId);
678
678
  let url = `${baseUrl}/converse?${params.toString()}`;
679
679
  if (!!config.baseUrl) {
680
680
  url = config.baseUrl;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/types.ts","../src/streaming/ChunkProcessor.ts","../src/streaming/streamSSE.ts","../src/hooks/useConversation.ts"],"sourcesContent":["// Message Roles\nexport enum Role {\n User = \"user\",\n Developer = \"developer\",\n System = \"system\",\n Assistant = \"assistant\",\n}\n\n// Message Types\nexport enum MessageType {\n Message = \"message\",\n FunctionCall = \"function_call\",\n FunctionCallOutput = \"function_call_output\",\n Reasoning = \"reasoning\",\n ImageGenerationCall = \"image_generation_call\",\n FunctionCallApprovalResponse = \"function_call_approval_response\",\n}\n\n// Content Types\nexport enum ContentType {\n InputText = \"input_text\",\n OutputText = \"output_text\",\n SummaryText = \"summary_text\",\n InputImage = \"input_image\",\n}\n\n// Chunk Types\nexport enum ChunkType {\n ChunkTypeRunCreated = \"run.created\",\n ChunkTypeRunInProgress = \"run.in_progress\",\n ChunkTypeRunPaused = \"run.paused\",\n ChunkTypeRunCompleted = \"run.completed\",\n ChunkTypeResponseCreated = \"response.created\",\n ChunkTypeResponseInProgress = \"response.in_progress\",\n ChunkTypeResponseCompleted = \"response.completed\",\n ChunkTypeOutputItemAdded = \"response.output_item.added\",\n ChunkTypeOutputItemDone = \"response.output_item.done\",\n ChunkTypeContentPartAdded = \"response.content_part.added\",\n ChunkTypeContentPartDone = \"response.content_part.done\",\n ChunkTypeOutputTextDelta = \"response.output_text.delta\",\n ChunkTypeOutputTextDone = \"response.output_text.done\",\n ChunkTypeFunctionCallArgumentsDelta = \"response.function_call_arguments.delta\",\n ChunkTypeFunctionCallArgumentsDone = \"response.function_call_arguments.done\",\n ChunkTypeReasoningSummaryPartAdded = \"response.reasoning_summary_part.added\",\n ChunkTypeReasoningSummaryPartDone = \"response.reasoning_summary_part.done\",\n ChunkTypeReasoningSummaryTextDelta = \"response.reasoning_summary_text.delta\",\n ChunkTypeReasoningSummaryTextDone = \"response.reasoning_summary_text.done\",\n\n // Image generation\n ChunkTypeImageGenerationCallInProgress = \"response.image_generation_call.in_progress\",\n ChunkTypeImageGenerationCallGenerating = \"response.image_generation_call.generating\",\n ChunkTypeImageGenerationCallPartialImage = \"response.image_generation_call.partial_image\",\n\n // Extra\n ChunkTypeFunctionCallOutput = \"function_call_output\",\n}\n\n/**\n * Represents a conversation container\n */\nexport interface Conversation {\n namespace_id: string;\n conversation_id: string;\n name: string;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a thread within a conversation\n */\nexport interface Thread {\n conversation_id: string;\n origin_message_id: string;\n thread_id: string;\n meta: Record<string, any>;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a message within a conversation thread\n */\nexport interface ConversationMessage {\n conversation_id: string;\n thread_id: string;\n message_id: string;\n messages: MessageUnion[];\n meta: Record<string, any>;\n isStreaming?: boolean;\n}\n\n// Message union type - discriminated by 'type' field\nexport type MessageUnion =\n | EasyMessage\n | InputMessage\n | OutputMessage\n | FunctionCallMessage\n | FunctionCallApprovalResponseMessage\n | FunctionCallOutputMessage\n | ReasoningMessage\n | ImageGenerationCallMessage;\n\nexport interface EasyMessage {\n type: MessageType.Message;\n id: string;\n role?: Role;\n content: EasyInputContentUnion;\n}\n\nexport interface InputMessage {\n type: MessageType.Message;\n id?: string;\n role?: Role;\n content?: InputContentUnion[];\n}\n\nexport interface OutputMessage {\n id: string;\n type?: MessageType.Message;\n role?: Role;\n content?: OutputContentUnion[];\n}\n\nexport interface FunctionCallMessage {\n type: MessageType.FunctionCall;\n id: string;\n call_id?: string;\n name: string;\n arguments: string;\n}\n\nexport interface FunctionCallApprovalResponseMessage {\n type: MessageType.FunctionCallApprovalResponse;\n id: string;\n approved_call_ids: string[];\n rejected_call_ids: string[];\n}\n\nexport interface FunctionCallOutputMessage {\n type: MessageType.FunctionCallOutput;\n id: string;\n call_id: string;\n output: FunctionCallOutputContentUnion;\n}\n\nexport interface ReasoningMessage {\n type: MessageType.Reasoning;\n id: string;\n summary?: SummaryTextContent[];\n encrypted_content?: string;\n}\n\nexport interface ImageGenerationCallMessage {\n type: MessageType.ImageGenerationCall;\n id: string;\n status: string;\n background: string;\n output_format: string;\n quality: string;\n size: string;\n result: string;\n}\n\n// Content Unions\nexport type EasyInputContentUnion = string | InputContentUnion;\nexport type InputContentUnion = InputTextContent | OutputTextContent | InputImageContent;\nexport type FunctionCallOutputContentUnion = string | InputContentUnion;\nexport type OutputContentUnion =\n | OutputTextContent\n | FunctionCallMessage\n | SummaryTextContent;\n\n// Content types\nexport interface InputTextContent {\n type: ContentType.InputText;\n text: string;\n}\n\nexport interface OutputTextContent {\n type: ContentType.OutputText;\n text: string;\n}\n\nexport interface SummaryTextContent {\n type: ContentType.SummaryText;\n text: string;\n}\n\nexport interface InputImageContent {\n type: ContentType.InputImage;\n image_url: string;\n detail: string;\n}\n\n/**\n * Configuration for the converse API endpoint\n */\nexport interface ConverseConfig {\n namespace: string;\n agentName: string;\n baseUrl?: string;\n context?: Record<string, unknown>;\n headers?: Record<string, string>;\n}\n\n// Streaming chunk types\nexport interface ResponseChunk {\n type: ChunkType;\n sequence_number: number;\n\n // Only on run items\n run_state?: ChunkRunData;\n\n // Only on response items\n response?: ChunkResponseData;\n\n // On non-run and non-response items\n output_index?: number;\n\n // Only on output_item\n item?: ChunkOutputItemData;\n\n // Only on content_part and delta\n item_id?: string;\n content_index?: number;\n\n // Only on content_part\n part?: OutputContentUnion;\n\n // Only on output_text delta/done\n delta?: string;\n text?: string;\n\n // Only on function_call arguments delta/done\n arguments?: string;\n\n // Only on reasoning summary part/delta/done\n summary_index?: number;\n\n // Only on function_call_output\n output: string;\n\n // Only on image_generation_call.partial_image\n partial_image_index?: number;\n partial_image_b64?: string;\n background?: string;\n output_format?: string;\n quality?: string;\n size?: string;\n status?: string;\n}\n\nexport interface ChunkRunData {\n id: string;\n object: \"run\";\n status: \"created\" | \"in_progress\" | \"paused\" | \"resumed\" | \"completed\" | \"aborted\";\n pending_tool_calls: FunctionCallMessage[];\n usage: ChunkResponseUsage;\n traceid: string;\n}\n\nexport interface ChunkResponseData {\n id: string;\n object: string;\n created_at: number;\n status: string;\n background: boolean;\n error: unknown;\n incomplete_details: unknown;\n output: OutputMessageUnion[];\n usage: ChunkResponseUsage;\n}\n\nexport interface ChunkOutputItemData {\n type: string; // \"function_call\", \"message\", \"reasoning\"\n\n // Common fields\n id: string;\n status: string;\n\n // For output_item of type \"message\"\n content: OutputContentUnion[];\n role: Role;\n\n // For output_item of type \"function_call\"\n call_id?: string;\n name?: string;\n arguments?: string;\n\n // For \"reasoning\"\n encrypted_content?: string;\n summary?: OutputContentUnion[];\n\n // For output_item of type \"image_generation_call\"\n background?: string;\n output_format?: string;\n quality?: string;\n result?: string;\n size?: string;\n}\n\nexport type OutputMessageUnion =\n | (OutputMessage & { id: string })\n | (FunctionCallMessage & { id: string })\n | (ReasoningMessage & { id: string })\n | (ImageGenerationCallMessage & { id: string });\n\nexport interface ChunkResponseUsage {\n input_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens: number;\n output_tokens_details: {\n reasoning_tokens: number;\n };\n total_tokens: number;\n}\n\nexport interface Usage {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens_details: {\n reasoning_tokens: number;\n };\n}\n\n// Type guards\nexport function isEasyMessage(msg: MessageUnion): msg is EasyMessage {\n return msg.type === MessageType.Message && 'content' in msg && (typeof msg.content === 'string' || Array.isArray(msg.content));\n}\n\nexport function isInputMessage(msg: MessageUnion): msg is InputMessage {\n return msg.type === MessageType.Message && 'content' in msg && Array.isArray(msg.content);\n}\n\nexport function isFunctionCallMessage(msg: MessageUnion): msg is FunctionCallMessage {\n return msg.type === MessageType.FunctionCall;\n}\n\nexport function isFunctionCallOutputMessage(msg: MessageUnion): msg is FunctionCallOutputMessage {\n return msg.type === MessageType.FunctionCallOutput;\n}\n\nexport function isReasoningMessage(msg: MessageUnion): msg is ReasoningMessage {\n return msg.type === MessageType.Reasoning;\n}\n\nexport function isImageGenerationCallMessage(msg: MessageUnion): msg is ImageGenerationCallMessage {\n return msg.type === MessageType.ImageGenerationCall;\n}\n\n","import {\n ChunkType,\n ContentType,\n ConversationMessage,\n FunctionCallMessage,\n FunctionCallOutputMessage,\n ImageGenerationCallMessage,\n InputMessage,\n MessageUnion,\n ReasoningMessage,\n ResponseChunk,\n} from '../types';\n\n/**\n * Callback invoked when the conversation state changes\n */\nexport type OnChangeCallback = (conversation: ConversationMessage) => void;\n\n/**\n * Processes streaming chunks from the LLM response.\n * Builds up messages incrementally as chunks arrive.\n *\n * @example\n * ```ts\n * const processor = new ChunkProcessor(\n * 'conv-123',\n * 'thread-456',\n * (conversation) => {\n * // Update UI with new conversation state\n * setConversation(conversation);\n * }\n * );\n *\n * // Process incoming chunks\n * processor.processChunk(jsonData);\n *\n * // Get final conversation when done\n * const finalConversation = processor.getConversation();\n * ```\n */\nexport class ChunkProcessor {\n private messages: MessageUnion[] = [];\n private currentOutputItem: MessageUnion | null = null;\n private _onChange: OnChangeCallback;\n private conversation: ConversationMessage;\n\n constructor(\n conversationId: string,\n threadId: string,\n onChange: OnChangeCallback\n ) {\n this.conversation = {\n conversation_id: conversationId,\n thread_id: threadId,\n message_id: '',\n messages: [],\n meta: {},\n };\n this._onChange = onChange;\n }\n\n /**\n * Get all processed messages\n */\n getMessages(): MessageUnion[] {\n return this.messages;\n }\n\n /**\n * Get the current conversation state\n */\n getConversation(): ConversationMessage {\n return this.conversation;\n }\n\n private emitChange(): void {\n this.conversation.messages = [...this.messages];\n this._onChange({ ...this.conversation });\n }\n\n /**\n * Process a raw JSON chunk from the SSE stream\n */\n processChunk(data: string): void {\n try {\n const chunk: ResponseChunk = JSON.parse(data);\n this.handleChunk(chunk);\n } catch (e) {\n console.error('Failed to parse chunk:', e, data);\n }\n }\n\n private handleChunk(chunk: ResponseChunk): void {\n switch (chunk.type) {\n // Run lifecycle\n case ChunkType.ChunkTypeRunCreated:\n case ChunkType.ChunkTypeRunInProgress:\n case ChunkType.ChunkTypeRunCompleted:\n case ChunkType.ChunkTypeRunPaused:\n this.conversation.meta.run_state = chunk.run_state;\n this.conversation.message_id = chunk.run_state!.id;\n if (chunk.type !== ChunkType.ChunkTypeRunCreated && chunk.type !== ChunkType.ChunkTypeRunInProgress) {\n this.emitChange();\n }\n break;\n\n // Response lifecycle\n case ChunkType.ChunkTypeResponseCreated:\n case ChunkType.ChunkTypeResponseInProgress:\n break;\n\n case ChunkType.ChunkTypeResponseCompleted:\n if (chunk.response?.usage) {\n this.conversation.meta.usage = chunk.response.usage;\n this.emitChange();\n }\n break;\n\n // Output item lifecycle\n case ChunkType.ChunkTypeOutputItemAdded:\n this.handleOutputItemAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputItemDone:\n break;\n\n // Content parts\n case ChunkType.ChunkTypeContentPartAdded:\n this.handleContentPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeContentPartDone:\n break;\n\n // Text deltas\n case ChunkType.ChunkTypeOutputTextDelta:\n this.handleOutputTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputTextDone:\n break;\n\n // Reasoning summary\n case ChunkType.ChunkTypeReasoningSummaryPartAdded:\n this.handleReasoningSummaryPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryPartDone:\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDelta:\n this.handleReasoningSummaryTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDone:\n break;\n\n // Function calls\n case ChunkType.ChunkTypeFunctionCallArgumentsDelta:\n this.handleFunctionCallArgumentsDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeFunctionCallArgumentsDone:\n break;\n\n case ChunkType.ChunkTypeFunctionCallOutput:\n this.handleFunctionCallOutput(chunk);\n break;\n\n // Image Generation Calls\n case ChunkType.ChunkTypeImageGenerationCallInProgress:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallGenerating:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallPartialImage:\n this.handleImageGenerationCallPartialImage(chunk);\n break;\n }\n }\n\n private handleOutputItemAdded(chunk: ResponseChunk): void {\n if (!chunk.item) return;\n\n switch (chunk.item.type) {\n case \"message\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"message\",\n role: chunk.item.role || \"assistant\",\n content: [],\n } as InputMessage;\n break;\n\n case \"function_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"function_call\",\n name: chunk.item.name || \"\",\n call_id: chunk.item.call_id || \"\",\n arguments: \"\",\n } as FunctionCallMessage;\n break;\n\n case \"reasoning\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"reasoning\",\n summary: [],\n } as ReasoningMessage;\n break;\n\n case \"image_generation_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"image_generation_call\",\n status: chunk.item.status,\n } as ImageGenerationCallMessage;\n break;\n }\n\n if (this.currentOutputItem) {\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n }\n\n private handleContentPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n if (chunk.part?.type === ContentType.OutputText) {\n message.content = message.content || [];\n message.content.push({\n type: ContentType.OutputText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleOutputTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n const contents = message.content;\n if (!contents?.length || !chunk.delta) return;\n\n const lastContent = contents[contents.length - 1];\n if (lastContent && 'text' in lastContent) {\n lastContent.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n if (chunk.part?.type === ContentType.SummaryText) {\n reasoning.summary = reasoning.summary || [];\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n const summaries = reasoning.summary;\n if (!summaries?.length || !chunk.delta) return;\n\n const lastSummary = summaries[summaries.length - 1];\n if (lastSummary) {\n lastSummary.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleFunctionCallArgumentsDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"function_call\") return;\n\n const functionCall = this.currentOutputItem as FunctionCallMessage;\n functionCall.arguments += chunk.delta || \"\";\n this.emitChange();\n }\n\n private handleFunctionCallOutput(chunk: ResponseChunk): void {\n this.currentOutputItem = chunk as unknown as FunctionCallOutputMessage;\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n\n private handleImageGenerationCallPartialImage(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"image_generation_call\") return;\n\n const image = this.currentOutputItem as ImageGenerationCallMessage;\n image.result = chunk.partial_image_b64!;\n image.quality = chunk.quality!;\n image.size = chunk.size!;\n image.output_format = chunk.output_format!;\n image.background = chunk.background!;\n\n this.emitChange();\n }\n}\n\n","/**\n * Options for the SSE stream callbacks\n */\nexport interface SSEStreamOptions {\n /** Called for each data chunk received */\n onChunk: (data: string) => void;\n /** Called when an error occurs */\n onError?: (error: Error) => void;\n /** Called when the stream completes */\n onComplete?: () => void;\n}\n\n/**\n * Streams Server-Sent Events (SSE) from a URL.\n * Parses SSE frames and calls onChunk for each data payload.\n *\n * @param url - The URL to stream from\n * @param requestOptions - Fetch request options\n * @param callbacks - SSE event callbacks\n * @param abortSignal - Optional signal to abort the stream\n *\n * @example\n * ```ts\n * await streamSSE(\n * 'https://api.example.com/stream',\n * { method: 'POST', body: JSON.stringify({ message: 'Hello' }) },\n * {\n * onChunk: (data) => console.log('Received:', data),\n * onComplete: () => console.log('Done'),\n * onError: (err) => console.error('Error:', err),\n * }\n * );\n * ```\n */\nexport async function streamSSE(\n url: string,\n requestOptions: RequestInit,\n callbacks: SSEStreamOptions,\n abortSignal?: AbortSignal\n): Promise<void> {\n try {\n const response = await fetch(url, {\n ...requestOptions,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // Parse SSE frames: split on double newline\n let idx;\n while ((idx = buffer.indexOf('\\n\\n')) !== -1) {\n const frame = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 2);\n\n // Join all data: lines in the frame\n const data = frame\n .split('\\n')\n .filter(line => line.startsWith('data:'))\n .map(line => line.slice(5).trim())\n .join('\\n');\n\n if (data) {\n callbacks.onChunk(data);\n }\n }\n }\n\n // Final flush of decoder state\n decoder.decode();\n callbacks.onComplete?.();\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n return;\n }\n callbacks.onError?.(error as Error);\n }\n}\n\n","import axios from 'axios';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\n\n/**\n * Simple ID generator for message IDs\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n\n/**\n * Function type for providing custom headers.\n * Called before each request to get headers (useful for dynamic auth tokens).\n *\n * @example\n * ```ts\n * const getHeaders: GetHeadersFn = () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * 'X-Custom-Header': 'value',\n * });\n * ```\n */\nexport type GetHeadersFn = () => Record<string, string> | Promise<Record<string, string>>;\n\n/**\n * Options for the useConversation hook\n */\nexport interface UseConversationOptions {\n /** The namespace for conversations */\n namespace: string;\n /** Base URL of the Uno Agent Server (e.g., 'https://api.example.com/api/agent-server') */\n baseUrl: string;\n /** Project Name used to fetch the project ID */\n projectName: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: GetHeadersFn;\n /** Auto-load conversations on mount (default: true) */\n autoLoad?: boolean;\n}\n\n/**\n * Return type for the useConversation hook\n */\nexport interface UseConversationReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n\n // Conversation list state\n /** List of all conversations */\n conversations: Conversation[];\n /** Whether conversations are being loaded */\n conversationsLoading: boolean;\n\n // Thread state\n /** List of threads in the current conversation */\n threads: Thread[];\n /** Whether threads are being loaded */\n threadsLoading: boolean;\n /** Currently selected thread */\n currentThread: Thread | null;\n\n // Message state\n /** List of messages in the current thread */\n messages: ConversationMessage[];\n /** Message currently being streamed */\n streamingMessage: ConversationMessage | null;\n /** Whether messages are being loaded */\n messagesLoading: boolean;\n /** Whether a response is currently streaming */\n isStreaming: boolean;\n /** Whether waiting for a response */\n isThinking: boolean;\n\n // Current selection\n /** ID of the currently selected conversation */\n currentConversationId: string | null;\n /** ID of the currently selected thread */\n currentThreadId: string | null;\n\n // Actions - Conversations\n /** Load all conversations */\n loadConversations: () => Promise<void>;\n /** Select a conversation by ID */\n selectConversation: (conversationId: string) => void;\n\n // Actions - Threads\n /** Load threads for a conversation */\n loadThreads: (conversationId: string) => Promise<void>;\n /** Select a thread by ID */\n selectThread: (threadId: string) => void;\n\n // Actions - Messages\n /** Send a message and stream the response */\n sendMessage: (userMessages: MessageUnion[], config: ConverseConfig) => Promise<void>;\n\n // Actions - Utility\n /** Start a new chat (clears current state) */\n startNewChat: () => void;\n\n // Combined messages (loaded + streaming)\n /** All messages including the currently streaming one */\n allMessages: ConversationMessage[];\n}\n\n/**\n * A comprehensive hook for managing conversations, threads, messages, and streaming\n * with Uno Agent Server.\n *\n * @example\n * ```tsx\n * import { useConversation } from '@praveen001/uno-converse';\n *\n * function ChatComponent() {\n * const {\n * allMessages,\n * isStreaming,\n * sendMessage,\n * startNewChat,\n * } = useConversation({\n * namespace: 'my-app',\n * projectName: 'my-project',\n * baseUrl: 'https://my-uno-server.com/api/agent-server',\n * getHeaders: () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * }),\n * });\n *\n * const handleSend = async (text: string) => {\n * await sendMessage(\n * [{ type: 'message', id: '1', content: text }],\n * {\n * namespace: 'my-app',\n * agentName: 'my-agent',\n * }\n * );\n * };\n *\n * return (\n * <div>\n * {allMessages.map(msg => (\n * <MessageComponent key={msg.message_id} message={msg} />\n * ))}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useConversation(options: UseConversationOptions): UseConversationReturn {\n const { namespace, projectName, baseUrl, getHeaders, autoLoad = true } = options;\n\n // Create axios instance with request interceptor for custom headers\n const axiosInstance = useMemo(() => {\n const instance = axios.create({\n baseURL: baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Add request interceptor to inject custom headers\n if (getHeaders) {\n instance.interceptors.request.use(async (config) => {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n return config;\n });\n }\n\n return instance;\n }, [baseUrl, getHeaders]);\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Conversation list state\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [conversationsLoading, setConversationsLoading] = useState(false);\n\n // Thread state\n const [threads, setThreads] = useState<Thread[]>([]);\n const [threadsLoading, setThreadsLoading] = useState(false);\n\n // Message state\n const [messages, setMessages] = useState<ConversationMessage[]>([]);\n const [streamingMessage, setStreamingMessage] = useState<ConversationMessage | null>(null);\n const [messagesLoading, setMessagesLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isThinking, setIsThinking] = useState(false);\n\n // Current selection\n const [currentConversationId, setCurrentConversationId] = useState<string | null>(null);\n const [currentThreadId, setCurrentThreadId] = useState<string | null>(null);\n const [previousMessageId, setPreviousMessageId] = useState<string>('');\n\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params with project_id if available\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n const result: Record<string, string> = {};\n if (projectId) {\n result.project_id = projectId;\n }\n if (params) {\n Object.assign(result, params);\n }\n return result;\n }, [projectId]);\n\n /**\n * Get headers for streaming requests (combines default + custom headers)\n */\n const getRequestHeaders = useCallback(async (): Promise<Record<string, string>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(headers, customHeaders);\n }\n\n return headers;\n }, [getHeaders]);\n\n // ============================================\n // Project Management\n // ============================================\n\n /**\n * Fetch the project ID using the project name\n */\n const fetchProjectId = useCallback(async () => {\n if (!projectName) {\n return;\n }\n\n setProjectLoading(true);\n try {\n const response = await axiosInstance.get<{ data: string } | string>('/project/id', {\n params: { name: projectName },\n });\n const id = typeof response.data === 'string' ? response.data : response.data.data;\n setProjectId(id || '');\n } catch (error) {\n console.error('Failed to fetch project ID:', error);\n throw error;\n } finally {\n setProjectLoading(false);\n }\n }, [axiosInstance, projectName]);\n\n // ============================================\n // Conversation Management\n // ============================================\n\n /**\n * Load all conversations for the namespace\n */\n const loadConversations = useCallback(async () => {\n setConversationsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Conversation[] } | Conversation[]>('/conversations', {\n params: buildParams({ namespace }),\n });\n const data = 'data' in response.data ? response.data.data : response.data;\n setConversations(data || []);\n } catch (error) {\n console.error('Failed to load conversations:', error);\n throw error;\n } finally {\n setConversationsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a conversation and load its threads\n */\n const selectConversation = useCallback((conversationId: string) => {\n setCurrentConversationId(conversationId);\n // Threads will be loaded via useEffect\n }, []);\n\n // ============================================\n // Thread Management\n // ============================================\n\n /**\n * Load threads for a conversation\n */\n const loadThreads = useCallback(async (conversationId: string) => {\n setThreadsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Thread[] } | Thread[]>('/threads', {\n params: buildParams({ conversation_id: conversationId, namespace }),\n });\n const loadedThreads = 'data' in response.data ? response.data.data : response.data;\n\n // Sort by created_at descending\n loadedThreads.sort(\n (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n setThreads(loadedThreads);\n\n // Auto-select the latest thread\n if (loadedThreads.length > 0) {\n setCurrentThreadId(loadedThreads[0].thread_id);\n }\n } catch (error) {\n console.error('Failed to load threads:', error);\n throw error;\n } finally {\n setThreadsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a thread and load its messages\n */\n const selectThread = useCallback((threadId: string) => {\n setCurrentThreadId(threadId);\n // Messages will be loaded via useEffect\n }, []);\n\n // ============================================\n // Message Management\n // ============================================\n\n /**\n * Load messages for a thread\n */\n const loadMessages = useCallback(async (threadId: string) => {\n setMessagesLoading(true);\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage[] } | ConversationMessage[]>('/messages', {\n params: buildParams({ thread_id: threadId, namespace }),\n });\n const loadedMessages = 'data' in response.data ? response.data.data : response.data;\n\n // Extract last message ID for continuation\n if (loadedMessages.length > 0) {\n const lastMsgId = loadedMessages[loadedMessages.length - 1].message_id;\n setPreviousMessageId(lastMsgId);\n } else {\n setPreviousMessageId('');\n }\n\n setMessages(loadedMessages);\n } catch (error) {\n console.error('Failed to load messages:', error);\n throw error;\n } finally {\n setMessagesLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Send a user message and stream the response\n */\n const sendMessage = useCallback(async (userMessages: MessageUnion[], config: ConverseConfig) => {\n const messageId = generateId();\n\n // Check if this is a tool approval response (resuming a run)\n const isToolApproval = userMessages.length === 1 &&\n userMessages[0].type === MessageType.FunctionCallApprovalResponse;\n\n // Only add user message for regular messages, not for tool approvals\n if (!isToolApproval) {\n const userConversation: ConversationMessage = {\n conversation_id: currentConversationId || '',\n thread_id: currentThreadId || '',\n message_id: messageId + '-user',\n messages: userMessages,\n meta: {},\n };\n setMessages(prev => [...prev, userConversation]);\n }\n\n // Initialize the chunk processor for the assistant response\n processorRef.current = new ChunkProcessor(\n currentConversationId || '',\n currentThreadId || '',\n (conversation) => {\n setIsThinking(isThinking);\n setStreamingMessage({ ...conversation, isStreaming: true });\n }\n );\n\n setIsStreaming(true);\n setIsThinking(true);\n\n // Build URL with query parameters\n const params = new URLSearchParams();\n if (projectId) {\n params.append('project_id', projectId);\n }\n params.append('agent_name', config.agentName);\n\n let url = `${baseUrl}/converse?${params.toString()}`;\n if (!!config.baseUrl) {\n url = config.baseUrl;\n }\n\n // Prepare request body\n const body = JSON.stringify({\n namespace: config.namespace,\n previous_message_id: previousMessageId,\n message: userMessages[0],\n context: config.context || {},\n });\n\n // Abort any existing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n try {\n // Get headers (supports async getHeaders function)\n const requestHeaders = await getRequestHeaders();\n\n await streamSSE(\n url,\n {\n method: 'POST',\n body,\n headers: {\n ...requestHeaders,\n ...(config.headers || {}),\n },\n },\n {\n onChunk: (data) => {\n processorRef.current?.processChunk(data);\n },\n onComplete: () => {\n // Move streaming message to messages list\n if (processorRef.current) {\n const finalConversation = processorRef.current.getConversation();\n\n if (isToolApproval) {\n // For tool approvals, update the last message instead of appending\n setMessages(prev => {\n const newMessages = [...prev];\n if (newMessages.length > 0) {\n const lastMsg = newMessages[newMessages.length - 1];\n newMessages[newMessages.length - 1] = {\n ...lastMsg,\n messages: [...lastMsg.messages, ...finalConversation.messages],\n meta: finalConversation.meta,\n isStreaming: false,\n };\n }\n return newMessages;\n });\n } else {\n setMessages(prev => [...prev, { ...finalConversation, isStreaming: false }]);\n }\n\n setStreamingMessage(null);\n setPreviousMessageId(finalConversation.message_id);\n }\n },\n onError: (error) => {\n console.error('Streaming error:', error);\n setStreamingMessage(null);\n },\n },\n abortControllerRef.current.signal\n );\n\n // If this was a new conversation, fetch the conversation info\n if (previousMessageId === '' && processorRef.current) {\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage } | ConversationMessage>(\n `/messages/${processorRef.current.getConversation().message_id}`,\n { params: buildParams({ namespace }) }\n );\n const messageData = 'data' in response.data ? response.data.data : response.data;\n const newConversationId = messageData?.conversation_id;\n if (newConversationId) {\n // Add new conversation to list\n setConversations(prev => [{\n conversation_id: newConversationId,\n name: \"New Conversation\",\n namespace_id: namespace,\n created_at: new Date().toISOString(),\n last_updated: new Date().toISOString(),\n } as Conversation, ...prev.filter(c => c.conversation_id !== newConversationId)]);\n\n setCurrentConversationId(newConversationId);\n }\n } catch (e) {\n console.error('Failed to get conversation ID:', e);\n }\n }\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n }, [currentConversationId, currentThreadId, previousMessageId, namespace, baseUrl, projectId, axiosInstance, buildParams, getRequestHeaders]);\n\n // ============================================\n // Utility Actions\n // ============================================\n\n /**\n * Start a new chat (reset all state)\n */\n const startNewChat = useCallback(() => {\n // Abort any ongoing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setPreviousMessageId('');\n setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Fetch project ID on mount\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n // Load conversations after project ID is fetched\n useEffect(() => {\n if (autoLoad && projectId) {\n loadConversations();\n }\n }, [autoLoad, projectId, loadConversations]);\n\n // Load threads when conversation changes\n useEffect(() => {\n if (currentConversationId) {\n loadThreads(currentConversationId);\n }\n }, [currentConversationId, loadThreads]);\n\n // Load messages when thread changes\n useEffect(() => {\n if (currentThreadId) {\n loadMessages(currentThreadId);\n }\n }, [currentThreadId, loadMessages]);\n\n // ============================================\n // Computed values\n // ============================================\n\n const currentThread = threads.find(t => t.thread_id === currentThreadId) || null;\n\n const allMessages = streamingMessage\n ? [...messages, streamingMessage]\n : messages;\n\n return {\n // Project state\n projectId,\n projectLoading,\n\n // Conversation list state\n conversations,\n conversationsLoading,\n\n // Thread state\n threads,\n threadsLoading,\n currentThread,\n\n // Message state\n messages,\n streamingMessage,\n messagesLoading,\n isStreaming,\n isThinking,\n\n // Current selection\n currentConversationId,\n currentThreadId,\n\n // Actions - Conversations\n loadConversations,\n selectConversation,\n\n // Actions - Threads\n loadThreads,\n selectThread,\n\n // Actions - Messages\n sendMessage,\n\n // Actions - Utility\n startNewChat,\n\n // Combined messages\n allMessages,\n };\n}\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/types.ts","../src/streaming/ChunkProcessor.ts","../src/streaming/streamSSE.ts","../src/hooks/useConversation.ts"],"sourcesContent":["// Message Roles\nexport enum Role {\n User = \"user\",\n Developer = \"developer\",\n System = \"system\",\n Assistant = \"assistant\",\n}\n\n// Message Types\nexport enum MessageType {\n Message = \"message\",\n FunctionCall = \"function_call\",\n FunctionCallOutput = \"function_call_output\",\n Reasoning = \"reasoning\",\n ImageGenerationCall = \"image_generation_call\",\n FunctionCallApprovalResponse = \"function_call_approval_response\",\n}\n\n// Content Types\nexport enum ContentType {\n InputText = \"input_text\",\n OutputText = \"output_text\",\n SummaryText = \"summary_text\",\n InputImage = \"input_image\",\n}\n\n// Chunk Types\nexport enum ChunkType {\n ChunkTypeRunCreated = \"run.created\",\n ChunkTypeRunInProgress = \"run.in_progress\",\n ChunkTypeRunPaused = \"run.paused\",\n ChunkTypeRunCompleted = \"run.completed\",\n ChunkTypeResponseCreated = \"response.created\",\n ChunkTypeResponseInProgress = \"response.in_progress\",\n ChunkTypeResponseCompleted = \"response.completed\",\n ChunkTypeOutputItemAdded = \"response.output_item.added\",\n ChunkTypeOutputItemDone = \"response.output_item.done\",\n ChunkTypeContentPartAdded = \"response.content_part.added\",\n ChunkTypeContentPartDone = \"response.content_part.done\",\n ChunkTypeOutputTextDelta = \"response.output_text.delta\",\n ChunkTypeOutputTextDone = \"response.output_text.done\",\n ChunkTypeFunctionCallArgumentsDelta = \"response.function_call_arguments.delta\",\n ChunkTypeFunctionCallArgumentsDone = \"response.function_call_arguments.done\",\n ChunkTypeReasoningSummaryPartAdded = \"response.reasoning_summary_part.added\",\n ChunkTypeReasoningSummaryPartDone = \"response.reasoning_summary_part.done\",\n ChunkTypeReasoningSummaryTextDelta = \"response.reasoning_summary_text.delta\",\n ChunkTypeReasoningSummaryTextDone = \"response.reasoning_summary_text.done\",\n\n // Image generation\n ChunkTypeImageGenerationCallInProgress = \"response.image_generation_call.in_progress\",\n ChunkTypeImageGenerationCallGenerating = \"response.image_generation_call.generating\",\n ChunkTypeImageGenerationCallPartialImage = \"response.image_generation_call.partial_image\",\n\n // Extra\n ChunkTypeFunctionCallOutput = \"function_call_output\",\n}\n\n/**\n * Represents a conversation container\n */\nexport interface Conversation {\n namespace_id: string;\n conversation_id: string;\n name: string;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a thread within a conversation\n */\nexport interface Thread {\n conversation_id: string;\n origin_message_id: string;\n thread_id: string;\n meta: Record<string, any>;\n created_at: string;\n last_updated: string;\n}\n\n/**\n * Represents a message within a conversation thread\n */\nexport interface ConversationMessage {\n conversation_id: string;\n thread_id: string;\n message_id: string;\n messages: MessageUnion[];\n meta: Record<string, any>;\n isStreaming?: boolean;\n}\n\n// Message union type - discriminated by 'type' field\nexport type MessageUnion =\n | EasyMessage\n | InputMessage\n | OutputMessage\n | FunctionCallMessage\n | FunctionCallApprovalResponseMessage\n | FunctionCallOutputMessage\n | ReasoningMessage\n | ImageGenerationCallMessage;\n\nexport interface EasyMessage {\n type: MessageType.Message;\n id: string;\n role?: Role;\n content: EasyInputContentUnion;\n}\n\nexport interface InputMessage {\n type: MessageType.Message;\n id?: string;\n role?: Role;\n content?: InputContentUnion[];\n}\n\nexport interface OutputMessage {\n id: string;\n type?: MessageType.Message;\n role?: Role;\n content?: OutputContentUnion[];\n}\n\nexport interface FunctionCallMessage {\n type: MessageType.FunctionCall;\n id: string;\n call_id?: string;\n name: string;\n arguments: string;\n}\n\nexport interface FunctionCallApprovalResponseMessage {\n type: MessageType.FunctionCallApprovalResponse;\n id: string;\n approved_call_ids: string[];\n rejected_call_ids: string[];\n}\n\nexport interface FunctionCallOutputMessage {\n type: MessageType.FunctionCallOutput;\n id: string;\n call_id: string;\n output: FunctionCallOutputContentUnion;\n}\n\nexport interface ReasoningMessage {\n type: MessageType.Reasoning;\n id: string;\n summary?: SummaryTextContent[];\n encrypted_content?: string;\n}\n\nexport interface ImageGenerationCallMessage {\n type: MessageType.ImageGenerationCall;\n id: string;\n status: string;\n background: string;\n output_format: string;\n quality: string;\n size: string;\n result: string;\n}\n\n// Content Unions\nexport type EasyInputContentUnion = string | InputContentUnion;\nexport type InputContentUnion = InputTextContent | OutputTextContent | InputImageContent;\nexport type FunctionCallOutputContentUnion = string | InputContentUnion;\nexport type OutputContentUnion =\n | OutputTextContent\n | FunctionCallMessage\n | SummaryTextContent;\n\n// Content types\nexport interface InputTextContent {\n type: ContentType.InputText;\n text: string;\n}\n\nexport interface OutputTextContent {\n type: ContentType.OutputText;\n text: string;\n}\n\nexport interface SummaryTextContent {\n type: ContentType.SummaryText;\n text: string;\n}\n\nexport interface InputImageContent {\n type: ContentType.InputImage;\n image_url: string;\n detail: string;\n}\n\n/**\n * Configuration for the converse API endpoint\n */\nexport interface ConverseConfig {\n namespace: string;\n agentId: string;\n baseUrl?: string;\n context?: Record<string, unknown>;\n headers?: Record<string, string>;\n}\n\n// Streaming chunk types\nexport interface ResponseChunk {\n type: ChunkType;\n sequence_number: number;\n\n // Only on run items\n run_state?: ChunkRunData;\n\n // Only on response items\n response?: ChunkResponseData;\n\n // On non-run and non-response items\n output_index?: number;\n\n // Only on output_item\n item?: ChunkOutputItemData;\n\n // Only on content_part and delta\n item_id?: string;\n content_index?: number;\n\n // Only on content_part\n part?: OutputContentUnion;\n\n // Only on output_text delta/done\n delta?: string;\n text?: string;\n\n // Only on function_call arguments delta/done\n arguments?: string;\n\n // Only on reasoning summary part/delta/done\n summary_index?: number;\n\n // Only on function_call_output\n output: string;\n\n // Only on image_generation_call.partial_image\n partial_image_index?: number;\n partial_image_b64?: string;\n background?: string;\n output_format?: string;\n quality?: string;\n size?: string;\n status?: string;\n}\n\nexport interface ChunkRunData {\n id: string;\n object: \"run\";\n status: \"created\" | \"in_progress\" | \"paused\" | \"resumed\" | \"completed\" | \"aborted\";\n pending_tool_calls: FunctionCallMessage[];\n usage: ChunkResponseUsage;\n traceid: string;\n}\n\nexport interface ChunkResponseData {\n id: string;\n object: string;\n created_at: number;\n status: string;\n background: boolean;\n error: unknown;\n incomplete_details: unknown;\n output: OutputMessageUnion[];\n usage: ChunkResponseUsage;\n}\n\nexport interface ChunkOutputItemData {\n type: string; // \"function_call\", \"message\", \"reasoning\"\n\n // Common fields\n id: string;\n status: string;\n\n // For output_item of type \"message\"\n content: OutputContentUnion[];\n role: Role;\n\n // For output_item of type \"function_call\"\n call_id?: string;\n name?: string;\n arguments?: string;\n\n // For \"reasoning\"\n encrypted_content?: string;\n summary?: OutputContentUnion[];\n\n // For output_item of type \"image_generation_call\"\n background?: string;\n output_format?: string;\n quality?: string;\n result?: string;\n size?: string;\n}\n\nexport type OutputMessageUnion =\n | (OutputMessage & { id: string })\n | (FunctionCallMessage & { id: string })\n | (ReasoningMessage & { id: string })\n | (ImageGenerationCallMessage & { id: string });\n\nexport interface ChunkResponseUsage {\n input_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens: number;\n output_tokens_details: {\n reasoning_tokens: number;\n };\n total_tokens: number;\n}\n\nexport interface Usage {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: {\n cached_tokens: number;\n };\n output_tokens_details: {\n reasoning_tokens: number;\n };\n}\n\n// Type guards\nexport function isEasyMessage(msg: MessageUnion): msg is EasyMessage {\n return msg.type === MessageType.Message && 'content' in msg && (typeof msg.content === 'string' || Array.isArray(msg.content));\n}\n\nexport function isInputMessage(msg: MessageUnion): msg is InputMessage {\n return msg.type === MessageType.Message && 'content' in msg && Array.isArray(msg.content);\n}\n\nexport function isFunctionCallMessage(msg: MessageUnion): msg is FunctionCallMessage {\n return msg.type === MessageType.FunctionCall;\n}\n\nexport function isFunctionCallOutputMessage(msg: MessageUnion): msg is FunctionCallOutputMessage {\n return msg.type === MessageType.FunctionCallOutput;\n}\n\nexport function isReasoningMessage(msg: MessageUnion): msg is ReasoningMessage {\n return msg.type === MessageType.Reasoning;\n}\n\nexport function isImageGenerationCallMessage(msg: MessageUnion): msg is ImageGenerationCallMessage {\n return msg.type === MessageType.ImageGenerationCall;\n}\n\n","import {\n ChunkType,\n ContentType,\n ConversationMessage,\n FunctionCallMessage,\n FunctionCallOutputMessage,\n ImageGenerationCallMessage,\n InputMessage,\n MessageUnion,\n ReasoningMessage,\n ResponseChunk,\n} from '../types';\n\n/**\n * Callback invoked when the conversation state changes\n */\nexport type OnChangeCallback = (conversation: ConversationMessage) => void;\n\n/**\n * Processes streaming chunks from the LLM response.\n * Builds up messages incrementally as chunks arrive.\n *\n * @example\n * ```ts\n * const processor = new ChunkProcessor(\n * 'conv-123',\n * 'thread-456',\n * (conversation) => {\n * // Update UI with new conversation state\n * setConversation(conversation);\n * }\n * );\n *\n * // Process incoming chunks\n * processor.processChunk(jsonData);\n *\n * // Get final conversation when done\n * const finalConversation = processor.getConversation();\n * ```\n */\nexport class ChunkProcessor {\n private messages: MessageUnion[] = [];\n private currentOutputItem: MessageUnion | null = null;\n private _onChange: OnChangeCallback;\n private conversation: ConversationMessage;\n\n constructor(\n conversationId: string,\n threadId: string,\n onChange: OnChangeCallback\n ) {\n this.conversation = {\n conversation_id: conversationId,\n thread_id: threadId,\n message_id: '',\n messages: [],\n meta: {},\n };\n this._onChange = onChange;\n }\n\n /**\n * Get all processed messages\n */\n getMessages(): MessageUnion[] {\n return this.messages;\n }\n\n /**\n * Get the current conversation state\n */\n getConversation(): ConversationMessage {\n return this.conversation;\n }\n\n private emitChange(): void {\n this.conversation.messages = [...this.messages];\n this._onChange({ ...this.conversation });\n }\n\n /**\n * Process a raw JSON chunk from the SSE stream\n */\n processChunk(data: string): void {\n try {\n const chunk: ResponseChunk = JSON.parse(data);\n this.handleChunk(chunk);\n } catch (e) {\n console.error('Failed to parse chunk:', e, data);\n }\n }\n\n private handleChunk(chunk: ResponseChunk): void {\n switch (chunk.type) {\n // Run lifecycle\n case ChunkType.ChunkTypeRunCreated:\n case ChunkType.ChunkTypeRunInProgress:\n case ChunkType.ChunkTypeRunCompleted:\n case ChunkType.ChunkTypeRunPaused:\n this.conversation.meta.run_state = chunk.run_state;\n this.conversation.message_id = chunk.run_state!.id;\n if (chunk.type !== ChunkType.ChunkTypeRunCreated && chunk.type !== ChunkType.ChunkTypeRunInProgress) {\n this.emitChange();\n }\n break;\n\n // Response lifecycle\n case ChunkType.ChunkTypeResponseCreated:\n case ChunkType.ChunkTypeResponseInProgress:\n break;\n\n case ChunkType.ChunkTypeResponseCompleted:\n if (chunk.response?.usage) {\n this.conversation.meta.usage = chunk.response.usage;\n this.emitChange();\n }\n break;\n\n // Output item lifecycle\n case ChunkType.ChunkTypeOutputItemAdded:\n this.handleOutputItemAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputItemDone:\n break;\n\n // Content parts\n case ChunkType.ChunkTypeContentPartAdded:\n this.handleContentPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeContentPartDone:\n break;\n\n // Text deltas\n case ChunkType.ChunkTypeOutputTextDelta:\n this.handleOutputTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeOutputTextDone:\n break;\n\n // Reasoning summary\n case ChunkType.ChunkTypeReasoningSummaryPartAdded:\n this.handleReasoningSummaryPartAdded(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryPartDone:\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDelta:\n this.handleReasoningSummaryTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningSummaryTextDone:\n break;\n\n // Function calls\n case ChunkType.ChunkTypeFunctionCallArgumentsDelta:\n this.handleFunctionCallArgumentsDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeFunctionCallArgumentsDone:\n break;\n\n case ChunkType.ChunkTypeFunctionCallOutput:\n this.handleFunctionCallOutput(chunk);\n break;\n\n // Image Generation Calls\n case ChunkType.ChunkTypeImageGenerationCallInProgress:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallGenerating:\n break;\n\n case ChunkType.ChunkTypeImageGenerationCallPartialImage:\n this.handleImageGenerationCallPartialImage(chunk);\n break;\n }\n }\n\n private handleOutputItemAdded(chunk: ResponseChunk): void {\n if (!chunk.item) return;\n\n switch (chunk.item.type) {\n case \"message\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"message\",\n role: chunk.item.role || \"assistant\",\n content: [],\n } as InputMessage;\n break;\n\n case \"function_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"function_call\",\n name: chunk.item.name || \"\",\n call_id: chunk.item.call_id || \"\",\n arguments: \"\",\n } as FunctionCallMessage;\n break;\n\n case \"reasoning\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"reasoning\",\n summary: [],\n } as ReasoningMessage;\n break;\n\n case \"image_generation_call\":\n this.currentOutputItem = {\n id: chunk.item.id,\n type: \"image_generation_call\",\n status: chunk.item.status,\n } as ImageGenerationCallMessage;\n break;\n }\n\n if (this.currentOutputItem) {\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n }\n\n private handleContentPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n if (chunk.part?.type === ContentType.OutputText) {\n message.content = message.content || [];\n message.content.push({\n type: ContentType.OutputText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleOutputTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"message\") return;\n\n const message = this.currentOutputItem as InputMessage;\n const contents = message.content;\n if (!contents?.length || !chunk.delta) return;\n\n const lastContent = contents[contents.length - 1];\n if (lastContent && 'text' in lastContent) {\n lastContent.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryPartAdded(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n if (chunk.part?.type === ContentType.SummaryText) {\n reasoning.summary = reasoning.summary || [];\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n this.emitChange();\n }\n }\n\n private handleReasoningSummaryTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n const summaries = reasoning.summary;\n if (!summaries?.length || !chunk.delta) return;\n\n const lastSummary = summaries[summaries.length - 1];\n if (lastSummary) {\n lastSummary.text += chunk.delta;\n this.emitChange();\n }\n }\n\n private handleFunctionCallArgumentsDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"function_call\") return;\n\n const functionCall = this.currentOutputItem as FunctionCallMessage;\n functionCall.arguments += chunk.delta || \"\";\n this.emitChange();\n }\n\n private handleFunctionCallOutput(chunk: ResponseChunk): void {\n this.currentOutputItem = chunk as unknown as FunctionCallOutputMessage;\n this.messages.push(this.currentOutputItem);\n this.emitChange();\n }\n\n private handleImageGenerationCallPartialImage(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"image_generation_call\") return;\n\n const image = this.currentOutputItem as ImageGenerationCallMessage;\n image.result = chunk.partial_image_b64!;\n image.quality = chunk.quality!;\n image.size = chunk.size!;\n image.output_format = chunk.output_format!;\n image.background = chunk.background!;\n\n this.emitChange();\n }\n}\n\n","/**\n * Options for the SSE stream callbacks\n */\nexport interface SSEStreamOptions {\n /** Called for each data chunk received */\n onChunk: (data: string) => void;\n /** Called when an error occurs */\n onError?: (error: Error) => void;\n /** Called when the stream completes */\n onComplete?: () => void;\n}\n\n/**\n * Streams Server-Sent Events (SSE) from a URL.\n * Parses SSE frames and calls onChunk for each data payload.\n *\n * @param url - The URL to stream from\n * @param requestOptions - Fetch request options\n * @param callbacks - SSE event callbacks\n * @param abortSignal - Optional signal to abort the stream\n *\n * @example\n * ```ts\n * await streamSSE(\n * 'https://api.example.com/stream',\n * { method: 'POST', body: JSON.stringify({ message: 'Hello' }) },\n * {\n * onChunk: (data) => console.log('Received:', data),\n * onComplete: () => console.log('Done'),\n * onError: (err) => console.error('Error:', err),\n * }\n * );\n * ```\n */\nexport async function streamSSE(\n url: string,\n requestOptions: RequestInit,\n callbacks: SSEStreamOptions,\n abortSignal?: AbortSignal\n): Promise<void> {\n try {\n const response = await fetch(url, {\n ...requestOptions,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // Parse SSE frames: split on double newline\n let idx;\n while ((idx = buffer.indexOf('\\n\\n')) !== -1) {\n const frame = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 2);\n\n // Join all data: lines in the frame\n const data = frame\n .split('\\n')\n .filter(line => line.startsWith('data:'))\n .map(line => line.slice(5).trim())\n .join('\\n');\n\n if (data) {\n callbacks.onChunk(data);\n }\n }\n }\n\n // Final flush of decoder state\n decoder.decode();\n callbacks.onComplete?.();\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n return;\n }\n callbacks.onError?.(error as Error);\n }\n}\n\n","import axios from 'axios';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\n\n/**\n * Simple ID generator for message IDs\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n\n/**\n * Function type for providing custom headers.\n * Called before each request to get headers (useful for dynamic auth tokens).\n *\n * @example\n * ```ts\n * const getHeaders: GetHeadersFn = () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * 'X-Custom-Header': 'value',\n * });\n * ```\n */\nexport type GetHeadersFn = () => Record<string, string> | Promise<Record<string, string>>;\n\n/**\n * Options for the useConversation hook\n */\nexport interface UseConversationOptions {\n /** The namespace for conversations */\n namespace: string;\n /** Base URL of the Uno Agent Server (e.g., 'https://api.example.com/api/agent-server') */\n baseUrl: string;\n /** Project Name used to fetch the project ID */\n projectName: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: GetHeadersFn;\n /** Auto-load conversations on mount (default: true) */\n autoLoad?: boolean;\n}\n\n/**\n * Return type for the useConversation hook\n */\nexport interface UseConversationReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n\n // Conversation list state\n /** List of all conversations */\n conversations: Conversation[];\n /** Whether conversations are being loaded */\n conversationsLoading: boolean;\n\n // Thread state\n /** List of threads in the current conversation */\n threads: Thread[];\n /** Whether threads are being loaded */\n threadsLoading: boolean;\n /** Currently selected thread */\n currentThread: Thread | null;\n\n // Message state\n /** List of messages in the current thread */\n messages: ConversationMessage[];\n /** Message currently being streamed */\n streamingMessage: ConversationMessage | null;\n /** Whether messages are being loaded */\n messagesLoading: boolean;\n /** Whether a response is currently streaming */\n isStreaming: boolean;\n /** Whether waiting for a response */\n isThinking: boolean;\n\n // Current selection\n /** ID of the currently selected conversation */\n currentConversationId: string | null;\n /** ID of the currently selected thread */\n currentThreadId: string | null;\n\n // Actions - Conversations\n /** Load all conversations */\n loadConversations: () => Promise<void>;\n /** Select a conversation by ID */\n selectConversation: (conversationId: string) => void;\n\n // Actions - Threads\n /** Load threads for a conversation */\n loadThreads: (conversationId: string) => Promise<void>;\n /** Select a thread by ID */\n selectThread: (threadId: string) => void;\n\n // Actions - Messages\n /** Send a message and stream the response */\n sendMessage: (userMessages: MessageUnion[], config: ConverseConfig) => Promise<void>;\n\n // Actions - Utility\n /** Start a new chat (clears current state) */\n startNewChat: () => void;\n\n // Combined messages (loaded + streaming)\n /** All messages including the currently streaming one */\n allMessages: ConversationMessage[];\n}\n\n/**\n * A comprehensive hook for managing conversations, threads, messages, and streaming\n * with Uno Agent Server.\n *\n * @example\n * ```tsx\n * import { useConversation } from '@praveen001/uno-converse';\n *\n * function ChatComponent() {\n * const {\n * allMessages,\n * isStreaming,\n * sendMessage,\n * startNewChat,\n * } = useConversation({\n * namespace: 'my-app',\n * projectName: 'my-project',\n * baseUrl: 'https://my-uno-server.com/api/agent-server',\n * getHeaders: () => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * }),\n * });\n *\n * const handleSend = async (text: string) => {\n * await sendMessage(\n * [{ type: 'message', id: '1', content: text }],\n * {\n * namespace: 'my-app',\n * agentName: 'my-agent',\n * }\n * );\n * };\n *\n * return (\n * <div>\n * {allMessages.map(msg => (\n * <MessageComponent key={msg.message_id} message={msg} />\n * ))}\n * {isStreaming && <LoadingIndicator />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useConversation(options: UseConversationOptions): UseConversationReturn {\n const { namespace, projectName, baseUrl, getHeaders, autoLoad = true } = options;\n\n // Create axios instance with request interceptor for custom headers\n const axiosInstance = useMemo(() => {\n const instance = axios.create({\n baseURL: baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Add request interceptor to inject custom headers\n if (getHeaders) {\n instance.interceptors.request.use(async (config) => {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n return config;\n });\n }\n\n return instance;\n }, [baseUrl, getHeaders]);\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Conversation list state\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [conversationsLoading, setConversationsLoading] = useState(false);\n\n // Thread state\n const [threads, setThreads] = useState<Thread[]>([]);\n const [threadsLoading, setThreadsLoading] = useState(false);\n\n // Message state\n const [messages, setMessages] = useState<ConversationMessage[]>([]);\n const [streamingMessage, setStreamingMessage] = useState<ConversationMessage | null>(null);\n const [messagesLoading, setMessagesLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isThinking, setIsThinking] = useState(false);\n\n // Current selection\n const [currentConversationId, setCurrentConversationId] = useState<string | null>(null);\n const [currentThreadId, setCurrentThreadId] = useState<string | null>(null);\n const [previousMessageId, setPreviousMessageId] = useState<string>('');\n\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params with project_id if available\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n const result: Record<string, string> = {};\n if (projectId) {\n result.project_id = projectId;\n }\n if (params) {\n Object.assign(result, params);\n }\n return result;\n }, [projectId]);\n\n /**\n * Get headers for streaming requests (combines default + custom headers)\n */\n const getRequestHeaders = useCallback(async (): Promise<Record<string, string>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(headers, customHeaders);\n }\n\n return headers;\n }, [getHeaders]);\n\n // ============================================\n // Project Management\n // ============================================\n\n /**\n * Fetch the project ID using the project name\n */\n const fetchProjectId = useCallback(async () => {\n if (!projectName) {\n return;\n }\n\n setProjectLoading(true);\n try {\n const response = await axiosInstance.get<{ data: string } | string>('/project/id', {\n params: { name: projectName },\n });\n const id = typeof response.data === 'string' ? response.data : response.data.data;\n setProjectId(id || '');\n } catch (error) {\n console.error('Failed to fetch project ID:', error);\n throw error;\n } finally {\n setProjectLoading(false);\n }\n }, [axiosInstance, projectName]);\n\n // ============================================\n // Conversation Management\n // ============================================\n\n /**\n * Load all conversations for the namespace\n */\n const loadConversations = useCallback(async () => {\n setConversationsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Conversation[] } | Conversation[]>('/conversations', {\n params: buildParams({ namespace }),\n });\n const data = 'data' in response.data ? response.data.data : response.data;\n setConversations(data || []);\n } catch (error) {\n console.error('Failed to load conversations:', error);\n throw error;\n } finally {\n setConversationsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a conversation and load its threads\n */\n const selectConversation = useCallback((conversationId: string) => {\n setCurrentConversationId(conversationId);\n // Threads will be loaded via useEffect\n }, []);\n\n // ============================================\n // Thread Management\n // ============================================\n\n /**\n * Load threads for a conversation\n */\n const loadThreads = useCallback(async (conversationId: string) => {\n setThreadsLoading(true);\n try {\n const response = await axiosInstance.get<{ data: Thread[] } | Thread[]>('/threads', {\n params: buildParams({ conversation_id: conversationId, namespace }),\n });\n const loadedThreads = 'data' in response.data ? response.data.data : response.data;\n\n // Sort by created_at descending\n loadedThreads.sort(\n (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n setThreads(loadedThreads);\n\n // Auto-select the latest thread\n if (loadedThreads.length > 0) {\n setCurrentThreadId(loadedThreads[0].thread_id);\n }\n } catch (error) {\n console.error('Failed to load threads:', error);\n throw error;\n } finally {\n setThreadsLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Select a thread and load its messages\n */\n const selectThread = useCallback((threadId: string) => {\n setCurrentThreadId(threadId);\n // Messages will be loaded via useEffect\n }, []);\n\n // ============================================\n // Message Management\n // ============================================\n\n /**\n * Load messages for a thread\n */\n const loadMessages = useCallback(async (threadId: string) => {\n setMessagesLoading(true);\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage[] } | ConversationMessage[]>('/messages', {\n params: buildParams({ thread_id: threadId, namespace }),\n });\n const loadedMessages = 'data' in response.data ? response.data.data : response.data;\n\n // Extract last message ID for continuation\n if (loadedMessages.length > 0) {\n const lastMsgId = loadedMessages[loadedMessages.length - 1].message_id;\n setPreviousMessageId(lastMsgId);\n } else {\n setPreviousMessageId('');\n }\n\n setMessages(loadedMessages);\n } catch (error) {\n console.error('Failed to load messages:', error);\n throw error;\n } finally {\n setMessagesLoading(false);\n }\n }, [axiosInstance, buildParams, namespace]);\n\n /**\n * Send a user message and stream the response\n */\n const sendMessage = useCallback(async (userMessages: MessageUnion[], config: ConverseConfig) => {\n const messageId = generateId();\n\n // Check if this is a tool approval response (resuming a run)\n const isToolApproval = userMessages.length === 1 &&\n userMessages[0].type === MessageType.FunctionCallApprovalResponse;\n\n // Only add user message for regular messages, not for tool approvals\n if (!isToolApproval) {\n const userConversation: ConversationMessage = {\n conversation_id: currentConversationId || '',\n thread_id: currentThreadId || '',\n message_id: messageId + '-user',\n messages: userMessages,\n meta: {},\n };\n setMessages(prev => [...prev, userConversation]);\n }\n\n // Initialize the chunk processor for the assistant response\n processorRef.current = new ChunkProcessor(\n currentConversationId || '',\n currentThreadId || '',\n (conversation) => {\n setIsThinking(isThinking);\n setStreamingMessage({ ...conversation, isStreaming: true });\n }\n );\n\n setIsStreaming(true);\n setIsThinking(true);\n\n // Build URL with query parameters\n const params = new URLSearchParams();\n if (projectId) {\n params.append('project_id', projectId);\n }\n params.append('agent_id', config.agentId);\n\n let url = `${baseUrl}/converse?${params.toString()}`;\n if (!!config.baseUrl) {\n url = config.baseUrl;\n }\n\n // Prepare request body\n const body = JSON.stringify({\n namespace: config.namespace,\n previous_message_id: previousMessageId,\n message: userMessages[0],\n context: config.context || {},\n });\n\n // Abort any existing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n try {\n // Get headers (supports async getHeaders function)\n const requestHeaders = await getRequestHeaders();\n\n await streamSSE(\n url,\n {\n method: 'POST',\n body,\n headers: {\n ...requestHeaders,\n ...(config.headers || {}),\n },\n },\n {\n onChunk: (data) => {\n processorRef.current?.processChunk(data);\n },\n onComplete: () => {\n // Move streaming message to messages list\n if (processorRef.current) {\n const finalConversation = processorRef.current.getConversation();\n\n if (isToolApproval) {\n // For tool approvals, update the last message instead of appending\n setMessages(prev => {\n const newMessages = [...prev];\n if (newMessages.length > 0) {\n const lastMsg = newMessages[newMessages.length - 1];\n newMessages[newMessages.length - 1] = {\n ...lastMsg,\n messages: [...lastMsg.messages, ...finalConversation.messages],\n meta: finalConversation.meta,\n isStreaming: false,\n };\n }\n return newMessages;\n });\n } else {\n setMessages(prev => [...prev, { ...finalConversation, isStreaming: false }]);\n }\n\n setStreamingMessage(null);\n setPreviousMessageId(finalConversation.message_id);\n }\n },\n onError: (error) => {\n console.error('Streaming error:', error);\n setStreamingMessage(null);\n },\n },\n abortControllerRef.current.signal\n );\n\n // If this was a new conversation, fetch the conversation info\n if (previousMessageId === '' && processorRef.current) {\n try {\n const response = await axiosInstance.get<{ data: ConversationMessage } | ConversationMessage>(\n `/messages/${processorRef.current.getConversation().message_id}`,\n { params: buildParams({ namespace }) }\n );\n const messageData = 'data' in response.data ? response.data.data : response.data;\n const newConversationId = messageData?.conversation_id;\n if (newConversationId) {\n // Add new conversation to list\n setConversations(prev => [{\n conversation_id: newConversationId,\n name: \"New Conversation\",\n namespace_id: namespace,\n created_at: new Date().toISOString(),\n last_updated: new Date().toISOString(),\n } as Conversation, ...prev.filter(c => c.conversation_id !== newConversationId)]);\n\n setCurrentConversationId(newConversationId);\n }\n } catch (e) {\n console.error('Failed to get conversation ID:', e);\n }\n }\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n }, [currentConversationId, currentThreadId, previousMessageId, namespace, baseUrl, projectId, axiosInstance, buildParams, getRequestHeaders]);\n\n // ============================================\n // Utility Actions\n // ============================================\n\n /**\n * Start a new chat (reset all state)\n */\n const startNewChat = useCallback(() => {\n // Abort any ongoing stream\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setPreviousMessageId('');\n setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Fetch project ID on mount\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n // Load conversations after project ID is fetched\n useEffect(() => {\n if (autoLoad && projectId) {\n loadConversations();\n }\n }, [autoLoad, projectId, loadConversations]);\n\n // Load threads when conversation changes\n useEffect(() => {\n if (currentConversationId) {\n loadThreads(currentConversationId);\n }\n }, [currentConversationId, loadThreads]);\n\n // Load messages when thread changes\n useEffect(() => {\n if (currentThreadId) {\n loadMessages(currentThreadId);\n }\n }, [currentThreadId, loadMessages]);\n\n // ============================================\n // Computed values\n // ============================================\n\n const currentThread = threads.find(t => t.thread_id === currentThreadId) || null;\n\n const allMessages = streamingMessage\n ? [...messages, streamingMessage]\n : messages;\n\n return {\n // Project state\n projectId,\n projectLoading,\n\n // Conversation list state\n conversations,\n conversationsLoading,\n\n // Thread state\n threads,\n threadsLoading,\n currentThread,\n\n // Message state\n messages,\n streamingMessage,\n messagesLoading,\n isStreaming,\n isThinking,\n\n // Current selection\n currentConversationId,\n currentThreadId,\n\n // Actions - Conversations\n loadConversations,\n selectConversation,\n\n // Actions - Threads\n loadThreads,\n selectThread,\n\n // Actions - Messages\n sendMessage,\n\n // Actions - Utility\n startNewChat,\n\n // Combined messages\n allMessages,\n };\n}\n\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curaious/uno-converse",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "type": "module",
5
5
  "description": "React hooks and utilities for building conversation UIs with Uno Agent Server",
6
6
  "keywords": [