@copilotkitnext/runtime 0.0.22-alpha.8 → 0.0.22-alpha.9

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.
@@ -241,7 +241,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
241
241
 
242
242
  // package.json
243
243
  var package_default = {
244
- version: "0.0.22-alpha.8"};
244
+ version: "0.0.22-alpha.9"};
245
245
 
246
246
  // src/runtime.ts
247
247
  var VERSION = package_default.version;
@@ -838,5 +838,5 @@ function serializeJsonBody(body) {
838
838
  }
839
839
 
840
840
  export { AgentRunner, CopilotRuntime, InMemoryAgentRunner, VERSION, callAfterRequestMiddleware, callBeforeRequestMiddleware, createJsonRequest, expectString, handleConnectAgent, handleGetRuntimeInfo, handleRunAgent, handleStopAgent, handleTranscribe, parseMethodCall };
841
- //# sourceMappingURL=chunk-ZYGIZ6EK.mjs.map
842
- //# sourceMappingURL=chunk-ZYGIZ6EK.mjs.map
841
+ //# sourceMappingURL=chunk-S556ZC5H.mjs.map
842
+ //# sourceMappingURL=chunk-S556ZC5H.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../package.json","../src/runtime.ts","../src/handlers/handle-run.ts","../src/handlers/handle-connect.ts","../src/handlers/handle-stop.ts","../src/handlers/get-runtime-info.ts","../src/handlers/handle-transcribe.ts","../src/middleware.ts","../src/endpoints/single-route-helpers.ts"],"names":["EventEncoder","RunAgentInputSchema","EventType"],"mappings":"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","file":"chunk-ZYGIZ6EK.mjs","sourcesContent":["import { AbstractAgent, BaseEvent, RunAgentInput } from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface AgentRunnerRunRequest {\n threadId: string;\n agent: AbstractAgent;\n input: RunAgentInput;\n}\n\nexport interface AgentRunnerConnectRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerIsRunningRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerStopRequest {\n threadId: string;\n}\n\nexport abstract class AgentRunner {\n abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;\n abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;\n abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;\n abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;\n}\n","import {\n AgentRunner,\n AgentRunnerConnectRequest,\n AgentRunnerIsRunningRequest,\n AgentRunnerRunRequest,\n type AgentRunnerStopRequest,\n} from \"./agent-runner\";\nimport { Observable, ReplaySubject } from \"rxjs\";\nimport {\n AbstractAgent,\n BaseEvent,\n EventType,\n MessagesSnapshotEvent,\n RunStartedEvent,\n compactEvents,\n} from \"@ag-ui/client\";\nimport { finalizeRunEvents } from \"@copilotkitnext/shared\";\n\ninterface HistoricRun {\n threadId: string;\n runId: string;\n parentRunId: string | null;\n events: BaseEvent[];\n createdAt: number;\n}\n\nclass InMemoryEventStore {\n constructor(public threadId: string) {}\n\n /** The subject that current consumers subscribe to. */\n subject: ReplaySubject<BaseEvent> | null = null;\n\n /** True while a run is actively producing events. */\n isRunning = false;\n\n /** Current run ID */\n currentRunId: string | null = null;\n\n /** Historic completed runs */\n historicRuns: HistoricRun[] = [];\n\n /** Currently running agent instance (if any). */\n agent: AbstractAgent | null = null;\n\n /** Subject returned from run() while the run is active. */\n runSubject: ReplaySubject<BaseEvent> | null = null;\n\n /** True once stop() has been requested but the run has not yet finalized. */\n stopRequested = false;\n\n /** Reference to the events emitted in the current run. */\n currentEvents: BaseEvent[] | null = null;\n}\n\nconst GLOBAL_STORE = new Map<string, InMemoryEventStore>();\n\nexport class InMemoryAgentRunner extends AgentRunner {\n run(request: AgentRunnerRunRequest): Observable<BaseEvent> {\n let existingStore = GLOBAL_STORE.get(request.threadId);\n if (!existingStore) {\n existingStore = new InMemoryEventStore(request.threadId);\n GLOBAL_STORE.set(request.threadId, existingStore);\n }\n const store = existingStore; // Now store is const and non-null\n\n if (store.isRunning) {\n throw new Error(\"Thread already running\");\n }\n store.isRunning = true;\n store.currentRunId = request.input.runId;\n store.agent = request.agent;\n store.stopRequested = false;\n\n // Track seen message IDs and current run events for this run\n const seenMessageIds = new Set<string>();\n const currentRunEvents: BaseEvent[] = [];\n store.currentEvents = currentRunEvents;\n\n // Get all previously seen message IDs from historic runs\n const historicMessageIds = new Set<string>();\n for (const run of store.historicRuns) {\n for (const event of run.events) {\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n historicMessageIds.add(event.messageId);\n }\n if (event.type === EventType.RUN_STARTED) {\n const runStarted = event as RunStartedEvent;\n const messages = runStarted.input?.messages ?? [];\n for (const message of messages) {\n historicMessageIds.add(message.id);\n }\n }\n }\n }\n\n const nextSubject = new ReplaySubject<BaseEvent>(Infinity);\n const prevSubject = store.subject;\n\n // Update the store's subject immediately\n store.subject = nextSubject;\n\n // Create a subject for run() return value\n const runSubject = new ReplaySubject<BaseEvent>(Infinity);\n store.runSubject = runSubject;\n\n // Helper function to run the agent and handle errors\n const runAgent = async () => {\n // Get parent run ID for chaining\n const lastRun = store.historicRuns[store.historicRuns.length - 1];\n const parentRunId = lastRun?.runId ?? null;\n\n try {\n await request.agent.runAgent(request.input, {\n onEvent: ({ event }) => {\n let processedEvent: BaseEvent = event;\n if (event.type === EventType.RUN_STARTED) {\n const runStartedEvent = event as RunStartedEvent;\n if (!runStartedEvent.input) {\n const sanitizedMessages = request.input.messages\n ? request.input.messages.filter(\n (message) => !historicMessageIds.has(message.id),\n )\n : undefined;\n const updatedInput = {\n ...request.input,\n ...(sanitizedMessages !== undefined\n ? { messages: sanitizedMessages }\n : {}),\n };\n processedEvent = {\n ...runStartedEvent,\n input: updatedInput,\n } as RunStartedEvent;\n }\n }\n\n runSubject.next(processedEvent); // For run() return - only agent events\n nextSubject.next(processedEvent); // For connect() / store - all events\n currentRunEvents.push(processedEvent); // Accumulate for storage\n },\n onNewMessage: ({ message }) => {\n // Called for each new message\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n },\n onRunStartedEvent: () => {\n // Mark any messages from the input as seen so they aren't emitted twice\n if (request.input.messages) {\n for (const message of request.input.messages) {\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n }\n }\n },\n });\n\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the completed run in memory with ONLY its events\n if (store.currentRunId) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n } catch {\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the run even if it failed (partial events)\n if (store.currentRunId && currentRunEvents.length > 0) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n }\n };\n\n // Bridge previous events if they exist\n if (prevSubject) {\n prevSubject.subscribe({\n next: (e) => nextSubject.next(e),\n error: (err) => nextSubject.error(err),\n complete: () => {\n // Don't complete nextSubject here - it needs to stay open for new events\n },\n });\n }\n\n // Start the agent execution immediately (not lazily)\n runAgent();\n\n // Return the run subject (only agent events, no injected messages)\n return runSubject.asObservable();\n }\n\n connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {\n const store = GLOBAL_STORE.get(request.threadId);\n const connectionSubject = new ReplaySubject<BaseEvent>(Infinity);\n\n if (!store) {\n // No store means no events\n connectionSubject.complete();\n return connectionSubject.asObservable();\n }\n\n // Collect all historic events from memory\n const allHistoricEvents: BaseEvent[] = [];\n for (const run of store.historicRuns) {\n allHistoricEvents.push(...run.events);\n }\n\n // Apply compaction to all historic events together (like SQLite)\n const compactedEvents = compactEvents(allHistoricEvents);\n\n // Emit compacted events and track message IDs\n const emittedMessageIds = new Set<string>();\n for (const event of compactedEvents) {\n connectionSubject.next(event);\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n emittedMessageIds.add(event.messageId);\n }\n }\n\n // Bridge active run to connection if exists\n if (store.subject && (store.isRunning || store.stopRequested)) {\n store.subject.subscribe({\n next: (event) => {\n // Skip message events that we've already emitted from historic\n if (\n \"messageId\" in event &&\n typeof event.messageId === \"string\" &&\n emittedMessageIds.has(event.messageId)\n ) {\n return;\n }\n connectionSubject.next(event);\n },\n complete: () => connectionSubject.complete(),\n error: (err) => connectionSubject.error(err),\n });\n } else {\n // No active run, complete after historic events\n connectionSubject.complete();\n }\n\n return connectionSubject.asObservable();\n }\n\n isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {\n const store = GLOBAL_STORE.get(request.threadId);\n return Promise.resolve(store?.isRunning ?? false);\n }\n\n stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {\n const store = GLOBAL_STORE.get(request.threadId);\n if (!store || !store.isRunning) {\n return Promise.resolve(false);\n }\n if (store.stopRequested) {\n return Promise.resolve(false);\n }\n\n store.stopRequested = true;\n store.isRunning = false;\n\n const agent = store.agent;\n if (!agent) {\n store.stopRequested = false;\n store.isRunning = false;\n return Promise.resolve(false);\n }\n\n try {\n agent.abortRun();\n return Promise.resolve(true);\n } catch (error) {\n console.error(\"Failed to abort agent run\", error);\n store.stopRequested = false;\n store.isRunning = true;\n return Promise.resolve(false);\n }\n }\n}\n","{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.22-alpha.8\",\n \"description\": \"Server-side runtime package for CopilotKit2\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./express\": {\n \"types\": \"./dist/express.d.ts\",\n \"import\": \"./dist/express.mjs\",\n \"require\": \"./dist/express.js\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"devDependencies\": {\n \"@copilotkitnext/eslint-config\": \"workspace:*\",\n \"@copilotkitnext/typescript-config\": \"workspace:*\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^4.17.21\",\n \"@types/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"supertest\": \"^7.1.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.41-alpha.0\",\n \"@ag-ui/core\": \"0.0.41-alpha.0\",\n \"@ag-ui/encoder\": \"0.0.41-alpha.0\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"cors\": \"^2.8.5\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"express\": \"^4.21.2\",\n \"hono\": \"^4.6.13\",\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {\n \"express\": { \"optional\": true }\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","import { MaybePromise, NonEmptyRecord } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport pkg from \"../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { TranscriptionService } from \"./transcription-service/transcription-service\";\nimport { AgentRunner } from \"./runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"./runner/in-memory\";\n\nexport const VERSION = pkg.version;\n\n/**\n * Options used to construct a `CopilotRuntime` instance.\n */\nexport interface CopilotRuntimeOptions {\n /** Map of available agents (loaded lazily is fine). */\n agents: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n /** The runner to use for running agents. */\n runner?: AgentRunner;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n\n constructor({\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n runner,\n }: CopilotRuntimeOptions) {\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.runner = runner ?? new InMemoryAgentRunner();\n }\n}\n","import {\n AbstractAgent,\n HttpAgent,\n RunAgentInput,\n RunAgentInputSchema,\n} from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface RunAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleRunAgent({\n runtime,\n request,\n agentId,\n}: RunAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const registeredAgent = agents[agentId] as AbstractAgent;\n const agent = registeredAgent.clone() as AbstractAgent;\n\n if (agent && \"headers\" in agent) {\n const shouldForward = (headerName: string) => {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n };\n\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForward(key)) {\n forwardableHeaders[key] = value;\n }\n });\n\n agent.headers = { \n ...agent.headers as Record<string, string>, \n ...forwardableHeaders \n };\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n agent.setMessages(input.messages);\n agent.setState(input.state);\n agent.threadId = input.threadId;\n\n runtime.runner\n .run({\n threadId: input.threadId,\n agent,\n input,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { RunAgentInput, RunAgentInputSchema } from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface ConnectAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleConnectAgent({\n runtime,\n request,\n agentId,\n}: ConnectAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n runtime.runner\n .connect({\n threadId: input.threadId,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { EventType } from \"@ag-ui/client\";\n\ninterface StopAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n threadId: string;\n}\n\nexport async function handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n}: StopAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stopped = await runtime.runner.stop({ threadId });\n\n if (!stopped) {\n return new Response(\n JSON.stringify({\n stopped: false,\n message: `No active run for thread '${threadId}'.`,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n return new Response(\n JSON.stringify({\n stopped: true,\n interrupt: {\n type: EventType.RUN_ERROR,\n message: \"Run stopped by user\",\n code: \"STOPPED\",\n },\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n console.error(\"Error stopping agent run:\", error);\n\n return new Response(\n JSON.stringify({\n error: \"Failed to stop agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { AgentDescription, RuntimeInfo } from \"@copilotkitnext/shared\";\nimport { VERSION } from \"../runtime\";\n\ninterface HandleGetRuntimeInfoParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleGetRuntimeInfo({\n runtime,\n}: HandleGetRuntimeInfoParameters) {\n try {\n const agents = await runtime.agents;\n\n const agentsDict = Object.entries(agents).reduce(\n (acc, [name, agent]) => {\n acc[name] = {\n name,\n description: agent.description,\n className: agent.constructor.name,\n };\n return acc;\n },\n {} as Record<string, AgentDescription>\n );\n\n const runtimeInfo: RuntimeInfo = {\n version: VERSION,\n agents: agentsDict,\n audioFileTranscriptionEnabled: !!runtime.transcriptionService,\n };\n\n return new Response(JSON.stringify(runtimeInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Failed to retrieve runtime information\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n return new Response(\n JSON.stringify({\n error: \"Transcription service not configured\",\n message:\n \"No transcription service has been configured in the runtime\",\n }),\n {\n status: 503,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Check if request has form data\n const contentType = request.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"multipart/form-data\")) {\n return new Response(\n JSON.stringify({\n error: \"Invalid content type\",\n message:\n \"Request must contain multipart/form-data with an audio file\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Extract form data\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n return new Response(\n JSON.stringify({\n error: \"Missing audio file\",\n message:\n \"No audio file found in form data. Please include an 'audio' field.\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Validate file type (basic check)\n const validAudioTypes = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n ];\n\n // Allow empty types and application/octet-stream (common fallback for unknown types)\n const isValidType =\n validAudioTypes.includes(audioFile.type) ||\n audioFile.type === \"\" ||\n audioFile.type === \"application/octet-stream\";\n\n if (!isValidType) {\n return new Response(\n JSON.stringify({\n error: \"Invalid file type\",\n message: `Unsupported audio file type: ${audioFile.type}. Supported types: ${validAudioTypes.join(\", \")}, or files with unknown/empty types`,\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Transcribe the audio file with options\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Transcription failed\",\n message:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred during transcription\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntime } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n response: Response;\n path: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: AfterRequestMiddlewareParameters): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({ runtime, response, path });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n","const METHOD_NAMES = [\n \"agent/run\",\n \"agent/connect\",\n \"agent/stop\",\n \"info\",\n \"transcribe\",\n] as const;\n\nexport type EndpointMethod = (typeof METHOD_NAMES)[number];\n\ninterface JsonEnvelope {\n method?: string;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport interface MethodCall {\n method: EndpointMethod;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport async function parseMethodCall(request: Request): Promise<MethodCall> {\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n if (!contentType.includes(\"application/json\")) {\n throw createResponseError(\"Single-route endpoint expects JSON payloads\", 415);\n }\n\n let jsonEnvelope: JsonEnvelope;\n try {\n jsonEnvelope = (await request.clone().json()) as JsonEnvelope;\n } catch (error) {\n throw createResponseError(\"Invalid JSON payload\", 400);\n }\n\n const method = validateMethod(jsonEnvelope.method);\n\n return {\n method,\n params: jsonEnvelope.params,\n body: jsonEnvelope.body,\n };\n}\n\nexport function expectString(params: Record<string, unknown> | undefined, key: string): string {\n const value = params?.[key];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n throw createResponseError(`Missing or invalid parameter '${key}'`, 400);\n}\n\nexport function createJsonRequest(base: Request, body: unknown): Request {\n if (body === undefined || body === null) {\n throw createResponseError(\"Missing request body for JSON handler\", 400);\n }\n\n const headers = new Headers(base.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.delete(\"content-length\");\n\n const serializedBody = serializeJsonBody(body);\n\n return new Request(base.url, {\n method: \"POST\",\n headers,\n body: serializedBody,\n signal: base.signal,\n });\n}\n\nexport function createResponseError(message: string, status: number): Response {\n return new Response(\n JSON.stringify({\n error: \"invalid_request\",\n message,\n }),\n {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n}\n\nfunction validateMethod(method: string | undefined): EndpointMethod {\n if (!method) {\n throw createResponseError(\"Missing method field\", 400);\n }\n\n if ((METHOD_NAMES as readonly string[]).includes(method)) {\n return method as EndpointMethod;\n }\n\n throw createResponseError(`Unsupported method '${method}'`, 400);\n}\n\nfunction serializeJsonBody(body: unknown): BodyInit {\n if (typeof body === \"string\") {\n return body;\n }\n\n if (body instanceof Blob || body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return body;\n }\n\n if (body instanceof FormData || body instanceof URLSearchParams) {\n return body;\n }\n\n return JSON.stringify(body);\n}\n"]}
1
+ {"version":3,"sources":["../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../package.json","../src/runtime.ts","../src/handlers/handle-run.ts","../src/handlers/handle-connect.ts","../src/handlers/handle-stop.ts","../src/handlers/get-runtime-info.ts","../src/handlers/handle-transcribe.ts","../src/middleware.ts","../src/endpoints/single-route-helpers.ts"],"names":["EventEncoder","RunAgentInputSchema","EventType"],"mappings":"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","file":"chunk-S556ZC5H.mjs","sourcesContent":["import { AbstractAgent, BaseEvent, RunAgentInput } from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface AgentRunnerRunRequest {\n threadId: string;\n agent: AbstractAgent;\n input: RunAgentInput;\n}\n\nexport interface AgentRunnerConnectRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerIsRunningRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerStopRequest {\n threadId: string;\n}\n\nexport abstract class AgentRunner {\n abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;\n abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;\n abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;\n abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;\n}\n","import {\n AgentRunner,\n AgentRunnerConnectRequest,\n AgentRunnerIsRunningRequest,\n AgentRunnerRunRequest,\n type AgentRunnerStopRequest,\n} from \"./agent-runner\";\nimport { Observable, ReplaySubject } from \"rxjs\";\nimport {\n AbstractAgent,\n BaseEvent,\n EventType,\n MessagesSnapshotEvent,\n RunStartedEvent,\n compactEvents,\n} from \"@ag-ui/client\";\nimport { finalizeRunEvents } from \"@copilotkitnext/shared\";\n\ninterface HistoricRun {\n threadId: string;\n runId: string;\n parentRunId: string | null;\n events: BaseEvent[];\n createdAt: number;\n}\n\nclass InMemoryEventStore {\n constructor(public threadId: string) {}\n\n /** The subject that current consumers subscribe to. */\n subject: ReplaySubject<BaseEvent> | null = null;\n\n /** True while a run is actively producing events. */\n isRunning = false;\n\n /** Current run ID */\n currentRunId: string | null = null;\n\n /** Historic completed runs */\n historicRuns: HistoricRun[] = [];\n\n /** Currently running agent instance (if any). */\n agent: AbstractAgent | null = null;\n\n /** Subject returned from run() while the run is active. */\n runSubject: ReplaySubject<BaseEvent> | null = null;\n\n /** True once stop() has been requested but the run has not yet finalized. */\n stopRequested = false;\n\n /** Reference to the events emitted in the current run. */\n currentEvents: BaseEvent[] | null = null;\n}\n\nconst GLOBAL_STORE = new Map<string, InMemoryEventStore>();\n\nexport class InMemoryAgentRunner extends AgentRunner {\n run(request: AgentRunnerRunRequest): Observable<BaseEvent> {\n let existingStore = GLOBAL_STORE.get(request.threadId);\n if (!existingStore) {\n existingStore = new InMemoryEventStore(request.threadId);\n GLOBAL_STORE.set(request.threadId, existingStore);\n }\n const store = existingStore; // Now store is const and non-null\n\n if (store.isRunning) {\n throw new Error(\"Thread already running\");\n }\n store.isRunning = true;\n store.currentRunId = request.input.runId;\n store.agent = request.agent;\n store.stopRequested = false;\n\n // Track seen message IDs and current run events for this run\n const seenMessageIds = new Set<string>();\n const currentRunEvents: BaseEvent[] = [];\n store.currentEvents = currentRunEvents;\n\n // Get all previously seen message IDs from historic runs\n const historicMessageIds = new Set<string>();\n for (const run of store.historicRuns) {\n for (const event of run.events) {\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n historicMessageIds.add(event.messageId);\n }\n if (event.type === EventType.RUN_STARTED) {\n const runStarted = event as RunStartedEvent;\n const messages = runStarted.input?.messages ?? [];\n for (const message of messages) {\n historicMessageIds.add(message.id);\n }\n }\n }\n }\n\n const nextSubject = new ReplaySubject<BaseEvent>(Infinity);\n const prevSubject = store.subject;\n\n // Update the store's subject immediately\n store.subject = nextSubject;\n\n // Create a subject for run() return value\n const runSubject = new ReplaySubject<BaseEvent>(Infinity);\n store.runSubject = runSubject;\n\n // Helper function to run the agent and handle errors\n const runAgent = async () => {\n // Get parent run ID for chaining\n const lastRun = store.historicRuns[store.historicRuns.length - 1];\n const parentRunId = lastRun?.runId ?? null;\n\n try {\n await request.agent.runAgent(request.input, {\n onEvent: ({ event }) => {\n let processedEvent: BaseEvent = event;\n if (event.type === EventType.RUN_STARTED) {\n const runStartedEvent = event as RunStartedEvent;\n if (!runStartedEvent.input) {\n const sanitizedMessages = request.input.messages\n ? request.input.messages.filter(\n (message) => !historicMessageIds.has(message.id),\n )\n : undefined;\n const updatedInput = {\n ...request.input,\n ...(sanitizedMessages !== undefined\n ? { messages: sanitizedMessages }\n : {}),\n };\n processedEvent = {\n ...runStartedEvent,\n input: updatedInput,\n } as RunStartedEvent;\n }\n }\n\n runSubject.next(processedEvent); // For run() return - only agent events\n nextSubject.next(processedEvent); // For connect() / store - all events\n currentRunEvents.push(processedEvent); // Accumulate for storage\n },\n onNewMessage: ({ message }) => {\n // Called for each new message\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n },\n onRunStartedEvent: () => {\n // Mark any messages from the input as seen so they aren't emitted twice\n if (request.input.messages) {\n for (const message of request.input.messages) {\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n }\n }\n },\n });\n\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the completed run in memory with ONLY its events\n if (store.currentRunId) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n } catch {\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the run even if it failed (partial events)\n if (store.currentRunId && currentRunEvents.length > 0) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n }\n };\n\n // Bridge previous events if they exist\n if (prevSubject) {\n prevSubject.subscribe({\n next: (e) => nextSubject.next(e),\n error: (err) => nextSubject.error(err),\n complete: () => {\n // Don't complete nextSubject here - it needs to stay open for new events\n },\n });\n }\n\n // Start the agent execution immediately (not lazily)\n runAgent();\n\n // Return the run subject (only agent events, no injected messages)\n return runSubject.asObservable();\n }\n\n connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {\n const store = GLOBAL_STORE.get(request.threadId);\n const connectionSubject = new ReplaySubject<BaseEvent>(Infinity);\n\n if (!store) {\n // No store means no events\n connectionSubject.complete();\n return connectionSubject.asObservable();\n }\n\n // Collect all historic events from memory\n const allHistoricEvents: BaseEvent[] = [];\n for (const run of store.historicRuns) {\n allHistoricEvents.push(...run.events);\n }\n\n // Apply compaction to all historic events together (like SQLite)\n const compactedEvents = compactEvents(allHistoricEvents);\n\n // Emit compacted events and track message IDs\n const emittedMessageIds = new Set<string>();\n for (const event of compactedEvents) {\n connectionSubject.next(event);\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n emittedMessageIds.add(event.messageId);\n }\n }\n\n // Bridge active run to connection if exists\n if (store.subject && (store.isRunning || store.stopRequested)) {\n store.subject.subscribe({\n next: (event) => {\n // Skip message events that we've already emitted from historic\n if (\n \"messageId\" in event &&\n typeof event.messageId === \"string\" &&\n emittedMessageIds.has(event.messageId)\n ) {\n return;\n }\n connectionSubject.next(event);\n },\n complete: () => connectionSubject.complete(),\n error: (err) => connectionSubject.error(err),\n });\n } else {\n // No active run, complete after historic events\n connectionSubject.complete();\n }\n\n return connectionSubject.asObservable();\n }\n\n isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {\n const store = GLOBAL_STORE.get(request.threadId);\n return Promise.resolve(store?.isRunning ?? false);\n }\n\n stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {\n const store = GLOBAL_STORE.get(request.threadId);\n if (!store || !store.isRunning) {\n return Promise.resolve(false);\n }\n if (store.stopRequested) {\n return Promise.resolve(false);\n }\n\n store.stopRequested = true;\n store.isRunning = false;\n\n const agent = store.agent;\n if (!agent) {\n store.stopRequested = false;\n store.isRunning = false;\n return Promise.resolve(false);\n }\n\n try {\n agent.abortRun();\n return Promise.resolve(true);\n } catch (error) {\n console.error(\"Failed to abort agent run\", error);\n store.stopRequested = false;\n store.isRunning = true;\n return Promise.resolve(false);\n }\n }\n}\n","{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.22-alpha.9\",\n \"description\": \"Server-side runtime package for CopilotKit2\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./express\": {\n \"types\": \"./dist/express.d.ts\",\n \"import\": \"./dist/express.mjs\",\n \"require\": \"./dist/express.js\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"devDependencies\": {\n \"@copilotkitnext/eslint-config\": \"workspace:*\",\n \"@copilotkitnext/typescript-config\": \"workspace:*\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^4.17.21\",\n \"@types/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"supertest\": \"^7.1.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.41-alpha.0\",\n \"@ag-ui/core\": \"0.0.41-alpha.0\",\n \"@ag-ui/encoder\": \"0.0.41-alpha.0\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"cors\": \"^2.8.5\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"express\": \"^4.21.2\",\n \"hono\": \"^4.6.13\",\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {\n \"express\": {\n \"optional\": true\n }\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","import { MaybePromise, NonEmptyRecord } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport pkg from \"../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { TranscriptionService } from \"./transcription-service/transcription-service\";\nimport { AgentRunner } from \"./runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"./runner/in-memory\";\n\nexport const VERSION = pkg.version;\n\n/**\n * Options used to construct a `CopilotRuntime` instance.\n */\nexport interface CopilotRuntimeOptions {\n /** Map of available agents (loaded lazily is fine). */\n agents: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n /** The runner to use for running agents. */\n runner?: AgentRunner;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n\n constructor({\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n runner,\n }: CopilotRuntimeOptions) {\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.runner = runner ?? new InMemoryAgentRunner();\n }\n}\n","import {\n AbstractAgent,\n HttpAgent,\n RunAgentInput,\n RunAgentInputSchema,\n} from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface RunAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleRunAgent({\n runtime,\n request,\n agentId,\n}: RunAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const registeredAgent = agents[agentId] as AbstractAgent;\n const agent = registeredAgent.clone() as AbstractAgent;\n\n if (agent && \"headers\" in agent) {\n const shouldForward = (headerName: string) => {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n };\n\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForward(key)) {\n forwardableHeaders[key] = value;\n }\n });\n\n agent.headers = { \n ...agent.headers as Record<string, string>, \n ...forwardableHeaders \n };\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n agent.setMessages(input.messages);\n agent.setState(input.state);\n agent.threadId = input.threadId;\n\n runtime.runner\n .run({\n threadId: input.threadId,\n agent,\n input,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { RunAgentInput, RunAgentInputSchema } from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface ConnectAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleConnectAgent({\n runtime,\n request,\n agentId,\n}: ConnectAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n runtime.runner\n .connect({\n threadId: input.threadId,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { EventType } from \"@ag-ui/client\";\n\ninterface StopAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n threadId: string;\n}\n\nexport async function handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n}: StopAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stopped = await runtime.runner.stop({ threadId });\n\n if (!stopped) {\n return new Response(\n JSON.stringify({\n stopped: false,\n message: `No active run for thread '${threadId}'.`,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n return new Response(\n JSON.stringify({\n stopped: true,\n interrupt: {\n type: EventType.RUN_ERROR,\n message: \"Run stopped by user\",\n code: \"STOPPED\",\n },\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n console.error(\"Error stopping agent run:\", error);\n\n return new Response(\n JSON.stringify({\n error: \"Failed to stop agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { AgentDescription, RuntimeInfo } from \"@copilotkitnext/shared\";\nimport { VERSION } from \"../runtime\";\n\ninterface HandleGetRuntimeInfoParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleGetRuntimeInfo({\n runtime,\n}: HandleGetRuntimeInfoParameters) {\n try {\n const agents = await runtime.agents;\n\n const agentsDict = Object.entries(agents).reduce(\n (acc, [name, agent]) => {\n acc[name] = {\n name,\n description: agent.description,\n className: agent.constructor.name,\n };\n return acc;\n },\n {} as Record<string, AgentDescription>\n );\n\n const runtimeInfo: RuntimeInfo = {\n version: VERSION,\n agents: agentsDict,\n audioFileTranscriptionEnabled: !!runtime.transcriptionService,\n };\n\n return new Response(JSON.stringify(runtimeInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Failed to retrieve runtime information\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n return new Response(\n JSON.stringify({\n error: \"Transcription service not configured\",\n message:\n \"No transcription service has been configured in the runtime\",\n }),\n {\n status: 503,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Check if request has form data\n const contentType = request.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"multipart/form-data\")) {\n return new Response(\n JSON.stringify({\n error: \"Invalid content type\",\n message:\n \"Request must contain multipart/form-data with an audio file\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Extract form data\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n return new Response(\n JSON.stringify({\n error: \"Missing audio file\",\n message:\n \"No audio file found in form data. Please include an 'audio' field.\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Validate file type (basic check)\n const validAudioTypes = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n ];\n\n // Allow empty types and application/octet-stream (common fallback for unknown types)\n const isValidType =\n validAudioTypes.includes(audioFile.type) ||\n audioFile.type === \"\" ||\n audioFile.type === \"application/octet-stream\";\n\n if (!isValidType) {\n return new Response(\n JSON.stringify({\n error: \"Invalid file type\",\n message: `Unsupported audio file type: ${audioFile.type}. Supported types: ${validAudioTypes.join(\", \")}, or files with unknown/empty types`,\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Transcribe the audio file with options\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Transcription failed\",\n message:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred during transcription\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntime } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n response: Response;\n path: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: AfterRequestMiddlewareParameters): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({ runtime, response, path });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n","const METHOD_NAMES = [\n \"agent/run\",\n \"agent/connect\",\n \"agent/stop\",\n \"info\",\n \"transcribe\",\n] as const;\n\nexport type EndpointMethod = (typeof METHOD_NAMES)[number];\n\ninterface JsonEnvelope {\n method?: string;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport interface MethodCall {\n method: EndpointMethod;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport async function parseMethodCall(request: Request): Promise<MethodCall> {\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n if (!contentType.includes(\"application/json\")) {\n throw createResponseError(\"Single-route endpoint expects JSON payloads\", 415);\n }\n\n let jsonEnvelope: JsonEnvelope;\n try {\n jsonEnvelope = (await request.clone().json()) as JsonEnvelope;\n } catch (error) {\n throw createResponseError(\"Invalid JSON payload\", 400);\n }\n\n const method = validateMethod(jsonEnvelope.method);\n\n return {\n method,\n params: jsonEnvelope.params,\n body: jsonEnvelope.body,\n };\n}\n\nexport function expectString(params: Record<string, unknown> | undefined, key: string): string {\n const value = params?.[key];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n throw createResponseError(`Missing or invalid parameter '${key}'`, 400);\n}\n\nexport function createJsonRequest(base: Request, body: unknown): Request {\n if (body === undefined || body === null) {\n throw createResponseError(\"Missing request body for JSON handler\", 400);\n }\n\n const headers = new Headers(base.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.delete(\"content-length\");\n\n const serializedBody = serializeJsonBody(body);\n\n return new Request(base.url, {\n method: \"POST\",\n headers,\n body: serializedBody,\n signal: base.signal,\n });\n}\n\nexport function createResponseError(message: string, status: number): Response {\n return new Response(\n JSON.stringify({\n error: \"invalid_request\",\n message,\n }),\n {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n}\n\nfunction validateMethod(method: string | undefined): EndpointMethod {\n if (!method) {\n throw createResponseError(\"Missing method field\", 400);\n }\n\n if ((METHOD_NAMES as readonly string[]).includes(method)) {\n return method as EndpointMethod;\n }\n\n throw createResponseError(`Unsupported method '${method}'`, 400);\n}\n\nfunction serializeJsonBody(body: unknown): BodyInit {\n if (typeof body === \"string\") {\n return body;\n }\n\n if (body instanceof Blob || body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return body;\n }\n\n if (body instanceof FormData || body instanceof URLSearchParams) {\n return body;\n }\n\n return JSON.stringify(body);\n}\n"]}
package/dist/express.js CHANGED
@@ -342,7 +342,7 @@ async function handleStopAgent({
342
342
 
343
343
  // package.json
344
344
  var package_default = {
345
- version: "0.0.22-alpha.8"};
345
+ version: "0.0.22-alpha.9"};
346
346
 
347
347
  // src/runtime.ts
348
348
  var VERSION = package_default.version;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/handlers/handle-run.ts","../src/handlers/handle-connect.ts","../src/handlers/handle-stop.ts","../package.json","../src/runtime.ts","../src/handlers/get-runtime-info.ts","../src/handlers/handle-transcribe.ts","../src/middleware.ts","../src/endpoints/express-utils.ts","../src/endpoints/express.ts","../src/endpoints/single-route-helpers.ts","../src/endpoints/express-single.ts"],"names":["encoder","EventEncoder","RunAgentInputSchema","EventType","logger","promisify","pipeline","Readable","express","cors"],"mappings":"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","file":"express.js","sourcesContent":["import {\n AbstractAgent,\n HttpAgent,\n RunAgentInput,\n RunAgentInputSchema,\n} from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface RunAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleRunAgent({\n runtime,\n request,\n agentId,\n}: RunAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const registeredAgent = agents[agentId] as AbstractAgent;\n const agent = registeredAgent.clone() as AbstractAgent;\n\n if (agent && \"headers\" in agent) {\n const shouldForward = (headerName: string) => {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n };\n\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForward(key)) {\n forwardableHeaders[key] = value;\n }\n });\n\n agent.headers = { \n ...agent.headers as Record<string, string>, \n ...forwardableHeaders \n };\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n agent.setMessages(input.messages);\n agent.setState(input.state);\n agent.threadId = input.threadId;\n\n runtime.runner\n .run({\n threadId: input.threadId,\n agent,\n input,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { RunAgentInput, RunAgentInputSchema } from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface ConnectAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleConnectAgent({\n runtime,\n request,\n agentId,\n}: ConnectAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n runtime.runner\n .connect({\n threadId: input.threadId,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { EventType } from \"@ag-ui/client\";\n\ninterface StopAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n threadId: string;\n}\n\nexport async function handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n}: StopAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stopped = await runtime.runner.stop({ threadId });\n\n if (!stopped) {\n return new Response(\n JSON.stringify({\n stopped: false,\n message: `No active run for thread '${threadId}'.`,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n return new Response(\n JSON.stringify({\n stopped: true,\n interrupt: {\n type: EventType.RUN_ERROR,\n message: \"Run stopped by user\",\n code: \"STOPPED\",\n },\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n console.error(\"Error stopping agent run:\", error);\n\n return new Response(\n JSON.stringify({\n error: \"Failed to stop agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.22-alpha.8\",\n \"description\": \"Server-side runtime package for CopilotKit2\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./express\": {\n \"types\": \"./dist/express.d.ts\",\n \"import\": \"./dist/express.mjs\",\n \"require\": \"./dist/express.js\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"devDependencies\": {\n \"@copilotkitnext/eslint-config\": \"workspace:*\",\n \"@copilotkitnext/typescript-config\": \"workspace:*\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^4.17.21\",\n \"@types/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"supertest\": \"^7.1.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.41-alpha.0\",\n \"@ag-ui/core\": \"0.0.41-alpha.0\",\n \"@ag-ui/encoder\": \"0.0.41-alpha.0\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"cors\": \"^2.8.5\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"express\": \"^4.21.2\",\n \"hono\": \"^4.6.13\",\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {\n \"express\": { \"optional\": true }\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","import { MaybePromise, NonEmptyRecord } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport pkg from \"../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { TranscriptionService } from \"./transcription-service/transcription-service\";\nimport { AgentRunner } from \"./runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"./runner/in-memory\";\n\nexport const VERSION = pkg.version;\n\n/**\n * Options used to construct a `CopilotRuntime` instance.\n */\nexport interface CopilotRuntimeOptions {\n /** Map of available agents (loaded lazily is fine). */\n agents: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n /** The runner to use for running agents. */\n runner?: AgentRunner;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n\n constructor({\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n runner,\n }: CopilotRuntimeOptions) {\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.runner = runner ?? new InMemoryAgentRunner();\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { AgentDescription, RuntimeInfo } from \"@copilotkitnext/shared\";\nimport { VERSION } from \"../runtime\";\n\ninterface HandleGetRuntimeInfoParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleGetRuntimeInfo({\n runtime,\n}: HandleGetRuntimeInfoParameters) {\n try {\n const agents = await runtime.agents;\n\n const agentsDict = Object.entries(agents).reduce(\n (acc, [name, agent]) => {\n acc[name] = {\n name,\n description: agent.description,\n className: agent.constructor.name,\n };\n return acc;\n },\n {} as Record<string, AgentDescription>\n );\n\n const runtimeInfo: RuntimeInfo = {\n version: VERSION,\n agents: agentsDict,\n audioFileTranscriptionEnabled: !!runtime.transcriptionService,\n };\n\n return new Response(JSON.stringify(runtimeInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Failed to retrieve runtime information\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n return new Response(\n JSON.stringify({\n error: \"Transcription service not configured\",\n message:\n \"No transcription service has been configured in the runtime\",\n }),\n {\n status: 503,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Check if request has form data\n const contentType = request.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"multipart/form-data\")) {\n return new Response(\n JSON.stringify({\n error: \"Invalid content type\",\n message:\n \"Request must contain multipart/form-data with an audio file\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Extract form data\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n return new Response(\n JSON.stringify({\n error: \"Missing audio file\",\n message:\n \"No audio file found in form data. Please include an 'audio' field.\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Validate file type (basic check)\n const validAudioTypes = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n ];\n\n // Allow empty types and application/octet-stream (common fallback for unknown types)\n const isValidType =\n validAudioTypes.includes(audioFile.type) ||\n audioFile.type === \"\" ||\n audioFile.type === \"application/octet-stream\";\n\n if (!isValidType) {\n return new Response(\n JSON.stringify({\n error: \"Invalid file type\",\n message: `Unsupported audio file type: ${audioFile.type}. Supported types: ${validAudioTypes.join(\", \")}, or files with unknown/empty types`,\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Transcribe the audio file with options\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Transcription failed\",\n message:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred during transcription\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntime } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n response: Response;\n path: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: AfterRequestMiddlewareParameters): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({ runtime, response, path });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n","import type { Request as ExpressRequest, Response as ExpressResponse } from \"express\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\n\nconst streamPipeline = promisify(pipeline);\n\nconst METHODS_WITHOUT_BODY = new Set([\"GET\", \"HEAD\"]);\n\nexport function createFetchRequestFromExpress(req: ExpressRequest): Request {\n const method = req.method?.toUpperCase() ?? \"GET\";\n const origin = buildOrigin(req);\n const url = `${origin}${req.originalUrl ?? req.url ?? \"\"}`;\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n value.forEach((v) => headers.append(key, v));\n } else {\n headers.set(key, value);\n }\n }\n\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n };\n\n if (!METHODS_WITHOUT_BODY.has(method)) {\n init.body = Readable.toWeb(req) as unknown as BodyInit;\n init.duplex = \"half\";\n }\n\n const controller = new AbortController();\n req.on(\"close\", () => controller.abort());\n init.signal = controller.signal;\n\n return new Request(url, init);\n}\n\nexport async function sendFetchResponse(res: ExpressResponse, response: Response): Promise<void> {\n res.status(response.status);\n\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"content-length\" && response.body !== null) {\n return;\n }\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return;\n }\n\n const nodeStream = Readable.fromWeb(response.body as unknown as ReadableStream<Uint8Array>);\n try {\n await streamPipeline(nodeStream, res);\n } catch (error) {\n res.destroy(error as Error);\n throw error;\n }\n}\n\nfunction buildOrigin(req: ExpressRequest): string {\n const protocol = req.protocol || (req.secure ? \"https\" : \"http\");\n const host = req.get(\"host\") ?? \"localhost\";\n return `${protocol}://${host}`;\n}\n","import express from \"express\";\nimport type { Request as ExpressRequest, Response as ExpressResponse, NextFunction, Router } from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { createFetchRequestFromExpress, sendFetchResponse } from \"./express-utils\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({ runtime, basePath }: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(basePath);\n\n router.use(cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/run\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/connect\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }));\n\n router.get(joinPath(normalizedBase, \"/info\"), createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }));\n\n router.post(joinPath(normalizedBase, \"/transcribe\"), createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }));\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(runtime: CopilotRuntime, factory: RouteHandlerFactory) {\n return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({ runtime, request, path });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n try {\n const response = await factory({ request, req });\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error({ err: error, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch((mwError) => {\n logger.error({ err: mwError, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n return;\n }\n logger.error({ err: error, url: request.url, path }, \"Error running request handler\");\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\n}\n","const METHOD_NAMES = [\n \"agent/run\",\n \"agent/connect\",\n \"agent/stop\",\n \"info\",\n \"transcribe\",\n] as const;\n\nexport type EndpointMethod = (typeof METHOD_NAMES)[number];\n\ninterface JsonEnvelope {\n method?: string;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport interface MethodCall {\n method: EndpointMethod;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport async function parseMethodCall(request: Request): Promise<MethodCall> {\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n if (!contentType.includes(\"application/json\")) {\n throw createResponseError(\"Single-route endpoint expects JSON payloads\", 415);\n }\n\n let jsonEnvelope: JsonEnvelope;\n try {\n jsonEnvelope = (await request.clone().json()) as JsonEnvelope;\n } catch (error) {\n throw createResponseError(\"Invalid JSON payload\", 400);\n }\n\n const method = validateMethod(jsonEnvelope.method);\n\n return {\n method,\n params: jsonEnvelope.params,\n body: jsonEnvelope.body,\n };\n}\n\nexport function expectString(params: Record<string, unknown> | undefined, key: string): string {\n const value = params?.[key];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n throw createResponseError(`Missing or invalid parameter '${key}'`, 400);\n}\n\nexport function createJsonRequest(base: Request, body: unknown): Request {\n if (body === undefined || body === null) {\n throw createResponseError(\"Missing request body for JSON handler\", 400);\n }\n\n const headers = new Headers(base.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.delete(\"content-length\");\n\n const serializedBody = serializeJsonBody(body);\n\n return new Request(base.url, {\n method: \"POST\",\n headers,\n body: serializedBody,\n signal: base.signal,\n });\n}\n\nexport function createResponseError(message: string, status: number): Response {\n return new Response(\n JSON.stringify({\n error: \"invalid_request\",\n message,\n }),\n {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n}\n\nfunction validateMethod(method: string | undefined): EndpointMethod {\n if (!method) {\n throw createResponseError(\"Missing method field\", 400);\n }\n\n if ((METHOD_NAMES as readonly string[]).includes(method)) {\n return method as EndpointMethod;\n }\n\n throw createResponseError(`Unsupported method '${method}'`, 400);\n}\n\nfunction serializeJsonBody(body: unknown): BodyInit {\n if (typeof body === \"string\") {\n return body;\n }\n\n if (body instanceof Blob || body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return body;\n }\n\n if (body instanceof FormData || body instanceof URLSearchParams) {\n return body;\n }\n\n return JSON.stringify(body);\n}\n","import express from \"express\";\nimport type { Request as ExpressRequest, Response as ExpressResponse, NextFunction, Router } from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { createFetchRequestFromExpress, sendFetchResponse } from \"./express-utils\";\nimport { createJsonRequest, expectString, MethodCall, parseMethodCall } from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }));\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntime) {\n return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({ runtime, request, path });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn({ err: error, url: request.url }, \"Invalid single-route payload\");\n res.status(400).json({\n error: \"invalid_request\",\n message: error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({ runtime, request: handlerRequest, agentId });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({ runtime, request: handlerRequest, agentId });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({ runtime, request, agentId, threadId });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n response = await handleTranscribe({ runtime, request });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error({ err: error, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch((mwError) => {\n logger.error({ err: mwError, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n return;\n }\n logger.error({ err: error, url: request.url, path }, \"Error running single-route handler\");\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express single-route endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"]}
1
+ {"version":3,"sources":["../src/handlers/handle-run.ts","../src/handlers/handle-connect.ts","../src/handlers/handle-stop.ts","../package.json","../src/runtime.ts","../src/handlers/get-runtime-info.ts","../src/handlers/handle-transcribe.ts","../src/middleware.ts","../src/endpoints/express-utils.ts","../src/endpoints/express.ts","../src/endpoints/single-route-helpers.ts","../src/endpoints/express-single.ts"],"names":["encoder","EventEncoder","RunAgentInputSchema","EventType","logger","promisify","pipeline","Readable","express","cors"],"mappings":"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","file":"express.js","sourcesContent":["import {\n AbstractAgent,\n HttpAgent,\n RunAgentInput,\n RunAgentInputSchema,\n} from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface RunAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleRunAgent({\n runtime,\n request,\n agentId,\n}: RunAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const registeredAgent = agents[agentId] as AbstractAgent;\n const agent = registeredAgent.clone() as AbstractAgent;\n\n if (agent && \"headers\" in agent) {\n const shouldForward = (headerName: string) => {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n };\n\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForward(key)) {\n forwardableHeaders[key] = value;\n }\n });\n\n agent.headers = { \n ...agent.headers as Record<string, string>, \n ...forwardableHeaders \n };\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n agent.setMessages(input.messages);\n agent.setState(input.state);\n agent.threadId = input.threadId;\n\n runtime.runner\n .run({\n threadId: input.threadId,\n agent,\n input,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { RunAgentInput, RunAgentInputSchema } from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface ConnectAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleConnectAgent({\n runtime,\n request,\n agentId,\n}: ConnectAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n runtime.runner\n .connect({\n threadId: input.threadId,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { EventType } from \"@ag-ui/client\";\n\ninterface StopAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n threadId: string;\n}\n\nexport async function handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n}: StopAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stopped = await runtime.runner.stop({ threadId });\n\n if (!stopped) {\n return new Response(\n JSON.stringify({\n stopped: false,\n message: `No active run for thread '${threadId}'.`,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n return new Response(\n JSON.stringify({\n stopped: true,\n interrupt: {\n type: EventType.RUN_ERROR,\n message: \"Run stopped by user\",\n code: \"STOPPED\",\n },\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n console.error(\"Error stopping agent run:\", error);\n\n return new Response(\n JSON.stringify({\n error: \"Failed to stop agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.22-alpha.9\",\n \"description\": \"Server-side runtime package for CopilotKit2\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./express\": {\n \"types\": \"./dist/express.d.ts\",\n \"import\": \"./dist/express.mjs\",\n \"require\": \"./dist/express.js\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"devDependencies\": {\n \"@copilotkitnext/eslint-config\": \"workspace:*\",\n \"@copilotkitnext/typescript-config\": \"workspace:*\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^4.17.21\",\n \"@types/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"supertest\": \"^7.1.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.41-alpha.0\",\n \"@ag-ui/core\": \"0.0.41-alpha.0\",\n \"@ag-ui/encoder\": \"0.0.41-alpha.0\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"cors\": \"^2.8.5\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"express\": \"^4.21.2\",\n \"hono\": \"^4.6.13\",\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {\n \"express\": {\n \"optional\": true\n }\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","import { MaybePromise, NonEmptyRecord } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport pkg from \"../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { TranscriptionService } from \"./transcription-service/transcription-service\";\nimport { AgentRunner } from \"./runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"./runner/in-memory\";\n\nexport const VERSION = pkg.version;\n\n/**\n * Options used to construct a `CopilotRuntime` instance.\n */\nexport interface CopilotRuntimeOptions {\n /** Map of available agents (loaded lazily is fine). */\n agents: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n /** The runner to use for running agents. */\n runner?: AgentRunner;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n\n constructor({\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n runner,\n }: CopilotRuntimeOptions) {\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.runner = runner ?? new InMemoryAgentRunner();\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { AgentDescription, RuntimeInfo } from \"@copilotkitnext/shared\";\nimport { VERSION } from \"../runtime\";\n\ninterface HandleGetRuntimeInfoParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleGetRuntimeInfo({\n runtime,\n}: HandleGetRuntimeInfoParameters) {\n try {\n const agents = await runtime.agents;\n\n const agentsDict = Object.entries(agents).reduce(\n (acc, [name, agent]) => {\n acc[name] = {\n name,\n description: agent.description,\n className: agent.constructor.name,\n };\n return acc;\n },\n {} as Record<string, AgentDescription>\n );\n\n const runtimeInfo: RuntimeInfo = {\n version: VERSION,\n agents: agentsDict,\n audioFileTranscriptionEnabled: !!runtime.transcriptionService,\n };\n\n return new Response(JSON.stringify(runtimeInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Failed to retrieve runtime information\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n return new Response(\n JSON.stringify({\n error: \"Transcription service not configured\",\n message:\n \"No transcription service has been configured in the runtime\",\n }),\n {\n status: 503,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Check if request has form data\n const contentType = request.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"multipart/form-data\")) {\n return new Response(\n JSON.stringify({\n error: \"Invalid content type\",\n message:\n \"Request must contain multipart/form-data with an audio file\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Extract form data\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n return new Response(\n JSON.stringify({\n error: \"Missing audio file\",\n message:\n \"No audio file found in form data. Please include an 'audio' field.\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Validate file type (basic check)\n const validAudioTypes = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n ];\n\n // Allow empty types and application/octet-stream (common fallback for unknown types)\n const isValidType =\n validAudioTypes.includes(audioFile.type) ||\n audioFile.type === \"\" ||\n audioFile.type === \"application/octet-stream\";\n\n if (!isValidType) {\n return new Response(\n JSON.stringify({\n error: \"Invalid file type\",\n message: `Unsupported audio file type: ${audioFile.type}. Supported types: ${validAudioTypes.join(\", \")}, or files with unknown/empty types`,\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Transcribe the audio file with options\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Transcription failed\",\n message:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred during transcription\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntime } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n response: Response;\n path: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: AfterRequestMiddlewareParameters): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({ runtime, response, path });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n","import type { Request as ExpressRequest, Response as ExpressResponse } from \"express\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\n\nconst streamPipeline = promisify(pipeline);\n\nconst METHODS_WITHOUT_BODY = new Set([\"GET\", \"HEAD\"]);\n\nexport function createFetchRequestFromExpress(req: ExpressRequest): Request {\n const method = req.method?.toUpperCase() ?? \"GET\";\n const origin = buildOrigin(req);\n const url = `${origin}${req.originalUrl ?? req.url ?? \"\"}`;\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n value.forEach((v) => headers.append(key, v));\n } else {\n headers.set(key, value);\n }\n }\n\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n };\n\n if (!METHODS_WITHOUT_BODY.has(method)) {\n init.body = Readable.toWeb(req) as unknown as BodyInit;\n init.duplex = \"half\";\n }\n\n const controller = new AbortController();\n req.on(\"close\", () => controller.abort());\n init.signal = controller.signal;\n\n return new Request(url, init);\n}\n\nexport async function sendFetchResponse(res: ExpressResponse, response: Response): Promise<void> {\n res.status(response.status);\n\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"content-length\" && response.body !== null) {\n return;\n }\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return;\n }\n\n const nodeStream = Readable.fromWeb(response.body as unknown as ReadableStream<Uint8Array>);\n try {\n await streamPipeline(nodeStream, res);\n } catch (error) {\n res.destroy(error as Error);\n throw error;\n }\n}\n\nfunction buildOrigin(req: ExpressRequest): string {\n const protocol = req.protocol || (req.secure ? \"https\" : \"http\");\n const host = req.get(\"host\") ?? \"localhost\";\n return `${protocol}://${host}`;\n}\n","import express from \"express\";\nimport type { Request as ExpressRequest, Response as ExpressResponse, NextFunction, Router } from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { createFetchRequestFromExpress, sendFetchResponse } from \"./express-utils\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({ runtime, basePath }: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(basePath);\n\n router.use(cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/run\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/connect\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }));\n\n router.get(joinPath(normalizedBase, \"/info\"), createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }));\n\n router.post(joinPath(normalizedBase, \"/transcribe\"), createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }));\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(runtime: CopilotRuntime, factory: RouteHandlerFactory) {\n return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({ runtime, request, path });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n try {\n const response = await factory({ request, req });\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error({ err: error, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch((mwError) => {\n logger.error({ err: mwError, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n return;\n }\n logger.error({ err: error, url: request.url, path }, \"Error running request handler\");\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\n}\n","const METHOD_NAMES = [\n \"agent/run\",\n \"agent/connect\",\n \"agent/stop\",\n \"info\",\n \"transcribe\",\n] as const;\n\nexport type EndpointMethod = (typeof METHOD_NAMES)[number];\n\ninterface JsonEnvelope {\n method?: string;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport interface MethodCall {\n method: EndpointMethod;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport async function parseMethodCall(request: Request): Promise<MethodCall> {\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n if (!contentType.includes(\"application/json\")) {\n throw createResponseError(\"Single-route endpoint expects JSON payloads\", 415);\n }\n\n let jsonEnvelope: JsonEnvelope;\n try {\n jsonEnvelope = (await request.clone().json()) as JsonEnvelope;\n } catch (error) {\n throw createResponseError(\"Invalid JSON payload\", 400);\n }\n\n const method = validateMethod(jsonEnvelope.method);\n\n return {\n method,\n params: jsonEnvelope.params,\n body: jsonEnvelope.body,\n };\n}\n\nexport function expectString(params: Record<string, unknown> | undefined, key: string): string {\n const value = params?.[key];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n throw createResponseError(`Missing or invalid parameter '${key}'`, 400);\n}\n\nexport function createJsonRequest(base: Request, body: unknown): Request {\n if (body === undefined || body === null) {\n throw createResponseError(\"Missing request body for JSON handler\", 400);\n }\n\n const headers = new Headers(base.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.delete(\"content-length\");\n\n const serializedBody = serializeJsonBody(body);\n\n return new Request(base.url, {\n method: \"POST\",\n headers,\n body: serializedBody,\n signal: base.signal,\n });\n}\n\nexport function createResponseError(message: string, status: number): Response {\n return new Response(\n JSON.stringify({\n error: \"invalid_request\",\n message,\n }),\n {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n}\n\nfunction validateMethod(method: string | undefined): EndpointMethod {\n if (!method) {\n throw createResponseError(\"Missing method field\", 400);\n }\n\n if ((METHOD_NAMES as readonly string[]).includes(method)) {\n return method as EndpointMethod;\n }\n\n throw createResponseError(`Unsupported method '${method}'`, 400);\n}\n\nfunction serializeJsonBody(body: unknown): BodyInit {\n if (typeof body === \"string\") {\n return body;\n }\n\n if (body instanceof Blob || body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return body;\n }\n\n if (body instanceof FormData || body instanceof URLSearchParams) {\n return body;\n }\n\n return JSON.stringify(body);\n}\n","import express from \"express\";\nimport type { Request as ExpressRequest, Response as ExpressResponse, NextFunction, Router } from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { createFetchRequestFromExpress, sendFetchResponse } from \"./express-utils\";\nimport { createJsonRequest, expectString, MethodCall, parseMethodCall } from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }));\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntime) {\n return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({ runtime, request, path });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn({ err: error, url: request.url }, \"Invalid single-route payload\");\n res.status(400).json({\n error: \"invalid_request\",\n message: error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({ runtime, request: handlerRequest, agentId });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({ runtime, request: handlerRequest, agentId });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({ runtime, request, agentId, threadId });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n response = await handleTranscribe({ runtime, request });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error({ err: error, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch((mwError) => {\n logger.error({ err: mwError, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n return;\n }\n logger.error({ err: error, url: request.url, path }, \"Error running single-route handler\");\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express single-route endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"]}
package/dist/express.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { callBeforeRequestMiddleware, callAfterRequestMiddleware, parseMethodCall, handleTranscribe, handleGetRuntimeInfo, expectString, handleStopAgent, createJsonRequest, handleConnectAgent, handleRunAgent } from './chunk-ZYGIZ6EK.mjs';
1
+ import { callBeforeRequestMiddleware, callAfterRequestMiddleware, parseMethodCall, handleTranscribe, handleGetRuntimeInfo, expectString, handleStopAgent, createJsonRequest, handleConnectAgent, handleRunAgent } from './chunk-S556ZC5H.mjs';
2
2
  import express from 'express';
3
3
  import cors from 'cors';
4
4
  import { logger } from '@copilotkitnext/shared';
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ var encoder = require('@ag-ui/encoder');
9
9
 
10
10
  // package.json
11
11
  var package_default = {
12
- version: "0.0.22-alpha.8"};
12
+ version: "0.0.22-alpha.9"};
13
13
 
