@hastekit/hastekit-converse 0.0.20 → 0.0.22

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
@@ -28,6 +28,7 @@ exports.ContentType = void 0;
28
28
  ContentType["InputText"] = "input_text";
29
29
  ContentType["OutputText"] = "output_text";
30
30
  ContentType["SummaryText"] = "summary_text";
31
+ ContentType["ReasoningText"] = "reasoning_text";
31
32
  ContentType["InputImage"] = "input_image";
32
33
  })(exports.ContentType || (exports.ContentType = {}));
33
34
  // Chunk Types
@@ -52,6 +53,8 @@ exports.ChunkType = void 0;
52
53
  ChunkType["ChunkTypeReasoningSummaryPartDone"] = "response.reasoning_summary_part.done";
53
54
  ChunkType["ChunkTypeReasoningSummaryTextDelta"] = "response.reasoning_summary_text.delta";
54
55
  ChunkType["ChunkTypeReasoningSummaryTextDone"] = "response.reasoning_summary_text.done";
56
+ ChunkType["ChunkTypeReasoningTextDelta"] = "response.reasoning_text.delta";
57
+ ChunkType["ChunkTypeReasoningTextDone"] = "response.reasoning_text.done";
55
58
  // Image generation
56
59
  ChunkType["ChunkTypeImageGenerationCallInProgress"] = "response.image_generation_call.in_progress";
57
60
  ChunkType["ChunkTypeImageGenerationCallGenerating"] = "response.image_generation_call.generating";
@@ -110,7 +113,9 @@ class ChunkProcessor {
110
113
  thread_id: threadId,
111
114
  message_id: '',
112
115
  messages: [],
113
- meta: {},
116
+ meta: {
117
+ run_state: {},
118
+ },
114
119
  };
115
120
  this._onChange = onChange;
116
121
  }
@@ -194,6 +199,11 @@ class ChunkProcessor {
194
199
  break;
195
200
  case exports.ChunkType.ChunkTypeReasoningSummaryTextDone:
196
201
  break;
202
+ case exports.ChunkType.ChunkTypeReasoningTextDelta:
203
+ this.handleReasoningTextDelta(chunk);
204
+ break;
205
+ case exports.ChunkType.ChunkTypeReasoningTextDone:
206
+ break;
197
207
  // Function calls
198
208
  case exports.ChunkType.ChunkTypeFunctionCallArgumentsDelta:
199
209
  this.handleFunctionCallArgumentsDelta(chunk);
@@ -255,7 +265,7 @@ class ChunkProcessor {
255
265
  }
256
266
  }
257
267
  handleContentPartAdded(chunk) {
258
- if (!this.currentOutputItem || this.currentOutputItem.type !== "message")
268
+ if (!this.currentOutputItem || (this.currentOutputItem.type !== "message" && this.currentOutputItem.type !== "reasoning"))
259
269
  return;
260
270
  const message = this.currentOutputItem;
261
271
  if (chunk.part?.type === exports.ContentType.OutputText) {
@@ -266,6 +276,34 @@ class ChunkProcessor {
266
276
  });
267
277
  this.emitChange();
268
278
  }
279
+ const reasoning = this.currentOutputItem;
280
+ if (chunk.part?.type === exports.ContentType.ReasoningText) {
281
+ reasoning.summary = reasoning.summary || [];
282
+ reasoning.summary.push({
283
+ type: exports.ContentType.SummaryText,
284
+ text: "",
285
+ });
286
+ }
287
+ }
288
+ handleReasoningTextDelta(chunk) {
289
+ if (!this.currentOutputItem || this.currentOutputItem.type !== "reasoning")
290
+ return;
291
+ const reasoning = this.currentOutputItem;
292
+ reasoning.summary = reasoning.summary || [];
293
+ const summaries = reasoning.summary;
294
+ if (summaries.length === 0) {
295
+ reasoning.summary.push({
296
+ type: exports.ContentType.SummaryText,
297
+ text: "",
298
+ });
299
+ }
300
+ if (!chunk.delta)
301
+ return;
302
+ const lastSummary = summaries[summaries.length - 1];
303
+ if (lastSummary) {
304
+ lastSummary.text += chunk.delta;
305
+ this.emitChange();
306
+ }
269
307
  }
270
308
  handleOutputTextDelta(chunk) {
271
309
  if (!this.currentOutputItem || this.currentOutputItem.type !== "message")
@@ -336,6 +374,21 @@ class ChunkProcessor {
336
374
  image.background = chunk.background;
337
375
  this.emitChange();
338
376
  }
377
+ handleError(error) {
378
+ console.error('Error processing chunk:', error);
379
+ this.currentOutputItem = {
380
+ id: 'error',
381
+ type: "message",
382
+ role: "assistant",
383
+ content: [{
384
+ type: exports.ContentType.OutputText,
385
+ text: error.message,
386
+ }],
387
+ is_error: true,
388
+ };
389
+ this.messages.push(this.currentOutputItem);
390
+ this.emitChange();
391
+ }
339
392
  }
340
393
 
