@copilotkit/runtime 1.57.2 → 1.57.4
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/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 +52 -19
- package/dist/package.mjs +52 -19
- 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 +8 -18
- 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
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
BuiltInAgent model identifiers — the full set of `"provider/model"` strings that
|
|
2
|
+
`resolveModel` accepts out of the box.
|
|
3
|
+
|
|
4
|
+
## Shape
|
|
5
|
+
|
|
6
|
+
`"provider/model"` or `"provider:model"` — both separators are normalized. Case-insensitive on the provider segment.
|
|
7
|
+
|
|
8
|
+
```typescript
|
|
9
|
+
new BuiltInAgent({ model: "openai/gpt-4o" });
|
|
10
|
+
new BuiltInAgent({ model: "anthropic:claude-sonnet-4.5" });
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Supported providers
|
|
14
|
+
|
|
15
|
+
| Provider | Env var | Notes |
|
|
16
|
+
| ------------------------------------- | ------------------- | ---------------------------------- |
|
|
17
|
+
| `openai` | `OPENAI_API_KEY` | Lazily creates `@ai-sdk/openai` |
|
|
18
|
+
| `anthropic` | `ANTHROPIC_API_KEY` | Lazily creates `@ai-sdk/anthropic` |
|
|
19
|
+
| `google` / `gemini` / `google-gemini` | `GOOGLE_API_KEY` | `@ai-sdk/google` under the hood |
|
|
20
|
+
| `vertex` | (GCP auth) | `@ai-sdk/google-vertex` |
|
|
21
|
+
|
|
22
|
+
Pass `apiKey` on the constructor to override env vars.
|
|
23
|
+
|
|
24
|
+
## Pinned identifiers in the union type
|
|
25
|
+
|
|
26
|
+
These are the concrete strings typed in `BuiltInAgentModel`:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
openai/gpt-5 openai/gpt-5-mini
|
|
30
|
+
openai/gpt-4.1 openai/gpt-4.1-mini openai/gpt-4.1-nano
|
|
31
|
+
openai/gpt-4o openai/gpt-4o-mini
|
|
32
|
+
openai/o3 openai/o3-mini openai/o4-mini
|
|
33
|
+
|
|
34
|
+
anthropic/claude-sonnet-4.5 anthropic/claude-sonnet-4
|
|
35
|
+
anthropic/claude-3.7-sonnet anthropic/claude-opus-4.1
|
|
36
|
+
anthropic/claude-opus-4 anthropic/claude-3.5-haiku
|
|
37
|
+
|
|
38
|
+
google/gemini-2.5-pro google/gemini-2.5-flash google/gemini-2.5-flash-lite
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Any other valid model id is still accepted — the type is
|
|
42
|
+
`BuiltInAgentModel = "openai/gpt-5" | ... | (string & {})`, and the AI SDK provider will
|
|
43
|
+
accept any id it knows about. The pinned union is for autocomplete, not an exhaustive allowlist.
|
|
44
|
+
|
|
45
|
+
## Passing a LanguageModel instance directly
|
|
46
|
+
|
|
47
|
+
Instead of a string, pass a pre-configured `LanguageModel`:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { BuiltInAgent } from "@copilotkit/runtime/v2";
|
|
51
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
|
52
|
+
|
|
53
|
+
const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
|
54
|
+
new BuiltInAgent({ model: openai("gpt-4o") });
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
This bypasses `resolveModel` entirely.
|
|
58
|
+
|
|
59
|
+
Source: `packages/runtime/src/agent/index.ts:82-109, 176-249`.
|
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
# CopilotKit BuiltInAgent
|
|
2
|
+
|
|
3
|
+
`BuiltInAgent` has two modes:
|
|
4
|
+
|
|
5
|
+
- **Factory Mode** (preferred default) — you own the LLM call, BuiltInAgent owns the AG-UI
|
|
6
|
+
lifecycle. TanStack AI factory is AG-UI-native and the canonical preferred choice. AI SDK
|
|
7
|
+
and custom (raw AG-UI event) factories are also supported.
|
|
8
|
+
- **Simple Mode** (classic config) — `{ model, apiKey, prompt, tools, mcpServers, maxSteps, ... }`.
|
|
9
|
+
Convenient for quickstarts. Simple Mode auto-injects the `AGUISendStateSnapshot` /
|
|
10
|
+
`AGUISendStateDelta` state tools; Factory Mode does not.
|
|
11
|
+
|
|
12
|
+
Use Factory Mode with TanStack AI for new code.
|
|
13
|
+
|
|
14
|
+
## Setup
|
|
15
|
+
|
|
16
|
+
Factory Mode with TanStack AI (preferred default):
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
CopilotRuntime,
|
|
21
|
+
createCopilotRuntimeHandler,
|
|
22
|
+
BuiltInAgent,
|
|
23
|
+
convertInputToTanStackAI,
|
|
24
|
+
} from "@copilotkit/runtime/v2";
|
|
25
|
+
import { chat } from "@tanstack/ai";
|
|
26
|
+
import { openaiText } from "@tanstack/ai-openai";
|
|
27
|
+
|
|
28
|
+
const agent = new BuiltInAgent({
|
|
29
|
+
type: "tanstack",
|
|
30
|
+
factory: ({ input, abortController }) => {
|
|
31
|
+
const { messages, systemPrompts } = convertInputToTanStackAI(input);
|
|
32
|
+
systemPrompts.unshift("You are a helpful assistant.");
|
|
33
|
+
return chat({
|
|
34
|
+
adapter: openaiText("gpt-4o"),
|
|
35
|
+
messages,
|
|
36
|
+
systemPrompts,
|
|
37
|
+
abortController,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const runtime = new CopilotRuntime({ agents: { default: agent } });
|
|
43
|
+
|
|
44
|
+
const handler = createCopilotRuntimeHandler({
|
|
45
|
+
runtime,
|
|
46
|
+
basePath: "/api/copilotkit",
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export default { fetch: handler };
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Simple Mode (quickstart only):
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import {
|
|
56
|
+
BuiltInAgent,
|
|
57
|
+
CopilotRuntime,
|
|
58
|
+
createCopilotRuntimeHandler,
|
|
59
|
+
} from "@copilotkit/runtime/v2";
|
|
60
|
+
|
|
61
|
+
const agent = new BuiltInAgent({
|
|
62
|
+
model: "openai/gpt-4o",
|
|
63
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
64
|
+
prompt: "You are a helpful assistant.",
|
|
65
|
+
maxSteps: 5, // enable the tool-call loop
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const runtime = new CopilotRuntime({ agents: { default: agent } });
|
|
69
|
+
const handler = createCopilotRuntimeHandler({
|
|
70
|
+
runtime,
|
|
71
|
+
basePath: "/api/copilotkit",
|
|
72
|
+
});
|
|
73
|
+
export default { fetch: handler };
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Core Patterns
|
|
77
|
+
|
|
78
|
+
### Factory Mode with AI SDK (needed for reasoning events)
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import {
|
|
82
|
+
BuiltInAgent,
|
|
83
|
+
convertMessagesToVercelAISDKMessages,
|
|
84
|
+
convertToolsToVercelAITools,
|
|
85
|
+
} from "@copilotkit/runtime/v2";
|
|
86
|
+
import { streamText, stepCountIs } from "ai";
|
|
87
|
+
import { anthropic } from "@ai-sdk/anthropic";
|
|
88
|
+
|
|
89
|
+
const agent = new BuiltInAgent({
|
|
90
|
+
type: "aisdk",
|
|
91
|
+
factory: ({ input, abortSignal }) => {
|
|
92
|
+
const messages = convertMessagesToVercelAISDKMessages(input.messages);
|
|
93
|
+
const tools = convertToolsToVercelAITools(input.tools);
|
|
94
|
+
return streamText({
|
|
95
|
+
model: anthropic("claude-sonnet-4-5-20250929"),
|
|
96
|
+
messages,
|
|
97
|
+
tools,
|
|
98
|
+
abortSignal,
|
|
99
|
+
stopWhen: stepCountIs(5),
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Per-request agent via a factory function on CopilotRuntime
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import {
|
|
109
|
+
CopilotRuntime,
|
|
110
|
+
BuiltInAgent,
|
|
111
|
+
convertInputToTanStackAI,
|
|
112
|
+
} from "@copilotkit/runtime/v2";
|
|
113
|
+
import { chat } from "@tanstack/ai";
|
|
114
|
+
import { openaiText } from "@tanstack/ai-openai";
|
|
115
|
+
|
|
116
|
+
const runtime = new CopilotRuntime({
|
|
117
|
+
agents: ({ request }) => {
|
|
118
|
+
const tenantId = request.headers.get("x-tenant-id") ?? "default";
|
|
119
|
+
return {
|
|
120
|
+
default: new BuiltInAgent({
|
|
121
|
+
type: "tanstack",
|
|
122
|
+
factory: ({ input, abortController }) => {
|
|
123
|
+
const { messages, systemPrompts } = convertInputToTanStackAI(input);
|
|
124
|
+
systemPrompts.unshift(`You are the ${tenantId} assistant.`);
|
|
125
|
+
return chat({
|
|
126
|
+
adapter: openaiText("gpt-4o"),
|
|
127
|
+
messages,
|
|
128
|
+
systemPrompts,
|
|
129
|
+
abortController,
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
}),
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Simple Mode — MCP servers
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
new BuiltInAgent({
|
|
142
|
+
model: "openai/gpt-4o",
|
|
143
|
+
maxSteps: 5,
|
|
144
|
+
mcpServers: [
|
|
145
|
+
{ type: "http", url: "https://mcp.example.com/mcp" },
|
|
146
|
+
{
|
|
147
|
+
type: "sse",
|
|
148
|
+
url: "https://mcp.example.com/sse",
|
|
149
|
+
headers: { Authorization: `Bearer ${process.env.MCP_TOKEN}` },
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Model specifier format
|
|
156
|
+
|
|
157
|
+
`"provider/model"` or `"provider:model"`. Supported providers: `openai`, `anthropic`,
|
|
158
|
+
`google` (aliases `gemini`, `google-gemini`), `vertex`. The bare model id (`"gpt-4o"`) is
|
|
159
|
+
rejected.
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
new BuiltInAgent({ model: "openai/gpt-4o" });
|
|
163
|
+
new BuiltInAgent({ model: "anthropic/claude-sonnet-4.5" });
|
|
164
|
+
new BuiltInAgent({ model: "google/gemini-2.5-pro" });
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Common Mistakes
|
|
168
|
+
|
|
169
|
+
### HIGH Defaulting to Simple Mode when Factory Mode (TanStack AI) is preferred
|
|
170
|
+
|
|
171
|
+
Wrong:
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
const agent = new BuiltInAgent({
|
|
175
|
+
model: "openai/gpt-4o",
|
|
176
|
+
prompt: "You are a helpful assistant.",
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Correct:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import { BuiltInAgent, convertInputToTanStackAI } from "@copilotkit/runtime/v2";
|
|
184
|
+
import { chat } from "@tanstack/ai";
|
|
185
|
+
import { openaiText } from "@tanstack/ai-openai";
|
|
186
|
+
|
|
187
|
+
const agent = new BuiltInAgent({
|
|
188
|
+
type: "tanstack",
|
|
189
|
+
factory: ({ input, abortController }) => {
|
|
190
|
+
const { messages, systemPrompts } = convertInputToTanStackAI(input);
|
|
191
|
+
systemPrompts.unshift("You are a helpful assistant.");
|
|
192
|
+
return chat({
|
|
193
|
+
adapter: openaiText("gpt-4o"),
|
|
194
|
+
messages,
|
|
195
|
+
systemPrompts,
|
|
196
|
+
abortController,
|
|
197
|
+
});
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Factory Mode with TanStack AI is the canonical in-tree default (see
|
|
203
|
+
`examples/v2/react-router/app/routes/api.copilotkit.$.tsx`) and is AG-UI-native. Simple
|
|
204
|
+
Mode is fine for quickstarts but reaches its ceiling on anything non-standard.
|
|
205
|
+
|
|
206
|
+
Source: `examples/v2/react-router/app/routes/api.copilotkit.$.tsx`; maintainer Phase 4c.
|
|
207
|
+
|
|
208
|
+
### HIGH Expecting tool-call loop without raising maxSteps
|
|
209
|
+
|
|
210
|
+
Wrong:
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
new BuiltInAgent({
|
|
214
|
+
model: "openai/gpt-4o",
|
|
215
|
+
tools: [searchTool],
|
|
216
|
+
// maxSteps defaults to undefined → AI SDK stops after one generation; tool results
|
|
217
|
+
// are never fed back. Set maxSteps: N to enable the tool-call loop.
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Correct:
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
new BuiltInAgent({
|
|
225
|
+
model: "openai/gpt-4o",
|
|
226
|
+
tools: [searchTool],
|
|
227
|
+
maxSteps: 5,
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
`maxSteps` defaults to `undefined`, so `stopWhen` is `undefined` and the AI SDK's own
|
|
232
|
+
default applies — `streamText` stops after a single generation, the tool call happens,
|
|
233
|
+
but results are never fed back for a second turn. Set `maxSteps: N` to install
|
|
234
|
+
`stepCountIs(N)` and enable the tool-call loop up to N steps.
|
|
235
|
+
|
|
236
|
+
Source: `packages/runtime/src/agent/index.ts:988-990`.
|
|
237
|
+
|
|
238
|
+
### HIGH Wrong model specifier format
|
|
239
|
+
|
|
240
|
+
Wrong:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
new BuiltInAgent({ model: "gpt-4o" });
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Correct:
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
new BuiltInAgent({ model: "openai/gpt-4o" });
|
|
250
|
+
// Also valid: "openai:gpt-4o"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
`resolveModel` throws `Invalid model string "gpt-4o". Use "openai/gpt-5",
|
|
254
|
+
"anthropic/claude-sonnet-4.5", or "google/gemini-2.5-pro".` when the provider separator
|
|
255
|
+
is missing.
|
|
256
|
+
|
|
257
|
+
Source: `packages/runtime/src/agent/index.ts:186-204`.
|
|
258
|
+
|
|
259
|
+
### HIGH Concurrent run() on the same BuiltInAgent instance
|
|
260
|
+
|
|
261
|
+
Wrong:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
// One shared instance across tenants
|
|
265
|
+
const agent = new BuiltInAgent({ model: "openai/gpt-4o" });
|
|
266
|
+
new CopilotRuntime({ agents: { default: agent } });
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Correct:
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// Use the agents-as-factory form for per-request instances
|
|
273
|
+
new CopilotRuntime({
|
|
274
|
+
agents: ({ request }) => ({
|
|
275
|
+
default: new BuiltInAgent({ model: "openai/gpt-4o" }),
|
|
276
|
+
}),
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
A single `BuiltInAgent` instance guards against concurrent `run()` with
|
|
281
|
+
`"Agent is already running. Call abortRun() first or create a new instance."` Multi-tenant
|
|
282
|
+
servers that share one instance see errors on the second concurrent user.
|
|
283
|
+
|
|
284
|
+
Source: `packages/runtime/src/agent/index.ts:895-898`.
|
|
285
|
+
|
|
286
|
+
### HIGH Expecting state tools to auto-inject in Factory Mode
|
|
287
|
+
|
|
288
|
+
Wrong:
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
new BuiltInAgent({
|
|
292
|
+
type: "tanstack",
|
|
293
|
+
factory: ({ input, abortController }) => {
|
|
294
|
+
const { messages, systemPrompts } = convertInputToTanStackAI(input);
|
|
295
|
+
return chat({
|
|
296
|
+
adapter: openaiText("gpt-4o"),
|
|
297
|
+
messages,
|
|
298
|
+
systemPrompts,
|
|
299
|
+
abortController,
|
|
300
|
+
});
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
// Frontend uses useAgent + shared state — but no state-tool calls come back
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Correct (AI SDK factory — `defineTool` output converts via
|
|
307
|
+
`convertToolDefinitionsToVercelAITools`):
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
import {
|
|
311
|
+
BuiltInAgent,
|
|
312
|
+
convertMessagesToVercelAISDKMessages,
|
|
313
|
+
convertToolDefinitionsToVercelAITools,
|
|
314
|
+
defineTool,
|
|
315
|
+
} from "@copilotkit/runtime/v2";
|
|
316
|
+
import { streamText } from "ai";
|
|
317
|
+
import { openai } from "@ai-sdk/openai";
|
|
318
|
+
import { z } from "zod";
|
|
319
|
+
|
|
320
|
+
const sendStateSnapshot = defineTool({
|
|
321
|
+
name: "AGUISendStateSnapshot",
|
|
322
|
+
description: "Replace the entire application state with a new snapshot",
|
|
323
|
+
parameters: z.object({
|
|
324
|
+
snapshot: z.any().describe("The complete new state object"),
|
|
325
|
+
}),
|
|
326
|
+
execute: async ({ snapshot }) => ({ success: true, snapshot }),
|
|
327
|
+
});
|
|
328
|
+
const sendStateDelta = defineTool({
|
|
329
|
+
name: "AGUISendStateDelta",
|
|
330
|
+
description:
|
|
331
|
+
"Apply incremental updates to application state using JSON Patch operations",
|
|
332
|
+
// MUST mirror the Simple-Mode auto-injected schema (src/agent/index.ts:1140-1176)
|
|
333
|
+
// or the frontend's state handler won't recognize the payload.
|
|
334
|
+
parameters: z.object({
|
|
335
|
+
delta: z
|
|
336
|
+
.array(
|
|
337
|
+
z.object({
|
|
338
|
+
op: z.enum(["add", "replace", "remove"]),
|
|
339
|
+
path: z.string(), // JSON Pointer, e.g. "/foo/bar"
|
|
340
|
+
value: z.any().optional(), // required for add/replace, ignored for remove
|
|
341
|
+
}),
|
|
342
|
+
)
|
|
343
|
+
.describe("Array of JSON Patch operations"),
|
|
344
|
+
}),
|
|
345
|
+
execute: async ({ delta }) => ({ success: true, delta }),
|
|
346
|
+
});
|
|
347
|
+
// If you don't want to hand-wire this, use Simple Mode — it auto-injects both
|
|
348
|
+
// AGUISendStateSnapshot and AGUISendStateDelta with the correct JSON Patch schema.
|
|
349
|
+
// Source: packages/runtime/src/agent/index.ts:1140-1176
|
|
350
|
+
|
|
351
|
+
new BuiltInAgent({
|
|
352
|
+
type: "aisdk",
|
|
353
|
+
factory: ({ input, abortSignal }) =>
|
|
354
|
+
streamText({
|
|
355
|
+
model: openai("gpt-4o"),
|
|
356
|
+
messages: convertMessagesToVercelAISDKMessages(input.messages),
|
|
357
|
+
tools: convertToolDefinitionsToVercelAITools([
|
|
358
|
+
sendStateSnapshot,
|
|
359
|
+
sendStateDelta,
|
|
360
|
+
]),
|
|
361
|
+
abortSignal,
|
|
362
|
+
}),
|
|
363
|
+
});
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
Only Simple Mode auto-injects the AG-UI state tools. In Factory Mode you must register
|
|
367
|
+
them by hand or shared-state updates never reach the LLM. `defineTool` produces a Standard
|
|
368
|
+
Schema V1 + `execute` shape — use `convertToolDefinitionsToVercelAITools([...])` to adapt
|
|
369
|
+
it to the AI SDK's `streamText({ tools })`. TanStack AI factories cannot consume
|
|
370
|
+
`defineTool` output directly; either redefine the tools with `toolDefinition()` from
|
|
371
|
+
`@tanstack/ai`, or switch to the AI SDK factory above.
|
|
372
|
+
|
|
373
|
+
Source: `docs/snippets/shared/backend/custom-agent.mdx:495-588`.
|
|
374
|
+
|
|
375
|
+
### MEDIUM Mixing Simple Mode tools with Factory Mode
|
|
376
|
+
|
|
377
|
+
Wrong:
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
new BuiltInAgent({
|
|
381
|
+
type: "tanstack",
|
|
382
|
+
factory: myFactory,
|
|
383
|
+
tools: [t1, t2], // ignored in Factory Mode
|
|
384
|
+
});
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Correct:
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
new BuiltInAgent({
|
|
391
|
+
type: "tanstack",
|
|
392
|
+
factory: ({ input, abortController }) => {
|
|
393
|
+
const { messages, systemPrompts } = convertInputToTanStackAI(input);
|
|
394
|
+
return chat({
|
|
395
|
+
adapter: openaiText("gpt-4o"),
|
|
396
|
+
messages,
|
|
397
|
+
systemPrompts,
|
|
398
|
+
tools: [t1, t2],
|
|
399
|
+
abortController,
|
|
400
|
+
});
|
|
401
|
+
},
|
|
402
|
+
});
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Factory Mode ignores `config.tools`, `config.mcpServers`, `config.prompt` entirely — the
|
|
406
|
+
factory owns the call. Wire tools inside `chat({ tools })` for TanStack AI, or via
|
|
407
|
+
`convertToolsToVercelAITools(input.tools)` / `convertToolDefinitionsToVercelAITools([...])`
|
|
408
|
+
for AI SDK.
|
|
409
|
+
|
|
410
|
+
Source: `packages/runtime/src/agent/index.ts:1581-1671`.
|
|
411
|
+
|
|
412
|
+
### HIGH Expecting reasoning events from TanStack AI
|
|
413
|
+
|
|
414
|
+
Wrong:
|
|
415
|
+
|
|
416
|
+
```typescript
|
|
417
|
+
new BuiltInAgent({
|
|
418
|
+
type: "tanstack",
|
|
419
|
+
factory: ({ input, abortController }) => {
|
|
420
|
+
const { messages, systemPrompts } = convertInputToTanStackAI(input);
|
|
421
|
+
return chat({
|
|
422
|
+
adapter: anthropicText("claude-sonnet-4-5-20250929"),
|
|
423
|
+
messages,
|
|
424
|
+
systemPrompts,
|
|
425
|
+
modelOptions: { thinking: { type: "enabled", budgetTokens: 10000 } },
|
|
426
|
+
abortController,
|
|
427
|
+
});
|
|
428
|
+
},
|
|
429
|
+
});
|
|
430
|
+
// expecting REASONING_START / REASONING_MESSAGE_CONTENT / REASONING_END — nothing arrives
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
Correct:
|
|
434
|
+
|
|
435
|
+
```typescript
|
|
436
|
+
import {
|
|
437
|
+
BuiltInAgent,
|
|
438
|
+
convertMessagesToVercelAISDKMessages,
|
|
439
|
+
} from "@copilotkit/runtime/v2";
|
|
440
|
+
import { streamText } from "ai";
|
|
441
|
+
import { anthropic } from "@ai-sdk/anthropic";
|
|
442
|
+
|
|
443
|
+
new BuiltInAgent({
|
|
444
|
+
type: "aisdk",
|
|
445
|
+
factory: ({ input, abortSignal }) =>
|
|
446
|
+
streamText({
|
|
447
|
+
model: anthropic("claude-sonnet-4-5-20250929"),
|
|
448
|
+
messages: convertMessagesToVercelAISDKMessages(input.messages),
|
|
449
|
+
providerOptions: {
|
|
450
|
+
anthropic: { thinking: { type: "enabled", budgetTokens: 10000 } },
|
|
451
|
+
},
|
|
452
|
+
abortSignal,
|
|
453
|
+
}),
|
|
454
|
+
});
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
The TanStack AI converter does NOT surface `REASONING_START` /
|
|
458
|
+
`REASONING_MESSAGE_CONTENT` / `REASONING_END` events — even with a thinking-capable model.
|
|
459
|
+
Use AI SDK when the frontend needs a reasoning UI.
|
|
460
|
+
|
|
461
|
+
Source: `docs/snippets/shared/backend/custom-agent.mdx:315-317` (warn callout).
|
|
462
|
+
|
|
463
|
+
### MEDIUM Expecting forwarded system messages
|
|
464
|
+
|
|
465
|
+
Wrong:
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
// Client sends { role: "system", content: "You are..." } and expects it prefixed
|
|
469
|
+
new BuiltInAgent({ model: "openai/gpt-4o" });
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Correct:
|
|
473
|
+
|
|
474
|
+
```typescript
|
|
475
|
+
// Either set the server-side prompt
|
|
476
|
+
new BuiltInAgent({ model: "openai/gpt-4o", prompt: "You are..." });
|
|
477
|
+
// or opt in explicitly
|
|
478
|
+
new BuiltInAgent({ model: "openai/gpt-4o", forwardSystemMessages: true });
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
`forwardSystemMessages` and `forwardDeveloperMessages` default to `false`. System/developer
|
|
482
|
+
messages from the AG-UI input are dropped unless opted in.
|
|
483
|
+
|
|
484
|
+
Source: `packages/runtime/src/agent/index.ts:440-456,809-815`.
|
|
485
|
+
|
|
486
|
+
### MEDIUM Aborting factory's abortController directly
|
|
487
|
+
|
|
488
|
+
Wrong:
|
|
489
|
+
|
|
490
|
+
```typescript
|
|
491
|
+
factory: (ctx) => {
|
|
492
|
+
ctx.abortController.abort(); // JSDoc says don't
|
|
493
|
+
return streamText({
|
|
494
|
+
/* ... */
|
|
495
|
+
});
|
|
496
|
+
};
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
Correct:
|
|
500
|
+
|
|
501
|
+
```typescript
|
|
502
|
+
factory: (ctx) => streamText({ /* ... */, abortSignal: ctx.abortSignal });
|
|
503
|
+
// Externally, from outside the factory:
|
|
504
|
+
agent.abortRun();
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
The JSDoc on `AgentFactoryContext.abortController` explicitly warns against calling
|
|
508
|
+
`.abort()` on it inside the factory — use `agent.abortRun()` or pass `abortSignal` to the
|
|
509
|
+
downstream fetch/LLM call.
|
|
510
|
+
|
|
511
|
+
Source: `packages/runtime/src/agent/index.ts:670-672`.
|
|
512
|
+
|
|
513
|
+
## References
|
|
514
|
+
|
|
515
|
+
- [Model identifiers — supported strings](built-in-agent-model-identifiers.md)
|
|
516
|
+
- [Factory modes — TanStack AI / AI SDK / custom cookbook](built-in-agent-factory-modes.md)
|
|
517
|
+
- [Helper utilities — converter function signatures](built-in-agent-helper-utilities.md)
|
|
518
|
+
|
|
519
|
+
## See also
|
|
520
|
+
|
|
521
|
+
- `copilotkit/server-side-tools` — `defineTool` powers `config.tools` in Simple Mode
|
|
522
|
+
- `copilotkit/setup-endpoint` — mount the runtime that hosts this agent
|
|
523
|
+
- `copilotkit/wiring-external-agents` — alternative when you want an external framework
|