14
14
  // src/runner/agent-runner.ts
15
15
  var AgentRunner = class {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../src/runtime.ts","../src/handlers/handle-run.ts","../src/handlers/get-runtime-info.ts","../src/handlers/handle-transcribe.ts","../src/middleware.ts","../src/handlers/handle-connect.ts","../src/handlers/handle-stop.ts","../src/endpoints/hono.ts","../src/endpoints/single-route-helpers.ts","../src/endpoints/hono-single.ts"],"names":["EventType","ReplaySubject","finalizeRunEvents","compactEvents","encoder","EventEncoder","RunAgentInputSchema","logger","Hono","cors"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.22-alpha.8\",\n \"description\": \"Server-side runtime package for CopilotKit2\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./express\": {\n \"types\": \"./dist/express.d.ts\",\n \"import\": \"./dist/express.mjs\",\n \"require\": \"./dist/express.js\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"devDependencies\": {\n \"@copilotkitnext/eslint-config\": \"workspace:*\",\n \"@copilotkitnext/typescript-config\": \"workspace:*\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^4.17.21\",\n \"@types/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"supertest\": \"^7.1.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.41-alpha.0\",\n \"@ag-ui/core\": \"0.0.41-alpha.0\",\n \"@ag-ui/encoder\": \"0.0.41-alpha.0\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"cors\": \"^2.8.5\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"express\": \"^4.21.2\",\n \"hono\": \"^4.6.13\",\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {\n \"express\": { \"optional\": true }\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","import { AbstractAgent, BaseEvent, RunAgentInput } from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface AgentRunnerRunRequest {\n threadId: string;\n agent: AbstractAgent;\n input: RunAgentInput;\n}\n\nexport interface AgentRunnerConnectRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerIsRunningRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerStopRequest {\n threadId: string;\n}\n\nexport abstract class AgentRunner {\n abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;\n abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;\n abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;\n abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;\n}\n","import {\n AgentRunner,\n AgentRunnerConnectRequest,\n AgentRunnerIsRunningRequest,\n AgentRunnerRunRequest,\n type AgentRunnerStopRequest,\n} from \"./agent-runner\";\nimport { Observable, ReplaySubject } from \"rxjs\";\nimport {\n AbstractAgent,\n BaseEvent,\n EventType,\n MessagesSnapshotEvent,\n RunStartedEvent,\n compactEvents,\n} from \"@ag-ui/client\";\nimport { finalizeRunEvents } from \"@copilotkitnext/shared\";\n\ninterface HistoricRun {\n threadId: string;\n runId: string;\n parentRunId: string | null;\n events: BaseEvent[];\n createdAt: number;\n}\n\nclass InMemoryEventStore {\n constructor(public threadId: string) {}\n\n /** The subject that current consumers subscribe to. */\n subject: ReplaySubject<BaseEvent> | null = null;\n\n /** True while a run is actively producing events. */\n isRunning = false;\n\n /** Current run ID */\n currentRunId: string | null = null;\n\n /** Historic completed runs */\n historicRuns: HistoricRun[] = [];\n\n /** Currently running agent instance (if any). */\n agent: AbstractAgent | null = null;\n\n /** Subject returned from run() while the run is active. */\n runSubject: ReplaySubject<BaseEvent> | null = null;\n\n /** True once stop() has been requested but the run has not yet finalized. */\n stopRequested = false;\n\n /** Reference to the events emitted in the current run. */\n currentEvents: BaseEvent[] | null = null;\n}\n\nconst GLOBAL_STORE = new Map<string, InMemoryEventStore>();\n\nexport class InMemoryAgentRunner extends AgentRunner {\n run(request: AgentRunnerRunRequest): Observable<BaseEvent> {\n let existingStore = GLOBAL_STORE.get(request.threadId);\n if (!existingStore) {\n existingStore = new InMemoryEventStore(request.threadId);\n GLOBAL_STORE.set(request.threadId, existingStore);\n }\n const store = existingStore; // Now store is const and non-null\n\n if (store.isRunning) {\n throw new Error(\"Thread already running\");\n }\n store.isRunning = true;\n store.currentRunId = request.input.runId;\n store.agent = request.agent;\n store.stopRequested = false;\n\n // Track seen message IDs and current run events for this run\n const seenMessageIds = new Set<string>();\n const currentRunEvents: BaseEvent[] = [];\n store.currentEvents = currentRunEvents;\n\n // Get all previously seen message IDs from historic runs\n const historicMessageIds = new Set<string>();\n for (const run of store.historicRuns) {\n for (const event of run.events) {\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n historicMessageIds.add(event.messageId);\n }\n if (event.type === EventType.RUN_STARTED) {\n const runStarted = event as RunStartedEvent;\n const messages = runStarted.input?.messages ?? [];\n for (const message of messages) {\n historicMessageIds.add(message.id);\n }\n }\n }\n }\n\n const nextSubject = new ReplaySubject<BaseEvent>(Infinity);\n const prevSubject = store.subject;\n\n // Update the store's subject immediately\n store.subject = nextSubject;\n\n // Create a subject for run() return value\n const runSubject = new ReplaySubject<BaseEvent>(Infinity);\n store.runSubject = runSubject;\n\n // Helper function to run the agent and handle errors\n const runAgent = async () => {\n // Get parent run ID for chaining\n const lastRun = store.historicRuns[store.historicRuns.length - 1];\n const parentRunId = lastRun?.runId ?? null;\n\n try {\n await request.agent.runAgent(request.input, {\n onEvent: ({ event }) => {\n let processedEvent: BaseEvent = event;\n if (event.type === EventType.RUN_STARTED) {\n const runStartedEvent = event as RunStartedEvent;\n if (!runStartedEvent.input) {\n const sanitizedMessages = request.input.messages\n ? request.input.messages.filter(\n (message) => !historicMessageIds.has(message.id),\n )\n : undefined;\n const updatedInput = {\n ...request.input,\n ...(sanitizedMessages !== undefined\n ? { messages: sanitizedMessages }\n : {}),\n };\n processedEvent = {\n ...runStartedEvent,\n input: updatedInput,\n } as RunStartedEvent;\n }\n }\n\n runSubject.next(processedEvent); // For run() return - only agent events\n nextSubject.next(processedEvent); // For connect() / store - all events\n currentRunEvents.push(processedEvent); // Accumulate for storage\n },\n onNewMessage: ({ message }) => {\n // Called for each new message\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n },\n onRunStartedEvent: () => {\n // Mark any messages from the input as seen so they aren't emitted twice\n if (request.input.messages) {\n for (const message of request.input.messages) {\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n }\n }\n },\n });\n\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the completed run in memory with ONLY its events\n if (store.currentRunId) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n } catch {\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the run even if it failed (partial events)\n if (store.currentRunId && currentRunEvents.length > 0) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n }\n };\n\n // Bridge previous events if they exist\n if (prevSubject) {\n prevSubject.subscribe({\n next: (e) => nextSubject.next(e),\n error: (err) => nextSubject.error(err),\n complete: () => {\n // Don't complete nextSubject here - it needs to stay open for new events\n },\n });\n }\n\n // Start the agent execution immediately (not lazily)\n runAgent();\n\n // Return the run subject (only agent events, no injected messages)\n return runSubject.asObservable();\n }\n\n connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {\n const store = GLOBAL_STORE.get(request.threadId);\n const connectionSubject = new ReplaySubject<BaseEvent>(Infinity);\n\n if (!store) {\n // No store means no events\n connectionSubject.complete();\n return connectionSubject.asObservable();\n }\n\n // Collect all historic events from memory\n const allHistoricEvents: BaseEvent[] = [];\n for (const run of store.historicRuns) {\n allHistoricEvents.push(...run.events);\n }\n\n // Apply compaction to all historic events together (like SQLite)\n const compactedEvents = compactEvents(allHistoricEvents);\n\n // Emit compacted events and track message IDs\n const emittedMessageIds = new Set<string>();\n for (const event of compactedEvents) {\n connectionSubject.next(event);\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n emittedMessageIds.add(event.messageId);\n }\n }\n\n // Bridge active run to connection if exists\n if (store.subject && (store.isRunning || store.stopRequested)) {\n store.subject.subscribe({\n next: (event) => {\n // Skip message events that we've already emitted from historic\n if (\n \"messageId\" in event &&\n typeof event.messageId === \"string\" &&\n emittedMessageIds.has(event.messageId)\n ) {\n return;\n }\n connectionSubject.next(event);\n },\n complete: () => connectionSubject.complete(),\n error: (err) => connectionSubject.error(err),\n });\n } else {\n // No active run, complete after historic events\n connectionSubject.complete();\n }\n\n return connectionSubject.asObservable();\n }\n\n isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {\n const store = GLOBAL_STORE.get(request.threadId);\n return Promise.resolve(store?.isRunning ?? false);\n }\n\n stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {\n const store = GLOBAL_STORE.get(request.threadId);\n if (!store || !store.isRunning) {\n return Promise.resolve(false);\n }\n if (store.stopRequested) {\n return Promise.resolve(false);\n }\n\n store.stopRequested = true;\n store.isRunning = false;\n\n const agent = store.agent;\n if (!agent) {\n store.stopRequested = false;\n store.isRunning = false;\n return Promise.resolve(false);\n }\n\n try {\n agent.abortRun();\n return Promise.resolve(true);\n } catch (error) {\n console.error(\"Failed to abort agent run\", error);\n store.stopRequested = false;\n store.isRunning = true;\n return Promise.resolve(false);\n }\n }\n}\n","import { MaybePromise, NonEmptyRecord } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport pkg from \"../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { TranscriptionService } from \"./transcription-service/transcription-service\";\nimport { AgentRunner } from \"./runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"./runner/in-memory\";\n\nexport const VERSION = pkg.version;\n\n/**\n * Options used to construct a `CopilotRuntime` instance.\n */\nexport interface CopilotRuntimeOptions {\n /** Map of available agents (loaded lazily is fine). */\n agents: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n /** The runner to use for running agents. */\n runner?: AgentRunner;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n\n constructor({\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n runner,\n }: CopilotRuntimeOptions) {\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.runner = runner ?? new InMemoryAgentRunner();\n }\n}\n","import {\n AbstractAgent,\n HttpAgent,\n RunAgentInput,\n RunAgentInputSchema,\n} from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface RunAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleRunAgent({\n runtime,\n request,\n agentId,\n}: RunAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const registeredAgent = agents[agentId] as AbstractAgent;\n const agent = registeredAgent.clone() as AbstractAgent;\n\n if (agent && \"headers\" in agent) {\n const shouldForward = (headerName: string) => {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n };\n\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForward(key)) {\n forwardableHeaders[key] = value;\n }\n });\n\n agent.headers = { \n ...agent.headers as Record<string, string>, \n ...forwardableHeaders \n };\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n agent.setMessages(input.messages);\n agent.setState(input.state);\n agent.threadId = input.threadId;\n\n runtime.runner\n .run({\n threadId: input.threadId,\n agent,\n input,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { AgentDescription, RuntimeInfo } from \"@copilotkitnext/shared\";\nimport { VERSION } from \"../runtime\";\n\ninterface HandleGetRuntimeInfoParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleGetRuntimeInfo({\n runtime,\n}: HandleGetRuntimeInfoParameters) {\n try {\n const agents = await runtime.agents;\n\n const agentsDict = Object.entries(agents).reduce(\n (acc, [name, agent]) => {\n acc[name] = {\n name,\n description: agent.description,\n className: agent.constructor.name,\n };\n return acc;\n },\n {} as Record<string, AgentDescription>\n );\n\n const runtimeInfo: RuntimeInfo = {\n version: VERSION,\n agents: agentsDict,\n audioFileTranscriptionEnabled: !!runtime.transcriptionService,\n };\n\n return new Response(JSON.stringify(runtimeInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Failed to retrieve runtime information\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n return new Response(\n JSON.stringify({\n error: \"Transcription service not configured\",\n message:\n \"No transcription service has been configured in the runtime\",\n }),\n {\n status: 503,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Check if request has form data\n const contentType = request.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"multipart/form-data\")) {\n return new Response(\n JSON.stringify({\n error: \"Invalid content type\",\n message:\n \"Request must contain multipart/form-data with an audio file\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Extract form data\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n return new Response(\n JSON.stringify({\n error: \"Missing audio file\",\n message:\n \"No audio file found in form data. Please include an 'audio' field.\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Validate file type (basic check)\n const validAudioTypes = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n ];\n\n // Allow empty types and application/octet-stream (common fallback for unknown types)\n const isValidType =\n validAudioTypes.includes(audioFile.type) ||\n audioFile.type === \"\" ||\n audioFile.type === \"application/octet-stream\";\n\n if (!isValidType) {\n return new Response(\n JSON.stringify({\n error: \"Invalid file type\",\n message: `Unsupported audio file type: ${audioFile.type}. Supported types: ${validAudioTypes.join(\", \")}, or files with unknown/empty types`,\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Transcribe the audio file with options\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Transcription failed\",\n message:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred during transcription\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntime } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n response: Response;\n path: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: AfterRequestMiddlewareParameters): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({ runtime, response, path });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n","import { RunAgentInput, RunAgentInputSchema } from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface ConnectAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleConnectAgent({\n runtime,\n request,\n agentId,\n}: ConnectAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n runtime.runner\n .connect({\n threadId: input.threadId,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { EventType } from \"@ag-ui/client\";\n\ninterface StopAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n threadId: string;\n}\n\nexport async function handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n}: StopAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stopped = await runtime.runner.stop({ threadId });\n\n if (!stopped) {\n return new Response(\n JSON.stringify({\n stopped: false,\n message: `No active run for thread '${threadId}'.`,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n return new Response(\n JSON.stringify({\n stopped: true,\n interrupt: {\n type: EventType.RUN_ERROR,\n message: \"Run stopped by user\",\n code: \"STOPPED\",\n },\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n console.error(\"Error stopping agent run:\", error);\n\n return new Response(\n JSON.stringify({\n error: \"Failed to stop agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\n\ninterface CopilotEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\n// Define the context variables type\ntype CopilotEndpointContext = {\n Variables: {\n modifiedRequest?: Request;\n };\n};\n\nexport function createCopilotEndpoint({ runtime, basePath }: CopilotEndpointParams) {\n const app = new Hono<CopilotEndpointContext>();\n\n return app\n .basePath(basePath)\n .use(\n \"*\",\n cors({\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowHeaders: [\"*\"],\n }),\n )\n .use(\"*\", async (c, next) => {\n const request = c.req.raw;\n const path = c.req.path;\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n c.set(\"modifiedRequest\", maybeModifiedRequest);\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n return error;\n }\n throw error;\n }\n\n await next();\n })\n .use(\"*\", async (c, next) => {\n await next();\n\n const response = c.res;\n const path = c.req.path;\n\n // Non-blocking after middleware\n callAfterRequestMiddleware({\n runtime,\n response,\n path,\n }).catch((error) => {\n logger.error({ err: error, url: c.req.url, path }, \"Error running after request middleware\");\n });\n })\n .post(\"/agent/:agentId/run\", async (c) => {\n const agentId = c.req.param(\"agentId\");\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleRunAgent({\n runtime,\n request,\n agentId,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .post(\"/agent/:agentId/connect\", async (c) => {\n const agentId = c.req.param(\"agentId\");\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleConnectAgent({\n runtime,\n request,\n agentId,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n\n .post(\"/agent/:agentId/stop/:threadId\", async (c) => {\n const agentId = c.req.param(\"agentId\");\n const threadId = c.req.param(\"threadId\");\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .get(\"/info\", async (c) => {\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleGetRuntimeInfo({\n runtime,\n request,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .post(\"/transcribe\", async (c) => {\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleTranscribe({\n runtime,\n request,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .notFound((c) => {\n return c.json({ error: \"Not found\" }, 404);\n });\n\n // return app;\n}\n","const METHOD_NAMES = [\n \"agent/run\",\n \"agent/connect\",\n \"agent/stop\",\n \"info\",\n \"transcribe\",\n] as const;\n\nexport type EndpointMethod = (typeof METHOD_NAMES)[number];\n\ninterface JsonEnvelope {\n method?: string;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport interface MethodCall {\n method: EndpointMethod;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport async function parseMethodCall(request: Request): Promise<MethodCall> {\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n if (!contentType.includes(\"application/json\")) {\n throw createResponseError(\"Single-route endpoint expects JSON payloads\", 415);\n }\n\n let jsonEnvelope: JsonEnvelope;\n try {\n jsonEnvelope = (await request.clone().json()) as JsonEnvelope;\n } catch (error) {\n throw createResponseError(\"Invalid JSON payload\", 400);\n }\n\n const method = validateMethod(jsonEnvelope.method);\n\n return {\n method,\n params: jsonEnvelope.params,\n body: jsonEnvelope.body,\n };\n}\n\nexport function expectString(params: Record<string, unknown> | undefined, key: string): string {\n const value = params?.[key];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n throw createResponseError(`Missing or invalid parameter '${key}'`, 400);\n}\n\nexport function createJsonRequest(base: Request, body: unknown): Request {\n if (body === undefined || body === null) {\n throw createResponseError(\"Missing request body for JSON handler\", 400);\n }\n\n const headers = new Headers(base.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.delete(\"content-length\");\n\n const serializedBody = serializeJsonBody(body);\n\n return new Request(base.url, {\n method: \"POST\",\n headers,\n body: serializedBody,\n signal: base.signal,\n });\n}\n\nexport function createResponseError(message: string, status: number): Response {\n return new Response(\n JSON.stringify({\n error: \"invalid_request\",\n message,\n }),\n {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n}\n\nfunction validateMethod(method: string | undefined): EndpointMethod {\n if (!method) {\n throw createResponseError(\"Missing method field\", 400);\n }\n\n if ((METHOD_NAMES as readonly string[]).includes(method)) {\n return method as EndpointMethod;\n }\n\n throw createResponseError(`Unsupported method '${method}'`, 400);\n}\n\nfunction serializeJsonBody(body: unknown): BodyInit {\n if (typeof body === \"string\") {\n return body;\n }\n\n if (body instanceof Blob || body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return body;\n }\n\n if (body instanceof FormData || body instanceof URLSearchParams) {\n return body;\n }\n\n return JSON.stringify(body);\n}\n","import { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport {\n createJsonRequest,\n expectString,\n MethodCall,\n parseMethodCall,\n} from \"./single-route-helpers\";\n\ninterface CopilotSingleEndpointParams {\n runtime: CopilotRuntime;\n /**\n * Absolute path at which to mount the single-route endpoint (e.g. \"/api/copilotkit\").\n */\n basePath: string;\n}\n\ntype CopilotEndpointContext = {\n Variables: {\n modifiedRequest?: Request;\n };\n};\n\nexport function createCopilotEndpointSingleRoute({ runtime, basePath }: CopilotSingleEndpointParams) {\n const app = new Hono<CopilotEndpointContext>();\n const routePath = normalizePath(basePath);\n\n return app\n .basePath(routePath)\n .use(\n \"*\",\n cors({\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowHeaders: [\"*\"],\n }),\n )\n .use(\"*\", async (c, next) => {\n const request = c.req.raw;\n const path = c.req.path;\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n c.set(\"modifiedRequest\", maybeModifiedRequest);\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n return error;\n }\n throw error;\n }\n\n await next();\n })\n .use(\"*\", async (c, next) => {\n await next();\n\n const response = c.res;\n const path = c.req.path;\n\n callAfterRequestMiddleware({\n runtime,\n response,\n path,\n }).catch((error) => {\n logger.error({ err: error, url: c.req.url, path }, \"Error running after request middleware\");\n });\n })\n .post(\"/\", async (c) => {\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n return error;\n }\n logger.warn({ err: error, url: request.url }, \"Invalid single-route payload\");\n return c.json(\n {\n error: \"invalid_request\",\n message: error instanceof Error ? error.message : \"Invalid request payload\",\n },\n 400,\n );\n }\n\n try {\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n return await handleRunAgent({ runtime, request: handlerRequest, agentId });\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n return await handleConnectAgent({ runtime, request: handlerRequest, agentId });\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n return await handleStopAgent({ runtime, request, agentId, threadId });\n }\n case \"info\": {\n return await handleGetRuntimeInfo({ runtime, request });\n }\n case \"transcribe\": {\n return await handleTranscribe({ runtime, request });\n }\n default: {\n const exhaustiveCheck: never = methodCall.method;\n return exhaustiveCheck;\n }\n }\n } catch (error) {\n if (error instanceof Response) {\n return error;\n }\n logger.error({ err: error, url: request.url, method: methodCall.method }, \"Error running single-route handler\");\n throw error;\n }\n })\n .notFound((c) => {\n return c.json({ error: \"Not found\" }, 404);\n });\n}\n\nfunction normalizePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for single-route endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"]}