341
394
  /**
@@ -367,7 +420,17 @@ async function streamSSE(url, requestOptions, callbacks, abortSignal) {
367
420
  signal: abortSignal,
368
421
  });
369
422
  if (!response.ok) {
370
- throw new Error(`HTTP error! status: ${response.status}`);
423
+ let errorMessage = `HTTP error! status: ${response.status}`;
424
+ try {
425
+ const errorBody = await response.json();
426
+ if (errorBody?.message) {
427
+ errorMessage = errorBody.message;
428
+ }
429
+ }
430
+ catch {
431
+ // Could not parse error body, use default message
432
+ }
433
+ throw new Error("Error: " + errorMessage);
371
434
  }
372
435
  if (!response.body) {
373
436
  throw new Error('Response body is null');
@@ -884,6 +947,7 @@ function useConversation(options) {
884
947
  onError: (error) => {
885
948
  console.error('Streaming error:', error);
886
949
  setStreamingMessage(null);
950
+ processorRef.current?.handleError(error);
887
951
  },
888
952
  }, abortControllerRef.current.signal);
889
953
  // If this was a new conversation, fetch the conversation info
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/types.ts","../src/streaming/ChunkProcessor.ts","../src/streaming/streamSSE.ts","../src/hooks/useProject.tsx","../src/ProjectProvider/index.tsx","../src/hooks/useConversation.ts","../src/hooks/useAgent.ts"],"sourcesContent":["export interface Agent {\n id: string;\n agent_id: string;\n name: string;\n version: number;\n}\n\n// 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","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 reasoning.summary = reasoning.summary || [];\n\n const summaries = reasoning.summary;\n if (summaries.length === 0) {\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n\n if (!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, { AxiosInstance } from 'axios';\nimport {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\n\n/**\n * Options for the useProject hook\n */\nexport interface UseProjectOptions {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: 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 useProject hook\n */\nexport interface UseProjectReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n /** Axios instance configured with baseUrl and custom headers */\n axiosInstance: AxiosInstance;\n /** Function to build query params with project_id automatically added */\n buildParams: (params?: Record<string, string>) => Record<string, string>;\n /** Function to get request headers (combines default + custom headers) */\n getRequestHeaders: () => Promise<Record<string, string>>;\n /** Base URL used for the axios instance */\n baseUrl: string;\n}\n\nexport function useProject(options: UseProjectOptions): UseProjectReturn {\n const { projectName, baseUrl, orgId, getHeaders, autoLoad = true } = options;\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Use ref to store current projectId for interceptor access\n const projectIdRef = useRef<string>('');\n\n // Update ref whenever projectId changes\n useEffect(() => {\n projectIdRef.current = projectId;\n }, [projectId]);\n\n // ── Clear stale projectId synchronously during render when projectName changes ──\n // When the org switches, ProjectContext clears selectedProject (during render),\n // causing projectName to become ''. Without this guard, downstream consumers\n // (useConversation, ChatPage, etc.) would still see the OLD projectId in their\n // effects, firing API calls with a stale project_id or without one entirely.\n const prevProjectNameRef = useRef<string | undefined>(undefined);\n if (prevProjectNameRef.current !== undefined && projectName !== prevProjectNameRef.current) {\n setProjectId('');\n projectIdRef.current = '';\n }\n prevProjectNameRef.current = projectName;\n\n // Create axios instance with request interceptor for custom headers and project_id\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, org_id, and project_id\n instance.interceptors.request.use(async (config) => {\n // Add org ID header if provided\n if (orgId) {\n config.headers.set('X-Org-ID', orgId);\n }\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n }\n\n // Automatically add project_id to query params if available\n const currentProjectId = projectIdRef.current;\n if (currentProjectId) {\n if (config.params) {\n config.params = {\n ...config.params,\n project_id: currentProjectId,\n };\n } else {\n config.params = { project_id: currentProjectId };\n }\n }\n \n return config;\n });\n\n return instance;\n }, [baseUrl, orgId, getHeaders]);\n\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params (project_id is automatically added by axios interceptor)\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n return params || {};\n }, []);\n\n /**\n * Get headers for streaming requests (combines default + custom + org 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 org ID header if provided\n if (orgId) {\n headers['X-Org-ID'] = orgId;\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 }, [orgId, 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 // Effects for auto-loading\n // ============================================\n\n // Fetch project ID when projectName changes (or on mount)\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n return {\n // Project state\n projectId,\n projectLoading,\n // API client\n axiosInstance,\n buildParams,\n getRequestHeaders,\n baseUrl,\n }\n}","import React, {createContext, useContext, useMemo} from 'react';\nimport type { ReactNode, ReactElement } from \"react\";\nimport { useProject, UseProjectOptions, UseProjectReturn } from '../hooks/useProject';\n\n/**\n * Context value for ProjectProvider\n */\nexport interface ProjectContextValue extends UseProjectReturn {}\n\n/**\n * Props for ProjectProvider component\n */\nexport interface ProjectProviderProps {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: UseProjectOptions['getHeaders'];\n /** Auto-load project on mount (default: true) */\n autoLoad?: boolean;\n /** Child components */\n children: ReactNode;\n}\n\n// Create the context with undefined as default to ensure it's used within provider\nconst ProjectContext = createContext<ProjectContextValue | undefined>(undefined);\n\n/**\n * ProjectProvider component that manages project state using React Context.\n * \n * This provider wraps the useProject hook and makes the project state available\n * to all child components through context.\n * \n * @example\n * ```tsx\n * import { ProjectProvider, useProjectContext } from '@praveen001/uno-converse';\n * \n * function App() {\n * return (\n * <ProjectProvider\n * baseUrl=\"https://api.example.com/api/agent-server\"\n * projectName=\"my-project\"\n * getHeaders={() => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * })}\n * >\n * <YourApp />\n * </ProjectProvider>\n * );\n * }\n * \n * function YourApp() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * if (projectLoading) {\n * return <div>Loading project...</div>;\n * }\n * \n * return <div>Project ID: {projectId}</div>;\n * }\n * ```\n */\nexport const ProjectProvider = ({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad = true,\n children,\n}: ProjectProviderProps): ReactElement => {\n // Use the useProject hook to manage project state\n const projectState = useProject({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad,\n });\n\n // Memoize the context value to prevent unnecessary re-renders\n const contextValue = useMemo<ProjectContextValue>(\n () => projectState,\n [\n projectState.projectId,\n projectState.projectLoading,\n projectState.axiosInstance,\n projectState.buildParams,\n projectState.getRequestHeaders,\n projectState.baseUrl,\n ]\n );\n\n return (\n <ProjectContext.Provider value={contextValue}>\n {children}\n </ProjectContext.Provider>\n );\n};\n\n/**\n * Hook to access the project context.\n * \n * Must be used within a ProjectProvider component.\n * \n * @throws {Error} If used outside of ProjectProvider\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * return (\n * <div>\n * {projectLoading ? 'Loading...' : `Project ID: ${projectId}`}\n * </div>\n * );\n * }\n * ```\n */\nexport const useProjectContext = (): ProjectContextValue => {\n const context = useContext(ProjectContext);\n \n if (context === undefined) {\n throw new Error('useProjectContext must be used within a ProjectProvider');\n }\n \n return context;\n};\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Agent,\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\nimport { useProjectContext } from '../ProjectProvider';\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 /** 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 // 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 * });\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, autoLoad = true } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n projectLoading,\n buildParams,\n getRequestHeaders,\n baseUrl,\n } = useProjectContext();\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\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n // Note: buildParams and getRequestHeaders are now provided by ProjectProvider\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 thread_id: currentThreadId,\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 (!currentThreadId || currentThreadId === '' && 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, 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 setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Clear stale conversation state when project changes (e.g., org switch).\n // This runs before the loading effect below (effects execute in declaration\n // order) and ensures we never show data from a previous project/org.\n useEffect(() => {\n setConversations([]);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n processorRef.current = null;\n }, [projectId]);\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 // 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","import axios from 'axios';\nimport {useCallback, useEffect, useMemo, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\nimport { useProjectContext } from '../ProjectProvider';\n\n/**\n * Options for the useAgent hook\n */\nexport interface UseAgentOptions {\n /** The name of the agent */\n name: string;\n}\n\n/**\n * Return type for the useAgent hook\n */\nexport interface UseAgentReturn {\n // Agent\n agent: Agent | null;\n /** Whether the agent is being loaded */\n agentLoading: boolean;\n}\n\nexport function useAgent(options: UseAgentOptions): UseAgentReturn {\n const { name } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n buildParams,\n } = useProjectContext();\n\n // Agents state\n const [agent, setAgent] = useState<Agent | null>(null);\n const [agentLoading, setAgentLoading] = useState(false);\n\n // ============================================\n // Agent Management\n // ============================================\n\n /**\n * Fetch the agent\n */\n const loadAgent = useCallback(async (): Promise<void> => {\n setAgentLoading(true);\n try {\n const response = await axiosInstance.get<{data: Agent}>('/agent-configs/by-name', {\n params: buildParams({ name }),\n });\n setAgent(response.data.data);\n } catch (error) {\n console.error('Failed to load agent:', error)\n throw error;\n } finally {\n setAgentLoading(false);\n }\n }, [axiosInstance, name]);\n\n // Fetch agent after project is fetched\n useEffect(() => {\n if (projectId) {\n loadAgent();\n }\n }, [projectId, loadAgent]);\n\n return { agent, agentLoading };\n}"],"names":["Role","MessageType","ContentType","ChunkType","useState","useRef","useEffect","useMemo","useCallback","createContext","_jsx","useContext"],"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/useProject.tsx","../src/ProjectProvider/index.tsx","../src/hooks/useConversation.ts","../src/hooks/useAgent.ts"],"sourcesContent":["export interface Agent {\n id: string;\n agent_id: string;\n name: string;\n version: number;\n}\n\n// 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 ReasoningText = \"reasoning_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 ChunkTypeReasoningTextDelta = \"response.reasoning_text.delta\",\n ChunkTypeReasoningTextDone = \"response.reasoning_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 is_error?: boolean;\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 | ReasoningTextContent;\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 ReasoningTextContent {\n type: ContentType.ReasoningText;\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","import {\n ChunkType,\n ContentType,\n ConversationMessage,\n FunctionCallMessage,\n FunctionCallOutputMessage,\n ImageGenerationCallMessage,\n InputMessage,\n MessageUnion, OutputMessage,\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 run_state: {},\n },\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 case ChunkType.ChunkTypeReasoningTextDelta:\n this.handleReasoningTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningTextDone:\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\" && this.currentOutputItem.type !== \"reasoning\")) 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 const reasoning = this.currentOutputItem as ReasoningMessage;\n if (chunk.part?.type === ContentType.ReasoningText) {\n reasoning.summary = reasoning.summary || [];\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n }\n\n private handleReasoningTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n reasoning.summary = reasoning.summary || [];\n\n const summaries = reasoning.summary;\n if (summaries.length === 0) {\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n\n if (!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 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 reasoning.summary = reasoning.summary || [];\n\n const summaries = reasoning.summary;\n if (summaries.length === 0) {\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n\n if (!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 public handleError(error: Error): void {\n console.error('Error processing chunk:', error);\n this.currentOutputItem = {\n id: 'error',\n type: \"message\",\n role: \"assistant\",\n content: [{\n type: ContentType.OutputText,\n text: error.message,\n }],\n is_error: true,\n } as OutputMessage;\n this.messages.push(this.currentOutputItem);\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 let errorMessage = `HTTP error! status: ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n // Could not parse error body, use default message\n }\n throw new Error(\"Error: \" + errorMessage);\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, { AxiosInstance } from 'axios';\nimport {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\n\n/**\n * Options for the useProject hook\n */\nexport interface UseProjectOptions {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: 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 useProject hook\n */\nexport interface UseProjectReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n /** Axios instance configured with baseUrl and custom headers */\n axiosInstance: AxiosInstance;\n /** Function to build query params with project_id automatically added */\n buildParams: (params?: Record<string, string>) => Record<string, string>;\n /** Function to get request headers (combines default + custom headers) */\n getRequestHeaders: () => Promise<Record<string, string>>;\n /** Base URL used for the axios instance */\n baseUrl: string;\n}\n\nexport function useProject(options: UseProjectOptions): UseProjectReturn {\n const { projectName, baseUrl, orgId, getHeaders, autoLoad = true } = options;\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Use ref to store current projectId for interceptor access\n const projectIdRef = useRef<string>('');\n\n // Update ref whenever projectId changes\n useEffect(() => {\n projectIdRef.current = projectId;\n }, [projectId]);\n\n // ── Clear stale projectId synchronously during render when projectName changes ──\n // When the org switches, ProjectContext clears selectedProject (during render),\n // causing projectName to become ''. Without this guard, downstream consumers\n // (useConversation, ChatPage, etc.) would still see the OLD projectId in their\n // effects, firing API calls with a stale project_id or without one entirely.\n const prevProjectNameRef = useRef<string | undefined>(undefined);\n if (prevProjectNameRef.current !== undefined && projectName !== prevProjectNameRef.current) {\n setProjectId('');\n projectIdRef.current = '';\n }\n prevProjectNameRef.current = projectName;\n\n // Create axios instance with request interceptor for custom headers and project_id\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, org_id, and project_id\n instance.interceptors.request.use(async (config) => {\n // Add org ID header if provided\n if (orgId) {\n config.headers.set('X-Org-ID', orgId);\n }\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n }\n\n // Automatically add project_id to query params if available\n const currentProjectId = projectIdRef.current;\n if (currentProjectId) {\n if (config.params) {\n config.params = {\n ...config.params,\n project_id: currentProjectId,\n };\n } else {\n config.params = { project_id: currentProjectId };\n }\n }\n \n return config;\n });\n\n return instance;\n }, [baseUrl, orgId, getHeaders]);\n\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params (project_id is automatically added by axios interceptor)\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n return params || {};\n }, []);\n\n /**\n * Get headers for streaming requests (combines default + custom + org 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 org ID header if provided\n if (orgId) {\n headers['X-Org-ID'] = orgId;\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 }, [orgId, 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 // Effects for auto-loading\n // ============================================\n\n // Fetch project ID when projectName changes (or on mount)\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n return {\n // Project state\n projectId,\n projectLoading,\n // API client\n axiosInstance,\n buildParams,\n getRequestHeaders,\n baseUrl,\n }\n}","import React, {createContext, useContext, useMemo} from 'react';\nimport type { ReactNode, ReactElement } from \"react\";\nimport { useProject, UseProjectOptions, UseProjectReturn } from '../hooks/useProject';\n\n/**\n * Context value for ProjectProvider\n */\nexport interface ProjectContextValue extends UseProjectReturn {}\n\n/**\n * Props for ProjectProvider component\n */\nexport interface ProjectProviderProps {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: UseProjectOptions['getHeaders'];\n /** Auto-load project on mount (default: true) */\n autoLoad?: boolean;\n /** Child components */\n children: ReactNode;\n}\n\n// Create the context with undefined as default to ensure it's used within provider\nconst ProjectContext = createContext<ProjectContextValue | undefined>(undefined);\n\n/**\n * ProjectProvider component that manages project state using React Context.\n * \n * This provider wraps the useProject hook and makes the project state available\n * to all child components through context.\n * \n * @example\n * ```tsx\n * import { ProjectProvider, useProjectContext } from '@praveen001/uno-converse';\n * \n * function App() {\n * return (\n * <ProjectProvider\n * baseUrl=\"https://api.example.com/api/agent-server\"\n * projectName=\"my-project\"\n * getHeaders={() => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * })}\n * >\n * <YourApp />\n * </ProjectProvider>\n * );\n * }\n * \n * function YourApp() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * if (projectLoading) {\n * return <div>Loading project...</div>;\n * }\n * \n * return <div>Project ID: {projectId}</div>;\n * }\n * ```\n */\nexport const ProjectProvider = ({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad = true,\n children,\n}: ProjectProviderProps): ReactElement => {\n // Use the useProject hook to manage project state\n const projectState = useProject({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad,\n });\n\n // Memoize the context value to prevent unnecessary re-renders\n const contextValue = useMemo<ProjectContextValue>(\n () => projectState,\n [\n projectState.projectId,\n projectState.projectLoading,\n projectState.axiosInstance,\n projectState.buildParams,\n projectState.getRequestHeaders,\n projectState.baseUrl,\n ]\n );\n\n return (\n <ProjectContext.Provider value={contextValue}>\n {children}\n </ProjectContext.Provider>\n );\n};\n\n/**\n * Hook to access the project context.\n * \n * Must be used within a ProjectProvider component.\n * \n * @throws {Error} If used outside of ProjectProvider\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * return (\n * <div>\n * {projectLoading ? 'Loading...' : `Project ID: ${projectId}`}\n * </div>\n * );\n * }\n * ```\n */\nexport const useProjectContext = (): ProjectContextValue => {\n const context = useContext(ProjectContext);\n \n if (context === undefined) {\n throw new Error('useProjectContext must be used within a ProjectProvider');\n }\n \n return context;\n};\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Agent,\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\nimport { useProjectContext } from '../ProjectProvider';\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 /** 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 // 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 * });\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, autoLoad = true } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n projectLoading,\n buildParams,\n getRequestHeaders,\n baseUrl,\n } = useProjectContext();\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\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n // Note: buildParams and getRequestHeaders are now provided by ProjectProvider\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 thread_id: currentThreadId,\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 processorRef.current?.handleError(error);\n },\n },\n abortControllerRef.current.signal\n );\n\n // If this was a new conversation, fetch the conversation info\n if (!currentThreadId || currentThreadId === '' && 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, 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 setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Clear stale conversation state when project changes (e.g., org switch).\n // This runs before the loading effect below (effects execute in declaration\n // order) and ensures we never show data from a previous project/org.\n useEffect(() => {\n setConversations([]);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n processorRef.current = null;\n }, [projectId]);\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 // 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","import axios from 'axios';\nimport {useCallback, useEffect, useMemo, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\nimport { useProjectContext } from '../ProjectProvider';\n\n/**\n * Options for the useAgent hook\n */\nexport interface UseAgentOptions {\n /** The name of the agent */\n name: string;\n}\n\n/**\n * Return type for the useAgent hook\n */\nexport interface UseAgentReturn {\n // Agent\n agent: Agent | null;\n /** Whether the agent is being loaded */\n agentLoading: boolean;\n}\n\nexport function useAgent(options: UseAgentOptions): UseAgentReturn {\n const { name } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n buildParams,\n } = useProjectContext();\n\n // Agents state\n const [agent, setAgent] = useState<Agent | null>(null);\n const [agentLoading, setAgentLoading] = useState(false);\n\n // ============================================\n // Agent Management\n // ============================================\n\n /**\n * Fetch the agent\n */\n const loadAgent = useCallback(async (): Promise<void> => {\n setAgentLoading(true);\n try {\n const response = await axiosInstance.get<{data: Agent}>('/agent-configs/by-name', {\n params: buildParams({ name }),\n });\n setAgent(response.data.data);\n } catch (error) {\n console.error('Failed to load agent:', error)\n throw error;\n } finally {\n setAgentLoading(false);\n }\n }, [axiosInstance, name]);\n\n // Fetch agent after project is fetched\n useEffect(() => {\n if (projectId) {\n loadAgent();\n }\n }, [projectId, loadAgent]);\n\n return { agent, agentLoading };\n}"],"names":["Role","MessageType","ContentType","ChunkType","useState","useRef","useEffect","useMemo","useCallback","createContext","_jsx","useContext"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -25,6 +25,7 @@ declare enum ContentType {
25
25
  InputText = "input_text",
26
26
  OutputText = "output_text",
27
27
  SummaryText = "summary_text",
28
+ ReasoningText = "reasoning_text",
28
29
  InputImage = "input_image"
29
30
  }
