@copilotkitnext/core 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core.ts","../src/agent.ts","../src/types.ts","../src/utils/markdown.ts"],"sourcesContent":["import {\n AgentDescription,\n DEFAULT_AGENT_ID,\n randomUUID,\n RuntimeInfo,\n logger,\n} from \"@copilotkitnext/shared\";\nimport {\n AbstractAgent,\n AgentSubscriber,\n Context,\n HttpAgent,\n Message,\n RunAgentResult,\n} from \"@ag-ui/client\";\nimport { FrontendTool } from \"./types\";\nimport { ProxiedCopilotRuntimeAgent } from \"./agent\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\n/** Configuration options for `CopilotKitCore`. */\nexport interface CopilotKitCoreConfig {\n /** The endpoint of the CopilotRuntime. */\n runtimeUrl?: string;\n /** Mapping from agent name to its `AbstractAgent` instance. */\n agents?: Record<string, AbstractAgent>;\n /** Headers appended to every HTTP request made by `CopilotKitCore`. */\n headers?: Record<string, string>;\n /** Properties sent as `forwardedProps` to the AG-UI agent. */\n properties?: Record<string, unknown>;\n /** Ordered collection of frontend tools available to the core. */\n tools?: FrontendTool<any>[];\n}\n\nexport interface CopilotKitCoreAddAgentParams {\n id: string;\n agent: AbstractAgent;\n}\n\nexport interface CopilotKitCoreRunAgentParams {\n agent: AbstractAgent;\n withMessages?: Message[];\n agentId?: string;\n}\n\nexport interface CopilotKitCoreConnectAgentParams {\n agent: AbstractAgent;\n agentId?: string;\n}\n\nexport interface CopilotKitCoreGetToolParams {\n toolName: string;\n agentId?: string;\n}\n\nexport enum CopilotKitCoreErrorCode {\n RUNTIME_INFO_FETCH_FAILED = \"runtime_info_fetch_failed\",\n AGENT_CONNECT_FAILED = \"agent_connect_failed\",\n AGENT_RUN_FAILED = \"agent_run_failed\",\n AGENT_RUN_FAILED_EVENT = \"agent_run_failed_event\",\n AGENT_RUN_ERROR_EVENT = \"agent_run_error_event\",\n TOOL_ARGUMENT_PARSE_FAILED = \"tool_argument_parse_failed\",\n TOOL_HANDLER_FAILED = \"tool_handler_failed\",\n}\n\nexport interface CopilotKitCoreSubscriber {\n onRuntimeConnectionStatusChanged?: (event: {\n copilotkit: CopilotKitCore;\n status: CopilotKitCoreRuntimeConnectionStatus;\n }) => void | Promise<void>;\n onToolExecutionStart?: (event: {\n copilotkit: CopilotKitCore;\n toolCallId: string;\n agentId: string;\n toolName: string;\n args: unknown;\n }) => void | Promise<void>;\n onToolExecutionEnd?: (event: {\n copilotkit: CopilotKitCore;\n toolCallId: string;\n agentId: string;\n toolName: string;\n result: string;\n error?: string;\n }) => void | Promise<void>;\n onAgentsChanged?: (event: {\n copilotkit: CopilotKitCore;\n agents: Readonly<Record<string, AbstractAgent>>;\n }) => void | Promise<void>;\n onContextChanged?: (event: {\n copilotkit: CopilotKitCore;\n context: Readonly<Record<string, Context>>;\n }) => void | Promise<void>;\n onPropertiesChanged?: (event: {\n copilotkit: CopilotKitCore;\n properties: Readonly<Record<string, unknown>>;\n }) => void | Promise<void>;\n onHeadersChanged?: (event: {\n copilotkit: CopilotKitCore;\n headers: Readonly<Record<string, string>>;\n }) => void | Promise<void>;\n onError?: (event: {\n copilotkit: CopilotKitCore;\n error: Error;\n code: CopilotKitCoreErrorCode;\n context: Record<string, any>;\n }) => void | Promise<void>;\n}\n\nexport enum CopilotKitCoreRuntimeConnectionStatus {\n Disconnected = \"disconnected\",\n Connected = \"connected\",\n Connecting = \"connecting\",\n Error = \"error\",\n}\n\nexport class CopilotKitCore {\n headers: Record<string, string>;\n properties: Record<string, unknown>;\n\n private _context: Record<string, Context> = {};\n private _agents: Record<string, AbstractAgent> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _tools: FrontendTool<any>[] = [];\n\n private localAgents: Record<string, AbstractAgent> = {};\n private remoteAgents: Record<string, AbstractAgent> = {};\n private subscribers: Set<CopilotKitCoreSubscriber> = new Set();\n\n private _runtimeUrl?: string;\n private _runtimeVersion?: string;\n private _runtimeConnectionStatus: CopilotKitCoreRuntimeConnectionStatus =\n CopilotKitCoreRuntimeConnectionStatus.Disconnected;\n\n constructor({\n runtimeUrl,\n headers = {},\n properties = {},\n agents = {},\n tools = [],\n }: CopilotKitCoreConfig) {\n this.headers = headers;\n this.properties = properties;\n this.localAgents = this.assignAgentIds(agents);\n this._agents = this.localAgents;\n this._tools = tools;\n this.setRuntimeUrl(runtimeUrl);\n }\n\n private assignAgentIds(agents: Record<string, AbstractAgent>) {\n Object.entries(agents).forEach(([id, agent]) => {\n if (agent && !agent.agentId) {\n agent.agentId = id;\n }\n });\n return agents;\n }\n\n private async notifySubscribers(\n handler: (subscriber: CopilotKitCoreSubscriber) => void | Promise<void>,\n errorMessage: string\n ) {\n await Promise.all(\n Array.from(this.subscribers).map(async (subscriber) => {\n try {\n await handler(subscriber);\n } catch (error) {\n logger.error(errorMessage, error);\n }\n })\n );\n }\n\n private async emitError({\n error,\n code,\n context = {},\n }: {\n error: Error;\n code: CopilotKitCoreErrorCode;\n context?: Record<string, any>;\n }) {\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onError?.({\n copilotkit: this,\n error,\n code,\n context,\n }),\n \"Subscriber onError error:\"\n );\n }\n\n private resolveAgentId(\n agent: AbstractAgent,\n providedAgentId?: string\n ): string {\n if (providedAgentId) {\n return providedAgentId;\n }\n if (agent.agentId) {\n return agent.agentId;\n }\n const found = Object.entries(this._agents).find(([, storedAgent]) => {\n return storedAgent === agent;\n });\n if (found) {\n agent.agentId = found[0];\n return found[0];\n }\n agent.agentId = DEFAULT_AGENT_ID;\n return DEFAULT_AGENT_ID;\n }\n\n /**\n * Snapshot accessors\n */\n get context(): Readonly<Record<string, Context>> {\n return this._context;\n }\n\n get agents(): Readonly<Record<string, AbstractAgent>> {\n return this._agents;\n }\n\n get tools(): Readonly<FrontendTool<any>[]> {\n return this._tools;\n }\n\n get runtimeUrl(): string | undefined {\n return this._runtimeUrl;\n }\n\n setRuntimeUrl(runtimeUrl: string | undefined) {\n const normalizedRuntimeUrl = runtimeUrl\n ? runtimeUrl.replace(/\\/$/, \"\")\n : undefined;\n\n if (this._runtimeUrl === normalizedRuntimeUrl) {\n return;\n }\n\n this._runtimeUrl = normalizedRuntimeUrl;\n void this.updateRuntimeConnection();\n }\n\n get runtimeVersion(): string | undefined {\n return this._runtimeVersion;\n }\n\n get runtimeConnectionStatus(): CopilotKitCoreRuntimeConnectionStatus {\n return this._runtimeConnectionStatus;\n }\n\n /**\n * Runtime connection\n */\n private async updateRuntimeConnection() {\n if (!this.runtimeUrl) {\n this._runtimeConnectionStatus =\n CopilotKitCoreRuntimeConnectionStatus.Disconnected;\n this._runtimeVersion = undefined;\n this.remoteAgents = {};\n this._agents = this.localAgents;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Disconnected,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\"\n );\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\"\n );\n return;\n }\n\n this._runtimeConnectionStatus =\n CopilotKitCoreRuntimeConnectionStatus.Connecting;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Connecting,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\"\n );\n\n try {\n const response = await fetch(`${this.runtimeUrl}/info`, {\n headers: this.headers,\n });\n const {\n version,\n ...runtimeInfo\n }: {\n agents: Record<string, AgentDescription>;\n version: string;\n } = (await response.json()) as RuntimeInfo;\n\n const agents: Record<string, AbstractAgent> = Object.fromEntries(\n Object.entries(runtimeInfo.agents).map(([id, { description }]) => {\n const agent = new ProxiedCopilotRuntimeAgent({\n runtimeUrl: this.runtimeUrl,\n agentId: id,\n description: description,\n });\n return [id, agent];\n })\n );\n\n this.remoteAgents = agents;\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n this._runtimeConnectionStatus =\n CopilotKitCoreRuntimeConnectionStatus.Connected;\n this._runtimeVersion = version;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Connected,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\"\n );\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\"\n );\n } catch (error) {\n this._runtimeConnectionStatus =\n CopilotKitCoreRuntimeConnectionStatus.Error;\n this._runtimeVersion = undefined;\n this.remoteAgents = {};\n this._agents = this.localAgents;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Error,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\"\n );\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\"\n );\n const message =\n error instanceof Error ? error.message : JSON.stringify(error);\n logger.warn(\n `Failed to load runtime info (${this.runtimeUrl}/info): ${message}`\n );\n const runtimeError =\n error instanceof Error ? error : new Error(String(error));\n await this.emitError({\n error: runtimeError,\n code: CopilotKitCoreErrorCode.RUNTIME_INFO_FETCH_FAILED,\n context: {\n runtimeUrl: this.runtimeUrl,\n },\n });\n }\n }\n\n /**\n * Configuration updates\n */\n setHeaders(headers: Record<string, string>) {\n this.headers = headers;\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onHeadersChanged?.({\n copilotkit: this,\n headers: this.headers,\n }),\n \"Subscriber onHeadersChanged error:\"\n );\n }\n\n setProperties(properties: Record<string, unknown>) {\n this.properties = properties;\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onPropertiesChanged?.({\n copilotkit: this,\n properties: this.properties,\n }),\n \"Subscriber onPropertiesChanged error:\"\n );\n }\n\n setAgents(agents: Record<string, AbstractAgent>) {\n this.localAgents = this.assignAgentIds(agents);\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\"\n );\n }\n\n addAgent({ id, agent }: CopilotKitCoreAddAgentParams) {\n this.localAgents[id] = agent;\n if (!agent.agentId) {\n agent.agentId = id;\n }\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\"\n );\n }\n\n removeAgent(id: string) {\n delete this.localAgents[id];\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\"\n );\n }\n\n getAgent(id: string): AbstractAgent | undefined {\n if (id in this._agents) {\n return this._agents[id] as AbstractAgent;\n }\n\n if (\n this.runtimeUrl !== undefined &&\n (this.runtimeConnectionStatus ===\n CopilotKitCoreRuntimeConnectionStatus.Disconnected ||\n this.runtimeConnectionStatus ===\n CopilotKitCoreRuntimeConnectionStatus.Connecting)\n ) {\n return undefined;\n } else {\n console.warn(`Agent ${id} not found`);\n return undefined;\n }\n }\n\n /**\n * Context management\n */\n addContext({ description, value }: Context): string {\n const id = randomUUID();\n this._context[id] = { description, value };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onContextChanged?.({\n copilotkit: this,\n context: this._context,\n }),\n \"Subscriber onContextChanged error:\"\n );\n return id;\n }\n\n removeContext(id: string) {\n delete this._context[id];\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onContextChanged?.({\n copilotkit: this,\n context: this._context,\n }),\n \"Subscriber onContextChanged error:\"\n );\n }\n\n /**\n * Tool management\n */\n addTool<T extends Record<string, unknown> = Record<string, unknown>>(\n tool: FrontendTool<T>\n ) {\n // Check if a tool with the same name and agentId already exists\n const existingToolIndex = this._tools.findIndex(\n (t) => t.name === tool.name && t.agentId === tool.agentId\n );\n\n if (existingToolIndex !== -1) {\n logger.warn(\n `Tool already exists: '${tool.name}' for agent '${tool.agentId || \"global\"}', skipping.`\n );\n return;\n }\n\n this._tools.push(tool);\n }\n\n removeTool(id: string, agentId?: string) {\n this._tools = this._tools.filter((tool) => {\n // Remove tool if both name and agentId match\n if (agentId !== undefined) {\n return !(tool.name === id && tool.agentId === agentId);\n }\n // If no agentId specified, only remove global tools with matching name\n return !(tool.name === id && !tool.agentId);\n });\n }\n\n /**\n * Get a tool by name and optionally by agentId.\n * If agentId is provided, it will first look for an agent-specific tool,\n * then fall back to a global tool with the same name.\n */\n getTool(params: CopilotKitCoreGetToolParams): FrontendTool<any> | undefined {\n const { toolName, agentId } = params;\n\n // If agentId is provided, first look for agent-specific tool\n if (agentId) {\n const agentTool = this._tools.find(\n (tool) => tool.name === toolName && tool.agentId === agentId\n );\n if (agentTool) {\n return agentTool;\n }\n }\n\n // Fall back to global tool (no agentId)\n return this._tools.find((tool) => tool.name === toolName && !tool.agentId);\n }\n\n /**\n * Set all tools at once. Replaces existing tools.\n */\n setTools(tools: FrontendTool<any>[]) {\n this._tools = [...tools];\n }\n\n /**\n * Subscription lifecycle\n */\n subscribe(subscriber: CopilotKitCoreSubscriber): () => void {\n this.subscribers.add(subscriber);\n\n // Return unsubscribe function\n return () => {\n this.unsubscribe(subscriber);\n };\n }\n\n unsubscribe(subscriber: CopilotKitCoreSubscriber) {\n this.subscribers.delete(subscriber);\n }\n\n /**\n * Agent connectivity\n */\n async connectAgent({\n agent,\n agentId,\n }: CopilotKitCoreConnectAgentParams): Promise<RunAgentResult> {\n try {\n if (agent instanceof HttpAgent) {\n agent.headers = { ...this.headers };\n }\n\n const runAgentResult = await agent.connectAgent(\n {\n forwardedProps: this.properties,\n tools: this.buildFrontendTools(agentId),\n },\n this.createAgentErrorSubscriber(agent, agentId)\n );\n\n return this.processAgentResult({ runAgentResult, agent, agentId });\n } catch (error) {\n const connectError =\n error instanceof Error ? error : new Error(String(error));\n const context: Record<string, any> = {};\n if (agentId ?? agent.agentId) {\n context.agentId = agentId ?? agent.agentId;\n }\n await this.emitError({\n error: connectError,\n code: CopilotKitCoreErrorCode.AGENT_CONNECT_FAILED,\n context,\n });\n throw error;\n }\n }\n\n async runAgent({\n agent,\n withMessages,\n agentId,\n }: CopilotKitCoreRunAgentParams): Promise<RunAgentResult> {\n if (agent instanceof HttpAgent) {\n agent.headers = { ...this.headers };\n }\n\n if (withMessages) {\n agent.addMessages(withMessages);\n }\n try {\n const runAgentResult = await agent.runAgent(\n {\n forwardedProps: this.properties,\n tools: this.buildFrontendTools(agentId),\n },\n this.createAgentErrorSubscriber(agent, agentId)\n );\n return this.processAgentResult({ runAgentResult, agent, agentId });\n } catch (error) {\n const runError =\n error instanceof Error ? error : new Error(String(error));\n const context: Record<string, any> = {};\n if (agentId ?? agent.agentId) {\n context.agentId = agentId ?? agent.agentId;\n }\n if (withMessages) {\n context.messageCount = withMessages.length;\n }\n await this.emitError({\n error: runError,\n code: CopilotKitCoreErrorCode.AGENT_RUN_FAILED,\n context,\n });\n throw error;\n }\n }\n\n private async processAgentResult({\n runAgentResult,\n agent,\n agentId,\n }: {\n runAgentResult: RunAgentResult;\n agent: AbstractAgent;\n agentId: string | undefined;\n }): Promise<RunAgentResult> {\n const { newMessages } = runAgentResult;\n const effectiveAgentId = this.resolveAgentId(agent, agentId);\n\n let needsFollowUp = false;\n\n for (const message of newMessages) {\n if (message.role === \"assistant\") {\n for (const toolCall of message.toolCalls || []) {\n if (\n newMessages.findIndex(\n (m) => m.role === \"tool\" && m.toolCallId === toolCall.id\n ) === -1\n ) {\n const tool = this.getTool({\n toolName: toolCall.function.name,\n agentId,\n });\n if (tool) {\n // Check if tool is constrained to a specific agent\n if (tool?.agentId && tool.agentId !== agentId) {\n // Tool is not available for this agent, skip it\n continue;\n }\n\n let toolCallResult = \"\";\n let errorMessage: string | undefined;\n let isArgumentError = false;\n if (tool?.handler) {\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(toolCall.function.arguments);\n } catch (error) {\n const parseError =\n error instanceof Error ? error : new Error(String(error));\n errorMessage = parseError.message;\n isArgumentError = true;\n await this.emitError({\n error: parseError,\n code: CopilotKitCoreErrorCode.TOOL_ARGUMENT_PARSE_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n rawArguments: toolCall.function.arguments,\n toolType: \"specific\",\n messageId: message.id,\n },\n });\n }\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionStart?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n args: parsedArgs,\n }),\n \"Subscriber onToolExecutionStart error:\"\n );\n\n if (!errorMessage) {\n try {\n const result = await tool.handler(\n parsedArgs as any,\n toolCall\n );\n if (result === undefined || result === null) {\n toolCallResult = \"\";\n } else if (typeof result === \"string\") {\n toolCallResult = result;\n } else {\n toolCallResult = JSON.stringify(result);\n }\n } catch (error) {\n const handlerError =\n error instanceof Error ? error : new Error(String(error));\n errorMessage = handlerError.message;\n await this.emitError({\n error: handlerError,\n code: CopilotKitCoreErrorCode.TOOL_HANDLER_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n parsedArgs,\n toolType: \"specific\",\n messageId: message.id,\n },\n });\n }\n }\n\n if (errorMessage) {\n toolCallResult = `Error: ${errorMessage}`;\n }\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionEnd?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n result: errorMessage ? \"\" : toolCallResult,\n error: errorMessage,\n }),\n \"Subscriber onToolExecutionEnd error:\"\n );\n\n if (isArgumentError) {\n throw new Error(errorMessage ?? \"Tool execution failed\");\n }\n }\n\n if (!errorMessage || !isArgumentError) {\n const messageIndex = agent.messages.findIndex(\n (m) => m.id === message.id\n );\n const toolMessage = {\n id: randomUUID(),\n role: \"tool\" as const,\n toolCallId: toolCall.id,\n content: toolCallResult,\n };\n agent.messages.splice(messageIndex + 1, 0, toolMessage);\n\n if (!errorMessage && tool?.followUp !== false) {\n needsFollowUp = true;\n }\n }\n } else {\n // Wildcard fallback for undefined tools\n const wildcardTool = this.getTool({ toolName: \"*\", agentId });\n if (wildcardTool) {\n // Check if wildcard tool is constrained to a specific agent\n if (wildcardTool?.agentId && wildcardTool.agentId !== agentId) {\n // Wildcard tool is not available for this agent, skip it\n continue;\n }\n\n let toolCallResult = \"\";\n let errorMessage: string | undefined;\n let isArgumentError = false;\n if (wildcardTool?.handler) {\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(toolCall.function.arguments);\n } catch (error) {\n const parseError =\n error instanceof Error ? error : new Error(String(error));\n errorMessage = parseError.message;\n isArgumentError = true;\n await this.emitError({\n error: parseError,\n code: CopilotKitCoreErrorCode.TOOL_ARGUMENT_PARSE_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n rawArguments: toolCall.function.arguments,\n toolType: \"wildcard\",\n messageId: message.id,\n },\n });\n }\n\n const wildcardArgs = {\n toolName: toolCall.function.name,\n args: parsedArgs,\n };\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionStart?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n args: wildcardArgs,\n }),\n \"Subscriber onToolExecutionStart error:\"\n );\n\n if (!errorMessage) {\n try {\n const result = await wildcardTool.handler(\n wildcardArgs as any,\n toolCall\n );\n if (result === undefined || result === null) {\n toolCallResult = \"\";\n } else if (typeof result === \"string\") {\n toolCallResult = result;\n } else {\n toolCallResult = JSON.stringify(result);\n }\n } catch (error) {\n const handlerError =\n error instanceof Error\n ? error\n : new Error(String(error));\n errorMessage = handlerError.message;\n await this.emitError({\n error: handlerError,\n code: CopilotKitCoreErrorCode.TOOL_HANDLER_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n parsedArgs: wildcardArgs,\n toolType: \"wildcard\",\n messageId: message.id,\n },\n });\n }\n }\n\n if (errorMessage) {\n toolCallResult = `Error: ${errorMessage}`;\n }\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionEnd?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n result: errorMessage ? \"\" : toolCallResult,\n error: errorMessage,\n }),\n \"Subscriber onToolExecutionEnd error:\"\n );\n\n if (isArgumentError) {\n throw new Error(errorMessage ?? \"Tool execution failed\");\n }\n }\n\n if (!errorMessage || !isArgumentError) {\n const messageIndex = agent.messages.findIndex(\n (m) => m.id === message.id\n );\n const toolMessage = {\n id: randomUUID(),\n role: \"tool\" as const,\n toolCallId: toolCall.id,\n content: toolCallResult,\n };\n agent.messages.splice(messageIndex + 1, 0, toolMessage);\n\n if (!errorMessage && wildcardTool?.followUp !== false) {\n needsFollowUp = true;\n }\n }\n }\n }\n }\n }\n }\n }\n\n if (needsFollowUp) {\n return await this.runAgent({ agent, agentId });\n }\n\n return runAgentResult;\n }\n\n private buildFrontendTools(agentId?: string) {\n return this._tools\n .filter((tool) => !tool.agentId || tool.agentId === agentId)\n .map((tool) => ({\n name: tool.name,\n description: tool.description ?? \"\",\n parameters: createToolSchema(tool),\n }));\n }\n\n private createAgentErrorSubscriber(\n agent: AbstractAgent,\n agentId?: string\n ): AgentSubscriber {\n const emitAgentError = async (\n error: Error,\n code: CopilotKitCoreErrorCode,\n extraContext: Record<string, any> = {}\n ) => {\n const context: Record<string, any> = { ...extraContext };\n if (agentId ?? agent.agentId) {\n context.agentId = agentId ?? agent.agentId;\n }\n await this.emitError({\n error,\n code,\n context,\n });\n };\n\n return {\n onRunFailed: async ({ error }: { error: Error }) => {\n await emitAgentError(\n error,\n CopilotKitCoreErrorCode.AGENT_RUN_FAILED_EVENT,\n {\n source: \"onRunFailed\",\n }\n );\n },\n onRunErrorEvent: async ({ event }) => {\n const eventError =\n event?.rawEvent instanceof Error\n ? event.rawEvent\n : event?.rawEvent?.error instanceof Error\n ? event.rawEvent.error\n : undefined;\n\n const errorMessage =\n typeof event?.rawEvent?.error === \"string\"\n ? event.rawEvent.error\n : (event?.message ?? \"Agent run error\");\n\n const rawError = eventError ?? new Error(errorMessage);\n\n if (event?.code && !(rawError as any).code) {\n (rawError as any).code = event.code;\n }\n\n await emitAgentError(\n rawError,\n CopilotKitCoreErrorCode.AGENT_RUN_ERROR_EVENT,\n {\n source: \"onRunErrorEvent\",\n event,\n runtimeErrorCode: event?.code,\n }\n );\n },\n };\n }\n}\n\nconst EMPTY_TOOL_SCHEMA = {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n} as const satisfies Record<string, unknown>;\n\nfunction createToolSchema(tool: FrontendTool<any>): Record<string, unknown> {\n if (!tool.parameters) {\n return EMPTY_TOOL_SCHEMA;\n }\n\n const rawSchema = zodToJsonSchema(tool.parameters, {\n $refStrategy: \"none\",\n });\n\n if (!rawSchema || typeof rawSchema !== \"object\") {\n return { ...EMPTY_TOOL_SCHEMA };\n }\n\n const { $schema, ...schema } = rawSchema as Record<string, unknown>;\n\n if (typeof schema.type !== \"string\") {\n schema.type = \"object\";\n }\n if (typeof schema.properties !== \"object\" || schema.properties === null) {\n schema.properties = {};\n }\n if (schema.additionalProperties === undefined) {\n schema.additionalProperties = false;\n }\n\n return schema;\n}\n","import {\n BaseEvent,\n HttpAgent,\n HttpAgentConfig,\n RunAgentInput,\n runHttpRequest,\n transformHttpEventStream,\n} from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface ProxiedCopilotRuntimeAgentConfig\n extends Omit<HttpAgentConfig, \"url\"> {\n runtimeUrl?: string;\n}\n\nexport class ProxiedCopilotRuntimeAgent extends HttpAgent {\n runtimeUrl?: string;\n\n constructor(config: ProxiedCopilotRuntimeAgentConfig) {\n super({\n ...config,\n url: `${config.runtimeUrl}/agent/${config.agentId}/run`,\n });\n this.runtimeUrl = config.runtimeUrl;\n }\n\n connect(input: RunAgentInput): Observable<BaseEvent> {\n const httpEvents = runHttpRequest(\n `${this.runtimeUrl}/agent/${this.agentId}/connect`,\n this.requestInit(input)\n );\n return transformHttpEventStream(httpEvents);\n }\n}\n","import { ToolCall } from \"@ag-ui/client\";\nimport { z } from \"zod\";\n\n/**\n * Status of a tool call execution\n */\nexport enum ToolCallStatus {\n InProgress = \"inProgress\",\n Executing = \"executing\",\n Complete = \"complete\",\n}\n\nexport type FrontendTool<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n name: string;\n description?: string;\n parameters?: z.ZodType<T>;\n handler?: (args: T, toolCall: ToolCall) => Promise<unknown>;\n followUp?: boolean;\n /**\n * Optional agent ID to constrain this tool to a specific agent.\n * If specified, this tool will only be available to the specified agent.\n */\n agentId?: string;\n};\n","export function completePartialMarkdown(input: string): string {\n let s = input;\n\n // Handle code fences first - use FIRST unmatched fence for proper nesting\n const fenceMatches = Array.from(s.matchAll(/^(\\s*)(`{3,}|~{3,})/gm));\n if (fenceMatches.length % 2 === 1) {\n const [, indent, fence] = fenceMatches[0]!;\n s += `\\n${indent}${fence}`;\n }\n\n // Identify incomplete links at the end and close them\n const incompleteLinkMatch = s.match(/\\[([^\\]]*)\\]\\(([^)]*)$/);\n if (incompleteLinkMatch) {\n s += \")\";\n }\n\n // State-based parsing\n interface OpenElement {\n type: string;\n marker: string;\n position: number;\n }\n\n const openElements: OpenElement[] = [];\n const chars = Array.from(s);\n\n // First pass: identify code block boundaries and inline code to avoid processing their content\n const codeBlockRanges: Array<{ start: number; end: number }> = [];\n const inlineCodeRanges: Array<{ start: number; end: number }> = [];\n\n // Find code block ranges\n let tempCodeFenceCount = 0;\n let currentCodeBlockStart = -1;\n\n for (let i = 0; i < chars.length; i++) {\n if (i === 0 || chars[i - 1] === \"\\n\") {\n const lineMatch = s.substring(i).match(/^(\\s*)(`{3,}|~{3,})/);\n if (lineMatch) {\n tempCodeFenceCount++;\n if (tempCodeFenceCount % 2 === 1) {\n currentCodeBlockStart = i;\n } else if (currentCodeBlockStart !== -1) {\n codeBlockRanges.push({\n start: currentCodeBlockStart,\n end: i + lineMatch[0].length,\n });\n currentCodeBlockStart = -1;\n }\n i += lineMatch[0].length - 1;\n }\n }\n }\n\n // Find inline code ranges\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] === \"`\") {\n // Check if escaped\n let backslashCount = 0;\n for (let j = i - 1; j >= 0 && chars[j] === \"\\\\\"; j--) {\n backslashCount++;\n }\n if (backslashCount % 2 === 0) {\n // Not escaped - find the closing backtick\n for (let j = i + 1; j < chars.length; j++) {\n if (chars[j] === \"`\") {\n let closingBackslashCount = 0;\n for (let k = j - 1; k >= 0 && chars[k] === \"\\\\\"; k--) {\n closingBackslashCount++;\n }\n if (closingBackslashCount % 2 === 0) {\n inlineCodeRanges.push({ start: i, end: j + 1 });\n i = j;\n break;\n }\n }\n }\n }\n }\n }\n\n // Helper function to check if position is in code\n const isInCode = (pos: number): boolean => {\n return (\n codeBlockRanges.some((range) => pos >= range.start && pos < range.end) ||\n inlineCodeRanges.some((range) => pos >= range.start && pos < range.end)\n );\n };\n\n // Second pass: process markdown elements, skipping code regions\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const nextChar = chars[i + 1];\n const prevChar = chars[i - 1];\n\n if (isInCode(i)) {\n continue;\n }\n\n // Handle brackets (but not if they're part of already-complete links)\n if (char === \"[\") {\n // Check if this is part of a complete link [text](url)\n let isCompleteLink = false;\n let bracketDepth = 1;\n let j = i + 1;\n\n // Find the matching ]\n while (j < chars.length && bracketDepth > 0) {\n if (chars[j] === \"[\" && !isInCode(j)) bracketDepth++;\n if (chars[j] === \"]\" && !isInCode(j)) bracketDepth--;\n j++;\n }\n\n // Check if followed by (\n if (bracketDepth === 0 && chars[j] === \"(\") {\n // Find the closing )\n let parenDepth = 1;\n j++;\n while (j < chars.length && parenDepth > 0) {\n if (chars[j] === \"(\" && !isInCode(j)) parenDepth++;\n if (chars[j] === \")\" && !isInCode(j)) parenDepth--;\n j++;\n }\n if (parenDepth === 0) {\n isCompleteLink = true;\n i = j - 1;\n continue;\n }\n }\n\n // This is a standalone bracket, treat as markdown\n if (!isCompleteLink) {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"bracket\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"bracket\", marker: \"[\", position: i });\n }\n }\n }\n\n // Handle double emphasis first (**, __, ~~) - these take precedence\n else if (char === \"*\" && nextChar === \"*\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"bold_star\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"bold_star\", marker: \"**\", position: i });\n }\n i++; // Skip next character\n } else if (char === \"_\" && nextChar === \"_\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"bold_underscore\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({\n type: \"bold_underscore\",\n marker: \"__\",\n position: i,\n });\n }\n i++; // Skip next character\n } else if (char === \"~\" && nextChar === \"~\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"strike\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"strike\", marker: \"~~\", position: i });\n }\n i++; // Skip next character\n }\n\n // Handle single emphasis (*, _) - only if not part of double\n else if (char === \"*\" && prevChar !== \"*\" && nextChar !== \"*\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"italic_star\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"italic_star\", marker: \"*\", position: i });\n }\n } else if (char === \"_\" && prevChar !== \"_\" && nextChar !== \"_\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"italic_underscore\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({\n type: \"italic_underscore\",\n marker: \"_\",\n position: i,\n });\n }\n }\n }\n\n // Handle remaining unmatched backticks (outside of inline code ranges)\n let backtickCount = 0;\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] === \"`\" && !isInCode(i)) {\n backtickCount++;\n }\n }\n if (backtickCount % 2 === 1) {\n s += \"`\";\n }\n\n // Close remaining open elements in reverse order (LIFO stack semantics)\n openElements.sort((a, b) => b.position - a.position);\n\n const closers = openElements.map((el) => {\n switch (el.type) {\n case \"bracket\":\n return \"]\";\n case \"bold_star\":\n return \"**\";\n case \"bold_underscore\":\n return \"__\";\n case \"strike\":\n return \"~~\";\n case \"italic_star\":\n return \"*\";\n case \"italic_underscore\":\n return \"_\";\n default:\n return \"\";\n }\n });\n\n let result = s + closers.join(\"\");\n\n // Handle parentheses ONLY if not inside code\n const finalFenceMatches = Array.from(\n result.matchAll(/^(\\s*)(`{3,}|~{3,})/gm)\n );\n const hasUnclosedBacktick = (result.match(/`/g) || []).length % 2 === 1;\n const hasUnclosedCodeFence = finalFenceMatches.length % 2 === 1;\n\n let shouldCloseParens = !hasUnclosedBacktick && !hasUnclosedCodeFence;\n\n if (shouldCloseParens) {\n const lastOpenParen = result.lastIndexOf(\"(\");\n if (lastOpenParen !== -1) {\n // Check if this paren is inside a backtick pair\n const beforeParen = result.substring(0, lastOpenParen);\n const backticksBeforeParen = (beforeParen.match(/`/g) || []).length;\n if (backticksBeforeParen % 2 === 1) {\n shouldCloseParens = false;\n }\n }\n }\n\n if (shouldCloseParens) {\n const openParens = (result.match(/\\(/g) || []).length;\n const closeParens = (result.match(/\\)/g) || []).length;\n if (openParens > closeParens) {\n result += \")\".repeat(openParens - closeParens);\n }\n }\n\n return result;\n}"],"mappings":"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","names":["HttpAgent","CopilotKitCoreErrorCode","CopilotKitCoreRuntimeConnectionStatus","HttpAgent","ToolCallStatus"]}
1
+ {"version":3,"sources":["../src/core.ts","../src/agent.ts","../src/types.ts","../src/utils/markdown.ts"],"sourcesContent":["import { AgentDescription, DEFAULT_AGENT_ID, randomUUID, RuntimeInfo, logger } from \"@copilotkitnext/shared\";\nimport { AbstractAgent, AgentSubscriber, Context, HttpAgent, Message, RunAgentResult } from \"@ag-ui/client\";\nimport { FrontendTool } from \"./types\";\nimport { ProxiedCopilotRuntimeAgent } from \"./agent\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\n/** Configuration options for `CopilotKitCore`. */\nexport interface CopilotKitCoreConfig {\n /** The endpoint of the CopilotRuntime. */\n runtimeUrl?: string;\n /** Mapping from agent name to its `AbstractAgent` instance. For development only - production requires CopilotRuntime. */\n agents__unsafe_dev_only?: Record<string, AbstractAgent>;\n /** Headers appended to every HTTP request made by `CopilotKitCore`. */\n headers?: Record<string, string>;\n /** Properties sent as `forwardedProps` to the AG-UI agent. */\n properties?: Record<string, unknown>;\n /** Ordered collection of frontend tools available to the core. */\n tools?: FrontendTool<any>[];\n}\n\nexport interface CopilotKitCoreAddAgentParams {\n id: string;\n agent: AbstractAgent;\n}\n\nexport interface CopilotKitCoreRunAgentParams {\n agent: AbstractAgent;\n withMessages?: Message[];\n agentId?: string;\n}\n\nexport interface CopilotKitCoreConnectAgentParams {\n agent: AbstractAgent;\n agentId?: string;\n}\n\nexport interface CopilotKitCoreGetToolParams {\n toolName: string;\n agentId?: string;\n}\n\nexport enum CopilotKitCoreErrorCode {\n RUNTIME_INFO_FETCH_FAILED = \"runtime_info_fetch_failed\",\n AGENT_CONNECT_FAILED = \"agent_connect_failed\",\n AGENT_RUN_FAILED = \"agent_run_failed\",\n AGENT_RUN_FAILED_EVENT = \"agent_run_failed_event\",\n AGENT_RUN_ERROR_EVENT = \"agent_run_error_event\",\n TOOL_ARGUMENT_PARSE_FAILED = \"tool_argument_parse_failed\",\n TOOL_HANDLER_FAILED = \"tool_handler_failed\",\n}\n\nexport interface CopilotKitCoreSubscriber {\n onRuntimeConnectionStatusChanged?: (event: {\n copilotkit: CopilotKitCore;\n status: CopilotKitCoreRuntimeConnectionStatus;\n }) => void | Promise<void>;\n onToolExecutionStart?: (event: {\n copilotkit: CopilotKitCore;\n toolCallId: string;\n agentId: string;\n toolName: string;\n args: unknown;\n }) => void | Promise<void>;\n onToolExecutionEnd?: (event: {\n copilotkit: CopilotKitCore;\n toolCallId: string;\n agentId: string;\n toolName: string;\n result: string;\n error?: string;\n }) => void | Promise<void>;\n onAgentsChanged?: (event: {\n copilotkit: CopilotKitCore;\n agents: Readonly<Record<string, AbstractAgent>>;\n }) => void | Promise<void>;\n onContextChanged?: (event: {\n copilotkit: CopilotKitCore;\n context: Readonly<Record<string, Context>>;\n }) => void | Promise<void>;\n onPropertiesChanged?: (event: {\n copilotkit: CopilotKitCore;\n properties: Readonly<Record<string, unknown>>;\n }) => void | Promise<void>;\n onHeadersChanged?: (event: {\n copilotkit: CopilotKitCore;\n headers: Readonly<Record<string, string>>;\n }) => void | Promise<void>;\n onError?: (event: {\n copilotkit: CopilotKitCore;\n error: Error;\n code: CopilotKitCoreErrorCode;\n context: Record<string, any>;\n }) => void | Promise<void>;\n}\n\nexport enum CopilotKitCoreRuntimeConnectionStatus {\n Disconnected = \"disconnected\",\n Connected = \"connected\",\n Connecting = \"connecting\",\n Error = \"error\",\n}\n\nexport class CopilotKitCore {\n private _headers: Record<string, string>;\n private _properties: Record<string, unknown>;\n\n private _context: Record<string, Context> = {};\n private _agents: Record<string, AbstractAgent> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _tools: FrontendTool<any>[] = [];\n\n private localAgents: Record<string, AbstractAgent> = {};\n private remoteAgents: Record<string, AbstractAgent> = {};\n private subscribers: Set<CopilotKitCoreSubscriber> = new Set();\n\n private _runtimeUrl?: string;\n private _runtimeVersion?: string;\n private _runtimeConnectionStatus: CopilotKitCoreRuntimeConnectionStatus =\n CopilotKitCoreRuntimeConnectionStatus.Disconnected;\n\n constructor({\n runtimeUrl,\n headers = {},\n properties = {},\n agents__unsafe_dev_only = {},\n tools = [],\n }: CopilotKitCoreConfig) {\n this._headers = headers;\n this._properties = properties;\n this.localAgents = this.assignAgentIds(agents__unsafe_dev_only);\n this.applyHeadersToAgents(this.localAgents);\n this._agents = this.localAgents;\n this._tools = tools;\n this.setRuntimeUrl(runtimeUrl);\n }\n\n private applyHeadersToAgent(agent: AbstractAgent) {\n if (agent instanceof HttpAgent) {\n agent.headers = { ...this.headers };\n }\n }\n\n private applyHeadersToAgents(agents: Record<string, AbstractAgent>) {\n Object.values(agents).forEach((agent) => {\n this.applyHeadersToAgent(agent);\n });\n }\n\n private assignAgentIds(agents: Record<string, AbstractAgent>) {\n Object.entries(agents).forEach(([id, agent]) => {\n if (agent && !agent.agentId) {\n agent.agentId = id;\n }\n });\n return agents;\n }\n\n private async notifySubscribers(\n handler: (subscriber: CopilotKitCoreSubscriber) => void | Promise<void>,\n errorMessage: string,\n ) {\n await Promise.all(\n Array.from(this.subscribers).map(async (subscriber) => {\n try {\n await handler(subscriber);\n } catch (error) {\n logger.error(errorMessage, error);\n }\n }),\n );\n }\n\n private async emitError({\n error,\n code,\n context = {},\n }: {\n error: Error;\n code: CopilotKitCoreErrorCode;\n context?: Record<string, any>;\n }) {\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onError?.({\n copilotkit: this,\n error,\n code,\n context,\n }),\n \"Subscriber onError error:\",\n );\n }\n\n private resolveAgentId(agent: AbstractAgent, providedAgentId?: string): string {\n if (providedAgentId) {\n return providedAgentId;\n }\n if (agent.agentId) {\n return agent.agentId;\n }\n const found = Object.entries(this._agents).find(([, storedAgent]) => {\n return storedAgent === agent;\n });\n if (found) {\n agent.agentId = found[0];\n return found[0];\n }\n agent.agentId = DEFAULT_AGENT_ID;\n return DEFAULT_AGENT_ID;\n }\n\n /**\n * Snapshot accessors\n */\n get context(): Readonly<Record<string, Context>> {\n return this._context;\n }\n\n get agents(): Readonly<Record<string, AbstractAgent>> {\n return this._agents;\n }\n\n get tools(): Readonly<FrontendTool<any>[]> {\n return this._tools;\n }\n\n get runtimeUrl(): string | undefined {\n return this._runtimeUrl;\n }\n\n setRuntimeUrl(runtimeUrl: string | undefined) {\n const normalizedRuntimeUrl = runtimeUrl ? runtimeUrl.replace(/\\/$/, \"\") : undefined;\n\n if (this._runtimeUrl === normalizedRuntimeUrl) {\n return;\n }\n\n this._runtimeUrl = normalizedRuntimeUrl;\n void this.updateRuntimeConnection();\n }\n\n get runtimeVersion(): string | undefined {\n return this._runtimeVersion;\n }\n\n get headers(): Readonly<Record<string, string>> {\n return this._headers;\n }\n\n get properties(): Readonly<Record<string, unknown>> {\n return this._properties;\n }\n\n get runtimeConnectionStatus(): CopilotKitCoreRuntimeConnectionStatus {\n return this._runtimeConnectionStatus;\n }\n\n /**\n * Runtime connection\n */\n private async updateRuntimeConnection() {\n if (!this.runtimeUrl) {\n this._runtimeConnectionStatus = CopilotKitCoreRuntimeConnectionStatus.Disconnected;\n this._runtimeVersion = undefined;\n this.remoteAgents = {};\n this._agents = this.localAgents;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Disconnected,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\",\n );\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\",\n );\n return;\n }\n\n this._runtimeConnectionStatus = CopilotKitCoreRuntimeConnectionStatus.Connecting;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Connecting,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\",\n );\n\n try {\n const response = await fetch(`${this.runtimeUrl}/info`, {\n headers: this.headers,\n });\n const {\n version,\n ...runtimeInfo\n }: {\n agents: Record<string, AgentDescription>;\n version: string;\n } = (await response.json()) as RuntimeInfo;\n\n const agents: Record<string, AbstractAgent> = Object.fromEntries(\n Object.entries(runtimeInfo.agents).map(([id, { description }]) => {\n const agent = new ProxiedCopilotRuntimeAgent({\n runtimeUrl: this.runtimeUrl,\n agentId: id,\n description: description,\n });\n this.applyHeadersToAgent(agent);\n return [id, agent];\n }),\n );\n\n this.remoteAgents = agents;\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n this._runtimeConnectionStatus = CopilotKitCoreRuntimeConnectionStatus.Connected;\n this._runtimeVersion = version;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Connected,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\",\n );\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\",\n );\n } catch (error) {\n this._runtimeConnectionStatus = CopilotKitCoreRuntimeConnectionStatus.Error;\n this._runtimeVersion = undefined;\n this.remoteAgents = {};\n this._agents = this.localAgents;\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onRuntimeConnectionStatusChanged?.({\n copilotkit: this,\n status: CopilotKitCoreRuntimeConnectionStatus.Error,\n }),\n \"Error in CopilotKitCore subscriber (onRuntimeConnectionStatusChanged):\",\n );\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\",\n );\n const message = error instanceof Error ? error.message : JSON.stringify(error);\n logger.warn(`Failed to load runtime info (${this.runtimeUrl}/info): ${message}`);\n const runtimeError = error instanceof Error ? error : new Error(String(error));\n await this.emitError({\n error: runtimeError,\n code: CopilotKitCoreErrorCode.RUNTIME_INFO_FETCH_FAILED,\n context: {\n runtimeUrl: this.runtimeUrl,\n },\n });\n }\n }\n\n /**\n * Configuration updates\n */\n setHeaders(headers: Record<string, string>) {\n this._headers = headers;\n this.applyHeadersToAgents(this._agents);\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onHeadersChanged?.({\n copilotkit: this,\n headers: this.headers,\n }),\n \"Subscriber onHeadersChanged error:\",\n );\n }\n\n setProperties(properties: Record<string, unknown>) {\n this._properties = properties;\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onPropertiesChanged?.({\n copilotkit: this,\n properties: this.properties,\n }),\n \"Subscriber onPropertiesChanged error:\",\n );\n }\n\n setAgents__unsafe_dev_only(agents: Record<string, AbstractAgent>) {\n this.localAgents = this.assignAgentIds(agents);\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n this.applyHeadersToAgents(this._agents);\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\",\n );\n }\n\n addAgent__unsafe_dev_only({ id, agent }: CopilotKitCoreAddAgentParams) {\n this.localAgents[id] = agent;\n if (!agent.agentId) {\n agent.agentId = id;\n }\n this.applyHeadersToAgent(agent);\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\",\n );\n }\n\n removeAgent__unsafe_dev_only(id: string) {\n delete this.localAgents[id];\n this._agents = { ...this.localAgents, ...this.remoteAgents };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onAgentsChanged?.({\n copilotkit: this,\n agents: this._agents,\n }),\n \"Subscriber onAgentsChanged error:\",\n );\n }\n\n getAgent(id: string): AbstractAgent | undefined {\n if (id in this._agents) {\n return this._agents[id] as AbstractAgent;\n }\n\n if (\n this.runtimeUrl !== undefined &&\n (this.runtimeConnectionStatus === CopilotKitCoreRuntimeConnectionStatus.Disconnected ||\n this.runtimeConnectionStatus === CopilotKitCoreRuntimeConnectionStatus.Connecting)\n ) {\n return undefined;\n } else {\n console.warn(`Agent ${id} not found`);\n return undefined;\n }\n }\n\n /**\n * Context management\n */\n addContext({ description, value }: Context): string {\n const id = randomUUID();\n this._context[id] = { description, value };\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onContextChanged?.({\n copilotkit: this,\n context: this._context,\n }),\n \"Subscriber onContextChanged error:\",\n );\n return id;\n }\n\n removeContext(id: string) {\n delete this._context[id];\n void this.notifySubscribers(\n (subscriber) =>\n subscriber.onContextChanged?.({\n copilotkit: this,\n context: this._context,\n }),\n \"Subscriber onContextChanged error:\",\n );\n }\n\n /**\n * Tool management\n */\n addTool<T extends Record<string, unknown> = Record<string, unknown>>(tool: FrontendTool<T>) {\n // Check if a tool with the same name and agentId already exists\n const existingToolIndex = this._tools.findIndex((t) => t.name === tool.name && t.agentId === tool.agentId);\n\n if (existingToolIndex !== -1) {\n logger.warn(`Tool already exists: '${tool.name}' for agent '${tool.agentId || \"global\"}', skipping.`);\n return;\n }\n\n this._tools.push(tool);\n }\n\n removeTool(id: string, agentId?: string) {\n this._tools = this._tools.filter((tool) => {\n // Remove tool if both name and agentId match\n if (agentId !== undefined) {\n return !(tool.name === id && tool.agentId === agentId);\n }\n // If no agentId specified, only remove global tools with matching name\n return !(tool.name === id && !tool.agentId);\n });\n }\n\n /**\n * Get a tool by name and optionally by agentId.\n * If agentId is provided, it will first look for an agent-specific tool,\n * then fall back to a global tool with the same name.\n */\n getTool(params: CopilotKitCoreGetToolParams): FrontendTool<any> | undefined {\n const { toolName, agentId } = params;\n\n // If agentId is provided, first look for agent-specific tool\n if (agentId) {\n const agentTool = this._tools.find((tool) => tool.name === toolName && tool.agentId === agentId);\n if (agentTool) {\n return agentTool;\n }\n }\n\n // Fall back to global tool (no agentId)\n return this._tools.find((tool) => tool.name === toolName && !tool.agentId);\n }\n\n /**\n * Set all tools at once. Replaces existing tools.\n */\n setTools(tools: FrontendTool<any>[]) {\n this._tools = [...tools];\n }\n\n /**\n * Subscription lifecycle\n */\n subscribe(subscriber: CopilotKitCoreSubscriber): () => void {\n this.subscribers.add(subscriber);\n\n // Return unsubscribe function\n return () => {\n this.unsubscribe(subscriber);\n };\n }\n\n unsubscribe(subscriber: CopilotKitCoreSubscriber) {\n this.subscribers.delete(subscriber);\n }\n\n /**\n * Agent connectivity\n */\n async connectAgent({ agent, agentId }: CopilotKitCoreConnectAgentParams): Promise<RunAgentResult> {\n try {\n if (agent instanceof HttpAgent) {\n agent.headers = { ...this.headers };\n }\n\n const runAgentResult = await agent.connectAgent(\n {\n forwardedProps: this.properties,\n tools: this.buildFrontendTools(agentId),\n },\n this.createAgentErrorSubscriber(agent, agentId),\n );\n\n return this.processAgentResult({ runAgentResult, agent, agentId });\n } catch (error) {\n const connectError = error instanceof Error ? error : new Error(String(error));\n const context: Record<string, any> = {};\n if (agentId ?? agent.agentId) {\n context.agentId = agentId ?? agent.agentId;\n }\n await this.emitError({\n error: connectError,\n code: CopilotKitCoreErrorCode.AGENT_CONNECT_FAILED,\n context,\n });\n throw error;\n }\n }\n\n async runAgent({ agent, withMessages, agentId }: CopilotKitCoreRunAgentParams): Promise<RunAgentResult> {\n if (agent instanceof HttpAgent) {\n agent.headers = { ...this.headers };\n }\n\n if (withMessages) {\n agent.addMessages(withMessages);\n }\n try {\n const runAgentResult = await agent.runAgent(\n {\n forwardedProps: this.properties,\n tools: this.buildFrontendTools(agentId),\n },\n this.createAgentErrorSubscriber(agent, agentId),\n );\n return this.processAgentResult({ runAgentResult, agent, agentId });\n } catch (error) {\n const runError = error instanceof Error ? error : new Error(String(error));\n const context: Record<string, any> = {};\n if (agentId ?? agent.agentId) {\n context.agentId = agentId ?? agent.agentId;\n }\n if (withMessages) {\n context.messageCount = withMessages.length;\n }\n await this.emitError({\n error: runError,\n code: CopilotKitCoreErrorCode.AGENT_RUN_FAILED,\n context,\n });\n throw error;\n }\n }\n\n private async processAgentResult({\n runAgentResult,\n agent,\n agentId,\n }: {\n runAgentResult: RunAgentResult;\n agent: AbstractAgent;\n agentId: string | undefined;\n }): Promise<RunAgentResult> {\n const { newMessages } = runAgentResult;\n const effectiveAgentId = this.resolveAgentId(agent, agentId);\n\n let needsFollowUp = false;\n\n for (const message of newMessages) {\n if (message.role === \"assistant\") {\n for (const toolCall of message.toolCalls || []) {\n if (newMessages.findIndex((m) => m.role === \"tool\" && m.toolCallId === toolCall.id) === -1) {\n const tool = this.getTool({\n toolName: toolCall.function.name,\n agentId,\n });\n if (tool) {\n // Check if tool is constrained to a specific agent\n if (tool?.agentId && tool.agentId !== agentId) {\n // Tool is not available for this agent, skip it\n continue;\n }\n\n let toolCallResult = \"\";\n let errorMessage: string | undefined;\n let isArgumentError = false;\n if (tool?.handler) {\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(toolCall.function.arguments);\n } catch (error) {\n const parseError = error instanceof Error ? error : new Error(String(error));\n errorMessage = parseError.message;\n isArgumentError = true;\n await this.emitError({\n error: parseError,\n code: CopilotKitCoreErrorCode.TOOL_ARGUMENT_PARSE_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n rawArguments: toolCall.function.arguments,\n toolType: \"specific\",\n messageId: message.id,\n },\n });\n }\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionStart?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n args: parsedArgs,\n }),\n \"Subscriber onToolExecutionStart error:\",\n );\n\n if (!errorMessage) {\n try {\n const result = await tool.handler(parsedArgs as any, toolCall);\n if (result === undefined || result === null) {\n toolCallResult = \"\";\n } else if (typeof result === \"string\") {\n toolCallResult = result;\n } else {\n toolCallResult = JSON.stringify(result);\n }\n } catch (error) {\n const handlerError = error instanceof Error ? error : new Error(String(error));\n errorMessage = handlerError.message;\n await this.emitError({\n error: handlerError,\n code: CopilotKitCoreErrorCode.TOOL_HANDLER_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n parsedArgs,\n toolType: \"specific\",\n messageId: message.id,\n },\n });\n }\n }\n\n if (errorMessage) {\n toolCallResult = `Error: ${errorMessage}`;\n }\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionEnd?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n result: errorMessage ? \"\" : toolCallResult,\n error: errorMessage,\n }),\n \"Subscriber onToolExecutionEnd error:\",\n );\n\n if (isArgumentError) {\n throw new Error(errorMessage ?? \"Tool execution failed\");\n }\n }\n\n if (!errorMessage || !isArgumentError) {\n const messageIndex = agent.messages.findIndex((m) => m.id === message.id);\n const toolMessage = {\n id: randomUUID(),\n role: \"tool\" as const,\n toolCallId: toolCall.id,\n content: toolCallResult,\n };\n agent.messages.splice(messageIndex + 1, 0, toolMessage);\n\n if (!errorMessage && tool?.followUp !== false) {\n needsFollowUp = true;\n }\n }\n } else {\n // Wildcard fallback for undefined tools\n const wildcardTool = this.getTool({ toolName: \"*\", agentId });\n if (wildcardTool) {\n // Check if wildcard tool is constrained to a specific agent\n if (wildcardTool?.agentId && wildcardTool.agentId !== agentId) {\n // Wildcard tool is not available for this agent, skip it\n continue;\n }\n\n let toolCallResult = \"\";\n let errorMessage: string | undefined;\n let isArgumentError = false;\n if (wildcardTool?.handler) {\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(toolCall.function.arguments);\n } catch (error) {\n const parseError = error instanceof Error ? error : new Error(String(error));\n errorMessage = parseError.message;\n isArgumentError = true;\n await this.emitError({\n error: parseError,\n code: CopilotKitCoreErrorCode.TOOL_ARGUMENT_PARSE_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n rawArguments: toolCall.function.arguments,\n toolType: \"wildcard\",\n messageId: message.id,\n },\n });\n }\n\n const wildcardArgs = {\n toolName: toolCall.function.name,\n args: parsedArgs,\n };\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionStart?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n args: wildcardArgs,\n }),\n \"Subscriber onToolExecutionStart error:\",\n );\n\n if (!errorMessage) {\n try {\n const result = await wildcardTool.handler(wildcardArgs as any, toolCall);\n if (result === undefined || result === null) {\n toolCallResult = \"\";\n } else if (typeof result === \"string\") {\n toolCallResult = result;\n } else {\n toolCallResult = JSON.stringify(result);\n }\n } catch (error) {\n const handlerError = error instanceof Error ? error : new Error(String(error));\n errorMessage = handlerError.message;\n await this.emitError({\n error: handlerError,\n code: CopilotKitCoreErrorCode.TOOL_HANDLER_FAILED,\n context: {\n agentId: effectiveAgentId,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n parsedArgs: wildcardArgs,\n toolType: \"wildcard\",\n messageId: message.id,\n },\n });\n }\n }\n\n if (errorMessage) {\n toolCallResult = `Error: ${errorMessage}`;\n }\n\n await this.notifySubscribers(\n (subscriber) =>\n subscriber.onToolExecutionEnd?.({\n copilotkit: this,\n toolCallId: toolCall.id,\n agentId: effectiveAgentId,\n toolName: toolCall.function.name,\n result: errorMessage ? \"\" : toolCallResult,\n error: errorMessage,\n }),\n \"Subscriber onToolExecutionEnd error:\",\n );\n\n if (isArgumentError) {\n throw new Error(errorMessage ?? \"Tool execution failed\");\n }\n }\n\n if (!errorMessage || !isArgumentError) {\n const messageIndex = agent.messages.findIndex((m) => m.id === message.id);\n const toolMessage = {\n id: randomUUID(),\n role: \"tool\" as const,\n toolCallId: toolCall.id,\n content: toolCallResult,\n };\n agent.messages.splice(messageIndex + 1, 0, toolMessage);\n\n if (!errorMessage && wildcardTool?.followUp !== false) {\n needsFollowUp = true;\n }\n }\n }\n }\n }\n }\n }\n }\n\n if (needsFollowUp) {\n return await this.runAgent({ agent, agentId });\n }\n\n return runAgentResult;\n }\n\n private buildFrontendTools(agentId?: string) {\n return this._tools\n .filter((tool) => !tool.agentId || tool.agentId === agentId)\n .map((tool) => ({\n name: tool.name,\n description: tool.description ?? \"\",\n parameters: createToolSchema(tool),\n }));\n }\n\n private createAgentErrorSubscriber(agent: AbstractAgent, agentId?: string): AgentSubscriber {\n const emitAgentError = async (\n error: Error,\n code: CopilotKitCoreErrorCode,\n extraContext: Record<string, any> = {},\n ) => {\n const context: Record<string, any> = { ...extraContext };\n if (agentId ?? agent.agentId) {\n context.agentId = agentId ?? agent.agentId;\n }\n await this.emitError({\n error,\n code,\n context,\n });\n };\n\n return {\n onRunFailed: async ({ error }: { error: Error }) => {\n await emitAgentError(error, CopilotKitCoreErrorCode.AGENT_RUN_FAILED_EVENT, {\n source: \"onRunFailed\",\n });\n },\n onRunErrorEvent: async ({ event }) => {\n const eventError =\n event?.rawEvent instanceof Error\n ? event.rawEvent\n : event?.rawEvent?.error instanceof Error\n ? event.rawEvent.error\n : undefined;\n\n const errorMessage =\n typeof event?.rawEvent?.error === \"string\" ? event.rawEvent.error : (event?.message ?? \"Agent run error\");\n\n const rawError = eventError ?? new Error(errorMessage);\n\n if (event?.code && !(rawError as any).code) {\n (rawError as any).code = event.code;\n }\n\n await emitAgentError(rawError, CopilotKitCoreErrorCode.AGENT_RUN_ERROR_EVENT, {\n source: \"onRunErrorEvent\",\n event,\n runtimeErrorCode: event?.code,\n });\n },\n };\n }\n}\n\nconst EMPTY_TOOL_SCHEMA = {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n} as const satisfies Record<string, unknown>;\n\nfunction createToolSchema(tool: FrontendTool<any>): Record<string, unknown> {\n if (!tool.parameters) {\n return EMPTY_TOOL_SCHEMA;\n }\n\n const rawSchema = zodToJsonSchema(tool.parameters, {\n $refStrategy: \"none\",\n });\n\n if (!rawSchema || typeof rawSchema !== \"object\") {\n return { ...EMPTY_TOOL_SCHEMA };\n }\n\n const { $schema, ...schema } = rawSchema as Record<string, unknown>;\n\n if (typeof schema.type !== \"string\") {\n schema.type = \"object\";\n }\n if (typeof schema.properties !== \"object\" || schema.properties === null) {\n schema.properties = {};\n }\n if (schema.additionalProperties === undefined) {\n schema.additionalProperties = false;\n }\n\n return schema;\n}\n","import {\n BaseEvent,\n HttpAgent,\n HttpAgentConfig,\n RunAgentInput,\n runHttpRequest,\n transformHttpEventStream,\n} from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface ProxiedCopilotRuntimeAgentConfig\n extends Omit<HttpAgentConfig, \"url\"> {\n runtimeUrl?: string;\n}\n\nexport class ProxiedCopilotRuntimeAgent extends HttpAgent {\n runtimeUrl?: string;\n\n constructor(config: ProxiedCopilotRuntimeAgentConfig) {\n super({\n ...config,\n url: `${config.runtimeUrl}/agent/${config.agentId}/run`,\n });\n this.runtimeUrl = config.runtimeUrl;\n }\n\n connect(input: RunAgentInput): Observable<BaseEvent> {\n const httpEvents = runHttpRequest(\n `${this.runtimeUrl}/agent/${this.agentId}/connect`,\n this.requestInit(input)\n );\n return transformHttpEventStream(httpEvents);\n }\n}\n","import { ToolCall } from \"@ag-ui/client\";\nimport { z } from \"zod\";\n\n/**\n * Status of a tool call execution\n */\nexport enum ToolCallStatus {\n InProgress = \"inProgress\",\n Executing = \"executing\",\n Complete = \"complete\",\n}\n\nexport type FrontendTool<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n name: string;\n description?: string;\n parameters?: z.ZodType<T>;\n handler?: (args: T, toolCall: ToolCall) => Promise<unknown>;\n followUp?: boolean;\n /**\n * Optional agent ID to constrain this tool to a specific agent.\n * If specified, this tool will only be available to the specified agent.\n */\n agentId?: string;\n};\n","export function completePartialMarkdown(input: string): string {\n let s = input;\n\n // Handle code fences first - use FIRST unmatched fence for proper nesting\n const fenceMatches = Array.from(s.matchAll(/^(\\s*)(`{3,}|~{3,})/gm));\n if (fenceMatches.length % 2 === 1) {\n const [, indent, fence] = fenceMatches[0]!;\n s += `\\n${indent}${fence}`;\n }\n\n // Identify incomplete links at the end and close them\n const incompleteLinkMatch = s.match(/\\[([^\\]]*)\\]\\(([^)]*)$/);\n if (incompleteLinkMatch) {\n s += \")\";\n }\n\n // State-based parsing\n interface OpenElement {\n type: string;\n marker: string;\n position: number;\n }\n\n const openElements: OpenElement[] = [];\n const chars = Array.from(s);\n\n // First pass: identify code block boundaries and inline code to avoid processing their content\n const codeBlockRanges: Array<{ start: number; end: number }> = [];\n const inlineCodeRanges: Array<{ start: number; end: number }> = [];\n\n // Find code block ranges\n let tempCodeFenceCount = 0;\n let currentCodeBlockStart = -1;\n\n for (let i = 0; i < chars.length; i++) {\n if (i === 0 || chars[i - 1] === \"\\n\") {\n const lineMatch = s.substring(i).match(/^(\\s*)(`{3,}|~{3,})/);\n if (lineMatch) {\n tempCodeFenceCount++;\n if (tempCodeFenceCount % 2 === 1) {\n currentCodeBlockStart = i;\n } else if (currentCodeBlockStart !== -1) {\n codeBlockRanges.push({\n start: currentCodeBlockStart,\n end: i + lineMatch[0].length,\n });\n currentCodeBlockStart = -1;\n }\n i += lineMatch[0].length - 1;\n }\n }\n }\n\n // Find inline code ranges\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] === \"`\") {\n // Check if escaped\n let backslashCount = 0;\n for (let j = i - 1; j >= 0 && chars[j] === \"\\\\\"; j--) {\n backslashCount++;\n }\n if (backslashCount % 2 === 0) {\n // Not escaped - find the closing backtick\n for (let j = i + 1; j < chars.length; j++) {\n if (chars[j] === \"`\") {\n let closingBackslashCount = 0;\n for (let k = j - 1; k >= 0 && chars[k] === \"\\\\\"; k--) {\n closingBackslashCount++;\n }\n if (closingBackslashCount % 2 === 0) {\n inlineCodeRanges.push({ start: i, end: j + 1 });\n i = j;\n break;\n }\n }\n }\n }\n }\n }\n\n // Helper function to check if position is in code\n const isInCode = (pos: number): boolean => {\n return (\n codeBlockRanges.some((range) => pos >= range.start && pos < range.end) ||\n inlineCodeRanges.some((range) => pos >= range.start && pos < range.end)\n );\n };\n\n // Second pass: process markdown elements, skipping code regions\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const nextChar = chars[i + 1];\n const prevChar = chars[i - 1];\n\n if (isInCode(i)) {\n continue;\n }\n\n // Handle brackets (but not if they're part of already-complete links)\n if (char === \"[\") {\n // Check if this is part of a complete link [text](url)\n let isCompleteLink = false;\n let bracketDepth = 1;\n let j = i + 1;\n\n // Find the matching ]\n while (j < chars.length && bracketDepth > 0) {\n if (chars[j] === \"[\" && !isInCode(j)) bracketDepth++;\n if (chars[j] === \"]\" && !isInCode(j)) bracketDepth--;\n j++;\n }\n\n // Check if followed by (\n if (bracketDepth === 0 && chars[j] === \"(\") {\n // Find the closing )\n let parenDepth = 1;\n j++;\n while (j < chars.length && parenDepth > 0) {\n if (chars[j] === \"(\" && !isInCode(j)) parenDepth++;\n if (chars[j] === \")\" && !isInCode(j)) parenDepth--;\n j++;\n }\n if (parenDepth === 0) {\n isCompleteLink = true;\n i = j - 1;\n continue;\n }\n }\n\n // This is a standalone bracket, treat as markdown\n if (!isCompleteLink) {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"bracket\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"bracket\", marker: \"[\", position: i });\n }\n }\n }\n\n // Handle double emphasis first (**, __, ~~) - these take precedence\n else if (char === \"*\" && nextChar === \"*\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"bold_star\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"bold_star\", marker: \"**\", position: i });\n }\n i++; // Skip next character\n } else if (char === \"_\" && nextChar === \"_\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"bold_underscore\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({\n type: \"bold_underscore\",\n marker: \"__\",\n position: i,\n });\n }\n i++; // Skip next character\n } else if (char === \"~\" && nextChar === \"~\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"strike\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"strike\", marker: \"~~\", position: i });\n }\n i++; // Skip next character\n }\n\n // Handle single emphasis (*, _) - only if not part of double\n else if (char === \"*\" && prevChar !== \"*\" && nextChar !== \"*\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"italic_star\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({ type: \"italic_star\", marker: \"*\", position: i });\n }\n } else if (char === \"_\" && prevChar !== \"_\" && nextChar !== \"_\") {\n const existingIndex = openElements.findIndex(\n (el) => el.type === \"italic_underscore\"\n );\n if (existingIndex !== -1) {\n openElements.splice(existingIndex, 1);\n } else {\n openElements.push({\n type: \"italic_underscore\",\n marker: \"_\",\n position: i,\n });\n }\n }\n }\n\n // Handle remaining unmatched backticks (outside of inline code ranges)\n let backtickCount = 0;\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] === \"`\" && !isInCode(i)) {\n backtickCount++;\n }\n }\n if (backtickCount % 2 === 1) {\n s += \"`\";\n }\n\n // Close remaining open elements in reverse order (LIFO stack semantics)\n openElements.sort((a, b) => b.position - a.position);\n\n const closers = openElements.map((el) => {\n switch (el.type) {\n case \"bracket\":\n return \"]\";\n case \"bold_star\":\n return \"**\";\n case \"bold_underscore\":\n return \"__\";\n case \"strike\":\n return \"~~\";\n case \"italic_star\":\n return \"*\";\n case \"italic_underscore\":\n return \"_\";\n default:\n return \"\";\n }\n });\n\n let result = s + closers.join(\"\");\n\n // Handle parentheses ONLY if not inside code\n const finalFenceMatches = Array.from(\n result.matchAll(/^(\\s*)(`{3,}|~{3,})/gm)\n );\n const hasUnclosedBacktick = (result.match(/`/g) || []).length % 2 === 1;\n const hasUnclosedCodeFence = finalFenceMatches.length % 2 === 1;\n\n let shouldCloseParens = !hasUnclosedBacktick && !hasUnclosedCodeFence;\n\n if (shouldCloseParens) {\n const lastOpenParen = result.lastIndexOf(\"(\");\n if (lastOpenParen !== -1) {\n // Check if this paren is inside a backtick pair\n const beforeParen = result.substring(0, lastOpenParen);\n const backticksBeforeParen = (beforeParen.match(/`/g) || []).length;\n if (backticksBeforeParen % 2 === 1) {\n shouldCloseParens = false;\n }\n }\n }\n\n if (shouldCloseParens) {\n const openParens = (result.match(/\\(/g) || []).length;\n const closeParens = (result.match(/\\)/g) || []).length;\n if (openParens > closeParens) {\n result += \")\".repeat(openParens - closeParens);\n }\n }\n\n return result;\n}"],"mappings":"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","names":["HttpAgent","CopilotKitCoreErrorCode","CopilotKitCoreRuntimeConnectionStatus","HttpAgent","ToolCallStatus"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@copilotkitnext/core",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "description": "Core web utilities for CopilotKit2",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "rxjs": "7.8.1",
30
30
  "zod": "^3.25.75",
31
31
  "zod-to-json-schema": "^3.24.6",
32
- "@copilotkitnext/shared": "0.0.10"
32
+ "@copilotkitnext/shared": "0.0.12"
33
33
  },
34
34
  "engines": {
35
35
  "node": ">=18"