1
+ {"version":3,"sources":["../package.json","../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../src/runtime.ts","../src/handlers/handle-run.ts","../src/handlers/get-runtime-info.ts","../src/handlers/handle-transcribe.ts","../src/middleware.ts","../src/handlers/handle-connect.ts","../src/handlers/handle-stop.ts","../src/endpoints/hono.ts","../src/endpoints/single-route-helpers.ts","../src/endpoints/hono-single.ts"],"names":["EventType","ReplaySubject","finalizeRunEvents","compactEvents","encoder","EventEncoder","RunAgentInputSchema","logger","Hono","cors"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.22-alpha.9\",\n \"description\": \"Server-side runtime package for CopilotKit2\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./express\": {\n \"types\": \"./dist/express.d.ts\",\n \"import\": \"./dist/express.mjs\",\n \"require\": \"./dist/express.js\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"devDependencies\": {\n \"@copilotkitnext/eslint-config\": \"workspace:*\",\n \"@copilotkitnext/typescript-config\": \"workspace:*\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^4.17.21\",\n \"@types/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"supertest\": \"^7.1.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.41-alpha.0\",\n \"@ag-ui/core\": \"0.0.41-alpha.0\",\n \"@ag-ui/encoder\": \"0.0.41-alpha.0\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"cors\": \"^2.8.5\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"express\": \"^4.21.2\",\n \"hono\": \"^4.6.13\",\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {\n \"express\": {\n \"optional\": true\n }\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","import { AbstractAgent, BaseEvent, RunAgentInput } from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface AgentRunnerRunRequest {\n threadId: string;\n agent: AbstractAgent;\n input: RunAgentInput;\n}\n\nexport interface AgentRunnerConnectRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerIsRunningRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerStopRequest {\n threadId: string;\n}\n\nexport abstract class AgentRunner {\n abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;\n abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;\n abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;\n abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;\n}\n","import {\n AgentRunner,\n AgentRunnerConnectRequest,\n AgentRunnerIsRunningRequest,\n AgentRunnerRunRequest,\n type AgentRunnerStopRequest,\n} from \"./agent-runner\";\nimport { Observable, ReplaySubject } from \"rxjs\";\nimport {\n AbstractAgent,\n BaseEvent,\n EventType,\n MessagesSnapshotEvent,\n RunStartedEvent,\n compactEvents,\n} from \"@ag-ui/client\";\nimport { finalizeRunEvents } from \"@copilotkitnext/shared\";\n\ninterface HistoricRun {\n threadId: string;\n runId: string;\n parentRunId: string | null;\n events: BaseEvent[];\n createdAt: number;\n}\n\nclass InMemoryEventStore {\n constructor(public threadId: string) {}\n\n /** The subject that current consumers subscribe to. */\n subject: ReplaySubject<BaseEvent> | null = null;\n\n /** True while a run is actively producing events. */\n isRunning = false;\n\n /** Current run ID */\n currentRunId: string | null = null;\n\n /** Historic completed runs */\n historicRuns: HistoricRun[] = [];\n\n /** Currently running agent instance (if any). */\n agent: AbstractAgent | null = null;\n\n /** Subject returned from run() while the run is active. */\n runSubject: ReplaySubject<BaseEvent> | null = null;\n\n /** True once stop() has been requested but the run has not yet finalized. */\n stopRequested = false;\n\n /** Reference to the events emitted in the current run. */\n currentEvents: BaseEvent[] | null = null;\n}\n\nconst GLOBAL_STORE = new Map<string, InMemoryEventStore>();\n\nexport class InMemoryAgentRunner extends AgentRunner {\n run(request: AgentRunnerRunRequest): Observable<BaseEvent> {\n let existingStore = GLOBAL_STORE.get(request.threadId);\n if (!existingStore) {\n existingStore = new InMemoryEventStore(request.threadId);\n GLOBAL_STORE.set(request.threadId, existingStore);\n }\n const store = existingStore; // Now store is const and non-null\n\n if (store.isRunning) {\n throw new Error(\"Thread already running\");\n }\n store.isRunning = true;\n store.currentRunId = request.input.runId;\n store.agent = request.agent;\n store.stopRequested = false;\n\n // Track seen message IDs and current run events for this run\n const seenMessageIds = new Set<string>();\n const currentRunEvents: BaseEvent[] = [];\n store.currentEvents = currentRunEvents;\n\n // Get all previously seen message IDs from historic runs\n const historicMessageIds = new Set<string>();\n for (const run of store.historicRuns) {\n for (const event of run.events) {\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n historicMessageIds.add(event.messageId);\n }\n if (event.type === EventType.RUN_STARTED) {\n const runStarted = event as RunStartedEvent;\n const messages = runStarted.input?.messages ?? [];\n for (const message of messages) {\n historicMessageIds.add(message.id);\n }\n }\n }\n }\n\n const nextSubject = new ReplaySubject<BaseEvent>(Infinity);\n const prevSubject = store.subject;\n\n // Update the store's subject immediately\n store.subject = nextSubject;\n\n // Create a subject for run() return value\n const runSubject = new ReplaySubject<BaseEvent>(Infinity);\n store.runSubject = runSubject;\n\n // Helper function to run the agent and handle errors\n const runAgent = async () => {\n // Get parent run ID for chaining\n const lastRun = store.historicRuns[store.historicRuns.length - 1];\n const parentRunId = lastRun?.runId ?? null;\n\n try {\n await request.agent.runAgent(request.input, {\n onEvent: ({ event }) => {\n let processedEvent: BaseEvent = event;\n if (event.type === EventType.RUN_STARTED) {\n const runStartedEvent = event as RunStartedEvent;\n if (!runStartedEvent.input) {\n const sanitizedMessages = request.input.messages\n ? request.input.messages.filter(\n (message) => !historicMessageIds.has(message.id),\n )\n : undefined;\n const updatedInput = {\n ...request.input,\n ...(sanitizedMessages !== undefined\n ? { messages: sanitizedMessages }\n : {}),\n };\n processedEvent = {\n ...runStartedEvent,\n input: updatedInput,\n } as RunStartedEvent;\n }\n }\n\n runSubject.next(processedEvent); // For run() return - only agent events\n nextSubject.next(processedEvent); // For connect() / store - all events\n currentRunEvents.push(processedEvent); // Accumulate for storage\n },\n onNewMessage: ({ message }) => {\n // Called for each new message\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n },\n onRunStartedEvent: () => {\n // Mark any messages from the input as seen so they aren't emitted twice\n if (request.input.messages) {\n for (const message of request.input.messages) {\n if (!seenMessageIds.has(message.id)) {\n seenMessageIds.add(message.id);\n }\n }\n }\n },\n });\n\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the completed run in memory with ONLY its events\n if (store.currentRunId) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n } catch {\n const appendedEvents = finalizeRunEvents(currentRunEvents, {\n stopRequested: store.stopRequested,\n });\n for (const event of appendedEvents) {\n runSubject.next(event);\n nextSubject.next(event);\n }\n\n // Store the run even if it failed (partial events)\n if (store.currentRunId && currentRunEvents.length > 0) {\n // Compact the events before storing (like SQLite does)\n const compactedEvents = compactEvents(currentRunEvents);\n store.historicRuns.push({\n threadId: request.threadId,\n runId: store.currentRunId,\n parentRunId,\n events: compactedEvents,\n createdAt: Date.now(),\n });\n }\n\n // Complete the run\n store.currentEvents = null;\n store.currentRunId = null;\n store.agent = null;\n store.runSubject = null;\n store.stopRequested = false;\n store.isRunning = false;\n runSubject.complete();\n nextSubject.complete();\n }\n };\n\n // Bridge previous events if they exist\n if (prevSubject) {\n prevSubject.subscribe({\n next: (e) => nextSubject.next(e),\n error: (err) => nextSubject.error(err),\n complete: () => {\n // Don't complete nextSubject here - it needs to stay open for new events\n },\n });\n }\n\n // Start the agent execution immediately (not lazily)\n runAgent();\n\n // Return the run subject (only agent events, no injected messages)\n return runSubject.asObservable();\n }\n\n connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {\n const store = GLOBAL_STORE.get(request.threadId);\n const connectionSubject = new ReplaySubject<BaseEvent>(Infinity);\n\n if (!store) {\n // No store means no events\n connectionSubject.complete();\n return connectionSubject.asObservable();\n }\n\n // Collect all historic events from memory\n const allHistoricEvents: BaseEvent[] = [];\n for (const run of store.historicRuns) {\n allHistoricEvents.push(...run.events);\n }\n\n // Apply compaction to all historic events together (like SQLite)\n const compactedEvents = compactEvents(allHistoricEvents);\n\n // Emit compacted events and track message IDs\n const emittedMessageIds = new Set<string>();\n for (const event of compactedEvents) {\n connectionSubject.next(event);\n if (\"messageId\" in event && typeof event.messageId === \"string\") {\n emittedMessageIds.add(event.messageId);\n }\n }\n\n // Bridge active run to connection if exists\n if (store.subject && (store.isRunning || store.stopRequested)) {\n store.subject.subscribe({\n next: (event) => {\n // Skip message events that we've already emitted from historic\n if (\n \"messageId\" in event &&\n typeof event.messageId === \"string\" &&\n emittedMessageIds.has(event.messageId)\n ) {\n return;\n }\n connectionSubject.next(event);\n },\n complete: () => connectionSubject.complete(),\n error: (err) => connectionSubject.error(err),\n });\n } else {\n // No active run, complete after historic events\n connectionSubject.complete();\n }\n\n return connectionSubject.asObservable();\n }\n\n isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {\n const store = GLOBAL_STORE.get(request.threadId);\n return Promise.resolve(store?.isRunning ?? false);\n }\n\n stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {\n const store = GLOBAL_STORE.get(request.threadId);\n if (!store || !store.isRunning) {\n return Promise.resolve(false);\n }\n if (store.stopRequested) {\n return Promise.resolve(false);\n }\n\n store.stopRequested = true;\n store.isRunning = false;\n\n const agent = store.agent;\n if (!agent) {\n store.stopRequested = false;\n store.isRunning = false;\n return Promise.resolve(false);\n }\n\n try {\n agent.abortRun();\n return Promise.resolve(true);\n } catch (error) {\n console.error(\"Failed to abort agent run\", error);\n store.stopRequested = false;\n store.isRunning = true;\n return Promise.resolve(false);\n }\n }\n}\n","import { MaybePromise, NonEmptyRecord } from \"@copilotkitnext/shared\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport pkg from \"../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { TranscriptionService } from \"./transcription-service/transcription-service\";\nimport { AgentRunner } from \"./runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"./runner/in-memory\";\n\nexport const VERSION = pkg.version;\n\n/**\n * Options used to construct a `CopilotRuntime` instance.\n */\nexport interface CopilotRuntimeOptions {\n /** Map of available agents (loaded lazily is fine). */\n agents: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n /** The runner to use for running agents. */\n runner?: AgentRunner;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n\n constructor({\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n runner,\n }: CopilotRuntimeOptions) {\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.runner = runner ?? new InMemoryAgentRunner();\n }\n}\n","import {\n AbstractAgent,\n HttpAgent,\n RunAgentInput,\n RunAgentInputSchema,\n} from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface RunAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleRunAgent({\n runtime,\n request,\n agentId,\n}: RunAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const registeredAgent = agents[agentId] as AbstractAgent;\n const agent = registeredAgent.clone() as AbstractAgent;\n\n if (agent && \"headers\" in agent) {\n const shouldForward = (headerName: string) => {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n };\n\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForward(key)) {\n forwardableHeaders[key] = value;\n }\n });\n\n agent.headers = { \n ...agent.headers as Record<string, string>, \n ...forwardableHeaders \n };\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n agent.setMessages(input.messages);\n agent.setState(input.state);\n agent.threadId = input.threadId;\n\n runtime.runner\n .run({\n threadId: input.threadId,\n agent,\n input,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { AgentDescription, RuntimeInfo } from \"@copilotkitnext/shared\";\nimport { VERSION } from \"../runtime\";\n\ninterface HandleGetRuntimeInfoParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleGetRuntimeInfo({\n runtime,\n}: HandleGetRuntimeInfoParameters) {\n try {\n const agents = await runtime.agents;\n\n const agentsDict = Object.entries(agents).reduce(\n (acc, [name, agent]) => {\n acc[name] = {\n name,\n description: agent.description,\n className: agent.constructor.name,\n };\n return acc;\n },\n {} as Record<string, AgentDescription>\n );\n\n const runtimeInfo: RuntimeInfo = {\n version: VERSION,\n agents: agentsDict,\n audioFileTranscriptionEnabled: !!runtime.transcriptionService,\n };\n\n return new Response(JSON.stringify(runtimeInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Failed to retrieve runtime information\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n return new Response(\n JSON.stringify({\n error: \"Transcription service not configured\",\n message:\n \"No transcription service has been configured in the runtime\",\n }),\n {\n status: 503,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Check if request has form data\n const contentType = request.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"multipart/form-data\")) {\n return new Response(\n JSON.stringify({\n error: \"Invalid content type\",\n message:\n \"Request must contain multipart/form-data with an audio file\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Extract form data\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n return new Response(\n JSON.stringify({\n error: \"Missing audio file\",\n message:\n \"No audio file found in form data. Please include an 'audio' field.\",\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Validate file type (basic check)\n const validAudioTypes = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n ];\n\n // Allow empty types and application/octet-stream (common fallback for unknown types)\n const isValidType =\n validAudioTypes.includes(audioFile.type) ||\n audioFile.type === \"\" ||\n audioFile.type === \"application/octet-stream\";\n\n if (!isValidType) {\n return new Response(\n JSON.stringify({\n error: \"Invalid file type\",\n message: `Unsupported audio file type: ${audioFile.type}. Supported types: ${validAudioTypes.join(\", \")}, or files with unknown/empty types`,\n }),\n {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n // Transcribe the audio file with options\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n return new Response(\n JSON.stringify({\n error: \"Transcription failed\",\n message:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred during transcription\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntime } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkitnext/shared\";\nimport { logger } from \"@copilotkitnext/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntime;\n response: Response;\n path: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: AfterRequestMiddlewareParameters): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({ runtime, response, path });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n","import { RunAgentInput, RunAgentInputSchema } from \"@ag-ui/client\";\nimport { EventEncoder } from \"@ag-ui/encoder\";\nimport { CopilotRuntime } from \"../runtime\";\n\ninterface ConnectAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n}\n\nexport async function handleConnectAgent({\n runtime,\n request,\n agentId,\n}: ConnectAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n // Check if the requested agent exists\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stream = new TransformStream();\n const writer = stream.writable.getWriter();\n const encoder = new EventEncoder();\n let streamClosed = false;\n\n // Process the request in the background\n (async () => {\n let input: RunAgentInput;\n try {\n const requestBody = await request.json();\n input = RunAgentInputSchema.parse(requestBody);\n } catch {\n return new Response(\n JSON.stringify({\n error: \"Invalid request body\",\n }),\n { status: 400 }\n );\n }\n\n runtime.runner\n .connect({\n threadId: input.threadId,\n })\n .subscribe({\n next: async (event) => {\n if (!request.signal.aborted && !streamClosed) {\n try {\n await writer.write(encoder.encode(event));\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n streamClosed = true;\n }\n }\n }\n },\n error: async (error) => {\n console.error(\"Error running agent:\", error);\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n complete: async () => {\n if (!streamClosed) {\n try {\n await writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n },\n });\n })().catch((error) => {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n if (!streamClosed) {\n try {\n writer.close();\n streamClosed = true;\n } catch {\n // Stream already closed\n }\n }\n });\n\n // Return the SSE response\n return new Response(stream.readable, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Error running agent:\", error);\n console.error(\n \"Error stack:\",\n error instanceof Error ? error.stack : \"No stack trace\"\n );\n console.error(\"Error details:\", {\n name: error instanceof Error ? error.name : \"Unknown\",\n message: error instanceof Error ? error.message : String(error),\n cause: error instanceof Error ? error.cause : undefined,\n });\n\n return new Response(\n JSON.stringify({\n error: \"Failed to run agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { CopilotRuntime } from \"../runtime\";\nimport { EventType } from \"@ag-ui/client\";\n\ninterface StopAgentParameters {\n request: Request;\n runtime: CopilotRuntime;\n agentId: string;\n threadId: string;\n}\n\nexport async function handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n}: StopAgentParameters) {\n try {\n const agents = await runtime.agents;\n\n if (!agents[agentId]) {\n return new Response(\n JSON.stringify({\n error: \"Agent not found\",\n message: `Agent '${agentId}' does not exist`,\n }),\n {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n const stopped = await runtime.runner.stop({ threadId });\n\n if (!stopped) {\n return new Response(\n JSON.stringify({\n stopped: false,\n message: `No active run for thread '${threadId}'.`,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n\n return new Response(\n JSON.stringify({\n stopped: true,\n interrupt: {\n type: EventType.RUN_ERROR,\n message: \"Run stopped by user\",\n code: \"STOPPED\",\n },\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n } catch (error) {\n console.error(\"Error stopping agent run:\", error);\n\n return new Response(\n JSON.stringify({\n error: \"Failed to stop agent\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n }\n}\n","import { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\n\ninterface CopilotEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\n// Define the context variables type\ntype CopilotEndpointContext = {\n Variables: {\n modifiedRequest?: Request;\n };\n};\n\nexport function createCopilotEndpoint({ runtime, basePath }: CopilotEndpointParams) {\n const app = new Hono<CopilotEndpointContext>();\n\n return app\n .basePath(basePath)\n .use(\n \"*\",\n cors({\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowHeaders: [\"*\"],\n }),\n )\n .use(\"*\", async (c, next) => {\n const request = c.req.raw;\n const path = c.req.path;\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n c.set(\"modifiedRequest\", maybeModifiedRequest);\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n return error;\n }\n throw error;\n }\n\n await next();\n })\n .use(\"*\", async (c, next) => {\n await next();\n\n const response = c.res;\n const path = c.req.path;\n\n // Non-blocking after middleware\n callAfterRequestMiddleware({\n runtime,\n response,\n path,\n }).catch((error) => {\n logger.error({ err: error, url: c.req.url, path }, \"Error running after request middleware\");\n });\n })\n .post(\"/agent/:agentId/run\", async (c) => {\n const agentId = c.req.param(\"agentId\");\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleRunAgent({\n runtime,\n request,\n agentId,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .post(\"/agent/:agentId/connect\", async (c) => {\n const agentId = c.req.param(\"agentId\");\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleConnectAgent({\n runtime,\n request,\n agentId,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n\n .post(\"/agent/:agentId/stop/:threadId\", async (c) => {\n const agentId = c.req.param(\"agentId\");\n const threadId = c.req.param(\"threadId\");\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .get(\"/info\", async (c) => {\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleGetRuntimeInfo({\n runtime,\n request,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .post(\"/transcribe\", async (c) => {\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n try {\n return await handleTranscribe({\n runtime,\n request,\n });\n } catch (error) {\n logger.error({ err: error, url: request.url, path: c.req.path }, \"Error running request handler\");\n throw error;\n }\n })\n .notFound((c) => {\n return c.json({ error: \"Not found\" }, 404);\n });\n\n // return app;\n}\n","const METHOD_NAMES = [\n \"agent/run\",\n \"agent/connect\",\n \"agent/stop\",\n \"info\",\n \"transcribe\",\n] as const;\n\nexport type EndpointMethod = (typeof METHOD_NAMES)[number];\n\ninterface JsonEnvelope {\n method?: string;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport interface MethodCall {\n method: EndpointMethod;\n params?: Record<string, unknown>;\n body?: unknown;\n}\n\nexport async function parseMethodCall(request: Request): Promise<MethodCall> {\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n if (!contentType.includes(\"application/json\")) {\n throw createResponseError(\"Single-route endpoint expects JSON payloads\", 415);\n }\n\n let jsonEnvelope: JsonEnvelope;\n try {\n jsonEnvelope = (await request.clone().json()) as JsonEnvelope;\n } catch (error) {\n throw createResponseError(\"Invalid JSON payload\", 400);\n }\n\n const method = validateMethod(jsonEnvelope.method);\n\n return {\n method,\n params: jsonEnvelope.params,\n body: jsonEnvelope.body,\n };\n}\n\nexport function expectString(params: Record<string, unknown> | undefined, key: string): string {\n const value = params?.[key];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n throw createResponseError(`Missing or invalid parameter '${key}'`, 400);\n}\n\nexport function createJsonRequest(base: Request, body: unknown): Request {\n if (body === undefined || body === null) {\n throw createResponseError(\"Missing request body for JSON handler\", 400);\n }\n\n const headers = new Headers(base.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.delete(\"content-length\");\n\n const serializedBody = serializeJsonBody(body);\n\n return new Request(base.url, {\n method: \"POST\",\n headers,\n body: serializedBody,\n signal: base.signal,\n });\n}\n\nexport function createResponseError(message: string, status: number): Response {\n return new Response(\n JSON.stringify({\n error: \"invalid_request\",\n message,\n }),\n {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n}\n\nfunction validateMethod(method: string | undefined): EndpointMethod {\n if (!method) {\n throw createResponseError(\"Missing method field\", 400);\n }\n\n if ((METHOD_NAMES as readonly string[]).includes(method)) {\n return method as EndpointMethod;\n }\n\n throw createResponseError(`Unsupported method '${method}'`, 400);\n}\n\nfunction serializeJsonBody(body: unknown): BodyInit {\n if (typeof body === \"string\") {\n return body;\n }\n\n if (body instanceof Blob || body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return body;\n }\n\n if (body instanceof FormData || body instanceof URLSearchParams) {\n return body;\n }\n\n return JSON.stringify(body);\n}\n","import { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport {\n createJsonRequest,\n expectString,\n MethodCall,\n parseMethodCall,\n} from \"./single-route-helpers\";\n\ninterface CopilotSingleEndpointParams {\n runtime: CopilotRuntime;\n /**\n * Absolute path at which to mount the single-route endpoint (e.g. \"/api/copilotkit\").\n */\n basePath: string;\n}\n\ntype CopilotEndpointContext = {\n Variables: {\n modifiedRequest?: Request;\n };\n};\n\nexport function createCopilotEndpointSingleRoute({ runtime, basePath }: CopilotSingleEndpointParams) {\n const app = new Hono<CopilotEndpointContext>();\n const routePath = normalizePath(basePath);\n\n return app\n .basePath(routePath)\n .use(\n \"*\",\n cors({\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowHeaders: [\"*\"],\n }),\n )\n .use(\"*\", async (c, next) => {\n const request = c.req.raw;\n const path = c.req.path;\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n c.set(\"modifiedRequest\", maybeModifiedRequest);\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n return error;\n }\n throw error;\n }\n\n await next();\n })\n .use(\"*\", async (c, next) => {\n await next();\n\n const response = c.res;\n const path = c.req.path;\n\n callAfterRequestMiddleware({\n runtime,\n response,\n path,\n }).catch((error) => {\n logger.error({ err: error, url: c.req.url, path }, \"Error running after request middleware\");\n });\n })\n .post(\"/\", async (c) => {\n const request = c.get(\"modifiedRequest\") || c.req.raw;\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n return error;\n }\n logger.warn({ err: error, url: request.url }, \"Invalid single-route payload\");\n return c.json(\n {\n error: \"invalid_request\",\n message: error instanceof Error ? error.message : \"Invalid request payload\",\n },\n 400,\n );\n }\n\n try {\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n return await handleRunAgent({ runtime, request: handlerRequest, agentId });\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n return await handleConnectAgent({ runtime, request: handlerRequest, agentId });\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n return await handleStopAgent({ runtime, request, agentId, threadId });\n }\n case \"info\": {\n return await handleGetRuntimeInfo({ runtime, request });\n }\n case \"transcribe\": {\n return await handleTranscribe({ runtime, request });\n }\n default: {\n const exhaustiveCheck: never = methodCall.method;\n return exhaustiveCheck;\n }\n }\n } catch (error) {\n if (error instanceof Response) {\n return error;\n }\n logger.error({ err: error, url: request.url, method: methodCall.method }, \"Error running single-route handler\");\n throw error;\n }\n })\n .notFound((c) => {\n return c.json({ error: \"Not found\" }, 404);\n });\n}\n\nfunction normalizePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for single-route endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { callBeforeRequestMiddleware, callAfterRequestMiddleware, handleRunAgent, handleConnectAgent, handleStopAgent, handleGetRuntimeInfo, handleTranscribe, parseMethodCall, expectString, createJsonRequest } from './chunk-ZYGIZ6EK.mjs';
2
- export { AgentRunner, CopilotRuntime, InMemoryAgentRunner, VERSION } from './chunk-ZYGIZ6EK.mjs';
1
+ import { callBeforeRequestMiddleware, callAfterRequestMiddleware, handleRunAgent, handleConnectAgent, handleStopAgent, handleGetRuntimeInfo, handleTranscribe, parseMethodCall, expectString, createJsonRequest } from './chunk-S556ZC5H.mjs';
2
+ export { AgentRunner, CopilotRuntime, InMemoryAgentRunner, VERSION } from './chunk-S556ZC5H.mjs';
3
3
  import { Hono } from 'hono';
4
4
  import { cors } from 'hono/cors';
5
5
  import { logger } from '@copilotkitnext/shared';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@copilotkitnext/runtime",
3
- "version": "0.0.22-alpha.8",
3
+ "version": "0.0.22-alpha.9",
4
4
  "description": "Server-side runtime package for CopilotKit2",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -29,8 +29,8 @@
29
29
  "tsup": "^8.5.0",
30
30
  "typescript": "5.8.2",
31
31
  "vitest": "^3.0.5",
32
- "@copilotkitnext/eslint-config": "0.0.0",
33
- "@copilotkitnext/typescript-config": "0.0.0"
32
+ "@copilotkitnext/typescript-config": "0.0.0",
33
+ "@copilotkitnext/eslint-config": "0.0.0"
34
34
  },
35
35
  "dependencies": {
36
36
  "@ag-ui/client": "0.0.41-alpha.0",
@@ -38,7 +38,7 @@
38
38
  "@ag-ui/encoder": "0.0.41-alpha.0",
39
39
  "cors": "^2.8.5",
40
40
  "rxjs": "7.8.1",
41
- "@copilotkitnext/shared": "0.0.22-alpha.8"
41
+ "@copilotkitnext/shared": "0.0.22-alpha.9"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "express": "^4.21.2",