@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.
- package/dist/index.d.mts +14 -10
- package/dist/index.d.ts +14 -10
- package/dist/index.js +51 -65
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53 -73
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core.ts","../src/agent.ts","../src/types.ts","../src/utils/markdown.ts"],"sourcesContent":["export * from \"./core\";\nexport * from \"./types\";\nexport * from \"./agent\";\nexport * from \"./utils/markdown\";\n","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":["import_client","CopilotKitCoreErrorCode","CopilotKitCoreRuntimeConnectionStatus","ToolCallStatus"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core.ts","../src/agent.ts","../src/types.ts","../src/utils/markdown.ts"],"sourcesContent":["export * from \"./core\";\nexport * from \"./types\";\nexport * from \"./agent\";\nexport * from \"./utils/markdown\";\n","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":["import_client","CopilotKitCoreErrorCode","CopilotKitCoreRuntimeConnectionStatus","ToolCallStatus"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
// src/core.ts
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
randomUUID,
|
|
5
|
-
logger
|
|
6
|
-
} from "@copilotkitnext/shared";
|
|
7
|
-
import {
|
|
8
|
-
HttpAgent as HttpAgent2
|
|
9
|
-
} from "@ag-ui/client";
|
|
2
|
+
import { DEFAULT_AGENT_ID, randomUUID, logger } from "@copilotkitnext/shared";
|
|
3
|
+
import { HttpAgent as HttpAgent2 } from "@ag-ui/client";
|
|
10
4
|
|
|
11
5
|
// src/agent.ts
|
|
12
6
|
import {
|
|
@@ -52,8 +46,8 @@ var CopilotKitCoreRuntimeConnectionStatus = /* @__PURE__ */ ((CopilotKitCoreRunt
|
|
|
52
46
|
return CopilotKitCoreRuntimeConnectionStatus2;
|
|
53
47
|
})(CopilotKitCoreRuntimeConnectionStatus || {});
|
|
54
48
|
var CopilotKitCore = class {
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
_headers;
|
|
50
|
+
_properties;
|
|
57
51
|
_context = {};
|
|
58
52
|
_agents = {};
|
|
59
53
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -68,16 +62,27 @@ var CopilotKitCore = class {
|
|
|
68
62
|
runtimeUrl,
|
|
69
63
|
headers = {},
|
|
70
64
|
properties = {},
|
|
71
|
-
|
|
65
|
+
agents__unsafe_dev_only = {},
|
|
72
66
|
tools = []
|
|
73
67
|
}) {
|
|
74
|
-
this.
|
|
75
|
-
this.
|
|
76
|
-
this.localAgents = this.assignAgentIds(
|
|
68
|
+
this._headers = headers;
|
|
69
|
+
this._properties = properties;
|
|
70
|
+
this.localAgents = this.assignAgentIds(agents__unsafe_dev_only);
|
|
71
|
+
this.applyHeadersToAgents(this.localAgents);
|
|
77
72
|
this._agents = this.localAgents;
|
|
78
73
|
this._tools = tools;
|
|
79
74
|
this.setRuntimeUrl(runtimeUrl);
|
|
80
75
|
}
|
|
76
|
+
applyHeadersToAgent(agent) {
|
|
77
|
+
if (agent instanceof HttpAgent2) {
|
|
78
|
+
agent.headers = { ...this.headers };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
applyHeadersToAgents(agents) {
|
|
82
|
+
Object.values(agents).forEach((agent) => {
|
|
83
|
+
this.applyHeadersToAgent(agent);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
81
86
|
assignAgentIds(agents) {
|
|
82
87
|
Object.entries(agents).forEach(([id, agent]) => {
|
|
83
88
|
if (agent && !agent.agentId) {
|
|
@@ -155,6 +160,12 @@ var CopilotKitCore = class {
|
|
|
155
160
|
get runtimeVersion() {
|
|
156
161
|
return this._runtimeVersion;
|
|
157
162
|
}
|
|
163
|
+
get headers() {
|
|
164
|
+
return this._headers;
|
|
165
|
+
}
|
|
166
|
+
get properties() {
|
|
167
|
+
return this._properties;
|
|
168
|
+
}
|
|
158
169
|
get runtimeConnectionStatus() {
|
|
159
170
|
return this._runtimeConnectionStatus;
|
|
160
171
|
}
|
|
@@ -206,6 +217,7 @@ var CopilotKitCore = class {
|
|
|
206
217
|
agentId: id,
|
|
207
218
|
description
|
|
208
219
|
});
|
|
220
|
+
this.applyHeadersToAgent(agent);
|
|
209
221
|
return [id, agent];
|
|
210
222
|
})
|
|
211
223
|
);
|
|
@@ -247,9 +259,7 @@ var CopilotKitCore = class {
|
|
|
247
259
|
"Subscriber onAgentsChanged error:"
|
|
248
260
|
);
|
|
249
261
|
const message = error instanceof Error ? error.message : JSON.stringify(error);
|
|
250
|
-
logger.warn(
|
|
251
|
-
`Failed to load runtime info (${this.runtimeUrl}/info): ${message}`
|
|
252
|
-
);
|
|
262
|
+
logger.warn(`Failed to load runtime info (${this.runtimeUrl}/info): ${message}`);
|
|
253
263
|
const runtimeError = error instanceof Error ? error : new Error(String(error));
|
|
254
264
|
await this.emitError({
|
|
255
265
|
error: runtimeError,
|
|
@@ -264,7 +274,8 @@ var CopilotKitCore = class {
|
|
|
264
274
|
* Configuration updates
|
|
265
275
|
*/
|
|
266
276
|
setHeaders(headers) {
|
|
267
|
-
this.
|
|
277
|
+
this._headers = headers;
|
|
278
|
+
this.applyHeadersToAgents(this._agents);
|
|
268
279
|
void this.notifySubscribers(
|
|
269
280
|
(subscriber) => subscriber.onHeadersChanged?.({
|
|
270
281
|
copilotkit: this,
|
|
@@ -274,7 +285,7 @@ var CopilotKitCore = class {
|
|
|
274
285
|
);
|
|
275
286
|
}
|
|
276
287
|
setProperties(properties) {
|
|
277
|
-
this.
|
|
288
|
+
this._properties = properties;
|
|
278
289
|
void this.notifySubscribers(
|
|
279
290
|
(subscriber) => subscriber.onPropertiesChanged?.({
|
|
280
291
|
copilotkit: this,
|
|
@@ -283,9 +294,10 @@ var CopilotKitCore = class {
|
|
|
283
294
|
"Subscriber onPropertiesChanged error:"
|
|
284
295
|
);
|
|
285
296
|
}
|
|
286
|
-
|
|
297
|
+
setAgents__unsafe_dev_only(agents) {
|
|
287
298
|
this.localAgents = this.assignAgentIds(agents);
|
|
288
299
|
this._agents = { ...this.localAgents, ...this.remoteAgents };
|
|
300
|
+
this.applyHeadersToAgents(this._agents);
|
|
289
301
|
void this.notifySubscribers(
|
|
290
302
|
(subscriber) => subscriber.onAgentsChanged?.({
|
|
291
303
|
copilotkit: this,
|
|
@@ -294,11 +306,12 @@ var CopilotKitCore = class {
|
|
|
294
306
|
"Subscriber onAgentsChanged error:"
|
|
295
307
|
);
|
|
296
308
|
}
|
|
297
|
-
|
|
309
|
+
addAgent__unsafe_dev_only({ id, agent }) {
|
|
298
310
|
this.localAgents[id] = agent;
|
|
299
311
|
if (!agent.agentId) {
|
|
300
312
|
agent.agentId = id;
|
|
301
313
|
}
|
|
314
|
+
this.applyHeadersToAgent(agent);
|
|
302
315
|
this._agents = { ...this.localAgents, ...this.remoteAgents };
|
|
303
316
|
void this.notifySubscribers(
|
|
304
317
|
(subscriber) => subscriber.onAgentsChanged?.({
|
|
@@ -308,7 +321,7 @@ var CopilotKitCore = class {
|
|
|
308
321
|
"Subscriber onAgentsChanged error:"
|
|
309
322
|
);
|
|
310
323
|
}
|
|
311
|
-
|
|
324
|
+
removeAgent__unsafe_dev_only(id) {
|
|
312
325
|
delete this.localAgents[id];
|
|
313
326
|
this._agents = { ...this.localAgents, ...this.remoteAgents };
|
|
314
327
|
void this.notifySubscribers(
|
|
@@ -359,13 +372,9 @@ var CopilotKitCore = class {
|
|
|
359
372
|
* Tool management
|
|
360
373
|
*/
|
|
361
374
|
addTool(tool) {
|
|
362
|
-
const existingToolIndex = this._tools.findIndex(
|
|
363
|
-
(t) => t.name === tool.name && t.agentId === tool.agentId
|
|
364
|
-
);
|
|
375
|
+
const existingToolIndex = this._tools.findIndex((t) => t.name === tool.name && t.agentId === tool.agentId);
|
|
365
376
|
if (existingToolIndex !== -1) {
|
|
366
|
-
logger.warn(
|
|
367
|
-
`Tool already exists: '${tool.name}' for agent '${tool.agentId || "global"}', skipping.`
|
|
368
|
-
);
|
|
377
|
+
logger.warn(`Tool already exists: '${tool.name}' for agent '${tool.agentId || "global"}', skipping.`);
|
|
369
378
|
return;
|
|
370
379
|
}
|
|
371
380
|
this._tools.push(tool);
|
|
@@ -386,9 +395,7 @@ var CopilotKitCore = class {
|
|
|
386
395
|
getTool(params) {
|
|
387
396
|
const { toolName, agentId } = params;
|
|
388
397
|
if (agentId) {
|
|
389
|
-
const agentTool = this._tools.find(
|
|
390
|
-
(tool) => tool.name === toolName && tool.agentId === agentId
|
|
391
|
-
);
|
|
398
|
+
const agentTool = this._tools.find((tool) => tool.name === toolName && tool.agentId === agentId);
|
|
392
399
|
if (agentTool) {
|
|
393
400
|
return agentTool;
|
|
394
401
|
}
|
|
@@ -416,10 +423,7 @@ var CopilotKitCore = class {
|
|
|
416
423
|
/**
|
|
417
424
|
* Agent connectivity
|
|
418
425
|
*/
|
|
419
|
-
async connectAgent({
|
|
420
|
-
agent,
|
|
421
|
-
agentId
|
|
422
|
-
}) {
|
|
426
|
+
async connectAgent({ agent, agentId }) {
|
|
423
427
|
try {
|
|
424
428
|
if (agent instanceof HttpAgent2) {
|
|
425
429
|
agent.headers = { ...this.headers };
|
|
@@ -446,11 +450,7 @@ var CopilotKitCore = class {
|
|
|
446
450
|
throw error;
|
|
447
451
|
}
|
|
448
452
|
}
|
|
449
|
-
async runAgent({
|
|
450
|
-
agent,
|
|
451
|
-
withMessages,
|
|
452
|
-
agentId
|
|
453
|
-
}) {
|
|
453
|
+
async runAgent({ agent, withMessages, agentId }) {
|
|
454
454
|
if (agent instanceof HttpAgent2) {
|
|
455
455
|
agent.headers = { ...this.headers };
|
|
456
456
|
}
|
|
@@ -494,9 +494,7 @@ var CopilotKitCore = class {
|
|
|
494
494
|
for (const message of newMessages) {
|
|
495
495
|
if (message.role === "assistant") {
|
|
496
496
|
for (const toolCall of message.toolCalls || []) {
|
|
497
|
-
if (newMessages.findIndex(
|
|
498
|
-
(m) => m.role === "tool" && m.toolCallId === toolCall.id
|
|
499
|
-
) === -1) {
|
|
497
|
+
if (newMessages.findIndex((m) => m.role === "tool" && m.toolCallId === toolCall.id) === -1) {
|
|
500
498
|
const tool = this.getTool({
|
|
501
499
|
toolName: toolCall.function.name,
|
|
502
500
|
agentId
|
|
@@ -541,10 +539,7 @@ var CopilotKitCore = class {
|
|
|
541
539
|
);
|
|
542
540
|
if (!errorMessage) {
|
|
543
541
|
try {
|
|
544
|
-
const result = await tool.handler(
|
|
545
|
-
parsedArgs,
|
|
546
|
-
toolCall
|
|
547
|
-
);
|
|
542
|
+
const result = await tool.handler(parsedArgs, toolCall);
|
|
548
543
|
if (result === void 0 || result === null) {
|
|
549
544
|
toolCallResult = "";
|
|
550
545
|
} else if (typeof result === "string") {
|
|
@@ -588,9 +583,7 @@ var CopilotKitCore = class {
|
|
|
588
583
|
}
|
|
589
584
|
}
|
|
590
585
|
if (!errorMessage || !isArgumentError) {
|
|
591
|
-
const messageIndex = agent.messages.findIndex(
|
|
592
|
-
(m) => m.id === message.id
|
|
593
|
-
);
|
|
586
|
+
const messageIndex = agent.messages.findIndex((m) => m.id === message.id);
|
|
594
587
|
const toolMessage = {
|
|
595
588
|
id: randomUUID(),
|
|
596
589
|
role: "tool",
|
|
@@ -648,10 +641,7 @@ var CopilotKitCore = class {
|
|
|
648
641
|
);
|
|
649
642
|
if (!errorMessage) {
|
|
650
643
|
try {
|
|
651
|
-
const result = await wildcardTool.handler(
|
|
652
|
-
wildcardArgs,
|
|
653
|
-
toolCall
|
|
654
|
-
);
|
|
644
|
+
const result = await wildcardTool.handler(wildcardArgs, toolCall);
|
|
655
645
|
if (result === void 0 || result === null) {
|
|
656
646
|
toolCallResult = "";
|
|
657
647
|
} else if (typeof result === "string") {
|
|
@@ -695,9 +685,7 @@ var CopilotKitCore = class {
|
|
|
695
685
|
}
|
|
696
686
|
}
|
|
697
687
|
if (!errorMessage || !isArgumentError) {
|
|
698
|
-
const messageIndex = agent.messages.findIndex(
|
|
699
|
-
(m) => m.id === message.id
|
|
700
|
-
);
|
|
688
|
+
const messageIndex = agent.messages.findIndex((m) => m.id === message.id);
|
|
701
689
|
const toolMessage = {
|
|
702
690
|
id: randomUUID(),
|
|
703
691
|
role: "tool",
|
|
@@ -741,13 +729,9 @@ var CopilotKitCore = class {
|
|
|
741
729
|
};
|
|
742
730
|
return {
|
|
743
731
|
onRunFailed: async ({ error }) => {
|
|
744
|
-
await emitAgentError(
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
{
|
|
748
|
-
source: "onRunFailed"
|
|
749
|
-
}
|
|
750
|
-
);
|
|
732
|
+
await emitAgentError(error, "agent_run_failed_event" /* AGENT_RUN_FAILED_EVENT */, {
|
|
733
|
+
source: "onRunFailed"
|
|
734
|
+
});
|
|
751
735
|
},
|
|
752
736
|
onRunErrorEvent: async ({ event }) => {
|
|
753
737
|
const eventError = event?.rawEvent instanceof Error ? event.rawEvent : event?.rawEvent?.error instanceof Error ? event.rawEvent.error : void 0;
|
|
@@ -756,15 +740,11 @@ var CopilotKitCore = class {
|
|
|
756
740
|
if (event?.code && !rawError.code) {
|
|
757
741
|
rawError.code = event.code;
|
|
758
742
|
}
|
|
759
|
-
await emitAgentError(
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
event,
|
|
765
|
-
runtimeErrorCode: event?.code
|
|
766
|
-
}
|
|
767
|
-
);
|
|
743
|
+
await emitAgentError(rawError, "agent_run_error_event" /* AGENT_RUN_ERROR_EVENT */, {
|
|
744
|
+
source: "onRunErrorEvent",
|
|
745
|
+
event,
|
|
746
|
+
runtimeErrorCode: event?.code
|
|
747
|
+
});
|
|
768
748
|
}
|
|
769
749
|
};
|
|
770
750
|
}
|