@voltagent/ag-ui 1.0.2 → 1.0.4

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.js CHANGED
@@ -69,6 +69,9 @@ var VoltAgentAGUI = class extends import_client.AbstractAgent {
69
69
  const result = await this.agent.streamText(voltMessages, streamOptions);
70
70
  for await (const part of result.fullStream) {
71
71
  debugLog("fullStream part", { partType: part.type, id: part.id });
72
+ if ((part.type === "start" || part.type === "start-step") && part.messageId) {
73
+ currentMessageId = part.messageId;
74
+ }
72
75
  const events = convertVoltStreamPartToEvents(part, currentMessageId);
73
76
  if (!events) continue;
74
77
  for (const event of events) {
@@ -201,16 +204,19 @@ var isAssistantMessage = /* @__PURE__ */ __name((message) => message.role === "a
201
204
  var isSystemMessage = /* @__PURE__ */ __name((message) => message.role === "system", "isSystemMessage");
202
205
  var isDeveloperMessage = /* @__PURE__ */ __name((message) => message.role === "developer", "isDeveloperMessage");
203
206
  var isToolMessage = /* @__PURE__ */ __name((message) => message.role === "tool", "isToolMessage");
207
+ var VOLTAGENT_MESSAGE_METADATA_EVENT_NAME = "voltagent.message_metadata";
204
208
  function convertAGUIMessagesToVoltMessages(messages) {
205
209
  const toolNameById = /* @__PURE__ */ new Map();
206
- return messages.map((msg) => {
210
+ const convertedMessages = [];
211
+ for (const msg of messages) {
207
212
  const messageId = msg.id || generateId();
208
213
  if (isUserMessage(msg)) {
209
- return {
214
+ convertedMessages.push({
210
215
  id: messageId,
211
216
  role: "user",
212
217
  content: extractTextContent(msg.content)
213
- };
218
+ });
219
+ continue;
214
220
  }
215
221
  if (isAssistantMessage(msg)) {
216
222
  const parts = [];
@@ -228,22 +234,24 @@ function convertAGUIMessagesToVoltMessages(messages) {
228
234
  args
229
235
  });
230
236
  }
231
- return {
237
+ convertedMessages.push({
232
238
  id: messageId,
233
239
  role: "assistant",
234
240
  parts
235
- };
241
+ });
242
+ continue;
236
243
  }
237
244
  if (isSystemMessage(msg) || isDeveloperMessage(msg)) {
238
- return {
245
+ convertedMessages.push({
239
246
  id: messageId,
240
247
  role: "system",
241
248
  content: msg.content
242
- };
249
+ });
250
+ continue;
243
251
  }
244
252
  if (isToolMessage(msg)) {
245
253
  const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : void 0;
246
- return {
254
+ convertedMessages.push({
247
255
  id: messageId,
248
256
  role: "tool",
249
257
  parts: [
@@ -254,14 +262,16 @@ function convertAGUIMessagesToVoltMessages(messages) {
254
262
  output: safelyParseJson(msg.content)
255
263
  }
256
264
  ]
257
- };
265
+ });
266
+ continue;
258
267
  }
259
- return {
268
+ convertedMessages.push({
260
269
  id: messageId,
261
270
  role: "assistant",
262
271
  parts: [{ type: "text", text: (0, import_utils.safeStringify)(msg.content ?? "") }]
263
- };
264
- });
272
+ });
273
+ }
274
+ return convertedMessages;
265
275
  }
266
276
  __name(convertAGUIMessagesToVoltMessages, "convertAGUIMessagesToVoltMessages");
267
277
  function extractTextContent(content) {
@@ -286,15 +296,33 @@ function safelyParseJson(value) {
286
296
  __name(safelyParseJson, "safelyParseJson");
287
297
  function convertVoltStreamPartToEvents(part, fallbackMessageId) {
288
298
  const payload = part.payload ?? part;
299
+ const partType = part.type;
300
+ if (partType === "message-metadata") {
301
+ const messageId = part.messageId ?? payload.messageId ?? fallbackMessageId;
302
+ const messageMetadata = payload.messageMetadata ?? payload.metadata;
303
+ if (!messageMetadata || typeof messageMetadata !== "object") {
304
+ return null;
305
+ }
306
+ const customEvent = {
307
+ type: import_core.EventType.CUSTOM,
308
+ name: VOLTAGENT_MESSAGE_METADATA_EVENT_NAME,
309
+ value: {
310
+ messageId: messageId || void 0,
311
+ metadata: messageMetadata
312
+ }
313
+ };
314
+ return [customEvent];
315
+ }
289
316
  switch (part.type) {
290
317
  case "text-start": {
291
318
  return null;
292
319
  }
293
320
  case "text-delta": {
321
+ const messageId = part.messageId ?? fallbackMessageId;
294
322
  const event = {
295
323
  type: import_core.EventType.TEXT_MESSAGE_CHUNK,
296
324
  delta: part.text ?? "",
297
- messageId: part.id ?? fallbackMessageId,
325
+ messageId,
298
326
  role: "assistant"
299
327
  };
300
328
  return [event];
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 * 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 CustomEvent,\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 if ((part.type === \"start\" || part.type === \"start-step\") && part.messageId) {\n currentMessageId = part.messageId;\n }\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\nconst VOLTAGENT_MESSAGE_METADATA_EVENT_NAME = \"voltagent.message_metadata\";\nfunction convertAGUIMessagesToVoltMessages(messages: Message[]): VoltUIMessage[] {\n const toolNameById = new Map<string, string>();\n const convertedMessages: VoltUIMessage[] = [];\n\n for (const msg of messages) {\n const messageId = msg.id || generateId();\n\n if (isUserMessage(msg)) {\n convertedMessages.push({\n id: messageId,\n role: \"user\",\n content: extractTextContent(msg.content),\n });\n continue;\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 convertedMessages.push({\n id: messageId,\n role: \"assistant\",\n parts,\n });\n continue;\n }\n\n if (isSystemMessage(msg) || isDeveloperMessage(msg)) {\n convertedMessages.push({\n id: messageId,\n role: \"system\",\n content: msg.content,\n });\n continue;\n }\n\n if (isToolMessage(msg)) {\n const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : undefined;\n convertedMessages.push({\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 continue;\n }\n\n // activity or any other custom role -> fold into assistant text\n convertedMessages.push({\n id: messageId,\n role: \"assistant\",\n parts: [{ type: \"text\", text: safeStringify((msg as any).content ?? \"\") }],\n });\n }\n\n return convertedMessages;\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 | CustomEvent\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 const partType = (part as { type: string }).type;\n\n if (partType === \"message-metadata\") {\n const messageId =\n (part as { messageId?: string }).messageId ??\n (payload as { messageId?: string }).messageId ??\n fallbackMessageId;\n const messageMetadata =\n (payload as { messageMetadata?: unknown }).messageMetadata ??\n (payload as { metadata?: unknown }).metadata;\n\n if (!messageMetadata || typeof messageMetadata !== \"object\") {\n return null;\n }\n\n // Best-practice carrier for app-specific metadata on AG-UI streams.\n const customEvent: CustomEvent = {\n type: EventType.CUSTOM,\n name: VOLTAGENT_MESSAGE_METADATA_EVENT_NAME,\n value: {\n messageId: messageId || undefined,\n metadata: messageMetadata,\n },\n };\n\n return [customEvent];\n }\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 messageId = part.messageId ?? fallbackMessageId;\n const event: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: part.text ?? \"\",\n messageId,\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"]}
package/dist/index.mjs CHANGED
@@ -42,6 +42,9 @@ var VoltAgentAGUI = class extends AbstractAgent {
42
42
  const result = await this.agent.streamText(voltMessages, streamOptions);
43
43
  for await (const part of result.fullStream) {
44
44
  debugLog("fullStream part", { partType: part.type, id: part.id });
45
+ if ((part.type === "start" || part.type === "start-step") && part.messageId) {
46
+ currentMessageId = part.messageId;
47
+ }
45
48
  const events = convertVoltStreamPartToEvents(part, currentMessageId);
46
49
  if (!events) continue;
47
50
  for (const event of events) {
@@ -174,16 +177,19 @@ var isAssistantMessage = /* @__PURE__ */ __name((message) => message.role === "a
174
177
  var isSystemMessage = /* @__PURE__ */ __name((message) => message.role === "system", "isSystemMessage");
175
178
  var isDeveloperMessage = /* @__PURE__ */ __name((message) => message.role === "developer", "isDeveloperMessage");
176
179
  var isToolMessage = /* @__PURE__ */ __name((message) => message.role === "tool", "isToolMessage");
180
+ var VOLTAGENT_MESSAGE_METADATA_EVENT_NAME = "voltagent.message_metadata";
177
181
  function convertAGUIMessagesToVoltMessages(messages) {
178
182
  const toolNameById = /* @__PURE__ */ new Map();
179
- return messages.map((msg) => {
183
+ const convertedMessages = [];
184
+ for (const msg of messages) {
180
185
  const messageId = msg.id || generateId();
181
186
  if (isUserMessage(msg)) {
182
- return {
187
+ convertedMessages.push({
183
188
  id: messageId,
184
189
  role: "user",
185
190
  content: extractTextContent(msg.content)
186
- };
191
+ });
192
+ continue;
187
193
  }
188
194
  if (isAssistantMessage(msg)) {
189
195
  const parts = [];
@@ -201,22 +207,24 @@ function convertAGUIMessagesToVoltMessages(messages) {
201
207
  args
202
208
  });
203
209
  }
204
- return {
210
+ convertedMessages.push({
205
211
  id: messageId,
206
212
  role: "assistant",
207
213
  parts
208
- };
214
+ });
215
+ continue;
209
216
  }
210
217
  if (isSystemMessage(msg) || isDeveloperMessage(msg)) {
211
- return {
218
+ convertedMessages.push({
212
219
  id: messageId,
213
220
  role: "system",
214
221
  content: msg.content
215
- };
222
+ });
223
+ continue;
216
224
  }
217
225
  if (isToolMessage(msg)) {
218
226
  const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : void 0;
219
- return {
227
+ convertedMessages.push({
220
228
  id: messageId,
221
229
  role: "tool",
222
230
  parts: [
@@ -227,14 +235,16 @@ function convertAGUIMessagesToVoltMessages(messages) {
227
235
  output: safelyParseJson(msg.content)
228
236
  }
229
237
  ]
230
- };
238
+ });
239
+ continue;
231
240
  }
232
- return {
241
+ convertedMessages.push({
233
242
  id: messageId,
234
243
  role: "assistant",
235
244
  parts: [{ type: "text", text: safeStringify(msg.content ?? "") }]
236
- };
237
- });
245
+ });
246
+ }
247
+ return convertedMessages;
238
248
  }
239
249
  __name(convertAGUIMessagesToVoltMessages, "convertAGUIMessagesToVoltMessages");
240
250
  function extractTextContent(content) {
@@ -259,15 +269,33 @@ function safelyParseJson(value) {
259
269
  __name(safelyParseJson, "safelyParseJson");
260
270
  function convertVoltStreamPartToEvents(part, fallbackMessageId) {
261
271
  const payload = part.payload ?? part;
272
+ const partType = part.type;
273
+ if (partType === "message-metadata") {
274
+ const messageId = part.messageId ?? payload.messageId ?? fallbackMessageId;
275
+ const messageMetadata = payload.messageMetadata ?? payload.metadata;
276
+ if (!messageMetadata || typeof messageMetadata !== "object") {
277
+ return null;
278
+ }
279
+ const customEvent = {
280
+ type: EventType.CUSTOM,
281
+ name: VOLTAGENT_MESSAGE_METADATA_EVENT_NAME,
282
+ value: {
283
+ messageId: messageId || void 0,
284
+ metadata: messageMetadata
285
+ }
286
+ };
287
+ return [customEvent];
288
+ }
262
289
  switch (part.type) {
263
290
  case "text-start": {
264
291
  return null;
265
292
  }
266
293
  case "text-delta": {
294
+ const messageId = part.messageId ?? fallbackMessageId;
267
295
  const event = {
268
296
  type: EventType.TEXT_MESSAGE_CHUNK,
269
297
  delta: part.text ?? "",
270
- messageId: part.id ?? fallbackMessageId,
298
+ messageId,
271
299
  role: "assistant"
272
300
  };
273
301
  return [event];
@@ -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 * 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 CustomEvent,\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 if ((part.type === \"start\" || part.type === \"start-step\") && part.messageId) {\n currentMessageId = part.messageId;\n }\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\nconst VOLTAGENT_MESSAGE_METADATA_EVENT_NAME = \"voltagent.message_metadata\";\nfunction convertAGUIMessagesToVoltMessages(messages: Message[]): VoltUIMessage[] {\n const toolNameById = new Map<string, string>();\n const convertedMessages: VoltUIMessage[] = [];\n\n for (const msg of messages) {\n const messageId = msg.id || generateId();\n\n if (isUserMessage(msg)) {\n convertedMessages.push({\n id: messageId,\n role: \"user\",\n content: extractTextContent(msg.content),\n });\n continue;\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 convertedMessages.push({\n id: messageId,\n role: \"assistant\",\n parts,\n });\n continue;\n }\n\n if (isSystemMessage(msg) || isDeveloperMessage(msg)) {\n convertedMessages.push({\n id: messageId,\n role: \"system\",\n content: msg.content,\n });\n continue;\n }\n\n if (isToolMessage(msg)) {\n const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : undefined;\n convertedMessages.push({\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 continue;\n }\n\n // activity or any other custom role -> fold into assistant text\n convertedMessages.push({\n id: messageId,\n role: \"assistant\",\n parts: [{ type: \"text\", text: safeStringify((msg as any).content ?? \"\") }],\n });\n }\n\n return convertedMessages;\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 | CustomEvent\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 const partType = (part as { type: string }).type;\n\n if (partType === \"message-metadata\") {\n const messageId =\n (part as { messageId?: string }).messageId ??\n (payload as { messageId?: string }).messageId ??\n fallbackMessageId;\n const messageMetadata =\n (payload as { messageMetadata?: unknown }).messageMetadata ??\n (payload as { metadata?: unknown }).metadata;\n\n if (!messageMetadata || typeof messageMetadata !== \"object\") {\n return null;\n }\n\n // Best-practice carrier for app-specific metadata on AG-UI streams.\n const customEvent: CustomEvent = {\n type: EventType.CUSTOM,\n name: VOLTAGENT_MESSAGE_METADATA_EVENT_NAME,\n value: {\n messageId: messageId || undefined,\n metadata: messageMetadata,\n },\n };\n\n return [customEvent];\n }\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 messageId = part.messageId ?? fallbackMessageId;\n const event: TextMessageChunkEvent = {\n type: EventType.TEXT_MESSAGE_CHUNK,\n delta: part.text ?? \"\",\n messageId,\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": "1.0.2",
4
+ "version": "1.0.4",
5
5
  "dependencies": {
6
6
  "rxjs": "^7.8.1"
7
7
  },
@@ -10,7 +10,7 @@
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": "^2.0.2",
13
+ "@voltagent/core": "^2.4.2",
14
14
  "@voltagent/internal": "^1.0.2",
15
15
  "tsup": "^8.5.0",
16
16
  "typescript": "^5.8.2",