@axiom-lattice/client-sdk 1.0.21 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/index.d.ts +32 -4
- package/dist/index.js +323 -64
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +323 -64
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types.ts","../src/client.ts","../src/ChunkMessageMerger.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * Axiom Lattice Client SDK - A TypeScript client for the Axiom Lattice Agent Service API\n */\n\n// Re-export all public types and classes\nexport * from \"./types\";\nexport * from \"./client\";\nexport { createSimpleMessageMerger } from \"./ChunkMessageMerger\";\n","/**\n * Core types for the Axiom Lattice Client SDK\n */\n\nimport {\n Message,\n UserMessage,\n AssistantMessage,\n SystemMessage,\n ToolMessage,\n DeveloperMessage,\n MessageChunk,\n} from \"@axiom-lattice/protocols\";\n\n/**\n * Transport method for client-server communication\n * Note: Currently only \"ws\" is used for tool registration\n */\nexport type Transport = \"sse\" | \"ws\";\n\n/**\n * Configuration options for the Client\n */\nexport interface ClientConfig {\n /**\n * Base URL for the API\n */\n baseURL: string;\n\n /**\n * API key for authentication\n */\n apiKey: string;\n\n /**\n * Assistant identifier\n */\n assistantId: string;\n\n /**\n * Transport method (Server-Sent Events or WebSocket)\n */\n transport: Transport;\n\n /**\n * Request timeout in milliseconds (optional, defaults to 30000)\n */\n timeout?: number;\n\n /**\n * Additional headers to include in requests (optional)\n */\n headers?: Record<string, string>;\n\n /**\n * Configuration for retry behavior (optional)\n */\n retry?: RetryConfig;\n}\n\n/**\n * Configuration for retry behavior\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts\n */\n maxRetries: number;\n\n /**\n * Initial delay between retries in milliseconds\n */\n initialDelayMs: number;\n\n /**\n * Maximum delay between retries in milliseconds\n */\n maxDelayMs: number;\n\n /**\n * Factor to multiply delay by after each retry attempt\n */\n backoffFactor: number;\n}\n\n/**\n * Thread creation options\n */\nexport interface CreateThreadOptions {\n /**\n * Optional metadata for the thread\n */\n metadata?: Record<string, any>;\n}\n\n/**\n * Thread information\n */\nexport interface Thread {\n /**\n * Thread identifier\n */\n id: string;\n\n /**\n * Thread metadata\n */\n metadata?: Record<string, any>;\n\n /**\n * Thread creation timestamp\n */\n createdAt: string;\n}\n\n/**\n * Chat send options\n */\nexport interface ChatSendOptions {\n /**\n * Thread identifier\n */\n threadId: string;\n\n /**\n * Messages to send\n */\n messages: Message[];\n}\n\n/**\n * Chat stream options\n */\nexport interface ChatStreamOptions extends ChatSendOptions {\n /**\n * Whether to run in background (optional)\n */\n background?: boolean;\n}\n\n/**\n * Stream callbacks interface\n */\nexport interface StreamCallbacks {\n /**\n * Called when a stream event is received\n */\n onEvent: (event: MessageChunk) => void;\n\n /**\n * Called when the stream completes\n */\n onComplete?: () => void;\n\n /**\n * Called when an error occurs\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Chat response\n */\nexport interface ChatResponse {\n /**\n * Response message\n */\n message: AssistantMessage;\n\n /**\n * Trace ID for debugging\n */\n traceId: string;\n}\n\n/**\n * Tool registration options\n */\nexport interface RegisterToolOptions {\n /**\n * Tool name\n */\n name: string;\n\n /**\n * Tool parameter schema\n */\n schema: object;\n\n /**\n * Tool handler function\n */\n handler: (params: any) => Promise<any>;\n}\n\n/**\n * Get messages options\n */\nexport interface GetMessagesOptions {\n /**\n * Thread identifier\n */\n threadId: string;\n\n /**\n * Maximum number of messages to return\n */\n limit?: number;\n\n /**\n * Message ID to start from (for pagination)\n */\n after?: string;\n\n /**\n * Whether to return messages in reverse chronological order\n */\n reverse?: boolean;\n}\n\n/**\n * Thread list options\n */\nexport interface ListThreadsOptions {\n /**\n * Maximum number of threads to return\n */\n limit?: number;\n\n /**\n * Offset for pagination\n */\n offset?: number;\n}\n\n/**\n * Run options\n */\nexport interface RunOptions {\n /**\n * Thread identifier\n */\n threadId: string;\n\n /**\n * Message to send\n */\n message: string;\n\n /**\n * Files to attach (optional)\n */\n files?: any[];\n\n /**\n * Command to execute (optional)\n */\n command?: any;\n\n /**\n * Whether to stream the response (optional)\n */\n streaming?: boolean;\n\n /**\n * Whether to run in background (optional)\n */\n background?: boolean;\n}\n\n/**\n * Agent state\n */\nexport interface AgentState {\n values: {\n messages: Message[];\n [key: string]: any;\n };\n tasks: Array<{\n interrupts: Array<{\n value: any;\n }>;\n }>;\n}\n\n/**\n * Custom error classes\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public responseBody?: any\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nexport class NetworkError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NetworkError\";\n }\n}\n\nexport class AuthenticationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AuthenticationError\";\n }\n}\n","import axios, { AxiosInstance } from \"axios\";\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\nimport {\n AgentState,\n ApiError,\n AuthenticationError,\n ChatResponse,\n ChatSendOptions,\n ChatStreamOptions,\n ClientConfig,\n CreateThreadOptions,\n GetMessagesOptions,\n ListThreadsOptions,\n NetworkError,\n RegisterToolOptions,\n RunOptions,\n Thread,\n} from \"./types\";\n\n/**\n * Main client class for interacting with the Axiom Lattice Agent Service API\n */\nexport class Client {\n private client: AxiosInstance;\n private config: ClientConfig;\n private assistantId: string;\n private tenantId: string = \"\";\n private registeredTools: Map<string, RegisterToolOptions> = new Map();\n\n /**\n * Creates a new Client instance\n * @param config - Configuration options for the client\n */\n constructor(config: ClientConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n };\n\n this.assistantId = config.assistantId;\n\n this.client = axios.create({\n baseURL: this.config.baseURL,\n timeout: this.config.timeout,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.apiKey}`,\n ...this.config.headers,\n },\n });\n\n // Add request/response interceptors for error handling\n this.setupInterceptors();\n }\n\n /**\n * Sets up axios interceptors for error handling\n * @private\n */\n private setupInterceptors(): void {\n this.client.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n if (error.response.status === 401) {\n throw new AuthenticationError(\n error.response.data.message || \"Authentication failed\"\n );\n } else {\n throw new ApiError(\n error.response.data.message || \"API Error\",\n error.response.status,\n error.response.data\n );\n }\n } else if (error.request) {\n // The request was made but no response was received\n throw new NetworkError(\"No response received from server\");\n } else {\n // Something happened in setting up the request that triggered an Error\n throw new Error(`Request error: ${error.message}`);\n }\n }\n );\n }\n\n /**\n * Set tenant ID for multi-tenant environments\n * @param tenantId - Tenant identifier\n */\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n this.client.defaults.headers[\"x-tenant-id\"] = tenantId;\n }\n\n /**\n * Creates a new thread\n * @param options - Options for creating a thread\n * @returns A promise that resolves to the thread ID\n */\n async createThread(options: CreateThreadOptions): Promise<string> {\n try {\n const response = await this.client.post(\"/threads\", {\n ...options,\n assistantId: this.assistantId,\n });\n return response.data.id;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Retrieves thread information\n * @param threadId - Thread identifier\n * @returns A promise that resolves to the thread information\n */\n async getThread(threadId: string): Promise<Thread> {\n try {\n const response = await this.client.get(`/threads/${threadId}`, {\n params: {\n assistantId: this.assistantId,\n },\n });\n return response.data;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Lists all threads\n * @param options - Options for listing threads\n * @returns A promise that resolves to an array of threads\n */\n async listThreads(options?: ListThreadsOptions): Promise<Thread[]> {\n try {\n const response = await this.client.get(\"/threads\", {\n params: {\n ...options,\n assistantId: this.assistantId,\n },\n });\n return response.data.threads;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deletes a thread\n * @param threadId - Thread identifier\n * @returns A promise that resolves when the thread is deleted\n */\n async deleteThread(threadId: string): Promise<void> {\n try {\n await this.client.delete(`/threads/${threadId}`, {\n params: {\n assistantId: this.assistantId,\n },\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Retrieves messages from a thread\n * @param options - Options for retrieving messages\n * @returns A promise that resolves to an array of messages\n */\n async getMessages(options: GetMessagesOptions): Promise<Message[]> {\n try {\n const response = await this.client.get(\n `/api/assistants/${this.assistantId}/${options.threadId}/memory`,\n {\n params: {\n limit: options.limit,\n after: options.after,\n reverse: options.reverse,\n assistantId: this.assistantId,\n },\n }\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Retrieves agent state\n * @param threadId - Thread identifier\n * @returns A promise that resolves to the agent state\n */\n async getAgentState(threadId: string): Promise<AgentState> {\n try {\n const response = await this.client.get(\n `/api/assistants/${this.assistantId}/${threadId}/state`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Gets agent graph visualization\n * @returns A promise that resolves to the graph visualization data\n */\n async getAgentGraph(): Promise<string> {\n try {\n const response = await this.client.get(\n `/api/assistants/${this.assistantId}/graph`\n );\n return response.data.image;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Run agent with options\n * @param options - Options for running the agent\n * @returns A promise that resolves to the run result or a stream\n */\n async run(options: RunOptions): Promise<any> {\n try {\n const headers: Record<string, string> = {};\n if (this.tenantId) {\n headers[\"x-tenant-id\"] = this.tenantId;\n }\n\n if (options.streaming) {\n throw new Error(\n \"Streaming without callbacks is not supported. Use chat.stream with callbacks instead.\"\n );\n } else {\n const response = await this.client.post(\n \"/api/runs\",\n {\n assistant_id: this.assistantId,\n thread_id: options.threadId,\n message: options.message,\n files: options.files,\n command: options.command,\n streaming: false,\n background: options.background || false,\n },\n { headers }\n );\n return response.data;\n }\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Stream run results\n * @param options - Options for streaming run results\n * @param onEvent - Callback function that receives stream events\n * @param onComplete - Optional callback function called when streaming completes\n * @param onError - Optional callback function called when an error occurs\n * @returns A function that can be called to stop the stream\n */\n private streamRun(\n options: RunOptions,\n onEvent: (event: MessageChunk) => void,\n onComplete?: () => void,\n onError?: (error: Error) => void\n ): () => void {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (this.tenantId) {\n headers[\"x-tenant-id\"] = this.tenantId;\n }\n\n // Create abort controller for the fetch request\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Start the streaming fetch\n (async () => {\n try {\n const response = await fetch(`${this.config.baseURL}/api/runs`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.apiKey}`,\n ...headers,\n },\n body: JSON.stringify({\n assistant_id: this.assistantId,\n thread_id: options.threadId,\n message: options.message,\n files: options.files,\n command: options.command,\n streaming: true,\n background: options.background || false,\n }),\n signal: signal,\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\n let buffer = \"\";\n\n while (true) {\n const { value, done } = await reader.read();\n\n if (done) {\n // Process any remaining data in buffer\n if (buffer.trim()) {\n try {\n const data = JSON.parse(buffer.trim());\n onEvent(data);\n } catch (error) {\n // Ignore parse errors for incomplete chunks\n }\n }\n break;\n }\n\n // Decode the chunk and add to buffer\n const chunk = decoder.decode(value, { stream: true });\n buffer += chunk;\n\n // Process complete lines\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\"; // Keep the last incomplete line in buffer\n\n for (const line of lines) {\n if (line.trim().startsWith(\"data: \")) {\n try {\n const data = JSON.parse(line.trim().slice(6));\n onEvent(data);\n } catch (error) {\n if (onError) {\n onError(\n error instanceof Error ? error : new Error(String(error))\n );\n }\n }\n }\n }\n }\n\n if (onComplete) {\n onComplete();\n }\n } catch (error) {\n if (signal.aborted) {\n // Request was aborted, no need to call onError\n return;\n }\n\n if (onError) {\n onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n })();\n\n // Return a function to abort the fetch request\n return () => {\n controller.abort();\n };\n }\n\n /**\n * Chat namespace for sending messages and streaming responses\n */\n chat = {\n /**\n * Sends a message to a thread and receives a response\n * @param options - Options for sending a message\n * @returns A promise that resolves to the chat response\n */\n send: async (options: ChatSendOptions): Promise<ChatResponse> => {\n try {\n // Extract the message from the messages array (assuming the last message is the one to send)\n const message = options.messages[options.messages.length - 1];\n\n // Use the run method to send the message\n const result = await this.run({\n threadId: options.threadId,\n message:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n streaming: false,\n });\n\n return {\n message: {\n role: \"ai\",\n content: result.output || \"\",\n id: result.id || \"\",\n },\n traceId: result.id || \"\",\n };\n } catch (error) {\n throw error;\n }\n },\n\n /**\n * Sends a message to a thread and streams the response\n * @param options - Options for streaming a message\n * @param onEvent - Callback function that receives stream events\n * @param onComplete - Optional callback function called when streaming completes\n * @param onError - Optional callback function called when an error occurs\n * @returns A function that can be called to stop the stream\n */\n stream: (\n options: ChatStreamOptions,\n onEvent: (event: MessageChunk) => void,\n onComplete?: () => void,\n onError?: (error: Error) => void\n ): (() => void) => {\n // Extract the message from the messages array (assuming the last message is the one to send)\n const message = options.messages[options.messages.length - 1];\n\n // Use the streamRun method to stream the response\n return this.streamRun(\n {\n threadId: options.threadId,\n message:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n streaming: true,\n background: options.background,\n },\n onEvent,\n onComplete,\n onError\n );\n },\n };\n\n /**\n * Tools namespace for registering and unregistering client-side tools\n */\n tools = {\n /**\n * Registers a client-side tool\n * @param options - Options for registering a tool\n */\n register: (options: RegisterToolOptions): void => {\n if (this.config.transport !== \"ws\") {\n throw new Error(\n \"Client-side tools are only supported with WebSocket transport\"\n );\n }\n this.registeredTools.set(options.name, options);\n },\n\n /**\n * Unregisters a client-side tool\n * @param name - Tool name\n */\n unregister: (name: string): void => {\n this.registeredTools.delete(name);\n },\n };\n}\n","/**\n * ChunkMessageMerger\n *\n * A utility for handling streaming message chunks and merging them into complete messages.\n */\n\nimport {\n BaseMessage,\n UserMessage,\n AssistantMessage,\n SystemMessage,\n ToolMessage,\n ToolCall,\n Message,\n MessageChunk,\n} from \"@axiom-lattice/protocols\";\n\n/**\n * Creates a simple message merger for handling streaming message chunks\n * @returns An object with methods to push chunks and retrieve merged messages\n */\nexport function createSimpleMessageMerger() {\n let messages: Message[] = [];\n const messageMap = new Map<string, number>();\n\n // Tool call builder: messageId -> index -> build state\n const toolBuilders = new Map<\n string,\n Map<\n number,\n {\n id?: string;\n name?: string;\n args: string; // Accumulated parameter string\n }\n >\n >();\n\n /**\n * Normalizes role string to standard role\n * @param type - Role string from the input\n * @returns Normalized role\n */\n function normalizeRole(type: string): string {\n switch (type) {\n case \"ai\":\n return \"ai\";\n case \"human\":\n case \"user\":\n return \"human\";\n case \"system\":\n return \"system\";\n case \"tool\":\n return \"tool\";\n case \"developer\":\n return \"developer\";\n default:\n return \"ai\";\n }\n }\n\n /**\n * Safely parses JSON string\n * @param str - JSON string to parse\n * @returns Parsed object or original string if parsing fails\n */\n function safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return str; // Return original string if parsing fails\n }\n }\n\n /**\n * Ensures a message exists, creating it if needed\n * @param id - Message ID\n * @param role - Message role\n * @returns The message object\n */\n function ensureMessage(id: string, role: string): any {\n const index = messageMap.get(id);\n if (index !== undefined) {\n return messages[index];\n }\n\n // Create new message\n let newMessage: any;\n switch (role) {\n case \"human\":\n newMessage = { id, role: \"human\", content: \"\" };\n break;\n case \"system\":\n newMessage = { id, role: \"system\", content: \"\" };\n break;\n case \"tool\":\n newMessage = { id, role: \"tool\", content: \"\", tool_call_id: \"\" };\n break;\n case \"developer\":\n newMessage = { id, role: \"developer\", content: \"\" };\n break;\n default:\n newMessage = { id, role: \"ai\", content: \"\" };\n }\n\n messages.push(newMessage);\n messageMap.set(id, messages.length - 1);\n return newMessage;\n }\n\n /**\n * Updates tool calls for a message\n * @param message - Message to update\n */\n function updateToolCalls(message: any) {\n if (message.role !== \"ai\") return;\n\n const builders = toolBuilders.get(message.id);\n if (!builders || builders.size === 0) return;\n\n const toolCalls: any[] = [];\n for (const [index, builder] of Array.from(builders.entries())) {\n if (builder.name && builder.id) {\n // Try to parse arguments as JSON object\n const args = builder.args.trim();\n const parsedArgs = safeJsonParse(args);\n\n // Create ToolCall object\n toolCalls.push({\n id: builder.id,\n name: builder.name,\n args:\n typeof parsedArgs === \"object\" ? parsedArgs : { value: parsedArgs },\n type: \"tool_call\",\n });\n }\n }\n\n // Only set tool_calls if there are any\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n }\n\n /**\n * Initialize messages\n * @param msgs - Initial messages\n */\n function initialMessages(msgs: any[]) {\n // Just store the messages as-is\n messages = msgs;\n }\n\n /**\n * Processes a message chunk\n * @param chunk - Message chunk to process\n */\n function push(chunk: MessageChunk) {\n const role = normalizeRole(chunk.type);\n const message = ensureMessage(chunk.data.id, role);\n\n // Accumulate content\n if (chunk.data.content) {\n message.content = (message.content || \"\") + chunk.data.content;\n }\n\n // Handle tool call ID (for tool messages)\n if (message.role === \"tool\" && chunk.data.tool_call_id) {\n message.tool_call_id = chunk.data.tool_call_id;\n }\n\n // Handle tool call chunks (incremental)\n if (chunk.data.tool_call_chunks && message.role === \"ai\") {\n let builders = toolBuilders.get(message.id);\n if (!builders) {\n builders = new Map();\n toolBuilders.set(message.id, builders);\n }\n\n for (const chunk_item of chunk.data.tool_call_chunks) {\n let builder = builders.get(chunk_item.index);\n if (!builder) {\n builder = { args: \"\" };\n builders.set(chunk_item.index, builder);\n }\n\n if (chunk_item.name) builder.name = chunk_item.name;\n if (chunk_item.id) builder.id = chunk_item.id;\n if (chunk_item.args) builder.args += chunk_item.args;\n }\n\n updateToolCalls(message);\n }\n\n // Handle complete tool calls (overwrite)\n if (chunk.data.tool_calls && message.role === \"ai\") {\n const toolCalls: any[] = chunk.data.tool_calls\n .filter((tc) => tc.name && tc.id)\n .map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: tc.args,\n type: \"tool_call\",\n response: tc.response,\n }));\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n }\n\n // Handle tool calls in additional_kwargs\n if (\n chunk.data.additional_kwargs?.tool_calls &&\n message.role === \"ai\" &&\n !message.tool_calls\n ) {\n const toolCalls: any[] = [];\n\n for (const tc of chunk.data.additional_kwargs.tool_calls) {\n if (tc.function?.name && tc.id) {\n // Convert to our format\n const args =\n typeof tc.function.arguments === \"string\"\n ? safeJsonParse(tc.function.arguments)\n : tc.function.arguments || {};\n\n toolCalls.push({\n id: tc.id,\n name: tc.function.name,\n args,\n type: \"tool_call\",\n });\n }\n }\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n }\n }\n\n /**\n * Gets all messages with tool responses merged into tool calls\n * @returns Array of messages with tool responses merged into tool calls\n */\n function getMessages(): any[] {\n // Create a map to store tool responses by their tool_call_id\n const toolResponsesMap: Record<string, any> = {};\n\n // First pass: collect all tool responses\n messages.forEach((message) => {\n if (message.role === \"tool\" && message.tool_call_id) {\n toolResponsesMap[message.tool_call_id] = message;\n }\n });\n\n // Second pass: merge tool responses with their corresponding AI messages\n return messages\n .filter((message) => {\n // Keep all messages except tool messages\n return message.role !== \"tool\";\n })\n .map((message) => {\n if (message.role === \"ai\" && message.tool_calls) {\n // Create a new message object with merged tool responses\n const mergedMessage = { ...message };\n\n // Add tool responses to the corresponding tool calls\n if (mergedMessage.tool_calls) {\n mergedMessage.tool_calls = mergedMessage.tool_calls.map(\n (toolCall: any) => {\n const toolResponse = toolResponsesMap[toolCall.id];\n if (toolResponse) {\n return {\n ...toolCall,\n response: toolResponse.content,\n };\n }\n return toolCall;\n }\n );\n }\n\n return mergedMessage;\n }\n return message;\n });\n }\n\n /**\n * Gets messages without tool calls\n * @returns Array of messages without tool calls\n */\n function getMessagesWithoutToolCalls(): any[] {\n return messages.filter(\n (message) =>\n message.role !== \"tool\" &&\n (message.role !== \"ai\" || !message.tool_calls)\n );\n }\n\n /**\n * Resets the message merger state\n */\n function reset() {\n messages.length = 0;\n messageMap.clear();\n toolBuilders.clear();\n }\n\n return {\n push,\n initialMessages,\n getMessages,\n getMessagesWithoutToolCalls,\n reset,\n };\n}\n"],"mappings":"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","names":["axios"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types.ts","../src/client.ts","../src/wechat-client.ts","../src/ChunkMessageMerger.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * Axiom Lattice Client SDK - A TypeScript client for the Axiom Lattice Agent Service API\n */\n\n// Re-export all public types and classes\nexport * from \"./types\";\nexport * from \"./client\";\nexport { createSimpleMessageMerger } from \"./ChunkMessageMerger\";\n","/**\n * Core types for the Axiom Lattice Client SDK\n */\n\nimport {\n Message,\n UserMessage,\n AssistantMessage,\n SystemMessage,\n ToolMessage,\n DeveloperMessage,\n MessageChunk,\n} from \"@axiom-lattice/protocols\";\n\n/**\n * Transport method for client-server communication\n * Note: Currently only \"ws\" is used for tool registration\n */\nexport type Transport = \"sse\" | \"ws\";\n\n/**\n * Runtime environment for the client\n */\nexport type RuntimeEnvironment = \"web\" | \"wechat-miniprogram\";\n\n/**\n * Configuration options for the Client\n */\nexport interface ClientConfig {\n /**\n * Base URL for the API\n */\n baseURL: string;\n\n /**\n * API key for authentication\n */\n apiKey: string;\n\n /**\n * Assistant identifier\n */\n assistantId: string;\n\n /**\n * Transport method (Server-Sent Events or WebSocket)\n */\n transport: Transport;\n\n /**\n * Runtime environment (web or wechat-miniprogram)\n * Defaults to \"web\" if not specified\n */\n environment?: RuntimeEnvironment;\n\n /**\n * Request timeout in milliseconds (optional, defaults to 30000)\n */\n timeout?: number;\n\n /**\n * Additional headers to include in requests (optional)\n */\n headers?: Record<string, string>;\n\n /**\n * Configuration for retry behavior (optional)\n */\n retry?: RetryConfig;\n}\n\n/**\n * Configuration for retry behavior\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts\n */\n maxRetries: number;\n\n /**\n * Initial delay between retries in milliseconds\n */\n initialDelayMs: number;\n\n /**\n * Maximum delay between retries in milliseconds\n */\n maxDelayMs: number;\n\n /**\n * Factor to multiply delay by after each retry attempt\n */\n backoffFactor: number;\n}\n\n/**\n * Thread creation options\n */\nexport interface CreateThreadOptions {\n /**\n * Optional metadata for the thread\n */\n metadata?: Record<string, any>;\n}\n\n/**\n * Thread information\n */\nexport interface Thread {\n /**\n * Thread identifier\n */\n id: string;\n\n /**\n * Thread metadata\n */\n metadata?: Record<string, any>;\n\n /**\n * Thread creation timestamp\n */\n createdAt: string;\n}\n\n/**\n * Chat send options\n */\nexport interface ChatSendOptions {\n /**\n * Thread identifier\n */\n threadId: string;\n\n /**\n * Messages to send\n */\n messages: Message[];\n}\n\n/**\n * Chat stream options\n */\nexport interface ChatStreamOptions extends ChatSendOptions {\n /**\n * Whether to run in background (optional)\n */\n background?: boolean;\n\n /**\n * Whether to return agent state when stream completes (optional)\n */\n enableReturnStateWhenSteamCompleted?: boolean;\n}\n\n/**\n * Stream callbacks interface\n */\nexport interface StreamCallbacks {\n /**\n * Called when a stream event is received\n */\n onEvent: (event: MessageChunk) => void;\n\n /**\n * Called when the stream completes, with optional agent state\n */\n onComplete?: (state?: AgentState) => void;\n\n /**\n * Called when an error occurs\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Chat response\n */\nexport interface ChatResponse {\n /**\n * Response message\n */\n message: AssistantMessage;\n\n /**\n * Trace ID for debugging\n */\n traceId: string;\n}\n\n/**\n * Tool registration options\n */\nexport interface RegisterToolOptions {\n /**\n * Tool name\n */\n name: string;\n\n /**\n * Tool parameter schema\n */\n schema: object;\n\n /**\n * Tool handler function\n */\n handler: (params: any) => Promise<any>;\n}\n\n/**\n * Get messages options\n */\nexport interface GetMessagesOptions {\n /**\n * Thread identifier\n */\n threadId: string;\n\n /**\n * Maximum number of messages to return\n */\n limit?: number;\n\n /**\n * Message ID to start from (for pagination)\n */\n after?: string;\n\n /**\n * Whether to return messages in reverse chronological order\n */\n reverse?: boolean;\n}\n\n/**\n * Thread list options\n */\nexport interface ListThreadsOptions {\n /**\n * Maximum number of threads to return\n */\n limit?: number;\n\n /**\n * Offset for pagination\n */\n offset?: number;\n}\n\n/**\n * Run options\n */\nexport interface RunOptions {\n /**\n * Thread identifier\n */\n threadId: string;\n\n /**\n * Message to send\n */\n message: string;\n\n /**\n * Files to attach (optional)\n */\n files?: any[];\n\n /**\n * Command to execute (optional)\n */\n command?: any;\n\n /**\n * Whether to stream the response (optional)\n */\n streaming?: boolean;\n\n /**\n * Whether to run in background (optional)\n */\n background?: boolean;\n\n /**\n * Whether to return agent state when stream completes (optional)\n */\n enableReturnStateWhenSteamCompleted?: boolean;\n}\n\n/**\n * Agent state\n */\nexport interface AgentState {\n values: {\n messages: Message[];\n [key: string]: any;\n };\n tasks: Array<{\n interrupts: Array<{\n value: any;\n }>;\n }>;\n}\n\n/**\n * Custom error classes\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public responseBody?: any\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nexport class NetworkError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NetworkError\";\n }\n}\n\nexport class AuthenticationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AuthenticationError\";\n }\n}\n","import axios, { AxiosInstance } from \"axios\";\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\nimport { WechatClient, createWechatClient } from \"./wechat-client\";\nimport {\n AgentState,\n ApiError,\n AuthenticationError,\n ChatResponse,\n ChatSendOptions,\n ChatStreamOptions,\n ClientConfig,\n CreateThreadOptions,\n GetMessagesOptions,\n ListThreadsOptions,\n NetworkError,\n RegisterToolOptions,\n RunOptions,\n RuntimeEnvironment,\n Thread,\n} from \"./types\";\n\n/**\n * Main client class for interacting with the Axiom Lattice Agent Service API\n */\nexport class Client {\n private client: AxiosInstance | WechatClient;\n private config: ClientConfig;\n private assistantId: string;\n private tenantId: string = \"\";\n private registeredTools: Map<string, RegisterToolOptions> = new Map();\n private environment: RuntimeEnvironment;\n\n /**\n * Creates a new Client instance\n * @param config - Configuration options for the client\n */\n constructor(config: ClientConfig) {\n this.config = {\n timeout: 30000,\n environment: \"web\", // Default to web environment\n ...config,\n };\n\n this.environment = this.config.environment || \"web\";\n this.assistantId = config.assistantId;\n\n // Initialize the appropriate HTTP client based on environment\n if (this.environment === \"wechat-miniprogram\") {\n this.client = createWechatClient({\n baseURL: this.config.baseURL,\n timeout: this.config.timeout,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.apiKey}`,\n ...this.config.headers,\n },\n });\n } else {\n // Default to axios for web environment\n this.client = axios.create({\n baseURL: this.config.baseURL,\n timeout: this.config.timeout,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.apiKey}`,\n ...this.config.headers,\n },\n });\n }\n\n // Add request/response interceptors for error handling\n this.setupInterceptors();\n }\n\n /**\n * Sets up axios interceptors for error handling\n * @private\n */\n private setupInterceptors(): void {\n this.client.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n if (error.response.status === 401) {\n throw new AuthenticationError(\n error.response.data.message || \"Authentication failed\"\n );\n } else {\n throw new ApiError(\n error.response.data.message || \"API Error\",\n error.response.status,\n error.response.data\n );\n }\n } else if (error.request) {\n // The request was made but no response was received\n throw new NetworkError(\"No response received from server\");\n } else {\n // Something happened in setting up the request that triggered an Error\n throw new Error(`Request error: ${error.message}`);\n }\n }\n );\n }\n\n /**\n * Set tenant ID for multi-tenant environments\n * @param tenantId - Tenant identifier\n */\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n this.client.defaults.headers[\"x-tenant-id\"] = tenantId;\n }\n\n /**\n * Creates a new thread\n * @param options - Options for creating a thread\n * @returns A promise that resolves to the thread ID\n */\n async createThread(options: CreateThreadOptions): Promise<string> {\n try {\n const response = await this.client.post(\"/threads\", {\n ...options,\n assistantId: this.assistantId,\n });\n return response.data.id;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Retrieves thread information\n * @param threadId - Thread identifier\n * @returns A promise that resolves to the thread information\n */\n async getThread(threadId: string): Promise<Thread> {\n try {\n const response = await this.client.get(`/threads/${threadId}`, {\n params: {\n assistantId: this.assistantId,\n },\n });\n return response.data;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Lists all threads\n * @param options - Options for listing threads\n * @returns A promise that resolves to an array of threads\n */\n async listThreads(options?: ListThreadsOptions): Promise<Thread[]> {\n try {\n const response = await this.client.get(\"/threads\", {\n params: {\n ...options,\n assistantId: this.assistantId,\n },\n });\n return response.data.threads;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deletes a thread\n * @param threadId - Thread identifier\n * @returns A promise that resolves when the thread is deleted\n */\n async deleteThread(threadId: string): Promise<void> {\n try {\n await this.client.delete(`/threads/${threadId}`, {\n params: {\n assistantId: this.assistantId,\n },\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Retrieves messages from a thread\n * @param options - Options for retrieving messages\n * @returns A promise that resolves to an array of messages\n */\n async getMessages(options: GetMessagesOptions): Promise<Message[]> {\n try {\n const response = await this.client.get(\n `/api/assistants/${this.assistantId}/${options.threadId}/memory`,\n {\n params: {\n limit: options.limit,\n after: options.after,\n reverse: options.reverse,\n assistantId: this.assistantId,\n },\n }\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Retrieves agent state\n * @param threadId - Thread identifier\n * @returns A promise that resolves to the agent state\n */\n async getAgentState(threadId: string): Promise<AgentState> {\n try {\n const response = await this.client.get(\n `/api/assistants/${this.assistantId}/${threadId}/state`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Gets agent graph visualization\n * @returns A promise that resolves to the graph visualization data\n */\n async getAgentGraph(): Promise<string> {\n try {\n const response = await this.client.get(\n `/api/assistants/${this.assistantId}/graph`\n );\n return response.data.image;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Run agent with options\n * @param options - Options for running the agent\n * @returns A promise that resolves to the run result or a stream\n */\n async run(options: RunOptions): Promise<any> {\n try {\n const headers: Record<string, string> = {};\n if (this.tenantId) {\n headers[\"x-tenant-id\"] = this.tenantId;\n }\n\n if (options.streaming) {\n throw new Error(\n \"Streaming without callbacks is not supported. Use chat.stream with callbacks instead.\"\n );\n } else {\n const response = await this.client.post(\n \"/api/runs\",\n {\n assistant_id: this.assistantId,\n thread_id: options.threadId,\n message: options.message,\n files: options.files,\n command: options.command,\n streaming: false,\n background: options.background || false,\n },\n { headers }\n );\n return response.data;\n }\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Stream run results\n * @param options - Options for streaming run results\n * @param onEvent - Callback function that receives stream events\n * @param onComplete - Optional callback function called when streaming completes\n * @param onError - Optional callback function called when an error occurs\n * @returns A function that can be called to stop the stream\n */\n private streamRun(\n options: RunOptions,\n onEvent: (event: MessageChunk) => void,\n onComplete?: (state?: AgentState) => void,\n onError?: (error: Error) => void\n ): () => void {\n // Handle streaming based on environment\n if (this.environment === \"wechat-miniprogram\") {\n return this.streamRunWechat(options, onEvent, onComplete, onError);\n } else {\n return this.streamRunWeb(options, onEvent, onComplete, onError);\n }\n }\n\n /**\n * Stream run results using axios for web environment\n * @private\n */\n private streamRunWeb(\n options: RunOptions,\n onEvent: (event: MessageChunk) => void,\n onComplete?: (state?: AgentState) => void,\n onError?: (error: Error) => void\n ): () => void {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (this.tenantId) {\n headers[\"x-tenant-id\"] = this.tenantId;\n }\n\n // Create axios cancel token\n const source = axios.CancelToken.source();\n\n // Start the streaming request\n (async () => {\n try {\n const axiosClient = this.client as AxiosInstance;\n const response = await axiosClient.post(\n \"/api/runs\",\n {\n assistant_id: this.assistantId,\n thread_id: options.threadId,\n message: options.message,\n files: options.files,\n command: options.command,\n streaming: true,\n background: options.background || false,\n },\n {\n headers,\n cancelToken: source.token,\n responseType: \"text\",\n transformResponse: (data) => {\n if (!data) return data;\n\n // Process the raw data line by line\n const lines = data.split(\"\\n\");\n\n for (const line of lines) {\n if (line.trim().startsWith(\"data: \")) {\n try {\n const eventData = JSON.parse(line.trim().slice(6));\n onEvent(eventData);\n } catch (error) {\n if (onError) {\n onError(\n error instanceof Error\n ? error\n : new Error(String(error))\n );\n }\n }\n }\n }\n\n return data; // Return the original data for axios internal handling\n },\n }\n );\n\n if (onComplete) {\n // Fetch agent state before calling onComplete if enabled\n if (options.enableReturnStateWhenSteamCompleted) {\n try {\n const state = await this.getAgentState(options.threadId);\n onComplete(state);\n } catch (error) {\n // If getting state fails, still call onComplete without state\n onComplete();\n }\n } else {\n // Just call onComplete without state if not enabled\n onComplete();\n }\n }\n } catch (error) {\n if (axios.isCancel(error)) {\n // Request was cancelled, no need to call onError\n return;\n }\n\n if (onError) {\n onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n })();\n\n // Return a function to cancel the axios request\n return () => {\n source.cancel(\"Request cancelled by user\");\n };\n }\n\n /**\n * Stream run results using WeChat Mini Program request API\n * @private\n */\n private streamRunWechat(\n options: RunOptions,\n onEvent: (event: MessageChunk) => void,\n onComplete?: (state?: AgentState) => void,\n onError?: (error: Error) => void\n ): () => void {\n // For WeChat Mini Program, we need to use a different approach\n // Since true streaming isn't supported, we'll use a polling mechanism\n const wechatClient = this.client as WechatClient;\n let isRunning = true;\n let messageId: string | null = null;\n\n // Start the polling\n const poll = async () => {\n if (!isRunning) return;\n\n try {\n // First request to start the run\n if (!messageId) {\n const response = await wechatClient.post(\"/api/runs\", {\n assistant_id: this.assistantId,\n thread_id: options.threadId,\n message: options.message,\n files: options.files,\n command: options.command,\n streaming: false, // We can't do true streaming in WeChat\n background: options.background || false,\n });\n\n // Get the message ID from the response\n if (response.data && response.data.id) {\n messageId = response.data.id;\n\n // Emit the first event\n onEvent({\n type: \"ai\",\n data: {\n id: messageId as string,\n content: response.data.output || \"\",\n },\n });\n\n // If there are tool calls, emit them\n if (\n response.data.tool_calls &&\n response.data.tool_calls.length > 0\n ) {\n onEvent({\n type: \"ai\",\n data: {\n id: messageId as string,\n tool_calls: response.data.tool_calls,\n },\n });\n }\n\n // If we have a complete response, we can finish\n if (onComplete) {\n if (options.enableReturnStateWhenSteamCompleted) {\n try {\n const state = await this.getAgentState(options.threadId);\n onComplete(state);\n } catch (error) {\n onComplete();\n }\n } else {\n onComplete();\n }\n }\n }\n }\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(String(error)));\n }\n isRunning = false;\n }\n };\n\n // Start polling\n poll();\n\n // Return a function to stop polling\n return () => {\n isRunning = false;\n };\n }\n\n /**\n * Chat namespace for sending messages and streaming responses\n */\n chat = {\n /**\n * Sends a message to a thread and receives a response\n * @param options - Options for sending a message\n * @returns A promise that resolves to the chat response\n */\n send: async (options: ChatSendOptions): Promise<ChatResponse> => {\n try {\n // Extract the message from the messages array (assuming the last message is the one to send)\n const message = options.messages[options.messages.length - 1];\n\n // Use the run method to send the message\n const result = await this.run({\n threadId: options.threadId,\n message:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n streaming: false,\n });\n\n return {\n message: {\n role: \"ai\",\n content: result.output || \"\",\n id: result.id || \"\",\n },\n traceId: result.id || \"\",\n };\n } catch (error) {\n throw error;\n }\n },\n\n /**\n * Sends a message to a thread and streams the response\n * @param options - Options for streaming a message\n * @param onEvent - Callback function that receives stream events\n * @param onComplete - Optional callback function called when streaming completes\n * @param onError - Optional callback function called when an error occurs\n * @returns A function that can be called to stop the stream\n */\n stream: (\n options: ChatStreamOptions,\n onEvent: (event: MessageChunk) => void,\n onComplete?: (state?: AgentState) => void,\n onError?: (error: Error) => void\n ): (() => void) => {\n // Extract the message from the messages array (assuming the last message is the one to send)\n const message = options.messages[options.messages.length - 1];\n\n // Use the streamRun method to stream the response\n return this.streamRun(\n {\n threadId: options.threadId,\n message:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n streaming: true,\n background: options.background,\n enableReturnStateWhenSteamCompleted:\n options.enableReturnStateWhenSteamCompleted,\n },\n onEvent,\n onComplete,\n onError\n );\n },\n };\n\n /**\n * Tools namespace for registering and unregistering client-side tools\n */\n tools = {\n /**\n * Registers a client-side tool\n * @param options - Options for registering a tool\n */\n register: (options: RegisterToolOptions): void => {\n if (this.config.transport !== \"ws\") {\n throw new Error(\n \"Client-side tools are only supported with WebSocket transport\"\n );\n }\n this.registeredTools.set(options.name, options);\n },\n\n /**\n * Unregisters a client-side tool\n * @param name - Tool name\n */\n unregister: (name: string): void => {\n this.registeredTools.delete(name);\n },\n };\n}\n","/**\n * WeChat Mini Program HTTP client implementation\n */\n\nimport { promisify } from \"miniprogram-api-promise\";\n\n// Define the interface for our WeChat client\nexport interface WechatClient {\n get(url: string, config?: any): Promise<any>;\n post(url: string, data?: any, config?: any): Promise<any>;\n delete(url: string, config?: any): Promise<any>;\n put(url: string, data?: any, config?: any): Promise<any>;\n patch(url: string, data?: any, config?: any): Promise<any>;\n head(url: string, config?: any): Promise<any>;\n options(url: string, config?: any): Promise<any>;\n defaults: {\n headers: Record<string, any>;\n };\n interceptors: {\n request: {\n use: (\n onFulfilled?: (value: any) => any,\n onRejected?: (error: any) => any\n ) => number;\n eject: (id: number) => void;\n };\n response: {\n use: (\n onFulfilled?: (value: any) => any,\n onRejected?: (error: any) => any\n ) => number;\n eject: (id: number) => void;\n };\n };\n CancelToken: {\n source: () => {\n token: any;\n cancel: (message?: string) => void;\n };\n };\n isCancel: (value: any) => boolean;\n}\n\n/**\n * Creates a WeChat Mini Program HTTP client that mimics the axios API\n * @param config - Configuration for the client\n * @returns A WeChat Mini Program HTTP client\n */\nexport function createWechatClient(config: {\n baseURL: string;\n timeout?: number;\n headers?: Record<string, string>;\n}): WechatClient {\n // Get the wx object from the global scope\n // Define a variable to hold the WeChat Mini Program API object\n let wxApi: any = null;\n\n // Try to get the wx object from different global scopes\n if (typeof global !== \"undefined\" && (global as any).wx) {\n wxApi = (global as any).wx;\n } else if (typeof globalThis !== \"undefined\" && (globalThis as any).wx) {\n wxApi = (globalThis as any).wx;\n } else {\n // Try to access window safely\n try {\n const win = globalThis as any;\n if (win.wx) {\n wxApi = win.wx;\n }\n } catch (e) {\n // Ignore errors when window is not available\n }\n }\n\n if (!wxApi) {\n throw new Error(\"WeChat Mini Program environment not detected\");\n }\n\n // Promisify the wx.request API\n const request = promisify(wxApi.request);\n\n // Default headers\n const defaultHeaders = {\n \"Content-Type\": \"application/json\",\n ...config.headers,\n };\n\n // Create interceptors\n const interceptors = {\n request: {\n handlers: [] as Array<{\n fulfilled?: (value: any) => any;\n rejected?: (error: any) => any;\n }>,\n use(fulfilled?: (value: any) => any, rejected?: (error: any) => any) {\n const id = this.handlers.length;\n this.handlers.push({ fulfilled, rejected });\n return id;\n },\n eject(id: number) {\n if (this.handlers[id]) {\n this.handlers[id] = {};\n }\n },\n },\n response: {\n handlers: [] as Array<{\n fulfilled?: (value: any) => any;\n rejected?: (error: any) => any;\n }>,\n use(fulfilled?: (value: any) => any, rejected?: (error: any) => any) {\n const id = this.handlers.length;\n this.handlers.push({ fulfilled, rejected });\n return id;\n },\n eject(id: number) {\n if (this.handlers[id]) {\n this.handlers[id] = {};\n }\n },\n },\n };\n\n // Process request config through interceptors\n const processRequestInterceptors = (requestConfig: any) => {\n let config = { ...requestConfig };\n\n for (const handler of interceptors.request.handlers) {\n if (handler.fulfilled) {\n try {\n config = handler.fulfilled(config);\n } catch (error) {\n if (handler.rejected) {\n handler.rejected(error);\n }\n throw error;\n }\n }\n }\n\n return config;\n };\n\n // Process response through interceptors\n const processResponseInterceptors = async (response: any) => {\n let result = response;\n\n for (const handler of interceptors.response.handlers) {\n if (handler.fulfilled) {\n try {\n result = await handler.fulfilled(result);\n } catch (error) {\n if (handler.rejected) {\n result = await handler.rejected(error);\n } else {\n throw error;\n }\n }\n }\n }\n\n return result;\n };\n\n // Process error through interceptors\n const processErrorInterceptors = async (error: any) => {\n let result = error;\n\n for (const handler of interceptors.response.handlers) {\n if (handler.rejected) {\n try {\n result = await handler.rejected(result);\n } catch (newError) {\n result = newError;\n }\n }\n }\n\n return Promise.reject(result);\n };\n\n // Cancel token implementation\n const CancelToken = {\n source() {\n let cancel: (message?: string) => void = () => {};\n\n const token = {\n promise: new Promise<string>((resolve) => {\n cancel = (message = \"Request cancelled\") => resolve(message);\n }),\n reason: undefined as string | undefined,\n };\n\n return {\n token,\n cancel,\n };\n },\n };\n\n // Check if an error is a cancellation\n const isCancel = (value: any) => {\n return value && value.__CANCEL__;\n };\n\n // Helper function to make requests\n const makeRequest = async (\n method: string,\n url: string,\n data?: any,\n customConfig?: any\n ) => {\n try {\n // Merge configs\n const requestConfig = processRequestInterceptors({\n url: `${config.baseURL}${url}`,\n method,\n data,\n header: { ...defaultHeaders, ...customConfig?.headers },\n timeout: config.timeout || 30000,\n ...customConfig,\n });\n\n // Check for cancellation\n if (customConfig?.cancelToken) {\n customConfig.cancelToken.promise.then((reason: string) => {\n // Mark as cancelled\n throw Object.assign(new Error(reason), { __CANCEL__: true });\n });\n }\n\n // Make the request\n const response = await request(requestConfig);\n\n // Transform response to match axios format\n const transformedResponse = {\n data: response.data,\n status: response.statusCode,\n statusText: response.errMsg,\n headers: response.header,\n config: requestConfig,\n };\n\n // Process through response interceptors\n return await processResponseInterceptors(transformedResponse);\n } catch (error) {\n return processErrorInterceptors(error);\n }\n };\n\n // Create the client object\n const client: WechatClient = {\n get: (url: string, customConfig?: any) =>\n makeRequest(\"GET\", url, null, customConfig),\n post: (url: string, data?: any, customConfig?: any) =>\n makeRequest(\"POST\", url, data, customConfig),\n delete: (url: string, customConfig?: any) =>\n makeRequest(\"DELETE\", url, null, customConfig),\n put: (url: string, data?: any, customConfig?: any) =>\n makeRequest(\"PUT\", url, data, customConfig),\n patch: (url: string, data?: any, customConfig?: any) =>\n makeRequest(\"PATCH\", url, data, customConfig),\n head: (url: string, customConfig?: any) =>\n makeRequest(\"HEAD\", url, null, customConfig),\n options: (url: string, customConfig?: any) =>\n makeRequest(\"OPTIONS\", url, null, customConfig),\n defaults: {\n headers: defaultHeaders,\n },\n interceptors: {\n request: {\n use: interceptors.request.use.bind(interceptors.request),\n eject: interceptors.request.eject.bind(interceptors.request),\n },\n response: {\n use: interceptors.response.use.bind(interceptors.response),\n eject: interceptors.response.eject.bind(interceptors.response),\n },\n },\n CancelToken,\n isCancel,\n };\n\n return client;\n}\n","/**\n * ChunkMessageMerger\n *\n * A utility for handling streaming message chunks and merging them into complete messages.\n */\n\nimport { Message, MessageChunk } from \"@axiom-lattice/protocols\";\n\n/**\n * Creates a simple message merger for handling streaming message chunks\n * @returns An object with methods to push chunks and retrieve merged messages\n */\nexport function createSimpleMessageMerger() {\n let messages: Message[] = [];\n const messageMap = new Map<string, number>();\n\n // Tool call builder: messageId -> index -> build state\n const toolBuilders = new Map<\n string,\n Map<\n number,\n {\n id?: string;\n name?: string;\n args: string; // Accumulated parameter string\n }\n >\n >();\n\n /**\n * Normalizes role string to standard role\n * @param type - Role string from the input\n * @returns Normalized role\n */\n function normalizeRole(type: string): string {\n switch (type) {\n case \"ai\":\n return \"ai\";\n case \"human\":\n case \"user\":\n return \"human\";\n case \"system\":\n return \"system\";\n case \"tool\":\n return \"tool\";\n case \"developer\":\n return \"developer\";\n default:\n return \"ai\";\n }\n }\n\n /**\n * Safely parses JSON string\n * @param str - JSON string to parse\n * @returns Parsed object or original string if parsing fails\n */\n function safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return str; // Return original string if parsing fails\n }\n }\n\n /**\n * Ensures a message exists, creating it if needed\n * @param id - Message ID\n * @param role - Message role\n * @returns The message object\n */\n function ensureMessage(id: string, role: string): any {\n const index = messageMap.get(id);\n if (index !== undefined) {\n return messages[index];\n }\n\n // Create new message\n let newMessage: any;\n switch (role) {\n case \"human\":\n newMessage = { id, role: \"human\", content: \"\" };\n break;\n case \"system\":\n newMessage = { id, role: \"system\", content: \"\" };\n break;\n case \"tool\":\n newMessage = { id, role: \"tool\", content: \"\", tool_call_id: \"\" };\n break;\n case \"developer\":\n newMessage = { id, role: \"developer\", content: \"\" };\n break;\n default:\n newMessage = { id, role: \"ai\", content: \"\" };\n }\n\n messages.push(newMessage);\n messageMap.set(id, messages.length - 1);\n return newMessage;\n }\n\n /**\n * Updates tool calls for a message\n * @param message - Message to update\n */\n function updateToolCalls(message: any) {\n if (message.role !== \"ai\") return;\n\n const builders = toolBuilders.get(message.id);\n if (!builders || builders.size === 0) return;\n\n const toolCalls: any[] = [];\n for (const [index, builder] of Array.from(builders.entries())) {\n if (builder.name && builder.id) {\n // Try to parse arguments as JSON object\n const args = builder.args.trim();\n const parsedArgs = safeJsonParse(args);\n\n // Create ToolCall object\n toolCalls.push({\n id: builder.id,\n name: builder.name,\n args:\n typeof parsedArgs === \"object\" ? parsedArgs : { value: parsedArgs },\n type: \"tool_call\",\n });\n }\n }\n\n // Only set tool_calls if there are any\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n }\n\n /**\n * Initialize messages\n * @param msgs - Initial messages\n */\n function initialMessages(msgs: any[]) {\n // Just store the messages as-is\n messages = msgs;\n }\n\n /**\n * Processes a message chunk\n * @param chunk - Message chunk to process\n */\n function push(chunk: MessageChunk) {\n const role = normalizeRole(chunk.type);\n const message = ensureMessage(chunk.data.id, role);\n\n // Accumulate content\n if (chunk.data.content) {\n message.content = (message.content || \"\") + chunk.data.content;\n }\n\n // Handle tool call ID (for tool messages)\n if (message.role === \"tool\" && chunk.data.tool_call_id) {\n message.tool_call_id = chunk.data.tool_call_id;\n }\n\n // Handle tool call chunks (incremental)\n if (chunk.data.tool_call_chunks && message.role === \"ai\") {\n let builders = toolBuilders.get(message.id);\n if (!builders) {\n builders = new Map();\n toolBuilders.set(message.id, builders);\n }\n\n for (const chunk_item of chunk.data.tool_call_chunks) {\n let builder = builders.get(chunk_item.index);\n if (!builder) {\n builder = { args: \"\" };\n builders.set(chunk_item.index, builder);\n }\n\n if (chunk_item.name) builder.name = chunk_item.name;\n if (chunk_item.id) builder.id = chunk_item.id;\n if (chunk_item.args) builder.args += chunk_item.args;\n }\n\n updateToolCalls(message);\n }\n\n // Handle complete tool calls (overwrite)\n if (chunk.data.tool_calls && message.role === \"ai\") {\n const toolCalls: any[] = chunk.data.tool_calls\n .filter((tc) => tc.name && tc.id)\n .map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: tc.args,\n type: \"tool_call\",\n response: tc.response,\n status: \"success\",\n }));\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n }\n\n // Handle tool calls in additional_kwargs\n if (\n chunk.data.additional_kwargs?.tool_calls &&\n message.role === \"ai\" &&\n !message.tool_calls\n ) {\n const toolCalls: any[] = [];\n\n for (const tc of chunk.data.additional_kwargs.tool_calls) {\n if (tc.function?.name && tc.id) {\n // Convert to our format\n const args =\n typeof tc.function.arguments === \"string\"\n ? safeJsonParse(tc.function.arguments)\n : tc.function.arguments || {};\n\n toolCalls.push({\n id: tc.id,\n name: tc.function.name,\n args,\n type: \"tool_call\",\n });\n }\n }\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n }\n }\n\n /**\n * Gets all messages with tool responses merged into tool calls\n * @returns Array of messages with tool responses merged into tool calls\n */\n function getMessages(): any[] {\n // Create a map to store tool responses by their tool_call_id\n const toolResponsesMap: Record<string, any> = {};\n\n // First pass: collect all tool responses\n messages.forEach((message) => {\n if (message.role === \"tool\" && message.tool_call_id) {\n toolResponsesMap[message.tool_call_id] = message;\n }\n });\n\n // Second pass: merge tool responses with their corresponding AI messages\n return messages\n .filter((message) => {\n // Keep all messages except tool messages\n return message.role !== \"tool\";\n })\n .map((message) => {\n if (message.role === \"ai\" && message.tool_calls) {\n // Create a new message object with merged tool responses\n const mergedMessage = { ...message };\n\n // Add tool responses to the corresponding tool calls\n if (mergedMessage.tool_calls) {\n mergedMessage.tool_calls = mergedMessage.tool_calls.map(\n (toolCall: any) => {\n const toolResponse = toolResponsesMap[toolCall.id];\n if (toolResponse) {\n return {\n ...toolCall,\n response: toolResponse.content,\n status: \"success\",\n };\n }\n return toolCall;\n }\n );\n }\n\n return mergedMessage;\n }\n return message;\n });\n }\n\n /**\n * Gets messages without tool calls\n * @returns Array of messages without tool calls\n */\n function getMessagesWithoutToolCalls(): any[] {\n return messages.filter(\n (message) =>\n message.role !== \"tool\" &&\n (message.role !== \"ai\" || !message.tool_calls)\n );\n }\n\n /**\n * Resets the message merger state\n */\n function reset() {\n messages.length = 0;\n messageMap.clear();\n toolBuilders.clear();\n }\n\n return {\n push,\n initialMessages,\n getMessages,\n getMessagesWithoutToolCalls,\n reset,\n };\n}\n"],"mappings":"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","names":["config","axios"]}
|