@copilotkitnext/runtime 0.0.17 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -7
- package/dist/index.d.ts +2 -7
- package/dist/index.js +30 -149
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -132
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MaybePromise, NonEmptyRecord } from '@copilotkitnext/shared';
|
|
2
|
+
export { finalizeRunEvents } from '@copilotkitnext/shared';
|
|
2
3
|
import { AbstractAgent, RunAgentInput, BaseEvent } from '@ag-ui/client';
|
|
3
4
|
import { Observable } from 'rxjs';
|
|
4
5
|
import * as hono_hono_base from 'hono/hono-base';
|
|
@@ -175,10 +176,4 @@ declare class InMemoryAgentRunner extends AgentRunner {
|
|
|
175
176
|
stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
|
|
179
|
-
stopRequested?: boolean;
|
|
180
|
-
interruptionMessage?: string;
|
|
181
|
-
}
|
|
182
|
-
declare function finalizeRunEvents(events: BaseEvent[], options?: FinalizeRunOptions): BaseEvent[];
|
|
183
|
-
|
|
184
|
-
export { AgentRunner, type AgentRunnerConnectRequest, type AgentRunnerIsRunningRequest, type AgentRunnerRunRequest, type AgentRunnerStopRequest, CopilotRuntime, type CopilotRuntimeOptions, InMemoryAgentRunner, VERSION, createCopilotEndpoint, finalizeRunEvents };
|
|
179
|
+
export { AgentRunner, type AgentRunnerConnectRequest, type AgentRunnerIsRunningRequest, type AgentRunnerRunRequest, type AgentRunnerStopRequest, CopilotRuntime, type CopilotRuntimeOptions, InMemoryAgentRunner, VERSION, createCopilotEndpoint };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MaybePromise, NonEmptyRecord } from '@copilotkitnext/shared';
|
|
2
|
+
export { finalizeRunEvents } from '@copilotkitnext/shared';
|
|
2
3
|
import { AbstractAgent, RunAgentInput, BaseEvent } from '@ag-ui/client';
|
|
3
4
|
import { Observable } from 'rxjs';
|
|
4
5
|
import * as hono_hono_base from 'hono/hono-base';
|
|
@@ -175,10 +176,4 @@ declare class InMemoryAgentRunner extends AgentRunner {
|
|
|
175
176
|
stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
|
|
179
|
-
stopRequested?: boolean;
|
|
180
|
-
interruptionMessage?: string;
|
|
181
|
-
}
|
|
182
|
-
declare function finalizeRunEvents(events: BaseEvent[], options?: FinalizeRunOptions): BaseEvent[];
|
|
183
|
-
|
|
184
|
-
export { AgentRunner, type AgentRunnerConnectRequest, type AgentRunnerIsRunningRequest, type AgentRunnerRunRequest, type AgentRunnerStopRequest, CopilotRuntime, type CopilotRuntimeOptions, InMemoryAgentRunner, VERSION, createCopilotEndpoint, finalizeRunEvents };
|
|
179
|
+
export { AgentRunner, type AgentRunnerConnectRequest, type AgentRunnerIsRunningRequest, type AgentRunnerRunRequest, type AgentRunnerStopRequest, CopilotRuntime, type CopilotRuntimeOptions, InMemoryAgentRunner, VERSION, createCopilotEndpoint };
|
package/dist/index.js
CHANGED
|
@@ -25,14 +25,14 @@ __export(index_exports, {
|
|
|
25
25
|
InMemoryAgentRunner: () => InMemoryAgentRunner,
|
|
26
26
|
VERSION: () => VERSION,
|
|
27
27
|
createCopilotEndpoint: () => createCopilotEndpoint,
|
|
28
|
-
finalizeRunEvents: () => finalizeRunEvents
|
|
28
|
+
finalizeRunEvents: () => import_shared4.finalizeRunEvents
|
|
29
29
|
});
|
|
30
30
|
module.exports = __toCommonJS(index_exports);
|
|
31
31
|
|
|
32
32
|
// package.json
|
|
33
33
|
var package_default = {
|
|
34
34
|
name: "@copilotkitnext/runtime",
|
|
35
|
-
version: "0.0.
|
|
35
|
+
version: "0.0.18",
|
|
36
36
|
description: "Server-side runtime package for CopilotKit2",
|
|
37
37
|
main: "dist/index.js",
|
|
38
38
|
types: "dist/index.d.ts",
|
|
@@ -90,130 +90,8 @@ var AgentRunner = class {
|
|
|
90
90
|
|
|
91
91
|
// src/runner/in-memory.ts
|
|
92
92
|
var import_rxjs = require("rxjs");
|
|
93
|
-
var import_client2 = require("@ag-ui/client");
|
|
94
|
-
|
|
95
|
-
// src/runner/finalize-events.ts
|
|
96
|
-
var import_node_crypto = require("crypto");
|
|
97
93
|
var import_client = require("@ag-ui/client");
|
|
98
|
-
var
|
|
99
|
-
var defaultAbruptEndMessage = "Run ended without emitting a terminal event";
|
|
100
|
-
function finalizeRunEvents(events, options = {}) {
|
|
101
|
-
const { stopRequested = false, interruptionMessage } = options;
|
|
102
|
-
const resolvedStopMessage = interruptionMessage ?? defaultStopMessage;
|
|
103
|
-
const resolvedAbruptMessage = interruptionMessage && interruptionMessage !== defaultStopMessage ? interruptionMessage : defaultAbruptEndMessage;
|
|
104
|
-
const appended = [];
|
|
105
|
-
const openMessageIds = /* @__PURE__ */ new Set();
|
|
106
|
-
const openToolCalls = /* @__PURE__ */ new Map();
|
|
107
|
-
for (const event of events) {
|
|
108
|
-
switch (event.type) {
|
|
109
|
-
case import_client.EventType.TEXT_MESSAGE_START: {
|
|
110
|
-
const messageId = event.messageId;
|
|
111
|
-
if (typeof messageId === "string") {
|
|
112
|
-
openMessageIds.add(messageId);
|
|
113
|
-
}
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
case import_client.EventType.TEXT_MESSAGE_END: {
|
|
117
|
-
const messageId = event.messageId;
|
|
118
|
-
if (typeof messageId === "string") {
|
|
119
|
-
openMessageIds.delete(messageId);
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
case import_client.EventType.TOOL_CALL_START: {
|
|
124
|
-
const toolCallId = event.toolCallId;
|
|
125
|
-
if (typeof toolCallId === "string") {
|
|
126
|
-
openToolCalls.set(toolCallId, {
|
|
127
|
-
hasEnd: false,
|
|
128
|
-
hasResult: false
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
case import_client.EventType.TOOL_CALL_END: {
|
|
134
|
-
const toolCallId = event.toolCallId;
|
|
135
|
-
const info = toolCallId ? openToolCalls.get(toolCallId) : void 0;
|
|
136
|
-
if (info) {
|
|
137
|
-
info.hasEnd = true;
|
|
138
|
-
}
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
case import_client.EventType.TOOL_CALL_RESULT: {
|
|
142
|
-
const toolCallId = event.toolCallId;
|
|
143
|
-
const info = toolCallId ? openToolCalls.get(toolCallId) : void 0;
|
|
144
|
-
if (info) {
|
|
145
|
-
info.hasResult = true;
|
|
146
|
-
}
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
default:
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
const hasRunFinished = events.some((event) => event.type === import_client.EventType.RUN_FINISHED);
|
|
154
|
-
const hasRunError = events.some((event) => event.type === import_client.EventType.RUN_ERROR);
|
|
155
|
-
const hasTerminalEvent = hasRunFinished || hasRunError;
|
|
156
|
-
const terminalEventMissing = !hasTerminalEvent;
|
|
157
|
-
for (const messageId of openMessageIds) {
|
|
158
|
-
const endEvent = {
|
|
159
|
-
type: import_client.EventType.TEXT_MESSAGE_END,
|
|
160
|
-
messageId
|
|
161
|
-
};
|
|
162
|
-
events.push(endEvent);
|
|
163
|
-
appended.push(endEvent);
|
|
164
|
-
}
|
|
165
|
-
for (const [toolCallId, info] of openToolCalls) {
|
|
166
|
-
if (!info.hasEnd) {
|
|
167
|
-
const endEvent = {
|
|
168
|
-
type: import_client.EventType.TOOL_CALL_END,
|
|
169
|
-
toolCallId
|
|
170
|
-
};
|
|
171
|
-
events.push(endEvent);
|
|
172
|
-
appended.push(endEvent);
|
|
173
|
-
}
|
|
174
|
-
if (terminalEventMissing && !info.hasResult) {
|
|
175
|
-
const resultEvent = {
|
|
176
|
-
type: import_client.EventType.TOOL_CALL_RESULT,
|
|
177
|
-
toolCallId,
|
|
178
|
-
messageId: `${toolCallId ?? (0, import_node_crypto.randomUUID)()}-result`,
|
|
179
|
-
role: "tool",
|
|
180
|
-
content: JSON.stringify(
|
|
181
|
-
stopRequested ? {
|
|
182
|
-
status: "stopped",
|
|
183
|
-
reason: "stop_requested",
|
|
184
|
-
message: resolvedStopMessage
|
|
185
|
-
} : {
|
|
186
|
-
status: "error",
|
|
187
|
-
reason: "missing_terminal_event",
|
|
188
|
-
message: resolvedAbruptMessage
|
|
189
|
-
}
|
|
190
|
-
)
|
|
191
|
-
};
|
|
192
|
-
events.push(resultEvent);
|
|
193
|
-
appended.push(resultEvent);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
if (terminalEventMissing) {
|
|
197
|
-
if (stopRequested) {
|
|
198
|
-
const finishedEvent = {
|
|
199
|
-
type: import_client.EventType.RUN_FINISHED
|
|
200
|
-
};
|
|
201
|
-
events.push(finishedEvent);
|
|
202
|
-
appended.push(finishedEvent);
|
|
203
|
-
} else {
|
|
204
|
-
const errorEvent = {
|
|
205
|
-
type: import_client.EventType.RUN_ERROR,
|
|
206
|
-
message: resolvedAbruptMessage,
|
|
207
|
-
code: "INCOMPLETE_STREAM"
|
|
208
|
-
};
|
|
209
|
-
events.push(errorEvent);
|
|
210
|
-
appended.push(errorEvent);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return appended;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// src/runner/in-memory.ts
|
|
94
|
+
var import_shared = require("@copilotkitnext/shared");
|
|
217
95
|
var InMemoryEventStore = class {
|
|
218
96
|
constructor(threadId) {
|
|
219
97
|
this.threadId = threadId;
|
|
@@ -260,7 +138,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
260
138
|
if ("messageId" in event && typeof event.messageId === "string") {
|
|
261
139
|
historicMessageIds.add(event.messageId);
|
|
262
140
|
}
|
|
263
|
-
if (event.type ===
|
|
141
|
+
if (event.type === import_client.EventType.RUN_STARTED) {
|
|
264
142
|
const runStarted = event;
|
|
265
143
|
const messages = runStarted.input?.messages ?? [];
|
|
266
144
|
for (const message of messages) {
|
|
@@ -281,7 +159,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
281
159
|
await request.agent.runAgent(request.input, {
|
|
282
160
|
onEvent: ({ event }) => {
|
|
283
161
|
let processedEvent = event;
|
|
284
|
-
if (event.type ===
|
|
162
|
+
if (event.type === import_client.EventType.RUN_STARTED) {
|
|
285
163
|
const runStartedEvent = event;
|
|
286
164
|
if (!runStartedEvent.input) {
|
|
287
165
|
const sanitizedMessages = request.input.messages ? request.input.messages.filter(
|
|
@@ -316,7 +194,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
316
194
|
}
|
|
317
195
|
}
|
|
318
196
|
});
|
|
319
|
-
const appendedEvents = finalizeRunEvents(currentRunEvents, {
|
|
197
|
+
const appendedEvents = (0, import_shared.finalizeRunEvents)(currentRunEvents, {
|
|
320
198
|
stopRequested: store.stopRequested
|
|
321
199
|
});
|
|
322
200
|
for (const event of appendedEvents) {
|
|
@@ -324,7 +202,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
324
202
|
nextSubject.next(event);
|
|
325
203
|
}
|
|
326
204
|
if (store.currentRunId) {
|
|
327
|
-
const compactedEvents = (0,
|
|
205
|
+
const compactedEvents = (0, import_client.compactEvents)(currentRunEvents);
|
|
328
206
|
store.historicRuns.push({
|
|
329
207
|
threadId: request.threadId,
|
|
330
208
|
runId: store.currentRunId,
|
|
@@ -342,7 +220,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
342
220
|
runSubject.complete();
|
|
343
221
|
nextSubject.complete();
|
|
344
222
|
} catch {
|
|
345
|
-
const appendedEvents = finalizeRunEvents(currentRunEvents, {
|
|
223
|
+
const appendedEvents = (0, import_shared.finalizeRunEvents)(currentRunEvents, {
|
|
346
224
|
stopRequested: store.stopRequested
|
|
347
225
|
});
|
|
348
226
|
for (const event of appendedEvents) {
|
|
@@ -350,7 +228,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
350
228
|
nextSubject.next(event);
|
|
351
229
|
}
|
|
352
230
|
if (store.currentRunId && currentRunEvents.length > 0) {
|
|
353
|
-
const compactedEvents = (0,
|
|
231
|
+
const compactedEvents = (0, import_client.compactEvents)(currentRunEvents);
|
|
354
232
|
store.historicRuns.push({
|
|
355
233
|
threadId: request.threadId,
|
|
356
234
|
runId: store.currentRunId,
|
|
@@ -391,7 +269,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
391
269
|
for (const run of store.historicRuns) {
|
|
392
270
|
allHistoricEvents.push(...run.events);
|
|
393
271
|
}
|
|
394
|
-
const compactedEvents = (0,
|
|
272
|
+
const compactedEvents = (0, import_client.compactEvents)(allHistoricEvents);
|
|
395
273
|
const emittedMessageIds = /* @__PURE__ */ new Set();
|
|
396
274
|
for (const event of compactedEvents) {
|
|
397
275
|
connectionSubject.next(event);
|
|
@@ -475,7 +353,7 @@ var import_hono = require("hono");
|
|
|
475
353
|
var import_cors = require("hono/cors");
|
|
476
354
|
|
|
477
355
|
// src/handlers/handle-run.ts
|
|
478
|
-
var
|
|
356
|
+
var import_client2 = require("@ag-ui/client");
|
|
479
357
|
var import_encoder = require("@ag-ui/encoder");
|
|
480
358
|
async function handleRunAgent({
|
|
481
359
|
runtime,
|
|
@@ -522,7 +400,7 @@ async function handleRunAgent({
|
|
|
522
400
|
let input;
|
|
523
401
|
try {
|
|
524
402
|
const requestBody = await request.json();
|
|
525
|
-
input =
|
|
403
|
+
input = import_client2.RunAgentInputSchema.parse(requestBody);
|
|
526
404
|
} catch {
|
|
527
405
|
return new Response(
|
|
528
406
|
JSON.stringify({
|
|
@@ -760,10 +638,10 @@ async function handleTranscribe({
|
|
|
760
638
|
}
|
|
761
639
|
|
|
762
640
|
// src/endpoint.ts
|
|
763
|
-
var
|
|
641
|
+
var import_shared3 = require("@copilotkitnext/shared");
|
|
764
642
|
|
|
765
643
|
// src/middleware.ts
|
|
766
|
-
var
|
|
644
|
+
var import_shared2 = require("@copilotkitnext/shared");
|
|
767
645
|
async function callBeforeRequestMiddleware({
|
|
768
646
|
runtime,
|
|
769
647
|
request,
|
|
@@ -774,7 +652,7 @@ async function callBeforeRequestMiddleware({
|
|
|
774
652
|
if (typeof mw === "function") {
|
|
775
653
|
return mw({ runtime, request, path });
|
|
776
654
|
}
|
|
777
|
-
|
|
655
|
+
import_shared2.logger.warn({ mw }, "Unsupported beforeRequestMiddleware value \u2013 skipped");
|
|
778
656
|
return;
|
|
779
657
|
}
|
|
780
658
|
async function callAfterRequestMiddleware({
|
|
@@ -787,11 +665,11 @@ async function callAfterRequestMiddleware({
|
|
|
787
665
|
if (typeof mw === "function") {
|
|
788
666
|
return mw({ runtime, response, path });
|
|
789
667
|
}
|
|
790
|
-
|
|
668
|
+
import_shared2.logger.warn({ mw }, "Unsupported afterRequestMiddleware value \u2013 skipped");
|
|
791
669
|
}
|
|
792
670
|
|
|
793
671
|
// src/handlers/handle-connect.ts
|
|
794
|
-
var
|
|
672
|
+
var import_client3 = require("@ag-ui/client");
|
|
795
673
|
var import_encoder2 = require("@ag-ui/encoder");
|
|
796
674
|
async function handleConnectAgent({
|
|
797
675
|
runtime,
|
|
@@ -820,7 +698,7 @@ async function handleConnectAgent({
|
|
|
820
698
|
let input;
|
|
821
699
|
try {
|
|
822
700
|
const requestBody = await request.json();
|
|
823
|
-
input =
|
|
701
|
+
input = import_client3.RunAgentInputSchema.parse(requestBody);
|
|
824
702
|
} catch {
|
|
825
703
|
return new Response(
|
|
826
704
|
JSON.stringify({
|
|
@@ -915,7 +793,7 @@ async function handleConnectAgent({
|
|
|
915
793
|
}
|
|
916
794
|
|
|
917
795
|
// src/handlers/handle-stop.ts
|
|
918
|
-
var
|
|
796
|
+
var import_client4 = require("@ag-ui/client");
|
|
919
797
|
async function handleStopAgent({
|
|
920
798
|
runtime,
|
|
921
799
|
request,
|
|
@@ -953,7 +831,7 @@ async function handleStopAgent({
|
|
|
953
831
|
JSON.stringify({
|
|
954
832
|
stopped: true,
|
|
955
833
|
interrupt: {
|
|
956
|
-
type:
|
|
834
|
+
type: import_client4.EventType.RUN_ERROR,
|
|
957
835
|
message: "Run stopped by user",
|
|
958
836
|
code: "STOPPED"
|
|
959
837
|
}
|
|
@@ -1001,7 +879,7 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1001
879
|
c.set("modifiedRequest", maybeModifiedRequest);
|
|
1002
880
|
}
|
|
1003
881
|
} catch (error) {
|
|
1004
|
-
|
|
882
|
+
import_shared3.logger.error({ err: error, url: request.url, path }, "Error running before request middleware");
|
|
1005
883
|
if (error instanceof Response) {
|
|
1006
884
|
return error;
|
|
1007
885
|
}
|
|
@@ -1017,7 +895,7 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1017
895
|
response,
|
|
1018
896
|
path
|
|
1019
897
|
}).catch((error) => {
|
|
1020
|
-
|
|
898
|
+
import_shared3.logger.error({ err: error, url: c.req.url, path }, "Error running after request middleware");
|
|
1021
899
|
});
|
|
1022
900
|
}).post("/agent/:agentId/run", async (c) => {
|
|
1023
901
|
const agentId = c.req.param("agentId");
|
|
@@ -1029,7 +907,7 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1029
907
|
agentId
|
|
1030
908
|
});
|
|
1031
909
|
} catch (error) {
|
|
1032
|
-
|
|
910
|
+
import_shared3.logger.error({ err: error, url: request.url, path: c.req.path }, "Error running request handler");
|
|
1033
911
|
throw error;
|
|
1034
912
|
}
|
|
1035
913
|
}).post("/agent/:agentId/connect", async (c) => {
|
|
@@ -1042,7 +920,7 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1042
920
|
agentId
|
|
1043
921
|
});
|
|
1044
922
|
} catch (error) {
|
|
1045
|
-
|
|
923
|
+
import_shared3.logger.error({ err: error, url: request.url, path: c.req.path }, "Error running request handler");
|
|
1046
924
|
throw error;
|
|
1047
925
|
}
|
|
1048
926
|
}).post("/agent/:agentId/stop/:threadId", async (c) => {
|
|
@@ -1057,7 +935,7 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1057
935
|
threadId
|
|
1058
936
|
});
|
|
1059
937
|
} catch (error) {
|
|
1060
|
-
|
|
938
|
+
import_shared3.logger.error({ err: error, url: request.url, path: c.req.path }, "Error running request handler");
|
|
1061
939
|
throw error;
|
|
1062
940
|
}
|
|
1063
941
|
}).get("/info", async (c) => {
|
|
@@ -1068,7 +946,7 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1068
946
|
request
|
|
1069
947
|
});
|
|
1070
948
|
} catch (error) {
|
|
1071
|
-
|
|
949
|
+
import_shared3.logger.error({ err: error, url: request.url, path: c.req.path }, "Error running request handler");
|
|
1072
950
|
throw error;
|
|
1073
951
|
}
|
|
1074
952
|
}).post("/transcribe", async (c) => {
|
|
@@ -1079,13 +957,16 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1079
957
|
request
|
|
1080
958
|
});
|
|
1081
959
|
} catch (error) {
|
|
1082
|
-
|
|
960
|
+
import_shared3.logger.error({ err: error, url: request.url, path: c.req.path }, "Error running request handler");
|
|
1083
961
|
throw error;
|
|
1084
962
|
}
|
|
1085
963
|
}).notFound((c) => {
|
|
1086
964
|
return c.json({ error: "Not found" }, 404);
|
|
1087
965
|
});
|
|
1088
966
|
}
|
|
967
|
+
|
|
968
|
+
// src/runner/index.ts
|
|
969
|
+
var import_shared4 = require("@copilotkitnext/shared");
|
|
1089
970
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1090
971
|
0 && (module.exports = {
|
|
1091
972
|
AgentRunner,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../package.json","../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../src/runner/finalize-events.ts","../src/runtime.ts","../src/endpoint.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"],"sourcesContent":["export * from \"./runtime\";\nexport * from \"./endpoint\";\n\n// Export agent runners and base types\nexport * from \"./runner\";\n","{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.17\",\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 },\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/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.40-alpha.6\",\n \"@ag-ui/core\": \"0.0.40-alpha.6\",\n \"@ag-ui/encoder\": \"0.0.40-alpha.6\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"hono\": \"^4.6.13\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {},\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 \"./finalize-events\";\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 { randomUUID } from \"node:crypto\";\nimport {\n BaseEvent,\n EventType,\n RunErrorEvent,\n} from \"@ag-ui/client\";\n\ninterface FinalizeRunOptions {\n stopRequested?: boolean;\n interruptionMessage?: string;\n}\n\nconst defaultStopMessage = \"Run stopped by user\";\nconst defaultAbruptEndMessage = \"Run ended without emitting a terminal event\";\n\nexport function finalizeRunEvents(\n events: BaseEvent[],\n options: FinalizeRunOptions = {},\n): BaseEvent[] {\n const { stopRequested = false, interruptionMessage } = options;\n\n const resolvedStopMessage = interruptionMessage ?? defaultStopMessage;\n const resolvedAbruptMessage =\n interruptionMessage && interruptionMessage !== defaultStopMessage\n ? interruptionMessage\n : defaultAbruptEndMessage;\n\n const appended: BaseEvent[] = [];\n\n const openMessageIds = new Set<string>();\n const openToolCalls = new Map<\n string,\n {\n hasEnd: boolean;\n hasResult: boolean;\n }\n >();\n\n for (const event of events) {\n switch (event.type) {\n case EventType.TEXT_MESSAGE_START: {\n const messageId = (event as { messageId?: string }).messageId;\n if (typeof messageId === \"string\") {\n openMessageIds.add(messageId);\n }\n break;\n }\n case EventType.TEXT_MESSAGE_END: {\n const messageId = (event as { messageId?: string }).messageId;\n if (typeof messageId === \"string\") {\n openMessageIds.delete(messageId);\n }\n break;\n }\n case EventType.TOOL_CALL_START: {\n const toolCallId = (event as { toolCallId?: string }).toolCallId;\n if (typeof toolCallId === \"string\") {\n openToolCalls.set(toolCallId, {\n hasEnd: false,\n hasResult: false,\n });\n }\n break;\n }\n case EventType.TOOL_CALL_END: {\n const toolCallId = (event as { toolCallId?: string }).toolCallId;\n const info = toolCallId ? openToolCalls.get(toolCallId) : undefined;\n if (info) {\n info.hasEnd = true;\n }\n break;\n }\n case EventType.TOOL_CALL_RESULT: {\n const toolCallId = (event as { toolCallId?: string }).toolCallId;\n const info = toolCallId ? openToolCalls.get(toolCallId) : undefined;\n if (info) {\n info.hasResult = true;\n }\n break;\n }\n default:\n break;\n }\n }\n\n const hasRunFinished = events.some((event) => event.type === EventType.RUN_FINISHED);\n const hasRunError = events.some((event) => event.type === EventType.RUN_ERROR);\n const hasTerminalEvent = hasRunFinished || hasRunError;\n const terminalEventMissing = !hasTerminalEvent;\n\n for (const messageId of openMessageIds) {\n const endEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId,\n } as BaseEvent;\n events.push(endEvent);\n appended.push(endEvent);\n }\n\n for (const [toolCallId, info] of openToolCalls) {\n if (!info.hasEnd) {\n const endEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId,\n } as BaseEvent;\n events.push(endEvent);\n appended.push(endEvent);\n }\n\n if (terminalEventMissing && !info.hasResult) {\n const resultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId,\n messageId: `${toolCallId ?? randomUUID()}-result`,\n role: \"tool\",\n content: JSON.stringify(\n stopRequested\n ? {\n status: \"stopped\",\n reason: \"stop_requested\",\n message: resolvedStopMessage,\n }\n : {\n status: \"error\",\n reason: \"missing_terminal_event\",\n message: resolvedAbruptMessage,\n },\n ),\n } as BaseEvent;\n events.push(resultEvent);\n appended.push(resultEvent);\n }\n }\n\n if (terminalEventMissing) {\n if (stopRequested) {\n const finishedEvent = {\n type: EventType.RUN_FINISHED,\n } as BaseEvent;\n events.push(finishedEvent);\n appended.push(finishedEvent);\n } else {\n const errorEvent: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: resolvedAbruptMessage,\n code: \"INCOMPLETE_STREAM\",\n };\n events.push(errorEvent);\n appended.push(errorEvent);\n }\n }\n\n return appended;\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 { 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","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"],"mappings":"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","names":["import_client","import_client","import_shared","import_client","import_encoder","import_client"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../package.json","../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../src/runtime.ts","../src/endpoint.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/runner/index.ts"],"sourcesContent":["export * from \"./runtime\";\nexport * from \"./endpoint\";\n\n// Export agent runners and base types\nexport * from \"./runner\";\n","{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.18\",\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 },\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/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.40-alpha.6\",\n \"@ag-ui/core\": \"0.0.40-alpha.6\",\n \"@ag-ui/encoder\": \"0.0.40-alpha.6\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"hono\": \"^4.6.13\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {},\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 { 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","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","export * from \"./agent-runner\";\nexport * from \"./in-memory\";\nexport { finalizeRunEvents } from \"@copilotkitnext/shared\";\n"],"mappings":"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","names":["import_client","import_shared","import_shared","import_client","import_encoder","import_client","import_shared"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// package.json
|
|
2
2
|
var package_default = {
|
|
3
3
|
name: "@copilotkitnext/runtime",
|
|
4
|
-
version: "0.0.
|
|
4
|
+
version: "0.0.18",
|
|
5
5
|
description: "Server-side runtime package for CopilotKit2",
|
|
6
6
|
main: "dist/index.js",
|
|
7
7
|
types: "dist/index.d.ts",
|
|
@@ -60,134 +60,10 @@ var AgentRunner = class {
|
|
|
60
60
|
// src/runner/in-memory.ts
|
|
61
61
|
import { ReplaySubject } from "rxjs";
|
|
62
62
|
import {
|
|
63
|
-
EventType
|
|
63
|
+
EventType,
|
|
64
64
|
compactEvents
|
|
65
65
|
} from "@ag-ui/client";
|
|
66
|
-
|
|
67
|
-
// src/runner/finalize-events.ts
|
|
68
|
-
import { randomUUID } from "crypto";
|
|
69
|
-
import {
|
|
70
|
-
EventType
|
|
71
|
-
} from "@ag-ui/client";
|
|
72
|
-
var defaultStopMessage = "Run stopped by user";
|
|
73
|
-
var defaultAbruptEndMessage = "Run ended without emitting a terminal event";
|
|
74
|
-
function finalizeRunEvents(events, options = {}) {
|
|
75
|
-
const { stopRequested = false, interruptionMessage } = options;
|
|
76
|
-
const resolvedStopMessage = interruptionMessage ?? defaultStopMessage;
|
|
77
|
-
const resolvedAbruptMessage = interruptionMessage && interruptionMessage !== defaultStopMessage ? interruptionMessage : defaultAbruptEndMessage;
|
|
78
|
-
const appended = [];
|
|
79
|
-
const openMessageIds = /* @__PURE__ */ new Set();
|
|
80
|
-
const openToolCalls = /* @__PURE__ */ new Map();
|
|
81
|
-
for (const event of events) {
|
|
82
|
-
switch (event.type) {
|
|
83
|
-
case EventType.TEXT_MESSAGE_START: {
|
|
84
|
-
const messageId = event.messageId;
|
|
85
|
-
if (typeof messageId === "string") {
|
|
86
|
-
openMessageIds.add(messageId);
|
|
87
|
-
}
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
case EventType.TEXT_MESSAGE_END: {
|
|
91
|
-
const messageId = event.messageId;
|
|
92
|
-
if (typeof messageId === "string") {
|
|
93
|
-
openMessageIds.delete(messageId);
|
|
94
|
-
}
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
case EventType.TOOL_CALL_START: {
|
|
98
|
-
const toolCallId = event.toolCallId;
|
|
99
|
-
if (typeof toolCallId === "string") {
|
|
100
|
-
openToolCalls.set(toolCallId, {
|
|
101
|
-
hasEnd: false,
|
|
102
|
-
hasResult: false
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
case EventType.TOOL_CALL_END: {
|
|
108
|
-
const toolCallId = event.toolCallId;
|
|
109
|
-
const info = toolCallId ? openToolCalls.get(toolCallId) : void 0;
|
|
110
|
-
if (info) {
|
|
111
|
-
info.hasEnd = true;
|
|
112
|
-
}
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
case EventType.TOOL_CALL_RESULT: {
|
|
116
|
-
const toolCallId = event.toolCallId;
|
|
117
|
-
const info = toolCallId ? openToolCalls.get(toolCallId) : void 0;
|
|
118
|
-
if (info) {
|
|
119
|
-
info.hasResult = true;
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
default:
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
const hasRunFinished = events.some((event) => event.type === EventType.RUN_FINISHED);
|
|
128
|
-
const hasRunError = events.some((event) => event.type === EventType.RUN_ERROR);
|
|
129
|
-
const hasTerminalEvent = hasRunFinished || hasRunError;
|
|
130
|
-
const terminalEventMissing = !hasTerminalEvent;
|
|
131
|
-
for (const messageId of openMessageIds) {
|
|
132
|
-
const endEvent = {
|
|
133
|
-
type: EventType.TEXT_MESSAGE_END,
|
|
134
|
-
messageId
|
|
135
|
-
};
|
|
136
|
-
events.push(endEvent);
|
|
137
|
-
appended.push(endEvent);
|
|
138
|
-
}
|
|
139
|
-
for (const [toolCallId, info] of openToolCalls) {
|
|
140
|
-
if (!info.hasEnd) {
|
|
141
|
-
const endEvent = {
|
|
142
|
-
type: EventType.TOOL_CALL_END,
|
|
143
|
-
toolCallId
|
|
144
|
-
};
|
|
145
|
-
events.push(endEvent);
|
|
146
|
-
appended.push(endEvent);
|
|
147
|
-
}
|
|
148
|
-
if (terminalEventMissing && !info.hasResult) {
|
|
149
|
-
const resultEvent = {
|
|
150
|
-
type: EventType.TOOL_CALL_RESULT,
|
|
151
|
-
toolCallId,
|
|
152
|
-
messageId: `${toolCallId ?? randomUUID()}-result`,
|
|
153
|
-
role: "tool",
|
|
154
|
-
content: JSON.stringify(
|
|
155
|
-
stopRequested ? {
|
|
156
|
-
status: "stopped",
|
|
157
|
-
reason: "stop_requested",
|
|
158
|
-
message: resolvedStopMessage
|
|
159
|
-
} : {
|
|
160
|
-
status: "error",
|
|
161
|
-
reason: "missing_terminal_event",
|
|
162
|
-
message: resolvedAbruptMessage
|
|
163
|
-
}
|
|
164
|
-
)
|
|
165
|
-
};
|
|
166
|
-
events.push(resultEvent);
|
|
167
|
-
appended.push(resultEvent);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (terminalEventMissing) {
|
|
171
|
-
if (stopRequested) {
|
|
172
|
-
const finishedEvent = {
|
|
173
|
-
type: EventType.RUN_FINISHED
|
|
174
|
-
};
|
|
175
|
-
events.push(finishedEvent);
|
|
176
|
-
appended.push(finishedEvent);
|
|
177
|
-
} else {
|
|
178
|
-
const errorEvent = {
|
|
179
|
-
type: EventType.RUN_ERROR,
|
|
180
|
-
message: resolvedAbruptMessage,
|
|
181
|
-
code: "INCOMPLETE_STREAM"
|
|
182
|
-
};
|
|
183
|
-
events.push(errorEvent);
|
|
184
|
-
appended.push(errorEvent);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return appended;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// src/runner/in-memory.ts
|
|
66
|
+
import { finalizeRunEvents } from "@copilotkitnext/shared";
|
|
191
67
|
var InMemoryEventStore = class {
|
|
192
68
|
constructor(threadId) {
|
|
193
69
|
this.threadId = threadId;
|
|
@@ -234,7 +110,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
234
110
|
if ("messageId" in event && typeof event.messageId === "string") {
|
|
235
111
|
historicMessageIds.add(event.messageId);
|
|
236
112
|
}
|
|
237
|
-
if (event.type ===
|
|
113
|
+
if (event.type === EventType.RUN_STARTED) {
|
|
238
114
|
const runStarted = event;
|
|
239
115
|
const messages = runStarted.input?.messages ?? [];
|
|
240
116
|
for (const message of messages) {
|
|
@@ -255,7 +131,7 @@ var InMemoryAgentRunner = class extends AgentRunner {
|
|
|
255
131
|
await request.agent.runAgent(request.input, {
|
|
256
132
|
onEvent: ({ event }) => {
|
|
257
133
|
let processedEvent = event;
|
|
258
|
-
if (event.type ===
|
|
134
|
+
if (event.type === EventType.RUN_STARTED) {
|
|
259
135
|
const runStartedEvent = event;
|
|
260
136
|
if (!runStartedEvent.input) {
|
|
261
137
|
const sanitizedMessages = request.input.messages ? request.input.messages.filter(
|
|
@@ -891,7 +767,7 @@ async function handleConnectAgent({
|
|
|
891
767
|
}
|
|
892
768
|
|
|
893
769
|
// src/handlers/handle-stop.ts
|
|
894
|
-
import { EventType as
|
|
770
|
+
import { EventType as EventType2 } from "@ag-ui/client";
|
|
895
771
|
async function handleStopAgent({
|
|
896
772
|
runtime,
|
|
897
773
|
request,
|
|
@@ -929,7 +805,7 @@ async function handleStopAgent({
|
|
|
929
805
|
JSON.stringify({
|
|
930
806
|
stopped: true,
|
|
931
807
|
interrupt: {
|
|
932
|
-
type:
|
|
808
|
+
type: EventType2.RUN_ERROR,
|
|
933
809
|
message: "Run stopped by user",
|
|
934
810
|
code: "STOPPED"
|
|
935
811
|
}
|
|
@@ -1062,12 +938,15 @@ function createCopilotEndpoint({ runtime, basePath }) {
|
|
|
1062
938
|
return c.json({ error: "Not found" }, 404);
|
|
1063
939
|
});
|
|
1064
940
|
}
|
|
941
|
+
|
|
942
|
+
// src/runner/index.ts
|
|
943
|
+
import { finalizeRunEvents as finalizeRunEvents2 } from "@copilotkitnext/shared";
|
|
1065
944
|
export {
|
|
1066
945
|
AgentRunner,
|
|
1067
946
|
CopilotRuntime,
|
|
1068
947
|
InMemoryAgentRunner,
|
|
1069
948
|
VERSION,
|
|
1070
949
|
createCopilotEndpoint,
|
|
1071
|
-
finalizeRunEvents
|
|
950
|
+
finalizeRunEvents2 as finalizeRunEvents
|
|
1072
951
|
};
|
|
1073
952
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../src/runner/finalize-events.ts","../src/runtime.ts","../src/endpoint.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"],"sourcesContent":["{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.17\",\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 },\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/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.40-alpha.6\",\n \"@ag-ui/core\": \"0.0.40-alpha.6\",\n \"@ag-ui/encoder\": \"0.0.40-alpha.6\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"hono\": \"^4.6.13\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {},\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 \"./finalize-events\";\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 { randomUUID } from \"node:crypto\";\nimport {\n BaseEvent,\n EventType,\n RunErrorEvent,\n} from \"@ag-ui/client\";\n\ninterface FinalizeRunOptions {\n stopRequested?: boolean;\n interruptionMessage?: string;\n}\n\nconst defaultStopMessage = \"Run stopped by user\";\nconst defaultAbruptEndMessage = \"Run ended without emitting a terminal event\";\n\nexport function finalizeRunEvents(\n events: BaseEvent[],\n options: FinalizeRunOptions = {},\n): BaseEvent[] {\n const { stopRequested = false, interruptionMessage } = options;\n\n const resolvedStopMessage = interruptionMessage ?? defaultStopMessage;\n const resolvedAbruptMessage =\n interruptionMessage && interruptionMessage !== defaultStopMessage\n ? interruptionMessage\n : defaultAbruptEndMessage;\n\n const appended: BaseEvent[] = [];\n\n const openMessageIds = new Set<string>();\n const openToolCalls = new Map<\n string,\n {\n hasEnd: boolean;\n hasResult: boolean;\n }\n >();\n\n for (const event of events) {\n switch (event.type) {\n case EventType.TEXT_MESSAGE_START: {\n const messageId = (event as { messageId?: string }).messageId;\n if (typeof messageId === \"string\") {\n openMessageIds.add(messageId);\n }\n break;\n }\n case EventType.TEXT_MESSAGE_END: {\n const messageId = (event as { messageId?: string }).messageId;\n if (typeof messageId === \"string\") {\n openMessageIds.delete(messageId);\n }\n break;\n }\n case EventType.TOOL_CALL_START: {\n const toolCallId = (event as { toolCallId?: string }).toolCallId;\n if (typeof toolCallId === \"string\") {\n openToolCalls.set(toolCallId, {\n hasEnd: false,\n hasResult: false,\n });\n }\n break;\n }\n case EventType.TOOL_CALL_END: {\n const toolCallId = (event as { toolCallId?: string }).toolCallId;\n const info = toolCallId ? openToolCalls.get(toolCallId) : undefined;\n if (info) {\n info.hasEnd = true;\n }\n break;\n }\n case EventType.TOOL_CALL_RESULT: {\n const toolCallId = (event as { toolCallId?: string }).toolCallId;\n const info = toolCallId ? openToolCalls.get(toolCallId) : undefined;\n if (info) {\n info.hasResult = true;\n }\n break;\n }\n default:\n break;\n }\n }\n\n const hasRunFinished = events.some((event) => event.type === EventType.RUN_FINISHED);\n const hasRunError = events.some((event) => event.type === EventType.RUN_ERROR);\n const hasTerminalEvent = hasRunFinished || hasRunError;\n const terminalEventMissing = !hasTerminalEvent;\n\n for (const messageId of openMessageIds) {\n const endEvent = {\n type: EventType.TEXT_MESSAGE_END,\n messageId,\n } as BaseEvent;\n events.push(endEvent);\n appended.push(endEvent);\n }\n\n for (const [toolCallId, info] of openToolCalls) {\n if (!info.hasEnd) {\n const endEvent = {\n type: EventType.TOOL_CALL_END,\n toolCallId,\n } as BaseEvent;\n events.push(endEvent);\n appended.push(endEvent);\n }\n\n if (terminalEventMissing && !info.hasResult) {\n const resultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId,\n messageId: `${toolCallId ?? randomUUID()}-result`,\n role: \"tool\",\n content: JSON.stringify(\n stopRequested\n ? {\n status: \"stopped\",\n reason: \"stop_requested\",\n message: resolvedStopMessage,\n }\n : {\n status: \"error\",\n reason: \"missing_terminal_event\",\n message: resolvedAbruptMessage,\n },\n ),\n } as BaseEvent;\n events.push(resultEvent);\n appended.push(resultEvent);\n }\n }\n\n if (terminalEventMissing) {\n if (stopRequested) {\n const finishedEvent = {\n type: EventType.RUN_FINISHED,\n } as BaseEvent;\n events.push(finishedEvent);\n appended.push(finishedEvent);\n } else {\n const errorEvent: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: resolvedAbruptMessage,\n code: \"INCOMPLETE_STREAM\",\n };\n events.push(errorEvent);\n appended.push(errorEvent);\n }\n }\n\n return appended;\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 { 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","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"],"mappings":"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","names":["EventType","EventType","logger","RunAgentInputSchema","EventEncoder","EventType","logger"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/runner/agent-runner.ts","../src/runner/in-memory.ts","../src/runtime.ts","../src/endpoint.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/runner/index.ts"],"sourcesContent":["{\n \"name\": \"@copilotkitnext/runtime\",\n \"version\": \"0.0.18\",\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 },\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/node\": \"^22.15.3\",\n \"eslint\": \"^9.30.0\",\n \"openai\": \"^5.9.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"5.8.2\",\n \"vitest\": \"^3.0.5\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"0.0.40-alpha.6\",\n \"@ag-ui/core\": \"0.0.40-alpha.6\",\n \"@ag-ui/encoder\": \"0.0.40-alpha.6\",\n \"@copilotkitnext/shared\": \"workspace:*\",\n \"hono\": \"^4.6.13\",\n \"rxjs\": \"7.8.1\"\n },\n \"peerDependencies\": {\n \"openai\": \"^5.9.0\"\n },\n \"peerDependenciesMeta\": {},\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 { 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","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","export * from \"./agent-runner\";\nexport * from \"./in-memory\";\nexport { finalizeRunEvents } from \"@copilotkitnext/shared\";\n"],"mappings":"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","names":["logger","RunAgentInputSchema","EventEncoder","EventType","logger","finalizeRunEvents"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@copilotkitnext/runtime",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"description": "Server-side runtime package for CopilotKit2",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"typescript": "5.8.2",
|
|
23
23
|
"vitest": "^3.0.5",
|
|
24
|
-
"@copilotkitnext/
|
|
25
|
-
"@copilotkitnext/
|
|
24
|
+
"@copilotkitnext/typescript-config": "0.0.0",
|
|
25
|
+
"@copilotkitnext/eslint-config": "0.0.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@ag-ui/client": "0.0.40-alpha.6",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@ag-ui/encoder": "0.0.40-alpha.6",
|
|
31
31
|
"hono": "^4.6.13",
|
|
32
32
|
"rxjs": "7.8.1",
|
|
33
|
-
"@copilotkitnext/shared": "0.0.
|
|
33
|
+
"@copilotkitnext/shared": "0.0.18"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"openai": "^5.9.0"
|