@copilotkit/runtime 1.54.1 → 1.55.0-next.7
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/.eslintrc.js +4 -4
- package/CHANGELOG.md +113 -113
- package/dist/_virtual/_rolldown/runtime.mjs +25 -1
- package/dist/agent/index.cjs +643 -0
- package/dist/agent/index.cjs.map +1 -0
- package/dist/agent/index.d.cts +263 -0
- package/dist/agent/index.d.cts.map +1 -0
- package/dist/agent/index.d.mts +263 -0
- package/dist/agent/index.d.mts.map +1 -0
- package/dist/agent/index.mjs +635 -0
- package/dist/agent/index.mjs.map +1 -0
- package/dist/graphql/message-conversion/agui-to-gql.cjs.map +1 -1
- package/dist/graphql/message-conversion/agui-to-gql.mjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.cjs +2 -2
- package/dist/lib/integrations/nextjs/app-router.cjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs.map +1 -1
- package/dist/lib/integrations/node-http/index.cjs +2 -3
- package/dist/lib/integrations/node-http/index.cjs.map +1 -1
- package/dist/lib/integrations/node-http/index.mjs +1 -1
- package/dist/lib/integrations/node-http/index.mjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +2 -2
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts +3 -3
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs +1 -1
- package/dist/lib/runtime/copilot-runtime.cjs +7 -5
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts +10 -8
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts +10 -8
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +7 -5
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.cjs +2 -2
- package/dist/lib/runtime/telemetry-agent-runner.cjs.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.cts +2 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.cts.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.mts +2 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.mts.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.mjs +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.mjs.map +1 -1
- package/dist/lib/telemetry-client.cjs +1 -1
- package/dist/lib/telemetry-client.mjs +1 -1
- package/dist/package.cjs +21 -4
- package/dist/package.mjs +21 -4
- package/dist/service-adapters/anthropic/anthropic-adapter.d.mts +1 -1
- package/dist/v2/index.cjs +41 -15
- package/dist/v2/index.d.cts +14 -2
- package/dist/v2/index.d.mts +14 -2
- package/dist/v2/index.mjs +13 -4
- package/dist/v2/runtime/endpoints/express-single.cjs +190 -0
- package/dist/v2/runtime/endpoints/express-single.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/express-single.d.cts +16 -0
- package/dist/v2/runtime/endpoints/express-single.d.cts.map +1 -0
- package/dist/v2/runtime/endpoints/express-single.d.mts +16 -0
- package/dist/v2/runtime/endpoints/express-single.d.mts.map +1 -0
- package/dist/v2/runtime/endpoints/express-single.mjs +187 -0
- package/dist/v2/runtime/endpoints/express-single.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/express-utils.cjs +119 -0
- package/dist/v2/runtime/endpoints/express-utils.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/express-utils.mjs +117 -0
- package/dist/v2/runtime/endpoints/express-utils.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/express.cjs +217 -0
- package/dist/v2/runtime/endpoints/express.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/express.d.cts +16 -0
- package/dist/v2/runtime/endpoints/express.d.cts.map +1 -0
- package/dist/v2/runtime/endpoints/express.d.mts +16 -0
- package/dist/v2/runtime/endpoints/express.d.mts.map +1 -0
- package/dist/v2/runtime/endpoints/express.mjs +214 -0
- package/dist/v2/runtime/endpoints/express.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/hono-single.cjs +141 -0
- package/dist/v2/runtime/endpoints/hono-single.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/hono-single.d.cts +41 -0
- package/dist/v2/runtime/endpoints/hono-single.d.cts.map +1 -0
- package/dist/v2/runtime/endpoints/hono-single.d.mts +41 -0
- package/dist/v2/runtime/endpoints/hono-single.d.mts.map +1 -0
- package/dist/v2/runtime/endpoints/hono-single.mjs +140 -0
- package/dist/v2/runtime/endpoints/hono-single.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/hono.cjs +248 -0
- package/dist/v2/runtime/endpoints/hono.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/hono.d.cts +164 -0
- package/dist/v2/runtime/endpoints/hono.d.cts.map +1 -0
- package/dist/v2/runtime/endpoints/hono.d.mts +164 -0
- package/dist/v2/runtime/endpoints/hono.d.mts.map +1 -0
- package/dist/v2/runtime/endpoints/hono.mjs +247 -0
- package/dist/v2/runtime/endpoints/hono.mjs.map +1 -0
- package/dist/v2/runtime/endpoints/index.d.cts +5 -0
- package/dist/v2/runtime/endpoints/index.d.mts +5 -0
- package/dist/v2/runtime/endpoints/single-route-helpers.cjs +68 -0
- package/dist/v2/runtime/endpoints/single-route-helpers.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/single-route-helpers.mjs +65 -0
- package/dist/v2/runtime/endpoints/single-route-helpers.mjs.map +1 -0
- package/dist/v2/runtime/handlers/get-runtime-info.cjs +51 -0
- package/dist/v2/runtime/handlers/get-runtime-info.cjs.map +1 -0
- package/dist/v2/runtime/handlers/get-runtime-info.mjs +51 -0
- package/dist/v2/runtime/handlers/get-runtime-info.mjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-connect.cjs +49 -0
- package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-connect.mjs +49 -0
- package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-run.cjs +61 -0
- package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-run.mjs +61 -0
- package/dist/v2/runtime/handlers/handle-run.mjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-stop.cjs +47 -0
- package/dist/v2/runtime/handlers/handle-stop.cjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-stop.mjs +46 -0
- package/dist/v2/runtime/handlers/handle-stop.mjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-transcribe.cjs +112 -0
- package/dist/v2/runtime/handlers/handle-transcribe.cjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-transcribe.mjs +111 -0
- package/dist/v2/runtime/handlers/handle-transcribe.mjs.map +1 -0
- package/dist/v2/runtime/handlers/header-utils.cjs +26 -0
- package/dist/v2/runtime/handlers/header-utils.cjs.map +1 -0
- package/dist/v2/runtime/handlers/header-utils.mjs +25 -0
- package/dist/v2/runtime/handlers/header-utils.mjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/connect.cjs +37 -0
- package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/connect.mjs +37 -0
- package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/run.cjs +89 -0
- package/dist/v2/runtime/handlers/intelligence/run.cjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/run.mjs +88 -0
- package/dist/v2/runtime/handlers/intelligence/run.mjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/thread-names.cjs +146 -0
- package/dist/v2/runtime/handlers/intelligence/thread-names.cjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/thread-names.mjs +145 -0
- package/dist/v2/runtime/handlers/intelligence/thread-names.mjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/threads.cjs +159 -0
- package/dist/v2/runtime/handlers/intelligence/threads.cjs.map +1 -0
- package/dist/v2/runtime/handlers/intelligence/threads.mjs +154 -0
- package/dist/v2/runtime/handlers/intelligence/threads.mjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +74 -0
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +70 -0
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/intelligence-utils.cjs +21 -0
- package/dist/v2/runtime/handlers/shared/intelligence-utils.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/intelligence-utils.mjs +20 -0
- package/dist/v2/runtime/handlers/shared/intelligence-utils.mjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/json-response.cjs +12 -0
- package/dist/v2/runtime/handlers/shared/json-response.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/json-response.mjs +10 -0
- package/dist/v2/runtime/handlers/shared/json-response.mjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs +20 -0
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs +20 -0
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/sse-response.cjs +69 -0
- package/dist/v2/runtime/handlers/shared/sse-response.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/sse-response.mjs +68 -0
- package/dist/v2/runtime/handlers/shared/sse-response.mjs.map +1 -0
- package/dist/v2/runtime/handlers/sse/connect.cjs +18 -0
- package/dist/v2/runtime/handlers/sse/connect.cjs.map +1 -0
- package/dist/v2/runtime/handlers/sse/connect.mjs +18 -0
- package/dist/v2/runtime/handlers/sse/connect.mjs.map +1 -0
- package/dist/v2/runtime/handlers/sse/run.cjs +18 -0
- package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -0
- package/dist/v2/runtime/handlers/sse/run.mjs +18 -0
- package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -0
- package/dist/v2/runtime/index.d.cts +13 -0
- package/dist/v2/runtime/index.d.mts +14 -0
- package/dist/v2/runtime/intelligence-platform/client.cjs +333 -0
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/client.d.cts +336 -0
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/client.d.mts +336 -0
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/client.mjs +331 -0
- package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/index.d.mts +2 -0
- package/dist/v2/runtime/middleware-sse-parser.cjs +138 -0
- package/dist/v2/runtime/middleware-sse-parser.cjs.map +1 -0
- package/dist/v2/runtime/middleware-sse-parser.d.cts +22 -0
- package/dist/v2/runtime/middleware-sse-parser.d.cts.map +1 -0
- package/dist/v2/runtime/middleware-sse-parser.d.mts +22 -0
- package/dist/v2/runtime/middleware-sse-parser.d.mts.map +1 -0
- package/dist/v2/runtime/middleware-sse-parser.mjs +137 -0
- package/dist/v2/runtime/middleware-sse-parser.mjs.map +1 -0
- package/dist/v2/runtime/middleware.cjs +35 -0
- package/dist/v2/runtime/middleware.cjs.map +1 -0
- package/dist/v2/runtime/middleware.d.cts +32 -0
- package/dist/v2/runtime/middleware.d.cts.map +1 -0
- package/dist/v2/runtime/middleware.d.mts +32 -0
- package/dist/v2/runtime/middleware.d.mts.map +1 -0
- package/dist/v2/runtime/middleware.mjs +33 -0
- package/dist/v2/runtime/middleware.mjs.map +1 -0
- package/dist/v2/runtime/runner/agent-runner.cjs +8 -0
- package/dist/v2/runtime/runner/agent-runner.cjs.map +1 -0
- package/dist/v2/runtime/runner/agent-runner.d.cts +32 -0
- package/dist/v2/runtime/runner/agent-runner.d.cts.map +1 -0
- package/dist/v2/runtime/runner/agent-runner.d.mts +32 -0
- package/dist/v2/runtime/runner/agent-runner.d.mts.map +1 -0
- package/dist/v2/runtime/runner/agent-runner.mjs +7 -0
- package/dist/v2/runtime/runner/agent-runner.mjs.map +1 -0
- package/dist/v2/runtime/runner/in-memory.cjs +223 -0
- package/dist/v2/runtime/runner/in-memory.cjs.map +1 -0
- package/dist/v2/runtime/runner/in-memory.d.cts +15 -0
- package/dist/v2/runtime/runner/in-memory.d.cts.map +1 -0
- package/dist/v2/runtime/runner/in-memory.d.mts +15 -0
- package/dist/v2/runtime/runner/in-memory.d.mts.map +1 -0
- package/dist/v2/runtime/runner/in-memory.mjs +222 -0
- package/dist/v2/runtime/runner/in-memory.mjs.map +1 -0
- package/dist/v2/runtime/runner/index.d.cts +6 -0
- package/dist/v2/runtime/runner/index.d.mts +6 -0
- package/dist/v2/runtime/runner/index.mjs +7 -0
- package/dist/v2/runtime/runner/intelligence.cjs +246 -0
- package/dist/v2/runtime/runner/intelligence.cjs.map +1 -0
- package/dist/v2/runtime/runner/intelligence.d.cts +57 -0
- package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -0
- package/dist/v2/runtime/runner/intelligence.d.mts +57 -0
- package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -0
- package/dist/v2/runtime/runner/intelligence.mjs +245 -0
- package/dist/v2/runtime/runner/intelligence.mjs.map +1 -0
- package/dist/v2/runtime/runtime.cjs +101 -0
- package/dist/v2/runtime/runtime.cjs.map +1 -0
- package/dist/v2/runtime/runtime.d.cts +132 -0
- package/dist/v2/runtime/runtime.d.cts.map +1 -0
- package/dist/v2/runtime/runtime.d.mts +133 -0
- package/dist/v2/runtime/runtime.d.mts.map +1 -0
- package/dist/v2/runtime/runtime.mjs +97 -0
- package/dist/v2/runtime/runtime.mjs.map +1 -0
- package/dist/v2/runtime/telemetry/scarf-client.cjs +32 -0
- package/dist/v2/runtime/telemetry/scarf-client.cjs.map +1 -0
- package/dist/v2/runtime/telemetry/scarf-client.mjs +32 -0
- package/dist/v2/runtime/telemetry/scarf-client.mjs.map +1 -0
- package/dist/v2/runtime/telemetry/telemetry-client.cjs +35 -0
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -0
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +35 -0
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -0
- package/dist/v2/runtime/transcription-service/transcription-service.cjs +8 -0
- package/dist/v2/runtime/transcription-service/transcription-service.cjs.map +1 -0
- package/dist/v2/runtime/transcription-service/transcription-service.d.cts +15 -0
- package/dist/v2/runtime/transcription-service/transcription-service.d.cts.map +1 -0
- package/dist/v2/runtime/transcription-service/transcription-service.d.mts +15 -0
- package/dist/v2/runtime/transcription-service/transcription-service.d.mts.map +1 -0
- package/dist/v2/runtime/transcription-service/transcription-service.mjs +7 -0
- package/dist/v2/runtime/transcription-service/transcription-service.mjs.map +1 -0
- package/package.json +24 -7
- package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +116 -0
- package/src/agent/__tests__/basic-agent.test.ts +1248 -0
- package/src/agent/__tests__/config-tools-execution.test.ts +516 -0
- package/src/agent/__tests__/mcp-clients.test.ts +260 -0
- package/src/agent/__tests__/property-overrides.test.ts +598 -0
- package/src/agent/__tests__/standard-schema-tools.test.ts +313 -0
- package/src/agent/__tests__/standard-schema-types.test.ts +158 -0
- package/src/agent/__tests__/state-tools.test.ts +436 -0
- package/src/agent/__tests__/test-helpers.ts +178 -0
- package/src/agent/__tests__/utils.test.ts +536 -0
- package/src/agent/__tests__/zod-regression.test.ts +350 -0
- package/src/agent/index.ts +1305 -0
- package/src/graphql/message-conversion/agui-to-gql.test.ts +1 -1
- package/src/graphql/message-conversion/agui-to-gql.ts +1 -1
- package/src/graphql/message-conversion/gql-to-agui.ts +1 -1
- package/src/graphql/message-conversion/roundtrip-conversion.test.ts +1 -1
- package/src/lib/integrations/nextjs/app-router.ts +2 -2
- package/src/lib/integrations/node-http/index.ts +2 -2
- package/src/lib/runtime/copilot-runtime.ts +3 -5
- package/src/lib/runtime/telemetry-agent-runner.ts +1 -1
- package/src/service-adapters/conversion.test.ts +1 -1
- package/src/service-adapters/conversion.ts +1 -28
- package/src/v2/index.ts +5 -2
- package/src/v2/runtime/__tests__/cors-credentials.test.ts +320 -0
- package/src/v2/runtime/__tests__/express-abort-signal.test.ts +25 -0
- package/src/v2/runtime/__tests__/express-body-order.test.ts +76 -0
- package/src/v2/runtime/__tests__/express-single-sse.test.ts +122 -0
- package/src/v2/runtime/__tests__/get-runtime-info.test.ts +141 -0
- package/src/v2/runtime/__tests__/handle-connect.test.ts +423 -0
- package/src/v2/runtime/__tests__/handle-run.test.ts +910 -0
- package/src/v2/runtime/__tests__/handle-threads.test.ts +388 -0
- package/src/v2/runtime/__tests__/handle-transcribe.test.ts +301 -0
- package/src/v2/runtime/__tests__/header-utils.test.ts +88 -0
- package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +230 -0
- package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +1030 -0
- package/src/v2/runtime/__tests__/middleware-express.test.ts +206 -0
- package/src/v2/runtime/__tests__/middleware-single-express.test.ts +211 -0
- package/src/v2/runtime/__tests__/middleware-single.test.ts +225 -0
- package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +187 -0
- package/src/v2/runtime/__tests__/middleware.test.ts +251 -0
- package/src/v2/runtime/__tests__/routing-express.test.ts +174 -0
- package/src/v2/runtime/__tests__/routing-single-express.test.ts +168 -0
- package/src/v2/runtime/__tests__/routing-single.test.ts +193 -0
- package/src/v2/runtime/__tests__/routing.test.ts +257 -0
- package/src/v2/runtime/__tests__/runtime.test.ts +123 -0
- package/src/v2/runtime/__tests__/telemetry.test.ts +167 -0
- package/src/v2/runtime/__tests__/thread-names.test.ts +188 -0
- package/src/v2/runtime/endpoints/express-single.ts +231 -0
- package/src/v2/runtime/endpoints/express-utils.ts +182 -0
- package/src/v2/runtime/endpoints/express.ts +275 -0
- package/src/v2/runtime/endpoints/hono-single.ts +212 -0
- package/src/v2/runtime/endpoints/hono.ts +314 -0
- package/src/v2/runtime/endpoints/index.ts +4 -0
- package/src/v2/runtime/endpoints/single-route-helpers.ts +125 -0
- package/src/v2/runtime/express.ts +2 -0
- package/src/v2/runtime/handler.ts +3 -0
- package/src/v2/runtime/handlers/get-runtime-info.ts +79 -0
- package/src/v2/runtime/handlers/handle-connect.ts +76 -0
- package/src/v2/runtime/handlers/handle-run.ts +89 -0
- package/src/v2/runtime/handlers/handle-stop.ts +76 -0
- package/src/v2/runtime/handlers/handle-threads.ts +7 -0
- package/src/v2/runtime/handlers/handle-transcribe.ts +256 -0
- package/src/v2/runtime/handlers/header-utils.ts +24 -0
- package/src/v2/runtime/handlers/intelligence/connect.ts +65 -0
- package/src/v2/runtime/handlers/intelligence/run.ts +152 -0
- package/src/v2/runtime/handlers/intelligence/thread-names.ts +246 -0
- package/src/v2/runtime/handlers/intelligence/threads.ts +233 -0
- package/src/v2/runtime/handlers/shared/agent-utils.ts +136 -0
- package/src/v2/runtime/handlers/shared/intelligence-utils.ts +21 -0
- package/src/v2/runtime/handlers/shared/json-response.ts +6 -0
- package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +25 -0
- package/src/v2/runtime/handlers/shared/sse-response.ts +100 -0
- package/src/v2/runtime/handlers/sse/connect.ts +24 -0
- package/src/v2/runtime/handlers/sse/run.ts +27 -0
- package/src/v2/runtime/index.ts +20 -0
- package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +605 -0
- package/src/v2/runtime/intelligence-platform/client.ts +659 -0
- package/src/v2/runtime/intelligence-platform/index.ts +10 -0
- package/src/v2/runtime/middleware-sse-parser.ts +200 -0
- package/src/v2/runtime/middleware.ts +115 -0
- package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +109 -0
- package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +775 -0
- package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +363 -0
- package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +981 -0
- package/src/v2/runtime/runner/agent-runner.ts +36 -0
- package/src/v2/runtime/runner/in-memory.ts +381 -0
- package/src/v2/runtime/runner/index.ts +4 -0
- package/src/v2/runtime/runner/intelligence.ts +429 -0
- package/src/v2/runtime/runtime.ts +260 -0
- package/src/v2/runtime/telemetry/events.ts +35 -0
- package/src/v2/runtime/telemetry/index.ts +7 -0
- package/src/v2/runtime/telemetry/scarf-client.ts +39 -0
- package/src/v2/runtime/telemetry/telemetry-client.ts +70 -0
- package/src/v2/runtime/transcription-service/transcription-service.ts +11 -0
- package/tsconfig.json +9 -2
- package/tsdown.config.ts +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractAgent,
|
|
3
|
+
BaseEvent,
|
|
4
|
+
Message,
|
|
5
|
+
RunAgentInput,
|
|
6
|
+
} from "@ag-ui/client";
|
|
7
|
+
import { Observable } from "rxjs";
|
|
8
|
+
|
|
9
|
+
export interface AgentRunnerRunRequest {
|
|
10
|
+
threadId: string;
|
|
11
|
+
agent: AbstractAgent;
|
|
12
|
+
input: RunAgentInput;
|
|
13
|
+
joinCode?: string;
|
|
14
|
+
persistedInputMessages?: Message[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface AgentRunnerConnectRequest {
|
|
18
|
+
threadId: string;
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
joinCode?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface AgentRunnerIsRunningRequest {
|
|
24
|
+
threadId: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface AgentRunnerStopRequest {
|
|
28
|
+
threadId: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export abstract class AgentRunner {
|
|
32
|
+
abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;
|
|
33
|
+
abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;
|
|
34
|
+
abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;
|
|
35
|
+
abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AgentRunner,
|
|
3
|
+
AgentRunnerConnectRequest,
|
|
4
|
+
AgentRunnerIsRunningRequest,
|
|
5
|
+
AgentRunnerRunRequest,
|
|
6
|
+
type AgentRunnerStopRequest,
|
|
7
|
+
} from "./agent-runner";
|
|
8
|
+
import { Observable, ReplaySubject } from "rxjs";
|
|
9
|
+
import {
|
|
10
|
+
AbstractAgent,
|
|
11
|
+
BaseEvent,
|
|
12
|
+
EventType,
|
|
13
|
+
MessagesSnapshotEvent,
|
|
14
|
+
RunStartedEvent,
|
|
15
|
+
compactEvents,
|
|
16
|
+
} from "@ag-ui/client";
|
|
17
|
+
import { finalizeRunEvents } from "@copilotkit/shared";
|
|
18
|
+
|
|
19
|
+
interface HistoricRun {
|
|
20
|
+
threadId: string;
|
|
21
|
+
runId: string;
|
|
22
|
+
parentRunId: string | null;
|
|
23
|
+
events: BaseEvent[];
|
|
24
|
+
createdAt: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class InMemoryEventStore {
|
|
28
|
+
constructor(public threadId: string) {}
|
|
29
|
+
|
|
30
|
+
/** The subject that current consumers subscribe to. */
|
|
31
|
+
subject: ReplaySubject<BaseEvent> | null = null;
|
|
32
|
+
|
|
33
|
+
/** True while a run is actively producing events. */
|
|
34
|
+
isRunning = false;
|
|
35
|
+
|
|
36
|
+
/** Current run ID */
|
|
37
|
+
currentRunId: string | null = null;
|
|
38
|
+
|
|
39
|
+
/** Historic completed runs */
|
|
40
|
+
historicRuns: HistoricRun[] = [];
|
|
41
|
+
|
|
42
|
+
/** Currently running agent instance (if any). */
|
|
43
|
+
agent: AbstractAgent | null = null;
|
|
44
|
+
|
|
45
|
+
/** Subject returned from run() while the run is active. */
|
|
46
|
+
runSubject: ReplaySubject<BaseEvent> | null = null;
|
|
47
|
+
|
|
48
|
+
/** True once stop() has been requested but the run has not yet finalized. */
|
|
49
|
+
stopRequested = false;
|
|
50
|
+
|
|
51
|
+
/** Reference to the events emitted in the current run. */
|
|
52
|
+
currentEvents: BaseEvent[] | null = null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Use a symbol key on globalThis to survive hot reloads in development
|
|
56
|
+
const GLOBAL_STORE_KEY = Symbol.for("@copilotkit/runtime/in-memory-store");
|
|
57
|
+
|
|
58
|
+
interface GlobalStoreData {
|
|
59
|
+
stores: Map<string, InMemoryEventStore>;
|
|
60
|
+
historicRunsBackup: Map<string, HistoricRun[]>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getGlobalStore(): Map<string, InMemoryEventStore> {
|
|
64
|
+
const globalAny = globalThis as unknown as Record<symbol, GlobalStoreData>;
|
|
65
|
+
|
|
66
|
+
if (!globalAny[GLOBAL_STORE_KEY]) {
|
|
67
|
+
globalAny[GLOBAL_STORE_KEY] = {
|
|
68
|
+
stores: new Map<string, InMemoryEventStore>(),
|
|
69
|
+
historicRunsBackup: new Map<string, HistoricRun[]>(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const data = globalAny[GLOBAL_STORE_KEY];
|
|
74
|
+
|
|
75
|
+
// Restore historic runs from backup after hot reload
|
|
76
|
+
// (when stores map is empty but backup has data)
|
|
77
|
+
if (data.stores.size === 0 && data.historicRunsBackup.size > 0) {
|
|
78
|
+
for (const [threadId, historicRuns] of data.historicRunsBackup) {
|
|
79
|
+
const store = new InMemoryEventStore(threadId);
|
|
80
|
+
store.historicRuns = historicRuns;
|
|
81
|
+
data.stores.set(threadId, store);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return data.stores;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function backupHistoricRuns(
|
|
89
|
+
threadId: string,
|
|
90
|
+
historicRuns: HistoricRun[],
|
|
91
|
+
): void {
|
|
92
|
+
const globalAny = globalThis as unknown as Record<symbol, GlobalStoreData>;
|
|
93
|
+
if (globalAny[GLOBAL_STORE_KEY]) {
|
|
94
|
+
globalAny[GLOBAL_STORE_KEY].historicRunsBackup.set(threadId, historicRuns);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const GLOBAL_STORE = getGlobalStore();
|
|
99
|
+
|
|
100
|
+
export class InMemoryAgentRunner extends AgentRunner {
|
|
101
|
+
run(request: AgentRunnerRunRequest): Observable<BaseEvent> {
|
|
102
|
+
let existingStore = GLOBAL_STORE.get(request.threadId);
|
|
103
|
+
if (!existingStore) {
|
|
104
|
+
existingStore = new InMemoryEventStore(request.threadId);
|
|
105
|
+
GLOBAL_STORE.set(request.threadId, existingStore);
|
|
106
|
+
}
|
|
107
|
+
const store = existingStore; // Now store is const and non-null
|
|
108
|
+
|
|
109
|
+
if (store.isRunning) {
|
|
110
|
+
throw new Error("Thread already running");
|
|
111
|
+
}
|
|
112
|
+
store.isRunning = true;
|
|
113
|
+
store.currentRunId = request.input.runId;
|
|
114
|
+
store.agent = request.agent;
|
|
115
|
+
store.stopRequested = false;
|
|
116
|
+
|
|
117
|
+
// Track seen message IDs and current run events for this run
|
|
118
|
+
const seenMessageIds = new Set<string>();
|
|
119
|
+
const currentRunEvents: BaseEvent[] = [];
|
|
120
|
+
store.currentEvents = currentRunEvents;
|
|
121
|
+
|
|
122
|
+
// Get all previously seen message IDs from historic runs
|
|
123
|
+
const historicMessageIds = new Set<string>();
|
|
124
|
+
for (const run of store.historicRuns) {
|
|
125
|
+
for (const event of run.events) {
|
|
126
|
+
if ("messageId" in event && typeof event.messageId === "string") {
|
|
127
|
+
historicMessageIds.add(event.messageId);
|
|
128
|
+
}
|
|
129
|
+
if (event.type === EventType.RUN_STARTED) {
|
|
130
|
+
const runStarted = event as RunStartedEvent;
|
|
131
|
+
const messages = runStarted.input?.messages ?? [];
|
|
132
|
+
for (const message of messages) {
|
|
133
|
+
historicMessageIds.add(message.id);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const nextSubject = new ReplaySubject<BaseEvent>(Infinity);
|
|
140
|
+
const prevSubject = store.subject;
|
|
141
|
+
|
|
142
|
+
// Update the store's subject immediately
|
|
143
|
+
store.subject = nextSubject;
|
|
144
|
+
|
|
145
|
+
// Create a subject for run() return value
|
|
146
|
+
const runSubject = new ReplaySubject<BaseEvent>(Infinity);
|
|
147
|
+
store.runSubject = runSubject;
|
|
148
|
+
|
|
149
|
+
// Helper function to run the agent and handle errors
|
|
150
|
+
const runAgent = async () => {
|
|
151
|
+
// Get parent run ID for chaining
|
|
152
|
+
const lastRun = store.historicRuns[store.historicRuns.length - 1];
|
|
153
|
+
const parentRunId = lastRun?.runId ?? null;
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
await request.agent.runAgent(request.input, {
|
|
157
|
+
onEvent: ({ event }) => {
|
|
158
|
+
let processedEvent: BaseEvent = event;
|
|
159
|
+
if (event.type === EventType.RUN_STARTED) {
|
|
160
|
+
const runStartedEvent = event as RunStartedEvent;
|
|
161
|
+
if (!runStartedEvent.input) {
|
|
162
|
+
const sanitizedMessages = request.input.messages
|
|
163
|
+
? request.input.messages.filter(
|
|
164
|
+
(message) => !historicMessageIds.has(message.id),
|
|
165
|
+
)
|
|
166
|
+
: undefined;
|
|
167
|
+
const updatedInput = {
|
|
168
|
+
...request.input,
|
|
169
|
+
...(sanitizedMessages !== undefined
|
|
170
|
+
? { messages: sanitizedMessages }
|
|
171
|
+
: {}),
|
|
172
|
+
};
|
|
173
|
+
processedEvent = {
|
|
174
|
+
...runStartedEvent,
|
|
175
|
+
input: updatedInput,
|
|
176
|
+
} as RunStartedEvent;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
runSubject.next(processedEvent); // For run() return - only agent events
|
|
181
|
+
nextSubject.next(processedEvent); // For connect() / store - all events
|
|
182
|
+
currentRunEvents.push(processedEvent); // Accumulate for storage
|
|
183
|
+
},
|
|
184
|
+
onNewMessage: ({ message }) => {
|
|
185
|
+
// Called for each new message
|
|
186
|
+
if (!seenMessageIds.has(message.id)) {
|
|
187
|
+
seenMessageIds.add(message.id);
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
onRunStartedEvent: () => {
|
|
191
|
+
// Mark any messages from the input as seen so they aren't emitted twice
|
|
192
|
+
if (request.input.messages) {
|
|
193
|
+
for (const message of request.input.messages) {
|
|
194
|
+
if (!seenMessageIds.has(message.id)) {
|
|
195
|
+
seenMessageIds.add(message.id);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const appendedEvents = finalizeRunEvents(currentRunEvents, {
|
|
203
|
+
stopRequested: store.stopRequested,
|
|
204
|
+
});
|
|
205
|
+
for (const event of appendedEvents) {
|
|
206
|
+
runSubject.next(event);
|
|
207
|
+
nextSubject.next(event);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Store the completed run in memory with ONLY its events
|
|
211
|
+
if (store.currentRunId) {
|
|
212
|
+
// Compact the events before storing (like SQLite does)
|
|
213
|
+
const compactedEvents = compactEvents(currentRunEvents);
|
|
214
|
+
|
|
215
|
+
store.historicRuns.push({
|
|
216
|
+
threadId: request.threadId,
|
|
217
|
+
runId: store.currentRunId,
|
|
218
|
+
parentRunId,
|
|
219
|
+
events: compactedEvents,
|
|
220
|
+
createdAt: Date.now(),
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
// Backup for hot reload survival
|
|
224
|
+
backupHistoricRuns(request.threadId, store.historicRuns);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Complete the run
|
|
228
|
+
store.currentEvents = null;
|
|
229
|
+
store.currentRunId = null;
|
|
230
|
+
store.agent = null;
|
|
231
|
+
store.runSubject = null;
|
|
232
|
+
store.stopRequested = false;
|
|
233
|
+
store.isRunning = false;
|
|
234
|
+
runSubject.complete();
|
|
235
|
+
nextSubject.complete();
|
|
236
|
+
} catch (error) {
|
|
237
|
+
const interruptionMessage =
|
|
238
|
+
error instanceof Error ? error.message : String(error);
|
|
239
|
+
const appendedEvents = finalizeRunEvents(currentRunEvents, {
|
|
240
|
+
stopRequested: store.stopRequested,
|
|
241
|
+
interruptionMessage,
|
|
242
|
+
});
|
|
243
|
+
for (const event of appendedEvents) {
|
|
244
|
+
runSubject.next(event);
|
|
245
|
+
nextSubject.next(event);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Store the run even if it failed (partial events)
|
|
249
|
+
if (store.currentRunId && currentRunEvents.length > 0) {
|
|
250
|
+
// Compact the events before storing (like SQLite does)
|
|
251
|
+
const compactedEvents = compactEvents(currentRunEvents);
|
|
252
|
+
store.historicRuns.push({
|
|
253
|
+
threadId: request.threadId,
|
|
254
|
+
runId: store.currentRunId,
|
|
255
|
+
parentRunId,
|
|
256
|
+
events: compactedEvents,
|
|
257
|
+
createdAt: Date.now(),
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// Backup for hot reload survival
|
|
261
|
+
backupHistoricRuns(request.threadId, store.historicRuns);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Complete the run
|
|
265
|
+
store.currentEvents = null;
|
|
266
|
+
store.currentRunId = null;
|
|
267
|
+
store.agent = null;
|
|
268
|
+
store.runSubject = null;
|
|
269
|
+
store.stopRequested = false;
|
|
270
|
+
store.isRunning = false;
|
|
271
|
+
runSubject.complete();
|
|
272
|
+
nextSubject.complete();
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
// Bridge previous events if they exist
|
|
277
|
+
if (prevSubject) {
|
|
278
|
+
prevSubject.subscribe({
|
|
279
|
+
next: (e) => nextSubject.next(e),
|
|
280
|
+
error: (err) => nextSubject.error(err),
|
|
281
|
+
complete: () => {
|
|
282
|
+
// Don't complete nextSubject here - it needs to stay open for new events
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Start the agent execution immediately (not lazily)
|
|
288
|
+
runAgent();
|
|
289
|
+
|
|
290
|
+
// Return the run subject (only agent events, no injected messages)
|
|
291
|
+
return runSubject.asObservable();
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {
|
|
295
|
+
const store = GLOBAL_STORE.get(request.threadId);
|
|
296
|
+
const connectionSubject = new ReplaySubject<BaseEvent>(Infinity);
|
|
297
|
+
|
|
298
|
+
if (!store) {
|
|
299
|
+
// No store means no events
|
|
300
|
+
connectionSubject.complete();
|
|
301
|
+
return connectionSubject.asObservable();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Collect all historic events from memory
|
|
305
|
+
const allHistoricEvents: BaseEvent[] = [];
|
|
306
|
+
for (const run of store.historicRuns) {
|
|
307
|
+
allHistoricEvents.push(...run.events);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Apply compaction to all historic events together (like SQLite)
|
|
311
|
+
const compactedEvents = compactEvents(allHistoricEvents);
|
|
312
|
+
|
|
313
|
+
// Emit compacted events and track message IDs
|
|
314
|
+
const emittedMessageIds = new Set<string>();
|
|
315
|
+
for (const event of compactedEvents) {
|
|
316
|
+
connectionSubject.next(event);
|
|
317
|
+
if ("messageId" in event && typeof event.messageId === "string") {
|
|
318
|
+
emittedMessageIds.add(event.messageId);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// Bridge active run to connection if exists
|
|
323
|
+
if (store.subject && (store.isRunning || store.stopRequested)) {
|
|
324
|
+
store.subject.subscribe({
|
|
325
|
+
next: (event) => {
|
|
326
|
+
// Skip message events that we've already emitted from historic
|
|
327
|
+
if (
|
|
328
|
+
"messageId" in event &&
|
|
329
|
+
typeof event.messageId === "string" &&
|
|
330
|
+
emittedMessageIds.has(event.messageId)
|
|
331
|
+
) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
connectionSubject.next(event);
|
|
335
|
+
},
|
|
336
|
+
complete: () => connectionSubject.complete(),
|
|
337
|
+
error: (err) => connectionSubject.error(err),
|
|
338
|
+
});
|
|
339
|
+
} else {
|
|
340
|
+
// No active run, complete after historic events
|
|
341
|
+
connectionSubject.complete();
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
return connectionSubject.asObservable();
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {
|
|
348
|
+
const store = GLOBAL_STORE.get(request.threadId);
|
|
349
|
+
return Promise.resolve(store?.isRunning ?? false);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {
|
|
353
|
+
const store = GLOBAL_STORE.get(request.threadId);
|
|
354
|
+
if (!store || !store.isRunning) {
|
|
355
|
+
return Promise.resolve(false);
|
|
356
|
+
}
|
|
357
|
+
if (store.stopRequested) {
|
|
358
|
+
return Promise.resolve(false);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
store.stopRequested = true;
|
|
362
|
+
store.isRunning = false;
|
|
363
|
+
|
|
364
|
+
const agent = store.agent;
|
|
365
|
+
if (!agent) {
|
|
366
|
+
store.stopRequested = false;
|
|
367
|
+
store.isRunning = false;
|
|
368
|
+
return Promise.resolve(false);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
try {
|
|
372
|
+
agent.abortRun();
|
|
373
|
+
return Promise.resolve(true);
|
|
374
|
+
} catch (error) {
|
|
375
|
+
console.error("Failed to abort agent run", error);
|
|
376
|
+
store.stopRequested = false;
|
|
377
|
+
store.isRunning = true;
|
|
378
|
+
return Promise.resolve(false);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|