@copilotkitnext/runtime 1.51.4-next.7 → 1.51.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-O6YC5CJ6.mjs → chunk-5GKH3W25.mjs} +20 -8
- package/dist/chunk-5GKH3W25.mjs.map +1 -0
- package/dist/express.d.mts +1 -1
- package/dist/express.d.ts +1 -1
- package/dist/express.js +148 -57
- package/dist/express.js.map +1 -1
- package/dist/express.mjs +130 -51
- package/dist/express.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +107 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +89 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -6
- package/.cursor/rules/runtime.always.mdc +0 -9
- package/dist/chunk-O6YC5CJ6.mjs.map +0 -1
package/dist/express.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
handleStopAgent,
|
|
10
10
|
handleTranscribe,
|
|
11
11
|
parseMethodCall
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-5GKH3W25.mjs";
|
|
13
13
|
|
|
14
14
|
// src/endpoints/express.ts
|
|
15
15
|
import express from "express";
|
|
@@ -157,33 +157,53 @@ function synthesizeBody(body) {
|
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
// src/endpoints/express.ts
|
|
160
|
-
function createCopilotEndpointExpress({
|
|
160
|
+
function createCopilotEndpointExpress({
|
|
161
|
+
runtime,
|
|
162
|
+
basePath
|
|
163
|
+
}) {
|
|
161
164
|
const router = express.Router();
|
|
162
165
|
const normalizedBase = normalizeBasePath(basePath);
|
|
163
|
-
router.use(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
router.post(
|
|
185
|
-
|
|
186
|
-
|
|
166
|
+
router.use(
|
|
167
|
+
cors({
|
|
168
|
+
origin: "*",
|
|
169
|
+
methods: ["GET", "HEAD", "PUT", "POST", "DELETE", "PATCH", "OPTIONS"],
|
|
170
|
+
allowedHeaders: ["*"]
|
|
171
|
+
})
|
|
172
|
+
);
|
|
173
|
+
router.post(
|
|
174
|
+
joinPath(normalizedBase, "/agent/:agentId/run"),
|
|
175
|
+
createRouteHandler(runtime, async ({ request, req }) => {
|
|
176
|
+
const agentId = req.params.agentId;
|
|
177
|
+
return handleRunAgent({ runtime, request, agentId });
|
|
178
|
+
})
|
|
179
|
+
);
|
|
180
|
+
router.post(
|
|
181
|
+
joinPath(normalizedBase, "/agent/:agentId/connect"),
|
|
182
|
+
createRouteHandler(runtime, async ({ request, req }) => {
|
|
183
|
+
const agentId = req.params.agentId;
|
|
184
|
+
return handleConnectAgent({ runtime, request, agentId });
|
|
185
|
+
})
|
|
186
|
+
);
|
|
187
|
+
router.post(
|
|
188
|
+
joinPath(normalizedBase, "/agent/:agentId/stop/:threadId"),
|
|
189
|
+
createRouteHandler(runtime, async ({ request, req }) => {
|
|
190
|
+
const agentId = req.params.agentId;
|
|
191
|
+
const threadId = req.params.threadId;
|
|
192
|
+
return handleStopAgent({ runtime, request, agentId, threadId });
|
|
193
|
+
})
|
|
194
|
+
);
|
|
195
|
+
router.get(
|
|
196
|
+
joinPath(normalizedBase, "/info"),
|
|
197
|
+
createRouteHandler(runtime, async ({ request }) => {
|
|
198
|
+
return handleGetRuntimeInfo({ runtime, request });
|
|
199
|
+
})
|
|
200
|
+
);
|
|
201
|
+
router.post(
|
|
202
|
+
joinPath(normalizedBase, "/transcribe"),
|
|
203
|
+
createRouteHandler(runtime, async ({ request }) => {
|
|
204
|
+
return handleTranscribe({ runtime, request });
|
|
205
|
+
})
|
|
206
|
+
);
|
|
187
207
|
router.use(joinPath(normalizedBase, "*"), (req, res) => {
|
|
188
208
|
res.status(404).json({ error: "Not found" });
|
|
189
209
|
});
|
|
@@ -194,12 +214,19 @@ function createRouteHandler(runtime, factory) {
|
|
|
194
214
|
const path = req.originalUrl ?? req.path;
|
|
195
215
|
let request = createFetchRequestFromExpress(req);
|
|
196
216
|
try {
|
|
197
|
-
const maybeModifiedRequest = await callBeforeRequestMiddleware({
|
|
217
|
+
const maybeModifiedRequest = await callBeforeRequestMiddleware({
|
|
218
|
+
runtime,
|
|
219
|
+
request,
|
|
220
|
+
path
|
|
221
|
+
});
|
|
198
222
|
if (maybeModifiedRequest) {
|
|
199
223
|
request = maybeModifiedRequest;
|
|
200
224
|
}
|
|
201
225
|
} catch (error) {
|
|
202
|
-
logger2.error(
|
|
226
|
+
logger2.error(
|
|
227
|
+
{ err: error, url: request.url, path },
|
|
228
|
+
"Error running before request middleware"
|
|
229
|
+
);
|
|
203
230
|
if (error instanceof Response) {
|
|
204
231
|
try {
|
|
205
232
|
await sendFetchResponse(res, error);
|
|
@@ -215,7 +242,10 @@ function createRouteHandler(runtime, factory) {
|
|
|
215
242
|
const response = await factory({ request, req });
|
|
216
243
|
await sendFetchResponse(res, response);
|
|
217
244
|
callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {
|
|
218
|
-
logger2.error(
|
|
245
|
+
logger2.error(
|
|
246
|
+
{ err: error, url: req.originalUrl ?? req.url, path },
|
|
247
|
+
"Error running after request middleware"
|
|
248
|
+
);
|
|
219
249
|
});
|
|
220
250
|
} catch (error) {
|
|
221
251
|
if (error instanceof Response) {
|
|
@@ -225,12 +255,20 @@ function createRouteHandler(runtime, factory) {
|
|
|
225
255
|
next(streamError);
|
|
226
256
|
return;
|
|
227
257
|
}
|
|
228
|
-
callAfterRequestMiddleware({ runtime, response: error, path }).catch(
|
|
229
|
-
|
|
230
|
-
|
|
258
|
+
callAfterRequestMiddleware({ runtime, response: error, path }).catch(
|
|
259
|
+
(mwError) => {
|
|
260
|
+
logger2.error(
|
|
261
|
+
{ err: mwError, url: req.originalUrl ?? req.url, path },
|
|
262
|
+
"Error running after request middleware"
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
);
|
|
231
266
|
return;
|
|
232
267
|
}
|
|
233
|
-
logger2.error(
|
|
268
|
+
logger2.error(
|
|
269
|
+
{ err: error, url: request.url, path },
|
|
270
|
+
"Error running request handler"
|
|
271
|
+
);
|
|
234
272
|
next(error);
|
|
235
273
|
}
|
|
236
274
|
};
|
|
@@ -270,11 +308,13 @@ function createCopilotEndpointSingleRouteExpress({
|
|
|
270
308
|
}) {
|
|
271
309
|
const router = express2.Router();
|
|
272
310
|
const routePath = normalizeSingleRoutePath(basePath);
|
|
273
|
-
router.use(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
311
|
+
router.use(
|
|
312
|
+
cors2({
|
|
313
|
+
origin: "*",
|
|
314
|
+
methods: ["GET", "HEAD", "PUT", "POST", "DELETE", "PATCH", "OPTIONS"],
|
|
315
|
+
allowedHeaders: ["*"]
|
|
316
|
+
})
|
|
317
|
+
);
|
|
278
318
|
router.post(routePath, createSingleRouteHandler(runtime));
|
|
279
319
|
router.use((req, res) => {
|
|
280
320
|
res.status(404).json({ error: "Not found" });
|
|
@@ -286,12 +326,19 @@ function createSingleRouteHandler(runtime) {
|
|
|
286
326
|
const path = req.originalUrl ?? req.path;
|
|
287
327
|
let request = createFetchRequestFromExpress(req);
|
|
288
328
|
try {
|
|
289
|
-
const maybeModifiedRequest = await callBeforeRequestMiddleware({
|
|
329
|
+
const maybeModifiedRequest = await callBeforeRequestMiddleware({
|
|
330
|
+
runtime,
|
|
331
|
+
request,
|
|
332
|
+
path
|
|
333
|
+
});
|
|
290
334
|
if (maybeModifiedRequest) {
|
|
291
335
|
request = maybeModifiedRequest;
|
|
292
336
|
}
|
|
293
337
|
} catch (error) {
|
|
294
|
-
logger3.error(
|
|
338
|
+
logger3.error(
|
|
339
|
+
{ err: error, url: request.url, path },
|
|
340
|
+
"Error running before request middleware"
|
|
341
|
+
);
|
|
295
342
|
if (error instanceof Response) {
|
|
296
343
|
try {
|
|
297
344
|
await sendFetchResponse(res, error);
|
|
@@ -316,7 +363,10 @@ function createSingleRouteHandler(runtime) {
|
|
|
316
363
|
}
|
|
317
364
|
return;
|
|
318
365
|
}
|
|
319
|
-
logger3.warn(
|
|
366
|
+
logger3.warn(
|
|
367
|
+
{ err: error, url: request.url },
|
|
368
|
+
"Invalid single-route payload"
|
|
369
|
+
);
|
|
320
370
|
res.status(400).json({
|
|
321
371
|
error: "invalid_request",
|
|
322
372
|
message: error instanceof Error ? error.message : "Invalid request payload"
|
|
@@ -329,19 +379,32 @@ function createSingleRouteHandler(runtime) {
|
|
|
329
379
|
case "agent/run": {
|
|
330
380
|
const agentId = expectString(methodCall.params, "agentId");
|
|
331
381
|
const handlerRequest = createJsonRequest(request, methodCall.body);
|
|
332
|
-
response = await handleRunAgent({
|
|
382
|
+
response = await handleRunAgent({
|
|
383
|
+
runtime,
|
|
384
|
+
request: handlerRequest,
|
|
385
|
+
agentId
|
|
386
|
+
});
|
|
333
387
|
break;
|
|
334
388
|
}
|
|
335
389
|
case "agent/connect": {
|
|
336
390
|
const agentId = expectString(methodCall.params, "agentId");
|
|
337
391
|
const handlerRequest = createJsonRequest(request, methodCall.body);
|
|
338
|
-
response = await handleConnectAgent({
|
|
392
|
+
response = await handleConnectAgent({
|
|
393
|
+
runtime,
|
|
394
|
+
request: handlerRequest,
|
|
395
|
+
agentId
|
|
396
|
+
});
|
|
339
397
|
break;
|
|
340
398
|
}
|
|
341
399
|
case "agent/stop": {
|
|
342
400
|
const agentId = expectString(methodCall.params, "agentId");
|
|
343
401
|
const threadId = expectString(methodCall.params, "threadId");
|
|
344
|
-
response = await handleStopAgent({
|
|
402
|
+
response = await handleStopAgent({
|
|
403
|
+
runtime,
|
|
404
|
+
request,
|
|
405
|
+
agentId,
|
|
406
|
+
threadId
|
|
407
|
+
});
|
|
345
408
|
break;
|
|
346
409
|
}
|
|
347
410
|
case "info": {
|
|
@@ -350,7 +413,10 @@ function createSingleRouteHandler(runtime) {
|
|
|
350
413
|
}
|
|
351
414
|
case "transcribe": {
|
|
352
415
|
const handlerRequest = createJsonRequest(request, methodCall.body);
|
|
353
|
-
response = await handleTranscribe({
|
|
416
|
+
response = await handleTranscribe({
|
|
417
|
+
runtime,
|
|
418
|
+
request: handlerRequest
|
|
419
|
+
});
|
|
354
420
|
break;
|
|
355
421
|
}
|
|
356
422
|
default: {
|
|
@@ -360,7 +426,10 @@ function createSingleRouteHandler(runtime) {
|
|
|
360
426
|
}
|
|
361
427
|
await sendFetchResponse(res, response);
|
|
362
428
|
callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {
|
|
363
|
-
logger3.error(
|
|
429
|
+
logger3.error(
|
|
430
|
+
{ err: error, url: req.originalUrl ?? req.url, path },
|
|
431
|
+
"Error running after request middleware"
|
|
432
|
+
);
|
|
364
433
|
});
|
|
365
434
|
} catch (error) {
|
|
366
435
|
if (error instanceof Response) {
|
|
@@ -370,19 +439,29 @@ function createSingleRouteHandler(runtime) {
|
|
|
370
439
|
next(streamError);
|
|
371
440
|
return;
|
|
372
441
|
}
|
|
373
|
-
callAfterRequestMiddleware({ runtime, response: error, path }).catch(
|
|
374
|
-
|
|
375
|
-
|
|
442
|
+
callAfterRequestMiddleware({ runtime, response: error, path }).catch(
|
|
443
|
+
(mwError) => {
|
|
444
|
+
logger3.error(
|
|
445
|
+
{ err: mwError, url: req.originalUrl ?? req.url, path },
|
|
446
|
+
"Error running after request middleware"
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
);
|
|
376
450
|
return;
|
|
377
451
|
}
|
|
378
|
-
logger3.error(
|
|
452
|
+
logger3.error(
|
|
453
|
+
{ err: error, url: request.url, path },
|
|
454
|
+
"Error running single-route handler"
|
|
455
|
+
);
|
|
379
456
|
next(error);
|
|
380
457
|
}
|
|
381
458
|
};
|
|
382
459
|
}
|
|
383
460
|
function normalizeSingleRoutePath(path) {
|
|
384
461
|
if (!path) {
|
|
385
|
-
throw new Error(
|
|
462
|
+
throw new Error(
|
|
463
|
+
"basePath must be provided for Express single-route endpoint"
|
|
464
|
+
);
|
|
386
465
|
}
|
|
387
466
|
if (!path.startsWith("/")) {
|
|
388
467
|
return `/${path}`;
|
package/dist/express.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/endpoints/express.ts","../src/endpoints/express-utils.ts","../src/endpoints/express-single.ts"],"sourcesContent":["import express from \"express\";\nimport type { Request as ExpressRequest, Response as ExpressResponse, NextFunction, Router } from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { createFetchRequestFromExpress, sendFetchResponse } from \"./express-utils\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({ runtime, basePath }: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(basePath);\n\n router.use(cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/run\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/connect\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }));\n\n router.post(joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"), createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }));\n\n router.get(joinPath(normalizedBase, \"/info\"), createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }));\n\n router.post(joinPath(normalizedBase, \"/transcribe\"), createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }));\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(runtime: CopilotRuntime, factory: RouteHandlerFactory) {\n return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({ runtime, request, path });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n try {\n const response = await factory({ request, req });\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error({ err: error, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch((mwError) => {\n logger.error({ err: mwError, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n return;\n }\n logger.error({ err: error, url: request.url, path }, \"Error running request handler\");\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\n}\n","import type { Request as ExpressRequest, Response as ExpressResponse } from \"express\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\nimport { logger } from \"@copilotkitnext/shared\";\n\nconst streamPipeline = promisify(pipeline);\n\nconst METHODS_WITHOUT_BODY = new Set([\"GET\", \"HEAD\"]);\n\nexport function createFetchRequestFromExpress(req: ExpressRequest): Request {\n const method = req.method?.toUpperCase() ?? \"GET\";\n const origin = buildOrigin(req);\n const url = `${origin}${req.originalUrl ?? req.url ?? \"\"}`;\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n value.forEach((v) => headers.append(key, v));\n } else {\n headers.set(key, value);\n }\n }\n\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n };\n\n const hasParsedBody = req.body !== undefined && req.body !== null;\n const streamConsumed = isStreamConsumed(req, hasParsedBody);\n\n if (!METHODS_WITHOUT_BODY.has(method)) {\n const canStreamBody = req.readable !== false && !streamConsumed;\n\n if (canStreamBody) {\n init.body = Readable.toWeb(req) as unknown as BodyInit;\n init.duplex = \"half\";\n } else if (hasParsedBody) {\n const { body, contentType } = synthesizeBody(req.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\n }\n headers.delete(\"content-length\");\n if (body !== undefined) {\n init.body = body;\n }\n logger.info(\n {\n url,\n method,\n readable: req.readable,\n readableEnded: req.readableEnded,\n complete: req.complete,\n },\n \"Express request stream already consumed; synthesized body from parsed content\",\n );\n } else {\n headers.delete(\"content-length\");\n logger.warn(\n { url, method },\n \"Request stream already consumed but no body was available; sending empty body\",\n );\n }\n }\n\n const controller = new AbortController();\n const abort = () => controller.abort();\n req.on(\"aborted\", abort);\n req.on(\"error\", abort);\n req.on(\"close\", () => {\n if (req.aborted) {\n abort();\n }\n });\n init.signal = controller.signal;\n\n try {\n return new Request(url, init);\n } catch (error) {\n if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {\n // Fallback to synthesized/empty body when the stream was already consumed.\n headers.delete(\"content-length\");\n delete init.duplex;\n\n if (hasParsedBody) {\n const { body, contentType } = synthesizeBody(req.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\n }\n init.body = body;\n logger.info(\n { url, method },\n \"Request stream disturbed while constructing Request; reused parsed body\",\n );\n } else {\n init.body = undefined;\n logger.warn(\n { url, method },\n \"Request stream was disturbed; falling back to empty body\",\n );\n }\n\n return new Request(url, init);\n }\n throw error;\n }\n}\n\nexport async function sendFetchResponse(res: ExpressResponse, response: Response): Promise<void> {\n res.status(response.status);\n\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"content-length\" && response.body !== null) {\n return;\n }\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return;\n }\n\n const nodeStream = Readable.fromWeb(response.body as any);\n try {\n await streamPipeline(nodeStream, res);\n } catch (error) {\n res.destroy(error as Error);\n throw error;\n }\n}\n\nfunction buildOrigin(req: ExpressRequest): string {\n const protocol = req.protocol || (req.secure ? \"https\" : \"http\");\n const host = req.get(\"host\") ?? \"localhost\";\n return `${protocol}://${host}`;\n}\n\nfunction isStreamConsumed(req: ExpressRequest, hasParsedBody: boolean): boolean {\n const state = (req as unknown as { _readableState?: { ended?: boolean; endEmitted?: boolean } })\n ._readableState;\n return Boolean(\n hasParsedBody ||\n req.readableEnded ||\n req.complete ||\n state?.ended ||\n state?.endEmitted,\n );\n}\n\nfunction synthesizeBody(body: unknown): { body?: BodyInit; contentType?: string } {\n if (Buffer.isBuffer(body) || body instanceof Uint8Array) {\n return { body };\n }\n\n if (typeof body === \"string\") {\n return { body };\n }\n\n if (typeof body === \"object\" && body !== undefined) {\n return { body: JSON.stringify(body), contentType: \"application/json\" };\n }\n\n return {};\n}\n","import express from \"express\";\nimport type { Request as ExpressRequest, Response as ExpressResponse, NextFunction, Router } from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport { callBeforeRequestMiddleware, callAfterRequestMiddleware } from \"../middleware\";\nimport { createFetchRequestFromExpress, sendFetchResponse } from \"./express-utils\";\nimport { createJsonRequest, expectString, MethodCall, parseMethodCall } from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }));\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntime) {\n return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({ runtime, request, path });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error({ err: error, url: request.url, path }, \"Error running before request middleware\");\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn({ err: error, url: request.url }, \"Invalid single-route payload\");\n res.status(400).json({\n error: \"invalid_request\",\n message: error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({ runtime, request: handlerRequest, agentId });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({ runtime, request: handlerRequest, agentId });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({ runtime, request, agentId, threadId });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleTranscribe({ runtime, request: handlerRequest });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error({ err: error, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch((mwError) => {\n logger.error({ err: mwError, url: req.originalUrl ?? req.url, path }, \"Error running after request middleware\");\n });\n return;\n }\n logger.error({ err: error, url: request.url, path }, \"Error running single-route handler\");\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express single-route endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"],"mappings":"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","names":["logger","logger","express","cors","logger","express","cors","logger"]}
|
|
1
|
+
{"version":3,"sources":["../src/endpoints/express.ts","../src/endpoints/express-utils.ts","../src/endpoints/express-single.ts"],"sourcesContent":["import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"../middleware\";\nimport {\n createFetchRequestFromExpress,\n sendFetchResponse,\n} from \"./express-utils\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({\n runtime,\n basePath,\n}: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(basePath);\n\n router.use(\n cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/run\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/connect\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }),\n );\n\n router.get(\n joinPath(normalizedBase, \"/info\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/transcribe\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }),\n );\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(\n runtime: CopilotRuntime,\n factory: RouteHandlerFactory,\n) {\n return async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n try {\n const response = await factory({ request, req });\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error(\n { err: error, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch(\n (mwError) => {\n logger.error(\n { err: mwError, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n },\n );\n return;\n }\n logger.error(\n { err: error, url: request.url, path },\n \"Error running request handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\n}\n","import type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n} from \"express\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\nimport { logger } from \"@copilotkitnext/shared\";\n\nconst streamPipeline = promisify(pipeline);\n\nconst METHODS_WITHOUT_BODY = new Set([\"GET\", \"HEAD\"]);\n\nexport function createFetchRequestFromExpress(req: ExpressRequest): Request {\n const method = req.method?.toUpperCase() ?? \"GET\";\n const origin = buildOrigin(req);\n const url = `${origin}${req.originalUrl ?? req.url ?? \"\"}`;\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n value.forEach((v) => headers.append(key, v));\n } else {\n headers.set(key, value);\n }\n }\n\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n };\n\n const hasParsedBody = req.body !== undefined && req.body !== null;\n const streamConsumed = isStreamConsumed(req, hasParsedBody);\n\n if (!METHODS_WITHOUT_BODY.has(method)) {\n const canStreamBody = req.readable !== false && !streamConsumed;\n\n if (canStreamBody) {\n init.body = Readable.toWeb(req) as unknown as BodyInit;\n init.duplex = \"half\";\n } else if (hasParsedBody) {\n const { body, contentType } = synthesizeBody(req.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\n }\n headers.delete(\"content-length\");\n if (body !== undefined) {\n init.body = body;\n }\n logger.info(\n {\n url,\n method,\n readable: req.readable,\n readableEnded: req.readableEnded,\n complete: req.complete,\n },\n \"Express request stream already consumed; synthesized body from parsed content\",\n );\n } else {\n headers.delete(\"content-length\");\n logger.warn(\n { url, method },\n \"Request stream already consumed but no body was available; sending empty body\",\n );\n }\n }\n\n const controller = new AbortController();\n const abort = () => controller.abort();\n req.on(\"aborted\", abort);\n req.on(\"error\", abort);\n req.on(\"close\", () => {\n if (req.aborted) {\n abort();\n }\n });\n init.signal = controller.signal;\n\n try {\n return new Request(url, init);\n } catch (error) {\n if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {\n // Fallback to synthesized/empty body when the stream was already consumed.\n headers.delete(\"content-length\");\n delete init.duplex;\n\n if (hasParsedBody) {\n const { body, contentType } = synthesizeBody(req.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\n }\n init.body = body;\n logger.info(\n { url, method },\n \"Request stream disturbed while constructing Request; reused parsed body\",\n );\n } else {\n init.body = undefined;\n logger.warn(\n { url, method },\n \"Request stream was disturbed; falling back to empty body\",\n );\n }\n\n return new Request(url, init);\n }\n throw error;\n }\n}\n\nexport async function sendFetchResponse(\n res: ExpressResponse,\n response: Response,\n): Promise<void> {\n res.status(response.status);\n\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"content-length\" && response.body !== null) {\n return;\n }\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return;\n }\n\n const nodeStream = Readable.fromWeb(response.body as any);\n try {\n await streamPipeline(nodeStream, res);\n } catch (error) {\n res.destroy(error as Error);\n throw error;\n }\n}\n\nfunction buildOrigin(req: ExpressRequest): string {\n const protocol = req.protocol || (req.secure ? \"https\" : \"http\");\n const host = req.get(\"host\") ?? \"localhost\";\n return `${protocol}://${host}`;\n}\n\nfunction isStreamConsumed(\n req: ExpressRequest,\n hasParsedBody: boolean,\n): boolean {\n const state = (\n req as unknown as {\n _readableState?: { ended?: boolean; endEmitted?: boolean };\n }\n )._readableState;\n return Boolean(\n hasParsedBody ||\n req.readableEnded ||\n req.complete ||\n state?.ended ||\n state?.endEmitted,\n );\n}\n\nfunction synthesizeBody(body: unknown): {\n body?: BodyInit;\n contentType?: string;\n} {\n if (Buffer.isBuffer(body) || body instanceof Uint8Array) {\n return { body };\n }\n\n if (typeof body === \"string\") {\n return { body };\n }\n\n if (typeof body === \"object\" && body !== undefined) {\n return { body: JSON.stringify(body), contentType: \"application/json\" };\n }\n\n return {};\n}\n","import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"../middleware\";\nimport {\n createFetchRequestFromExpress,\n sendFetchResponse,\n} from \"./express-utils\";\nimport {\n createJsonRequest,\n expectString,\n MethodCall,\n parseMethodCall,\n} from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(\n cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }),\n );\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntime) {\n return async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn(\n { err: error, url: request.url },\n \"Invalid single-route payload\",\n );\n res.status(400).json({\n error: \"invalid_request\",\n message:\n error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleTranscribe({\n runtime,\n request: handlerRequest,\n });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error(\n { err: error, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch(\n (mwError) => {\n logger.error(\n { err: mwError, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n },\n );\n return;\n }\n logger.error(\n { err: error, url: request.url, path },\n \"Error running single-route handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\n \"basePath must be provided for Express single-route endpoint\",\n );\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,aAAa;AAOpB,OAAO,UAAU;AAQjB,SAAS,UAAAA,eAAc;;;ACXvB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AAEvB,IAAM,iBAAiB,UAAU,QAAQ;AAEzC,IAAM,uBAAuB,oBAAI,IAAI,CAAC,OAAO,MAAM,CAAC;AAE7C,SAAS,8BAA8B,KAA8B;AAC1E,QAAM,SAAS,IAAI,QAAQ,YAAY,KAAK;AAC5C,QAAM,SAAS,YAAY,GAAG;AAC9B,QAAM,MAAM,GAAG,MAAM,GAAG,IAAI,eAAe,IAAI,OAAO,EAAE;AAExD,QAAM,UAAU,IAAI,QAAQ;AAC5B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,OAAO,GAAG;AACtD,QAAI,UAAU,OAAW;AACzB,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,CAAC,MAAM,QAAQ,OAAO,KAAK,CAAC,CAAC;AAAA,IAC7C,OAAO;AACL,cAAQ,IAAI,KAAK,KAAK;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,OAA0C;AAAA,IAC9C;AAAA,IACA;AAAA,EACF;AAEA,QAAM,gBAAgB,IAAI,SAAS,UAAa,IAAI,SAAS;AAC7D,QAAM,iBAAiB,iBAAiB,KAAK,aAAa;AAE1D,MAAI,CAAC,qBAAqB,IAAI,MAAM,GAAG;AACrC,UAAM,gBAAgB,IAAI,aAAa,SAAS,CAAC;AAEjD,QAAI,eAAe;AACjB,WAAK,OAAO,SAAS,MAAM,GAAG;AAC9B,WAAK,SAAS;AAAA,IAChB,WAAW,eAAe;AACxB,YAAM,EAAE,MAAM,YAAY,IAAI,eAAe,IAAI,IAAI;AACrD,UAAI,aAAa;AACf,gBAAQ,IAAI,gBAAgB,WAAW;AAAA,MACzC;AACA,cAAQ,OAAO,gBAAgB;AAC/B,UAAI,SAAS,QAAW;AACtB,aAAK,OAAO;AAAA,MACd;AACA,aAAO;AAAA,QACL;AAAA,UACE;AAAA,UACA;AAAA,UACA,UAAU,IAAI;AAAA,UACd,eAAe,IAAI;AAAA,UACnB,UAAU,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,OAAO,gBAAgB;AAC/B,aAAO;AAAA,QACL,EAAE,KAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,QAAQ,MAAM,WAAW,MAAM;AACrC,MAAI,GAAG,WAAW,KAAK;AACvB,MAAI,GAAG,SAAS,KAAK;AACrB,MAAI,GAAG,SAAS,MAAM;AACpB,QAAI,IAAI,SAAS;AACf,YAAM;AAAA,IACR;AAAA,EACF,CAAC;AACD,OAAK,SAAS,WAAW;AAEzB,MAAI;AACF,WAAO,IAAI,QAAQ,KAAK,IAAI;AAAA,EAC9B,SAAS,OAAO;AACd,QAAI,iBAAiB,aAAa,oBAAoB,KAAK,MAAM,OAAO,GAAG;AAEzE,cAAQ,OAAO,gBAAgB;AAC/B,aAAO,KAAK;AAEZ,UAAI,eAAe;AACjB,cAAM,EAAE,MAAM,YAAY,IAAI,eAAe,IAAI,IAAI;AACrD,YAAI,aAAa;AACf,kBAAQ,IAAI,gBAAgB,WAAW;AAAA,QACzC;AACA,aAAK,OAAO;AACZ,eAAO;AAAA,UACL,EAAE,KAAK,OAAO;AAAA,UACd;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,OAAO;AACZ,eAAO;AAAA,UACL,EAAE,KAAK,OAAO;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO,IAAI,QAAQ,KAAK,IAAI;AAAA,IAC9B;AACA,UAAM;AAAA,EACR;AACF;AAEA,eAAsB,kBACpB,KACA,UACe;AACf,MAAI,OAAO,SAAS,MAAM;AAE1B,WAAS,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACvC,QAAI,IAAI,YAAY,MAAM,oBAAoB,SAAS,SAAS,MAAM;AACpE;AAAA,IACF;AACA,QAAI,UAAU,KAAK,KAAK;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,MAAM;AAClB,QAAI,IAAI;AACR;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,QAAQ,SAAS,IAAW;AACxD,MAAI;AACF,UAAM,eAAe,YAAY,GAAG;AAAA,EACtC,SAAS,OAAO;AACd,QAAI,QAAQ,KAAc;AAC1B,UAAM;AAAA,EACR;AACF;AAEA,SAAS,YAAY,KAA6B;AAChD,QAAM,WAAW,IAAI,aAAa,IAAI,SAAS,UAAU;AACzD,QAAM,OAAO,IAAI,IAAI,MAAM,KAAK;AAChC,SAAO,GAAG,QAAQ,MAAM,IAAI;AAC9B;AAEA,SAAS,iBACP,KACA,eACS;AACT,QAAM,QACJ,IAGA;AACF,SAAO;AAAA,IACL,iBACA,IAAI,iBACJ,IAAI,YACJ,OAAO,SACP,OAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,MAGtB;AACA,MAAI,OAAO,SAAS,IAAI,KAAK,gBAAgB,YAAY;AACvD,WAAO,EAAE,KAAK;AAAA,EAChB;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,EAAE,KAAK;AAAA,EAChB;AAEA,MAAI,OAAO,SAAS,YAAY,SAAS,QAAW;AAClD,WAAO,EAAE,MAAM,KAAK,UAAU,IAAI,GAAG,aAAa,mBAAmB;AAAA,EACvE;AAEA,SAAO,CAAC;AACV;;;ADvJO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAAyC;AACvC,QAAM,SAAS,QAAQ,OAAO;AAC9B,QAAM,iBAAiB,kBAAkB,QAAQ;AAEjD,SAAO;AAAA,IACL,KAAK;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,CAAC,OAAO,QAAQ,OAAO,QAAQ,UAAU,SAAS,SAAS;AAAA,MACpE,gBAAgB,CAAC,GAAG;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,SAAS,gBAAgB,qBAAqB;AAAA,IAC9C,mBAAmB,SAAS,OAAO,EAAE,SAAS,IAAI,MAAM;AACtD,YAAM,UAAU,IAAI,OAAO;AAC3B,aAAO,eAAe,EAAE,SAAS,SAAS,QAAQ,CAAC;AAAA,IACrD,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,SAAS,gBAAgB,yBAAyB;AAAA,IAClD,mBAAmB,SAAS,OAAO,EAAE,SAAS,IAAI,MAAM;AACtD,YAAM,UAAU,IAAI,OAAO;AAC3B,aAAO,mBAAmB,EAAE,SAAS,SAAS,QAAQ,CAAC;AAAA,IACzD,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,SAAS,gBAAgB,gCAAgC;AAAA,IACzD,mBAAmB,SAAS,OAAO,EAAE,SAAS,IAAI,MAAM;AACtD,YAAM,UAAU,IAAI,OAAO;AAC3B,YAAM,WAAW,IAAI,OAAO;AAC5B,aAAO,gBAAgB,EAAE,SAAS,SAAS,SAAS,SAAS,CAAC;AAAA,IAChE,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,SAAS,gBAAgB,OAAO;AAAA,IAChC,mBAAmB,SAAS,OAAO,EAAE,QAAQ,MAAM;AACjD,aAAO,qBAAqB,EAAE,SAAS,QAAQ,CAAC;AAAA,IAClD,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,SAAS,gBAAgB,aAAa;AAAA,IACtC,mBAAmB,SAAS,OAAO,EAAE,QAAQ,MAAM;AACjD,aAAO,iBAAiB,EAAE,SAAS,QAAQ,CAAC;AAAA,IAC9C,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,SAAS,gBAAgB,GAAG,GAAG,CAAC,KAAK,QAAQ;AACtD,QAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,YAAY,CAAC;AAAA,EAC7C,CAAC;AAED,SAAO;AACT;AASA,SAAS,mBACP,SACA,SACA;AACA,SAAO,OACL,KACA,KACA,SACG;AACH,UAAM,OAAO,IAAI,eAAe,IAAI;AACpC,QAAI,UAAU,8BAA8B,GAAG;AAC/C,QAAI;AACF,YAAM,uBAAuB,MAAM,4BAA4B;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,sBAAsB;AACxB,kBAAU;AAAA,MACZ;AAAA,IACF,SAAS,OAAO;AACd,MAAAC,QAAO;AAAA,QACL,EAAE,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AACA,UAAI,iBAAiB,UAAU;AAC7B,YAAI;AACF,gBAAM,kBAAkB,KAAK,KAAK;AAAA,QACpC,SAAS,aAAa;AACpB,eAAK,WAAW;AAAA,QAClB;AACA;AAAA,MACF;AACA,WAAK,KAAK;AACV;AAAA,IACF;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,QAAQ,EAAE,SAAS,IAAI,CAAC;AAC/C,YAAM,kBAAkB,KAAK,QAAQ;AACrC,iCAA2B,EAAE,SAAS,UAAU,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU;AACvE,QAAAA,QAAO;AAAA,UACL,EAAE,KAAK,OAAO,KAAK,IAAI,eAAe,IAAI,KAAK,KAAK;AAAA,UACpD;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,YAAI;AACF,gBAAM,kBAAkB,KAAK,KAAK;AAAA,QACpC,SAAS,aAAa;AACpB,eAAK,WAAW;AAChB;AAAA,QACF;AACA,mCAA2B,EAAE,SAAS,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,UAC7D,CAAC,YAAY;AACX,YAAAA,QAAO;AAAA,cACL,EAAE,KAAK,SAAS,KAAK,IAAI,eAAe,IAAI,KAAK,KAAK;AAAA,cACtD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AACA,MAAAA,QAAO;AAAA,QACL,EAAE,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AACA,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,MAAsB;AAC/C,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,MAAI,CAAC,KAAK,WAAW,GAAG,GAAG;AACzB,WAAO,IAAI,IAAI;AAAA,EACjB;AAEA,MAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG;AACzC,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACzB;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,UAAkB,QAAwB;AAC1D,MAAI,aAAa,KAAK;AACpB,WAAO,OAAO,WAAW,GAAG,IAAI,SAAS,IAAI,MAAM;AAAA,EACrD;AAEA,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,KAAK;AAClB,WAAO,GAAG,QAAQ;AAAA,EACpB;AAEA,SAAO,GAAG,QAAQ,GAAG,OAAO,WAAW,GAAG,IAAI,SAAS,IAAI,MAAM,EAAE;AACrE;;;AEzMA,OAAOC,cAAa;AAOpB,OAAOC,WAAU;AAQjB,SAAS,UAAAC,eAAc;AAqBhB,SAAS,wCAAwC;AAAA,EACtD;AAAA,EACA;AACF,GAA4C;AAC1C,QAAM,SAASC,SAAQ,OAAO;AAC9B,QAAM,YAAY,yBAAyB,QAAQ;AAEnD,SAAO;AAAA,IACLC,MAAK;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,CAAC,OAAO,QAAQ,OAAO,QAAQ,UAAU,SAAS,SAAS;AAAA,MACpE,gBAAgB,CAAC,GAAG;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,SAAO,KAAK,WAAW,yBAAyB,OAAO,CAAC;AAExD,SAAO,IAAI,CAAC,KAAK,QAAQ;AACvB,QAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,YAAY,CAAC;AAAA,EAC7C,CAAC;AAED,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAyB;AACzD,SAAO,OACL,KACA,KACA,SACG;AACH,UAAM,OAAO,IAAI,eAAe,IAAI;AACpC,QAAI,UAAU,8BAA8B,GAAG;AAE/C,QAAI;AACF,YAAM,uBAAuB,MAAM,4BAA4B;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,sBAAsB;AACxB,kBAAU;AAAA,MACZ;AAAA,IACF,SAAS,OAAO;AACd,MAAAC,QAAO;AAAA,QACL,EAAE,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AACA,UAAI,iBAAiB,UAAU;AAC7B,YAAI;AACF,gBAAM,kBAAkB,KAAK,KAAK;AAAA,QACpC,SAAS,aAAa;AACpB,eAAK,WAAW;AAAA,QAClB;AACA;AAAA,MACF;AACA,WAAK,KAAK;AACV;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,mBAAa,MAAM,gBAAgB,OAAO;AAAA,IAC5C,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,QAAAA,QAAO,KAAK,EAAE,KAAK,QAAQ,IAAI,GAAG,8BAA8B;AAChE,YAAI;AACF,gBAAM,kBAAkB,KAAK,KAAK;AAAA,QACpC,SAAS,aAAa;AACpB,eAAK,WAAW;AAAA,QAClB;AACA;AAAA,MACF;AACA,MAAAA,QAAO;AAAA,QACL,EAAE,KAAK,OAAO,KAAK,QAAQ,IAAI;AAAA,QAC/B;AAAA,MACF;AACA,UAAI,OAAO,GAAG,EAAE,KAAK;AAAA,QACnB,OAAO;AAAA,QACP,SACE,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC7C,CAAC;AACD;AAAA,IACF;AAEA,QAAI;AACF,UAAI;AACJ,cAAQ,WAAW,QAAQ;AAAA,QACzB,KAAK,aAAa;AAChB,gBAAM,UAAU,aAAa,WAAW,QAAQ,SAAS;AACzD,gBAAM,iBAAiB,kBAAkB,SAAS,WAAW,IAAI;AACjE,qBAAW,MAAM,eAAe;AAAA,YAC9B;AAAA,YACA,SAAS;AAAA,YACT;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,iBAAiB;AACpB,gBAAM,UAAU,aAAa,WAAW,QAAQ,SAAS;AACzD,gBAAM,iBAAiB,kBAAkB,SAAS,WAAW,IAAI;AACjE,qBAAW,MAAM,mBAAmB;AAAA,YAClC;AAAA,YACA,SAAS;AAAA,YACT;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,cAAc;AACjB,gBAAM,UAAU,aAAa,WAAW,QAAQ,SAAS;AACzD,gBAAM,WAAW,aAAa,WAAW,QAAQ,UAAU;AAC3D,qBAAW,MAAM,gBAAgB;AAAA,YAC/B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,QAAQ;AACX,qBAAW,MAAM,qBAAqB,EAAE,SAAS,QAAQ,CAAC;AAC1D;AAAA,QACF;AAAA,QACA,KAAK,cAAc;AACjB,gBAAM,iBAAiB,kBAAkB,SAAS,WAAW,IAAI;AACjE,qBAAW,MAAM,iBAAiB;AAAA,YAChC;AAAA,YACA,SAAS;AAAA,UACX,CAAC;AACD;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,aAAoB,WAAW;AACrC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,kBAAkB,KAAK,QAAQ;AACrC,iCAA2B,EAAE,SAAS,UAAU,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU;AACvE,QAAAA,QAAO;AAAA,UACL,EAAE,KAAK,OAAO,KAAK,IAAI,eAAe,IAAI,KAAK,KAAK;AAAA,UACpD;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,YAAI;AACF,gBAAM,kBAAkB,KAAK,KAAK;AAAA,QACpC,SAAS,aAAa;AACpB,eAAK,WAAW;AAChB;AAAA,QACF;AACA,mCAA2B,EAAE,SAAS,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,UAC7D,CAAC,YAAY;AACX,YAAAA,QAAO;AAAA,cACL,EAAE,KAAK,SAAS,KAAK,IAAI,eAAe,IAAI,KAAK,KAAK;AAAA,cACtD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AACA,MAAAA,QAAO;AAAA,QACL,EAAE,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AACA,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,MAAsB;AACtD,MAAI,CAAC,MAAM;AACT,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,KAAK,WAAW,GAAG,GAAG;AACzB,WAAO,IAAI,IAAI;AAAA,EACjB;AAEA,MAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG;AACzC,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACzB;AAEA,SAAO;AACT;","names":["logger","logger","express","cors","logger","express","cors","logger"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -40,7 +40,7 @@ type CopilotEndpointContext$1 = {
|
|
|
40
40
|
modifiedRequest?: Request;
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
|
-
declare function createCopilotEndpoint({ runtime, basePath, cors: corsConfig }: CopilotEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext$1, {
|
|
43
|
+
declare function createCopilotEndpoint({ runtime, basePath, cors: corsConfig, }: CopilotEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext$1, {
|
|
44
44
|
[x: `${string}/agent/:agentId/run`]: {
|
|
45
45
|
$post: {
|
|
46
46
|
input: {
|
|
@@ -118,7 +118,7 @@ type CopilotEndpointContext = {
|
|
|
118
118
|
modifiedRequest?: Request;
|
|
119
119
|
};
|
|
120
120
|
};
|
|
121
|
-
declare function createCopilotEndpointSingleRoute({ runtime, basePath, cors: corsConfig }: CopilotSingleEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext, {
|
|
121
|
+
declare function createCopilotEndpointSingleRoute({ runtime, basePath, cors: corsConfig, }: CopilotSingleEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext, {
|
|
122
122
|
[x: string]: {
|
|
123
123
|
$post: {
|
|
124
124
|
input: {};
|
package/dist/index.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ type CopilotEndpointContext$1 = {
|
|
|
40
40
|
modifiedRequest?: Request;
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
|
-
declare function createCopilotEndpoint({ runtime, basePath, cors: corsConfig }: CopilotEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext$1, {
|
|
43
|
+
declare function createCopilotEndpoint({ runtime, basePath, cors: corsConfig, }: CopilotEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext$1, {
|
|
44
44
|
[x: `${string}/agent/:agentId/run`]: {
|
|
45
45
|
$post: {
|
|
46
46
|
input: {
|
|
@@ -118,7 +118,7 @@ type CopilotEndpointContext = {
|
|
|
118
118
|
modifiedRequest?: Request;
|
|
119
119
|
};
|
|
120
120
|
};
|
|
121
|
-
declare function createCopilotEndpointSingleRoute({ runtime, basePath, cors: corsConfig }: CopilotSingleEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext, {
|
|
121
|
+
declare function createCopilotEndpointSingleRoute({ runtime, basePath, cors: corsConfig, }: CopilotSingleEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext, {
|
|
122
122
|
[x: string]: {
|
|
123
123
|
$post: {
|
|
124
124
|
input: {};
|