@copilotkit/runtime 1.55.0-next.9 → 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 +24 -2
- 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 +1 -1
- package/src/v2/runtime/__tests__/middleware-single-express.test.ts +1 -1
- 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
package/vitest.config.mjs
CHANGED
|
@@ -4,11 +4,8 @@ export default defineConfig({
|
|
|
4
4
|
test: {
|
|
5
5
|
environment: "node",
|
|
6
6
|
globals: true,
|
|
7
|
-
include: [
|
|
8
|
-
|
|
9
|
-
"tests/**/*.{test,spec}.ts",
|
|
10
|
-
],
|
|
11
|
-
exclude: ["**/dist/**"],
|
|
7
|
+
include: ["src/**/*.{test,spec}.ts", "tests/**/*.{test,spec}.ts"],
|
|
8
|
+
exclude: ["**/dist/**", "**/integration/bun/**"],
|
|
12
9
|
setupFiles: ["./tests/setup.vitest.ts"],
|
|
13
10
|
reporters: [["default", { summary: false }]],
|
|
14
11
|
silent: true,
|
package/.eslintrc.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
require("reflect-metadata");
|
|
2
|
-
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
let _copilotkit_shared = require("@copilotkit/shared");
|
|
4
|
-
let node_stream = require("node:stream");
|
|
5
|
-
let node_util = require("node:util");
|
|
6
|
-
|
|
7
|
-
//#region src/v2/runtime/endpoints/express-utils.ts
|
|
8
|
-
const streamPipeline = (0, node_util.promisify)(node_stream.pipeline);
|
|
9
|
-
const METHODS_WITHOUT_BODY = new Set(["GET", "HEAD"]);
|
|
10
|
-
function createFetchRequestFromExpress(req) {
|
|
11
|
-
const method = req.method?.toUpperCase() ?? "GET";
|
|
12
|
-
const url = `${buildOrigin(req)}${req.originalUrl ?? req.url ?? ""}`;
|
|
13
|
-
const headers = new Headers();
|
|
14
|
-
for (const [key, value] of Object.entries(req.headers)) {
|
|
15
|
-
if (value === void 0) continue;
|
|
16
|
-
if (Array.isArray(value)) value.forEach((v) => headers.append(key, v));
|
|
17
|
-
else headers.set(key, value);
|
|
18
|
-
}
|
|
19
|
-
const init = {
|
|
20
|
-
method,
|
|
21
|
-
headers
|
|
22
|
-
};
|
|
23
|
-
const hasParsedBody = req.body !== void 0 && req.body !== null;
|
|
24
|
-
const streamConsumed = isStreamConsumed(req, hasParsedBody);
|
|
25
|
-
if (!METHODS_WITHOUT_BODY.has(method)) if (req.readable !== false && !streamConsumed) {
|
|
26
|
-
init.body = node_stream.Readable.toWeb(req);
|
|
27
|
-
init.duplex = "half";
|
|
28
|
-
} else if (hasParsedBody) {
|
|
29
|
-
const { body, contentType } = synthesizeBody(req.body);
|
|
30
|
-
if (contentType) headers.set("content-type", contentType);
|
|
31
|
-
headers.delete("content-length");
|
|
32
|
-
if (body !== void 0) init.body = body;
|
|
33
|
-
_copilotkit_shared.logger.info({
|
|
34
|
-
url,
|
|
35
|
-
method,
|
|
36
|
-
readable: req.readable,
|
|
37
|
-
readableEnded: req.readableEnded,
|
|
38
|
-
complete: req.complete
|
|
39
|
-
}, "Express request stream already consumed; synthesized body from parsed content");
|
|
40
|
-
} else {
|
|
41
|
-
headers.delete("content-length");
|
|
42
|
-
_copilotkit_shared.logger.warn({
|
|
43
|
-
url,
|
|
44
|
-
method
|
|
45
|
-
}, "Request stream already consumed but no body was available; sending empty body");
|
|
46
|
-
}
|
|
47
|
-
const controller = new AbortController();
|
|
48
|
-
const abort = () => controller.abort();
|
|
49
|
-
req.on("aborted", abort);
|
|
50
|
-
req.on("error", abort);
|
|
51
|
-
req.on("close", () => {
|
|
52
|
-
if (req.aborted) abort();
|
|
53
|
-
});
|
|
54
|
-
init.signal = controller.signal;
|
|
55
|
-
try {
|
|
56
|
-
return new Request(url, init);
|
|
57
|
-
} catch (error) {
|
|
58
|
-
if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {
|
|
59
|
-
headers.delete("content-length");
|
|
60
|
-
delete init.duplex;
|
|
61
|
-
if (hasParsedBody) {
|
|
62
|
-
const { body, contentType } = synthesizeBody(req.body);
|
|
63
|
-
if (contentType) headers.set("content-type", contentType);
|
|
64
|
-
init.body = body;
|
|
65
|
-
_copilotkit_shared.logger.info({
|
|
66
|
-
url,
|
|
67
|
-
method
|
|
68
|
-
}, "Request stream disturbed while constructing Request; reused parsed body");
|
|
69
|
-
} else {
|
|
70
|
-
init.body = void 0;
|
|
71
|
-
_copilotkit_shared.logger.warn({
|
|
72
|
-
url,
|
|
73
|
-
method
|
|
74
|
-
}, "Request stream was disturbed; falling back to empty body");
|
|
75
|
-
}
|
|
76
|
-
return new Request(url, init);
|
|
77
|
-
}
|
|
78
|
-
throw error;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
async function sendFetchResponse(res, response) {
|
|
82
|
-
res.status(response.status);
|
|
83
|
-
response.headers.forEach((value, key) => {
|
|
84
|
-
if (key.toLowerCase() === "content-length" && response.body !== null) return;
|
|
85
|
-
res.setHeader(key, value);
|
|
86
|
-
});
|
|
87
|
-
if (!response.body) {
|
|
88
|
-
res.end();
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const nodeStream = node_stream.Readable.fromWeb(response.body);
|
|
92
|
-
try {
|
|
93
|
-
await streamPipeline(nodeStream, res);
|
|
94
|
-
} catch (error) {
|
|
95
|
-
res.destroy(error);
|
|
96
|
-
throw error;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
function buildOrigin(req) {
|
|
100
|
-
return `${req.protocol || (req.secure ? "https" : "http")}://${req.get("host") ?? "localhost"}`;
|
|
101
|
-
}
|
|
102
|
-
function isStreamConsumed(req, hasParsedBody) {
|
|
103
|
-
const state = req._readableState;
|
|
104
|
-
return Boolean(hasParsedBody || req.readableEnded || req.complete || state?.ended || state?.endEmitted);
|
|
105
|
-
}
|
|
106
|
-
function synthesizeBody(body) {
|
|
107
|
-
if (Buffer.isBuffer(body) || body instanceof Uint8Array) return { body };
|
|
108
|
-
if (typeof body === "string") return { body };
|
|
109
|
-
if (typeof body === "object" && body !== void 0) return {
|
|
110
|
-
body: JSON.stringify(body),
|
|
111
|
-
contentType: "application/json"
|
|
112
|
-
};
|
|
113
|
-
return {};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
//#endregion
|
|
117
|
-
exports.createFetchRequestFromExpress = createFetchRequestFromExpress;
|
|
118
|
-
exports.sendFetchResponse = sendFetchResponse;
|
|
119
|
-
//# sourceMappingURL=express-utils.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"express-utils.cjs","names":["pipeline","Readable"],"sources":["../../../../src/v2/runtime/endpoints/express-utils.ts"],"sourcesContent":["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 \"@copilotkit/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"],"mappings":"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"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
|
-
import { logger } from "@copilotkit/shared";
|
|
3
|
-
import { Readable, pipeline } from "node:stream";
|
|
4
|
-
import { promisify } from "node:util";
|
|
5
|
-
|
|
6
|
-
//#region src/v2/runtime/endpoints/express-utils.ts
|
|
7
|
-
const streamPipeline = promisify(pipeline);
|
|
8
|
-
const METHODS_WITHOUT_BODY = new Set(["GET", "HEAD"]);
|
|
9
|
-
function createFetchRequestFromExpress(req) {
|
|
10
|
-
const method = req.method?.toUpperCase() ?? "GET";
|
|
11
|
-
const url = `${buildOrigin(req)}${req.originalUrl ?? req.url ?? ""}`;
|
|
12
|
-
const headers = new Headers();
|
|
13
|
-
for (const [key, value] of Object.entries(req.headers)) {
|
|
14
|
-
if (value === void 0) continue;
|
|
15
|
-
if (Array.isArray(value)) value.forEach((v) => headers.append(key, v));
|
|
16
|
-
else headers.set(key, value);
|
|
17
|
-
}
|
|
18
|
-
const init = {
|
|
19
|
-
method,
|
|
20
|
-
headers
|
|
21
|
-
};
|
|
22
|
-
const hasParsedBody = req.body !== void 0 && req.body !== null;
|
|
23
|
-
const streamConsumed = isStreamConsumed(req, hasParsedBody);
|
|
24
|
-
if (!METHODS_WITHOUT_BODY.has(method)) if (req.readable !== false && !streamConsumed) {
|
|
25
|
-
init.body = Readable.toWeb(req);
|
|
26
|
-
init.duplex = "half";
|
|
27
|
-
} else if (hasParsedBody) {
|
|
28
|
-
const { body, contentType } = synthesizeBody(req.body);
|
|
29
|
-
if (contentType) headers.set("content-type", contentType);
|
|
30
|
-
headers.delete("content-length");
|
|
31
|
-
if (body !== void 0) init.body = body;
|
|
32
|
-
logger.info({
|
|
33
|
-
url,
|
|
34
|
-
method,
|
|
35
|
-
readable: req.readable,
|
|
36
|
-
readableEnded: req.readableEnded,
|
|
37
|
-
complete: req.complete
|
|
38
|
-
}, "Express request stream already consumed; synthesized body from parsed content");
|
|
39
|
-
} else {
|
|
40
|
-
headers.delete("content-length");
|
|
41
|
-
logger.warn({
|
|
42
|
-
url,
|
|
43
|
-
method
|
|
44
|
-
}, "Request stream already consumed but no body was available; sending empty body");
|
|
45
|
-
}
|
|
46
|
-
const controller = new AbortController();
|
|
47
|
-
const abort = () => controller.abort();
|
|
48
|
-
req.on("aborted", abort);
|
|
49
|
-
req.on("error", abort);
|
|
50
|
-
req.on("close", () => {
|
|
51
|
-
if (req.aborted) abort();
|
|
52
|
-
});
|
|
53
|
-
init.signal = controller.signal;
|
|
54
|
-
try {
|
|
55
|
-
return new Request(url, init);
|
|
56
|
-
} catch (error) {
|
|
57
|
-
if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {
|
|
58
|
-
headers.delete("content-length");
|
|
59
|
-
delete init.duplex;
|
|
60
|
-
if (hasParsedBody) {
|
|
61
|
-
const { body, contentType } = synthesizeBody(req.body);
|
|
62
|
-
if (contentType) headers.set("content-type", contentType);
|
|
63
|
-
init.body = body;
|
|
64
|
-
logger.info({
|
|
65
|
-
url,
|
|
66
|
-
method
|
|
67
|
-
}, "Request stream disturbed while constructing Request; reused parsed body");
|
|
68
|
-
} else {
|
|
69
|
-
init.body = void 0;
|
|
70
|
-
logger.warn({
|
|
71
|
-
url,
|
|
72
|
-
method
|
|
73
|
-
}, "Request stream was disturbed; falling back to empty body");
|
|
74
|
-
}
|
|
75
|
-
return new Request(url, init);
|
|
76
|
-
}
|
|
77
|
-
throw error;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
async function sendFetchResponse(res, response) {
|
|
81
|
-
res.status(response.status);
|
|
82
|
-
response.headers.forEach((value, key) => {
|
|
83
|
-
if (key.toLowerCase() === "content-length" && response.body !== null) return;
|
|
84
|
-
res.setHeader(key, value);
|
|
85
|
-
});
|
|
86
|
-
if (!response.body) {
|
|
87
|
-
res.end();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const nodeStream = Readable.fromWeb(response.body);
|
|
91
|
-
try {
|
|
92
|
-
await streamPipeline(nodeStream, res);
|
|
93
|
-
} catch (error) {
|
|
94
|
-
res.destroy(error);
|
|
95
|
-
throw error;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
function buildOrigin(req) {
|
|
99
|
-
return `${req.protocol || (req.secure ? "https" : "http")}://${req.get("host") ?? "localhost"}`;
|
|
100
|
-
}
|
|
101
|
-
function isStreamConsumed(req, hasParsedBody) {
|
|
102
|
-
const state = req._readableState;
|
|
103
|
-
return Boolean(hasParsedBody || req.readableEnded || req.complete || state?.ended || state?.endEmitted);
|
|
104
|
-
}
|
|
105
|
-
function synthesizeBody(body) {
|
|
106
|
-
if (Buffer.isBuffer(body) || body instanceof Uint8Array) return { body };
|
|
107
|
-
if (typeof body === "string") return { body };
|
|
108
|
-
if (typeof body === "object" && body !== void 0) return {
|
|
109
|
-
body: JSON.stringify(body),
|
|
110
|
-
contentType: "application/json"
|
|
111
|
-
};
|
|
112
|
-
return {};
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
//#endregion
|
|
116
|
-
export { createFetchRequestFromExpress, sendFetchResponse };
|
|
117
|
-
//# sourceMappingURL=express-utils.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"express-utils.mjs","names":[],"sources":["../../../../src/v2/runtime/endpoints/express-utils.ts"],"sourcesContent":["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 \"@copilotkit/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"],"mappings":"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"}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
require("reflect-metadata");
|
|
2
|
-
const require_runtime = require('../../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_runtime$1 = require('../../runtime.cjs');
|
|
4
|
-
const require_json_response = require('../shared/json-response.cjs');
|
|
5
|
-
const require_intelligence_utils = require('../shared/intelligence-utils.cjs');
|
|
6
|
-
const require_resolve_intelligence_user = require('../shared/resolve-intelligence-user.cjs');
|
|
7
|
-
let _copilotkit_shared = require("@copilotkit/shared");
|
|
8
|
-
|
|
9
|
-
//#region src/v2/runtime/handlers/intelligence/threads.ts
|
|
10
|
-
async function parseJsonBody(request) {
|
|
11
|
-
try {
|
|
12
|
-
return await request.json();
|
|
13
|
-
} catch (error) {
|
|
14
|
-
_copilotkit_shared.logger.error({ err: error }, "Malformed JSON in request body");
|
|
15
|
-
return require_json_response.errorResponse("Invalid request body", 400);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function requireIntelligenceRuntime(runtime) {
|
|
19
|
-
if (!require_runtime$1.isIntelligenceRuntime(runtime)) return require_json_response.errorResponse("Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.", 422);
|
|
20
|
-
return runtime;
|
|
21
|
-
}
|
|
22
|
-
async function resolveThreadMutationContext(runtime, request) {
|
|
23
|
-
const body = await parseJsonBody(request);
|
|
24
|
-
if (require_json_response.isHandlerResponse(body)) return body;
|
|
25
|
-
const user = await require_resolve_intelligence_user.resolveIntelligenceUser({
|
|
26
|
-
runtime,
|
|
27
|
-
request
|
|
28
|
-
});
|
|
29
|
-
if (require_json_response.isHandlerResponse(user)) return user;
|
|
30
|
-
const agentId = body.agentId;
|
|
31
|
-
if (!require_intelligence_utils.isValidIdentifier(agentId)) return require_json_response.errorResponse("Valid agentId is required", 400);
|
|
32
|
-
return {
|
|
33
|
-
body,
|
|
34
|
-
userId: user.id,
|
|
35
|
-
agentId
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
async function handleListThreads({ runtime, request }) {
|
|
39
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
40
|
-
if (require_json_response.isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
41
|
-
try {
|
|
42
|
-
const url = new URL(request.url);
|
|
43
|
-
const agentId = url.searchParams.get("agentId");
|
|
44
|
-
const includeArchived = url.searchParams.get("includeArchived") === "true";
|
|
45
|
-
const limitParam = url.searchParams.get("limit");
|
|
46
|
-
const cursor = url.searchParams.get("cursor");
|
|
47
|
-
const user = await require_resolve_intelligence_user.resolveIntelligenceUser({
|
|
48
|
-
runtime: intelligenceRuntime,
|
|
49
|
-
request
|
|
50
|
-
});
|
|
51
|
-
if (require_json_response.isHandlerResponse(user)) return user;
|
|
52
|
-
if (!require_intelligence_utils.isValidIdentifier(agentId)) return require_json_response.errorResponse("Valid agentId query param is required", 400);
|
|
53
|
-
const data = await intelligenceRuntime.intelligence.listThreads({
|
|
54
|
-
userId: user.id,
|
|
55
|
-
agentId,
|
|
56
|
-
...includeArchived ? { includeArchived: true } : {},
|
|
57
|
-
...limitParam ? { limit: Number(limitParam) } : {},
|
|
58
|
-
...cursor ? { cursor } : {}
|
|
59
|
-
});
|
|
60
|
-
return Response.json(data);
|
|
61
|
-
} catch (error) {
|
|
62
|
-
_copilotkit_shared.logger.error({ err: error }, "Error listing threads");
|
|
63
|
-
return require_json_response.errorResponse("Failed to list threads", 500);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async function handleUpdateThread({ runtime, request, threadId }) {
|
|
67
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
68
|
-
if (require_json_response.isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
69
|
-
try {
|
|
70
|
-
const mutation = await resolveThreadMutationContext(intelligenceRuntime, request);
|
|
71
|
-
if (require_json_response.isHandlerResponse(mutation)) return mutation;
|
|
72
|
-
const updates = { ...mutation.body };
|
|
73
|
-
delete updates.agentId;
|
|
74
|
-
delete updates.userId;
|
|
75
|
-
const thread = await intelligenceRuntime.intelligence.updateThread({
|
|
76
|
-
threadId,
|
|
77
|
-
userId: mutation.userId,
|
|
78
|
-
agentId: mutation.agentId,
|
|
79
|
-
updates
|
|
80
|
-
});
|
|
81
|
-
return Response.json(thread);
|
|
82
|
-
} catch (error) {
|
|
83
|
-
_copilotkit_shared.logger.error({
|
|
84
|
-
err: error,
|
|
85
|
-
threadId
|
|
86
|
-
}, "Error updating thread");
|
|
87
|
-
return require_json_response.errorResponse("Failed to update thread", 500);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async function handleSubscribeToThreads({ runtime, request }) {
|
|
91
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
92
|
-
if (require_json_response.isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
93
|
-
try {
|
|
94
|
-
const user = await require_resolve_intelligence_user.resolveIntelligenceUser({
|
|
95
|
-
runtime: intelligenceRuntime,
|
|
96
|
-
request
|
|
97
|
-
});
|
|
98
|
-
if (require_json_response.isHandlerResponse(user)) return user;
|
|
99
|
-
const credentials = await intelligenceRuntime.intelligence.ɵsubscribeToThreads({ userId: user.id });
|
|
100
|
-
return Response.json({ joinToken: credentials.joinToken });
|
|
101
|
-
} catch (error) {
|
|
102
|
-
_copilotkit_shared.logger.error({ err: error }, "Error subscribing to threads");
|
|
103
|
-
return require_json_response.errorResponse("Failed to subscribe to threads", 500);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async function handleArchiveThread({ runtime, request, threadId }) {
|
|
107
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
108
|
-
if (require_json_response.isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
109
|
-
try {
|
|
110
|
-
const mutation = await resolveThreadMutationContext(intelligenceRuntime, request);
|
|
111
|
-
if (require_json_response.isHandlerResponse(mutation)) return mutation;
|
|
112
|
-
await intelligenceRuntime.intelligence.archiveThread({
|
|
113
|
-
threadId,
|
|
114
|
-
userId: mutation.userId,
|
|
115
|
-
agentId: mutation.agentId
|
|
116
|
-
});
|
|
117
|
-
return Response.json({
|
|
118
|
-
threadId,
|
|
119
|
-
archived: true
|
|
120
|
-
});
|
|
121
|
-
} catch (error) {
|
|
122
|
-
_copilotkit_shared.logger.error({
|
|
123
|
-
err: error,
|
|
124
|
-
threadId
|
|
125
|
-
}, "Error archiving thread");
|
|
126
|
-
return require_json_response.errorResponse("Failed to archive thread", 500);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
async function handleDeleteThread({ runtime, request, threadId }) {
|
|
130
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
131
|
-
if (require_json_response.isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
132
|
-
try {
|
|
133
|
-
const mutation = await resolveThreadMutationContext(intelligenceRuntime, request);
|
|
134
|
-
if (require_json_response.isHandlerResponse(mutation)) return mutation;
|
|
135
|
-
await intelligenceRuntime.intelligence.deleteThread({
|
|
136
|
-
threadId,
|
|
137
|
-
userId: mutation.userId,
|
|
138
|
-
agentId: mutation.agentId
|
|
139
|
-
});
|
|
140
|
-
return Response.json({
|
|
141
|
-
threadId,
|
|
142
|
-
deleted: true
|
|
143
|
-
});
|
|
144
|
-
} catch (error) {
|
|
145
|
-
_copilotkit_shared.logger.error({
|
|
146
|
-
err: error,
|
|
147
|
-
threadId
|
|
148
|
-
}, "Error deleting thread");
|
|
149
|
-
return require_json_response.errorResponse("Failed to delete thread", 500);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
//#endregion
|
|
154
|
-
exports.handleArchiveThread = handleArchiveThread;
|
|
155
|
-
exports.handleDeleteThread = handleDeleteThread;
|
|
156
|
-
exports.handleListThreads = handleListThreads;
|
|
157
|
-
exports.handleSubscribeToThreads = handleSubscribeToThreads;
|
|
158
|
-
exports.handleUpdateThread = handleUpdateThread;
|
|
159
|
-
//# sourceMappingURL=threads.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"threads.cjs","names":["errorResponse","isIntelligenceRuntime","isHandlerResponse","resolveIntelligenceUser","isValidIdentifier"],"sources":["../../../../../src/v2/runtime/handlers/intelligence/threads.ts"],"sourcesContent":["import {\n CopilotIntelligenceRuntimeLike,\n CopilotRuntimeLike,\n isIntelligenceRuntime,\n} from \"../../runtime\";\nimport { logger } from \"@copilotkit/shared\";\nimport { errorResponse, isHandlerResponse } from \"../shared/json-response\";\nimport { isValidIdentifier } from \"../shared/intelligence-utils\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\n\ninterface ThreadsHandlerParams {\n runtime: CopilotRuntimeLike;\n request: Request;\n}\n\ninterface ThreadMutationParams extends ThreadsHandlerParams {\n threadId: string;\n}\n\ninterface ThreadMutationContext {\n userId: string;\n agentId: string;\n body: Record<string, unknown>;\n}\n\nasync function parseJsonBody(\n request: Request,\n): Promise<Record<string, unknown> | Response> {\n try {\n return (await request.json()) as Record<string, unknown>;\n } catch (error) {\n logger.error({ err: error }, \"Malformed JSON in request body\");\n return errorResponse(\"Invalid request body\", 400);\n }\n}\n\nfunction requireIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): CopilotIntelligenceRuntimeLike | Response {\n if (!isIntelligenceRuntime(runtime)) {\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n }\n\n return runtime;\n}\n\nasync function resolveThreadMutationContext(\n runtime: CopilotIntelligenceRuntimeLike,\n request: Request,\n): Promise<ThreadMutationContext | Response> {\n const body = await parseJsonBody(request);\n if (isHandlerResponse(body)) return body;\n\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const agentId = body.agentId;\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId is required\", 400);\n }\n\n return {\n body,\n userId: user.id,\n agentId,\n };\n}\n\nexport async function handleListThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n const includeArchived = url.searchParams.get(\"includeArchived\") === \"true\";\n const limitParam = url.searchParams.get(\"limit\");\n const cursor = url.searchParams.get(\"cursor\");\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId query param is required\", 400);\n }\n\n const data = await intelligenceRuntime.intelligence.listThreads({\n userId: user.id,\n agentId,\n ...(includeArchived ? { includeArchived: true } : {}),\n ...(limitParam ? { limit: Number(limitParam) } : {}),\n ...(cursor ? { cursor } : {}),\n });\n\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error }, \"Error listing threads\");\n return errorResponse(\"Failed to list threads\", 500);\n }\n}\n\nexport async function handleUpdateThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n const updates = { ...mutation.body };\n delete updates.agentId;\n delete updates.userId;\n\n const thread = await intelligenceRuntime.intelligence.updateThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n updates,\n });\n\n return Response.json(thread);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error updating thread\");\n return errorResponse(\"Failed to update thread\", 500);\n }\n}\n\nexport async function handleSubscribeToThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n const credentials =\n await intelligenceRuntime.intelligence.ɵsubscribeToThreads({\n userId: user.id,\n });\n\n return Response.json({ joinToken: credentials.joinToken });\n } catch (error) {\n logger.error({ err: error }, \"Error subscribing to threads\");\n return errorResponse(\"Failed to subscribe to threads\", 500);\n }\n}\n\nexport async function handleArchiveThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.archiveThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, archived: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error archiving thread\");\n return errorResponse(\"Failed to archive thread\", 500);\n }\n}\n\nexport async function handleDeleteThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.deleteThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, deleted: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error deleting thread\");\n return errorResponse(\"Failed to delete thread\", 500);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
|
-
import { isIntelligenceRuntime } from "../../runtime.mjs";
|
|
3
|
-
import { errorResponse, isHandlerResponse } from "../shared/json-response.mjs";
|
|
4
|
-
import { isValidIdentifier } from "../shared/intelligence-utils.mjs";
|
|
5
|
-
import { resolveIntelligenceUser } from "../shared/resolve-intelligence-user.mjs";
|
|
6
|
-
import { logger } from "@copilotkit/shared";
|
|
7
|
-
|
|
8
|
-
//#region src/v2/runtime/handlers/intelligence/threads.ts
|
|
9
|
-
async function parseJsonBody(request) {
|
|
10
|
-
try {
|
|
11
|
-
return await request.json();
|
|
12
|
-
} catch (error) {
|
|
13
|
-
logger.error({ err: error }, "Malformed JSON in request body");
|
|
14
|
-
return errorResponse("Invalid request body", 400);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function requireIntelligenceRuntime(runtime) {
|
|
18
|
-
if (!isIntelligenceRuntime(runtime)) return errorResponse("Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.", 422);
|
|
19
|
-
return runtime;
|
|
20
|
-
}
|
|
21
|
-
async function resolveThreadMutationContext(runtime, request) {
|
|
22
|
-
const body = await parseJsonBody(request);
|
|
23
|
-
if (isHandlerResponse(body)) return body;
|
|
24
|
-
const user = await resolveIntelligenceUser({
|
|
25
|
-
runtime,
|
|
26
|
-
request
|
|
27
|
-
});
|
|
28
|
-
if (isHandlerResponse(user)) return user;
|
|
29
|
-
const agentId = body.agentId;
|
|
30
|
-
if (!isValidIdentifier(agentId)) return errorResponse("Valid agentId is required", 400);
|
|
31
|
-
return {
|
|
32
|
-
body,
|
|
33
|
-
userId: user.id,
|
|
34
|
-
agentId
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
async function handleListThreads({ runtime, request }) {
|
|
38
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
39
|
-
if (isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
40
|
-
try {
|
|
41
|
-
const url = new URL(request.url);
|
|
42
|
-
const agentId = url.searchParams.get("agentId");
|
|
43
|
-
const includeArchived = url.searchParams.get("includeArchived") === "true";
|
|
44
|
-
const limitParam = url.searchParams.get("limit");
|
|
45
|
-
const cursor = url.searchParams.get("cursor");
|
|
46
|
-
const user = await resolveIntelligenceUser({
|
|
47
|
-
runtime: intelligenceRuntime,
|
|
48
|
-
request
|
|
49
|
-
});
|
|
50
|
-
if (isHandlerResponse(user)) return user;
|
|
51
|
-
if (!isValidIdentifier(agentId)) return errorResponse("Valid agentId query param is required", 400);
|
|
52
|
-
const data = await intelligenceRuntime.intelligence.listThreads({
|
|
53
|
-
userId: user.id,
|
|
54
|
-
agentId,
|
|
55
|
-
...includeArchived ? { includeArchived: true } : {},
|
|
56
|
-
...limitParam ? { limit: Number(limitParam) } : {},
|
|
57
|
-
...cursor ? { cursor } : {}
|
|
58
|
-
});
|
|
59
|
-
return Response.json(data);
|
|
60
|
-
} catch (error) {
|
|
61
|
-
logger.error({ err: error }, "Error listing threads");
|
|
62
|
-
return errorResponse("Failed to list threads", 500);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
async function handleUpdateThread({ runtime, request, threadId }) {
|
|
66
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
67
|
-
if (isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
68
|
-
try {
|
|
69
|
-
const mutation = await resolveThreadMutationContext(intelligenceRuntime, request);
|
|
70
|
-
if (isHandlerResponse(mutation)) return mutation;
|
|
71
|
-
const updates = { ...mutation.body };
|
|
72
|
-
delete updates.agentId;
|
|
73
|
-
delete updates.userId;
|
|
74
|
-
const thread = await intelligenceRuntime.intelligence.updateThread({
|
|
75
|
-
threadId,
|
|
76
|
-
userId: mutation.userId,
|
|
77
|
-
agentId: mutation.agentId,
|
|
78
|
-
updates
|
|
79
|
-
});
|
|
80
|
-
return Response.json(thread);
|
|
81
|
-
} catch (error) {
|
|
82
|
-
logger.error({
|
|
83
|
-
err: error,
|
|
84
|
-
threadId
|
|
85
|
-
}, "Error updating thread");
|
|
86
|
-
return errorResponse("Failed to update thread", 500);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
async function handleSubscribeToThreads({ runtime, request }) {
|
|
90
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
91
|
-
if (isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
92
|
-
try {
|
|
93
|
-
const user = await resolveIntelligenceUser({
|
|
94
|
-
runtime: intelligenceRuntime,
|
|
95
|
-
request
|
|
96
|
-
});
|
|
97
|
-
if (isHandlerResponse(user)) return user;
|
|
98
|
-
const credentials = await intelligenceRuntime.intelligence.ɵsubscribeToThreads({ userId: user.id });
|
|
99
|
-
return Response.json({ joinToken: credentials.joinToken });
|
|
100
|
-
} catch (error) {
|
|
101
|
-
logger.error({ err: error }, "Error subscribing to threads");
|
|
102
|
-
return errorResponse("Failed to subscribe to threads", 500);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async function handleArchiveThread({ runtime, request, threadId }) {
|
|
106
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
107
|
-
if (isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
108
|
-
try {
|
|
109
|
-
const mutation = await resolveThreadMutationContext(intelligenceRuntime, request);
|
|
110
|
-
if (isHandlerResponse(mutation)) return mutation;
|
|
111
|
-
await intelligenceRuntime.intelligence.archiveThread({
|
|
112
|
-
threadId,
|
|
113
|
-
userId: mutation.userId,
|
|
114
|
-
agentId: mutation.agentId
|
|
115
|
-
});
|
|
116
|
-
return Response.json({
|
|
117
|
-
threadId,
|
|
118
|
-
archived: true
|
|
119
|
-
});
|
|
120
|
-
} catch (error) {
|
|
121
|
-
logger.error({
|
|
122
|
-
err: error,
|
|
123
|
-
threadId
|
|
124
|
-
}, "Error archiving thread");
|
|
125
|
-
return errorResponse("Failed to archive thread", 500);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
async function handleDeleteThread({ runtime, request, threadId }) {
|
|
129
|
-
const intelligenceRuntime = requireIntelligenceRuntime(runtime);
|
|
130
|
-
if (isHandlerResponse(intelligenceRuntime)) return intelligenceRuntime;
|
|
131
|
-
try {
|
|
132
|
-
const mutation = await resolveThreadMutationContext(intelligenceRuntime, request);
|
|
133
|
-
if (isHandlerResponse(mutation)) return mutation;
|
|
134
|
-
await intelligenceRuntime.intelligence.deleteThread({
|
|
135
|
-
threadId,
|
|
136
|
-
userId: mutation.userId,
|
|
137
|
-
agentId: mutation.agentId
|
|
138
|
-
});
|
|
139
|
-
return Response.json({
|
|
140
|
-
threadId,
|
|
141
|
-
deleted: true
|
|
142
|
-
});
|
|
143
|
-
} catch (error) {
|
|
144
|
-
logger.error({
|
|
145
|
-
err: error,
|
|
146
|
-
threadId
|
|
147
|
-
}, "Error deleting thread");
|
|
148
|
-
return errorResponse("Failed to delete thread", 500);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
//#endregion
|
|
153
|
-
export { handleArchiveThread, handleDeleteThread, handleListThreads, handleSubscribeToThreads, handleUpdateThread };
|
|
154
|
-
//# sourceMappingURL=threads.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"threads.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/intelligence/threads.ts"],"sourcesContent":["import {\n CopilotIntelligenceRuntimeLike,\n CopilotRuntimeLike,\n isIntelligenceRuntime,\n} from \"../../runtime\";\nimport { logger } from \"@copilotkit/shared\";\nimport { errorResponse, isHandlerResponse } from \"../shared/json-response\";\nimport { isValidIdentifier } from \"../shared/intelligence-utils\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\n\ninterface ThreadsHandlerParams {\n runtime: CopilotRuntimeLike;\n request: Request;\n}\n\ninterface ThreadMutationParams extends ThreadsHandlerParams {\n threadId: string;\n}\n\ninterface ThreadMutationContext {\n userId: string;\n agentId: string;\n body: Record<string, unknown>;\n}\n\nasync function parseJsonBody(\n request: Request,\n): Promise<Record<string, unknown> | Response> {\n try {\n return (await request.json()) as Record<string, unknown>;\n } catch (error) {\n logger.error({ err: error }, \"Malformed JSON in request body\");\n return errorResponse(\"Invalid request body\", 400);\n }\n}\n\nfunction requireIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): CopilotIntelligenceRuntimeLike | Response {\n if (!isIntelligenceRuntime(runtime)) {\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n }\n\n return runtime;\n}\n\nasync function resolveThreadMutationContext(\n runtime: CopilotIntelligenceRuntimeLike,\n request: Request,\n): Promise<ThreadMutationContext | Response> {\n const body = await parseJsonBody(request);\n if (isHandlerResponse(body)) return body;\n\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const agentId = body.agentId;\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId is required\", 400);\n }\n\n return {\n body,\n userId: user.id,\n agentId,\n };\n}\n\nexport async function handleListThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n const includeArchived = url.searchParams.get(\"includeArchived\") === \"true\";\n const limitParam = url.searchParams.get(\"limit\");\n const cursor = url.searchParams.get(\"cursor\");\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId query param is required\", 400);\n }\n\n const data = await intelligenceRuntime.intelligence.listThreads({\n userId: user.id,\n agentId,\n ...(includeArchived ? { includeArchived: true } : {}),\n ...(limitParam ? { limit: Number(limitParam) } : {}),\n ...(cursor ? { cursor } : {}),\n });\n\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error }, \"Error listing threads\");\n return errorResponse(\"Failed to list threads\", 500);\n }\n}\n\nexport async function handleUpdateThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n const updates = { ...mutation.body };\n delete updates.agentId;\n delete updates.userId;\n\n const thread = await intelligenceRuntime.intelligence.updateThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n updates,\n });\n\n return Response.json(thread);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error updating thread\");\n return errorResponse(\"Failed to update thread\", 500);\n }\n}\n\nexport async function handleSubscribeToThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n const credentials =\n await intelligenceRuntime.intelligence.ɵsubscribeToThreads({\n userId: user.id,\n });\n\n return Response.json({ joinToken: credentials.joinToken });\n } catch (error) {\n logger.error({ err: error }, \"Error subscribing to threads\");\n return errorResponse(\"Failed to subscribe to threads\", 500);\n }\n}\n\nexport async function handleArchiveThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.archiveThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, archived: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error archiving thread\");\n return errorResponse(\"Failed to archive thread\", 500);\n }\n}\n\nexport async function handleDeleteThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.deleteThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, deleted: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error deleting thread\");\n return errorResponse(\"Failed to delete thread\", 500);\n }\n}\n"],"mappings":"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"}
|