@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 +67 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +67 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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
|
-
|
|
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":";;;;AAOA;IACY;AAAZ,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EALW,IAAI,KAAJ,IAAI,GAAA,EAAA,CAAA,CAAA;AAOhB;IACY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,WAAA,CAAA,oBAAA,CAAA,GAAA,sBAA2C;AAC3C,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,qBAAA,CAAA,GAAA,uBAA6C;AAC7C,IAAA,WAAA,CAAA,8BAAA,CAAA,GAAA,iCAAgE;AAClE,CAAC,EAPW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AASvB;IACY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC5B,CAAC,EALW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAOvB;IACY;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,aAAmC;AACnC,IAAA,SAAA,CAAA,wBAAA,CAAA,GAAA,iBAA0C;AAC1C,IAAA,SAAA,CAAA,oBAAA,CAAA,GAAA,YAAiC;AACjC,IAAA,SAAA,CAAA,uBAAA,CAAA,GAAA,eAAuC;AACvC,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,kBAA6C;AAC7C,IAAA,SAAA,CAAA,6BAAA,CAAA,GAAA,sBAAoD;AACpD,IAAA,SAAA,CAAA,4BAAA,CAAA,GAAA,oBAAiD;AACjD,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,4BAAuD;AACvD,IAAA,SAAA,CAAA,yBAAA,CAAA,GAAA,2BAAqD;AACrD,IAAA,SAAA,CAAA,2BAAA,CAAA,GAAA,6BAAyD;AACzD,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,4BAAuD;AACvD,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,4BAAuD;AACvD,IAAA,SAAA,CAAA,yBAAA,CAAA,GAAA,2BAAqD;AACrD,IAAA,SAAA,CAAA,qCAAA,CAAA,GAAA,wCAA8E;AAC9E,IAAA,SAAA,CAAA,oCAAA,CAAA,GAAA,uCAA4E;AAC5E,IAAA,SAAA,CAAA,oCAAA,CAAA,GAAA,uCAA4E;AAC5E,IAAA,SAAA,CAAA,mCAAA,CAAA,GAAA,sCAA0E;AAC1E,IAAA,SAAA,CAAA,oCAAA,CAAA,GAAA,uCAA4E;AAC5E,IAAA,SAAA,CAAA,mCAAA,CAAA,GAAA,sCAA0E;;AAG1E,IAAA,SAAA,CAAA,wCAAA,CAAA,GAAA,4CAAqF;AACrF,IAAA,SAAA,CAAA,wCAAA,CAAA,GAAA,2CAAoF;AACpF,IAAA,SAAA,CAAA,0CAAA,CAAA,GAAA,8CAAyF;;AAGzF,IAAA,SAAA,CAAA,6BAAA,CAAA,GAAA,sBAAoD;AACtD,CAAC,EA5BW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAiTrB;AACM,SAAU,aAAa,CAAC,GAAiB,EAAA;AAC7C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,IAAI,SAAS,IAAI,GAAG,KAAK,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChI;AAEM,SAAU,cAAc,CAAC,GAAiB,EAAA;IAC9C,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,IAAI,SAAS,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3F;AAEM,SAAU,qBAAqB,CAAC,GAAiB,EAAA;AACrD,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,YAAY;AAC9C;AAEM,SAAU,2BAA2B,CAAC,GAAiB,EAAA;AAC3D,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,kBAAkB;AACpD;AAEM,SAAU,kBAAkB,CAAC,GAAiB,EAAA;AAClD,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS;AAC3C;AAEM,SAAU,4BAA4B,CAAC,GAAiB,EAAA;AAC5D,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,mBAAmB;AACrD;;ACxVA;;;;;;;;;;;;;;;;;;;;;AAqBG;MACU,cAAc,CAAA;AAMzB,IAAA,WAAA,CACE,cAAsB,EACtB,QAAgB,EAChB,QAA0B,EAAA;QARpB,IAAA,CAAA,QAAQ,GAAmB,EAAE;QAC7B,IAAA,CAAA,iBAAiB,GAAwB,IAAI;QASnD,IAAI,CAAC,YAAY,GAAG;AAClB,YAAA,eAAe,EAAE,cAAc;AAC/B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,IAAI,EAAE,EAAE;SACT;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;IAC3B;AAEA;;AAEG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA;;AAEG;IACH,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAC1C;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI;YACF,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACzB;QAAE,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,EAAE,IAAI,CAAC;QAClD;IACF;AAEQ,IAAA,WAAW,CAAC,KAAoB,EAAA;AACtC,QAAA,QAAQ,KAAK,CAAC,IAAI;;YAEhB,KAAK,SAAS,CAAC,mBAAmB;YAClC,KAAK,SAAS,CAAC,sBAAsB;YACrC,KAAK,SAAS,CAAC,qBAAqB;YACpC,KAAK,SAAS,CAAC,kBAAkB;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;gBAClD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,SAAU,CAAC,EAAE;AAClD,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,sBAAsB,EAAE;oBACnG,IAAI,CAAC,UAAU,EAAE;gBACnB;gBACA;;YAGF,KAAK,SAAS,CAAC,wBAAwB;YACvC,KAAK,SAAS,CAAC,2BAA2B;gBACxC;YAEF,KAAK,SAAS,CAAC,0BAA0B;AACvC,gBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE;AACzB,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;oBACnD,IAAI,CAAC,UAAU,EAAE;gBACnB;gBACA;;YAGF,KAAK,SAAS,CAAC,wBAAwB;AACrC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBACjC;YAEF,KAAK,SAAS,CAAC,uBAAuB;gBACpC;;YAGF,KAAK,SAAS,CAAC,yBAAyB;AACtC,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBAClC;YAEF,KAAK,SAAS,CAAC,wBAAwB;gBACrC;;YAGF,KAAK,SAAS,CAAC,wBAAwB;AACrC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBACjC;YAEF,KAAK,SAAS,CAAC,uBAAuB;gBACpC;;YAGF,KAAK,SAAS,CAAC,kCAAkC;AAC/C,gBAAA,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC;gBAC3C;YAEF,KAAK,SAAS,CAAC,iCAAiC;gBAC9C;YAEF,KAAK,SAAS,CAAC,kCAAkC;AAC/C,gBAAA,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC;gBAC3C;YAEF,KAAK,SAAS,CAAC,iCAAiC;gBAC9C;;YAGF,KAAK,SAAS,CAAC,mCAAmC;AAChD,gBAAA,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC;gBAC5C;YAEF,KAAK,SAAS,CAAC,kCAAkC;gBAC/C;YAEF,KAAK,SAAS,CAAC,2BAA2B;AACxC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;gBACpC;;YAGF,KAAK,SAAS,CAAC,sCAAsC;gBACnD;YAEF,KAAK,SAAS,CAAC,sCAAsC;gBACnD;YAEF,KAAK,SAAS,CAAC,wCAAwC;AACrD,gBAAA,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC;gBACjD;;IAEN;AAEQ,IAAA,qBAAqB,CAAC,KAAoB,EAAA;QAChD,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE;AAEjB,QAAA,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI;AACrB,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,iBAAiB,GAAG;AACvB,oBAAA,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW;AACpC,oBAAA,OAAO,EAAE,EAAE;iBACI;gBACjB;AAEF,YAAA,KAAK,eAAe;gBAClB,IAAI,CAAC,iBAAiB,GAAG;AACvB,oBAAA,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,oBAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;AACjC,oBAAA,SAAS,EAAE,EAAE;iBACS;gBACxB;AAEF,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,iBAAiB,GAAG;AACvB,oBAAA,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,OAAO,EAAE,EAAE;iBACQ;gBACrB;AAEF,YAAA,KAAK,uBAAuB;gBAC1B,IAAI,CAAC,iBAAiB,GAAG;AACvB,oBAAA,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;iBACI;gBAC/B;;AAGJ,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC1C,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEQ,IAAA,sBAAsB,CAAC,KAAoB,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,SAAS;YAAE;AAE1E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiC;QACtD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC,UAAU,EAAE;YAC/C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;AACvC,YAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,WAAW,CAAC,UAAU;AAC5B,gBAAA,IAAI,EAAE,EAAE;AACT,aAAA,CAAC;YACF,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEQ,IAAA,qBAAqB,CAAC,KAAoB,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,SAAS;YAAE;AAE1E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiC;AACtD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO;QAChC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE;QAEvC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,EAAE;AACxC,YAAA,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;YAC/B,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEQ,IAAA,+BAA+B,CAAC,KAAoB,EAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,WAAW;YAAE;AAE5E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAqC;QAC5D,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC,WAAW,EAAE;YAChD,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE;AAC3C,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,WAAW,CAAC,WAAW;AAC7B,gBAAA,IAAI,EAAE,EAAE;AACT,aAAA,CAAC;YACF,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEQ,IAAA,+BAA+B,CAAC,KAAoB,EAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,WAAW;YAAE;AAE5E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAqC;QAC5D,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE;AAE3C,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO;AACnC,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,WAAW,CAAC,WAAW;AAC7B,gBAAA,IAAI,EAAE,EAAE;AACT,aAAA,CAAC;QACJ;QAEA,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE;QAElB,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;YAC/B,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEQ,IAAA,gCAAgC,CAAC,KAAoB,EAAA;QAC3D,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,eAAe;YAAE;AAEhF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAwC;QAClE,YAAY,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,wBAAwB,CAAC,KAAoB,EAAA;AACnD,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAA6C;QACtE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,qCAAqC,CAAC,KAAoB,EAAA;QAChE,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,uBAAuB;YAAE;AAExF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAA+C;AAClE,QAAA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAkB;AACvC,QAAA,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAQ;AAC9B,QAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAK;AACxB,QAAA,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAc;AAC1C,QAAA,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAW;QAEpC,IAAI,CAAC,UAAU,EAAE;IACnB;AACD;;ACnTD;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,eAAe,SAAS,CAC7B,GAAW,EACX,cAA2B,EAC3B,SAA2B,EAC3B,WAAyB,EAAA;AAEzB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,YAAA,GAAG,cAAc;AACjB,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;QAC3D;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;QAC1C;QAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;QACjC,IAAI,MAAM,GAAG,EAAE;QAEf,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;AAEV,YAAA,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;AAGjD,YAAA,IAAI,GAAG;AACP,YAAA,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;gBAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAClC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;;gBAG9B,MAAM,IAAI,GAAG;qBACV,KAAK,CAAC,IAAI;qBACV,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACvC,qBAAA,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;qBAChC,IAAI,CAAC,IAAI,CAAC;gBAEb,IAAI,IAAI,EAAE;AACR,oBAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBACzB;YACF;QACF;;QAGA,OAAO,CAAC,MAAM,EAAE;AAChB,QAAA,SAAS,CAAC,UAAU,IAAI;IAC1B;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;YAC1C;QACF;AACA,QAAA,SAAS,CAAC,OAAO,GAAG,KAAc,CAAC;IACrC;AACF;;ACpDM,SAAU,UAAU,CAAC,OAA0B,EAAA;AACnD,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO;;IAG5E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAG3D,IAAA,MAAM,YAAY,GAAG,MAAM,CAAS,EAAE,CAAC;;IAGvC,SAAS,CAAC,MAAK;AACb,QAAA,YAAY,CAAC,OAAO,GAAG,SAAS;AAClC,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;;;;;;AAOf,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAqB,SAAS,CAAC;AAChE,IAAA,IAAI,kBAAkB,CAAC,OAAO,KAAK,SAAS,IAAI,WAAW,KAAK,kBAAkB,CAAC,OAAO,EAAE;QAC1F,YAAY,CAAC,EAAE,CAAC;AAChB,QAAA,YAAY,CAAC,OAAO,GAAG,EAAE;IAC3B;AACA,IAAA,kBAAkB,CAAC,OAAO,GAAG,WAAW;;AAGxC,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;AACnC,aAAA;AACF,SAAA,CAAC;;QAGF,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,KAAI;;YAEjD,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;YACvC;;YAGA,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,aAAa,GAAG,MAAM,UAAU,EAAE;gBACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;YAC9C;;AAGA,YAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO;YAC7C,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,MAAM,CAAC,MAAM,GAAG;wBACd,GAAG,MAAM,CAAC,MAAM;AAChB,wBAAA,UAAU,EAAE,gBAAgB;qBAC7B;gBACH;qBAAO;oBACL,MAAM,CAAC,MAAM,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE;gBAClD;YACF;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACjB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;;;;AAOhC;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAA+B,KAAI;QAClE,OAAO,MAAM,IAAI,EAAE;IACrB,CAAC,EAAE,EAAE,CAAC;AAEN;;AAEG;AACH,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,YAA4C;AAChF,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,cAAc,EAAE,kBAAkB;SACnC;;QAGD,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK;QAC7B;;QAGA,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,aAAa,GAAG,MAAM,UAAU,EAAE;AACxC,YAAA,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;QACvC;AAEA,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;;;;AAMvB;;AAEG;AACH,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,YAAW;QAC5C,IAAI,CAAC,WAAW,EAAE;YAChB;QACF;QAEA,iBAAiB,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAA4B,aAAa,EAAE;AACjF,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC9B,aAAA,CAAC;YACF,MAAM,EAAE,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;AACjF,YAAA,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;QACxB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,YAAA,MAAM,KAAK;QACb;gBAAU;YACR,iBAAiB,CAAC,KAAK,CAAC;QAC1B;AACF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;;;;;IAOhC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,QAAQ,IAAI,WAAW,EAAE;AAC3B,YAAA,cAAc,EAAE;QAClB;IACF,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAE3C,OAAO;;QAEL,SAAS;QACT,cAAc;;QAEd,aAAa;QACb,WAAW;QACX,iBAAiB;QACjB,OAAO;KACR;AACH;;ACnKA;AACA,MAAM,cAAc,GAAG,aAAa,CAAkC,SAAS,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCG;MACU,eAAe,GAAG,CAAC,EAC9B,OAAO,EACP,WAAW,EACX,KAAK,EACL,UAAU,EACV,QAAQ,GAAG,IAAI,EACf,QAAQ,GACa,KAAkB;;IAEvC,MAAM,YAAY,GAAG,UAAU,CAAC;QAC9B,OAAO;QACP,WAAW;QACX,KAAK;QACL,UAAU;QACV,QAAQ;AACT,KAAA,CAAC;;IAGF,MAAM,YAAY,GAAG,OAAO,CAC1B,MAAM,YAAY,EAClB;AACE,QAAA,YAAY,CAAC,SAAS;AACtB,QAAA,YAAY,CAAC,cAAc;AAC3B,QAAA,YAAY,CAAC,aAAa;AAC1B,QAAA,YAAY,CAAC,WAAW;AACxB,QAAA,YAAY,CAAC,iBAAiB;AAC9B,QAAA,YAAY,CAAC,OAAO;AACrB,KAAA,CACF;AAED,IAAA,QACEA,GAAA,CAAC,cAAc,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,YAAY,EAAA,QAAA,EACzC,QAAQ,EAAA,CACe;AAE9B;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACI,MAAM,iBAAiB,GAAG,MAA0B;AACzD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC;AAE1C,IAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;IAC5E;AAEA,IAAA,OAAO,OAAO;AAChB;;ACpHA;;AAEG;AACH,SAAS,UAAU,GAAA;IACjB,OAAO,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAE;AACvE;AAuFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;AACG,SAAU,eAAe,CAAC,OAA+B,EAAA;IAC7D,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO;;AAG9C,IAAA,MAAM,EACJ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,OAAO,GACR,GAAG,iBAAiB,EAAE;;IAGvB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC;IACtE,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAGvE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IACpD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAG3D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC;IACnE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAA6B,IAAI,CAAC;IAC1F,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAGnD,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACvF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;;AAG3E,IAAA,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC;AACxD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC;;;;;;;;AAW/D;;AAEG;AACH,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,YAAW;QAC/C,uBAAuB,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAA4C,gBAAgB,EAAE;AACpG,gBAAA,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;AACnC,aAAA,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AACzE,YAAA,gBAAgB,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,YAAA,MAAM,KAAK;QACb;gBAAU;YACR,uBAAuB,CAAC,KAAK,CAAC;QAChC;IACF,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE3C;;AAEG;AACH,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,cAAsB,KAAI;QAChE,wBAAwB,CAAC,cAAc,CAAC;;IAE1C,CAAC,EAAE,EAAE,CAAC;;;;AAMN;;AAEG;IACH,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,cAAsB,KAAI;QAC/D,iBAAiB,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAgC,UAAU,EAAE;gBAClF,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AACpE,aAAA,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;;AAGlF,YAAA,aAAa,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAC9E;YAED,UAAU,CAAC,aAAa,CAAC;;AAGzB,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChD;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,YAAA,MAAM,KAAK;QACb;gBAAU;YACR,iBAAiB,CAAC,KAAK,CAAC;QAC1B;IACF,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE3C;;AAEG;AACH,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,QAAgB,KAAI;QACpD,kBAAkB,CAAC,QAAQ,CAAC;;IAE9B,CAAC,EAAE,EAAE,CAAC;;;;AAMN;;AAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,QAAgB,KAAI;QAC1D,kBAAkB,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAA0D,WAAW,EAAE;gBAC7G,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACxD,aAAA,CAAC;YACF,MAAM,cAAc,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;;;;;;;;YAUnF,WAAW,CAAC,cAAc,CAAC;QAC7B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,YAAA,MAAM,KAAK;QACb;gBAAU;YACR,kBAAkB,CAAC,KAAK,CAAC;QAC3B;IACF,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE3C;;AAEG;IACH,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,YAA4B,EAAE,MAAsB,KAAI;AAC7F,QAAA,MAAM,SAAS,GAAG,UAAU,EAAE;;AAG9B,QAAA,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC;YAC9C,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,4BAA4B;;QAGnE,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,gBAAgB,GAAwB;gBAC5C,eAAe,EAAE,qBAAqB,IAAI,EAAE;gBAC5C,SAAS,EAAE,eAAe,IAAI,EAAE;gBAChC,UAAU,EAAE,SAAS,GAAG,OAAO;AAC/B,gBAAA,QAAQ,EAAE,YAAY;AACtB,gBAAA,IAAI,EAAE,EAAE;aACT;AACD,YAAA,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAClD;;AAGA,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI,cAAc,CACvC,qBAAqB,IAAI,EAAE,EAC3B,eAAe,IAAI,EAAE,EACrB,CAAC,YAAY,KAAI;YACf,aAAa,CAAC,UAAU,CAAC;YACzB,mBAAmB,CAAC,EAAE,GAAG,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC7D,QAAA,CAAC,CACF;QAED,cAAc,CAAC,IAAI,CAAC;QACpB,aAAa,CAAC,IAAI,CAAC;;AAGnB,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;QACpC,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC;QACxC;QACA,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;QAEzC,IAAI,GAAG,GAAG,CAAA,EAAG,OAAO,CAAA,UAAA,EAAa,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE;AACpD,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACpB,YAAA,GAAG,GAAG,MAAM,CAAC,OAAO;QACtB;;AAGA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACxB,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AAC9B,SAAA,CAAC;;AAGF,QAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC9B,YAAA,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE;QACpC;AACA,QAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI,eAAe,EAAE;AAElD,QAAA,IAAI;;AAEF,YAAA,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE;YAEhD,MAAM,SAAS,CACb,GAAG,EACH;AACE,gBAAA,MAAM,EAAE,MAAM;gBACd,IAAI;AACJ,gBAAA,OAAO,EAAE;AACP,oBAAA,GAAG,cAAc;AACjB,oBAAA,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAC1B,iBAAA;aACF,EACD;AACE,gBAAA,OAAO,EAAE,CAAC,IAAI,KAAI;AAChB,oBAAA,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC;gBAC1C,CAAC;gBACD,UAAU,EAAE,MAAK;;AAEf,oBAAA,IAAI,YAAY,CAAC,OAAO,EAAE;wBACxB,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE;wBAEhE,IAAI,cAAc,EAAE;;4BAElB,WAAW,CAAC,IAAI,IAAG;AACjB,gCAAA,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;AAC7B,gCAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oCAC1B,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,oCAAA,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AACpC,wCAAA,GAAG,OAAO;wCACV,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC;wCAC9D,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,wCAAA,WAAW,EAAE,KAAK;qCACnB;gCACH;AACA,gCAAA,OAAO,WAAW;AACpB,4BAAA,CAAC,CAAC;wBACJ;6BAAO;AACL,4BAAA,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;wBAC9E;wBAEA,mBAAmB,CAAC,IAAI,CAAC;;oBAE3B;gBACF,CAAC;AACD,gBAAA,OAAO,EAAE,CAAC,KAAK,KAAI;AACjB,oBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC;oBACxC,mBAAmB,CAAC,IAAI,CAAC;gBAC3B,CAAC;AACF,aAAA,EACD,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAClC;;YAGD,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,EAAE,IAAI,YAAY,CAAC,OAAO,EAAE;AACtE,gBAAA,IAAI;AACF,oBAAA,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CACtC,CAAA,UAAA,EAAa,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,UAAU,CAAA,CAAE,EAChE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CACvC;oBACD,MAAM,WAAW,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AAChF,oBAAA,MAAM,iBAAiB,GAAG,WAAW,EAAE,eAAe;oBACtD,IAAI,iBAAiB,EAAE;;AAErB,wBAAA,gBAAgB,CAAC,IAAI,IAAI,CAAC;AACxB,gCAAA,eAAe,EAAE,iBAAiB;AAClC,gCAAA,IAAI,EAAE,kBAAkB;AACxB,gCAAA,YAAY,EAAE,SAAS;AACvB,gCAAA,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,gCAAA,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACvB,6BAAA,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBAEjF,wBAAwB,CAAC,iBAAiB,CAAC;oBAC7C;gBACF;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC;gBACpD;YACF;QACF;gBAAU;YACR,cAAc,CAAC,KAAK,CAAC;AACrB,YAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI;QACnC;AACF,IAAA,CAAC,EAAE,CAAC,qBAAqB,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;;;;AAM1H;;AAEG;AACH,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;;AAEpC,QAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC9B,YAAA,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE;AAClC,YAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI;QACnC;QAEA,wBAAwB,CAAC,IAAI,CAAC;QAC9B,kBAAkB,CAAC,IAAI,CAAC;QACxB,UAAU,CAAC,EAAE,CAAC;QACd,WAAW,CAAC,EAAE,CAAC;QACf,mBAAmB,CAAC,IAAI,CAAC;QACzB,cAAc,CAAC,KAAK,CAAC;QACrB,aAAa,CAAC,KAAK,CAAC;AACpB,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;IAC7B,CAAC,EAAE,EAAE,CAAC;;;;;;;IASN,SAAS,CAAC,MAAK;QACb,gBAAgB,CAAC,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC;QACd,WAAW,CAAC,EAAE,CAAC;QACf,mBAAmB,CAAC,IAAI,CAAC;QACzB,wBAAwB,CAAC,IAAI,CAAC;QAC9B,kBAAkB,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC9B,YAAA,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE;AAClC,YAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI;QACnC;AACA,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC7B,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;;IAGf,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACzB,YAAA,iBAAiB,EAAE;QACrB;IACF,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;;IAG5C,SAAS,CAAC,MAAK;QACb,IAAI,qBAAqB,EAAE;YACzB,WAAW,CAAC,qBAAqB,CAAC;QACpC;AACF,IAAA,CAAC,EAAE,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;;IAGxC,SAAS,CAAC,MAAK;QACb,IAAI,eAAe,EAAE;YACnB,YAAY,CAAC,eAAe,CAAC;QAC/B;AACF,IAAA,CAAC,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;;;;AAMnC,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,eAAe,CAAC,IAAI,IAAI;IAEhF,MAAM,WAAW,GAAG;AAClB,UAAE,CAAC,GAAG,QAAQ,EAAE,gBAAgB;UAC9B,QAAQ;IAEZ,OAAO;;QAEL,aAAa;QACb,oBAAoB;;QAGpB,OAAO;QACP,cAAc;QACd,aAAa;;QAGb,QAAQ;QACR,gBAAgB;QAChB,eAAe;QACf,WAAW;QACX,UAAU;;QAGV,qBAAqB;QACrB,eAAe;;QAGf,iBAAiB;QACjB,kBAAkB;;QAGlB,WAAW;QACX,YAAY;;QAGZ,WAAW;;QAGX,YAAY;;QAGZ,WAAW;KACZ;AACH;;AC/gBM,SAAU,QAAQ,CAAC,OAAwB,EAAA;AAC/C,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO;;IAGxB,MAAM,EACJ,aAAa,EACb,SAAS,EACT,WAAW,GACZ,GAAG,iBAAiB,EAAE;;IAGvB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC;IACtD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;;;AAMvD;;AAEG;AACH,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,YAA0B;QACtD,eAAe,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAgB,wBAAwB,EAAE;AAChF,gBAAA,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;AAC9B,aAAA,CAAC;AACF,YAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,YAAA,MAAM,KAAK;QACb;gBAAU;YACR,eAAe,CAAC,KAAK,CAAC;QACxB;AACF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;;IAGzB,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,EAAE;QACb;AACF,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAE1B,IAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE;AAChC;;;;"}
|
|
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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"}
|