@copilotkit/runtime 1.57.3 → 1.58.0-canary.thread-id-propagation
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/observability.d.cts +1 -1
- package/dist/lib/observability.d.cts.map +1 -1
- package/dist/lib/observability.d.mts +1 -1
- package/dist/lib/observability.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.cjs +2 -0
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +2 -0
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +5 -8
- package/dist/package.mjs +5 -8
- package/dist/v2/runtime/core/runtime.cjs +4 -1
- package/dist/v2/runtime/core/runtime.cjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/core/runtime.mjs +4 -1
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.cjs +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-run.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-run.mjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.cjs +22 -6
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +27 -11
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
- package/package.json +9 -19
- package/skills/runtime/SKILL.md +98 -0
- package/skills/runtime/references/agent-runners-custom.md +161 -0
- package/skills/runtime/references/agent-runners-in-memory.md +64 -0
- package/skills/runtime/references/agent-runners-sqlite.md +90 -0
- package/skills/runtime/references/agent-runners.md +304 -0
- package/skills/runtime/references/built-in-agent-factory-modes.md +232 -0
- package/skills/runtime/references/built-in-agent-helper-utilities.md +123 -0
- package/skills/runtime/references/built-in-agent-model-identifiers.md +59 -0
- package/skills/runtime/references/built-in-agent.md +523 -0
- package/skills/runtime/references/intelligence-mode.md +336 -0
- package/skills/runtime/references/middleware.md +376 -0
- package/skills/runtime/references/server-side-tools.md +414 -0
- package/skills/runtime/references/setup-endpoint.md +503 -0
- package/skills/runtime/references/transcription.md +287 -0
- package/skills/runtime/references/wiring-a2a.md +40 -0
- package/skills/runtime/references/wiring-adk.md +45 -0
- package/skills/runtime/references/wiring-ag2.md +41 -0
- package/skills/runtime/references/wiring-agno.md +39 -0
- package/skills/runtime/references/wiring-aws-strands.md +59 -0
- package/skills/runtime/references/wiring-crewai-crews.md +51 -0
- package/skills/runtime/references/wiring-crewai-flows.md +45 -0
- package/skills/runtime/references/wiring-external-agents.md +348 -0
- package/skills/runtime/references/wiring-langgraph.md +50 -0
- package/skills/runtime/references/wiring-llamaindex.md +39 -0
- package/skills/runtime/references/wiring-mastra.md +70 -0
- package/skills/runtime/references/wiring-mcp-apps-middleware.md +68 -0
- package/skills/runtime/references/wiring-ms-agent-framework.md +41 -0
- package/skills/runtime/references/wiring-pydantic-ai.md +45 -0
- package/CHANGELOG.md +0 -3624
- package/__snapshots__/schema/schema.graphql +0 -371
- package/dist/v2/runtime/telemetry/scarf-client.cjs +0 -32
- package/dist/v2/runtime/telemetry/scarf-client.cjs.map +0 -1
- package/dist/v2/runtime/telemetry/scarf-client.mjs +0 -32
- package/dist/v2/runtime/telemetry/scarf-client.mjs.map +0 -1
- package/scripts/generate-gql-schema.ts +0 -16
- package/src/agent/__tests__/agent-test-helpers.ts +0 -476
- package/src/agent/__tests__/agent.test.ts +0 -593
- package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +0 -116
- package/src/agent/__tests__/basic-agent.test.ts +0 -1698
- package/src/agent/__tests__/capabilities.test.ts +0 -81
- package/src/agent/__tests__/config-tools-execution.test.ts +0 -516
- package/src/agent/__tests__/converter-aisdk.test.ts +0 -692
- package/src/agent/__tests__/converter-custom.test.ts +0 -319
- package/src/agent/__tests__/converter-tanstack-input.test.ts +0 -211
- package/src/agent/__tests__/converter-tanstack.test.ts +0 -594
- package/src/agent/__tests__/mcp-clients.test.ts +0 -246
- package/src/agent/__tests__/mcp-servers-integration.test.ts +0 -373
- package/src/agent/__tests__/multimodal-tanstack.test.ts +0 -284
- package/src/agent/__tests__/multimodal.test.ts +0 -176
- package/src/agent/__tests__/property-overrides.test.ts +0 -598
- package/src/agent/__tests__/provider-id-collision.test.ts +0 -195
- package/src/agent/__tests__/standard-schema-tools.test.ts +0 -313
- package/src/agent/__tests__/standard-schema-types.test.ts +0 -158
- package/src/agent/__tests__/state-tools.test.ts +0 -436
- package/src/agent/__tests__/test-helpers.ts +0 -197
- package/src/agent/__tests__/utils.test.ts +0 -536
- package/src/agent/__tests__/zod-regression.test.ts +0 -350
- package/src/agent/converters/aisdk.ts +0 -326
- package/src/agent/converters/index.ts +0 -7
- package/src/agent/converters/tanstack.ts +0 -451
- package/src/agent/index.ts +0 -1743
- package/src/agents/langgraph/__tests__/event-source.test.ts +0 -256
- package/src/agents/langgraph/event-source.ts +0 -365
- package/src/agents/langgraph/events.ts +0 -394
- package/src/graphql/inputs/action.input.ts +0 -16
- package/src/graphql/inputs/agent-session.input.ts +0 -13
- package/src/graphql/inputs/agent-state.input.ts +0 -13
- package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
- package/src/graphql/inputs/cloud.input.ts +0 -8
- package/src/graphql/inputs/context-property.input.ts +0 -10
- package/src/graphql/inputs/copilot-context.input.ts +0 -10
- package/src/graphql/inputs/custom-property.input.ts +0 -15
- package/src/graphql/inputs/extensions.input.ts +0 -21
- package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
- package/src/graphql/inputs/frontend.input.ts +0 -14
- package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
- package/src/graphql/inputs/load-agent-state.input.ts +0 -10
- package/src/graphql/inputs/message.input.ts +0 -110
- package/src/graphql/inputs/meta-event.input.ts +0 -18
- package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1384
- package/src/graphql/message-conversion/agui-to-gql.ts +0 -384
- package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1653
- package/src/graphql/message-conversion/gql-to-agui.ts +0 -297
- package/src/graphql/message-conversion/index.ts +0 -2
- package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -561
- package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +0 -25
- package/src/graphql/resolvers/copilot.resolver.ts +0 -785
- package/src/graphql/resolvers/resolve-message-id.ts +0 -14
- package/src/graphql/resolvers/state.resolver.ts +0 -30
- package/src/graphql/types/agents-response.type.ts +0 -19
- package/src/graphql/types/base/index.ts +0 -10
- package/src/graphql/types/converted/index.ts +0 -183
- package/src/graphql/types/copilot-response.type.ts +0 -141
- package/src/graphql/types/enums.ts +0 -38
- package/src/graphql/types/extensions-response.type.ts +0 -23
- package/src/graphql/types/guardrails-result.type.ts +0 -20
- package/src/graphql/types/load-agent-state-response.type.ts +0 -17
- package/src/graphql/types/message-status.type.ts +0 -48
- package/src/graphql/types/meta-events.type.ts +0 -78
- package/src/graphql/types/response-status.type.ts +0 -77
- package/src/index.ts +0 -3
- package/src/langgraph.ts +0 -1
- package/src/lib/__tests__/telemetry-disclosure.test.ts +0 -55
- package/src/lib/cloud/index.ts +0 -4
- package/src/lib/error-messages.ts +0 -211
- package/src/lib/index.ts +0 -52
- package/src/lib/integrations/index.ts +0 -6
- package/src/lib/integrations/nest/index.ts +0 -21
- package/src/lib/integrations/nextjs/app-router.ts +0 -47
- package/src/lib/integrations/nextjs/pages-router.ts +0 -45
- package/src/lib/integrations/node-express/index.ts +0 -21
- package/src/lib/integrations/node-http/__tests__/request-duck-type.test.ts +0 -66
- package/src/lib/integrations/node-http/index.ts +0 -187
- package/src/lib/integrations/node-http/request-handler.ts +0 -128
- package/src/lib/integrations/shared.ts +0 -112
- package/src/lib/logger.ts +0 -31
- package/src/lib/observability.ts +0 -167
- package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -183
- package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +0 -108
- package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -499
- package/src/lib/runtime/__tests__/on-after-request.test.ts +0 -122
- package/src/lib/runtime/__tests__/retry-utils.test.ts +0 -137
- package/src/lib/runtime/__tests__/v1-agent-factory.test.ts +0 -109
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +0 -345
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/run-message-filtering.test.ts +0 -156
- package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -263
- package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -37
- package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
- package/src/lib/runtime/copilot-runtime.ts +0 -863
- package/src/lib/runtime/mcp-tools-utils.ts +0 -313
- package/src/lib/runtime/retry-utils.ts +0 -141
- package/src/lib/runtime/telemetry-agent-runner.ts +0 -151
- package/src/lib/runtime/types.ts +0 -48
- package/src/lib/runtime/utils.ts +0 -93
- package/src/lib/streaming.ts +0 -220
- package/src/lib/telemetry-client.ts +0 -66
- package/src/lib/telemetry-disclosure.ts +0 -53
- package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -532
- package/src/service-adapters/anthropic/utils.ts +0 -219
- package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
- package/src/service-adapters/conversion.test.ts +0 -56
- package/src/service-adapters/conversion.ts +0 -69
- package/src/service-adapters/empty/empty-adapter.ts +0 -38
- package/src/service-adapters/events.ts +0 -337
- package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
- package/src/service-adapters/google/google-genai-adapter.test.ts +0 -151
- package/src/service-adapters/google/google-genai-adapter.ts +0 -95
- package/src/service-adapters/groq/groq-adapter.ts +0 -229
- package/src/service-adapters/index.ts +0 -18
- package/src/service-adapters/langchain/langchain-adapter.ts +0 -113
- package/src/service-adapters/langchain/langserve.ts +0 -88
- package/src/service-adapters/langchain/types.ts +0 -20
- package/src/service-adapters/langchain/utils.ts +0 -330
- package/src/service-adapters/openai/__tests__/openai-v5-compat.test.ts +0 -177
- package/src/service-adapters/openai/openai-adapter.ts +0 -324
- package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -385
- package/src/service-adapters/openai/utils.ts +0 -305
- package/src/service-adapters/service-adapter.ts +0 -50
- package/src/service-adapters/shared/error-utils.ts +0 -64
- package/src/service-adapters/shared/index.ts +0 -2
- package/src/service-adapters/shared/sdk-client-utils.ts +0 -19
- package/src/service-adapters/unify/unify-adapter.ts +0 -165
- package/src/utils/failed-response-status-reasons.ts +0 -70
- package/src/utils/index.ts +0 -1
- package/src/v2/express.ts +0 -1
- package/src/v2/hono.ts +0 -1
- package/src/v2/index.ts +0 -5
- package/src/v2/node.ts +0 -1
- package/src/v2/runtime/__tests__/agents-factory.test.ts +0 -136
- package/src/v2/runtime/__tests__/backward-compat.test.ts +0 -261
- package/src/v2/runtime/__tests__/code-review-fixes.test.ts +0 -500
- package/src/v2/runtime/__tests__/cors-credentials.test.ts +0 -320
- package/src/v2/runtime/__tests__/debug-sse-response.test.ts +0 -302
- package/src/v2/runtime/__tests__/express-adapter.test.ts +0 -188
- package/src/v2/runtime/__tests__/express-body-order.test.ts +0 -76
- package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +0 -344
- package/src/v2/runtime/__tests__/express-single-sse.test.ts +0 -122
- package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +0 -65
- package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +0 -101
- package/src/v2/runtime/__tests__/fetch-cors.test.ts +0 -205
- package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +0 -440
- package/src/v2/runtime/__tests__/fetch-handler.test.ts +0 -456
- package/src/v2/runtime/__tests__/fetch-router.test.ts +0 -276
- package/src/v2/runtime/__tests__/get-runtime-info.test.ts +0 -335
- package/src/v2/runtime/__tests__/handle-connect.test.ts +0 -585
- package/src/v2/runtime/__tests__/handle-run.test.ts +0 -1388
- package/src/v2/runtime/__tests__/handle-threads.test.ts +0 -930
- package/src/v2/runtime/__tests__/handle-transcribe.test.ts +0 -301
- package/src/v2/runtime/__tests__/header-utils.test.ts +0 -88
- package/src/v2/runtime/__tests__/hono-adapter.test.ts +0 -150
- package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +0 -46
- package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +0 -99
- package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +0 -457
- package/src/v2/runtime/__tests__/hooks.test.ts +0 -557
- package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +0 -230
- package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +0 -1030
- package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +0 -27
- package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +0 -32
- package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +0 -33
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +0 -25
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +0 -32
- package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +0 -15
- package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +0 -45
- package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +0 -58
- package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +0 -58
- package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +0 -35
- package/src/v2/runtime/__tests__/integration/servers/express-single.ts +0 -36
- package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +0 -39
- package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +0 -30
- package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +0 -37
- package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +0 -45
- package/src/v2/runtime/__tests__/integration/servers/node-single.ts +0 -46
- package/src/v2/runtime/__tests__/integration/servers/types.ts +0 -18
- package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +0 -253
- package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +0 -358
- package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +0 -363
- package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +0 -194
- package/src/v2/runtime/__tests__/mcp-apps-middleware-integration.test.ts +0 -275
- package/src/v2/runtime/__tests__/middleware-express.test.ts +0 -208
- package/src/v2/runtime/__tests__/middleware-single-express.test.ts +0 -213
- package/src/v2/runtime/__tests__/middleware-single.test.ts +0 -225
- package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +0 -237
- package/src/v2/runtime/__tests__/middleware.test.ts +0 -250
- package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +0 -157
- package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +0 -728
- package/src/v2/runtime/__tests__/router-edge-cases.test.ts +0 -217
- package/src/v2/runtime/__tests__/routing-express.test.ts +0 -174
- package/src/v2/runtime/__tests__/routing-single-express.test.ts +0 -168
- package/src/v2/runtime/__tests__/routing-single.test.ts +0 -193
- package/src/v2/runtime/__tests__/routing.test.ts +0 -257
- package/src/v2/runtime/__tests__/runtime.test.ts +0 -234
- package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +0 -108
- package/src/v2/runtime/__tests__/telemetry.test.ts +0 -167
- package/src/v2/runtime/__tests__/thread-names.test.ts +0 -188
- package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +0 -156
- package/src/v2/runtime/core/debug-event-bus.ts +0 -45
- package/src/v2/runtime/core/fetch-cors.ts +0 -136
- package/src/v2/runtime/core/fetch-handler.ts +0 -492
- package/src/v2/runtime/core/fetch-router.ts +0 -203
- package/src/v2/runtime/core/hooks.ts +0 -160
- package/src/v2/runtime/core/middleware-sse-parser.ts +0 -210
- package/src/v2/runtime/core/middleware.ts +0 -115
- package/src/v2/runtime/core/runtime.ts +0 -432
- package/src/v2/runtime/endpoints/express-fetch-bridge.ts +0 -137
- package/src/v2/runtime/endpoints/express-single.ts +0 -54
- package/src/v2/runtime/endpoints/express.ts +0 -179
- package/src/v2/runtime/endpoints/hono-single.ts +0 -60
- package/src/v2/runtime/endpoints/hono.ts +0 -89
- package/src/v2/runtime/endpoints/index.ts +0 -4
- package/src/v2/runtime/endpoints/node-fetch-handler.ts +0 -48
- package/src/v2/runtime/endpoints/node.ts +0 -28
- package/src/v2/runtime/endpoints/single-route-helpers.ts +0 -125
- package/src/v2/runtime/express.ts +0 -2
- package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +0 -176
- package/src/v2/runtime/handlers/get-runtime-info.ts +0 -101
- package/src/v2/runtime/handlers/handle-connect.ts +0 -80
- package/src/v2/runtime/handlers/handle-debug-events.ts +0 -52
- package/src/v2/runtime/handlers/handle-run.ts +0 -111
- package/src/v2/runtime/handlers/handle-stop.ts +0 -77
- package/src/v2/runtime/handlers/handle-threads.ts +0 -11
- package/src/v2/runtime/handlers/handle-transcribe.ts +0 -269
- package/src/v2/runtime/handlers/header-utils.ts +0 -24
- package/src/v2/runtime/handlers/intelligence/connect.ts +0 -102
- package/src/v2/runtime/handlers/intelligence/run.ts +0 -351
- package/src/v2/runtime/handlers/intelligence/thread-names.ts +0 -246
- package/src/v2/runtime/handlers/intelligence/threads.ts +0 -420
- package/src/v2/runtime/handlers/shared/agent-utils.ts +0 -154
- package/src/v2/runtime/handlers/shared/intelligence-utils.ts +0 -41
- package/src/v2/runtime/handlers/shared/json-response.ts +0 -9
- package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +0 -28
- package/src/v2/runtime/handlers/shared/sse-response.ts +0 -215
- package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +0 -71
- package/src/v2/runtime/handlers/sse/connect.ts +0 -30
- package/src/v2/runtime/handlers/sse/run.ts +0 -40
- package/src/v2/runtime/hono.ts +0 -2
- package/src/v2/runtime/index.ts +0 -51
- package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +0 -601
- package/src/v2/runtime/intelligence-platform/__tests__/intelligence-mcp-helper.test.ts +0 -246
- package/src/v2/runtime/intelligence-platform/client.ts +0 -818
- package/src/v2/runtime/intelligence-platform/index.ts +0 -10
- package/src/v2/runtime/node.ts +0 -6
- package/src/v2/runtime/open-generative-ui-middleware.ts +0 -373
- package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +0 -109
- package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +0 -775
- package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +0 -777
- package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +0 -1039
- package/src/v2/runtime/runner/agent-runner.ts +0 -35
- package/src/v2/runtime/runner/in-memory.ts +0 -467
- package/src/v2/runtime/runner/index.ts +0 -4
- package/src/v2/runtime/runner/intelligence.ts +0 -498
- package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +0 -96
- package/src/v2/runtime/telemetry/events.ts +0 -35
- package/src/v2/runtime/telemetry/index.ts +0 -7
- package/src/v2/runtime/telemetry/instance-created.ts +0 -44
- package/src/v2/runtime/telemetry/scarf-client.ts +0 -39
- package/src/v2/runtime/telemetry/telemetry-client.ts +0 -70
- package/src/v2/runtime/transcription-service/transcription-service.ts +0 -11
- package/tests/global.d.ts +0 -1
- package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -259
- package/tests/service-adapters/anthropic/anthropic-adapter-language-model.test.ts +0 -101
- package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -645
- package/tests/service-adapters/anthropic/utils-token-trimming.test.ts +0 -301
- package/tests/service-adapters/groq/groq-adapter-language-model.test.ts +0 -102
- package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -294
- package/tests/service-adapters/openai/openai-adapter-language-model.test.ts +0 -122
- package/tests/service-adapters/openai/openai-adapter.test.ts +0 -291
- package/tests/service-adapters/shared/sdk-client-utils.test.ts +0 -36
- package/tests/setup.vitest.ts +0 -8
- package/tests/tsconfig.json +0 -10
- package/tsconfig.json +0 -20
- package/tsdown.config.ts +0 -45
- package/typedoc.json +0 -4
- package/vitest.config.mjs +0 -13
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { matchRoute } from "../core/fetch-router";
|
|
3
|
-
|
|
4
|
-
describe("fetch-router", () => {
|
|
5
|
-
describe("with basePath (strict prefix stripping)", () => {
|
|
6
|
-
const basePath = "/api/copilotkit";
|
|
7
|
-
|
|
8
|
-
it("matches GET /info", () => {
|
|
9
|
-
const result = matchRoute("/api/copilotkit/info", basePath);
|
|
10
|
-
expect(result).toEqual({ method: "info" });
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it("matches POST /transcribe", () => {
|
|
14
|
-
const result = matchRoute("/api/copilotkit/transcribe", basePath);
|
|
15
|
-
expect(result).toEqual({ method: "transcribe" });
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it("matches POST /agent/:agentId/run", () => {
|
|
19
|
-
const result = matchRoute("/api/copilotkit/agent/myAgent/run", basePath);
|
|
20
|
-
expect(result).toEqual({ method: "agent/run", agentId: "myAgent" });
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it("matches POST /agent/:agentId/connect", () => {
|
|
24
|
-
const result = matchRoute(
|
|
25
|
-
"/api/copilotkit/agent/myAgent/connect",
|
|
26
|
-
basePath,
|
|
27
|
-
);
|
|
28
|
-
expect(result).toEqual({ method: "agent/connect", agentId: "myAgent" });
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it("matches POST /agent/:agentId/stop/:threadId", () => {
|
|
32
|
-
const result = matchRoute(
|
|
33
|
-
"/api/copilotkit/agent/myAgent/stop/thread-123",
|
|
34
|
-
basePath,
|
|
35
|
-
);
|
|
36
|
-
expect(result).toEqual({
|
|
37
|
-
method: "agent/stop",
|
|
38
|
-
agentId: "myAgent",
|
|
39
|
-
threadId: "thread-123",
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it("returns null for paths not starting with basePath", () => {
|
|
44
|
-
const result = matchRoute("/other/info", basePath);
|
|
45
|
-
expect(result).toBeNull();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it("returns null for unmatched subpaths after basePath", () => {
|
|
49
|
-
const result = matchRoute("/api/copilotkit/unknown", basePath);
|
|
50
|
-
expect(result).toBeNull();
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it("matches GET /threads", () => {
|
|
54
|
-
const result = matchRoute("/api/copilotkit/threads", basePath);
|
|
55
|
-
expect(result).toEqual({ method: "threads/list" });
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it("matches POST /threads/subscribe", () => {
|
|
59
|
-
const result = matchRoute("/api/copilotkit/threads/subscribe", basePath);
|
|
60
|
-
expect(result).toEqual({ method: "threads/subscribe" });
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("matches PATCH /threads/:threadId", () => {
|
|
64
|
-
const result = matchRoute("/api/copilotkit/threads/thread-abc", basePath);
|
|
65
|
-
expect(result).toEqual({
|
|
66
|
-
method: "threads/update",
|
|
67
|
-
threadId: "thread-abc",
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it("matches POST /threads/:threadId/archive", () => {
|
|
72
|
-
const result = matchRoute(
|
|
73
|
-
"/api/copilotkit/threads/thread-abc/archive",
|
|
74
|
-
basePath,
|
|
75
|
-
);
|
|
76
|
-
expect(result).toEqual({
|
|
77
|
-
method: "threads/archive",
|
|
78
|
-
threadId: "thread-abc",
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it("matches GET /threads/:threadId/messages", () => {
|
|
83
|
-
const result = matchRoute(
|
|
84
|
-
"/api/copilotkit/threads/thread-abc/messages",
|
|
85
|
-
basePath,
|
|
86
|
-
);
|
|
87
|
-
expect(result).toEqual({
|
|
88
|
-
method: "threads/messages",
|
|
89
|
-
threadId: "thread-abc",
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it("matches GET /threads/:threadId/events", () => {
|
|
94
|
-
const result = matchRoute(
|
|
95
|
-
"/api/copilotkit/threads/thread-abc/events",
|
|
96
|
-
basePath,
|
|
97
|
-
);
|
|
98
|
-
expect(result).toEqual({
|
|
99
|
-
method: "threads/events",
|
|
100
|
-
threadId: "thread-abc",
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it("matches GET /threads/:threadId/events with URL-encoded threadId", () => {
|
|
105
|
-
const result = matchRoute(
|
|
106
|
-
"/api/copilotkit/threads/thread%2F123/events",
|
|
107
|
-
basePath,
|
|
108
|
-
);
|
|
109
|
-
expect(result).toEqual({
|
|
110
|
-
method: "threads/events",
|
|
111
|
-
threadId: "thread/123",
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it("matches GET /threads/:threadId/state", () => {
|
|
116
|
-
const result = matchRoute(
|
|
117
|
-
"/api/copilotkit/threads/thread-abc/state",
|
|
118
|
-
basePath,
|
|
119
|
-
);
|
|
120
|
-
expect(result).toEqual({
|
|
121
|
-
method: "threads/state",
|
|
122
|
-
threadId: "thread-abc",
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it("matches POST /threads/clear (and does not collide with threads/update)", () => {
|
|
127
|
-
// Critical: the threads/update route also matches /threads/:threadId,
|
|
128
|
-
// so we must verify that "/threads/clear" never falls through to that
|
|
129
|
-
// arm with threadId="clear". The router has explicit guards (the
|
|
130
|
-
// segment[len-1] !== "clear" check) — this test pins them.
|
|
131
|
-
const result = matchRoute("/api/copilotkit/threads/clear", basePath);
|
|
132
|
-
expect(result).toEqual({ method: "threads/clear" });
|
|
133
|
-
expect(result).not.toEqual({
|
|
134
|
-
method: "threads/update",
|
|
135
|
-
threadId: "clear",
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it("handles URL-encoded threadId in thread routes", () => {
|
|
140
|
-
const result = matchRoute(
|
|
141
|
-
"/api/copilotkit/threads/thread%2F123",
|
|
142
|
-
basePath,
|
|
143
|
-
);
|
|
144
|
-
expect(result).toEqual({
|
|
145
|
-
method: "threads/update",
|
|
146
|
-
threadId: "thread/123",
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it("returns null when basePath is a prefix but not a segment boundary", () => {
|
|
151
|
-
const result = matchRoute("/api/copilotkitextra/info", basePath);
|
|
152
|
-
expect(result).toBeNull();
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it("handles basePath with trailing slash", () => {
|
|
156
|
-
const result = matchRoute("/api/copilotkit/info", "/api/copilotkit/");
|
|
157
|
-
expect(result).toEqual({ method: "info" });
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
it("handles URL-encoded agentId", () => {
|
|
161
|
-
const result = matchRoute(
|
|
162
|
-
"/api/copilotkit/agent/my%20agent/run",
|
|
163
|
-
basePath,
|
|
164
|
-
);
|
|
165
|
-
expect(result).toEqual({ method: "agent/run", agentId: "my agent" });
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it("handles URL-encoded threadId", () => {
|
|
169
|
-
const result = matchRoute(
|
|
170
|
-
"/api/copilotkit/agent/ag/stop/thread%2F123",
|
|
171
|
-
basePath,
|
|
172
|
-
);
|
|
173
|
-
expect(result).toEqual({
|
|
174
|
-
method: "agent/stop",
|
|
175
|
-
agentId: "ag",
|
|
176
|
-
threadId: "thread/123",
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it("matches basePath with just root /", () => {
|
|
181
|
-
const result = matchRoute("/info", "/");
|
|
182
|
-
expect(result).toEqual({ method: "info" });
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it("matches GET /cpk-debug-events", () => {
|
|
186
|
-
const result = matchRoute("/api/copilotkit/cpk-debug-events", basePath);
|
|
187
|
-
expect(result).toEqual({ method: "cpk-debug-events" });
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
describe("without basePath (suffix matching)", () => {
|
|
192
|
-
it("matches /info suffix", () => {
|
|
193
|
-
const result = matchRoute("/anything/info");
|
|
194
|
-
expect(result).toEqual({ method: "info" });
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it("matches /transcribe suffix", () => {
|
|
198
|
-
const result = matchRoute("/anything/transcribe");
|
|
199
|
-
expect(result).toEqual({ method: "transcribe" });
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it("matches /agent/:agentId/run suffix", () => {
|
|
203
|
-
const result = matchRoute("/anything/agent/myAgent/run");
|
|
204
|
-
expect(result).toEqual({ method: "agent/run", agentId: "myAgent" });
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
it("matches /agent/:agentId/connect suffix", () => {
|
|
208
|
-
const result = matchRoute("/anything/agent/myAgent/connect");
|
|
209
|
-
expect(result).toEqual({
|
|
210
|
-
method: "agent/connect",
|
|
211
|
-
agentId: "myAgent",
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it("matches /agent/:agentId/stop/:threadId suffix", () => {
|
|
216
|
-
const result = matchRoute("/anything/agent/ag/stop/t1");
|
|
217
|
-
expect(result).toEqual({
|
|
218
|
-
method: "agent/stop",
|
|
219
|
-
agentId: "ag",
|
|
220
|
-
threadId: "t1",
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
it("returns null when no known suffix matches", () => {
|
|
225
|
-
const result = matchRoute("/anything/unknown");
|
|
226
|
-
expect(result).toBeNull();
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it("matches /threads suffix", () => {
|
|
230
|
-
const result = matchRoute("/anything/threads");
|
|
231
|
-
expect(result).toEqual({ method: "threads/list" });
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
it("matches /threads/subscribe suffix", () => {
|
|
235
|
-
const result = matchRoute("/anything/threads/subscribe");
|
|
236
|
-
expect(result).toEqual({ method: "threads/subscribe" });
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
it("matches /threads/:threadId suffix", () => {
|
|
240
|
-
const result = matchRoute("/anything/threads/t1");
|
|
241
|
-
expect(result).toEqual({ method: "threads/update", threadId: "t1" });
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
it("matches /threads/:threadId/archive suffix", () => {
|
|
245
|
-
const result = matchRoute("/anything/threads/t1/archive");
|
|
246
|
-
expect(result).toEqual({ method: "threads/archive", threadId: "t1" });
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
it("matches /threads/:threadId/messages suffix", () => {
|
|
250
|
-
const result = matchRoute("/anything/threads/t1/messages");
|
|
251
|
-
expect(result).toEqual({ method: "threads/messages", threadId: "t1" });
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
it("works with deeply nested mount prefix", () => {
|
|
255
|
-
const result = matchRoute("/api/v2/copilotkit/agent/a1/run");
|
|
256
|
-
expect(result).toEqual({ method: "agent/run", agentId: "a1" });
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
it("matches /cpk-debug-events suffix", () => {
|
|
260
|
-
const result = matchRoute("/api/copilotkit/cpk-debug-events");
|
|
261
|
-
expect(result).toEqual({ method: "cpk-debug-events" });
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
it("matches bare /cpk-debug-events", () => {
|
|
265
|
-
const result = matchRoute("/cpk-debug-events");
|
|
266
|
-
expect(result).toEqual({ method: "cpk-debug-events" });
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
describe("cpk-debug-events route with basePath", () => {
|
|
271
|
-
it("matches /cpk-debug-events with /api basePath", () => {
|
|
272
|
-
const result = matchRoute("/api/cpk-debug-events", "/api");
|
|
273
|
-
expect(result).toEqual({ method: "cpk-debug-events" });
|
|
274
|
-
});
|
|
275
|
-
});
|
|
276
|
-
});
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
import { handleGetRuntimeInfo } from "../handlers/get-runtime-info";
|
|
2
|
-
import { CopilotRuntime } from "../core/runtime";
|
|
3
|
-
import { TranscriptionService } from "../transcription-service/transcription-service";
|
|
4
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
5
|
-
import type { AbstractAgent } from "@ag-ui/client";
|
|
6
|
-
|
|
7
|
-
// Mock transcription service
|
|
8
|
-
class MockTranscriptionService extends TranscriptionService {
|
|
9
|
-
async transcribeFile(): Promise<string> {
|
|
10
|
-
return "Mock transcription result";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
describe("handleGetRuntimeInfo", () => {
|
|
15
|
-
const mockRequest = new Request("https://example.com/info");
|
|
16
|
-
|
|
17
|
-
it("should return runtime info with audioFileTranscriptionEnabled=false when no transcription service", async () => {
|
|
18
|
-
const runtime = new CopilotRuntime({
|
|
19
|
-
agents: {},
|
|
20
|
-
// No transcriptionService provided
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const response = await handleGetRuntimeInfo({
|
|
24
|
-
runtime,
|
|
25
|
-
request: mockRequest,
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
expect(response.status).toBe(200);
|
|
29
|
-
|
|
30
|
-
const data = await response.json();
|
|
31
|
-
expect(data).toEqual({
|
|
32
|
-
version: expect.any(String),
|
|
33
|
-
agents: {},
|
|
34
|
-
audioFileTranscriptionEnabled: false,
|
|
35
|
-
mode: "sse",
|
|
36
|
-
a2uiEnabled: false,
|
|
37
|
-
openGenerativeUIEnabled: false,
|
|
38
|
-
telemetryDisabled: false,
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it("should return runtime info with audioFileTranscriptionEnabled=true when transcription service is configured", async () => {
|
|
43
|
-
const mockTranscriptionService = new MockTranscriptionService();
|
|
44
|
-
const runtime = new CopilotRuntime({
|
|
45
|
-
agents: {},
|
|
46
|
-
transcriptionService: mockTranscriptionService,
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
const response = await handleGetRuntimeInfo({
|
|
50
|
-
runtime,
|
|
51
|
-
request: mockRequest,
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
expect(response.status).toBe(200);
|
|
55
|
-
|
|
56
|
-
const data = await response.json();
|
|
57
|
-
expect(data).toEqual({
|
|
58
|
-
version: expect.any(String),
|
|
59
|
-
agents: {},
|
|
60
|
-
audioFileTranscriptionEnabled: true,
|
|
61
|
-
mode: "sse",
|
|
62
|
-
a2uiEnabled: false,
|
|
63
|
-
openGenerativeUIEnabled: false,
|
|
64
|
-
telemetryDisabled: false,
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it("should include agents information along with audioFileTranscriptionEnabled", async () => {
|
|
69
|
-
const mockAgent = {
|
|
70
|
-
description: "Test agent description",
|
|
71
|
-
constructor: { name: "TestAgent" },
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const runtime = new CopilotRuntime({
|
|
75
|
-
agents: {
|
|
76
|
-
testAgent: mockAgent as AbstractAgent,
|
|
77
|
-
},
|
|
78
|
-
transcriptionService: new MockTranscriptionService(),
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
const response = await handleGetRuntimeInfo({
|
|
82
|
-
runtime,
|
|
83
|
-
request: mockRequest,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
expect(response.status).toBe(200);
|
|
87
|
-
|
|
88
|
-
const data = await response.json();
|
|
89
|
-
expect(data).toEqual({
|
|
90
|
-
version: expect.any(String),
|
|
91
|
-
agents: {
|
|
92
|
-
testAgent: {
|
|
93
|
-
name: "testAgent",
|
|
94
|
-
description: "Test agent description",
|
|
95
|
-
className: "TestAgent",
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
audioFileTranscriptionEnabled: true,
|
|
99
|
-
mode: "sse",
|
|
100
|
-
a2uiEnabled: false,
|
|
101
|
-
openGenerativeUIEnabled: false,
|
|
102
|
-
telemetryDisabled: false,
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it("should return a2uiEnabled: true when runtime has a2ui configured", async () => {
|
|
107
|
-
const runtime = new CopilotRuntime({
|
|
108
|
-
agents: {},
|
|
109
|
-
a2ui: {},
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
const response = await handleGetRuntimeInfo({
|
|
113
|
-
runtime,
|
|
114
|
-
request: mockRequest,
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
expect(response.status).toBe(200);
|
|
118
|
-
|
|
119
|
-
const data = await response.json();
|
|
120
|
-
expect(data.a2uiEnabled).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it("should include capabilities when agent implements getCapabilities", async () => {
|
|
124
|
-
const mockCapabilities = {
|
|
125
|
-
tools: { supported: true, clientProvided: true },
|
|
126
|
-
transport: { streaming: true },
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const mockAgent = {
|
|
130
|
-
description: "Capable agent",
|
|
131
|
-
constructor: { name: "CapableAgent" },
|
|
132
|
-
getCapabilities: async () => mockCapabilities,
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const runtime = new CopilotRuntime({
|
|
136
|
-
agents: {
|
|
137
|
-
capableAgent: mockAgent as unknown as AbstractAgent,
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
const response = await handleGetRuntimeInfo({
|
|
142
|
-
runtime,
|
|
143
|
-
request: mockRequest,
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
expect(response.status).toBe(200);
|
|
147
|
-
|
|
148
|
-
const data = await response.json();
|
|
149
|
-
expect(data.agents.capableAgent.capabilities).toEqual(mockCapabilities);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it("should omit capabilities when agent does not implement getCapabilities", async () => {
|
|
153
|
-
const mockAgent = {
|
|
154
|
-
description: "Basic agent",
|
|
155
|
-
constructor: { name: "BasicAgent" },
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
const runtime = new CopilotRuntime({
|
|
159
|
-
agents: {
|
|
160
|
-
basicAgent: mockAgent as unknown as AbstractAgent,
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
const response = await handleGetRuntimeInfo({
|
|
165
|
-
runtime,
|
|
166
|
-
request: mockRequest,
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
expect(response.status).toBe(200);
|
|
170
|
-
|
|
171
|
-
const data = await response.json();
|
|
172
|
-
expect(data.agents.basicAgent.capabilities).toBeUndefined();
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it("should include empty capabilities object when getCapabilities returns {}", async () => {
|
|
176
|
-
const mockAgent = {
|
|
177
|
-
description: "Empty caps agent",
|
|
178
|
-
constructor: { name: "EmptyCapsAgent" },
|
|
179
|
-
getCapabilities: async () => ({}),
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
const runtime = new CopilotRuntime({
|
|
183
|
-
agents: {
|
|
184
|
-
emptyAgent: mockAgent as unknown as AbstractAgent,
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
const response = await handleGetRuntimeInfo({
|
|
189
|
-
runtime,
|
|
190
|
-
request: mockRequest,
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
expect(response.status).toBe(200);
|
|
194
|
-
|
|
195
|
-
const data = await response.json();
|
|
196
|
-
// {} is truthy, so it should be included in the response
|
|
197
|
-
expect(data.agents.emptyAgent.capabilities).toEqual({});
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
it("should isolate per-agent getCapabilities failures and log a warning", async () => {
|
|
201
|
-
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
202
|
-
|
|
203
|
-
const failingAgent = {
|
|
204
|
-
description: "Failing agent",
|
|
205
|
-
constructor: { name: "FailingAgent" },
|
|
206
|
-
getCapabilities: async () => {
|
|
207
|
-
throw new Error("capability fetch failed");
|
|
208
|
-
},
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
const healthyAgent = {
|
|
212
|
-
description: "Healthy agent",
|
|
213
|
-
constructor: { name: "HealthyAgent" },
|
|
214
|
-
getCapabilities: async () => ({
|
|
215
|
-
tools: { supported: true },
|
|
216
|
-
}),
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
const runtime = new CopilotRuntime({
|
|
220
|
-
agents: {
|
|
221
|
-
failing: failingAgent as unknown as AbstractAgent,
|
|
222
|
-
healthy: healthyAgent as unknown as AbstractAgent,
|
|
223
|
-
},
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
const response = await handleGetRuntimeInfo({
|
|
227
|
-
runtime,
|
|
228
|
-
request: mockRequest,
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
expect(response.status).toBe(200);
|
|
232
|
-
|
|
233
|
-
const data = await response.json();
|
|
234
|
-
// Failing agent should still appear but without capabilities
|
|
235
|
-
expect(data.agents.failing).toEqual({
|
|
236
|
-
name: "failing",
|
|
237
|
-
description: "Failing agent",
|
|
238
|
-
className: "FailingAgent",
|
|
239
|
-
});
|
|
240
|
-
expect(data.agents.failing.capabilities).toBeUndefined();
|
|
241
|
-
|
|
242
|
-
// Healthy agent should have its capabilities
|
|
243
|
-
expect(data.agents.healthy.capabilities).toEqual({
|
|
244
|
-
tools: { supported: true },
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
// Error should be logged, not silently swallowed
|
|
248
|
-
expect(warnSpy).toHaveBeenCalledWith(
|
|
249
|
-
'Failed to fetch capabilities for agent "failing":',
|
|
250
|
-
"capability fetch failed",
|
|
251
|
-
);
|
|
252
|
-
|
|
253
|
-
warnSpy.mockRestore();
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
describe("telemetryDisabled", () => {
|
|
257
|
-
beforeEach(() => {
|
|
258
|
-
delete process.env.COPILOTKIT_TELEMETRY_DISABLED;
|
|
259
|
-
delete process.env.DO_NOT_TRACK;
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
afterEach(() => {
|
|
263
|
-
delete process.env.COPILOTKIT_TELEMETRY_DISABLED;
|
|
264
|
-
delete process.env.DO_NOT_TRACK;
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
it("returns telemetryDisabled: false when env var is not set", async () => {
|
|
268
|
-
const runtime = new CopilotRuntime({ agents: {} });
|
|
269
|
-
const response = await handleGetRuntimeInfo({
|
|
270
|
-
runtime,
|
|
271
|
-
request: mockRequest,
|
|
272
|
-
});
|
|
273
|
-
const data = await response.json();
|
|
274
|
-
expect(data.telemetryDisabled).toBe(false);
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it("returns telemetryDisabled: true when COPILOTKIT_TELEMETRY_DISABLED=true", async () => {
|
|
278
|
-
process.env.COPILOTKIT_TELEMETRY_DISABLED = "true";
|
|
279
|
-
const runtime = new CopilotRuntime({ agents: {} });
|
|
280
|
-
const response = await handleGetRuntimeInfo({
|
|
281
|
-
runtime,
|
|
282
|
-
request: mockRequest,
|
|
283
|
-
});
|
|
284
|
-
const data = await response.json();
|
|
285
|
-
expect(data.telemetryDisabled).toBe(true);
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
it("returns telemetryDisabled: true when COPILOTKIT_TELEMETRY_DISABLED=1", async () => {
|
|
289
|
-
process.env.COPILOTKIT_TELEMETRY_DISABLED = "1";
|
|
290
|
-
const runtime = new CopilotRuntime({ agents: {} });
|
|
291
|
-
const response = await handleGetRuntimeInfo({
|
|
292
|
-
runtime,
|
|
293
|
-
request: mockRequest,
|
|
294
|
-
});
|
|
295
|
-
const data = await response.json();
|
|
296
|
-
expect(data.telemetryDisabled).toBe(true);
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
it("returns telemetryDisabled: true when DO_NOT_TRACK=1", async () => {
|
|
300
|
-
process.env.DO_NOT_TRACK = "1";
|
|
301
|
-
const runtime = new CopilotRuntime({ agents: {} });
|
|
302
|
-
const response = await handleGetRuntimeInfo({
|
|
303
|
-
runtime,
|
|
304
|
-
request: mockRequest,
|
|
305
|
-
});
|
|
306
|
-
const data = await response.json();
|
|
307
|
-
expect(data.telemetryDisabled).toBe(true);
|
|
308
|
-
});
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
it("should return 500 error when runtime.agents throws an error", async () => {
|
|
312
|
-
const runtime = {
|
|
313
|
-
get agents(): Record<string, AbstractAgent> {
|
|
314
|
-
throw new Error("Failed to get agents");
|
|
315
|
-
},
|
|
316
|
-
transcriptionService: undefined,
|
|
317
|
-
beforeRequestMiddleware: undefined,
|
|
318
|
-
afterRequestMiddleware: undefined,
|
|
319
|
-
mode: "sse",
|
|
320
|
-
} as CopilotRuntime;
|
|
321
|
-
|
|
322
|
-
const response = await handleGetRuntimeInfo({
|
|
323
|
-
runtime,
|
|
324
|
-
request: mockRequest,
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
expect(response.status).toBe(500);
|
|
328
|
-
|
|
329
|
-
const data = await response.json();
|
|
330
|
-
expect(data).toEqual({
|
|
331
|
-
error: "Failed to retrieve runtime information",
|
|
332
|
-
message: "Failed to get agents",
|
|
333
|
-
});
|
|
334
|
-
});
|
|
335
|
-
});
|