@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,440 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { createCopilotRuntimeHandler } from "../core/fetch-handler";
|
|
3
|
-
import { CopilotRuntime } from "../core/runtime";
|
|
4
|
-
import type { AbstractAgent } from "@ag-ui/client";
|
|
5
|
-
|
|
6
|
-
/* ------------------------------------------------------------------------------------------------
|
|
7
|
-
* Helpers
|
|
8
|
-
* --------------------------------------------------------------------------------------------- */
|
|
9
|
-
|
|
10
|
-
const createMockAgent = () => {
|
|
11
|
-
const agent: unknown = {
|
|
12
|
-
execute: vi.fn().mockResolvedValue({ events: [] }),
|
|
13
|
-
};
|
|
14
|
-
(agent as { clone: () => unknown }).clone = () => createMockAgent();
|
|
15
|
-
return agent as AbstractAgent;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const createRuntime = (
|
|
19
|
-
agents: Record<string, AbstractAgent> = { default: createMockAgent() },
|
|
20
|
-
) => new CopilotRuntime({ agents });
|
|
21
|
-
|
|
22
|
-
const post = (url: string, body?: unknown) =>
|
|
23
|
-
new Request(url, {
|
|
24
|
-
method: "POST",
|
|
25
|
-
headers: { "Content-Type": "application/json" },
|
|
26
|
-
body: body ? JSON.stringify(body) : undefined,
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
/* ------------------------------------------------------------------------------------------------
|
|
30
|
-
* Single-route: malformed JSON
|
|
31
|
-
* --------------------------------------------------------------------------------------------- */
|
|
32
|
-
|
|
33
|
-
describe("fetch-handler validation — single-route malformed input", () => {
|
|
34
|
-
const runtime = createRuntime();
|
|
35
|
-
const handler = createCopilotRuntimeHandler({
|
|
36
|
-
runtime,
|
|
37
|
-
basePath: "/api",
|
|
38
|
-
mode: "single-route",
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it("returns 400 for completely invalid JSON body", async () => {
|
|
42
|
-
const request = new Request("http://localhost/api", {
|
|
43
|
-
method: "POST",
|
|
44
|
-
headers: { "Content-Type": "application/json" },
|
|
45
|
-
body: "not valid json{{{",
|
|
46
|
-
});
|
|
47
|
-
const response = await handler(request);
|
|
48
|
-
expect(response.status).toBe(400);
|
|
49
|
-
const body = await response.json();
|
|
50
|
-
expect(body).toHaveProperty("error");
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it("returns 400 for empty string body", async () => {
|
|
54
|
-
const request = new Request("http://localhost/api", {
|
|
55
|
-
method: "POST",
|
|
56
|
-
headers: { "Content-Type": "application/json" },
|
|
57
|
-
body: "",
|
|
58
|
-
});
|
|
59
|
-
const response = await handler(request);
|
|
60
|
-
expect(response.status).toBe(400);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("returns 415 for no Content-Type header", async () => {
|
|
64
|
-
const request = new Request("http://localhost/api", {
|
|
65
|
-
method: "POST",
|
|
66
|
-
body: JSON.stringify({ method: "info" }),
|
|
67
|
-
});
|
|
68
|
-
const response = await handler(request);
|
|
69
|
-
expect(response.status).toBe(415);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it("returns 415 for text/plain Content-Type", async () => {
|
|
73
|
-
const request = new Request("http://localhost/api", {
|
|
74
|
-
method: "POST",
|
|
75
|
-
headers: { "Content-Type": "text/plain" },
|
|
76
|
-
body: JSON.stringify({ method: "info" }),
|
|
77
|
-
});
|
|
78
|
-
const response = await handler(request);
|
|
79
|
-
expect(response.status).toBe(415);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it("accepts application/json with charset", async () => {
|
|
83
|
-
const request = new Request("http://localhost/api", {
|
|
84
|
-
method: "POST",
|
|
85
|
-
headers: { "Content-Type": "application/json; charset=utf-8" },
|
|
86
|
-
body: JSON.stringify({ method: "info" }),
|
|
87
|
-
});
|
|
88
|
-
const response = await handler(request);
|
|
89
|
-
expect(response.status).toBe(200);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("returns 400 when method is null", async () => {
|
|
93
|
-
const response = await handler(
|
|
94
|
-
post("http://localhost/api", { method: null }),
|
|
95
|
-
);
|
|
96
|
-
expect(response.status).toBe(400);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it("returns 400 when method is a number", async () => {
|
|
100
|
-
const response = await handler(
|
|
101
|
-
post("http://localhost/api", { method: 42 }),
|
|
102
|
-
);
|
|
103
|
-
expect(response.status).toBe(400);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it("returns 400 when method is wrong case (INFO vs info)", async () => {
|
|
107
|
-
const response = await handler(
|
|
108
|
-
post("http://localhost/api", { method: "INFO" }),
|
|
109
|
-
);
|
|
110
|
-
expect(response.status).toBe(400);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it("returns 400 for typo in method name", async () => {
|
|
114
|
-
const response = await handler(
|
|
115
|
-
post("http://localhost/api", { method: "agent/rn" }),
|
|
116
|
-
);
|
|
117
|
-
expect(response.status).toBe(400);
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
/* ------------------------------------------------------------------------------------------------
|
|
122
|
-
* Single-route: missing required params
|
|
123
|
-
* --------------------------------------------------------------------------------------------- */
|
|
124
|
-
|
|
125
|
-
describe("fetch-handler validation — single-route missing params", () => {
|
|
126
|
-
const runtime = createRuntime();
|
|
127
|
-
const handler = createCopilotRuntimeHandler({
|
|
128
|
-
runtime,
|
|
129
|
-
basePath: "/api",
|
|
130
|
-
mode: "single-route",
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it("returns 400 for agent/run without agentId param", async () => {
|
|
134
|
-
const response = await handler(
|
|
135
|
-
post("http://localhost/api", {
|
|
136
|
-
method: "agent/run",
|
|
137
|
-
params: {},
|
|
138
|
-
body: { threadId: "t1", runId: "r1" },
|
|
139
|
-
}),
|
|
140
|
-
);
|
|
141
|
-
expect(response.status).toBe(400);
|
|
142
|
-
const body = await response.json();
|
|
143
|
-
expect(body.message).toContain("agentId");
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it("returns 400 for agent/run with empty agentId", async () => {
|
|
147
|
-
const response = await handler(
|
|
148
|
-
post("http://localhost/api", {
|
|
149
|
-
method: "agent/run",
|
|
150
|
-
params: { agentId: "" },
|
|
151
|
-
body: { threadId: "t1", runId: "r1" },
|
|
152
|
-
}),
|
|
153
|
-
);
|
|
154
|
-
expect(response.status).toBe(400);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it("returns 400 for agent/run with whitespace-only agentId", async () => {
|
|
158
|
-
const response = await handler(
|
|
159
|
-
post("http://localhost/api", {
|
|
160
|
-
method: "agent/run",
|
|
161
|
-
params: { agentId: " " },
|
|
162
|
-
body: { threadId: "t1", runId: "r1" },
|
|
163
|
-
}),
|
|
164
|
-
);
|
|
165
|
-
expect(response.status).toBe(400);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it("returns 400 for agent/run with no params at all", async () => {
|
|
169
|
-
const response = await handler(
|
|
170
|
-
post("http://localhost/api", {
|
|
171
|
-
method: "agent/run",
|
|
172
|
-
body: { threadId: "t1", runId: "r1" },
|
|
173
|
-
}),
|
|
174
|
-
);
|
|
175
|
-
expect(response.status).toBe(400);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it("returns 400 for agent/connect without agentId param", async () => {
|
|
179
|
-
const response = await handler(
|
|
180
|
-
post("http://localhost/api", {
|
|
181
|
-
method: "agent/connect",
|
|
182
|
-
params: {},
|
|
183
|
-
body: { threadId: "t1", runId: "r1" },
|
|
184
|
-
}),
|
|
185
|
-
);
|
|
186
|
-
expect(response.status).toBe(400);
|
|
187
|
-
const body = await response.json();
|
|
188
|
-
expect(body.message).toContain("agentId");
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
it("returns 400 for agent/stop without agentId param", async () => {
|
|
192
|
-
const response = await handler(
|
|
193
|
-
post("http://localhost/api", {
|
|
194
|
-
method: "agent/stop",
|
|
195
|
-
params: { threadId: "t1" },
|
|
196
|
-
}),
|
|
197
|
-
);
|
|
198
|
-
expect(response.status).toBe(400);
|
|
199
|
-
const body = await response.json();
|
|
200
|
-
expect(body.message).toContain("agentId");
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it("returns 400 for agent/stop without threadId param", async () => {
|
|
204
|
-
const response = await handler(
|
|
205
|
-
post("http://localhost/api", {
|
|
206
|
-
method: "agent/stop",
|
|
207
|
-
params: { agentId: "default" },
|
|
208
|
-
}),
|
|
209
|
-
);
|
|
210
|
-
expect(response.status).toBe(400);
|
|
211
|
-
const body = await response.json();
|
|
212
|
-
expect(body.message).toContain("threadId");
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it("returns 400 for agent/stop with no params", async () => {
|
|
216
|
-
const response = await handler(
|
|
217
|
-
post("http://localhost/api", { method: "agent/stop" }),
|
|
218
|
-
);
|
|
219
|
-
expect(response.status).toBe(400);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
it("returns 400 for agent/run with non-string agentId", async () => {
|
|
223
|
-
const response = await handler(
|
|
224
|
-
post("http://localhost/api", {
|
|
225
|
-
method: "agent/run",
|
|
226
|
-
params: { agentId: 123 },
|
|
227
|
-
body: { threadId: "t1", runId: "r1" },
|
|
228
|
-
}),
|
|
229
|
-
);
|
|
230
|
-
expect(response.status).toBe(400);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it("info method works without params", async () => {
|
|
234
|
-
const response = await handler(
|
|
235
|
-
post("http://localhost/api", { method: "info" }),
|
|
236
|
-
);
|
|
237
|
-
expect(response.status).toBe(200);
|
|
238
|
-
const body = await response.json();
|
|
239
|
-
expect(body).toHaveProperty("version");
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
it("transcribe method without body returns 400 (body required for transcribe)", async () => {
|
|
243
|
-
const response = await handler(
|
|
244
|
-
post("http://localhost/api", { method: "transcribe" }),
|
|
245
|
-
);
|
|
246
|
-
// In single-route mode, transcribe requires a body via createJsonRequest
|
|
247
|
-
expect(response.status).toBe(400);
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
it("transcribe method with body dispatches correctly", async () => {
|
|
251
|
-
const response = await handler(
|
|
252
|
-
post("http://localhost/api", {
|
|
253
|
-
method: "transcribe",
|
|
254
|
-
body: { audio: "data" },
|
|
255
|
-
}),
|
|
256
|
-
);
|
|
257
|
-
// Route matched — not a param validation error
|
|
258
|
-
expect(response.status).not.toBe(400);
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
/* ------------------------------------------------------------------------------------------------
|
|
263
|
-
* Multi-route: edge cases
|
|
264
|
-
* --------------------------------------------------------------------------------------------- */
|
|
265
|
-
|
|
266
|
-
describe("fetch-handler validation — multi-route edge cases", () => {
|
|
267
|
-
const runtime = createRuntime();
|
|
268
|
-
|
|
269
|
-
it("handles request with no body on a POST route gracefully", async () => {
|
|
270
|
-
const handler = createCopilotRuntimeHandler({
|
|
271
|
-
runtime,
|
|
272
|
-
basePath: "/api",
|
|
273
|
-
});
|
|
274
|
-
const request = new Request("http://localhost/api/agent/default/run", {
|
|
275
|
-
method: "POST",
|
|
276
|
-
headers: { "Content-Type": "application/json" },
|
|
277
|
-
});
|
|
278
|
-
const response = await handler(request);
|
|
279
|
-
// Should not crash — may return 400 or 500 but not a Node crash
|
|
280
|
-
expect(response).toBeInstanceOf(Response);
|
|
281
|
-
expect(response.status).toBeGreaterThanOrEqual(400);
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
it("CORS headers present on error responses too", async () => {
|
|
285
|
-
const handler = createCopilotRuntimeHandler({
|
|
286
|
-
runtime,
|
|
287
|
-
basePath: "/api",
|
|
288
|
-
cors: true,
|
|
289
|
-
});
|
|
290
|
-
const response = await handler(
|
|
291
|
-
new Request("http://localhost/api/unknown", { method: "GET" }),
|
|
292
|
-
);
|
|
293
|
-
expect(response.status).toBe(404);
|
|
294
|
-
expect(response.headers.get("Access-Control-Allow-Origin")).toBe("*");
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
it("CORS headers present on 405 responses", async () => {
|
|
298
|
-
const handler = createCopilotRuntimeHandler({
|
|
299
|
-
runtime,
|
|
300
|
-
basePath: "/api",
|
|
301
|
-
cors: true,
|
|
302
|
-
});
|
|
303
|
-
const response = await handler(
|
|
304
|
-
new Request("http://localhost/api/info", { method: "POST" }),
|
|
305
|
-
);
|
|
306
|
-
expect(response.status).toBe(405);
|
|
307
|
-
expect(response.headers.get("Access-Control-Allow-Origin")).toBe("*");
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
it("CORS headers present on 500 error responses", async () => {
|
|
311
|
-
const agent: unknown = {
|
|
312
|
-
execute: vi.fn().mockRejectedValue(new Error("boom")),
|
|
313
|
-
clone: () => agent,
|
|
314
|
-
};
|
|
315
|
-
const errorRuntime = createRuntime({ default: agent as AbstractAgent });
|
|
316
|
-
const handler = createCopilotRuntimeHandler({
|
|
317
|
-
runtime: errorRuntime,
|
|
318
|
-
basePath: "/api",
|
|
319
|
-
cors: true,
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
const response = await handler(
|
|
323
|
-
post("http://localhost/api/agent/default/run", {
|
|
324
|
-
threadId: "t1",
|
|
325
|
-
runId: "r1",
|
|
326
|
-
}),
|
|
327
|
-
);
|
|
328
|
-
expect(response).toBeInstanceOf(Response);
|
|
329
|
-
expect(response.headers.get("Access-Control-Allow-Origin")).toBe("*");
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
it("error response does not leak error details to clients", async () => {
|
|
333
|
-
const handler = createCopilotRuntimeHandler({
|
|
334
|
-
runtime,
|
|
335
|
-
basePath: "/api",
|
|
336
|
-
hooks: {
|
|
337
|
-
onRequest: () => {
|
|
338
|
-
throw new Error("sensitive internal detail: /home/user/db.sqlite");
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
const response = await handler(
|
|
344
|
-
new Request("http://localhost/api/info", { method: "GET" }),
|
|
345
|
-
);
|
|
346
|
-
expect(response.status).toBe(500);
|
|
347
|
-
const body = await response.json();
|
|
348
|
-
expect(body.error).toBe("internal_error");
|
|
349
|
-
// Error message should NOT be exposed to the client
|
|
350
|
-
expect(body.message).toBeUndefined();
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
it("error response returns internal_error for non-Error throws", async () => {
|
|
354
|
-
const handler = createCopilotRuntimeHandler({
|
|
355
|
-
runtime,
|
|
356
|
-
basePath: "/api",
|
|
357
|
-
hooks: {
|
|
358
|
-
onRequest: () => {
|
|
359
|
-
throw "string error";
|
|
360
|
-
},
|
|
361
|
-
},
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
const response = await handler(
|
|
365
|
-
new Request("http://localhost/api/info", { method: "GET" }),
|
|
366
|
-
);
|
|
367
|
-
expect(response.status).toBe(500);
|
|
368
|
-
const body = await response.json();
|
|
369
|
-
expect(body.error).toBe("internal_error");
|
|
370
|
-
expect(body.message).toBeUndefined();
|
|
371
|
-
});
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
/* ------------------------------------------------------------------------------------------------
|
|
375
|
-
* Multi-route: HTTP method enforcement on per-thread GET endpoints
|
|
376
|
-
*
|
|
377
|
-
* /threads/:threadId/events and /threads/:threadId/state are read-only and
|
|
378
|
-
* must reject anything other than GET with 405 + Allow: GET. These tests
|
|
379
|
-
* pin that contract so a future refactor cannot quietly downgrade it.
|
|
380
|
-
* --------------------------------------------------------------------------------------------- */
|
|
381
|
-
|
|
382
|
-
describe("fetch-handler validation — GET-only enforcement on threads read endpoints", () => {
|
|
383
|
-
const runtime = createRuntime();
|
|
384
|
-
const handler = createCopilotRuntimeHandler({
|
|
385
|
-
runtime,
|
|
386
|
-
basePath: "/api",
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
const expectMethodNotAllowed = async (
|
|
390
|
-
response: Response,
|
|
391
|
-
expectedAllow: string,
|
|
392
|
-
) => {
|
|
393
|
-
expect(response.status).toBe(405);
|
|
394
|
-
expect(response.headers.get("Allow")).toBe(expectedAllow);
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
for (const method of ["POST", "PATCH", "DELETE"]) {
|
|
398
|
-
it(`returns 405 with Allow: GET for ${method} /threads/:id/events`, async () => {
|
|
399
|
-
const response = await handler(
|
|
400
|
-
new Request("http://localhost/api/threads/thread-1/events", {
|
|
401
|
-
method,
|
|
402
|
-
// PATCH/POST without a body or content-type would otherwise hit
|
|
403
|
-
// a different validation branch; this exercises pure method check.
|
|
404
|
-
headers: { "Content-Type": "application/json" },
|
|
405
|
-
}),
|
|
406
|
-
);
|
|
407
|
-
await expectMethodNotAllowed(response, "GET");
|
|
408
|
-
});
|
|
409
|
-
|
|
410
|
-
it(`returns 405 with Allow: GET for ${method} /threads/:id/state`, async () => {
|
|
411
|
-
const response = await handler(
|
|
412
|
-
new Request("http://localhost/api/threads/thread-1/state", {
|
|
413
|
-
method,
|
|
414
|
-
headers: { "Content-Type": "application/json" },
|
|
415
|
-
}),
|
|
416
|
-
);
|
|
417
|
-
await expectMethodNotAllowed(response, "GET");
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
it("accepts GET on /threads/:id/events", async () => {
|
|
422
|
-
const response = await handler(
|
|
423
|
-
new Request("http://localhost/api/threads/thread-1/events", {
|
|
424
|
-
method: "GET",
|
|
425
|
-
}),
|
|
426
|
-
);
|
|
427
|
-
// The route may 422 (no Intelligence configured) or 200 — either way it
|
|
428
|
-
// is NOT a 405, which is the contract we are pinning here.
|
|
429
|
-
expect(response.status).not.toBe(405);
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
it("accepts GET on /threads/:id/state", async () => {
|
|
433
|
-
const response = await handler(
|
|
434
|
-
new Request("http://localhost/api/threads/thread-1/state", {
|
|
435
|
-
method: "GET",
|
|
436
|
-
}),
|
|
437
|
-
);
|
|
438
|
-
expect(response.status).not.toBe(405);
|
|
439
|
-
});
|
|
440
|
-
});
|