@copilotkitnext/core 0.0.1
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/.turbo/turbo-build.log +22 -0
- package/.turbo/turbo-check-types.log +4 -0
- package/.turbo/turbo-lint.log +12 -0
- package/.turbo/turbo-test.log +96 -0
- package/LICENSE +11 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +131 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +131 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/src/agent.ts.html +193 -0
- package/coverage/lcov-report/src/core.ts.html +919 -0
- package/coverage/lcov-report/src/index.html +146 -0
- package/coverage/lcov-report/src/types.ts.html +112 -0
- package/coverage/lcov-report/src/utils/index.html +116 -0
- package/coverage/lcov-report/src/utils/markdown.ts.html +895 -0
- package/coverage/lcov.info +556 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/agent.ts.html +193 -0
- package/coverage/src/core.ts.html +919 -0
- package/coverage/src/index.html +146 -0
- package/coverage/src/types.ts.html +112 -0
- package/coverage/src/utils/index.html +116 -0
- package/coverage/src/utils/markdown.ts.html +895 -0
- package/dist/index.d.mts +93 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.js +526 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +502 -0
- package/dist/index.mjs.map +1 -0
- package/eslint.config.mjs +3 -0
- package/package.json +46 -0
- package/src/__tests__/core-agent-constraints.test.ts +86 -0
- package/src/__tests__/core-basic-functionality.test.ts +158 -0
- package/src/__tests__/core-basic.test.ts +27 -0
- package/src/__tests__/core-edge-cases.test.ts +166 -0
- package/src/__tests__/core-follow-up.test.ts +216 -0
- package/src/__tests__/core-full.test.ts +320 -0
- package/src/__tests__/core-simple.test.ts +24 -0
- package/src/__tests__/core-tool-minimal.test.ts +41 -0
- package/src/__tests__/core-tool-simple.test.ts +40 -0
- package/src/__tests__/core-wildcard.test.ts +45 -0
- package/src/__tests__/import.test.ts +13 -0
- package/src/__tests__/simple.test.ts +7 -0
- package/src/__tests__/test-utils.ts +162 -0
- package/src/agent.ts +37 -0
- package/src/core.ts +336 -0
- package/src/index.ts +4 -0
- package/src/types.ts +23 -0
- package/src/utils/markdown.ts +271 -0
- package/tsconfig.json +12 -0
- package/tsup.config.ts +11 -0
- package/vitest.config.mjs +15 -0
|
@@ -0,0 +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 randomUUID,\n RuntimeInfo,\n} from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { AbstractAgent, Context, HttpAgent, Message } from \"@ag-ui/client\";\nimport { FrontendTool } from \"./types\";\nimport { CopilotKitHttpAgent } from \"./agent\";\n\nexport interface CopilotKitCoreConfig {\n runtimeUrl?: string;\n agents?: Record<string, AbstractAgent>;\n headers?: Record<string, string>;\n properties?: Record<string, unknown>;\n tools?: Record<string, FrontendTool<any>>;\n}\n\nexport interface CopilotKitCoreAddAgentParams {\n id: string;\n agent: AbstractAgent;\n}\n\nexport interface RunAgentParams {\n agent: AbstractAgent;\n withMessages?: Message[];\n agentId?: string;\n}\n\nexport interface CopilotKitCoreSubscriber {\n onRuntimeLoaded?: (event: {\n copilotkit: CopilotKitCore;\n }) => void | Promise<void>;\n onRuntimeLoadError?: (event: {\n copilotkit: CopilotKitCore;\n }) => void | Promise<void>;\n}\n\nexport class CopilotKitCore {\n runtimeUrl?: string;\n didLoadRuntime: boolean = false;\n\n context: Record<string, Context> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tools: Record<string, FrontendTool<any>> = {};\n agents: Record<string, AbstractAgent> = {};\n\n headers: Record<string, string>;\n properties: Record<string, unknown>;\n\n version?: string;\n\n private localAgents: Record<string, AbstractAgent> = {};\n private remoteAgents: Record<string, AbstractAgent> = {};\n private subscribers: Set<CopilotKitCoreSubscriber> = new Set();\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 = agents;\n this.agents = this.localAgents;\n this.tools = tools;\n\n this.setRuntimeUrl(runtimeUrl);\n }\n\n private async getRuntimeInfo() {\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 CopilotKitHttpAgent({\n runtimeUrl: this.runtimeUrl,\n agentId: id,\n description: description,\n });\n return [id, agent];\n })\n );\n\n return { agents, version };\n }\n\n private async fetchRemoteAgents() {\n if (this.runtimeUrl) {\n this.getRuntimeInfo()\n .then(({ agents, version }) => {\n this.remoteAgents = agents;\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n this.didLoadRuntime = true;\n this.version = version;\n\n this.subscribers.forEach(async (subscriber) => {\n try {\n await subscriber.onRuntimeLoaded?.({ copilotkit: this });\n } catch (error) {\n logger.error(\n \"Error in CopilotKitCore subscriber (onRuntimeLoaded):\",\n error\n );\n }\n });\n })\n .catch((error) => {\n this.subscribers.forEach(async (subscriber) => {\n try {\n await subscriber.onRuntimeLoadError?.({ copilotkit: this });\n } catch (error) {\n logger.error(\n \"Error in CopilotKitCore subscriber (onRuntimeLoadError):\",\n error\n );\n }\n });\n logger.warn(`Failed to load runtime info: ${error.message}`);\n });\n }\n }\n\n setAgents(agents: Record<string, AbstractAgent>) {\n this.localAgents = agents;\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n }\n\n addAgent({ id, agent }: CopilotKitCoreAddAgentParams) {\n this.localAgents[id] = agent;\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n }\n\n removeAgent(id: string) {\n delete this.localAgents[id];\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n }\n\n getAgent(id: string): AbstractAgent | undefined {\n if (id in this.agents) {\n return this.agents[id] as AbstractAgent;\n } else {\n if (!this.didLoadRuntime) {\n return undefined;\n } else {\n throw new Error(`Agent ${id} not found`);\n }\n }\n }\n\n addContext({ description, value }: Context): string {\n const id = randomUUID();\n this.context[id] = { description, value };\n return id;\n }\n\n removeContext(id: string) {\n delete this.context[id];\n }\n\n setRuntimeUrl(runtimeUrl?: string) {\n this.runtimeUrl = runtimeUrl ? runtimeUrl.replace(/\\/$/, \"\") : undefined;\n this.fetchRemoteAgents();\n }\n\n addTool<T extends Record<string, unknown> = Record<string, unknown>>(\n tool: FrontendTool<T>\n ) {\n if (tool.name in this.tools) {\n logger.warn(`Tool already exists: '${tool.name}', skipping.`);\n return;\n }\n\n this.tools[tool.name] = tool;\n }\n\n removeTool(id: string) {\n delete this.tools[id];\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = headers;\n }\n\n setProperties(properties: Record<string, unknown>) {\n this.properties = properties;\n }\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 // TODO: AG-UI needs to expose the runAgent result type\n async runAgent({\n agent,\n withMessages,\n agentId,\n }: RunAgentParams): Promise<Awaited<ReturnType<typeof agent.runAgent>>> {\n if (withMessages) {\n agent.addMessages(withMessages);\n }\n\n const runAgentResult = await agent.runAgent({\n forwardedProps: this.properties,\n });\n\n const { newMessages } = runAgentResult;\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 if (toolCall.function.name in this.tools) {\n const tool = this.tools[toolCall.function.name];\n\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 if (tool?.handler) {\n const args = JSON.parse(toolCall.function.arguments);\n try {\n const result = await tool.handler(args);\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 toolCallResult = `Error: ${error instanceof Error ? error.message : String(error)}`;\n }\n }\n\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 (tool?.followUp !== false) {\n needsFollowUp = true;\n }\n } else if (\"*\" in this.tools) {\n // Wildcard fallback for undefined tools\n const wildcardTool = this.tools[\"*\"];\n\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 if (wildcardTool?.handler) {\n // Pass both the tool name and original args to the wildcard handler\n const wildcardArgs = {\n toolName: toolCall.function.name,\n args: JSON.parse(toolCall.function.arguments),\n };\n try {\n const result = await wildcardTool.handler(wildcardArgs);\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 toolCallResult = `Error: ${error instanceof Error ? error.message : String(error)}`;\n }\n }\n\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 (wildcardTool?.followUp !== false) {\n needsFollowUp = true;\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","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 CopilotKitHttpAgentConfig\n extends Omit<HttpAgentConfig, \"url\"> {\n runtimeUrl?: string;\n}\n\nexport class CopilotKitHttpAgent extends HttpAgent {\n isCopilotKitAgent = true;\n runtimeUrl?: string;\n\n constructor(config: CopilotKitHttpAgentConfig) {\n super({\n ...config,\n url: `${config.runtimeUrl}/agent/${config.agentId}/run`,\n });\n this.runtimeUrl = config.runtimeUrl;\n }\n\n run(input: RunAgentInput): Observable<BaseEvent> {\n const url = (\n input.forwardedProps.__copilotkitConnect === true\n ? `${this.runtimeUrl}/agent/${this.agentId}/connect`\n : this.url\n ) as string;\n const httpEvents = runHttpRequest(url, this.requestInit(input));\n return transformHttpEventStream(httpEvents);\n }\n}\n","import { 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<T extends Record<string, unknown> = Record<string, unknown>> = {\n name: string;\n description?: string;\n parameters?: z.ZodType<T>;\n handler?: (args: T) => 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_shared","error","ToolCallStatus"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
// src/core.ts
|
|
2
|
+
import {
|
|
3
|
+
randomUUID
|
|
4
|
+
} from "@copilotkitnext/shared";
|
|
5
|
+
import { logger } from "@copilotkitnext/shared";
|
|
6
|
+
|
|
7
|
+
// src/agent.ts
|
|
8
|
+
import {
|
|
9
|
+
HttpAgent,
|
|
10
|
+
runHttpRequest,
|
|
11
|
+
transformHttpEventStream
|
|
12
|
+
} from "@ag-ui/client";
|
|
13
|
+
var CopilotKitHttpAgent = class extends HttpAgent {
|
|
14
|
+
isCopilotKitAgent = true;
|
|
15
|
+
runtimeUrl;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
super({
|
|
18
|
+
...config,
|
|
19
|
+
url: `${config.runtimeUrl}/agent/${config.agentId}/run`
|
|
20
|
+
});
|
|
21
|
+
this.runtimeUrl = config.runtimeUrl;
|
|
22
|
+
}
|
|
23
|
+
run(input) {
|
|
24
|
+
const url = input.forwardedProps.__copilotkitConnect === true ? `${this.runtimeUrl}/agent/${this.agentId}/connect` : this.url;
|
|
25
|
+
const httpEvents = runHttpRequest(url, this.requestInit(input));
|
|
26
|
+
return transformHttpEventStream(httpEvents);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// src/core.ts
|
|
31
|
+
var CopilotKitCore = class {
|
|
32
|
+
runtimeUrl;
|
|
33
|
+
didLoadRuntime = false;
|
|
34
|
+
context = {};
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
+
tools = {};
|
|
37
|
+
agents = {};
|
|
38
|
+
headers;
|
|
39
|
+
properties;
|
|
40
|
+
version;
|
|
41
|
+
localAgents = {};
|
|
42
|
+
remoteAgents = {};
|
|
43
|
+
subscribers = /* @__PURE__ */ new Set();
|
|
44
|
+
constructor({
|
|
45
|
+
runtimeUrl,
|
|
46
|
+
headers = {},
|
|
47
|
+
properties = {},
|
|
48
|
+
agents = {},
|
|
49
|
+
tools = {}
|
|
50
|
+
}) {
|
|
51
|
+
this.headers = headers;
|
|
52
|
+
this.properties = properties;
|
|
53
|
+
this.localAgents = agents;
|
|
54
|
+
this.agents = this.localAgents;
|
|
55
|
+
this.tools = tools;
|
|
56
|
+
this.setRuntimeUrl(runtimeUrl);
|
|
57
|
+
}
|
|
58
|
+
async getRuntimeInfo() {
|
|
59
|
+
const response = await fetch(`${this.runtimeUrl}/info`, {
|
|
60
|
+
headers: this.headers
|
|
61
|
+
});
|
|
62
|
+
const {
|
|
63
|
+
version,
|
|
64
|
+
...runtimeInfo
|
|
65
|
+
} = await response.json();
|
|
66
|
+
const agents = Object.fromEntries(
|
|
67
|
+
Object.entries(runtimeInfo.agents).map(([id, { description }]) => {
|
|
68
|
+
const agent = new CopilotKitHttpAgent({
|
|
69
|
+
runtimeUrl: this.runtimeUrl,
|
|
70
|
+
agentId: id,
|
|
71
|
+
description
|
|
72
|
+
});
|
|
73
|
+
return [id, agent];
|
|
74
|
+
})
|
|
75
|
+
);
|
|
76
|
+
return { agents, version };
|
|
77
|
+
}
|
|
78
|
+
async fetchRemoteAgents() {
|
|
79
|
+
if (this.runtimeUrl) {
|
|
80
|
+
this.getRuntimeInfo().then(({ agents, version }) => {
|
|
81
|
+
this.remoteAgents = agents;
|
|
82
|
+
this.agents = { ...this.localAgents, ...this.remoteAgents };
|
|
83
|
+
this.didLoadRuntime = true;
|
|
84
|
+
this.version = version;
|
|
85
|
+
this.subscribers.forEach(async (subscriber) => {
|
|
86
|
+
try {
|
|
87
|
+
await subscriber.onRuntimeLoaded?.({ copilotkit: this });
|
|
88
|
+
} catch (error) {
|
|
89
|
+
logger.error(
|
|
90
|
+
"Error in CopilotKitCore subscriber (onRuntimeLoaded):",
|
|
91
|
+
error
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}).catch((error) => {
|
|
96
|
+
this.subscribers.forEach(async (subscriber) => {
|
|
97
|
+
try {
|
|
98
|
+
await subscriber.onRuntimeLoadError?.({ copilotkit: this });
|
|
99
|
+
} catch (error2) {
|
|
100
|
+
logger.error(
|
|
101
|
+
"Error in CopilotKitCore subscriber (onRuntimeLoadError):",
|
|
102
|
+
error2
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
logger.warn(`Failed to load runtime info: ${error.message}`);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
setAgents(agents) {
|
|
111
|
+
this.localAgents = agents;
|
|
112
|
+
this.agents = { ...this.localAgents, ...this.remoteAgents };
|
|
113
|
+
}
|
|
114
|
+
addAgent({ id, agent }) {
|
|
115
|
+
this.localAgents[id] = agent;
|
|
116
|
+
this.agents = { ...this.localAgents, ...this.remoteAgents };
|
|
117
|
+
}
|
|
118
|
+
removeAgent(id) {
|
|
119
|
+
delete this.localAgents[id];
|
|
120
|
+
this.agents = { ...this.localAgents, ...this.remoteAgents };
|
|
121
|
+
}
|
|
122
|
+
getAgent(id) {
|
|
123
|
+
if (id in this.agents) {
|
|
124
|
+
return this.agents[id];
|
|
125
|
+
} else {
|
|
126
|
+
if (!this.didLoadRuntime) {
|
|
127
|
+
return void 0;
|
|
128
|
+
} else {
|
|
129
|
+
throw new Error(`Agent ${id} not found`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
addContext({ description, value }) {
|
|
134
|
+
const id = randomUUID();
|
|
135
|
+
this.context[id] = { description, value };
|
|
136
|
+
return id;
|
|
137
|
+
}
|
|
138
|
+
removeContext(id) {
|
|
139
|
+
delete this.context[id];
|
|
140
|
+
}
|
|
141
|
+
setRuntimeUrl(runtimeUrl) {
|
|
142
|
+
this.runtimeUrl = runtimeUrl ? runtimeUrl.replace(/\/$/, "") : void 0;
|
|
143
|
+
this.fetchRemoteAgents();
|
|
144
|
+
}
|
|
145
|
+
addTool(tool) {
|
|
146
|
+
if (tool.name in this.tools) {
|
|
147
|
+
logger.warn(`Tool already exists: '${tool.name}', skipping.`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.tools[tool.name] = tool;
|
|
151
|
+
}
|
|
152
|
+
removeTool(id) {
|
|
153
|
+
delete this.tools[id];
|
|
154
|
+
}
|
|
155
|
+
setHeaders(headers) {
|
|
156
|
+
this.headers = headers;
|
|
157
|
+
}
|
|
158
|
+
setProperties(properties) {
|
|
159
|
+
this.properties = properties;
|
|
160
|
+
}
|
|
161
|
+
subscribe(subscriber) {
|
|
162
|
+
this.subscribers.add(subscriber);
|
|
163
|
+
return () => {
|
|
164
|
+
this.unsubscribe(subscriber);
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
unsubscribe(subscriber) {
|
|
168
|
+
this.subscribers.delete(subscriber);
|
|
169
|
+
}
|
|
170
|
+
// TODO: AG-UI needs to expose the runAgent result type
|
|
171
|
+
async runAgent({
|
|
172
|
+
agent,
|
|
173
|
+
withMessages,
|
|
174
|
+
agentId
|
|
175
|
+
}) {
|
|
176
|
+
if (withMessages) {
|
|
177
|
+
agent.addMessages(withMessages);
|
|
178
|
+
}
|
|
179
|
+
const runAgentResult = await agent.runAgent({
|
|
180
|
+
forwardedProps: this.properties
|
|
181
|
+
});
|
|
182
|
+
const { newMessages } = runAgentResult;
|
|
183
|
+
let needsFollowUp = false;
|
|
184
|
+
for (const message of newMessages) {
|
|
185
|
+
if (message.role === "assistant") {
|
|
186
|
+
for (const toolCall of message.toolCalls || []) {
|
|
187
|
+
if (newMessages.findIndex(
|
|
188
|
+
(m) => m.role === "tool" && m.toolCallId === toolCall.id
|
|
189
|
+
) === -1) {
|
|
190
|
+
if (toolCall.function.name in this.tools) {
|
|
191
|
+
const tool = this.tools[toolCall.function.name];
|
|
192
|
+
if (tool?.agentId && tool.agentId !== agentId) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
let toolCallResult = "";
|
|
196
|
+
if (tool?.handler) {
|
|
197
|
+
const args = JSON.parse(toolCall.function.arguments);
|
|
198
|
+
try {
|
|
199
|
+
const result = await tool.handler(args);
|
|
200
|
+
if (result === void 0 || result === null) {
|
|
201
|
+
toolCallResult = "";
|
|
202
|
+
} else if (typeof result === "string") {
|
|
203
|
+
toolCallResult = result;
|
|
204
|
+
} else {
|
|
205
|
+
toolCallResult = JSON.stringify(result);
|
|
206
|
+
}
|
|
207
|
+
} catch (error) {
|
|
208
|
+
toolCallResult = `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const messageIndex = agent.messages.findIndex(
|
|
212
|
+
(m) => m.id === message.id
|
|
213
|
+
);
|
|
214
|
+
const toolMessage = {
|
|
215
|
+
id: randomUUID(),
|
|
216
|
+
role: "tool",
|
|
217
|
+
toolCallId: toolCall.id,
|
|
218
|
+
content: toolCallResult
|
|
219
|
+
};
|
|
220
|
+
agent.messages.splice(messageIndex + 1, 0, toolMessage);
|
|
221
|
+
if (tool?.followUp !== false) {
|
|
222
|
+
needsFollowUp = true;
|
|
223
|
+
}
|
|
224
|
+
} else if ("*" in this.tools) {
|
|
225
|
+
const wildcardTool = this.tools["*"];
|
|
226
|
+
if (wildcardTool?.agentId && wildcardTool.agentId !== agentId) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
let toolCallResult = "";
|
|
230
|
+
if (wildcardTool?.handler) {
|
|
231
|
+
const wildcardArgs = {
|
|
232
|
+
toolName: toolCall.function.name,
|
|
233
|
+
args: JSON.parse(toolCall.function.arguments)
|
|
234
|
+
};
|
|
235
|
+
try {
|
|
236
|
+
const result = await wildcardTool.handler(wildcardArgs);
|
|
237
|
+
if (result === void 0 || result === null) {
|
|
238
|
+
toolCallResult = "";
|
|
239
|
+
} else if (typeof result === "string") {
|
|
240
|
+
toolCallResult = result;
|
|
241
|
+
} else {
|
|
242
|
+
toolCallResult = JSON.stringify(result);
|
|
243
|
+
}
|
|
244
|
+
} catch (error) {
|
|
245
|
+
toolCallResult = `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const messageIndex = agent.messages.findIndex(
|
|
249
|
+
(m) => m.id === message.id
|
|
250
|
+
);
|
|
251
|
+
const toolMessage = {
|
|
252
|
+
id: randomUUID(),
|
|
253
|
+
role: "tool",
|
|
254
|
+
toolCallId: toolCall.id,
|
|
255
|
+
content: toolCallResult
|
|
256
|
+
};
|
|
257
|
+
agent.messages.splice(messageIndex + 1, 0, toolMessage);
|
|
258
|
+
if (wildcardTool?.followUp !== false) {
|
|
259
|
+
needsFollowUp = true;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (needsFollowUp) {
|
|
267
|
+
return await this.runAgent({ agent, agentId });
|
|
268
|
+
}
|
|
269
|
+
return runAgentResult;
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
// src/types.ts
|
|
274
|
+
var ToolCallStatus = /* @__PURE__ */ ((ToolCallStatus2) => {
|
|
275
|
+
ToolCallStatus2["InProgress"] = "inProgress";
|
|
276
|
+
ToolCallStatus2["Executing"] = "executing";
|
|
277
|
+
ToolCallStatus2["Complete"] = "complete";
|
|
278
|
+
return ToolCallStatus2;
|
|
279
|
+
})(ToolCallStatus || {});
|
|
280
|
+
|
|
281
|
+
// src/utils/markdown.ts
|
|
282
|
+
function completePartialMarkdown(input) {
|
|
283
|
+
let s = input;
|
|
284
|
+
const fenceMatches = Array.from(s.matchAll(/^(\s*)(`{3,}|~{3,})/gm));
|
|
285
|
+
if (fenceMatches.length % 2 === 1) {
|
|
286
|
+
const [, indent, fence] = fenceMatches[0];
|
|
287
|
+
s += `
|
|
288
|
+
${indent}${fence}`;
|
|
289
|
+
}
|
|
290
|
+
const incompleteLinkMatch = s.match(/\[([^\]]*)\]\(([^)]*)$/);
|
|
291
|
+
if (incompleteLinkMatch) {
|
|
292
|
+
s += ")";
|
|
293
|
+
}
|
|
294
|
+
const openElements = [];
|
|
295
|
+
const chars = Array.from(s);
|
|
296
|
+
const codeBlockRanges = [];
|
|
297
|
+
const inlineCodeRanges = [];
|
|
298
|
+
let tempCodeFenceCount = 0;
|
|
299
|
+
let currentCodeBlockStart = -1;
|
|
300
|
+
for (let i = 0; i < chars.length; i++) {
|
|
301
|
+
if (i === 0 || chars[i - 1] === "\n") {
|
|
302
|
+
const lineMatch = s.substring(i).match(/^(\s*)(`{3,}|~{3,})/);
|
|
303
|
+
if (lineMatch) {
|
|
304
|
+
tempCodeFenceCount++;
|
|
305
|
+
if (tempCodeFenceCount % 2 === 1) {
|
|
306
|
+
currentCodeBlockStart = i;
|
|
307
|
+
} else if (currentCodeBlockStart !== -1) {
|
|
308
|
+
codeBlockRanges.push({
|
|
309
|
+
start: currentCodeBlockStart,
|
|
310
|
+
end: i + lineMatch[0].length
|
|
311
|
+
});
|
|
312
|
+
currentCodeBlockStart = -1;
|
|
313
|
+
}
|
|
314
|
+
i += lineMatch[0].length - 1;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
for (let i = 0; i < chars.length; i++) {
|
|
319
|
+
if (chars[i] === "`") {
|
|
320
|
+
let backslashCount = 0;
|
|
321
|
+
for (let j = i - 1; j >= 0 && chars[j] === "\\"; j--) {
|
|
322
|
+
backslashCount++;
|
|
323
|
+
}
|
|
324
|
+
if (backslashCount % 2 === 0) {
|
|
325
|
+
for (let j = i + 1; j < chars.length; j++) {
|
|
326
|
+
if (chars[j] === "`") {
|
|
327
|
+
let closingBackslashCount = 0;
|
|
328
|
+
for (let k = j - 1; k >= 0 && chars[k] === "\\"; k--) {
|
|
329
|
+
closingBackslashCount++;
|
|
330
|
+
}
|
|
331
|
+
if (closingBackslashCount % 2 === 0) {
|
|
332
|
+
inlineCodeRanges.push({ start: i, end: j + 1 });
|
|
333
|
+
i = j;
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
const isInCode = (pos) => {
|
|
342
|
+
return codeBlockRanges.some((range) => pos >= range.start && pos < range.end) || inlineCodeRanges.some((range) => pos >= range.start && pos < range.end);
|
|
343
|
+
};
|
|
344
|
+
for (let i = 0; i < chars.length; i++) {
|
|
345
|
+
const char = chars[i];
|
|
346
|
+
const nextChar = chars[i + 1];
|
|
347
|
+
const prevChar = chars[i - 1];
|
|
348
|
+
if (isInCode(i)) {
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
if (char === "[") {
|
|
352
|
+
let isCompleteLink = false;
|
|
353
|
+
let bracketDepth = 1;
|
|
354
|
+
let j = i + 1;
|
|
355
|
+
while (j < chars.length && bracketDepth > 0) {
|
|
356
|
+
if (chars[j] === "[" && !isInCode(j)) bracketDepth++;
|
|
357
|
+
if (chars[j] === "]" && !isInCode(j)) bracketDepth--;
|
|
358
|
+
j++;
|
|
359
|
+
}
|
|
360
|
+
if (bracketDepth === 0 && chars[j] === "(") {
|
|
361
|
+
let parenDepth = 1;
|
|
362
|
+
j++;
|
|
363
|
+
while (j < chars.length && parenDepth > 0) {
|
|
364
|
+
if (chars[j] === "(" && !isInCode(j)) parenDepth++;
|
|
365
|
+
if (chars[j] === ")" && !isInCode(j)) parenDepth--;
|
|
366
|
+
j++;
|
|
367
|
+
}
|
|
368
|
+
if (parenDepth === 0) {
|
|
369
|
+
isCompleteLink = true;
|
|
370
|
+
i = j - 1;
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (!isCompleteLink) {
|
|
375
|
+
const existingIndex = openElements.findIndex(
|
|
376
|
+
(el) => el.type === "bracket"
|
|
377
|
+
);
|
|
378
|
+
if (existingIndex !== -1) {
|
|
379
|
+
openElements.splice(existingIndex, 1);
|
|
380
|
+
} else {
|
|
381
|
+
openElements.push({ type: "bracket", marker: "[", position: i });
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
} else if (char === "*" && nextChar === "*") {
|
|
385
|
+
const existingIndex = openElements.findIndex(
|
|
386
|
+
(el) => el.type === "bold_star"
|
|
387
|
+
);
|
|
388
|
+
if (existingIndex !== -1) {
|
|
389
|
+
openElements.splice(existingIndex, 1);
|
|
390
|
+
} else {
|
|
391
|
+
openElements.push({ type: "bold_star", marker: "**", position: i });
|
|
392
|
+
}
|
|
393
|
+
i++;
|
|
394
|
+
} else if (char === "_" && nextChar === "_") {
|
|
395
|
+
const existingIndex = openElements.findIndex(
|
|
396
|
+
(el) => el.type === "bold_underscore"
|
|
397
|
+
);
|
|
398
|
+
if (existingIndex !== -1) {
|
|
399
|
+
openElements.splice(existingIndex, 1);
|
|
400
|
+
} else {
|
|
401
|
+
openElements.push({
|
|
402
|
+
type: "bold_underscore",
|
|
403
|
+
marker: "__",
|
|
404
|
+
position: i
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
i++;
|
|
408
|
+
} else if (char === "~" && nextChar === "~") {
|
|
409
|
+
const existingIndex = openElements.findIndex(
|
|
410
|
+
(el) => el.type === "strike"
|
|
411
|
+
);
|
|
412
|
+
if (existingIndex !== -1) {
|
|
413
|
+
openElements.splice(existingIndex, 1);
|
|
414
|
+
} else {
|
|
415
|
+
openElements.push({ type: "strike", marker: "~~", position: i });
|
|
416
|
+
}
|
|
417
|
+
i++;
|
|
418
|
+
} else if (char === "*" && prevChar !== "*" && nextChar !== "*") {
|
|
419
|
+
const existingIndex = openElements.findIndex(
|
|
420
|
+
(el) => el.type === "italic_star"
|
|
421
|
+
);
|
|
422
|
+
if (existingIndex !== -1) {
|
|
423
|
+
openElements.splice(existingIndex, 1);
|
|
424
|
+
} else {
|
|
425
|
+
openElements.push({ type: "italic_star", marker: "*", position: i });
|
|
426
|
+
}
|
|
427
|
+
} else if (char === "_" && prevChar !== "_" && nextChar !== "_") {
|
|
428
|
+
const existingIndex = openElements.findIndex(
|
|
429
|
+
(el) => el.type === "italic_underscore"
|
|
430
|
+
);
|
|
431
|
+
if (existingIndex !== -1) {
|
|
432
|
+
openElements.splice(existingIndex, 1);
|
|
433
|
+
} else {
|
|
434
|
+
openElements.push({
|
|
435
|
+
type: "italic_underscore",
|
|
436
|
+
marker: "_",
|
|
437
|
+
position: i
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
let backtickCount = 0;
|
|
443
|
+
for (let i = 0; i < chars.length; i++) {
|
|
444
|
+
if (chars[i] === "`" && !isInCode(i)) {
|
|
445
|
+
backtickCount++;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
if (backtickCount % 2 === 1) {
|
|
449
|
+
s += "`";
|
|
450
|
+
}
|
|
451
|
+
openElements.sort((a, b) => b.position - a.position);
|
|
452
|
+
const closers = openElements.map((el) => {
|
|
453
|
+
switch (el.type) {
|
|
454
|
+
case "bracket":
|
|
455
|
+
return "]";
|
|
456
|
+
case "bold_star":
|
|
457
|
+
return "**";
|
|
458
|
+
case "bold_underscore":
|
|
459
|
+
return "__";
|
|
460
|
+
case "strike":
|
|
461
|
+
return "~~";
|
|
462
|
+
case "italic_star":
|
|
463
|
+
return "*";
|
|
464
|
+
case "italic_underscore":
|
|
465
|
+
return "_";
|
|
466
|
+
default:
|
|
467
|
+
return "";
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
let result = s + closers.join("");
|
|
471
|
+
const finalFenceMatches = Array.from(
|
|
472
|
+
result.matchAll(/^(\s*)(`{3,}|~{3,})/gm)
|
|
473
|
+
);
|
|
474
|
+
const hasUnclosedBacktick = (result.match(/`/g) || []).length % 2 === 1;
|
|
475
|
+
const hasUnclosedCodeFence = finalFenceMatches.length % 2 === 1;
|
|
476
|
+
let shouldCloseParens = !hasUnclosedBacktick && !hasUnclosedCodeFence;
|
|
477
|
+
if (shouldCloseParens) {
|
|
478
|
+
const lastOpenParen = result.lastIndexOf("(");
|
|
479
|
+
if (lastOpenParen !== -1) {
|
|
480
|
+
const beforeParen = result.substring(0, lastOpenParen);
|
|
481
|
+
const backticksBeforeParen = (beforeParen.match(/`/g) || []).length;
|
|
482
|
+
if (backticksBeforeParen % 2 === 1) {
|
|
483
|
+
shouldCloseParens = false;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (shouldCloseParens) {
|
|
488
|
+
const openParens = (result.match(/\(/g) || []).length;
|
|
489
|
+
const closeParens = (result.match(/\)/g) || []).length;
|
|
490
|
+
if (openParens > closeParens) {
|
|
491
|
+
result += ")".repeat(openParens - closeParens);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
return result;
|
|
495
|
+
}
|
|
496
|
+
export {
|
|
497
|
+
CopilotKitCore,
|
|
498
|
+
CopilotKitHttpAgent,
|
|
499
|
+
ToolCallStatus,
|
|
500
|
+
completePartialMarkdown
|
|
501
|
+
};
|
|
502
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core.ts","../src/agent.ts","../src/types.ts","../src/utils/markdown.ts"],"sourcesContent":["import {\n AgentDescription,\n randomUUID,\n RuntimeInfo,\n} from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { AbstractAgent, Context, HttpAgent, Message } from \"@ag-ui/client\";\nimport { FrontendTool } from \"./types\";\nimport { CopilotKitHttpAgent } from \"./agent\";\n\nexport interface CopilotKitCoreConfig {\n runtimeUrl?: string;\n agents?: Record<string, AbstractAgent>;\n headers?: Record<string, string>;\n properties?: Record<string, unknown>;\n tools?: Record<string, FrontendTool<any>>;\n}\n\nexport interface CopilotKitCoreAddAgentParams {\n id: string;\n agent: AbstractAgent;\n}\n\nexport interface RunAgentParams {\n agent: AbstractAgent;\n withMessages?: Message[];\n agentId?: string;\n}\n\nexport interface CopilotKitCoreSubscriber {\n onRuntimeLoaded?: (event: {\n copilotkit: CopilotKitCore;\n }) => void | Promise<void>;\n onRuntimeLoadError?: (event: {\n copilotkit: CopilotKitCore;\n }) => void | Promise<void>;\n}\n\nexport class CopilotKitCore {\n runtimeUrl?: string;\n didLoadRuntime: boolean = false;\n\n context: Record<string, Context> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tools: Record<string, FrontendTool<any>> = {};\n agents: Record<string, AbstractAgent> = {};\n\n headers: Record<string, string>;\n properties: Record<string, unknown>;\n\n version?: string;\n\n private localAgents: Record<string, AbstractAgent> = {};\n private remoteAgents: Record<string, AbstractAgent> = {};\n private subscribers: Set<CopilotKitCoreSubscriber> = new Set();\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 = agents;\n this.agents = this.localAgents;\n this.tools = tools;\n\n this.setRuntimeUrl(runtimeUrl);\n }\n\n private async getRuntimeInfo() {\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 CopilotKitHttpAgent({\n runtimeUrl: this.runtimeUrl,\n agentId: id,\n description: description,\n });\n return [id, agent];\n })\n );\n\n return { agents, version };\n }\n\n private async fetchRemoteAgents() {\n if (this.runtimeUrl) {\n this.getRuntimeInfo()\n .then(({ agents, version }) => {\n this.remoteAgents = agents;\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n this.didLoadRuntime = true;\n this.version = version;\n\n this.subscribers.forEach(async (subscriber) => {\n try {\n await subscriber.onRuntimeLoaded?.({ copilotkit: this });\n } catch (error) {\n logger.error(\n \"Error in CopilotKitCore subscriber (onRuntimeLoaded):\",\n error\n );\n }\n });\n })\n .catch((error) => {\n this.subscribers.forEach(async (subscriber) => {\n try {\n await subscriber.onRuntimeLoadError?.({ copilotkit: this });\n } catch (error) {\n logger.error(\n \"Error in CopilotKitCore subscriber (onRuntimeLoadError):\",\n error\n );\n }\n });\n logger.warn(`Failed to load runtime info: ${error.message}`);\n });\n }\n }\n\n setAgents(agents: Record<string, AbstractAgent>) {\n this.localAgents = agents;\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n }\n\n addAgent({ id, agent }: CopilotKitCoreAddAgentParams) {\n this.localAgents[id] = agent;\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n }\n\n removeAgent(id: string) {\n delete this.localAgents[id];\n this.agents = { ...this.localAgents, ...this.remoteAgents };\n }\n\n getAgent(id: string): AbstractAgent | undefined {\n if (id in this.agents) {\n return this.agents[id] as AbstractAgent;\n } else {\n if (!this.didLoadRuntime) {\n return undefined;\n } else {\n throw new Error(`Agent ${id} not found`);\n }\n }\n }\n\n addContext({ description, value }: Context): string {\n const id = randomUUID();\n this.context[id] = { description, value };\n return id;\n }\n\n removeContext(id: string) {\n delete this.context[id];\n }\n\n setRuntimeUrl(runtimeUrl?: string) {\n this.runtimeUrl = runtimeUrl ? runtimeUrl.replace(/\\/$/, \"\") : undefined;\n this.fetchRemoteAgents();\n }\n\n addTool<T extends Record<string, unknown> = Record<string, unknown>>(\n tool: FrontendTool<T>\n ) {\n if (tool.name in this.tools) {\n logger.warn(`Tool already exists: '${tool.name}', skipping.`);\n return;\n }\n\n this.tools[tool.name] = tool;\n }\n\n removeTool(id: string) {\n delete this.tools[id];\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = headers;\n }\n\n setProperties(properties: Record<string, unknown>) {\n this.properties = properties;\n }\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 // TODO: AG-UI needs to expose the runAgent result type\n async runAgent({\n agent,\n withMessages,\n agentId,\n }: RunAgentParams): Promise<Awaited<ReturnType<typeof agent.runAgent>>> {\n if (withMessages) {\n agent.addMessages(withMessages);\n }\n\n const runAgentResult = await agent.runAgent({\n forwardedProps: this.properties,\n });\n\n const { newMessages } = runAgentResult;\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 if (toolCall.function.name in this.tools) {\n const tool = this.tools[toolCall.function.name];\n\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 if (tool?.handler) {\n const args = JSON.parse(toolCall.function.arguments);\n try {\n const result = await tool.handler(args);\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 toolCallResult = `Error: ${error instanceof Error ? error.message : String(error)}`;\n }\n }\n\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 (tool?.followUp !== false) {\n needsFollowUp = true;\n }\n } else if (\"*\" in this.tools) {\n // Wildcard fallback for undefined tools\n const wildcardTool = this.tools[\"*\"];\n\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 if (wildcardTool?.handler) {\n // Pass both the tool name and original args to the wildcard handler\n const wildcardArgs = {\n toolName: toolCall.function.name,\n args: JSON.parse(toolCall.function.arguments),\n };\n try {\n const result = await wildcardTool.handler(wildcardArgs);\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 toolCallResult = `Error: ${error instanceof Error ? error.message : String(error)}`;\n }\n }\n\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 (wildcardTool?.followUp !== false) {\n needsFollowUp = true;\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","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 CopilotKitHttpAgentConfig\n extends Omit<HttpAgentConfig, \"url\"> {\n runtimeUrl?: string;\n}\n\nexport class CopilotKitHttpAgent extends HttpAgent {\n isCopilotKitAgent = true;\n runtimeUrl?: string;\n\n constructor(config: CopilotKitHttpAgentConfig) {\n super({\n ...config,\n url: `${config.runtimeUrl}/agent/${config.agentId}/run`,\n });\n this.runtimeUrl = config.runtimeUrl;\n }\n\n run(input: RunAgentInput): Observable<BaseEvent> {\n const url = (\n input.forwardedProps.__copilotkitConnect === true\n ? `${this.runtimeUrl}/agent/${this.agentId}/connect`\n : this.url\n ) as string;\n const httpEvents = runHttpRequest(url, this.requestInit(input));\n return transformHttpEventStream(httpEvents);\n }\n}\n","import { 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<T extends Record<string, unknown> = Record<string, unknown>> = {\n name: string;\n description?: string;\n parameters?: z.ZodType<T>;\n handler?: (args: T) => 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":["error","ToolCallStatus"]}
|