@copilotkit/runtime 1.55.0-next.8 → 1.55.0
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/CHANGELOG.md +28 -0
- package/dist/agent/index.cjs +101 -12
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts.map +1 -1
- package/dist/agent/index.d.mts.map +1 -1
- package/dist/agent/index.mjs +102 -13
- package/dist/agent/index.mjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +4 -841
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts +4 -841
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.cjs +3 -2
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts +3 -3
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +3 -2
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +70 -47
- package/dist/package.mjs +70 -47
- package/dist/v2/express.cjs +8 -0
- package/dist/v2/express.d.cts +5 -0
- package/dist/v2/express.d.mts +5 -0
- package/dist/v2/express.mjs +5 -0
- package/dist/v2/hono.cjs +9 -0
- package/dist/v2/hono.d.cts +5 -0
- package/dist/v2/hono.d.mts +5 -0
- package/dist/v2/hono.mjs +5 -0
- package/dist/v2/index.cjs +8 -3
- package/dist/v2/index.d.cts +8 -5
- package/dist/v2/index.d.mts +8 -5
- package/dist/v2/index.mjs +5 -4
- package/dist/v2/node.cjs +8 -0
- package/dist/v2/node.d.cts +5 -0
- package/dist/v2/node.d.mts +5 -0
- package/dist/v2/node.mjs +5 -0
- package/dist/v2/runtime/core/fetch-cors.cjs +72 -0
- package/dist/v2/runtime/core/fetch-cors.cjs.map +1 -0
- package/dist/v2/runtime/core/fetch-cors.d.cts +20 -0
- package/dist/v2/runtime/core/fetch-cors.d.cts.map +1 -0
- package/dist/v2/runtime/core/fetch-cors.d.mts +20 -0
- package/dist/v2/runtime/core/fetch-cors.d.mts.map +1 -0
- package/dist/v2/runtime/core/fetch-cors.mjs +70 -0
- package/dist/v2/runtime/core/fetch-cors.mjs.map +1 -0
- package/dist/v2/runtime/core/fetch-handler.cjs +232 -0
- package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -0
- package/dist/v2/runtime/core/fetch-handler.d.cts +40 -0
- package/dist/v2/runtime/core/fetch-handler.d.cts.map +1 -0
- package/dist/v2/runtime/core/fetch-handler.d.mts +40 -0
- package/dist/v2/runtime/core/fetch-handler.d.mts.map +1 -0
- package/dist/v2/runtime/core/fetch-handler.mjs +231 -0
- package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -0
- package/dist/v2/runtime/core/fetch-router.cjs +68 -0
- package/dist/v2/runtime/core/fetch-router.cjs.map +1 -0
- package/dist/v2/runtime/core/fetch-router.mjs +67 -0
- package/dist/v2/runtime/core/fetch-router.mjs.map +1 -0
- package/dist/v2/runtime/core/hooks.cjs +29 -0
- package/dist/v2/runtime/core/hooks.cjs.map +1 -0
- package/dist/v2/runtime/core/hooks.d.cts +78 -0
- package/dist/v2/runtime/core/hooks.d.cts.map +1 -0
- package/dist/v2/runtime/core/hooks.d.mts +78 -0
- package/dist/v2/runtime/core/hooks.d.mts.map +1 -0
- package/dist/v2/runtime/core/hooks.mjs +25 -0
- package/dist/v2/runtime/core/hooks.mjs.map +1 -0
- package/dist/v2/runtime/{middleware-sse-parser.cjs → core/middleware-sse-parser.cjs} +2 -2
- package/dist/v2/runtime/core/middleware-sse-parser.cjs.map +1 -0
- package/dist/v2/runtime/{middleware-sse-parser.d.cts → core/middleware-sse-parser.d.cts} +1 -1
- package/dist/v2/runtime/core/middleware-sse-parser.d.cts.map +1 -0
- package/dist/v2/runtime/{middleware-sse-parser.d.mts → core/middleware-sse-parser.d.mts} +1 -1
- package/dist/v2/runtime/core/middleware-sse-parser.d.mts.map +1 -0
- package/dist/v2/runtime/{middleware-sse-parser.mjs → core/middleware-sse-parser.mjs} +1 -1
- package/dist/v2/runtime/core/middleware-sse-parser.mjs.map +1 -0
- package/dist/v2/runtime/{middleware.cjs → core/middleware.cjs} +2 -2
- package/dist/v2/runtime/core/middleware.cjs.map +1 -0
- package/dist/v2/runtime/{middleware.d.cts → core/middleware.d.cts} +1 -1
- package/dist/v2/runtime/core/middleware.d.cts.map +1 -0
- package/dist/v2/runtime/{middleware.d.mts → core/middleware.d.mts} +1 -1
- package/dist/v2/runtime/core/middleware.d.mts.map +1 -0
- package/dist/v2/runtime/{middleware.mjs → core/middleware.mjs} +1 -1
- package/dist/v2/runtime/core/middleware.mjs.map +1 -0
- package/dist/v2/runtime/{runtime.cjs → core/runtime.cjs} +35 -10
- package/dist/v2/runtime/core/runtime.cjs.map +1 -0
- package/dist/v2/runtime/{runtime.d.cts → core/runtime.d.cts} +41 -7
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -0
- package/dist/v2/runtime/{runtime.d.mts → core/runtime.d.mts} +42 -8
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -0
- package/dist/v2/runtime/{runtime.mjs → core/runtime.mjs} +36 -11
- package/dist/v2/runtime/core/runtime.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/express-fetch-bridge.cjs +83 -0
- package/dist/v2/runtime/endpoints/express-fetch-bridge.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/express-fetch-bridge.mjs +82 -0
- package/dist/v2/runtime/endpoints/express-fetch-bridge.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/express-single.cjs +35 -181
- package/dist/v2/runtime/endpoints/express-single.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.d.cts +35 -2
- package/dist/v2/runtime/endpoints/express-single.d.cts.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.d.mts +35 -2
- package/dist/v2/runtime/endpoints/express-single.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.mjs +35 -178
- package/dist/v2/runtime/endpoints/express-single.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/express.cjs +41 -195
- package/dist/v2/runtime/endpoints/express.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/express.d.cts +26 -4
- package/dist/v2/runtime/endpoints/express.d.cts.map +1 -1
- package/dist/v2/runtime/endpoints/express.d.mts +26 -4
- package/dist/v2/runtime/endpoints/express.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/express.mjs +41 -195
- package/dist/v2/runtime/endpoints/express.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/hono-single.cjs +11 -123
- package/dist/v2/runtime/endpoints/hono-single.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/hono-single.d.cts +14 -11
- package/dist/v2/runtime/endpoints/hono-single.d.cts.map +1 -1
- package/dist/v2/runtime/endpoints/hono-single.d.mts +14 -11
- package/dist/v2/runtime/endpoints/hono-single.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/hono-single.mjs +11 -123
- package/dist/v2/runtime/endpoints/hono-single.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/hono.cjs +23 -237
- package/dist/v2/runtime/endpoints/hono.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/hono.d.cts +29 -120
- package/dist/v2/runtime/endpoints/hono.d.cts.map +1 -1
- package/dist/v2/runtime/endpoints/hono.d.mts +29 -120
- package/dist/v2/runtime/endpoints/hono.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/hono.mjs +22 -238
- package/dist/v2/runtime/endpoints/hono.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/index.d.cts +2 -2
- package/dist/v2/runtime/endpoints/index.d.mts +2 -2
- package/dist/v2/runtime/endpoints/node-fetch-handler.cjs +26 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.d.cts +12 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.d.cts.map +1 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.d.mts +12 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.d.mts.map +1 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.mjs +24 -0
- package/dist/v2/runtime/endpoints/node-fetch-handler.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/node.cjs +30 -0
- package/dist/v2/runtime/endpoints/node.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/node.d.cts +27 -0
- package/dist/v2/runtime/endpoints/node.d.cts.map +1 -0
- package/dist/v2/runtime/endpoints/node.d.mts +27 -0
- package/dist/v2/runtime/endpoints/node.d.mts.map +1 -0
- package/dist/v2/runtime/endpoints/node.mjs +30 -0
- package/dist/v2/runtime/endpoints/node.mjs.map +1 -0
- package/dist/v2/runtime/express.d.cts +3 -0
- package/dist/v2/runtime/express.d.mts +3 -0
- package/dist/v2/runtime/handlers/get-runtime-info.cjs +2 -1
- package/dist/v2/runtime/handlers/get-runtime-info.cjs.map +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.mjs +2 -1
- package/dist/v2/runtime/handlers/get-runtime-info.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +6 -3
- package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +6 -3
- package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-run.cjs +6 -3
- package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-run.mjs +6 -3
- package/dist/v2/runtime/handlers/handle-run.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-stop.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-stop.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-transcribe.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-transcribe.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/run.cjs +22 -1
- package/dist/v2/runtime/handlers/intelligence/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/run.mjs +22 -1
- package/dist/v2/runtime/handlers/intelligence/run.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/thread-names.cjs +1 -1
- package/dist/v2/runtime/handlers/intelligence/thread-names.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/thread-names.mjs +1 -1
- package/dist/v2/runtime/handlers/intelligence/thread-names.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +21 -6
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +21 -6
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/json-response.cjs +4 -1
- package/dist/v2/runtime/handlers/shared/json-response.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/json-response.mjs +4 -1
- package/dist/v2/runtime/handlers/shared/json-response.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -1
- package/dist/v2/runtime/hono.d.cts +3 -0
- package/dist/v2/runtime/hono.d.mts +3 -0
- package/dist/v2/runtime/index.d.cts +16 -4
- package/dist/v2/runtime/index.d.cts.map +1 -0
- package/dist/v2/runtime/index.d.mts +16 -4
- package/dist/v2/runtime/index.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/client.cjs +10 -1
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts +22 -0
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts +22 -0
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +10 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
- package/dist/v2/runtime/node.d.cts +3 -0
- package/dist/v2/runtime/node.d.mts +3 -0
- package/dist/v2/runtime/open-generative-ui-middleware.cjs +282 -0
- package/dist/v2/runtime/open-generative-ui-middleware.cjs.map +1 -0
- package/dist/v2/runtime/open-generative-ui-middleware.mjs +280 -0
- package/dist/v2/runtime/open-generative-ui-middleware.mjs.map +1 -0
- package/dist/v2/runtime/runner/intelligence.cjs +4 -4
- package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.cts +6 -2
- package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.mts +6 -2
- package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.mjs +4 -4
- package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.cjs +37 -0
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +36 -0
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
- package/dist/v2/runtime/telemetry/utils.cjs +15 -0
- package/dist/v2/runtime/telemetry/utils.cjs.map +1 -0
- package/dist/v2/runtime/telemetry/utils.mjs +14 -0
- package/dist/v2/runtime/telemetry/utils.mjs.map +1 -0
- package/package.json +81 -48
- package/src/agent/__tests__/multimodal.test.ts +176 -0
- package/src/agent/index.ts +130 -19
- package/src/lib/runtime/agent-integrations/langgraph/agent.ts +3 -3
- package/src/lib/runtime/copilot-runtime.ts +1 -0
- package/src/v2/express.ts +1 -0
- package/src/v2/hono.ts +1 -0
- package/src/v2/node.ts +1 -0
- package/src/v2/runtime/__tests__/backward-compat.test.ts +261 -0
- package/src/v2/runtime/__tests__/code-review-fixes.test.ts +500 -0
- package/src/v2/runtime/__tests__/cors-credentials.test.ts +2 -2
- package/src/v2/runtime/__tests__/express-adapter.test.ts +188 -0
- package/src/v2/runtime/__tests__/express-body-order.test.ts +1 -1
- package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +344 -0
- package/src/v2/runtime/__tests__/express-single-sse.test.ts +1 -1
- package/src/v2/runtime/__tests__/fetch-cors.test.ts +205 -0
- package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +372 -0
- package/src/v2/runtime/__tests__/fetch-handler.test.ts +456 -0
- package/src/v2/runtime/__tests__/fetch-router.test.ts +132 -0
- package/src/v2/runtime/__tests__/get-runtime-info.test.ts +4 -1
- package/src/v2/runtime/__tests__/handle-connect.test.ts +15 -13
- package/src/v2/runtime/__tests__/handle-run.test.ts +21 -17
- package/src/v2/runtime/__tests__/handle-threads.test.ts +1 -1
- package/src/v2/runtime/__tests__/handle-transcribe.test.ts +1 -1
- package/src/v2/runtime/__tests__/hono-adapter.test.ts +150 -0
- package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +457 -0
- package/src/v2/runtime/__tests__/hooks.test.ts +557 -0
- package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +27 -0
- package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +32 -0
- package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +33 -0
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +25 -0
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +32 -0
- package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +15 -0
- package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +45 -0
- package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +58 -0
- package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +39 -0
- package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +35 -0
- package/src/v2/runtime/__tests__/integration/servers/express-single.ts +36 -0
- package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +39 -0
- package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +30 -0
- package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +37 -0
- package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +45 -0
- package/src/v2/runtime/__tests__/integration/servers/node-single.ts +46 -0
- package/src/v2/runtime/__tests__/integration/servers/types.ts +18 -0
- package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +358 -0
- package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +363 -0
- package/src/v2/runtime/__tests__/middleware-express.test.ts +25 -23
- package/src/v2/runtime/__tests__/middleware-single-express.test.ts +25 -23
- package/src/v2/runtime/__tests__/middleware-single.test.ts +1 -1
- package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +1 -1
- package/src/v2/runtime/__tests__/middleware.test.ts +1 -2
- package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +157 -0
- package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +728 -0
- package/src/v2/runtime/__tests__/router-edge-cases.test.ts +217 -0
- package/src/v2/runtime/__tests__/routing-express.test.ts +1 -1
- package/src/v2/runtime/__tests__/routing-single-express.test.ts +1 -1
- package/src/v2/runtime/__tests__/routing-single.test.ts +1 -1
- package/src/v2/runtime/__tests__/routing.test.ts +1 -1
- package/src/v2/runtime/__tests__/runtime.test.ts +110 -1
- package/src/v2/runtime/__tests__/telemetry.test.ts +62 -1
- package/src/v2/runtime/core/fetch-cors.ts +136 -0
- package/src/v2/runtime/core/fetch-handler.ts +415 -0
- package/src/v2/runtime/core/fetch-router.ts +112 -0
- package/src/v2/runtime/core/hooks.ts +151 -0
- package/src/v2/runtime/{runtime.ts → core/runtime.ts} +79 -10
- package/src/v2/runtime/endpoints/express-fetch-bridge.ts +137 -0
- package/src/v2/runtime/endpoints/express-single.ts +42 -219
- package/src/v2/runtime/endpoints/express.ts +128 -230
- package/src/v2/runtime/endpoints/hono-single.ts +19 -171
- package/src/v2/runtime/endpoints/hono.ts +45 -270
- package/src/v2/runtime/endpoints/node-fetch-handler.ts +48 -0
- package/src/v2/runtime/endpoints/node.ts +28 -0
- package/src/v2/runtime/handlers/get-runtime-info.ts +3 -2
- package/src/v2/runtime/handlers/handle-connect.ts +7 -4
- package/src/v2/runtime/handlers/handle-run.ts +7 -4
- package/src/v2/runtime/handlers/handle-stop.ts +1 -1
- package/src/v2/runtime/handlers/handle-transcribe.ts +1 -1
- package/src/v2/runtime/handlers/intelligence/connect.ts +1 -1
- package/src/v2/runtime/handlers/intelligence/run.ts +31 -1
- package/src/v2/runtime/handlers/intelligence/thread-names.ts +2 -2
- package/src/v2/runtime/handlers/intelligence/threads.ts +1 -1
- package/src/v2/runtime/handlers/shared/agent-utils.ts +29 -10
- package/src/v2/runtime/handlers/shared/json-response.ts +4 -1
- package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +1 -1
- package/src/v2/runtime/handlers/sse/connect.ts +1 -1
- package/src/v2/runtime/handlers/sse/run.ts +1 -1
- package/src/v2/runtime/hono.ts +2 -0
- package/src/v2/runtime/index.ts +27 -1
- package/src/v2/runtime/intelligence-platform/client.ts +50 -1
- package/src/v2/runtime/node.ts +6 -0
- package/src/v2/runtime/open-generative-ui-middleware.ts +373 -0
- package/src/v2/runtime/runner/intelligence.ts +14 -4
- package/src/v2/runtime/telemetry/telemetry-client.ts +56 -0
- package/src/v2/runtime/telemetry/utils.ts +15 -0
- package/tsdown.config.ts +8 -1
- package/vitest.config.mjs +2 -5
- package/.eslintrc.js +0 -7
- package/dist/v2/runtime/endpoints/express-utils.cjs +0 -119
- package/dist/v2/runtime/endpoints/express-utils.cjs.map +0 -1
- package/dist/v2/runtime/endpoints/express-utils.mjs +0 -117
- package/dist/v2/runtime/endpoints/express-utils.mjs.map +0 -1
- package/dist/v2/runtime/handlers/intelligence/threads.cjs +0 -159
- package/dist/v2/runtime/handlers/intelligence/threads.cjs.map +0 -1
- package/dist/v2/runtime/handlers/intelligence/threads.mjs +0 -154
- package/dist/v2/runtime/handlers/intelligence/threads.mjs.map +0 -1
- package/dist/v2/runtime/middleware-sse-parser.cjs.map +0 -1
- package/dist/v2/runtime/middleware-sse-parser.d.cts.map +0 -1
- package/dist/v2/runtime/middleware-sse-parser.d.mts.map +0 -1
- package/dist/v2/runtime/middleware-sse-parser.mjs.map +0 -1
- package/dist/v2/runtime/middleware.cjs.map +0 -1
- package/dist/v2/runtime/middleware.d.cts.map +0 -1
- package/dist/v2/runtime/middleware.d.mts.map +0 -1
- package/dist/v2/runtime/middleware.mjs.map +0 -1
- package/dist/v2/runtime/runtime.cjs.map +0 -1
- package/dist/v2/runtime/runtime.d.cts.map +0 -1
- package/dist/v2/runtime/runtime.d.mts.map +0 -1
- package/dist/v2/runtime/runtime.mjs.map +0 -1
- package/src/v2/runtime/__tests__/express-abort-signal.test.ts +0 -25
- package/src/v2/runtime/endpoints/express-utils.ts +0 -182
- package/src/v2/runtime/handler.ts +0 -3
- /package/src/v2/runtime/{middleware-sse-parser.ts → core/middleware-sse-parser.ts} +0 -0
- /package/src/v2/runtime/{middleware.ts → core/middleware.ts} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require("reflect-metadata");
|
|
2
|
+
|
|
3
|
+
//#region src/v2/runtime/core/fetch-cors.ts
|
|
4
|
+
const DEFAULT_METHODS = [
|
|
5
|
+
"GET",
|
|
6
|
+
"HEAD",
|
|
7
|
+
"PUT",
|
|
8
|
+
"POST",
|
|
9
|
+
"DELETE",
|
|
10
|
+
"PATCH",
|
|
11
|
+
"OPTIONS"
|
|
12
|
+
];
|
|
13
|
+
const DEFAULT_HEADERS = ["*"];
|
|
14
|
+
function resolveOrigin(config, requestOrigin) {
|
|
15
|
+
const { origin } = config;
|
|
16
|
+
if (!origin) return "*";
|
|
17
|
+
if (typeof origin === "string") return origin;
|
|
18
|
+
if (Array.isArray(origin)) {
|
|
19
|
+
if (!requestOrigin) return null;
|
|
20
|
+
return origin.includes(requestOrigin) ? requestOrigin : null;
|
|
21
|
+
}
|
|
22
|
+
if (typeof origin === "function") return requestOrigin ? origin(requestOrigin) : null;
|
|
23
|
+
return "*";
|
|
24
|
+
}
|
|
25
|
+
function setCorsHeaders(headers, config, requestOrigin) {
|
|
26
|
+
let allowedOrigin = resolveOrigin(config, requestOrigin);
|
|
27
|
+
if (!allowedOrigin) return;
|
|
28
|
+
if (config.credentials && allowedOrigin === "*") if (requestOrigin) allowedOrigin = requestOrigin;
|
|
29
|
+
else return;
|
|
30
|
+
headers.set("Access-Control-Allow-Origin", allowedOrigin);
|
|
31
|
+
if (config.credentials) headers.set("Access-Control-Allow-Credentials", "true");
|
|
32
|
+
if (config.exposeHeaders?.length) headers.set("Access-Control-Expose-Headers", config.exposeHeaders.join(", "));
|
|
33
|
+
if (allowedOrigin !== "*") headers.append("Vary", "Origin");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Handle CORS preflight (OPTIONS) requests.
|
|
37
|
+
* Returns a 204 Response if it's a preflight, or null if not.
|
|
38
|
+
*/
|
|
39
|
+
function handleCors(request, config) {
|
|
40
|
+
if (request.method !== "OPTIONS") return null;
|
|
41
|
+
const requestOrigin = request.headers.get("origin");
|
|
42
|
+
const headers = new Headers();
|
|
43
|
+
setCorsHeaders(headers, config, requestOrigin);
|
|
44
|
+
const methods = config.allowMethods ?? DEFAULT_METHODS;
|
|
45
|
+
headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
46
|
+
const allowHeaders = config.allowHeaders ?? DEFAULT_HEADERS;
|
|
47
|
+
headers.set("Access-Control-Allow-Headers", allowHeaders.join(", "));
|
|
48
|
+
if (config.maxAge != null) headers.set("Access-Control-Max-Age", String(config.maxAge));
|
|
49
|
+
headers.append("Vary", "Access-Control-Request-Headers");
|
|
50
|
+
headers.append("Vary", "Access-Control-Request-Method");
|
|
51
|
+
return new Response(null, {
|
|
52
|
+
status: 204,
|
|
53
|
+
headers
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Add CORS headers to an existing response.
|
|
58
|
+
*/
|
|
59
|
+
function addCorsHeaders(response, config, requestOrigin) {
|
|
60
|
+
const headers = new Headers(response.headers);
|
|
61
|
+
setCorsHeaders(headers, config, requestOrigin);
|
|
62
|
+
return new Response(response.body, {
|
|
63
|
+
status: response.status,
|
|
64
|
+
statusText: response.statusText,
|
|
65
|
+
headers
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
exports.addCorsHeaders = addCorsHeaders;
|
|
71
|
+
exports.handleCors = handleCors;
|
|
72
|
+
//# sourceMappingURL=fetch-cors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-cors.cjs","names":[],"sources":["../../../../src/v2/runtime/core/fetch-cors.ts"],"sourcesContent":["/**\n * Built-in CORS utility for framework-agnostic CopilotKit runtime handler.\n *\n * This is a lightweight CORS implementation for web-standard\n * Request/Response. It's optional — if your framework already handles CORS,\n * pass `cors: false` or omit it.\n */\n\nexport interface CopilotCorsConfig {\n origin?: string | string[] | ((origin: string) => string | null);\n credentials?: boolean;\n allowMethods?: string[];\n allowHeaders?: string[];\n exposeHeaders?: string[];\n maxAge?: number;\n}\n\nconst DEFAULT_METHODS = [\n \"GET\",\n \"HEAD\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n];\nconst DEFAULT_HEADERS = [\"*\"];\n\nfunction resolveOrigin(\n config: CopilotCorsConfig,\n requestOrigin: string | null,\n): string | null {\n const { origin } = config;\n if (!origin) return \"*\";\n\n if (typeof origin === \"string\") return origin;\n\n if (Array.isArray(origin)) {\n if (!requestOrigin) return null;\n return origin.includes(requestOrigin) ? requestOrigin : null;\n }\n\n if (typeof origin === \"function\") {\n return requestOrigin ? origin(requestOrigin) : null;\n }\n\n return \"*\";\n}\n\nfunction setCorsHeaders(\n headers: Headers,\n config: CopilotCorsConfig,\n requestOrigin: string | null,\n): void {\n let allowedOrigin = resolveOrigin(config, requestOrigin);\n if (!allowedOrigin) return;\n\n // Per the Fetch spec, Access-Control-Allow-Origin: * combined with\n // Access-Control-Allow-Credentials: true causes browsers to reject the\n // response. Auto-resolve wildcard to the request origin when credentials\n // are enabled; if there is no request origin, skip CORS entirely.\n if (config.credentials && allowedOrigin === \"*\") {\n if (requestOrigin) {\n allowedOrigin = requestOrigin;\n } else {\n return;\n }\n }\n\n headers.set(\"Access-Control-Allow-Origin\", allowedOrigin);\n\n if (config.credentials) {\n headers.set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n if (config.exposeHeaders?.length) {\n headers.set(\n \"Access-Control-Expose-Headers\",\n config.exposeHeaders.join(\", \"),\n );\n }\n\n // Vary on Origin when it's not a fixed wildcard\n if (allowedOrigin !== \"*\") {\n headers.append(\"Vary\", \"Origin\");\n }\n}\n\n/**\n * Handle CORS preflight (OPTIONS) requests.\n * Returns a 204 Response if it's a preflight, or null if not.\n */\nexport function handleCors(\n request: Request,\n config: CopilotCorsConfig,\n): Response | null {\n if (request.method !== \"OPTIONS\") return null;\n\n const requestOrigin = request.headers.get(\"origin\");\n const headers = new Headers();\n\n setCorsHeaders(headers, config, requestOrigin);\n\n const methods = config.allowMethods ?? DEFAULT_METHODS;\n headers.set(\"Access-Control-Allow-Methods\", methods.join(\", \"));\n\n const allowHeaders = config.allowHeaders ?? DEFAULT_HEADERS;\n headers.set(\"Access-Control-Allow-Headers\", allowHeaders.join(\", \"));\n\n if (config.maxAge != null) {\n headers.set(\"Access-Control-Max-Age\", String(config.maxAge));\n }\n\n // Vary headers for correct CDN caching of preflight responses\n headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n headers.append(\"Vary\", \"Access-Control-Request-Method\");\n\n return new Response(null, { status: 204, headers });\n}\n\n/**\n * Add CORS headers to an existing response.\n */\nexport function addCorsHeaders(\n response: Response,\n config: CopilotCorsConfig,\n requestOrigin: string | null,\n): Response {\n const headers = new Headers(response.headers);\n setCorsHeaders(headers, config, requestOrigin);\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n}\n"],"mappings":";;;AAiBA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,kBAAkB,CAAC,IAAI;AAE7B,SAAS,cACP,QACA,eACe;CACf,MAAM,EAAE,WAAW;AACnB,KAAI,CAAC,OAAQ,QAAO;AAEpB,KAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,KAAI,MAAM,QAAQ,OAAO,EAAE;AACzB,MAAI,CAAC,cAAe,QAAO;AAC3B,SAAO,OAAO,SAAS,cAAc,GAAG,gBAAgB;;AAG1D,KAAI,OAAO,WAAW,WACpB,QAAO,gBAAgB,OAAO,cAAc,GAAG;AAGjD,QAAO;;AAGT,SAAS,eACP,SACA,QACA,eACM;CACN,IAAI,gBAAgB,cAAc,QAAQ,cAAc;AACxD,KAAI,CAAC,cAAe;AAMpB,KAAI,OAAO,eAAe,kBAAkB,IAC1C,KAAI,cACF,iBAAgB;KAEhB;AAIJ,SAAQ,IAAI,+BAA+B,cAAc;AAEzD,KAAI,OAAO,YACT,SAAQ,IAAI,oCAAoC,OAAO;AAGzD,KAAI,OAAO,eAAe,OACxB,SAAQ,IACN,iCACA,OAAO,cAAc,KAAK,KAAK,CAChC;AAIH,KAAI,kBAAkB,IACpB,SAAQ,OAAO,QAAQ,SAAS;;;;;;AAQpC,SAAgB,WACd,SACA,QACiB;AACjB,KAAI,QAAQ,WAAW,UAAW,QAAO;CAEzC,MAAM,gBAAgB,QAAQ,QAAQ,IAAI,SAAS;CACnD,MAAM,UAAU,IAAI,SAAS;AAE7B,gBAAe,SAAS,QAAQ,cAAc;CAE9C,MAAM,UAAU,OAAO,gBAAgB;AACvC,SAAQ,IAAI,gCAAgC,QAAQ,KAAK,KAAK,CAAC;CAE/D,MAAM,eAAe,OAAO,gBAAgB;AAC5C,SAAQ,IAAI,gCAAgC,aAAa,KAAK,KAAK,CAAC;AAEpE,KAAI,OAAO,UAAU,KACnB,SAAQ,IAAI,0BAA0B,OAAO,OAAO,OAAO,CAAC;AAI9D,SAAQ,OAAO,QAAQ,iCAAiC;AACxD,SAAQ,OAAO,QAAQ,gCAAgC;AAEvD,QAAO,IAAI,SAAS,MAAM;EAAE,QAAQ;EAAK;EAAS,CAAC;;;;;AAMrD,SAAgB,eACd,UACA,QACA,eACU;CACV,MAAM,UAAU,IAAI,QAAQ,SAAS,QAAQ;AAC7C,gBAAe,SAAS,QAAQ,cAAc;AAC9C,QAAO,IAAI,SAAS,SAAS,MAAM;EACjC,QAAQ,SAAS;EACjB,YAAY,SAAS;EACrB;EACD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/v2/runtime/core/fetch-cors.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Built-in CORS utility for framework-agnostic CopilotKit runtime handler.
|
|
5
|
+
*
|
|
6
|
+
* This is a lightweight CORS implementation for web-standard
|
|
7
|
+
* Request/Response. It's optional — if your framework already handles CORS,
|
|
8
|
+
* pass `cors: false` or omit it.
|
|
9
|
+
*/
|
|
10
|
+
interface CopilotCorsConfig {
|
|
11
|
+
origin?: string | string[] | ((origin: string) => string | null);
|
|
12
|
+
credentials?: boolean;
|
|
13
|
+
allowMethods?: string[];
|
|
14
|
+
allowHeaders?: string[];
|
|
15
|
+
exposeHeaders?: string[];
|
|
16
|
+
maxAge?: number;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { CopilotCorsConfig };
|
|
20
|
+
//# sourceMappingURL=fetch-cors.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-cors.d.cts","names":[],"sources":["../../../../src/v2/runtime/core/fetch-cors.ts"],"mappings":";;;AAQA;;;;;;UAAiB,iBAAA;EACf,MAAA,yBAA+B,MAAA;EAC/B,WAAA;EACA,YAAA;EACA,YAAA;EACA,aAAA;EACA,MAAA;AAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
//#region src/v2/runtime/core/fetch-cors.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Built-in CORS utility for framework-agnostic CopilotKit runtime handler.
|
|
5
|
+
*
|
|
6
|
+
* This is a lightweight CORS implementation for web-standard
|
|
7
|
+
* Request/Response. It's optional — if your framework already handles CORS,
|
|
8
|
+
* pass `cors: false` or omit it.
|
|
9
|
+
*/
|
|
10
|
+
interface CopilotCorsConfig {
|
|
11
|
+
origin?: string | string[] | ((origin: string) => string | null);
|
|
12
|
+
credentials?: boolean;
|
|
13
|
+
allowMethods?: string[];
|
|
14
|
+
allowHeaders?: string[];
|
|
15
|
+
exposeHeaders?: string[];
|
|
16
|
+
maxAge?: number;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { CopilotCorsConfig };
|
|
20
|
+
//# sourceMappingURL=fetch-cors.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-cors.d.mts","names":[],"sources":["../../../../src/v2/runtime/core/fetch-cors.ts"],"mappings":";;;AAQA;;;;;;UAAiB,iBAAA;EACf,MAAA,yBAA+B,MAAA;EAC/B,WAAA;EACA,YAAA;EACA,YAAA;EACA,aAAA;EACA,MAAA;AAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
//#region src/v2/runtime/core/fetch-cors.ts
|
|
3
|
+
const DEFAULT_METHODS = [
|
|
4
|
+
"GET",
|
|
5
|
+
"HEAD",
|
|
6
|
+
"PUT",
|
|
7
|
+
"POST",
|
|
8
|
+
"DELETE",
|
|
9
|
+
"PATCH",
|
|
10
|
+
"OPTIONS"
|
|
11
|
+
];
|
|
12
|
+
const DEFAULT_HEADERS = ["*"];
|
|
13
|
+
function resolveOrigin(config, requestOrigin) {
|
|
14
|
+
const { origin } = config;
|
|
15
|
+
if (!origin) return "*";
|
|
16
|
+
if (typeof origin === "string") return origin;
|
|
17
|
+
if (Array.isArray(origin)) {
|
|
18
|
+
if (!requestOrigin) return null;
|
|
19
|
+
return origin.includes(requestOrigin) ? requestOrigin : null;
|
|
20
|
+
}
|
|
21
|
+
if (typeof origin === "function") return requestOrigin ? origin(requestOrigin) : null;
|
|
22
|
+
return "*";
|
|
23
|
+
}
|
|
24
|
+
function setCorsHeaders(headers, config, requestOrigin) {
|
|
25
|
+
let allowedOrigin = resolveOrigin(config, requestOrigin);
|
|
26
|
+
if (!allowedOrigin) return;
|
|
27
|
+
if (config.credentials && allowedOrigin === "*") if (requestOrigin) allowedOrigin = requestOrigin;
|
|
28
|
+
else return;
|
|
29
|
+
headers.set("Access-Control-Allow-Origin", allowedOrigin);
|
|
30
|
+
if (config.credentials) headers.set("Access-Control-Allow-Credentials", "true");
|
|
31
|
+
if (config.exposeHeaders?.length) headers.set("Access-Control-Expose-Headers", config.exposeHeaders.join(", "));
|
|
32
|
+
if (allowedOrigin !== "*") headers.append("Vary", "Origin");
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Handle CORS preflight (OPTIONS) requests.
|
|
36
|
+
* Returns a 204 Response if it's a preflight, or null if not.
|
|
37
|
+
*/
|
|
38
|
+
function handleCors(request, config) {
|
|
39
|
+
if (request.method !== "OPTIONS") return null;
|
|
40
|
+
const requestOrigin = request.headers.get("origin");
|
|
41
|
+
const headers = new Headers();
|
|
42
|
+
setCorsHeaders(headers, config, requestOrigin);
|
|
43
|
+
const methods = config.allowMethods ?? DEFAULT_METHODS;
|
|
44
|
+
headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
45
|
+
const allowHeaders = config.allowHeaders ?? DEFAULT_HEADERS;
|
|
46
|
+
headers.set("Access-Control-Allow-Headers", allowHeaders.join(", "));
|
|
47
|
+
if (config.maxAge != null) headers.set("Access-Control-Max-Age", String(config.maxAge));
|
|
48
|
+
headers.append("Vary", "Access-Control-Request-Headers");
|
|
49
|
+
headers.append("Vary", "Access-Control-Request-Method");
|
|
50
|
+
return new Response(null, {
|
|
51
|
+
status: 204,
|
|
52
|
+
headers
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Add CORS headers to an existing response.
|
|
57
|
+
*/
|
|
58
|
+
function addCorsHeaders(response, config, requestOrigin) {
|
|
59
|
+
const headers = new Headers(response.headers);
|
|
60
|
+
setCorsHeaders(headers, config, requestOrigin);
|
|
61
|
+
return new Response(response.body, {
|
|
62
|
+
status: response.status,
|
|
63
|
+
statusText: response.statusText,
|
|
64
|
+
headers
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
export { addCorsHeaders, handleCors };
|
|
70
|
+
//# sourceMappingURL=fetch-cors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-cors.mjs","names":[],"sources":["../../../../src/v2/runtime/core/fetch-cors.ts"],"sourcesContent":["/**\n * Built-in CORS utility for framework-agnostic CopilotKit runtime handler.\n *\n * This is a lightweight CORS implementation for web-standard\n * Request/Response. It's optional — if your framework already handles CORS,\n * pass `cors: false` or omit it.\n */\n\nexport interface CopilotCorsConfig {\n origin?: string | string[] | ((origin: string) => string | null);\n credentials?: boolean;\n allowMethods?: string[];\n allowHeaders?: string[];\n exposeHeaders?: string[];\n maxAge?: number;\n}\n\nconst DEFAULT_METHODS = [\n \"GET\",\n \"HEAD\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n];\nconst DEFAULT_HEADERS = [\"*\"];\n\nfunction resolveOrigin(\n config: CopilotCorsConfig,\n requestOrigin: string | null,\n): string | null {\n const { origin } = config;\n if (!origin) return \"*\";\n\n if (typeof origin === \"string\") return origin;\n\n if (Array.isArray(origin)) {\n if (!requestOrigin) return null;\n return origin.includes(requestOrigin) ? requestOrigin : null;\n }\n\n if (typeof origin === \"function\") {\n return requestOrigin ? origin(requestOrigin) : null;\n }\n\n return \"*\";\n}\n\nfunction setCorsHeaders(\n headers: Headers,\n config: CopilotCorsConfig,\n requestOrigin: string | null,\n): void {\n let allowedOrigin = resolveOrigin(config, requestOrigin);\n if (!allowedOrigin) return;\n\n // Per the Fetch spec, Access-Control-Allow-Origin: * combined with\n // Access-Control-Allow-Credentials: true causes browsers to reject the\n // response. Auto-resolve wildcard to the request origin when credentials\n // are enabled; if there is no request origin, skip CORS entirely.\n if (config.credentials && allowedOrigin === \"*\") {\n if (requestOrigin) {\n allowedOrigin = requestOrigin;\n } else {\n return;\n }\n }\n\n headers.set(\"Access-Control-Allow-Origin\", allowedOrigin);\n\n if (config.credentials) {\n headers.set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n if (config.exposeHeaders?.length) {\n headers.set(\n \"Access-Control-Expose-Headers\",\n config.exposeHeaders.join(\", \"),\n );\n }\n\n // Vary on Origin when it's not a fixed wildcard\n if (allowedOrigin !== \"*\") {\n headers.append(\"Vary\", \"Origin\");\n }\n}\n\n/**\n * Handle CORS preflight (OPTIONS) requests.\n * Returns a 204 Response if it's a preflight, or null if not.\n */\nexport function handleCors(\n request: Request,\n config: CopilotCorsConfig,\n): Response | null {\n if (request.method !== \"OPTIONS\") return null;\n\n const requestOrigin = request.headers.get(\"origin\");\n const headers = new Headers();\n\n setCorsHeaders(headers, config, requestOrigin);\n\n const methods = config.allowMethods ?? DEFAULT_METHODS;\n headers.set(\"Access-Control-Allow-Methods\", methods.join(\", \"));\n\n const allowHeaders = config.allowHeaders ?? DEFAULT_HEADERS;\n headers.set(\"Access-Control-Allow-Headers\", allowHeaders.join(\", \"));\n\n if (config.maxAge != null) {\n headers.set(\"Access-Control-Max-Age\", String(config.maxAge));\n }\n\n // Vary headers for correct CDN caching of preflight responses\n headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n headers.append(\"Vary\", \"Access-Control-Request-Method\");\n\n return new Response(null, { status: 204, headers });\n}\n\n/**\n * Add CORS headers to an existing response.\n */\nexport function addCorsHeaders(\n response: Response,\n config: CopilotCorsConfig,\n requestOrigin: string | null,\n): Response {\n const headers = new Headers(response.headers);\n setCorsHeaders(headers, config, requestOrigin);\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n}\n"],"mappings":";;AAiBA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,kBAAkB,CAAC,IAAI;AAE7B,SAAS,cACP,QACA,eACe;CACf,MAAM,EAAE,WAAW;AACnB,KAAI,CAAC,OAAQ,QAAO;AAEpB,KAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,KAAI,MAAM,QAAQ,OAAO,EAAE;AACzB,MAAI,CAAC,cAAe,QAAO;AAC3B,SAAO,OAAO,SAAS,cAAc,GAAG,gBAAgB;;AAG1D,KAAI,OAAO,WAAW,WACpB,QAAO,gBAAgB,OAAO,cAAc,GAAG;AAGjD,QAAO;;AAGT,SAAS,eACP,SACA,QACA,eACM;CACN,IAAI,gBAAgB,cAAc,QAAQ,cAAc;AACxD,KAAI,CAAC,cAAe;AAMpB,KAAI,OAAO,eAAe,kBAAkB,IAC1C,KAAI,cACF,iBAAgB;KAEhB;AAIJ,SAAQ,IAAI,+BAA+B,cAAc;AAEzD,KAAI,OAAO,YACT,SAAQ,IAAI,oCAAoC,OAAO;AAGzD,KAAI,OAAO,eAAe,OACxB,SAAQ,IACN,iCACA,OAAO,cAAc,KAAK,KAAK,CAChC;AAIH,KAAI,kBAAkB,IACpB,SAAQ,OAAO,QAAQ,SAAS;;;;;;AAQpC,SAAgB,WACd,SACA,QACiB;AACjB,KAAI,QAAQ,WAAW,UAAW,QAAO;CAEzC,MAAM,gBAAgB,QAAQ,QAAQ,IAAI,SAAS;CACnD,MAAM,UAAU,IAAI,SAAS;AAE7B,gBAAe,SAAS,QAAQ,cAAc;CAE9C,MAAM,UAAU,OAAO,gBAAgB;AACvC,SAAQ,IAAI,gCAAgC,QAAQ,KAAK,KAAK,CAAC;CAE/D,MAAM,eAAe,OAAO,gBAAgB;AAC5C,SAAQ,IAAI,gCAAgC,aAAa,KAAK,KAAK,CAAC;AAEpE,KAAI,OAAO,UAAU,KACnB,SAAQ,IAAI,0BAA0B,OAAO,OAAO,OAAO,CAAC;AAI9D,SAAQ,OAAO,QAAQ,iCAAiC;AACxD,SAAQ,OAAO,QAAQ,gCAAgC;AAEvD,QAAO,IAAI,SAAS,MAAM;EAAE,QAAQ;EAAK;EAAS,CAAC;;;;;AAMrD,SAAgB,eACd,UACA,QACA,eACU;CACV,MAAM,UAAU,IAAI,QAAQ,SAAS,QAAQ;AAC7C,gBAAe,SAAS,QAAQ,cAAc;AAC9C,QAAO,IAAI,SAAS,SAAS,MAAM;EACjC,QAAQ,SAAS;EACjB,YAAY,SAAS;EACrB;EACD,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
require("reflect-metadata");
|
|
2
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_hooks = require('./hooks.cjs');
|
|
4
|
+
const require_fetch_cors = require('./fetch-cors.cjs');
|
|
5
|
+
const require_fetch_router = require('./fetch-router.cjs');
|
|
6
|
+
const require_middleware = require('./middleware.cjs');
|
|
7
|
+
const require_handle_run = require('../handlers/handle-run.cjs');
|
|
8
|
+
const require_handle_connect = require('../handlers/handle-connect.cjs');
|
|
9
|
+
const require_handle_stop = require('../handlers/handle-stop.cjs');
|
|
10
|
+
const require_get_runtime_info = require('../handlers/get-runtime-info.cjs');
|
|
11
|
+
const require_handle_transcribe = require('../handlers/handle-transcribe.cjs');
|
|
12
|
+
const require_single_route_helpers = require('../endpoints/single-route-helpers.cjs');
|
|
13
|
+
let _copilotkit_shared = require("@copilotkit/shared");
|
|
14
|
+
|
|
15
|
+
//#region src/v2/runtime/core/fetch-handler.ts
|
|
16
|
+
function createCopilotRuntimeHandler(options) {
|
|
17
|
+
const { runtime, basePath, mode = "multi-route", cors, hooks } = options;
|
|
18
|
+
const corsConfig = resolveCorsConfig(cors);
|
|
19
|
+
return async (request) => {
|
|
20
|
+
const path = new URL(request.url, "http://localhost").pathname;
|
|
21
|
+
const requestOrigin = request.headers.get("origin");
|
|
22
|
+
const baseCtx = {
|
|
23
|
+
request,
|
|
24
|
+
path,
|
|
25
|
+
runtime
|
|
26
|
+
};
|
|
27
|
+
let route;
|
|
28
|
+
try {
|
|
29
|
+
if (corsConfig) {
|
|
30
|
+
const preflight = require_fetch_cors.handleCors(request, corsConfig);
|
|
31
|
+
if (preflight) return preflight;
|
|
32
|
+
}
|
|
33
|
+
request = await require_hooks.runOnRequest(hooks, {
|
|
34
|
+
...baseCtx,
|
|
35
|
+
request
|
|
36
|
+
});
|
|
37
|
+
try {
|
|
38
|
+
const maybeModified = await require_middleware.callBeforeRequestMiddleware({
|
|
39
|
+
runtime,
|
|
40
|
+
request,
|
|
41
|
+
path
|
|
42
|
+
});
|
|
43
|
+
if (maybeModified) request = maybeModified;
|
|
44
|
+
} catch (mwError) {
|
|
45
|
+
_copilotkit_shared.logger.error({
|
|
46
|
+
err: mwError,
|
|
47
|
+
url: request.url,
|
|
48
|
+
path
|
|
49
|
+
}, "Error running before request middleware");
|
|
50
|
+
if (mwError instanceof Response) return maybeAddCors(mwError, corsConfig, requestOrigin);
|
|
51
|
+
throw mwError;
|
|
52
|
+
}
|
|
53
|
+
let response;
|
|
54
|
+
if (mode === "single-route") {
|
|
55
|
+
const resolved = await resolveSingleRoute(request, basePath, path);
|
|
56
|
+
route = resolved.route;
|
|
57
|
+
const { methodCall } = resolved;
|
|
58
|
+
request = await require_hooks.runOnBeforeHandler(hooks, {
|
|
59
|
+
request,
|
|
60
|
+
path,
|
|
61
|
+
runtime,
|
|
62
|
+
route
|
|
63
|
+
});
|
|
64
|
+
if (route.method === "agent/run" || route.method === "agent/connect" || route.method === "transcribe") request = require_single_route_helpers.createJsonRequest(request, methodCall.body);
|
|
65
|
+
response = await dispatchRoute(runtime, request, route);
|
|
66
|
+
} else {
|
|
67
|
+
const matched = require_fetch_router.matchRoute(path, basePath);
|
|
68
|
+
if (!matched) throw jsonResponse({ error: "Not found" }, 404);
|
|
69
|
+
const methodError = validateHttpMethod(request.method, matched);
|
|
70
|
+
if (methodError) {
|
|
71
|
+
route = matched;
|
|
72
|
+
throw methodError;
|
|
73
|
+
}
|
|
74
|
+
route = matched;
|
|
75
|
+
request = await require_hooks.runOnBeforeHandler(hooks, {
|
|
76
|
+
request,
|
|
77
|
+
path,
|
|
78
|
+
runtime,
|
|
79
|
+
route
|
|
80
|
+
});
|
|
81
|
+
response = await dispatchRoute(runtime, request, route);
|
|
82
|
+
}
|
|
83
|
+
response = await require_hooks.runOnResponse(hooks, {
|
|
84
|
+
request,
|
|
85
|
+
response,
|
|
86
|
+
path,
|
|
87
|
+
runtime,
|
|
88
|
+
route
|
|
89
|
+
});
|
|
90
|
+
response = maybeAddCors(response, corsConfig, requestOrigin);
|
|
91
|
+
require_middleware.callAfterRequestMiddleware({
|
|
92
|
+
runtime,
|
|
93
|
+
response: response.clone(),
|
|
94
|
+
path
|
|
95
|
+
}).catch((error) => {
|
|
96
|
+
_copilotkit_shared.logger.error({
|
|
97
|
+
err: error,
|
|
98
|
+
url: request.url,
|
|
99
|
+
path
|
|
100
|
+
}, "Error running after request middleware");
|
|
101
|
+
});
|
|
102
|
+
return response;
|
|
103
|
+
} catch (error) {
|
|
104
|
+
if (error instanceof Response) return maybeAddCors(await require_hooks.runOnResponse(hooks, {
|
|
105
|
+
request,
|
|
106
|
+
response: error,
|
|
107
|
+
path,
|
|
108
|
+
runtime,
|
|
109
|
+
route: route ?? { method: "info" }
|
|
110
|
+
}), corsConfig, requestOrigin);
|
|
111
|
+
try {
|
|
112
|
+
const errorResponse = await require_hooks.runOnError(hooks, {
|
|
113
|
+
request,
|
|
114
|
+
error,
|
|
115
|
+
path,
|
|
116
|
+
runtime,
|
|
117
|
+
route
|
|
118
|
+
});
|
|
119
|
+
if (errorResponse) return maybeAddCors(errorResponse, corsConfig, requestOrigin);
|
|
120
|
+
} catch (hookError) {
|
|
121
|
+
_copilotkit_shared.logger.error({
|
|
122
|
+
err: hookError,
|
|
123
|
+
originalErr: error,
|
|
124
|
+
url: request.url,
|
|
125
|
+
path
|
|
126
|
+
}, "onError hook threw");
|
|
127
|
+
}
|
|
128
|
+
_copilotkit_shared.logger.error({
|
|
129
|
+
err: error,
|
|
130
|
+
url: request.url,
|
|
131
|
+
path
|
|
132
|
+
}, "Unhandled error in CopilotKit runtime handler");
|
|
133
|
+
return maybeAddCors(jsonResponse({ error: "internal_error" }, 500), corsConfig, requestOrigin);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function dispatchRoute(runtime, request, route) {
|
|
138
|
+
switch (route.method) {
|
|
139
|
+
case "agent/run": return require_handle_run.handleRunAgent({
|
|
140
|
+
runtime,
|
|
141
|
+
request,
|
|
142
|
+
agentId: route.agentId
|
|
143
|
+
});
|
|
144
|
+
case "agent/connect": return require_handle_connect.handleConnectAgent({
|
|
145
|
+
runtime,
|
|
146
|
+
request,
|
|
147
|
+
agentId: route.agentId
|
|
148
|
+
});
|
|
149
|
+
case "agent/stop": return require_handle_stop.handleStopAgent({
|
|
150
|
+
runtime,
|
|
151
|
+
request,
|
|
152
|
+
agentId: route.agentId,
|
|
153
|
+
threadId: route.threadId
|
|
154
|
+
});
|
|
155
|
+
case "info": return require_get_runtime_info.handleGetRuntimeInfo({
|
|
156
|
+
runtime,
|
|
157
|
+
request
|
|
158
|
+
});
|
|
159
|
+
case "transcribe": return require_handle_transcribe.handleTranscribe({
|
|
160
|
+
runtime,
|
|
161
|
+
request
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async function resolveSingleRoute(request, basePath, pathname) {
|
|
166
|
+
if (basePath) {
|
|
167
|
+
const normalizedBase = basePath.length > 1 && basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
|
|
168
|
+
if (!pathname.startsWith(normalizedBase)) throw jsonResponse({ error: "Not found" }, 404);
|
|
169
|
+
}
|
|
170
|
+
if (request.method !== "POST") throw jsonResponse({ error: "Method not allowed" }, 405, { Allow: "POST" });
|
|
171
|
+
const methodCall = await require_single_route_helpers.parseMethodCall(request);
|
|
172
|
+
let route;
|
|
173
|
+
switch (methodCall.method) {
|
|
174
|
+
case "agent/run":
|
|
175
|
+
route = {
|
|
176
|
+
method: "agent/run",
|
|
177
|
+
agentId: require_single_route_helpers.expectString(methodCall.params, "agentId")
|
|
178
|
+
};
|
|
179
|
+
break;
|
|
180
|
+
case "agent/connect":
|
|
181
|
+
route = {
|
|
182
|
+
method: "agent/connect",
|
|
183
|
+
agentId: require_single_route_helpers.expectString(methodCall.params, "agentId")
|
|
184
|
+
};
|
|
185
|
+
break;
|
|
186
|
+
case "agent/stop":
|
|
187
|
+
route = {
|
|
188
|
+
method: "agent/stop",
|
|
189
|
+
agentId: require_single_route_helpers.expectString(methodCall.params, "agentId"),
|
|
190
|
+
threadId: require_single_route_helpers.expectString(methodCall.params, "threadId")
|
|
191
|
+
};
|
|
192
|
+
break;
|
|
193
|
+
case "info":
|
|
194
|
+
route = { method: "info" };
|
|
195
|
+
break;
|
|
196
|
+
case "transcribe":
|
|
197
|
+
route = { method: "transcribe" };
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
route,
|
|
202
|
+
methodCall
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function validateHttpMethod(httpMethod, route) {
|
|
206
|
+
const method = httpMethod.toUpperCase();
|
|
207
|
+
if (route.method === "info" && method === "GET") return null;
|
|
208
|
+
if (route.method !== "info" && method === "POST") return null;
|
|
209
|
+
return jsonResponse({ error: "Method not allowed" }, 405, { Allow: route.method === "info" ? "GET" : "POST" });
|
|
210
|
+
}
|
|
211
|
+
function resolveCorsConfig(cors) {
|
|
212
|
+
if (!cors) return null;
|
|
213
|
+
if (cors === true) return {};
|
|
214
|
+
return cors;
|
|
215
|
+
}
|
|
216
|
+
function maybeAddCors(response, config, requestOrigin) {
|
|
217
|
+
if (!config) return response;
|
|
218
|
+
return require_fetch_cors.addCorsHeaders(response, config, requestOrigin);
|
|
219
|
+
}
|
|
220
|
+
function jsonResponse(body, status, extraHeaders) {
|
|
221
|
+
return new Response(JSON.stringify(body), {
|
|
222
|
+
status,
|
|
223
|
+
headers: {
|
|
224
|
+
"Content-Type": "application/json",
|
|
225
|
+
...extraHeaders
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
//#endregion
|
|
231
|
+
exports.createCopilotRuntimeHandler = createCopilotRuntimeHandler;
|
|
232
|
+
//# sourceMappingURL=fetch-handler.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-handler.cjs","names":["handleCors","runOnRequest","callBeforeRequestMiddleware","runOnBeforeHandler","createJsonRequest","matchRoute","runOnResponse","runOnError","handleRunAgent","handleConnectAgent","handleStopAgent","handleGetRuntimeInfo","handleTranscribe","parseMethodCall","expectString","addCorsHeaders"],"sources":["../../../../src/v2/runtime/core/fetch-handler.ts"],"sourcesContent":["/**\n * Framework-agnostic CopilotKit runtime handler.\n *\n * Returns a pure `(Request) => Promise<Response>` function that can be used\n * directly with Bun, Deno, Cloudflare Workers, Next.js App Router, or any\n * Fetch-native runtime — no framework dependency required.\n *\n * @example\n * ```typescript\n * import { CopilotRuntime, createCopilotRuntimeHandler } from \"@copilotkit/runtime/v2\";\n *\n * const handler = createCopilotRuntimeHandler({\n * runtime: new CopilotRuntime({ agents: { ... } }),\n * basePath: \"/api/copilotkit\",\n * cors: true,\n * });\n *\n * // Bun\n * Bun.serve({ fetch: handler });\n *\n * // Deno\n * Deno.serve(handler);\n *\n * // Cloudflare Workers\n * export default { fetch: handler };\n * ```\n */\n\nimport type { CopilotRuntimeLike } from \"./runtime\";\nimport type { CopilotRuntimeHooks, RouteInfo, HookContext } from \"./hooks\";\nimport {\n runOnRequest,\n runOnBeforeHandler,\n runOnResponse,\n runOnError,\n} from \"./hooks\";\nimport type { CopilotCorsConfig } from \"./fetch-cors\";\nimport { handleCors, addCorsHeaders } from \"./fetch-cors\";\nimport { matchRoute } from \"./fetch-router\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"./middleware\";\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 {\n parseMethodCall,\n createJsonRequest,\n expectString,\n type MethodCall,\n} from \"../endpoints/single-route-helpers\";\nimport { logger } from \"@copilotkit/shared\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface CopilotRuntimeHandlerOptions {\n runtime: CopilotRuntimeLike;\n\n /**\n * Optional base path for routing.\n *\n * When provided: strict prefix stripping. The handler strips this prefix from the\n * URL pathname and matches the remainder against known routes.\n *\n * When omitted: suffix matching. The handler matches known route patterns as\n * suffixes of the URL pathname.\n */\n basePath?: string;\n\n /**\n * Endpoint mode:\n * - \"multi-route\" (default): Routes like POST /agent/:agentId/run, GET /info, etc.\n * - \"single-route\": Single POST endpoint with JSON envelope { method, params, body }\n */\n mode?: \"multi-route\" | \"single-route\";\n\n /**\n * Optional CORS configuration.\n * When not provided, no CORS headers are added (let the framework handle it).\n * Set to true for permissive defaults, or provide an object.\n */\n cors?: boolean | CopilotCorsConfig;\n\n /**\n * Lifecycle hooks for request processing.\n */\n hooks?: CopilotRuntimeHooks;\n}\n\nexport type CopilotRuntimeFetchHandler = (\n request: Request,\n) => Promise<Response>;\n\n/* ------------------------------------------------------------------------------------------------\n * Handler factory\n * --------------------------------------------------------------------------------------------- */\n\nexport function createCopilotRuntimeHandler(\n options: CopilotRuntimeHandlerOptions,\n): CopilotRuntimeFetchHandler {\n const { runtime, basePath, mode = \"multi-route\", cors, hooks } = options;\n\n const corsConfig = resolveCorsConfig(cors);\n\n return async (request: Request): Promise<Response> => {\n const url = new URL(request.url, \"http://localhost\");\n const path = url.pathname;\n const requestOrigin = request.headers.get(\"origin\");\n\n // Base hook context (route not yet known)\n const baseCtx: HookContext = { request, path, runtime };\n\n let route: RouteInfo | undefined;\n\n try {\n // 1. CORS preflight\n if (corsConfig) {\n const preflight = handleCors(request, corsConfig);\n if (preflight) return preflight;\n }\n\n // 2. onRequest hook\n request = await runOnRequest(hooks, { ...baseCtx, request });\n\n // 3. Legacy beforeRequestMiddleware\n try {\n const maybeModified = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModified) {\n request = maybeModified;\n }\n } catch (mwError: unknown) {\n logger.error(\n { err: mwError, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (mwError instanceof Response) {\n return maybeAddCors(mwError, corsConfig, requestOrigin);\n }\n throw mwError;\n }\n\n // 4. Route matching\n let response: Response;\n\n if (mode === \"single-route\") {\n const resolved = await resolveSingleRoute(request, basePath, path);\n route = resolved.route;\n const { methodCall } = resolved;\n // 5. onBeforeHandler hook\n request = await runOnBeforeHandler(hooks, {\n request,\n path,\n runtime,\n route,\n });\n // 6. Wrap body for methods that need it, then dispatch\n if (\n route.method === \"agent/run\" ||\n route.method === \"agent/connect\" ||\n route.method === \"transcribe\"\n ) {\n request = createJsonRequest(request, methodCall.body);\n }\n response = await dispatchRoute(runtime, request, route);\n } else {\n // Multi-route: match URL pattern\n const matched = matchRoute(path, basePath);\n if (!matched) {\n throw jsonResponse({ error: \"Not found\" }, 404);\n }\n\n // Validate HTTP method\n const methodError = validateHttpMethod(request.method, matched);\n if (methodError) {\n route = matched;\n throw methodError;\n }\n\n route = matched;\n\n // 5. onBeforeHandler hook\n request = await runOnBeforeHandler(hooks, {\n request,\n path,\n runtime,\n route,\n });\n\n // 6. Handler dispatch\n response = await dispatchRoute(runtime, request, route);\n }\n\n // 7. onResponse hook\n response = await runOnResponse(hooks, {\n request,\n response,\n path,\n runtime,\n route,\n });\n\n // 8. CORS headers on response\n response = maybeAddCors(response, corsConfig, requestOrigin);\n\n // 9. Legacy afterRequestMiddleware (non-blocking)\n // Clone the response so middleware can read the body without consuming\n // the original stream that will be sent to the client.\n callAfterRequestMiddleware({\n runtime,\n response: response.clone(),\n path,\n }).catch((error: unknown) => {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running after request middleware\",\n );\n });\n\n return response;\n } catch (error) {\n // Short-circuit with thrown Response\n if (error instanceof Response) {\n const finalResponse = await runOnResponse(hooks, {\n request,\n response: error,\n path,\n runtime,\n route: route ?? { method: \"info\" },\n });\n return maybeAddCors(finalResponse, corsConfig, requestOrigin);\n }\n\n // Run onError hook — wrapped so a throwing hook doesn't escape\n try {\n const errorResponse = await runOnError(hooks, {\n request,\n error,\n path,\n runtime,\n route,\n });\n\n if (errorResponse) {\n return maybeAddCors(errorResponse, corsConfig, requestOrigin);\n }\n } catch (hookError: unknown) {\n logger.error(\n { err: hookError, originalErr: error, url: request.url, path },\n \"onError hook threw\",\n );\n }\n\n logger.error(\n { err: error, url: request.url, path },\n \"Unhandled error in CopilotKit runtime handler\",\n );\n\n return maybeAddCors(\n jsonResponse({ error: \"internal_error\" }, 500),\n corsConfig,\n requestOrigin,\n );\n }\n };\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Route dispatch\n * --------------------------------------------------------------------------------------------- */\n\nfunction dispatchRoute(\n runtime: CopilotRuntimeLike,\n request: Request,\n route: RouteInfo,\n): Promise<Response> {\n switch (route.method) {\n case \"agent/run\":\n return handleRunAgent({\n runtime,\n request,\n agentId: route.agentId,\n });\n case \"agent/connect\":\n return handleConnectAgent({\n runtime,\n request,\n agentId: route.agentId,\n });\n case \"agent/stop\":\n return handleStopAgent({\n runtime,\n request,\n agentId: route.agentId,\n threadId: route.threadId,\n });\n case \"info\":\n return handleGetRuntimeInfo({ runtime, request });\n case \"transcribe\":\n return handleTranscribe({ runtime, request });\n }\n}\n\ninterface SingleRouteResolution {\n route: RouteInfo;\n methodCall: MethodCall;\n}\n\nasync function resolveSingleRoute(\n request: Request,\n basePath: string | undefined,\n pathname: string,\n): Promise<SingleRouteResolution> {\n if (basePath) {\n const normalizedBase =\n basePath.length > 1 && basePath.endsWith(\"/\")\n ? basePath.slice(0, -1)\n : basePath;\n if (!pathname.startsWith(normalizedBase)) {\n throw jsonResponse({ error: \"Not found\" }, 404);\n }\n }\n\n if (request.method !== \"POST\") {\n throw jsonResponse({ error: \"Method not allowed\" }, 405, { Allow: \"POST\" });\n }\n\n const methodCall = await parseMethodCall(request);\n\n let route: RouteInfo;\n switch (methodCall.method) {\n case \"agent/run\":\n route = {\n method: \"agent/run\",\n agentId: expectString(methodCall.params, \"agentId\"),\n };\n break;\n case \"agent/connect\":\n route = {\n method: \"agent/connect\",\n agentId: expectString(methodCall.params, \"agentId\"),\n };\n break;\n case \"agent/stop\":\n route = {\n method: \"agent/stop\",\n agentId: expectString(methodCall.params, \"agentId\"),\n threadId: expectString(methodCall.params, \"threadId\"),\n };\n break;\n case \"info\":\n route = { method: \"info\" };\n break;\n case \"transcribe\":\n route = { method: \"transcribe\" };\n break;\n }\n\n return { route, methodCall };\n}\n\n/* ------------------------------------------------------------------------------------------------\n * HTTP method validation\n * --------------------------------------------------------------------------------------------- */\n\nfunction validateHttpMethod(\n httpMethod: string,\n route: RouteInfo,\n): Response | null {\n const method = httpMethod.toUpperCase();\n if (route.method === \"info\" && method === \"GET\") return null;\n if (route.method !== \"info\" && method === \"POST\") return null;\n const allowed = route.method === \"info\" ? \"GET\" : \"POST\";\n return jsonResponse({ error: \"Method not allowed\" }, 405, { Allow: allowed });\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Helpers\n * --------------------------------------------------------------------------------------------- */\n\nfunction resolveCorsConfig(\n cors: boolean | CopilotCorsConfig | undefined,\n): CopilotCorsConfig | null {\n if (!cors) return null;\n if (cors === true) return {};\n return cors;\n}\n\nfunction maybeAddCors(\n response: Response,\n config: CopilotCorsConfig | null,\n requestOrigin: string | null,\n): Response {\n if (!config) return response;\n return addCorsHeaders(response, config, requestOrigin);\n}\n\nfunction jsonResponse(\n body: unknown,\n status: number,\n extraHeaders?: Record<string, string>,\n): Response {\n return new Response(JSON.stringify(body), {\n status,\n headers: { \"Content-Type\": \"application/json\", ...extraHeaders },\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
import { CopilotRuntimeLike } from "./runtime.cjs";
|
|
3
|
+
import { CopilotCorsConfig } from "./fetch-cors.cjs";
|
|
4
|
+
import { CopilotRuntimeHooks } from "./hooks.cjs";
|
|
5
|
+
|
|
6
|
+
//#region src/v2/runtime/core/fetch-handler.d.ts
|
|
7
|
+
interface CopilotRuntimeHandlerOptions {
|
|
8
|
+
runtime: CopilotRuntimeLike;
|
|
9
|
+
/**
|
|
10
|
+
* Optional base path for routing.
|
|
11
|
+
*
|
|
12
|
+
* When provided: strict prefix stripping. The handler strips this prefix from the
|
|
13
|
+
* URL pathname and matches the remainder against known routes.
|
|
14
|
+
*
|
|
15
|
+
* When omitted: suffix matching. The handler matches known route patterns as
|
|
16
|
+
* suffixes of the URL pathname.
|
|
17
|
+
*/
|
|
18
|
+
basePath?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Endpoint mode:
|
|
21
|
+
* - "multi-route" (default): Routes like POST /agent/:agentId/run, GET /info, etc.
|
|
22
|
+
* - "single-route": Single POST endpoint with JSON envelope { method, params, body }
|
|
23
|
+
*/
|
|
24
|
+
mode?: "multi-route" | "single-route";
|
|
25
|
+
/**
|
|
26
|
+
* Optional CORS configuration.
|
|
27
|
+
* When not provided, no CORS headers are added (let the framework handle it).
|
|
28
|
+
* Set to true for permissive defaults, or provide an object.
|
|
29
|
+
*/
|
|
30
|
+
cors?: boolean | CopilotCorsConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Lifecycle hooks for request processing.
|
|
33
|
+
*/
|
|
34
|
+
hooks?: CopilotRuntimeHooks;
|
|
35
|
+
}
|
|
36
|
+
type CopilotRuntimeFetchHandler = (request: Request) => Promise<Response>;
|
|
37
|
+
declare function createCopilotRuntimeHandler(options: CopilotRuntimeHandlerOptions): CopilotRuntimeFetchHandler;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, createCopilotRuntimeHandler };
|
|
40
|
+
//# sourceMappingURL=fetch-handler.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-handler.d.cts","names":[],"sources":["../../../../src/v2/runtime/core/fetch-handler.ts"],"mappings":";;;;;;UA4DiB,4BAAA;EACf,OAAA,EAAS,kBAAA;EAkCT;;;;;AAOF;;;;EA9BE,QAAA;EA+BA;;;;;EAxBA,IAAA;;;;;;EAOA,IAAA,aAAiB,iBAAA;;;;EAKjB,KAAA,GAAQ,mBAAA;AAAA;AAAA,KAGE,0BAAA,IACV,OAAA,EAAS,OAAA,KACN,OAAA,CAAQ,QAAA;AAAA,iBAMG,2BAAA,CACd,OAAA,EAAS,4BAAA,GACR,0BAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { CopilotRuntimeLike } from "./runtime.mjs";
|
|
3
|
+
import { CopilotCorsConfig } from "./fetch-cors.mjs";
|
|
4
|
+
import { CopilotRuntimeHooks } from "./hooks.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/v2/runtime/core/fetch-handler.d.ts
|
|
7
|
+
interface CopilotRuntimeHandlerOptions {
|
|
8
|
+
runtime: CopilotRuntimeLike;
|
|
9
|
+
/**
|
|
10
|
+
* Optional base path for routing.
|
|
11
|
+
*
|
|
12
|
+
* When provided: strict prefix stripping. The handler strips this prefix from the
|
|
13
|
+
* URL pathname and matches the remainder against known routes.
|
|
14
|
+
*
|
|
15
|
+
* When omitted: suffix matching. The handler matches known route patterns as
|
|
16
|
+
* suffixes of the URL pathname.
|
|
17
|
+
*/
|
|
18
|
+
basePath?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Endpoint mode:
|
|
21
|
+
* - "multi-route" (default): Routes like POST /agent/:agentId/run, GET /info, etc.
|
|
22
|
+
* - "single-route": Single POST endpoint with JSON envelope { method, params, body }
|
|
23
|
+
*/
|
|
24
|
+
mode?: "multi-route" | "single-route";
|
|
25
|
+
/**
|
|
26
|
+
* Optional CORS configuration.
|
|
27
|
+
* When not provided, no CORS headers are added (let the framework handle it).
|
|
28
|
+
* Set to true for permissive defaults, or provide an object.
|
|
29
|
+
*/
|
|
30
|
+
cors?: boolean | CopilotCorsConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Lifecycle hooks for request processing.
|
|
33
|
+
*/
|
|
34
|
+
hooks?: CopilotRuntimeHooks;
|
|
35
|
+
}
|
|
36
|
+
type CopilotRuntimeFetchHandler = (request: Request) => Promise<Response>;
|
|
37
|
+
declare function createCopilotRuntimeHandler(options: CopilotRuntimeHandlerOptions): CopilotRuntimeFetchHandler;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, createCopilotRuntimeHandler };
|
|
40
|
+
//# sourceMappingURL=fetch-handler.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-handler.d.mts","names":[],"sources":["../../../../src/v2/runtime/core/fetch-handler.ts"],"mappings":";;;;;;UA4DiB,4BAAA;EACf,OAAA,EAAS,kBAAA;EAkCT;;;;;AAOF;;;;EA9BE,QAAA;EA+BA;;;;;EAxBA,IAAA;;;;;;EAOA,IAAA,aAAiB,iBAAA;;;;EAKjB,KAAA,GAAQ,mBAAA;AAAA;AAAA,KAGE,0BAAA,IACV,OAAA,EAAS,OAAA,KACN,OAAA,CAAQ,QAAA;AAAA,iBAMG,2BAAA,CACd,OAAA,EAAS,4BAAA,GACR,0BAAA"}
|