@voltagent/ag-ui 0.1.0 → 1.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/dist/index.d.mts CHANGED
@@ -12,7 +12,6 @@ type VoltAgentAGUIConfig = {
12
12
  };
13
13
  /**
14
14
  * VoltAgent adapter that speaks the AG-UI protocol.
15
- * Mirrors the Mastra integration strategy: preserve AG-UI state in working memory
16
15
  * and stream VoltAgent events as AG-UI BaseEvents.
17
16
  */
18
17
  declare class VoltAgentAGUI extends AbstractAgent {
package/dist/index.d.ts CHANGED
@@ -12,7 +12,6 @@ type VoltAgentAGUIConfig = {
12
12
  };
13
13
  /**
14
14
  * VoltAgent adapter that speaks the AG-UI protocol.
15
- * Mirrors the Mastra integration strategy: preserve AG-UI state in working memory
16
15
  * and stream VoltAgent events as AG-UI BaseEvents.
17
16
  */
18
17
  declare class VoltAgentAGUI extends AbstractAgent {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/voltagent-agent.ts","../src/copilotkit.ts"],"sourcesContent":["export { VoltAgentAGUI, createVoltAgentAGUI } from \"./voltagent-agent\";\nexport {\n createCopilotKitHandler,\n registerCopilotKitRoutes,\n type CopilotKitHandlerOptions,\n type RegisterCopilotKitRoutesOptions,\n} from \"./copilotkit\";\n","import { AbstractAgent } from \"@ag-ui/client\";\nimport type {\n AssistantMessage,\n BaseEvent,\n DeveloperMessage,\n Message,\n RunAgentInput,\n RunErrorEvent,\n RunFinishedEvent,\n RunStartedEvent,\n StateSnapshotEvent,\n SystemMessage,\n TextMessageChunkEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n ToolMessage,\n UserMessage,\n} from \"@ag-ui/core\";\nimport { EventType } from \"@ag-ui/core\";\nimport type { StreamTextOptions, VoltAgentTextStreamPart } from \"@voltagent/core\";\nimport type { Agent } from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal/utils\";\nimport { Observable } from \"rxjs\";\n\ntype AGUIContextValue = {\n state?: Record<string, unknown>;\n context?: RunAgentInput[\"context\"];\n forwardedProps?: RunAgentInput[\"forwardedProps\"];\n};\n\ntype VoltAgentAGUIConfig = {\n agent: Agent;\n /**\n * Optional function to derive userId for VoltAgent memory/telemetry.\n */\n deriveUserId?: (input: RunAgentInput) => string | undefined;\n};\n\nfunction debugLog(message: string, data?: Record<string, unknown>) {\n // eslint-disable-next-line no-console\n console.log(`[VoltAgentAGUI] ${message}`, data ?? {});\n}\n\n/**\n * VoltAgent adapter that speaks the AG-UI protocol.\n * Mirrors the Mastra integration strategy: preserve AG-UI state in working memory\n * and stream VoltAgent events as AG-UI BaseEvents.\n */\nexport class VoltAgentAGUI extends AbstractAgent {\n private readonly agent: Agent;\n private readonly deriveUserId?: VoltAgentAGUIConfig[\"deriveUserId\"];\n\n constructor(config: VoltAgentAGUIConfig) {\n super();\n this.agent = config.agent;\n this.deriveUserId = config.deriveUserId;\n }\n\n run(input: RunAgentInput): ReturnType<AbstractAgent[\"run\"]> {\n const stream$ = new Observable<BaseEvent>((subscriber) => {\n const abortController = new AbortController();\n let finishedSent = false;\n debugLog(\"run start\", { threadId: input.threadId, runId: input.runId });\n const runStarted: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(runStarted);\n\n const run = async () => {\n let currentMessageId = generateId();\n\n try {\n await this.persistStateToWorkingMemory(input);\n\n const streamOptions = this.buildStreamOptions(input, abortController);\n const voltMessages = convertAGUIMessagesToVoltMessages(input.messages);\n\n debugLog(\"calling agent.streamText\", { messagesLength: voltMessages.length });\n const result = await this.agent.streamText(voltMessages as any, streamOptions);\n\n for await (const part of result.fullStream) {\n debugLog(\"fullStream part\", { partType: part.type, id: (part as any).id });\n const events = convertVoltStreamPartToEvents(part, currentMessageId);\n if (!events) continue;\n\n for (const event of events) {\n debugLog(\"emit event\", { type: event.type, messageId: (event as any).messageId });\n\n subscriber.next(event);\n if (\n (event.type === EventType.TEXT_MESSAGE_START ||\n event.type === EventType.TEXT_MESSAGE_CHUNK ||\n event.type === EventType.TEXT_MESSAGE_END) &&\n \"messageId\" in event &&\n event.messageId\n ) {\n currentMessageId = event.messageId;\n }\n }\n }\n\n const snapshotEvent = await this.readWorkingMemorySnapshot(input);\n if (snapshotEvent) {\n subscriber.next(snapshotEvent);\n }\n\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n debugLog(\"run finished\", { threadId: input.threadId, runId: input.runId });\n } catch (error) {\n debugLog(\"run error\", {\n threadId: input.threadId,\n runId: input.runId,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n // Make sure any partial text messages are closed before finishing\n const runError: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n };\n subscriber.next(runError);\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n\n void run();\n\n return () => {\n debugLog(\"run abort/unsubscribe\", {\n threadId: input.threadId,\n runId: input.runId,\n finishedSent,\n });\n abortController.abort();\n if (!finishedSent) {\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n });\n\n // Cast through unknown to avoid rxjs type mismatches across hoisted versions\n return stream$ as unknown as ReturnType<AbstractAgent[\"run\"]>;\n }\n\n private buildStreamOptions(\n input: RunAgentInput,\n abortController: AbortController,\n ): StreamTextOptions {\n const context = new Map<string, unknown>();\n const aguiContext: AGUIContextValue = {\n state: (input.state as Record<string, unknown>) || undefined,\n context: input.context,\n forwardedProps: input.forwardedProps,\n };\n\n context.set(\"agui:context\", aguiContext);\n\n return {\n abortSignal: abortController.signal,\n conversationId: input.threadId,\n userId: this.deriveUserId?.(input),\n context,\n };\n }\n\n private async persistStateToWorkingMemory(input: RunAgentInput): Promise<void> {\n const state = input.state;\n if (!state || typeof state !== \"object\" || Object.keys(state).length === 0) {\n return;\n }\n\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n await memory.updateWorkingMemory({\n conversationId: input.threadId,\n content: safeStringify(state),\n });\n } catch (error) {\n // Non-fatal: working memory might be disabled or misconfigured\n console.debug?.(\"Failed to persist AG-UI state to working memory\", error);\n }\n }\n\n private async readWorkingMemorySnapshot(\n input: RunAgentInput,\n ): Promise<StateSnapshotEvent | undefined> {\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n const raw = await memory.getWorkingMemory({\n conversationId: input.threadId,\n });\n\n if (!raw) {\n return;\n }\n\n let snapshot: unknown = raw;\n try {\n snapshot = JSON.parse(raw);\n } catch {\n // keep raw string\n }\n\n return {\n type: EventType.STATE_SNAPSHOT,\n snapshot,\n };\n } catch (error) {\n console.debug?.(\"Failed to read AG-UI working memory snapshot\", error);\n return;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Message conversion helpers\n// ---------------------------------------------------------------------------\n\nconst isUserMessage = (message: Message): message is UserMessage => message.role === \"user\";\nconst isAssistantMessage = (message: Message): message is AssistantMessage =>\n message.role === \"assistant\";\nconst isSystemMessage = (message: Message): message is SystemMessage => message.role === \"system\";\nconst isDeveloperMessage = (message: Message): message is DeveloperMessage =>\n message.role === \"developer\";\nconst isToolMessage = (message: Message): message is ToolMessage => message.role === \"tool\";\n\ntype VoltUIPart =\n | { type: \"text\"; text: string }\n | { type: \"tool-call\"; toolCallId: string; toolName: string; args?: unknown }\n | { type: \"tool-result\"; toolCallId?: string; toolName?: string; output?: unknown };\n\ntype VoltUIMessage = {\n id: string;\n role: \"user\" | \"assistant\" | \"system\" | \"tool\";\n content?: string;\n parts?: VoltUIPart[];\n};\n\nfunction convertAGUIMessagesToVoltMessages(messages: Message[]): VoltUIMessage[] {\n const toolNameById = new Map<string, string>();\n\n return messages.map((msg) => {\n const messageId = msg.id || generateId();\n\n if (isUserMessage(msg)) {\n return {\n id: messageId,\n role: \"user\",\n content: extractTextContent(msg.content),\n };\n }\n\n if (isAssistantMessage(msg)) {\n const parts: VoltUIPart[] = [];\n const textContent = msg.content ? extractTextContent(msg.content) : \"\";\n if (textContent) {\n parts.push({ type: \"text\", text: textContent });\n }\n\n for (const call of msg.toolCalls ?? []) {\n const args = safelyParseJson(call.function.arguments);\n toolNameById.set(call.id, call.function.name);\n parts.push({\n type: \"tool-call\",\n toolCallId: call.id,\n toolName: call.function.name,\n args,\n });\n }\n\n return {\n id: messageId,\n role: \"assistant\",\n parts,\n };\n }\n\n if (isSystemMessage(msg) || isDeveloperMessage(msg)) {\n return {\n id: messageId,\n role: \"system\",\n content: msg.content,\n };\n }\n\n if (isToolMessage(msg)) {\n const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : undefined;\n return {\n id: messageId,\n role: \"tool\",\n parts: [\n {\n type: \"tool-result\",\n toolCallId: msg.toolCallId,\n toolName: toolName ?? \"tool\",\n output: safelyParseJson(msg.content),\n },\n ],\n };\n }\n\n // activity or any other custom role -> fold into assistant text\n return {\n id: messageId,\n role: \"assistant\",\n parts: [{ type: \"text\", text: safeStringify((msg as any).content ?? \"\") }],\n };\n });\n}\n\nfunction extractTextContent(content: UserMessage[\"content\"] | AssistantMessage[\"content\"]): string {\n if (!content) return \"\";\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n\n const parts = content as Array<Record<string, unknown>>;\n\n return parts\n .map((part: Record<string, unknown>) => {\n const textValue = typeof part.text === \"string\" ? (part.text as string) : \"\";\n return textValue;\n })\n .filter((text: string) => text.length > 0)\n .join(\"\\n\");\n}\n\nfunction safelyParseJson(value: string | unknown): unknown {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Stream conversion helpers\n// ---------------------------------------------------------------------------\n\ntype StreamConversionResult =\n | TextMessageStartEvent\n | TextMessageChunkEvent\n | TextMessageEndEvent\n | ToolCallStartEvent\n | ToolCallEndEvent\n | ToolCallArgsEvent\n | ToolCallResultEvent;\n\nfunction convertVoltStreamPartToEvents(\n part: VoltAgentTextStreamPart,\n fallbackMessageId: string,\n): StreamConversionResult[] | null {\n const payload = (part as { payload?: Record<string, unknown> }).payload ?? part;\n\n switch (part.type) {\n case \"text-start\": {\n // Ignore explicit start; we'll synthesize start when first chunk/end arrives to avoid duplicates\n return null;\n }\n case \"text-delta\": {\n const event: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: part.text ?? \"\",\n messageId: part.id ?? fallbackMessageId,\n role: \"assistant\",\n };\n return [event];\n }\n case \"text-end\": {\n // Let transformChunks close the message; avoid emitting END without a START\n return null;\n }\n case \"tool-call\": {\n const toolCallId = (payload as { toolCallId?: string }).toolCallId ?? generateId();\n const toolName = (payload as { toolName?: string }).toolName ?? \"tool\";\n const rawArgs =\n (payload as { args?: unknown }).args ??\n (payload as { input?: unknown }).input ??\n (payload as { arguments?: unknown }).arguments;\n const argsEvent: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId,\n delta: safeStringify(rawArgs ?? {}),\n };\n const startEvent: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId,\n toolCallName: toolName,\n parentMessageId: fallbackMessageId,\n };\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId,\n };\n return [startEvent, argsEvent, endEvent];\n }\n case \"tool-result\": {\n const rawResult =\n (payload as { result?: unknown }).result ??\n (payload as { output?: unknown }).output ??\n (payload as { data?: unknown }).data ??\n payload;\n const resultEvent: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: (payload as { toolCallId?: string }).toolCallId ?? generateId(),\n content: safeStringify(rawResult ?? {}),\n messageId: generateId(),\n role: \"tool\",\n };\n return [resultEvent];\n }\n case \"error\": {\n const errorEvent: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: `Error: ${(payload as { error?: unknown }).error}`,\n messageId: fallbackMessageId,\n role: \"assistant\",\n };\n return [errorEvent];\n }\n default:\n return null;\n }\n}\n\nexport function createVoltAgentAGUI(config: VoltAgentAGUIConfig): VoltAgentAGUI {\n return new VoltAgentAGUI(config);\n}\n\nfunction generateId(): string {\n const cryptoApi = typeof globalThis !== \"undefined\" ? (globalThis as any).crypto : undefined;\n if (cryptoApi && typeof cryptoApi.randomUUID === \"function\") {\n return cryptoApi.randomUUID();\n }\n\n const random = () => Math.floor(Math.random() * 0xffff);\n let uuid = \"\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x0fff) | 0x4000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x3fff) | 0x8000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n return uuid;\n}\n","import { AbstractAgent } from \"@ag-ui/client\";\nimport type { RunAgentInput } from \"@ag-ui/core\";\nimport {\n CopilotRuntime,\n type CopilotServiceAdapter,\n ExperimentalEmptyAdapter,\n copilotRuntimeNextJSAppRouterEndpoint,\n} from \"@copilotkit/runtime\";\nimport type { Agent } from \"@voltagent/core\";\nimport { AgentRegistry } from \"@voltagent/core\";\nimport { createVoltAgentAGUI } from \"./voltagent-agent\";\n\nexport type CopilotKitHandlerOptions = {\n /**\n * Static map of AG-UI agents. Use either this or `loadAgents`.\n */\n agents?: Record<string, AbstractAgent>;\n /**\n * Lazy loader for AG-UI agents. If provided, it overrides `agents`.\n */\n loadAgents?: () => Promise<Record<string, AbstractAgent>> | Record<string, AbstractAgent>;\n /**\n * Optional service adapter. Defaults to ExperimentalEmptyAdapter.\n */\n serviceAdapter?: CopilotServiceAdapter;\n /**\n * Endpoint path used by CopilotKit clients. Defaults to \"/copilotkit\".\n */\n endpoint?: string;\n};\n\nexport type RegisterCopilotKitRoutesOptions = {\n /**\n * Hono-style app instance with `all(path, handler)` support.\n */\n app: {\n all: (path: string, handler: (c: any) => any) => any;\n post?: (path: string, handler: (c: any) => any) => any;\n };\n /**\n * VoltAgent agents to expose to CopilotKit. Will be wrapped lazily.\n */\n agents?: Record<string, Agent>;\n /**\n * Optional resource IDs to pick from the global AgentRegistry if `agents` is not provided.\n * If omitted and no agents are provided, all registered agents will be exposed.\n */\n resourceIds?: string[];\n /**\n * Path to mount CopilotKit endpoint. Defaults to \"/copilotkit\".\n */\n path?: string;\n};\n\n/**\n * Create a framework-agnostic fetch handler for CopilotKit that serves VoltAgent-backed AG-UI agents.\n *\n * @example\n * ```ts\n * import { createCopilotKitHandler } from \"@voltagent/ag-ui\";\n * import { createVoltAgentAGUI } from \"@voltagent/ag-ui\";\n * import { agent } from \"./agent\"; // VoltAgent instance\n *\n * const handler = createCopilotKitHandler({\n * agents: { assistant: createVoltAgentAGUI({ agent }) },\n * endpoint: \"/api/copilotkit\",\n * });\n *\n * export default {\n * fetch: handler,\n * };\n * ```\n */\nexport function createCopilotKitHandler(options: CopilotKitHandlerOptions) {\n const endpoint = options.endpoint ?? \"/copilotkit\";\n const serviceAdapter = options.serviceAdapter ?? new ExperimentalEmptyAdapter();\n\n return async (req: Request): Promise<Response> => {\n // We intentionally avoid logging request bodies to keep the handler silent in production.\n await req\n .clone()\n .text()\n .catch(() => undefined);\n\n const agents =\n (await options.loadAgents?.()) ??\n options.agents ??\n (() => {\n throw new Error(\"No agents provided to CopilotKit handler\");\n })();\n\n // Lightweight wrapper to add per-run/connect logging without touching the original agents\n const wrappedAgents: Record<string, AbstractAgent> = {};\n for (const [id, agent] of Object.entries(agents)) {\n wrappedAgents[id] = new (class extends AbstractAgent {\n run(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.run\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as AbstractAgent).run(input);\n }\n // Forward connect if the agent implements it\n connect(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.connect\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as any).connect?.(input);\n }\n clone() {\n return this;\n }\n })();\n }\n\n const runtime = new CopilotRuntime({ agents: wrappedAgents });\n\n const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({\n runtime,\n serviceAdapter,\n endpoint,\n });\n\n let response: Response;\n try {\n response = await handleRequest(req);\n } catch (error) {\n console.error(\"[CopilotKit] handler failed\", {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n throw error;\n }\n return response;\n };\n}\n\n/**\n * Convenience helper: register CopilotKit routes on a Hono-like app using VoltAgent agents.\n */\nexport function registerCopilotKitRoutes(options: RegisterCopilotKitRoutesOptions) {\n const path = options.path ?? \"/copilotkit\";\n const resolveAgents = (): Record<string, Agent> => {\n if (options.agents) return options.agents;\n const registry = AgentRegistry.getInstance();\n const ids = options.resourceIds;\n if (ids && ids.length > 0) {\n return Object.fromEntries(\n ids\n .map((id) => {\n const agent = registry.getAgent(id);\n return agent ? [id, agent] : undefined;\n })\n .filter(Boolean) as [string, Agent][],\n );\n }\n return Object.fromEntries(registry.getAllAgents().map((agent) => [agent.id, agent]));\n };\n\n const handler = createCopilotKitHandler({\n loadAgents: () =>\n Object.fromEntries(\n Object.entries(resolveAgents()).map(([id, agent]) => [id, createVoltAgentAGUI({ agent })]),\n ),\n endpoint: path,\n });\n\n const routeHandler = async (c: any) => {\n const method = c.req?.method;\n if (method && method !== \"POST\") {\n return c.json?.({ success: false, error: \"Use POST with CopilotKit runtime requests.\" }, 405);\n }\n\n try {\n return await handler(c.req?.raw ?? c.request ?? c);\n } catch (error) {\n console.error(\"[copilotkit] handler error\", error);\n return c.json?.(\n { success: false, error: \"CopilotKit handler failed\", detail: `${error}` },\n 500,\n );\n }\n };\n\n const register = (p: string) => {\n if (typeof options.app.post === \"function\") {\n options.app.post(p, routeHandler);\n } else {\n options.app.all(p, routeHandler);\n }\n };\n\n [path, `${path}/*`].forEach(register);\n // Deliberately no return; route registration side-effect only\n}\n"],"mappings":"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","names":["import_client","import_runtime","import_core"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/voltagent-agent.ts","../src/copilotkit.ts"],"sourcesContent":["export { VoltAgentAGUI, createVoltAgentAGUI } from \"./voltagent-agent\";\nexport {\n createCopilotKitHandler,\n registerCopilotKitRoutes,\n type CopilotKitHandlerOptions,\n type RegisterCopilotKitRoutesOptions,\n} from \"./copilotkit\";\n","import { AbstractAgent } from \"@ag-ui/client\";\nimport type {\n AssistantMessage,\n BaseEvent,\n DeveloperMessage,\n Message,\n RunAgentInput,\n RunErrorEvent,\n RunFinishedEvent,\n RunStartedEvent,\n StateSnapshotEvent,\n SystemMessage,\n TextMessageChunkEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n ToolMessage,\n UserMessage,\n} from \"@ag-ui/core\";\nimport { EventType } from \"@ag-ui/core\";\nimport type { StreamTextOptions, VoltAgentTextStreamPart } from \"@voltagent/core\";\nimport type { Agent } from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal/utils\";\nimport { Observable } from \"rxjs\";\n\ntype AGUIContextValue = {\n state?: Record<string, unknown>;\n context?: RunAgentInput[\"context\"];\n forwardedProps?: RunAgentInput[\"forwardedProps\"];\n};\n\ntype VoltAgentAGUIConfig = {\n agent: Agent;\n /**\n * Optional function to derive userId for VoltAgent memory/telemetry.\n */\n deriveUserId?: (input: RunAgentInput) => string | undefined;\n};\n\nfunction debugLog(message: string, data?: Record<string, unknown>) {\n // eslint-disable-next-line no-console\n console.log(`[VoltAgentAGUI] ${message}`, data ?? {});\n}\n\n/**\n * VoltAgent adapter that speaks the AG-UI protocol.\n * and stream VoltAgent events as AG-UI BaseEvents.\n */\nexport class VoltAgentAGUI extends AbstractAgent {\n private readonly agent: Agent;\n private readonly deriveUserId?: VoltAgentAGUIConfig[\"deriveUserId\"];\n\n constructor(config: VoltAgentAGUIConfig) {\n super();\n this.agent = config.agent;\n this.deriveUserId = config.deriveUserId;\n }\n\n run(input: RunAgentInput): ReturnType<AbstractAgent[\"run\"]> {\n const stream$ = new Observable<BaseEvent>((subscriber) => {\n const abortController = new AbortController();\n let finishedSent = false;\n debugLog(\"run start\", { threadId: input.threadId, runId: input.runId });\n const runStarted: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(runStarted);\n\n const run = async () => {\n let currentMessageId = generateId();\n\n try {\n await this.persistStateToWorkingMemory(input);\n\n const streamOptions = this.buildStreamOptions(input, abortController);\n const voltMessages = convertAGUIMessagesToVoltMessages(input.messages);\n\n debugLog(\"calling agent.streamText\", { messagesLength: voltMessages.length });\n const result = await this.agent.streamText(voltMessages as any, streamOptions);\n\n for await (const part of result.fullStream) {\n debugLog(\"fullStream part\", { partType: part.type, id: (part as any).id });\n const events = convertVoltStreamPartToEvents(part, currentMessageId);\n if (!events) continue;\n\n for (const event of events) {\n debugLog(\"emit event\", { type: event.type, messageId: (event as any).messageId });\n\n subscriber.next(event);\n if (\n (event.type === EventType.TEXT_MESSAGE_START ||\n event.type === EventType.TEXT_MESSAGE_CHUNK ||\n event.type === EventType.TEXT_MESSAGE_END) &&\n \"messageId\" in event &&\n event.messageId\n ) {\n currentMessageId = event.messageId;\n }\n }\n }\n\n const snapshotEvent = await this.readWorkingMemorySnapshot(input);\n if (snapshotEvent) {\n subscriber.next(snapshotEvent);\n }\n\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n debugLog(\"run finished\", { threadId: input.threadId, runId: input.runId });\n } catch (error) {\n debugLog(\"run error\", {\n threadId: input.threadId,\n runId: input.runId,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n // Make sure any partial text messages are closed before finishing\n const runError: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n };\n subscriber.next(runError);\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n\n void run();\n\n return () => {\n debugLog(\"run abort/unsubscribe\", {\n threadId: input.threadId,\n runId: input.runId,\n finishedSent,\n });\n abortController.abort();\n if (!finishedSent) {\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n });\n\n // Cast through unknown to avoid rxjs type mismatches across hoisted versions\n return stream$ as unknown as ReturnType<AbstractAgent[\"run\"]>;\n }\n\n private buildStreamOptions(\n input: RunAgentInput,\n abortController: AbortController,\n ): StreamTextOptions {\n const context = new Map<string, unknown>();\n const aguiContext: AGUIContextValue = {\n state: (input.state as Record<string, unknown>) || undefined,\n context: input.context,\n forwardedProps: input.forwardedProps,\n };\n\n context.set(\"agui:context\", aguiContext);\n\n return {\n abortSignal: abortController.signal,\n conversationId: input.threadId,\n userId: this.deriveUserId?.(input),\n context,\n };\n }\n\n private async persistStateToWorkingMemory(input: RunAgentInput): Promise<void> {\n const state = input.state;\n if (!state || typeof state !== \"object\" || Object.keys(state).length === 0) {\n return;\n }\n\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n await memory.updateWorkingMemory({\n conversationId: input.threadId,\n content: safeStringify(state),\n });\n } catch (error) {\n // Non-fatal: working memory might be disabled or misconfigured\n console.debug?.(\"Failed to persist AG-UI state to working memory\", error);\n }\n }\n\n private async readWorkingMemorySnapshot(\n input: RunAgentInput,\n ): Promise<StateSnapshotEvent | undefined> {\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n const raw = await memory.getWorkingMemory({\n conversationId: input.threadId,\n });\n\n if (!raw) {\n return;\n }\n\n let snapshot: unknown = raw;\n try {\n snapshot = JSON.parse(raw);\n } catch {\n // keep raw string\n }\n\n return {\n type: EventType.STATE_SNAPSHOT,\n snapshot,\n };\n } catch (error) {\n console.debug?.(\"Failed to read AG-UI working memory snapshot\", error);\n return;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Message conversion helpers\n// ---------------------------------------------------------------------------\n\nconst isUserMessage = (message: Message): message is UserMessage => message.role === \"user\";\nconst isAssistantMessage = (message: Message): message is AssistantMessage =>\n message.role === \"assistant\";\nconst isSystemMessage = (message: Message): message is SystemMessage => message.role === \"system\";\nconst isDeveloperMessage = (message: Message): message is DeveloperMessage =>\n message.role === \"developer\";\nconst isToolMessage = (message: Message): message is ToolMessage => message.role === \"tool\";\n\ntype VoltUIPart =\n | { type: \"text\"; text: string }\n | { type: \"tool-call\"; toolCallId: string; toolName: string; args?: unknown }\n | { type: \"tool-result\"; toolCallId?: string; toolName?: string; output?: unknown };\n\ntype VoltUIMessage = {\n id: string;\n role: \"user\" | \"assistant\" | \"system\" | \"tool\";\n content?: string;\n parts?: VoltUIPart[];\n};\n\nfunction convertAGUIMessagesToVoltMessages(messages: Message[]): VoltUIMessage[] {\n const toolNameById = new Map<string, string>();\n\n return messages.map((msg) => {\n const messageId = msg.id || generateId();\n\n if (isUserMessage(msg)) {\n return {\n id: messageId,\n role: \"user\",\n content: extractTextContent(msg.content),\n };\n }\n\n if (isAssistantMessage(msg)) {\n const parts: VoltUIPart[] = [];\n const textContent = msg.content ? extractTextContent(msg.content) : \"\";\n if (textContent) {\n parts.push({ type: \"text\", text: textContent });\n }\n\n for (const call of msg.toolCalls ?? []) {\n const args = safelyParseJson(call.function.arguments);\n toolNameById.set(call.id, call.function.name);\n parts.push({\n type: \"tool-call\",\n toolCallId: call.id,\n toolName: call.function.name,\n args,\n });\n }\n\n return {\n id: messageId,\n role: \"assistant\",\n parts,\n };\n }\n\n if (isSystemMessage(msg) || isDeveloperMessage(msg)) {\n return {\n id: messageId,\n role: \"system\",\n content: msg.content,\n };\n }\n\n if (isToolMessage(msg)) {\n const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : undefined;\n return {\n id: messageId,\n role: \"tool\",\n parts: [\n {\n type: \"tool-result\",\n toolCallId: msg.toolCallId,\n toolName: toolName ?? \"tool\",\n output: safelyParseJson(msg.content),\n },\n ],\n };\n }\n\n // activity or any other custom role -> fold into assistant text\n return {\n id: messageId,\n role: \"assistant\",\n parts: [{ type: \"text\", text: safeStringify((msg as any).content ?? \"\") }],\n };\n });\n}\n\nfunction extractTextContent(content: UserMessage[\"content\"] | AssistantMessage[\"content\"]): string {\n if (!content) return \"\";\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n\n const parts = content as Array<Record<string, unknown>>;\n\n return parts\n .map((part: Record<string, unknown>) => {\n const textValue = typeof part.text === \"string\" ? (part.text as string) : \"\";\n return textValue;\n })\n .filter((text: string) => text.length > 0)\n .join(\"\\n\");\n}\n\nfunction safelyParseJson(value: string | unknown): unknown {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Stream conversion helpers\n// ---------------------------------------------------------------------------\n\ntype StreamConversionResult =\n | TextMessageStartEvent\n | TextMessageChunkEvent\n | TextMessageEndEvent\n | ToolCallStartEvent\n | ToolCallEndEvent\n | ToolCallArgsEvent\n | ToolCallResultEvent;\n\nfunction convertVoltStreamPartToEvents(\n part: VoltAgentTextStreamPart,\n fallbackMessageId: string,\n): StreamConversionResult[] | null {\n const payload = (part as { payload?: Record<string, unknown> }).payload ?? part;\n\n switch (part.type) {\n case \"text-start\": {\n // Ignore explicit start; we'll synthesize start when first chunk/end arrives to avoid duplicates\n return null;\n }\n case \"text-delta\": {\n const event: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: part.text ?? \"\",\n messageId: part.id ?? fallbackMessageId,\n role: \"assistant\",\n };\n return [event];\n }\n case \"text-end\": {\n // Let transformChunks close the message; avoid emitting END without a START\n return null;\n }\n case \"tool-call\": {\n const toolCallId = (payload as { toolCallId?: string }).toolCallId ?? generateId();\n const toolName = (payload as { toolName?: string }).toolName ?? \"tool\";\n const rawArgs =\n (payload as { args?: unknown }).args ??\n (payload as { input?: unknown }).input ??\n (payload as { arguments?: unknown }).arguments;\n const argsEvent: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId,\n delta: safeStringify(rawArgs ?? {}),\n };\n const startEvent: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId,\n toolCallName: toolName,\n parentMessageId: fallbackMessageId,\n };\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId,\n };\n return [startEvent, argsEvent, endEvent];\n }\n case \"tool-result\": {\n const rawResult =\n (payload as { result?: unknown }).result ??\n (payload as { output?: unknown }).output ??\n (payload as { data?: unknown }).data ??\n payload;\n const resultEvent: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: (payload as { toolCallId?: string }).toolCallId ?? generateId(),\n content: safeStringify(rawResult ?? {}),\n messageId: generateId(),\n role: \"tool\",\n };\n return [resultEvent];\n }\n case \"error\": {\n const errorEvent: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: `Error: ${(payload as { error?: unknown }).error}`,\n messageId: fallbackMessageId,\n role: \"assistant\",\n };\n return [errorEvent];\n }\n default:\n return null;\n }\n}\n\nexport function createVoltAgentAGUI(config: VoltAgentAGUIConfig): VoltAgentAGUI {\n return new VoltAgentAGUI(config);\n}\n\nfunction generateId(): string {\n const cryptoApi = typeof globalThis !== \"undefined\" ? (globalThis as any).crypto : undefined;\n if (cryptoApi && typeof cryptoApi.randomUUID === \"function\") {\n return cryptoApi.randomUUID();\n }\n\n const random = () => Math.floor(Math.random() * 0xffff);\n let uuid = \"\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x0fff) | 0x4000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x3fff) | 0x8000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n return uuid;\n}\n","import { AbstractAgent } from \"@ag-ui/client\";\nimport type { RunAgentInput } from \"@ag-ui/core\";\nimport {\n CopilotRuntime,\n type CopilotServiceAdapter,\n ExperimentalEmptyAdapter,\n copilotRuntimeNextJSAppRouterEndpoint,\n} from \"@copilotkit/runtime\";\nimport type { Agent } from \"@voltagent/core\";\nimport { AgentRegistry } from \"@voltagent/core\";\nimport { createVoltAgentAGUI } from \"./voltagent-agent\";\n\nexport type CopilotKitHandlerOptions = {\n /**\n * Static map of AG-UI agents. Use either this or `loadAgents`.\n */\n agents?: Record<string, AbstractAgent>;\n /**\n * Lazy loader for AG-UI agents. If provided, it overrides `agents`.\n */\n loadAgents?: () => Promise<Record<string, AbstractAgent>> | Record<string, AbstractAgent>;\n /**\n * Optional service adapter. Defaults to ExperimentalEmptyAdapter.\n */\n serviceAdapter?: CopilotServiceAdapter;\n /**\n * Endpoint path used by CopilotKit clients. Defaults to \"/copilotkit\".\n */\n endpoint?: string;\n};\n\nexport type RegisterCopilotKitRoutesOptions = {\n /**\n * Hono-style app instance with `all(path, handler)` support.\n */\n app: {\n all: (path: string, handler: (c: any) => any) => any;\n post?: (path: string, handler: (c: any) => any) => any;\n };\n /**\n * VoltAgent agents to expose to CopilotKit. Will be wrapped lazily.\n */\n agents?: Record<string, Agent>;\n /**\n * Optional resource IDs to pick from the global AgentRegistry if `agents` is not provided.\n * If omitted and no agents are provided, all registered agents will be exposed.\n */\n resourceIds?: string[];\n /**\n * Path to mount CopilotKit endpoint. Defaults to \"/copilotkit\".\n */\n path?: string;\n};\n\n/**\n * Create a framework-agnostic fetch handler for CopilotKit that serves VoltAgent-backed AG-UI agents.\n *\n * @example\n * ```ts\n * import { createCopilotKitHandler } from \"@voltagent/ag-ui\";\n * import { createVoltAgentAGUI } from \"@voltagent/ag-ui\";\n * import { agent } from \"./agent\"; // VoltAgent instance\n *\n * const handler = createCopilotKitHandler({\n * agents: { assistant: createVoltAgentAGUI({ agent }) },\n * endpoint: \"/api/copilotkit\",\n * });\n *\n * export default {\n * fetch: handler,\n * };\n * ```\n */\nexport function createCopilotKitHandler(options: CopilotKitHandlerOptions) {\n const endpoint = options.endpoint ?? \"/copilotkit\";\n const serviceAdapter = options.serviceAdapter ?? new ExperimentalEmptyAdapter();\n\n return async (req: Request): Promise<Response> => {\n // We intentionally avoid logging request bodies to keep the handler silent in production.\n await req\n .clone()\n .text()\n .catch(() => undefined);\n\n const agents =\n (await options.loadAgents?.()) ??\n options.agents ??\n (() => {\n throw new Error(\"No agents provided to CopilotKit handler\");\n })();\n\n // Lightweight wrapper to add per-run/connect logging without touching the original agents\n const wrappedAgents: Record<string, AbstractAgent> = {};\n for (const [id, agent] of Object.entries(agents)) {\n wrappedAgents[id] = new (class extends AbstractAgent {\n run(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.run\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as AbstractAgent).run(input);\n }\n // Forward connect if the agent implements it\n connect(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.connect\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as any).connect?.(input);\n }\n clone() {\n return this;\n }\n })();\n }\n\n const runtime = new CopilotRuntime({ agents: wrappedAgents });\n\n const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({\n runtime,\n serviceAdapter,\n endpoint,\n });\n\n let response: Response;\n try {\n response = await handleRequest(req);\n } catch (error) {\n console.error(\"[CopilotKit] handler failed\", {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n throw error;\n }\n return response;\n };\n}\n\n/**\n * Convenience helper: register CopilotKit routes on a Hono-like app using VoltAgent agents.\n */\nexport function registerCopilotKitRoutes(options: RegisterCopilotKitRoutesOptions) {\n const path = options.path ?? \"/copilotkit\";\n const resolveAgents = (): Record<string, Agent> => {\n if (options.agents) return options.agents;\n const registry = AgentRegistry.getInstance();\n const ids = options.resourceIds;\n if (ids && ids.length > 0) {\n return Object.fromEntries(\n ids\n .map((id) => {\n const agent = registry.getAgent(id);\n return agent ? [id, agent] : undefined;\n })\n .filter(Boolean) as [string, Agent][],\n );\n }\n return Object.fromEntries(registry.getAllAgents().map((agent) => [agent.id, agent]));\n };\n\n const handler = createCopilotKitHandler({\n loadAgents: () =>\n Object.fromEntries(\n Object.entries(resolveAgents()).map(([id, agent]) => [id, createVoltAgentAGUI({ agent })]),\n ),\n endpoint: path,\n });\n\n const routeHandler = async (c: any) => {\n const method = c.req?.method;\n if (method && method !== \"POST\") {\n return c.json?.({ success: false, error: \"Use POST with CopilotKit runtime requests.\" }, 405);\n }\n\n try {\n return await handler(c.req?.raw ?? c.request ?? c);\n } catch (error) {\n console.error(\"[copilotkit] handler error\", error);\n return c.json?.(\n { success: false, error: \"CopilotKit handler failed\", detail: `${error}` },\n 500,\n );\n }\n };\n\n const register = (p: string) => {\n if (typeof options.app.post === \"function\") {\n options.app.post(p, routeHandler);\n } else {\n options.app.all(p, routeHandler);\n }\n };\n\n [path, `${path}/*`].forEach(register);\n // Deliberately no return; route registration side-effect only\n}\n"],"mappings":"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","names":["import_client","import_runtime","import_core"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/voltagent-agent.ts","../src/copilotkit.ts"],"sourcesContent":["import { AbstractAgent } from \"@ag-ui/client\";\nimport type {\n AssistantMessage,\n BaseEvent,\n DeveloperMessage,\n Message,\n RunAgentInput,\n RunErrorEvent,\n RunFinishedEvent,\n RunStartedEvent,\n StateSnapshotEvent,\n SystemMessage,\n TextMessageChunkEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n ToolMessage,\n UserMessage,\n} from \"@ag-ui/core\";\nimport { EventType } from \"@ag-ui/core\";\nimport type { StreamTextOptions, VoltAgentTextStreamPart } from \"@voltagent/core\";\nimport type { Agent } from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal/utils\";\nimport { Observable } from \"rxjs\";\n\ntype AGUIContextValue = {\n state?: Record<string, unknown>;\n context?: RunAgentInput[\"context\"];\n forwardedProps?: RunAgentInput[\"forwardedProps\"];\n};\n\ntype VoltAgentAGUIConfig = {\n agent: Agent;\n /**\n * Optional function to derive userId for VoltAgent memory/telemetry.\n */\n deriveUserId?: (input: RunAgentInput) => string | undefined;\n};\n\nfunction debugLog(message: string, data?: Record<string, unknown>) {\n // eslint-disable-next-line no-console\n console.log(`[VoltAgentAGUI] ${message}`, data ?? {});\n}\n\n/**\n * VoltAgent adapter that speaks the AG-UI protocol.\n * Mirrors the Mastra integration strategy: preserve AG-UI state in working memory\n * and stream VoltAgent events as AG-UI BaseEvents.\n */\nexport class VoltAgentAGUI extends AbstractAgent {\n private readonly agent: Agent;\n private readonly deriveUserId?: VoltAgentAGUIConfig[\"deriveUserId\"];\n\n constructor(config: VoltAgentAGUIConfig) {\n super();\n this.agent = config.agent;\n this.deriveUserId = config.deriveUserId;\n }\n\n run(input: RunAgentInput): ReturnType<AbstractAgent[\"run\"]> {\n const stream$ = new Observable<BaseEvent>((subscriber) => {\n const abortController = new AbortController();\n let finishedSent = false;\n debugLog(\"run start\", { threadId: input.threadId, runId: input.runId });\n const runStarted: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(runStarted);\n\n const run = async () => {\n let currentMessageId = generateId();\n\n try {\n await this.persistStateToWorkingMemory(input);\n\n const streamOptions = this.buildStreamOptions(input, abortController);\n const voltMessages = convertAGUIMessagesToVoltMessages(input.messages);\n\n debugLog(\"calling agent.streamText\", { messagesLength: voltMessages.length });\n const result = await this.agent.streamText(voltMessages as any, streamOptions);\n\n for await (const part of result.fullStream) {\n debugLog(\"fullStream part\", { partType: part.type, id: (part as any).id });\n const events = convertVoltStreamPartToEvents(part, currentMessageId);\n if (!events) continue;\n\n for (const event of events) {\n debugLog(\"emit event\", { type: event.type, messageId: (event as any).messageId });\n\n subscriber.next(event);\n if (\n (event.type === EventType.TEXT_MESSAGE_START ||\n event.type === EventType.TEXT_MESSAGE_CHUNK ||\n event.type === EventType.TEXT_MESSAGE_END) &&\n \"messageId\" in event &&\n event.messageId\n ) {\n currentMessageId = event.messageId;\n }\n }\n }\n\n const snapshotEvent = await this.readWorkingMemorySnapshot(input);\n if (snapshotEvent) {\n subscriber.next(snapshotEvent);\n }\n\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n debugLog(\"run finished\", { threadId: input.threadId, runId: input.runId });\n } catch (error) {\n debugLog(\"run error\", {\n threadId: input.threadId,\n runId: input.runId,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n // Make sure any partial text messages are closed before finishing\n const runError: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n };\n subscriber.next(runError);\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n\n void run();\n\n return () => {\n debugLog(\"run abort/unsubscribe\", {\n threadId: input.threadId,\n runId: input.runId,\n finishedSent,\n });\n abortController.abort();\n if (!finishedSent) {\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n });\n\n // Cast through unknown to avoid rxjs type mismatches across hoisted versions\n return stream$ as unknown as ReturnType<AbstractAgent[\"run\"]>;\n }\n\n private buildStreamOptions(\n input: RunAgentInput,\n abortController: AbortController,\n ): StreamTextOptions {\n const context = new Map<string, unknown>();\n const aguiContext: AGUIContextValue = {\n state: (input.state as Record<string, unknown>) || undefined,\n context: input.context,\n forwardedProps: input.forwardedProps,\n };\n\n context.set(\"agui:context\", aguiContext);\n\n return {\n abortSignal: abortController.signal,\n conversationId: input.threadId,\n userId: this.deriveUserId?.(input),\n context,\n };\n }\n\n private async persistStateToWorkingMemory(input: RunAgentInput): Promise<void> {\n const state = input.state;\n if (!state || typeof state !== \"object\" || Object.keys(state).length === 0) {\n return;\n }\n\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n await memory.updateWorkingMemory({\n conversationId: input.threadId,\n content: safeStringify(state),\n });\n } catch (error) {\n // Non-fatal: working memory might be disabled or misconfigured\n console.debug?.(\"Failed to persist AG-UI state to working memory\", error);\n }\n }\n\n private async readWorkingMemorySnapshot(\n input: RunAgentInput,\n ): Promise<StateSnapshotEvent | undefined> {\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n const raw = await memory.getWorkingMemory({\n conversationId: input.threadId,\n });\n\n if (!raw) {\n return;\n }\n\n let snapshot: unknown = raw;\n try {\n snapshot = JSON.parse(raw);\n } catch {\n // keep raw string\n }\n\n return {\n type: EventType.STATE_SNAPSHOT,\n snapshot,\n };\n } catch (error) {\n console.debug?.(\"Failed to read AG-UI working memory snapshot\", error);\n return;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Message conversion helpers\n// ---------------------------------------------------------------------------\n\nconst isUserMessage = (message: Message): message is UserMessage => message.role === \"user\";\nconst isAssistantMessage = (message: Message): message is AssistantMessage =>\n message.role === \"assistant\";\nconst isSystemMessage = (message: Message): message is SystemMessage => message.role === \"system\";\nconst isDeveloperMessage = (message: Message): message is DeveloperMessage =>\n message.role === \"developer\";\nconst isToolMessage = (message: Message): message is ToolMessage => message.role === \"tool\";\n\ntype VoltUIPart =\n | { type: \"text\"; text: string }\n | { type: \"tool-call\"; toolCallId: string; toolName: string; args?: unknown }\n | { type: \"tool-result\"; toolCallId?: string; toolName?: string; output?: unknown };\n\ntype VoltUIMessage = {\n id: string;\n role: \"user\" | \"assistant\" | \"system\" | \"tool\";\n content?: string;\n parts?: VoltUIPart[];\n};\n\nfunction convertAGUIMessagesToVoltMessages(messages: Message[]): VoltUIMessage[] {\n const toolNameById = new Map<string, string>();\n\n return messages.map((msg) => {\n const messageId = msg.id || generateId();\n\n if (isUserMessage(msg)) {\n return {\n id: messageId,\n role: \"user\",\n content: extractTextContent(msg.content),\n };\n }\n\n if (isAssistantMessage(msg)) {\n const parts: VoltUIPart[] = [];\n const textContent = msg.content ? extractTextContent(msg.content) : \"\";\n if (textContent) {\n parts.push({ type: \"text\", text: textContent });\n }\n\n for (const call of msg.toolCalls ?? []) {\n const args = safelyParseJson(call.function.arguments);\n toolNameById.set(call.id, call.function.name);\n parts.push({\n type: \"tool-call\",\n toolCallId: call.id,\n toolName: call.function.name,\n args,\n });\n }\n\n return {\n id: messageId,\n role: \"assistant\",\n parts,\n };\n }\n\n if (isSystemMessage(msg) || isDeveloperMessage(msg)) {\n return {\n id: messageId,\n role: \"system\",\n content: msg.content,\n };\n }\n\n if (isToolMessage(msg)) {\n const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : undefined;\n return {\n id: messageId,\n role: \"tool\",\n parts: [\n {\n type: \"tool-result\",\n toolCallId: msg.toolCallId,\n toolName: toolName ?? \"tool\",\n output: safelyParseJson(msg.content),\n },\n ],\n };\n }\n\n // activity or any other custom role -> fold into assistant text\n return {\n id: messageId,\n role: \"assistant\",\n parts: [{ type: \"text\", text: safeStringify((msg as any).content ?? \"\") }],\n };\n });\n}\n\nfunction extractTextContent(content: UserMessage[\"content\"] | AssistantMessage[\"content\"]): string {\n if (!content) return \"\";\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n\n const parts = content as Array<Record<string, unknown>>;\n\n return parts\n .map((part: Record<string, unknown>) => {\n const textValue = typeof part.text === \"string\" ? (part.text as string) : \"\";\n return textValue;\n })\n .filter((text: string) => text.length > 0)\n .join(\"\\n\");\n}\n\nfunction safelyParseJson(value: string | unknown): unknown {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Stream conversion helpers\n// ---------------------------------------------------------------------------\n\ntype StreamConversionResult =\n | TextMessageStartEvent\n | TextMessageChunkEvent\n | TextMessageEndEvent\n | ToolCallStartEvent\n | ToolCallEndEvent\n | ToolCallArgsEvent\n | ToolCallResultEvent;\n\nfunction convertVoltStreamPartToEvents(\n part: VoltAgentTextStreamPart,\n fallbackMessageId: string,\n): StreamConversionResult[] | null {\n const payload = (part as { payload?: Record<string, unknown> }).payload ?? part;\n\n switch (part.type) {\n case \"text-start\": {\n // Ignore explicit start; we'll synthesize start when first chunk/end arrives to avoid duplicates\n return null;\n }\n case \"text-delta\": {\n const event: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: part.text ?? \"\",\n messageId: part.id ?? fallbackMessageId,\n role: \"assistant\",\n };\n return [event];\n }\n case \"text-end\": {\n // Let transformChunks close the message; avoid emitting END without a START\n return null;\n }\n case \"tool-call\": {\n const toolCallId = (payload as { toolCallId?: string }).toolCallId ?? generateId();\n const toolName = (payload as { toolName?: string }).toolName ?? \"tool\";\n const rawArgs =\n (payload as { args?: unknown }).args ??\n (payload as { input?: unknown }).input ??\n (payload as { arguments?: unknown }).arguments;\n const argsEvent: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId,\n delta: safeStringify(rawArgs ?? {}),\n };\n const startEvent: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId,\n toolCallName: toolName,\n parentMessageId: fallbackMessageId,\n };\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId,\n };\n return [startEvent, argsEvent, endEvent];\n }\n case \"tool-result\": {\n const rawResult =\n (payload as { result?: unknown }).result ??\n (payload as { output?: unknown }).output ??\n (payload as { data?: unknown }).data ??\n payload;\n const resultEvent: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: (payload as { toolCallId?: string }).toolCallId ?? generateId(),\n content: safeStringify(rawResult ?? {}),\n messageId: generateId(),\n role: \"tool\",\n };\n return [resultEvent];\n }\n case \"error\": {\n const errorEvent: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: `Error: ${(payload as { error?: unknown }).error}`,\n messageId: fallbackMessageId,\n role: \"assistant\",\n };\n return [errorEvent];\n }\n default:\n return null;\n }\n}\n\nexport function createVoltAgentAGUI(config: VoltAgentAGUIConfig): VoltAgentAGUI {\n return new VoltAgentAGUI(config);\n}\n\nfunction generateId(): string {\n const cryptoApi = typeof globalThis !== \"undefined\" ? (globalThis as any).crypto : undefined;\n if (cryptoApi && typeof cryptoApi.randomUUID === \"function\") {\n return cryptoApi.randomUUID();\n }\n\n const random = () => Math.floor(Math.random() * 0xffff);\n let uuid = \"\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x0fff) | 0x4000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x3fff) | 0x8000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n return uuid;\n}\n","import { AbstractAgent } from \"@ag-ui/client\";\nimport type { RunAgentInput } from \"@ag-ui/core\";\nimport {\n CopilotRuntime,\n type CopilotServiceAdapter,\n ExperimentalEmptyAdapter,\n copilotRuntimeNextJSAppRouterEndpoint,\n} from \"@copilotkit/runtime\";\nimport type { Agent } from \"@voltagent/core\";\nimport { AgentRegistry } from \"@voltagent/core\";\nimport { createVoltAgentAGUI } from \"./voltagent-agent\";\n\nexport type CopilotKitHandlerOptions = {\n /**\n * Static map of AG-UI agents. Use either this or `loadAgents`.\n */\n agents?: Record<string, AbstractAgent>;\n /**\n * Lazy loader for AG-UI agents. If provided, it overrides `agents`.\n */\n loadAgents?: () => Promise<Record<string, AbstractAgent>> | Record<string, AbstractAgent>;\n /**\n * Optional service adapter. Defaults to ExperimentalEmptyAdapter.\n */\n serviceAdapter?: CopilotServiceAdapter;\n /**\n * Endpoint path used by CopilotKit clients. Defaults to \"/copilotkit\".\n */\n endpoint?: string;\n};\n\nexport type RegisterCopilotKitRoutesOptions = {\n /**\n * Hono-style app instance with `all(path, handler)` support.\n */\n app: {\n all: (path: string, handler: (c: any) => any) => any;\n post?: (path: string, handler: (c: any) => any) => any;\n };\n /**\n * VoltAgent agents to expose to CopilotKit. Will be wrapped lazily.\n */\n agents?: Record<string, Agent>;\n /**\n * Optional resource IDs to pick from the global AgentRegistry if `agents` is not provided.\n * If omitted and no agents are provided, all registered agents will be exposed.\n */\n resourceIds?: string[];\n /**\n * Path to mount CopilotKit endpoint. Defaults to \"/copilotkit\".\n */\n path?: string;\n};\n\n/**\n * Create a framework-agnostic fetch handler for CopilotKit that serves VoltAgent-backed AG-UI agents.\n *\n * @example\n * ```ts\n * import { createCopilotKitHandler } from \"@voltagent/ag-ui\";\n * import { createVoltAgentAGUI } from \"@voltagent/ag-ui\";\n * import { agent } from \"./agent\"; // VoltAgent instance\n *\n * const handler = createCopilotKitHandler({\n * agents: { assistant: createVoltAgentAGUI({ agent }) },\n * endpoint: \"/api/copilotkit\",\n * });\n *\n * export default {\n * fetch: handler,\n * };\n * ```\n */\nexport function createCopilotKitHandler(options: CopilotKitHandlerOptions) {\n const endpoint = options.endpoint ?? \"/copilotkit\";\n const serviceAdapter = options.serviceAdapter ?? new ExperimentalEmptyAdapter();\n\n return async (req: Request): Promise<Response> => {\n // We intentionally avoid logging request bodies to keep the handler silent in production.\n await req\n .clone()\n .text()\n .catch(() => undefined);\n\n const agents =\n (await options.loadAgents?.()) ??\n options.agents ??\n (() => {\n throw new Error(\"No agents provided to CopilotKit handler\");\n })();\n\n // Lightweight wrapper to add per-run/connect logging without touching the original agents\n const wrappedAgents: Record<string, AbstractAgent> = {};\n for (const [id, agent] of Object.entries(agents)) {\n wrappedAgents[id] = new (class extends AbstractAgent {\n run(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.run\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as AbstractAgent).run(input);\n }\n // Forward connect if the agent implements it\n connect(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.connect\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as any).connect?.(input);\n }\n clone() {\n return this;\n }\n })();\n }\n\n const runtime = new CopilotRuntime({ agents: wrappedAgents });\n\n const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({\n runtime,\n serviceAdapter,\n endpoint,\n });\n\n let response: Response;\n try {\n response = await handleRequest(req);\n } catch (error) {\n console.error(\"[CopilotKit] handler failed\", {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n throw error;\n }\n return response;\n };\n}\n\n/**\n * Convenience helper: register CopilotKit routes on a Hono-like app using VoltAgent agents.\n */\nexport function registerCopilotKitRoutes(options: RegisterCopilotKitRoutesOptions) {\n const path = options.path ?? \"/copilotkit\";\n const resolveAgents = (): Record<string, Agent> => {\n if (options.agents) return options.agents;\n const registry = AgentRegistry.getInstance();\n const ids = options.resourceIds;\n if (ids && ids.length > 0) {\n return Object.fromEntries(\n ids\n .map((id) => {\n const agent = registry.getAgent(id);\n return agent ? [id, agent] : undefined;\n })\n .filter(Boolean) as [string, Agent][],\n );\n }\n return Object.fromEntries(registry.getAllAgents().map((agent) => [agent.id, agent]));\n };\n\n const handler = createCopilotKitHandler({\n loadAgents: () =>\n Object.fromEntries(\n Object.entries(resolveAgents()).map(([id, agent]) => [id, createVoltAgentAGUI({ agent })]),\n ),\n endpoint: path,\n });\n\n const routeHandler = async (c: any) => {\n const method = c.req?.method;\n if (method && method !== \"POST\") {\n return c.json?.({ success: false, error: \"Use POST with CopilotKit runtime requests.\" }, 405);\n }\n\n try {\n return await handler(c.req?.raw ?? c.request ?? c);\n } catch (error) {\n console.error(\"[copilotkit] handler error\", error);\n return c.json?.(\n { success: false, error: \"CopilotKit handler failed\", detail: `${error}` },\n 500,\n );\n }\n };\n\n const register = (p: string) => {\n if (typeof options.app.post === \"function\") {\n options.app.post(p, routeHandler);\n } else {\n options.app.all(p, routeHandler);\n }\n };\n\n [path, `${path}/*`].forEach(register);\n // Deliberately no return; route registration side-effect only\n}\n"],"mappings":"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","names":["AbstractAgent","AbstractAgent"]}