30
31
  declare enum ChunkType {
@@ -47,6 +48,8 @@ declare enum ChunkType {
47
48
  ChunkTypeReasoningSummaryPartDone = "response.reasoning_summary_part.done",
48
49
  ChunkTypeReasoningSummaryTextDelta = "response.reasoning_summary_text.delta",
49
50
  ChunkTypeReasoningSummaryTextDone = "response.reasoning_summary_text.done",
51
+ ChunkTypeReasoningTextDelta = "response.reasoning_text.delta",
52
+ ChunkTypeReasoningTextDone = "response.reasoning_text.done",
50
53
  ChunkTypeImageGenerationCallInProgress = "response.image_generation_call.in_progress",
51
54
  ChunkTypeImageGenerationCallGenerating = "response.image_generation_call.generating",
52
55
  ChunkTypeImageGenerationCallPartialImage = "response.image_generation_call.partial_image",
@@ -102,6 +105,7 @@ interface OutputMessage {
102
105
  type?: MessageType.Message;
103
106
  role?: Role;
104
107
  content?: OutputContentUnion[];
108
+ is_error?: boolean;
105
109
  }
106
110
  interface FunctionCallMessage {
107
111
  type: MessageType.FunctionCall;
@@ -141,7 +145,7 @@ interface ImageGenerationCallMessage {
141
145
  type EasyInputContentUnion = string | InputContentUnion;
142
146
  type InputContentUnion = InputTextContent | OutputTextContent | InputImageContent;
143
147
  type FunctionCallOutputContentUnion = string | InputContentUnion;
144
- type OutputContentUnion = OutputTextContent | FunctionCallMessage | SummaryTextContent;
148
+ type OutputContentUnion = OutputTextContent | FunctionCallMessage | SummaryTextContent | ReasoningTextContent;
145
149
  interface InputTextContent {
146
150
  type: ContentType.InputText;
147
151
  text: string;
@@ -154,6 +158,10 @@ interface SummaryTextContent {
154
158
  type: ContentType.SummaryText;
155
159
  text: string;
156
160
  }
161
+ interface ReasoningTextContent {
162
+ type: ContentType.ReasoningText;
163
+ text: string;
164
+ }
157
165
  interface InputImageContent {
158
166
  type: ContentType.InputImage;
159
167
  image_url: string;
@@ -550,12 +558,14 @@ declare class ChunkProcessor {
550
558
  private handleChunk;
551
559
  private handleOutputItemAdded;
552
560
  private handleContentPartAdded;
561
+ private handleReasoningTextDelta;
553
562
  private handleOutputTextDelta;
554
563
  private handleReasoningSummaryPartAdded;
555
564
  private handleReasoningSummaryTextDelta;
556
565
  private handleFunctionCallArgumentsDelta;
557
566
  private handleFunctionCallOutput;
558
567
  private handleImageGenerationCallPartialImage;
568
+ handleError(error: Error): void;
559
569
  }
560
570
 
561
571
  /**
package/dist/index.d.ts CHANGED
@@ -25,6 +25,7 @@ declare enum ContentType {
25
25
  InputText = "input_text",
26
26
  OutputText = "output_text",
27
27
  SummaryText = "summary_text",
28
+ ReasoningText = "reasoning_text",
28
29
  InputImage = "input_image"
29
30
  }
30
31
  declare enum ChunkType {
@@ -47,6 +48,8 @@ declare enum ChunkType {
47
48
  ChunkTypeReasoningSummaryPartDone = "response.reasoning_summary_part.done",
48
49
  ChunkTypeReasoningSummaryTextDelta = "response.reasoning_summary_text.delta",
49
50
  ChunkTypeReasoningSummaryTextDone = "response.reasoning_summary_text.done",
51
+ ChunkTypeReasoningTextDelta = "response.reasoning_text.delta",
52
+ ChunkTypeReasoningTextDone = "response.reasoning_text.done",
50
53
  ChunkTypeImageGenerationCallInProgress = "response.image_generation_call.in_progress",
51
54
  ChunkTypeImageGenerationCallGenerating = "response.image_generation_call.generating",
52
55
  ChunkTypeImageGenerationCallPartialImage = "response.image_generation_call.partial_image",
@@ -102,6 +105,7 @@ interface OutputMessage {
102
105
  type?: MessageType.Message;
103
106
  role?: Role;
104
107
  content?: OutputContentUnion[];
108
+ is_error?: boolean;
105
109
  }
106
110
  interface FunctionCallMessage {
107
111
  type: MessageType.FunctionCall;
@@ -141,7 +145,7 @@ interface ImageGenerationCallMessage {
141
145
  type EasyInputContentUnion = string | InputContentUnion;
142
146
  type InputContentUnion = InputTextContent | OutputTextContent | InputImageContent;
143
147
  type FunctionCallOutputContentUnion = string | InputContentUnion;
144
- type OutputContentUnion = OutputTextContent | FunctionCallMessage | SummaryTextContent;
148
+ type OutputContentUnion = OutputTextContent | FunctionCallMessage | SummaryTextContent | ReasoningTextContent;
145
149
  interface InputTextContent {
146
150
  type: ContentType.InputText;
147
151
  text: string;
@@ -154,6 +158,10 @@ interface SummaryTextContent {
154
158
  type: ContentType.SummaryText;
155
159
  text: string;
156
160
  }
161
+ interface ReasoningTextContent {
162
+ type: ContentType.ReasoningText;
163
+ text: string;
164
+ }
157
165
  interface InputImageContent {
158
166
  type: ContentType.InputImage;
159
167
  image_url: string;
@@ -550,12 +558,14 @@ declare class ChunkProcessor {
550
558
  private handleChunk;
551
559
  private handleOutputItemAdded;
552
560
  private handleContentPartAdded;
561
+ private handleReasoningTextDelta;
553
562
  private handleOutputTextDelta;
554
563
  private handleReasoningSummaryPartAdded;
555
564
  private handleReasoningSummaryTextDelta;
556
565
  private handleFunctionCallArgumentsDelta;
557
566
  private handleFunctionCallOutput;
558
567
  private handleImageGenerationCallPartialImage;
568
+ handleError(error: Error): void;
559
569
  }
560
570
 
561
571
  /**
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ var ContentType;
26
26
  ContentType["InputText"] = "input_text";
27
27
  ContentType["OutputText"] = "output_text";
28
28
  ContentType["SummaryText"] = "summary_text";
29
+ ContentType["ReasoningText"] = "reasoning_text";
29
30
  ContentType["InputImage"] = "input_image";
30
31
  })(ContentType || (ContentType = {}));
31
32
  // Chunk Types
@@ -50,6 +51,8 @@ var ChunkType;
50
51
  ChunkType["ChunkTypeReasoningSummaryPartDone"] = "response.reasoning_summary_part.done";
51
52
  ChunkType["ChunkTypeReasoningSummaryTextDelta"] = "response.reasoning_summary_text.delta";
52
53
  ChunkType["ChunkTypeReasoningSummaryTextDone"] = "response.reasoning_summary_text.done";
54
+ ChunkType["ChunkTypeReasoningTextDelta"] = "response.reasoning_text.delta";
55
+ ChunkType["ChunkTypeReasoningTextDone"] = "response.reasoning_text.done";
53
56
  // Image generation
54
57
  ChunkType["ChunkTypeImageGenerationCallInProgress"] = "response.image_generation_call.in_progress";
55
58
  ChunkType["ChunkTypeImageGenerationCallGenerating"] = "response.image_generation_call.generating";
@@ -108,7 +111,9 @@ class ChunkProcessor {
108
111
  thread_id: threadId,
109
112
  message_id: '',
110
113
  messages: [],
111
- meta: {},
114
+ meta: {
115
+ run_state: {},
116
+ },
112
117
  };
113
118
  this._onChange = onChange;
114
119
  }
@@ -192,6 +197,11 @@ class ChunkProcessor {
192
197
  break;
193
198
  case ChunkType.ChunkTypeReasoningSummaryTextDone:
194
199
  break;
200
+ case ChunkType.ChunkTypeReasoningTextDelta:
201
+ this.handleReasoningTextDelta(chunk);
202
+ break;
203
+ case ChunkType.ChunkTypeReasoningTextDone:
204
+ break;
195
205
  // Function calls
196
206
  case ChunkType.ChunkTypeFunctionCallArgumentsDelta:
197
207
  this.handleFunctionCallArgumentsDelta(chunk);
@@ -253,7 +263,7 @@ class ChunkProcessor {
253
263
  }
254
264
  }
255
265
  handleContentPartAdded(chunk) {
256
- if (!this.currentOutputItem || this.currentOutputItem.type !== "message")
266
+ if (!this.currentOutputItem || (this.currentOutputItem.type !== "message" && this.currentOutputItem.type !== "reasoning"))
257
267
  return;
258
268
  const message = this.currentOutputItem;
259
269
  if (chunk.part?.type === ContentType.OutputText) {
@@ -264,6 +274,34 @@ class ChunkProcessor {
264
274
  });
265
275
  this.emitChange();
266
276
  }
277
+ const reasoning = this.currentOutputItem;
278
+ if (chunk.part?.type === ContentType.ReasoningText) {
279
+ reasoning.summary = reasoning.summary || [];
280
+ reasoning.summary.push({
281
+ type: ContentType.SummaryText,
282
+ text: "",
283
+ });
284
+ }
285
+ }
286
+ handleReasoningTextDelta(chunk) {
287
+ if (!this.currentOutputItem || this.currentOutputItem.type !== "reasoning")
288
+ return;
289
+ const reasoning = this.currentOutputItem;
290
+ reasoning.summary = reasoning.summary || [];
291
+ const summaries = reasoning.summary;
292
+ if (summaries.length === 0) {
293
+ reasoning.summary.push({
294
+ type: ContentType.SummaryText,
295
+ text: "",
296
+ });
297
+ }
298
+ if (!chunk.delta)
299
+ return;
300
+ const lastSummary = summaries[summaries.length - 1];
301
+ if (lastSummary) {
302
+ lastSummary.text += chunk.delta;
303
+ this.emitChange();
304
+ }
267
305
  }
268
306
  handleOutputTextDelta(chunk) {
269
307
  if (!this.currentOutputItem || this.currentOutputItem.type !== "message")
@@ -334,6 +372,21 @@ class ChunkProcessor {
334
372
  image.background = chunk.background;
335
373
  this.emitChange();
336
374
  }
375
+ handleError(error) {
376
+ console.error('Error processing chunk:', error);
377
+ this.currentOutputItem = {
378
+ id: 'error',
379
+ type: "message",
380
+ role: "assistant",
381
+ content: [{
382
+ type: ContentType.OutputText,
383
+ text: error.message,
384
+ }],
385
+ is_error: true,
386
+ };
387
+ this.messages.push(this.currentOutputItem);
388
+ this.emitChange();
389
+ }
337
390
  }
338
391
 
339
392
  /**
@@ -365,7 +418,17 @@ async function streamSSE(url, requestOptions, callbacks, abortSignal) {
365
418
  signal: abortSignal,
366
419
  });
367
420
  if (!response.ok) {
368
- throw new Error(`HTTP error! status: ${response.status}`);
421
+ let errorMessage = `HTTP error! status: ${response.status}`;
422
+ try {
423
+ const errorBody = await response.json();
424
+ if (errorBody?.message) {
425
+ errorMessage = errorBody.message;
426
+ }
427
+ }
428
+ catch {
429
+ // Could not parse error body, use default message
430
+ }
431
+ throw new Error("Error: " + errorMessage);
369
432
  }
370
433
  if (!response.body) {
371
434
  throw new Error('Response body is null');
@@ -882,6 +945,7 @@ function useConversation(options) {
882
945
  onError: (error) => {
883
946
  console.error('Streaming error:', error);
884
947
  setStreamingMessage(null);
948
+ processorRef.current?.handleError(error);
885
949
  },
886
950
  }, abortControllerRef.current.signal);
887
951
  // If this was a new conversation, fetch the conversation info
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/useProject.tsx","../src/ProjectProvider/index.tsx","../src/hooks/useConversation.ts","../src/hooks/useAgent.ts"],"sourcesContent":["export interface Agent {\n id: string;\n agent_id: string;\n name: string;\n version: number;\n}\n\n// 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","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 reasoning.summary = reasoning.summary || [];\n\n const summaries = reasoning.summary;\n if (summaries.length === 0) {\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n\n if (!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, { AxiosInstance } from 'axios';\nimport {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\n\n/**\n * Options for the useProject hook\n */\nexport interface UseProjectOptions {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: 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 useProject hook\n */\nexport interface UseProjectReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n /** Axios instance configured with baseUrl and custom headers */\n axiosInstance: AxiosInstance;\n /** Function to build query params with project_id automatically added */\n buildParams: (params?: Record<string, string>) => Record<string, string>;\n /** Function to get request headers (combines default + custom headers) */\n getRequestHeaders: () => Promise<Record<string, string>>;\n /** Base URL used for the axios instance */\n baseUrl: string;\n}\n\nexport function useProject(options: UseProjectOptions): UseProjectReturn {\n const { projectName, baseUrl, orgId, getHeaders, autoLoad = true } = options;\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Use ref to store current projectId for interceptor access\n const projectIdRef = useRef<string>('');\n\n // Update ref whenever projectId changes\n useEffect(() => {\n projectIdRef.current = projectId;\n }, [projectId]);\n\n // ── Clear stale projectId synchronously during render when projectName changes ──\n // When the org switches, ProjectContext clears selectedProject (during render),\n // causing projectName to become ''. Without this guard, downstream consumers\n // (useConversation, ChatPage, etc.) would still see the OLD projectId in their\n // effects, firing API calls with a stale project_id or without one entirely.\n const prevProjectNameRef = useRef<string | undefined>(undefined);\n if (prevProjectNameRef.current !== undefined && projectName !== prevProjectNameRef.current) {\n setProjectId('');\n projectIdRef.current = '';\n }\n prevProjectNameRef.current = projectName;\n\n // Create axios instance with request interceptor for custom headers and project_id\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, org_id, and project_id\n instance.interceptors.request.use(async (config) => {\n // Add org ID header if provided\n if (orgId) {\n config.headers.set('X-Org-ID', orgId);\n }\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n }\n\n // Automatically add project_id to query params if available\n const currentProjectId = projectIdRef.current;\n if (currentProjectId) {\n if (config.params) {\n config.params = {\n ...config.params,\n project_id: currentProjectId,\n };\n } else {\n config.params = { project_id: currentProjectId };\n }\n }\n \n return config;\n });\n\n return instance;\n }, [baseUrl, orgId, getHeaders]);\n\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params (project_id is automatically added by axios interceptor)\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n return params || {};\n }, []);\n\n /**\n * Get headers for streaming requests (combines default + custom + org 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 org ID header if provided\n if (orgId) {\n headers['X-Org-ID'] = orgId;\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 }, [orgId, 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 // Effects for auto-loading\n // ============================================\n\n // Fetch project ID when projectName changes (or on mount)\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n return {\n // Project state\n projectId,\n projectLoading,\n // API client\n axiosInstance,\n buildParams,\n getRequestHeaders,\n baseUrl,\n }\n}","import React, {createContext, useContext, useMemo} from 'react';\nimport type { ReactNode, ReactElement } from \"react\";\nimport { useProject, UseProjectOptions, UseProjectReturn } from '../hooks/useProject';\n\n/**\n * Context value for ProjectProvider\n */\nexport interface ProjectContextValue extends UseProjectReturn {}\n\n/**\n * Props for ProjectProvider component\n */\nexport interface ProjectProviderProps {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: UseProjectOptions['getHeaders'];\n /** Auto-load project on mount (default: true) */\n autoLoad?: boolean;\n /** Child components */\n children: ReactNode;\n}\n\n// Create the context with undefined as default to ensure it's used within provider\nconst ProjectContext = createContext<ProjectContextValue | undefined>(undefined);\n\n/**\n * ProjectProvider component that manages project state using React Context.\n * \n * This provider wraps the useProject hook and makes the project state available\n * to all child components through context.\n * \n * @example\n * ```tsx\n * import { ProjectProvider, useProjectContext } from '@praveen001/uno-converse';\n * \n * function App() {\n * return (\n * <ProjectProvider\n * baseUrl=\"https://api.example.com/api/agent-server\"\n * projectName=\"my-project\"\n * getHeaders={() => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * })}\n * >\n * <YourApp />\n * </ProjectProvider>\n * );\n * }\n * \n * function YourApp() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * if (projectLoading) {\n * return <div>Loading project...</div>;\n * }\n * \n * return <div>Project ID: {projectId}</div>;\n * }\n * ```\n */\nexport const ProjectProvider = ({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad = true,\n children,\n}: ProjectProviderProps): ReactElement => {\n // Use the useProject hook to manage project state\n const projectState = useProject({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad,\n });\n\n // Memoize the context value to prevent unnecessary re-renders\n const contextValue = useMemo<ProjectContextValue>(\n () => projectState,\n [\n projectState.projectId,\n projectState.projectLoading,\n projectState.axiosInstance,\n projectState.buildParams,\n projectState.getRequestHeaders,\n projectState.baseUrl,\n ]\n );\n\n return (\n <ProjectContext.Provider value={contextValue}>\n {children}\n </ProjectContext.Provider>\n );\n};\n\n/**\n * Hook to access the project context.\n * \n * Must be used within a ProjectProvider component.\n * \n * @throws {Error} If used outside of ProjectProvider\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * return (\n * <div>\n * {projectLoading ? 'Loading...' : `Project ID: ${projectId}`}\n * </div>\n * );\n * }\n * ```\n */\nexport const useProjectContext = (): ProjectContextValue => {\n const context = useContext(ProjectContext);\n \n if (context === undefined) {\n throw new Error('useProjectContext must be used within a ProjectProvider');\n }\n \n return context;\n};\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Agent,\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\nimport { useProjectContext } from '../ProjectProvider';\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 /** 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 // 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 * });\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, autoLoad = true } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n projectLoading,\n buildParams,\n getRequestHeaders,\n baseUrl,\n } = useProjectContext();\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\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n // Note: buildParams and getRequestHeaders are now provided by ProjectProvider\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 thread_id: currentThreadId,\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 (!currentThreadId || currentThreadId === '' && 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, 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 setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Clear stale conversation state when project changes (e.g., org switch).\n // This runs before the loading effect below (effects execute in declaration\n // order) and ensures we never show data from a previous project/org.\n useEffect(() => {\n setConversations([]);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n processorRef.current = null;\n }, [projectId]);\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 // 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","import axios from 'axios';\nimport {useCallback, useEffect, useMemo, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\nimport { useProjectContext } from '../ProjectProvider';\n\n/**\n * Options for the useAgent hook\n */\nexport interface UseAgentOptions {\n /** The name of the agent */\n name: string;\n}\n\n/**\n * Return type for the useAgent hook\n */\nexport interface UseAgentReturn {\n // Agent\n agent: Agent | null;\n /** Whether the agent is being loaded */\n agentLoading: boolean;\n}\n\nexport function useAgent(options: UseAgentOptions): UseAgentReturn {\n const { name } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n buildParams,\n } = useProjectContext();\n\n // Agents state\n const [agent, setAgent] = useState<Agent | null>(null);\n const [agentLoading, setAgentLoading] = useState(false);\n\n // ============================================\n // Agent Management\n // ============================================\n\n /**\n * Fetch the agent\n */\n const loadAgent = useCallback(async (): Promise<void> => {\n setAgentLoading(true);\n try {\n const response = await axiosInstance.get<{data: Agent}>('/agent-configs/by-name', {\n params: buildParams({ name }),\n });\n setAgent(response.data.data);\n } catch (error) {\n console.error('Failed to load agent:', error)\n throw error;\n } finally {\n setAgentLoading(false);\n }\n }, [axiosInstance, name]);\n\n // Fetch agent after project is fetched\n useEffect(() => {\n if (projectId) {\n loadAgent();\n }\n }, [projectId, loadAgent]);\n\n return { agent, agentLoading };\n}"],"names":["_jsx"],"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/useProject.tsx","../src/ProjectProvider/index.tsx","../src/hooks/useConversation.ts","../src/hooks/useAgent.ts"],"sourcesContent":["export interface Agent {\n id: string;\n agent_id: string;\n name: string;\n version: number;\n}\n\n// 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 ReasoningText = \"reasoning_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 ChunkTypeReasoningTextDelta = \"response.reasoning_text.delta\",\n ChunkTypeReasoningTextDone = \"response.reasoning_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 is_error?: boolean;\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 | ReasoningTextContent;\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 ReasoningTextContent {\n type: ContentType.ReasoningText;\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","import {\n ChunkType,\n ContentType,\n ConversationMessage,\n FunctionCallMessage,\n FunctionCallOutputMessage,\n ImageGenerationCallMessage,\n InputMessage,\n MessageUnion, OutputMessage,\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 run_state: {},\n },\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 case ChunkType.ChunkTypeReasoningTextDelta:\n this.handleReasoningTextDelta(chunk);\n break;\n\n case ChunkType.ChunkTypeReasoningTextDone:\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\" && this.currentOutputItem.type !== \"reasoning\")) 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 const reasoning = this.currentOutputItem as ReasoningMessage;\n if (chunk.part?.type === ContentType.ReasoningText) {\n reasoning.summary = reasoning.summary || [];\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n }\n\n private handleReasoningTextDelta(chunk: ResponseChunk): void {\n if (!this.currentOutputItem || this.currentOutputItem.type !== \"reasoning\") return;\n\n const reasoning = this.currentOutputItem as ReasoningMessage;\n reasoning.summary = reasoning.summary || [];\n\n const summaries = reasoning.summary;\n if (summaries.length === 0) {\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n\n if (!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 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 reasoning.summary = reasoning.summary || [];\n\n const summaries = reasoning.summary;\n if (summaries.length === 0) {\n reasoning.summary.push({\n type: ContentType.SummaryText,\n text: \"\",\n });\n }\n\n if (!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 public handleError(error: Error): void {\n console.error('Error processing chunk:', error);\n this.currentOutputItem = {\n id: 'error',\n type: \"message\",\n role: \"assistant\",\n content: [{\n type: ContentType.OutputText,\n text: error.message,\n }],\n is_error: true,\n } as OutputMessage;\n this.messages.push(this.currentOutputItem);\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 let errorMessage = `HTTP error! status: ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n // Could not parse error body, use default message\n }\n throw new Error(\"Error: \" + errorMessage);\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, { AxiosInstance } from 'axios';\nimport {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\n\n/**\n * Options for the useProject hook\n */\nexport interface UseProjectOptions {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: 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 useProject hook\n */\nexport interface UseProjectReturn {\n // Project state\n /** The fetched project ID */\n projectId: string;\n /** Whether the project ID is being fetched */\n projectLoading: boolean;\n /** Axios instance configured with baseUrl and custom headers */\n axiosInstance: AxiosInstance;\n /** Function to build query params with project_id automatically added */\n buildParams: (params?: Record<string, string>) => Record<string, string>;\n /** Function to get request headers (combines default + custom headers) */\n getRequestHeaders: () => Promise<Record<string, string>>;\n /** Base URL used for the axios instance */\n baseUrl: string;\n}\n\nexport function useProject(options: UseProjectOptions): UseProjectReturn {\n const { projectName, baseUrl, orgId, getHeaders, autoLoad = true } = options;\n\n // Project state\n const [projectId, setProjectId] = useState<string>('');\n const [projectLoading, setProjectLoading] = useState(false);\n\n // Use ref to store current projectId for interceptor access\n const projectIdRef = useRef<string>('');\n\n // Update ref whenever projectId changes\n useEffect(() => {\n projectIdRef.current = projectId;\n }, [projectId]);\n\n // ── Clear stale projectId synchronously during render when projectName changes ──\n // When the org switches, ProjectContext clears selectedProject (during render),\n // causing projectName to become ''. Without this guard, downstream consumers\n // (useConversation, ChatPage, etc.) would still see the OLD projectId in their\n // effects, firing API calls with a stale project_id or without one entirely.\n const prevProjectNameRef = useRef<string | undefined>(undefined);\n if (prevProjectNameRef.current !== undefined && projectName !== prevProjectNameRef.current) {\n setProjectId('');\n projectIdRef.current = '';\n }\n prevProjectNameRef.current = projectName;\n\n // Create axios instance with request interceptor for custom headers and project_id\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, org_id, and project_id\n instance.interceptors.request.use(async (config) => {\n // Add org ID header if provided\n if (orgId) {\n config.headers.set('X-Org-ID', orgId);\n }\n\n // Add custom headers if getHeaders function is provided\n if (getHeaders) {\n const customHeaders = await getHeaders();\n Object.assign(config.headers, customHeaders);\n }\n\n // Automatically add project_id to query params if available\n const currentProjectId = projectIdRef.current;\n if (currentProjectId) {\n if (config.params) {\n config.params = {\n ...config.params,\n project_id: currentProjectId,\n };\n } else {\n config.params = { project_id: currentProjectId };\n }\n }\n \n return config;\n });\n\n return instance;\n }, [baseUrl, orgId, getHeaders]);\n\n\n // ============================================\n // API Helper Functions\n // ============================================\n\n /**\n * Build query params (project_id is automatically added by axios interceptor)\n */\n const buildParams = useCallback((params?: Record<string, string>) => {\n return params || {};\n }, []);\n\n /**\n * Get headers for streaming requests (combines default + custom + org 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 org ID header if provided\n if (orgId) {\n headers['X-Org-ID'] = orgId;\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 }, [orgId, 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 // Effects for auto-loading\n // ============================================\n\n // Fetch project ID when projectName changes (or on mount)\n useEffect(() => {\n if (autoLoad && projectName) {\n fetchProjectId();\n }\n }, [autoLoad, projectName, fetchProjectId]);\n\n return {\n // Project state\n projectId,\n projectLoading,\n // API client\n axiosInstance,\n buildParams,\n getRequestHeaders,\n baseUrl,\n }\n}","import React, {createContext, useContext, useMemo} from 'react';\nimport type { ReactNode, ReactElement } from \"react\";\nimport { useProject, UseProjectOptions, UseProjectReturn } from '../hooks/useProject';\n\n/**\n * Context value for ProjectProvider\n */\nexport interface ProjectContextValue extends UseProjectReturn {}\n\n/**\n * Props for ProjectProvider component\n */\nexport interface ProjectProviderProps {\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 organisation ID to scope all requests (sent as X-Org-ID header) */\n orgId?: string;\n /** Optional function to get custom headers for requests (e.g., for authentication) */\n getHeaders?: UseProjectOptions['getHeaders'];\n /** Auto-load project on mount (default: true) */\n autoLoad?: boolean;\n /** Child components */\n children: ReactNode;\n}\n\n// Create the context with undefined as default to ensure it's used within provider\nconst ProjectContext = createContext<ProjectContextValue | undefined>(undefined);\n\n/**\n * ProjectProvider component that manages project state using React Context.\n * \n * This provider wraps the useProject hook and makes the project state available\n * to all child components through context.\n * \n * @example\n * ```tsx\n * import { ProjectProvider, useProjectContext } from '@praveen001/uno-converse';\n * \n * function App() {\n * return (\n * <ProjectProvider\n * baseUrl=\"https://api.example.com/api/agent-server\"\n * projectName=\"my-project\"\n * getHeaders={() => ({\n * 'Authorization': `Bearer ${getToken()}`,\n * })}\n * >\n * <YourApp />\n * </ProjectProvider>\n * );\n * }\n * \n * function YourApp() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * if (projectLoading) {\n * return <div>Loading project...</div>;\n * }\n * \n * return <div>Project ID: {projectId}</div>;\n * }\n * ```\n */\nexport const ProjectProvider = ({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad = true,\n children,\n}: ProjectProviderProps): ReactElement => {\n // Use the useProject hook to manage project state\n const projectState = useProject({\n baseUrl,\n projectName,\n orgId,\n getHeaders,\n autoLoad,\n });\n\n // Memoize the context value to prevent unnecessary re-renders\n const contextValue = useMemo<ProjectContextValue>(\n () => projectState,\n [\n projectState.projectId,\n projectState.projectLoading,\n projectState.axiosInstance,\n projectState.buildParams,\n projectState.getRequestHeaders,\n projectState.baseUrl,\n ]\n );\n\n return (\n <ProjectContext.Provider value={contextValue}>\n {children}\n </ProjectContext.Provider>\n );\n};\n\n/**\n * Hook to access the project context.\n * \n * Must be used within a ProjectProvider component.\n * \n * @throws {Error} If used outside of ProjectProvider\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const { projectId, projectLoading } = useProjectContext();\n * \n * return (\n * <div>\n * {projectLoading ? 'Loading...' : `Project ID: ${projectId}`}\n * </div>\n * );\n * }\n * ```\n */\nexport const useProjectContext = (): ProjectContextValue => {\n const context = useContext(ProjectContext);\n \n if (context === undefined) {\n throw new Error('useProjectContext must be used within a ProjectProvider');\n }\n \n return context;\n};\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ChunkProcessor } from '../streaming/ChunkProcessor';\nimport { streamSSE } from '../streaming/streamSSE';\nimport {\n Agent,\n Conversation,\n ConversationMessage,\n ConverseConfig,\n MessageType,\n MessageUnion,\n Thread,\n} from '../types';\nimport { useProjectContext } from '../ProjectProvider';\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 /** 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 // 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 * });\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, autoLoad = true } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n projectLoading,\n buildParams,\n getRequestHeaders,\n baseUrl,\n } = useProjectContext();\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\n // Refs\n const processorRef = useRef<ChunkProcessor | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ============================================\n // API Helper Functions\n // ============================================\n // Note: buildParams and getRequestHeaders are now provided by ProjectProvider\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 thread_id: currentThreadId,\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 processorRef.current?.handleError(error);\n },\n },\n abortControllerRef.current.signal\n );\n\n // If this was a new conversation, fetch the conversation info\n if (!currentThreadId || currentThreadId === '' && 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, 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 setIsStreaming(false);\n setIsThinking(false);\n processorRef.current = null;\n }, []);\n\n // ============================================\n // Effects for auto-loading\n // ============================================\n\n // Clear stale conversation state when project changes (e.g., org switch).\n // This runs before the loading effect below (effects execute in declaration\n // order) and ensures we never show data from a previous project/org.\n useEffect(() => {\n setConversations([]);\n setThreads([]);\n setMessages([]);\n setStreamingMessage(null);\n setCurrentConversationId(null);\n setCurrentThreadId(null);\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n processorRef.current = null;\n }, [projectId]);\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 // 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","import axios from 'axios';\nimport {useCallback, useEffect, useMemo, useState} from \"react\";\nimport {Agent} from \"../types\";\nimport {GetHeadersFn} from \"./useConversation\";\nimport { useProjectContext } from '../ProjectProvider';\n\n/**\n * Options for the useAgent hook\n */\nexport interface UseAgentOptions {\n /** The name of the agent */\n name: string;\n}\n\n/**\n * Return type for the useAgent hook\n */\nexport interface UseAgentReturn {\n // Agent\n agent: Agent | null;\n /** Whether the agent is being loaded */\n agentLoading: boolean;\n}\n\nexport function useAgent(options: UseAgentOptions): UseAgentReturn {\n const { name } = options;\n\n // Get project context (axios instance, projectId, etc.)\n const {\n axiosInstance,\n projectId,\n buildParams,\n } = useProjectContext();\n\n // Agents state\n const [agent, setAgent] = useState<Agent | null>(null);\n const [agentLoading, setAgentLoading] = useState(false);\n\n // ============================================\n // Agent Management\n // ============================================\n\n /**\n * Fetch the agent\n */\n const loadAgent = useCallback(async (): Promise<void> => {\n setAgentLoading(true);\n try {\n const response = await axiosInstance.get<{data: Agent}>('/agent-configs/by-name', {\n params: buildParams({ name }),\n });\n setAgent(response.data.data);\n } catch (error) {\n console.error('Failed to load agent:', error)\n throw error;\n } finally {\n setAgentLoading(false);\n }\n }, [axiosInstance, name]);\n\n // Fetch agent after project is fetched\n useEffect(() => {\n if (projectId) {\n loadAgent();\n }\n }, [projectId, loadAgent]);\n\n return { agent, agentLoading };\n}"],"names":["_jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hastekit/hastekit-converse",
3
- "version": "0.0.20",
3
+ "version": "0.0.22",
4
4
  "type": "module",
5
5
  "description": "React hooks and utilities for building conversation UIs with HasteKit AI Gateway",
6
6
  "keywords": [