@voltagent/ag-ui 1.0.3 → 1.0.5
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 +47 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +47 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -107,13 +107,17 @@ var VoltAgentAGUI = class extends import_client.AbstractAgent {
|
|
|
107
107
|
message: error instanceof Error ? error.message : "Unknown error"
|
|
108
108
|
};
|
|
109
109
|
subscriber.next(runError);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
try {
|
|
111
|
+
const finished = {
|
|
112
|
+
type: import_core.EventType.RUN_FINISHED,
|
|
113
|
+
threadId: input.threadId,
|
|
114
|
+
runId: input.runId
|
|
115
|
+
};
|
|
116
|
+
subscriber.next(finished);
|
|
117
|
+
finishedSent = true;
|
|
118
|
+
} catch {
|
|
119
|
+
finishedSent = true;
|
|
120
|
+
}
|
|
117
121
|
subscriber.complete();
|
|
118
122
|
}
|
|
119
123
|
}, "run");
|
|
@@ -204,16 +208,19 @@ var isAssistantMessage = /* @__PURE__ */ __name((message) => message.role === "a
|
|
|
204
208
|
var isSystemMessage = /* @__PURE__ */ __name((message) => message.role === "system", "isSystemMessage");
|
|
205
209
|
var isDeveloperMessage = /* @__PURE__ */ __name((message) => message.role === "developer", "isDeveloperMessage");
|
|
206
210
|
var isToolMessage = /* @__PURE__ */ __name((message) => message.role === "tool", "isToolMessage");
|
|
211
|
+
var VOLTAGENT_MESSAGE_METADATA_EVENT_NAME = "voltagent.message_metadata";
|
|
207
212
|
function convertAGUIMessagesToVoltMessages(messages) {
|
|
208
213
|
const toolNameById = /* @__PURE__ */ new Map();
|
|
209
|
-
|
|
214
|
+
const convertedMessages = [];
|
|
215
|
+
for (const msg of messages) {
|
|
210
216
|
const messageId = msg.id || generateId();
|
|
211
217
|
if (isUserMessage(msg)) {
|
|
212
|
-
|
|
218
|
+
convertedMessages.push({
|
|
213
219
|
id: messageId,
|
|
214
220
|
role: "user",
|
|
215
221
|
content: extractTextContent(msg.content)
|
|
216
|
-
};
|
|
222
|
+
});
|
|
223
|
+
continue;
|
|
217
224
|
}
|
|
218
225
|
if (isAssistantMessage(msg)) {
|
|
219
226
|
const parts = [];
|
|
@@ -231,22 +238,24 @@ function convertAGUIMessagesToVoltMessages(messages) {
|
|
|
231
238
|
args
|
|
232
239
|
});
|
|
233
240
|
}
|
|
234
|
-
|
|
241
|
+
convertedMessages.push({
|
|
235
242
|
id: messageId,
|
|
236
243
|
role: "assistant",
|
|
237
244
|
parts
|
|
238
|
-
};
|
|
245
|
+
});
|
|
246
|
+
continue;
|
|
239
247
|
}
|
|
240
248
|
if (isSystemMessage(msg) || isDeveloperMessage(msg)) {
|
|
241
|
-
|
|
249
|
+
convertedMessages.push({
|
|
242
250
|
id: messageId,
|
|
243
251
|
role: "system",
|
|
244
252
|
content: msg.content
|
|
245
|
-
};
|
|
253
|
+
});
|
|
254
|
+
continue;
|
|
246
255
|
}
|
|
247
256
|
if (isToolMessage(msg)) {
|
|
248
257
|
const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : void 0;
|
|
249
|
-
|
|
258
|
+
convertedMessages.push({
|
|
250
259
|
id: messageId,
|
|
251
260
|
role: "tool",
|
|
252
261
|
parts: [
|
|
@@ -257,14 +266,16 @@ function convertAGUIMessagesToVoltMessages(messages) {
|
|
|
257
266
|
output: safelyParseJson(msg.content)
|
|
258
267
|
}
|
|
259
268
|
]
|
|
260
|
-
};
|
|
269
|
+
});
|
|
270
|
+
continue;
|
|
261
271
|
}
|
|
262
|
-
|
|
272
|
+
convertedMessages.push({
|
|
263
273
|
id: messageId,
|
|
264
274
|
role: "assistant",
|
|
265
275
|
parts: [{ type: "text", text: (0, import_utils.safeStringify)(msg.content ?? "") }]
|
|
266
|
-
};
|
|
267
|
-
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
return convertedMessages;
|
|
268
279
|
}
|
|
269
280
|
__name(convertAGUIMessagesToVoltMessages, "convertAGUIMessagesToVoltMessages");
|
|
270
281
|
function extractTextContent(content) {
|
|
@@ -289,6 +300,23 @@ function safelyParseJson(value) {
|
|
|
289
300
|
__name(safelyParseJson, "safelyParseJson");
|
|
290
301
|
function convertVoltStreamPartToEvents(part, fallbackMessageId) {
|
|
291
302
|
const payload = part.payload ?? part;
|
|
303
|
+
const partType = part.type;
|
|
304
|
+
if (partType === "message-metadata") {
|
|
305
|
+
const messageId = part.messageId ?? payload.messageId ?? fallbackMessageId;
|
|
306
|
+
const messageMetadata = payload.messageMetadata ?? payload.metadata;
|
|
307
|
+
if (!messageMetadata || typeof messageMetadata !== "object") {
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
const customEvent = {
|
|
311
|
+
type: import_core.EventType.CUSTOM,
|
|
312
|
+
name: VOLTAGENT_MESSAGE_METADATA_EVENT_NAME,
|
|
313
|
+
value: {
|
|
314
|
+
messageId: messageId || void 0,
|
|
315
|
+
metadata: messageMetadata
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
return [customEvent];
|
|
319
|
+
}
|
|
292
320
|
switch (part.type) {
|
|
293
321
|
case "text-start": {
|
|
294
322
|
return null;
|
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 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\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 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"]}
|
|
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 // Emit the error event so consumers know what went wrong.\n const runError: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n };\n subscriber.next(runError);\n\n // The AG-UI verify layer may reject further events once RUN_ERROR\n // has been emitted (the run is considered terminal). Guard the\n // RUN_FINISHED emission so the subscriber can still be completed\n // cleanly without an unhandled exception.\n try {\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 } catch {\n // Verify layer rejected the event – that's OK, mark as sent\n // so the unsubscribe handler doesn't attempt it again.\n finishedSent = true;\n }\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
|
@@ -80,13 +80,17 @@ var VoltAgentAGUI = class extends AbstractAgent {
|
|
|
80
80
|
message: error instanceof Error ? error.message : "Unknown error"
|
|
81
81
|
};
|
|
82
82
|
subscriber.next(runError);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
try {
|
|
84
|
+
const finished = {
|
|
85
|
+
type: EventType.RUN_FINISHED,
|
|
86
|
+
threadId: input.threadId,
|
|
87
|
+
runId: input.runId
|
|
88
|
+
};
|
|
89
|
+
subscriber.next(finished);
|
|
90
|
+
finishedSent = true;
|
|
91
|
+
} catch {
|
|
92
|
+
finishedSent = true;
|
|
93
|
+
}
|
|
90
94
|
subscriber.complete();
|
|
91
95
|
}
|
|
92
96
|
}, "run");
|
|
@@ -177,16 +181,19 @@ var isAssistantMessage = /* @__PURE__ */ __name((message) => message.role === "a
|
|
|
177
181
|
var isSystemMessage = /* @__PURE__ */ __name((message) => message.role === "system", "isSystemMessage");
|
|
178
182
|
var isDeveloperMessage = /* @__PURE__ */ __name((message) => message.role === "developer", "isDeveloperMessage");
|
|
179
183
|
var isToolMessage = /* @__PURE__ */ __name((message) => message.role === "tool", "isToolMessage");
|
|
184
|
+
var VOLTAGENT_MESSAGE_METADATA_EVENT_NAME = "voltagent.message_metadata";
|
|
180
185
|
function convertAGUIMessagesToVoltMessages(messages) {
|
|
181
186
|
const toolNameById = /* @__PURE__ */ new Map();
|
|
182
|
-
|
|
187
|
+
const convertedMessages = [];
|
|
188
|
+
for (const msg of messages) {
|
|
183
189
|
const messageId = msg.id || generateId();
|
|
184
190
|
if (isUserMessage(msg)) {
|
|
185
|
-
|
|
191
|
+
convertedMessages.push({
|
|
186
192
|
id: messageId,
|
|
187
193
|
role: "user",
|
|
188
194
|
content: extractTextContent(msg.content)
|
|
189
|
-
};
|
|
195
|
+
});
|
|
196
|
+
continue;
|
|
190
197
|
}
|
|
191
198
|
if (isAssistantMessage(msg)) {
|
|
192
199
|
const parts = [];
|
|
@@ -204,22 +211,24 @@ function convertAGUIMessagesToVoltMessages(messages) {
|
|
|
204
211
|
args
|
|
205
212
|
});
|
|
206
213
|
}
|
|
207
|
-
|
|
214
|
+
convertedMessages.push({
|
|
208
215
|
id: messageId,
|
|
209
216
|
role: "assistant",
|
|
210
217
|
parts
|
|
211
|
-
};
|
|
218
|
+
});
|
|
219
|
+
continue;
|
|
212
220
|
}
|
|
213
221
|
if (isSystemMessage(msg) || isDeveloperMessage(msg)) {
|
|
214
|
-
|
|
222
|
+
convertedMessages.push({
|
|
215
223
|
id: messageId,
|
|
216
224
|
role: "system",
|
|
217
225
|
content: msg.content
|
|
218
|
-
};
|
|
226
|
+
});
|
|
227
|
+
continue;
|
|
219
228
|
}
|
|
220
229
|
if (isToolMessage(msg)) {
|
|
221
230
|
const toolName = msg.toolCallId ? toolNameById.get(msg.toolCallId) : void 0;
|
|
222
|
-
|
|
231
|
+
convertedMessages.push({
|
|
223
232
|
id: messageId,
|
|
224
233
|
role: "tool",
|
|
225
234
|
parts: [
|
|
@@ -230,14 +239,16 @@ function convertAGUIMessagesToVoltMessages(messages) {
|
|
|
230
239
|
output: safelyParseJson(msg.content)
|
|
231
240
|
}
|
|
232
241
|
]
|
|
233
|
-
};
|
|
242
|
+
});
|
|
243
|
+
continue;
|
|
234
244
|
}
|
|
235
|
-
|
|
245
|
+
convertedMessages.push({
|
|
236
246
|
id: messageId,
|
|
237
247
|
role: "assistant",
|
|
238
248
|
parts: [{ type: "text", text: safeStringify(msg.content ?? "") }]
|
|
239
|
-
};
|
|
240
|
-
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return convertedMessages;
|
|
241
252
|
}
|
|
242
253
|
__name(convertAGUIMessagesToVoltMessages, "convertAGUIMessagesToVoltMessages");
|
|
243
254
|
function extractTextContent(content) {
|
|
@@ -262,6 +273,23 @@ function safelyParseJson(value) {
|
|
|
262
273
|
__name(safelyParseJson, "safelyParseJson");
|
|
263
274
|
function convertVoltStreamPartToEvents(part, fallbackMessageId) {
|
|
264
275
|
const payload = part.payload ?? part;
|
|
276
|
+
const partType = part.type;
|
|
277
|
+
if (partType === "message-metadata") {
|
|
278
|
+
const messageId = part.messageId ?? payload.messageId ?? fallbackMessageId;
|
|
279
|
+
const messageMetadata = payload.messageMetadata ?? payload.metadata;
|
|
280
|
+
if (!messageMetadata || typeof messageMetadata !== "object") {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
const customEvent = {
|
|
284
|
+
type: EventType.CUSTOM,
|
|
285
|
+
name: VOLTAGENT_MESSAGE_METADATA_EVENT_NAME,
|
|
286
|
+
value: {
|
|
287
|
+
messageId: messageId || void 0,
|
|
288
|
+
metadata: messageMetadata
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
return [customEvent];
|
|
292
|
+
}
|
|
265
293
|
switch (part.type) {
|
|
266
294
|
case "text-start": {
|
|
267
295
|
return null;
|
package/dist/index.mjs.map
CHANGED
|
@@ -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 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\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 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"]}
|
|
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 // Emit the error event so consumers know what went wrong.\n const runError: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n };\n subscriber.next(runError);\n\n // The AG-UI verify layer may reject further events once RUN_ERROR\n // has been emitted (the run is considered terminal). Guard the\n // RUN_FINISHED emission so the subscriber can still be completed\n // cleanly without an unhandled exception.\n try {\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 } catch {\n // Verify layer rejected the event – that's OK, mark as sent\n // so the unsubscribe handler doesn't attempt it again.\n finishedSent = true;\n }\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.
|
|
4
|
+
"version": "1.0.5",
|
|
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.
|
|
13
|
+
"@voltagent/core": "^2.6.5",
|
|
14
14
|
"@voltagent/internal": "^1.0.2",
|
|
15
15
|
"tsup": "^8.5.0",
|
|
16
16
|
"typescript": "^5.8.2",
|