1
+ {"version":3,"sources":["../src/voltagent-agent.ts","../src/copilotkit.ts"],"sourcesContent":["import { AbstractAgent } from \"@ag-ui/client\";\nimport type {\n AssistantMessage,\n BaseEvent,\n DeveloperMessage,\n Message,\n RunAgentInput,\n RunErrorEvent,\n RunFinishedEvent,\n RunStartedEvent,\n StateSnapshotEvent,\n SystemMessage,\n TextMessageChunkEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n ToolMessage,\n UserMessage,\n} from \"@ag-ui/core\";\nimport { EventType } from \"@ag-ui/core\";\nimport type { StreamTextOptions, VoltAgentTextStreamPart } from \"@voltagent/core\";\nimport type { Agent } from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal/utils\";\nimport { Observable } from \"rxjs\";\n\ntype AGUIContextValue = {\n state?: Record<string, unknown>;\n context?: RunAgentInput[\"context\"];\n forwardedProps?: RunAgentInput[\"forwardedProps\"];\n};\n\ntype VoltAgentAGUIConfig = {\n agent: Agent;\n /**\n * Optional function to derive userId for VoltAgent memory/telemetry.\n */\n deriveUserId?: (input: RunAgentInput) => string | undefined;\n};\n\nfunction debugLog(message: string, data?: Record<string, unknown>) {\n // eslint-disable-next-line no-console\n console.log(`[VoltAgentAGUI] ${message}`, data ?? {});\n}\n\n/**\n * VoltAgent adapter that speaks the AG-UI protocol.\n * and stream VoltAgent events as AG-UI BaseEvents.\n */\nexport class VoltAgentAGUI extends AbstractAgent {\n private readonly agent: Agent;\n private readonly deriveUserId?: VoltAgentAGUIConfig[\"deriveUserId\"];\n\n constructor(config: VoltAgentAGUIConfig) {\n super();\n this.agent = config.agent;\n this.deriveUserId = config.deriveUserId;\n }\n\n run(input: RunAgentInput): ReturnType<AbstractAgent[\"run\"]> {\n const stream$ = new Observable<BaseEvent>((subscriber) => {\n const abortController = new AbortController();\n let finishedSent = false;\n debugLog(\"run start\", { threadId: input.threadId, runId: input.runId });\n const runStarted: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(runStarted);\n\n const run = async () => {\n let currentMessageId = generateId();\n\n try {\n await this.persistStateToWorkingMemory(input);\n\n const streamOptions = this.buildStreamOptions(input, abortController);\n const voltMessages = convertAGUIMessagesToVoltMessages(input.messages);\n\n debugLog(\"calling agent.streamText\", { messagesLength: voltMessages.length });\n const result = await this.agent.streamText(voltMessages as any, streamOptions);\n\n for await (const part of result.fullStream) {\n debugLog(\"fullStream part\", { partType: part.type, id: (part as any).id });\n const events = convertVoltStreamPartToEvents(part, currentMessageId);\n if (!events) continue;\n\n for (const event of events) {\n debugLog(\"emit event\", { type: event.type, messageId: (event as any).messageId });\n\n subscriber.next(event);\n if (\n (event.type === EventType.TEXT_MESSAGE_START ||\n event.type === EventType.TEXT_MESSAGE_CHUNK ||\n event.type === EventType.TEXT_MESSAGE_END) &&\n \"messageId\" in event &&\n event.messageId\n ) {\n currentMessageId = event.messageId;\n }\n }\n }\n\n const snapshotEvent = await this.readWorkingMemorySnapshot(input);\n if (snapshotEvent) {\n subscriber.next(snapshotEvent);\n }\n\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n debugLog(\"run finished\", { threadId: input.threadId, runId: input.runId });\n } catch (error) {\n debugLog(\"run error\", {\n threadId: input.threadId,\n runId: input.runId,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n // Make sure any partial text messages are closed before finishing\n const runError: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n };\n subscriber.next(runError);\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n\n void run();\n\n return () => {\n debugLog(\"run abort/unsubscribe\", {\n threadId: input.threadId,\n runId: input.runId,\n finishedSent,\n });\n abortController.abort();\n if (!finishedSent) {\n const finished: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: input.threadId,\n runId: input.runId,\n };\n subscriber.next(finished);\n finishedSent = true;\n subscriber.complete();\n }\n };\n });\n\n // Cast through unknown to avoid rxjs type mismatches across hoisted versions\n return stream$ as unknown as ReturnType<AbstractAgent[\"run\"]>;\n }\n\n private buildStreamOptions(\n input: RunAgentInput,\n abortController: AbortController,\n ): StreamTextOptions {\n const context = new Map<string, unknown>();\n const aguiContext: AGUIContextValue = {\n state: (input.state as Record<string, unknown>) || undefined,\n context: input.context,\n forwardedProps: input.forwardedProps,\n };\n\n context.set(\"agui:context\", aguiContext);\n\n return {\n abortSignal: abortController.signal,\n conversationId: input.threadId,\n userId: this.deriveUserId?.(input),\n context,\n };\n }\n\n private async persistStateToWorkingMemory(input: RunAgentInput): Promise<void> {\n const state = input.state;\n if (!state || typeof state !== \"object\" || Object.keys(state).length === 0) {\n return;\n }\n\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n await memory.updateWorkingMemory({\n conversationId: input.threadId,\n content: safeStringify(state),\n });\n } catch (error) {\n // Non-fatal: working memory might be disabled or misconfigured\n console.debug?.(\"Failed to persist AG-UI state to working memory\", error);\n }\n }\n\n private async readWorkingMemorySnapshot(\n input: RunAgentInput,\n ): Promise<StateSnapshotEvent | undefined> {\n const memory = this.agent.getMemory?.();\n if (!memory) {\n return;\n }\n\n try {\n const raw = await memory.getWorkingMemory({\n conversationId: input.threadId,\n });\n\n if (!raw) {\n return;\n }\n\n let snapshot: unknown = raw;\n try {\n snapshot = JSON.parse(raw);\n } catch {\n // keep raw string\n }\n\n return {\n type: EventType.STATE_SNAPSHOT,\n snapshot,\n };\n } catch (error) {\n console.debug?.(\"Failed to read AG-UI working memory snapshot\", error);\n return;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Message conversion helpers\n// ---------------------------------------------------------------------------\n\nconst isUserMessage = (message: Message): message is UserMessage => message.role === \"user\";\nconst isAssistantMessage = (message: Message): message is AssistantMessage =>\n message.role === \"assistant\";\nconst isSystemMessage = (message: Message): message is SystemMessage => message.role === \"system\";\nconst isDeveloperMessage = (message: Message): message is DeveloperMessage =>\n message.role === \"developer\";\nconst isToolMessage = (message: Message): message is ToolMessage => message.role === \"tool\";\n\ntype VoltUIPart =\n | { type: \"text\"; text: string }\n | { type: \"tool-call\"; toolCallId: string; toolName: string; args?: unknown }\n | { type: \"tool-result\"; toolCallId?: string; toolName?: string; output?: unknown };\n\ntype VoltUIMessage = {\n id: string;\n role: \"user\" | \"assistant\" | \"system\" | \"tool\";\n content?: string;\n parts?: VoltUIPart[];\n};\n\nfunction convertAGUIMessagesToVoltMessages(messages: Message[]): VoltUIMessage[] {\n const toolNameById = new Map<string, string>();\n\n return messages.map((msg) => {\n const messageId = msg.id || generateId();\n\n if (isUserMessage(msg)) {\n return {\n id: messageId,\n role: \"user\",\n content: extractTextContent(msg.content),\n };\n }\n\n if (isAssistantMessage(msg)) {\n const parts: VoltUIPart[] = [];\n const textContent = msg.content ? extractTextContent(msg.content) : \"\";\n if (textContent) {\n parts.push({ type: \"text\", text: textContent });\n }\n\n for (const call of msg.toolCalls ?? []) {\n const args = safelyParseJson(call.function.arguments);\n toolNameById.set(call.id, call.function.name);\n parts.push({\n type: \"tool-call\",\n toolCallId: call.id,\n toolName: call.function.name,\n args,\n });\n }\n\n return {\n id: messageId,\n role: \"assistant\",\n parts,\n };\n }\n\n if (isSystemMessage(msg) || isDeveloperMessage(msg)) {\n return {\n id: messageId,\n role: \"system\",\n content: msg.content,\n };\n }\n\n if (isToolMessage(msg)) {\n const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : undefined;\n return {\n id: messageId,\n role: \"tool\",\n parts: [\n {\n type: \"tool-result\",\n toolCallId: msg.toolCallId,\n toolName: toolName ?? \"tool\",\n output: safelyParseJson(msg.content),\n },\n ],\n };\n }\n\n // activity or any other custom role -> fold into assistant text\n return {\n id: messageId,\n role: \"assistant\",\n parts: [{ type: \"text\", text: safeStringify((msg as any).content ?? \"\") }],\n };\n });\n}\n\nfunction extractTextContent(content: UserMessage[\"content\"] | AssistantMessage[\"content\"]): string {\n if (!content) return \"\";\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n\n const parts = content as Array<Record<string, unknown>>;\n\n return parts\n .map((part: Record<string, unknown>) => {\n const textValue = typeof part.text === \"string\" ? (part.text as string) : \"\";\n return textValue;\n })\n .filter((text: string) => text.length > 0)\n .join(\"\\n\");\n}\n\nfunction safelyParseJson(value: string | unknown): unknown {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Stream conversion helpers\n// ---------------------------------------------------------------------------\n\ntype StreamConversionResult =\n | TextMessageStartEvent\n | TextMessageChunkEvent\n | TextMessageEndEvent\n | ToolCallStartEvent\n | ToolCallEndEvent\n | ToolCallArgsEvent\n | ToolCallResultEvent;\n\nfunction convertVoltStreamPartToEvents(\n part: VoltAgentTextStreamPart,\n fallbackMessageId: string,\n): StreamConversionResult[] | null {\n const payload = (part as { payload?: Record<string, unknown> }).payload ?? part;\n\n switch (part.type) {\n case \"text-start\": {\n // Ignore explicit start; we'll synthesize start when first chunk/end arrives to avoid duplicates\n return null;\n }\n case \"text-delta\": {\n const event: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: part.text ?? \"\",\n messageId: part.id ?? fallbackMessageId,\n role: \"assistant\",\n };\n return [event];\n }\n case \"text-end\": {\n // Let transformChunks close the message; avoid emitting END without a START\n return null;\n }\n case \"tool-call\": {\n const toolCallId = (payload as { toolCallId?: string }).toolCallId ?? generateId();\n const toolName = (payload as { toolName?: string }).toolName ?? \"tool\";\n const rawArgs =\n (payload as { args?: unknown }).args ??\n (payload as { input?: unknown }).input ??\n (payload as { arguments?: unknown }).arguments;\n const argsEvent: ToolCallArgsEvent = {\n type: EventType.TOOL_CALL_ARGS,\n toolCallId,\n delta: safeStringify(rawArgs ?? {}),\n };\n const startEvent: ToolCallStartEvent = {\n type: EventType.TOOL_CALL_START,\n toolCallId,\n toolCallName: toolName,\n parentMessageId: fallbackMessageId,\n };\n const endEvent: ToolCallEndEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId,\n };\n return [startEvent, argsEvent, endEvent];\n }\n case \"tool-result\": {\n const rawResult =\n (payload as { result?: unknown }).result ??\n (payload as { output?: unknown }).output ??\n (payload as { data?: unknown }).data ??\n payload;\n const resultEvent: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: (payload as { toolCallId?: string }).toolCallId ?? generateId(),\n content: safeStringify(rawResult ?? {}),\n messageId: generateId(),\n role: \"tool\",\n };\n return [resultEvent];\n }\n case \"error\": {\n const errorEvent: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: `Error: ${(payload as { error?: unknown }).error}`,\n messageId: fallbackMessageId,\n role: \"assistant\",\n };\n return [errorEvent];\n }\n default:\n return null;\n }\n}\n\nexport function createVoltAgentAGUI(config: VoltAgentAGUIConfig): VoltAgentAGUI {\n return new VoltAgentAGUI(config);\n}\n\nfunction generateId(): string {\n const cryptoApi = typeof globalThis !== \"undefined\" ? (globalThis as any).crypto : undefined;\n if (cryptoApi && typeof cryptoApi.randomUUID === \"function\") {\n return cryptoApi.randomUUID();\n }\n\n const random = () => Math.floor(Math.random() * 0xffff);\n let uuid = \"\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x0fff) | 0x4000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += ((random() & 0x3fff) | 0x8000).toString(16).padStart(4, \"0\");\n uuid += \"-\";\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n uuid += random().toString(16).padStart(4, \"0\");\n return uuid;\n}\n","import { AbstractAgent } from \"@ag-ui/client\";\nimport type { RunAgentInput } from \"@ag-ui/core\";\nimport {\n CopilotRuntime,\n type CopilotServiceAdapter,\n ExperimentalEmptyAdapter,\n copilotRuntimeNextJSAppRouterEndpoint,\n} from \"@copilotkit/runtime\";\nimport type { Agent } from \"@voltagent/core\";\nimport { AgentRegistry } from \"@voltagent/core\";\nimport { createVoltAgentAGUI } from \"./voltagent-agent\";\n\nexport type CopilotKitHandlerOptions = {\n /**\n * Static map of AG-UI agents. Use either this or `loadAgents`.\n */\n agents?: Record<string, AbstractAgent>;\n /**\n * Lazy loader for AG-UI agents. If provided, it overrides `agents`.\n */\n loadAgents?: () => Promise<Record<string, AbstractAgent>> | Record<string, AbstractAgent>;\n /**\n * Optional service adapter. Defaults to ExperimentalEmptyAdapter.\n */\n serviceAdapter?: CopilotServiceAdapter;\n /**\n * Endpoint path used by CopilotKit clients. Defaults to \"/copilotkit\".\n */\n endpoint?: string;\n};\n\nexport type RegisterCopilotKitRoutesOptions = {\n /**\n * Hono-style app instance with `all(path, handler)` support.\n */\n app: {\n all: (path: string, handler: (c: any) => any) => any;\n post?: (path: string, handler: (c: any) => any) => any;\n };\n /**\n * VoltAgent agents to expose to CopilotKit. Will be wrapped lazily.\n */\n agents?: Record<string, Agent>;\n /**\n * Optional resource IDs to pick from the global AgentRegistry if `agents` is not provided.\n * If omitted and no agents are provided, all registered agents will be exposed.\n */\n resourceIds?: string[];\n /**\n * Path to mount CopilotKit endpoint. Defaults to \"/copilotkit\".\n */\n path?: string;\n};\n\n/**\n * Create a framework-agnostic fetch handler for CopilotKit that serves VoltAgent-backed AG-UI agents.\n *\n * @example\n * ```ts\n * import { createCopilotKitHandler } from \"@voltagent/ag-ui\";\n * import { createVoltAgentAGUI } from \"@voltagent/ag-ui\";\n * import { agent } from \"./agent\"; // VoltAgent instance\n *\n * const handler = createCopilotKitHandler({\n * agents: { assistant: createVoltAgentAGUI({ agent }) },\n * endpoint: \"/api/copilotkit\",\n * });\n *\n * export default {\n * fetch: handler,\n * };\n * ```\n */\nexport function createCopilotKitHandler(options: CopilotKitHandlerOptions) {\n const endpoint = options.endpoint ?? \"/copilotkit\";\n const serviceAdapter = options.serviceAdapter ?? new ExperimentalEmptyAdapter();\n\n return async (req: Request): Promise<Response> => {\n // We intentionally avoid logging request bodies to keep the handler silent in production.\n await req\n .clone()\n .text()\n .catch(() => undefined);\n\n const agents =\n (await options.loadAgents?.()) ??\n options.agents ??\n (() => {\n throw new Error(\"No agents provided to CopilotKit handler\");\n })();\n\n // Lightweight wrapper to add per-run/connect logging without touching the original agents\n const wrappedAgents: Record<string, AbstractAgent> = {};\n for (const [id, agent] of Object.entries(agents)) {\n wrappedAgents[id] = new (class extends AbstractAgent {\n run(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.run\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as AbstractAgent).run(input);\n }\n // Forward connect if the agent implements it\n connect(input: RunAgentInput) {\n console.log(\"[CopilotKit] agent.connect\", {\n agentId: id,\n threadId: input.threadId,\n runId: input.runId,\n });\n return (agent as any).connect?.(input);\n }\n clone() {\n return this;\n }\n })();\n }\n\n const runtime = new CopilotRuntime({ agents: wrappedAgents });\n\n const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({\n runtime,\n serviceAdapter,\n endpoint,\n });\n\n let response: Response;\n try {\n response = await handleRequest(req);\n } catch (error) {\n console.error(\"[CopilotKit] handler failed\", {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n throw error;\n }\n return response;\n };\n}\n\n/**\n * Convenience helper: register CopilotKit routes on a Hono-like app using VoltAgent agents.\n */\nexport function registerCopilotKitRoutes(options: RegisterCopilotKitRoutesOptions) {\n const path = options.path ?? \"/copilotkit\";\n const resolveAgents = (): Record<string, Agent> => {\n if (options.agents) return options.agents;\n const registry = AgentRegistry.getInstance();\n const ids = options.resourceIds;\n if (ids && ids.length > 0) {\n return Object.fromEntries(\n ids\n .map((id) => {\n const agent = registry.getAgent(id);\n return agent ? [id, agent] : undefined;\n })\n .filter(Boolean) as [string, Agent][],\n );\n }\n return Object.fromEntries(registry.getAllAgents().map((agent) => [agent.id, agent]));\n };\n\n const handler = createCopilotKitHandler({\n loadAgents: () =>\n Object.fromEntries(\n Object.entries(resolveAgents()).map(([id, agent]) => [id, createVoltAgentAGUI({ agent })]),\n ),\n endpoint: path,\n });\n\n const routeHandler = async (c: any) => {\n const method = c.req?.method;\n if (method && method !== \"POST\") {\n return c.json?.({ success: false, error: \"Use POST with CopilotKit runtime requests.\" }, 405);\n }\n\n try {\n return await handler(c.req?.raw ?? c.request ?? c);\n } catch (error) {\n console.error(\"[copilotkit] handler error\", error);\n return c.json?.(\n { success: false, error: \"CopilotKit handler failed\", detail: `${error}` },\n 500,\n );\n }\n };\n\n const register = (p: string) => {\n if (typeof options.app.post === \"function\") {\n options.app.post(p, routeHandler);\n } else {\n options.app.all(p, routeHandler);\n }\n };\n\n [path, `${path}/*`].forEach(register);\n // Deliberately no return; route registration side-effect only\n}\n"],"mappings":"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","names":["AbstractAgent","AbstractAgent"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@voltagent/ag-ui",
3
3
  "description": "AG-UI adapter for VoltAgent agents and CopilotKit runtimes.",
4
- "version": "0.1.0",
4
+ "version": "1.0.1",
5
5
  "dependencies": {
6
6
  "rxjs": "^7.8.1"
7
7
  },
@@ -10,8 +10,8 @@
10
10
  "@ag-ui/core": "^0.0.37",
11
11
  "@copilotkit/runtime": "^1.50.0",
12
12
  "@vitest/coverage-v8": "^3.2.4",
13
- "@voltagent/core": "^1.2.20",
14
- "@voltagent/internal": "^0.0.12",
13
+ "@voltagent/core": "^2.0.1",
14
+ "@voltagent/internal": "^1.0.1",
15
15
  "tsup": "^8.5.0",
16
16
  "typescript": "^5.8.2",
17
17
  "vitest": "^3.2.4"
@@ -39,9 +39,14 @@
39
39
  "@ag-ui/core": ">=0.0.37",
40
40
  "@copilotkit/runtime": "^1.50.0",
41
41
  "@voltagent/core": ">=1.0.0",
42
- "@voltagent/internal": "^0.0.12",
42
+ "@voltagent/internal": "^1.0.0",
43
43
  "rxjs": "^7.8.1"
44
44
  },
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/VoltAgent/voltagent.git",
48
+ "directory": "packages/ag-ui"
49
+ },
45
50
  "types": "dist/index.d.ts",
46
51
  "scripts": {
47
52
  "build": "tsup",