@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.
Files changed (346) hide show
  1. package/dist/lib/observability.d.cts +1 -1
  2. package/dist/lib/observability.d.cts.map +1 -1
  3. package/dist/lib/observability.d.mts +1 -1
  4. package/dist/lib/observability.d.mts.map +1 -1
  5. package/dist/lib/runtime/copilot-runtime.cjs +2 -0
  6. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  7. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  8. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  9. package/dist/lib/runtime/copilot-runtime.mjs +2 -0
  10. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  11. package/dist/package.cjs +5 -8
  12. package/dist/package.mjs +5 -8
  13. package/dist/v2/runtime/core/runtime.cjs +4 -1
  14. package/dist/v2/runtime/core/runtime.cjs.map +1 -1
  15. package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
  16. package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
  17. package/dist/v2/runtime/core/runtime.mjs +4 -1
  18. package/dist/v2/runtime/core/runtime.mjs.map +1 -1
  19. package/dist/v2/runtime/handlers/get-runtime-info.cjs +1 -1
  20. package/dist/v2/runtime/handlers/get-runtime-info.mjs +1 -1
  21. package/dist/v2/runtime/handlers/handle-connect.cjs +1 -1
  22. package/dist/v2/runtime/handlers/handle-connect.mjs +1 -1
  23. package/dist/v2/runtime/handlers/handle-run.cjs +1 -1
  24. package/dist/v2/runtime/handlers/handle-run.mjs +1 -1
  25. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +1 -1
  26. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
  27. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -1
  28. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
  29. package/dist/v2/runtime/telemetry/telemetry-client.cjs +22 -6
  30. package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
  31. package/dist/v2/runtime/telemetry/telemetry-client.mjs +27 -11
  32. package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
  33. package/package.json +9 -19
  34. package/skills/runtime/SKILL.md +98 -0
  35. package/skills/runtime/references/agent-runners-custom.md +161 -0
  36. package/skills/runtime/references/agent-runners-in-memory.md +64 -0
  37. package/skills/runtime/references/agent-runners-sqlite.md +90 -0
  38. package/skills/runtime/references/agent-runners.md +304 -0
  39. package/skills/runtime/references/built-in-agent-factory-modes.md +232 -0
  40. package/skills/runtime/references/built-in-agent-helper-utilities.md +123 -0
  41. package/skills/runtime/references/built-in-agent-model-identifiers.md +59 -0
  42. package/skills/runtime/references/built-in-agent.md +523 -0
  43. package/skills/runtime/references/intelligence-mode.md +336 -0
  44. package/skills/runtime/references/middleware.md +376 -0
  45. package/skills/runtime/references/server-side-tools.md +414 -0
  46. package/skills/runtime/references/setup-endpoint.md +503 -0
  47. package/skills/runtime/references/transcription.md +287 -0
  48. package/skills/runtime/references/wiring-a2a.md +40 -0
  49. package/skills/runtime/references/wiring-adk.md +45 -0
  50. package/skills/runtime/references/wiring-ag2.md +41 -0
  51. package/skills/runtime/references/wiring-agno.md +39 -0
  52. package/skills/runtime/references/wiring-aws-strands.md +59 -0
  53. package/skills/runtime/references/wiring-crewai-crews.md +51 -0
  54. package/skills/runtime/references/wiring-crewai-flows.md +45 -0
  55. package/skills/runtime/references/wiring-external-agents.md +348 -0
  56. package/skills/runtime/references/wiring-langgraph.md +50 -0
  57. package/skills/runtime/references/wiring-llamaindex.md +39 -0
  58. package/skills/runtime/references/wiring-mastra.md +70 -0
  59. package/skills/runtime/references/wiring-mcp-apps-middleware.md +68 -0
  60. package/skills/runtime/references/wiring-ms-agent-framework.md +41 -0
  61. package/skills/runtime/references/wiring-pydantic-ai.md +45 -0
  62. package/CHANGELOG.md +0 -3624
  63. package/__snapshots__/schema/schema.graphql +0 -371
  64. package/dist/v2/runtime/telemetry/scarf-client.cjs +0 -32
  65. package/dist/v2/runtime/telemetry/scarf-client.cjs.map +0 -1
  66. package/dist/v2/runtime/telemetry/scarf-client.mjs +0 -32
  67. package/dist/v2/runtime/telemetry/scarf-client.mjs.map +0 -1
  68. package/scripts/generate-gql-schema.ts +0 -16
  69. package/src/agent/__tests__/agent-test-helpers.ts +0 -476
  70. package/src/agent/__tests__/agent.test.ts +0 -593
  71. package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +0 -116
  72. package/src/agent/__tests__/basic-agent.test.ts +0 -1698
  73. package/src/agent/__tests__/capabilities.test.ts +0 -81
  74. package/src/agent/__tests__/config-tools-execution.test.ts +0 -516
  75. package/src/agent/__tests__/converter-aisdk.test.ts +0 -692
  76. package/src/agent/__tests__/converter-custom.test.ts +0 -319
  77. package/src/agent/__tests__/converter-tanstack-input.test.ts +0 -211
  78. package/src/agent/__tests__/converter-tanstack.test.ts +0 -594
  79. package/src/agent/__tests__/mcp-clients.test.ts +0 -246
  80. package/src/agent/__tests__/mcp-servers-integration.test.ts +0 -373
  81. package/src/agent/__tests__/multimodal-tanstack.test.ts +0 -284
  82. package/src/agent/__tests__/multimodal.test.ts +0 -176
  83. package/src/agent/__tests__/property-overrides.test.ts +0 -598
  84. package/src/agent/__tests__/provider-id-collision.test.ts +0 -195
  85. package/src/agent/__tests__/standard-schema-tools.test.ts +0 -313
  86. package/src/agent/__tests__/standard-schema-types.test.ts +0 -158
  87. package/src/agent/__tests__/state-tools.test.ts +0 -436
  88. package/src/agent/__tests__/test-helpers.ts +0 -197
  89. package/src/agent/__tests__/utils.test.ts +0 -536
  90. package/src/agent/__tests__/zod-regression.test.ts +0 -350
  91. package/src/agent/converters/aisdk.ts +0 -326
  92. package/src/agent/converters/index.ts +0 -7
  93. package/src/agent/converters/tanstack.ts +0 -451
  94. package/src/agent/index.ts +0 -1743
  95. package/src/agents/langgraph/__tests__/event-source.test.ts +0 -256
  96. package/src/agents/langgraph/event-source.ts +0 -365
  97. package/src/agents/langgraph/events.ts +0 -394
  98. package/src/graphql/inputs/action.input.ts +0 -16
  99. package/src/graphql/inputs/agent-session.input.ts +0 -13
  100. package/src/graphql/inputs/agent-state.input.ts +0 -13
  101. package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
  102. package/src/graphql/inputs/cloud.input.ts +0 -8
  103. package/src/graphql/inputs/context-property.input.ts +0 -10
  104. package/src/graphql/inputs/copilot-context.input.ts +0 -10
  105. package/src/graphql/inputs/custom-property.input.ts +0 -15
  106. package/src/graphql/inputs/extensions.input.ts +0 -21
  107. package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
  108. package/src/graphql/inputs/frontend.input.ts +0 -14
  109. package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
  110. package/src/graphql/inputs/load-agent-state.input.ts +0 -10
  111. package/src/graphql/inputs/message.input.ts +0 -110
  112. package/src/graphql/inputs/meta-event.input.ts +0 -18
  113. package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1384
  114. package/src/graphql/message-conversion/agui-to-gql.ts +0 -384
  115. package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1653
  116. package/src/graphql/message-conversion/gql-to-agui.ts +0 -297
  117. package/src/graphql/message-conversion/index.ts +0 -2
  118. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -561
  119. package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +0 -25
  120. package/src/graphql/resolvers/copilot.resolver.ts +0 -785
  121. package/src/graphql/resolvers/resolve-message-id.ts +0 -14
  122. package/src/graphql/resolvers/state.resolver.ts +0 -30
  123. package/src/graphql/types/agents-response.type.ts +0 -19
  124. package/src/graphql/types/base/index.ts +0 -10
  125. package/src/graphql/types/converted/index.ts +0 -183
  126. package/src/graphql/types/copilot-response.type.ts +0 -141
  127. package/src/graphql/types/enums.ts +0 -38
  128. package/src/graphql/types/extensions-response.type.ts +0 -23
  129. package/src/graphql/types/guardrails-result.type.ts +0 -20
  130. package/src/graphql/types/load-agent-state-response.type.ts +0 -17
  131. package/src/graphql/types/message-status.type.ts +0 -48
  132. package/src/graphql/types/meta-events.type.ts +0 -78
  133. package/src/graphql/types/response-status.type.ts +0 -77
  134. package/src/index.ts +0 -3
  135. package/src/langgraph.ts +0 -1
  136. package/src/lib/__tests__/telemetry-disclosure.test.ts +0 -55
  137. package/src/lib/cloud/index.ts +0 -4
  138. package/src/lib/error-messages.ts +0 -211
  139. package/src/lib/index.ts +0 -52
  140. package/src/lib/integrations/index.ts +0 -6
  141. package/src/lib/integrations/nest/index.ts +0 -21
  142. package/src/lib/integrations/nextjs/app-router.ts +0 -47
  143. package/src/lib/integrations/nextjs/pages-router.ts +0 -45
  144. package/src/lib/integrations/node-express/index.ts +0 -21
  145. package/src/lib/integrations/node-http/__tests__/request-duck-type.test.ts +0 -66
  146. package/src/lib/integrations/node-http/index.ts +0 -187
  147. package/src/lib/integrations/node-http/request-handler.ts +0 -128
  148. package/src/lib/integrations/shared.ts +0 -112
  149. package/src/lib/logger.ts +0 -31
  150. package/src/lib/observability.ts +0 -167
  151. package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -183
  152. package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +0 -108
  153. package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -499
  154. package/src/lib/runtime/__tests__/on-after-request.test.ts +0 -122
  155. package/src/lib/runtime/__tests__/retry-utils.test.ts +0 -137
  156. package/src/lib/runtime/__tests__/v1-agent-factory.test.ts +0 -109
  157. package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +0 -345
  158. package/src/lib/runtime/agent-integrations/langgraph/__tests__/run-message-filtering.test.ts +0 -156
  159. package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -263
  160. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -37
  161. package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
  162. package/src/lib/runtime/copilot-runtime.ts +0 -863
  163. package/src/lib/runtime/mcp-tools-utils.ts +0 -313
  164. package/src/lib/runtime/retry-utils.ts +0 -141
  165. package/src/lib/runtime/telemetry-agent-runner.ts +0 -151
  166. package/src/lib/runtime/types.ts +0 -48
  167. package/src/lib/runtime/utils.ts +0 -93
  168. package/src/lib/streaming.ts +0 -220
  169. package/src/lib/telemetry-client.ts +0 -66
  170. package/src/lib/telemetry-disclosure.ts +0 -53
  171. package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -532
  172. package/src/service-adapters/anthropic/utils.ts +0 -219
  173. package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
  174. package/src/service-adapters/conversion.test.ts +0 -56
  175. package/src/service-adapters/conversion.ts +0 -69
  176. package/src/service-adapters/empty/empty-adapter.ts +0 -38
  177. package/src/service-adapters/events.ts +0 -337
  178. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
  179. package/src/service-adapters/google/google-genai-adapter.test.ts +0 -151
  180. package/src/service-adapters/google/google-genai-adapter.ts +0 -95
  181. package/src/service-adapters/groq/groq-adapter.ts +0 -229
  182. package/src/service-adapters/index.ts +0 -18
  183. package/src/service-adapters/langchain/langchain-adapter.ts +0 -113
  184. package/src/service-adapters/langchain/langserve.ts +0 -88
  185. package/src/service-adapters/langchain/types.ts +0 -20
  186. package/src/service-adapters/langchain/utils.ts +0 -330
  187. package/src/service-adapters/openai/__tests__/openai-v5-compat.test.ts +0 -177
  188. package/src/service-adapters/openai/openai-adapter.ts +0 -324
  189. package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -385
  190. package/src/service-adapters/openai/utils.ts +0 -305
  191. package/src/service-adapters/service-adapter.ts +0 -50
  192. package/src/service-adapters/shared/error-utils.ts +0 -64
  193. package/src/service-adapters/shared/index.ts +0 -2
  194. package/src/service-adapters/shared/sdk-client-utils.ts +0 -19
  195. package/src/service-adapters/unify/unify-adapter.ts +0 -165
  196. package/src/utils/failed-response-status-reasons.ts +0 -70
  197. package/src/utils/index.ts +0 -1
  198. package/src/v2/express.ts +0 -1
  199. package/src/v2/hono.ts +0 -1
  200. package/src/v2/index.ts +0 -5
  201. package/src/v2/node.ts +0 -1
  202. package/src/v2/runtime/__tests__/agents-factory.test.ts +0 -136
  203. package/src/v2/runtime/__tests__/backward-compat.test.ts +0 -261
  204. package/src/v2/runtime/__tests__/code-review-fixes.test.ts +0 -500
  205. package/src/v2/runtime/__tests__/cors-credentials.test.ts +0 -320
  206. package/src/v2/runtime/__tests__/debug-sse-response.test.ts +0 -302
  207. package/src/v2/runtime/__tests__/express-adapter.test.ts +0 -188
  208. package/src/v2/runtime/__tests__/express-body-order.test.ts +0 -76
  209. package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +0 -344
  210. package/src/v2/runtime/__tests__/express-single-sse.test.ts +0 -122
  211. package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +0 -65
  212. package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +0 -101
  213. package/src/v2/runtime/__tests__/fetch-cors.test.ts +0 -205
  214. package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +0 -440
  215. package/src/v2/runtime/__tests__/fetch-handler.test.ts +0 -456
  216. package/src/v2/runtime/__tests__/fetch-router.test.ts +0 -276
  217. package/src/v2/runtime/__tests__/get-runtime-info.test.ts +0 -335
  218. package/src/v2/runtime/__tests__/handle-connect.test.ts +0 -585
  219. package/src/v2/runtime/__tests__/handle-run.test.ts +0 -1388
  220. package/src/v2/runtime/__tests__/handle-threads.test.ts +0 -930
  221. package/src/v2/runtime/__tests__/handle-transcribe.test.ts +0 -301
  222. package/src/v2/runtime/__tests__/header-utils.test.ts +0 -88
  223. package/src/v2/runtime/__tests__/hono-adapter.test.ts +0 -150
  224. package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +0 -46
  225. package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +0 -99
  226. package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +0 -457
  227. package/src/v2/runtime/__tests__/hooks.test.ts +0 -557
  228. package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +0 -230
  229. package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +0 -1030
  230. package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +0 -27
  231. package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +0 -32
  232. package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +0 -33
  233. package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +0 -25
  234. package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +0 -32
  235. package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +0 -15
  236. package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +0 -45
  237. package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +0 -58
  238. package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +0 -58
  239. package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +0 -35
  240. package/src/v2/runtime/__tests__/integration/servers/express-single.ts +0 -36
  241. package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +0 -39
  242. package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +0 -30
  243. package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +0 -37
  244. package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +0 -45
  245. package/src/v2/runtime/__tests__/integration/servers/node-single.ts +0 -46
  246. package/src/v2/runtime/__tests__/integration/servers/types.ts +0 -18
  247. package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +0 -253
  248. package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +0 -358
  249. package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +0 -363
  250. package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +0 -194
  251. package/src/v2/runtime/__tests__/mcp-apps-middleware-integration.test.ts +0 -275
  252. package/src/v2/runtime/__tests__/middleware-express.test.ts +0 -208
  253. package/src/v2/runtime/__tests__/middleware-single-express.test.ts +0 -213
  254. package/src/v2/runtime/__tests__/middleware-single.test.ts +0 -225
  255. package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +0 -237
  256. package/src/v2/runtime/__tests__/middleware.test.ts +0 -250
  257. package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +0 -157
  258. package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +0 -728
  259. package/src/v2/runtime/__tests__/router-edge-cases.test.ts +0 -217
  260. package/src/v2/runtime/__tests__/routing-express.test.ts +0 -174
  261. package/src/v2/runtime/__tests__/routing-single-express.test.ts +0 -168
  262. package/src/v2/runtime/__tests__/routing-single.test.ts +0 -193
  263. package/src/v2/runtime/__tests__/routing.test.ts +0 -257
  264. package/src/v2/runtime/__tests__/runtime.test.ts +0 -234
  265. package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +0 -108
  266. package/src/v2/runtime/__tests__/telemetry.test.ts +0 -167
  267. package/src/v2/runtime/__tests__/thread-names.test.ts +0 -188
  268. package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +0 -156
  269. package/src/v2/runtime/core/debug-event-bus.ts +0 -45
  270. package/src/v2/runtime/core/fetch-cors.ts +0 -136
  271. package/src/v2/runtime/core/fetch-handler.ts +0 -492
  272. package/src/v2/runtime/core/fetch-router.ts +0 -203
  273. package/src/v2/runtime/core/hooks.ts +0 -160
  274. package/src/v2/runtime/core/middleware-sse-parser.ts +0 -210
  275. package/src/v2/runtime/core/middleware.ts +0 -115
  276. package/src/v2/runtime/core/runtime.ts +0 -432
  277. package/src/v2/runtime/endpoints/express-fetch-bridge.ts +0 -137
  278. package/src/v2/runtime/endpoints/express-single.ts +0 -54
  279. package/src/v2/runtime/endpoints/express.ts +0 -179
  280. package/src/v2/runtime/endpoints/hono-single.ts +0 -60
  281. package/src/v2/runtime/endpoints/hono.ts +0 -89
  282. package/src/v2/runtime/endpoints/index.ts +0 -4
  283. package/src/v2/runtime/endpoints/node-fetch-handler.ts +0 -48
  284. package/src/v2/runtime/endpoints/node.ts +0 -28
  285. package/src/v2/runtime/endpoints/single-route-helpers.ts +0 -125
  286. package/src/v2/runtime/express.ts +0 -2
  287. package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +0 -176
  288. package/src/v2/runtime/handlers/get-runtime-info.ts +0 -101
  289. package/src/v2/runtime/handlers/handle-connect.ts +0 -80
  290. package/src/v2/runtime/handlers/handle-debug-events.ts +0 -52
  291. package/src/v2/runtime/handlers/handle-run.ts +0 -111
  292. package/src/v2/runtime/handlers/handle-stop.ts +0 -77
  293. package/src/v2/runtime/handlers/handle-threads.ts +0 -11
  294. package/src/v2/runtime/handlers/handle-transcribe.ts +0 -269
  295. package/src/v2/runtime/handlers/header-utils.ts +0 -24
  296. package/src/v2/runtime/handlers/intelligence/connect.ts +0 -102
  297. package/src/v2/runtime/handlers/intelligence/run.ts +0 -351
  298. package/src/v2/runtime/handlers/intelligence/thread-names.ts +0 -246
  299. package/src/v2/runtime/handlers/intelligence/threads.ts +0 -420
  300. package/src/v2/runtime/handlers/shared/agent-utils.ts +0 -154
  301. package/src/v2/runtime/handlers/shared/intelligence-utils.ts +0 -41
  302. package/src/v2/runtime/handlers/shared/json-response.ts +0 -9
  303. package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +0 -28
  304. package/src/v2/runtime/handlers/shared/sse-response.ts +0 -215
  305. package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +0 -71
  306. package/src/v2/runtime/handlers/sse/connect.ts +0 -30
  307. package/src/v2/runtime/handlers/sse/run.ts +0 -40
  308. package/src/v2/runtime/hono.ts +0 -2
  309. package/src/v2/runtime/index.ts +0 -51
  310. package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +0 -601
  311. package/src/v2/runtime/intelligence-platform/__tests__/intelligence-mcp-helper.test.ts +0 -246
  312. package/src/v2/runtime/intelligence-platform/client.ts +0 -818
  313. package/src/v2/runtime/intelligence-platform/index.ts +0 -10
  314. package/src/v2/runtime/node.ts +0 -6
  315. package/src/v2/runtime/open-generative-ui-middleware.ts +0 -373
  316. package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +0 -109
  317. package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +0 -775
  318. package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +0 -777
  319. package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +0 -1039
  320. package/src/v2/runtime/runner/agent-runner.ts +0 -35
  321. package/src/v2/runtime/runner/in-memory.ts +0 -467
  322. package/src/v2/runtime/runner/index.ts +0 -4
  323. package/src/v2/runtime/runner/intelligence.ts +0 -498
  324. package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +0 -96
  325. package/src/v2/runtime/telemetry/events.ts +0 -35
  326. package/src/v2/runtime/telemetry/index.ts +0 -7
  327. package/src/v2/runtime/telemetry/instance-created.ts +0 -44
  328. package/src/v2/runtime/telemetry/scarf-client.ts +0 -39
  329. package/src/v2/runtime/telemetry/telemetry-client.ts +0 -70
  330. package/src/v2/runtime/transcription-service/transcription-service.ts +0 -11
  331. package/tests/global.d.ts +0 -1
  332. package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -259
  333. package/tests/service-adapters/anthropic/anthropic-adapter-language-model.test.ts +0 -101
  334. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -645
  335. package/tests/service-adapters/anthropic/utils-token-trimming.test.ts +0 -301
  336. package/tests/service-adapters/groq/groq-adapter-language-model.test.ts +0 -102
  337. package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -294
  338. package/tests/service-adapters/openai/openai-adapter-language-model.test.ts +0 -122
  339. package/tests/service-adapters/openai/openai-adapter.test.ts +0 -291
  340. package/tests/service-adapters/shared/sdk-client-utils.test.ts +0 -36
  341. package/tests/setup.vitest.ts +0 -8
  342. package/tests/tsconfig.json +0 -10
  343. package/tsconfig.json +0 -20
  344. package/tsdown.config.ts +0 -45
  345. package/typedoc.json +0 -4
  346. package/vitest.config.mjs +0 -13
@@ -0,0 +1,304 @@
1
+ # CopilotKit Agent Runners
2
+
3
+ `AgentRunner` is the abstraction that owns thread run state — active runs, the event stream
4
+ replay, and stop semantics. Pick one per `CopilotRuntime` instance.
5
+
6
+ - `InMemoryAgentRunner` — default; globalThis-keyed Map; lost on restart.
7
+ - `SqliteAgentRunner` — file-backed; requires `better-sqlite3` peer.
8
+ - `IntelligenceAgentRunner` — auto-wired by `CopilotIntelligenceRuntime`. You do NOT
9
+ construct this directly and you cannot pass `runner` alongside `intelligence`.
10
+ - Custom — subclass `AgentRunner` for Redis / Postgres / any backend.
11
+
12
+ ## Setup
13
+
14
+ Default (in-memory, dev only):
15
+
16
+ ```typescript
17
+ import { CopilotRuntime } from "@copilotkit/runtime/v2";
18
+
19
+ // Equivalent to passing `runner: new InMemoryAgentRunner()`
20
+ const runtime = new CopilotRuntime({
21
+ agents: {
22
+ /* ... */
23
+ } as any,
24
+ });
25
+ ```
26
+
27
+ Production (file-backed SQLite):
28
+
29
+ ```typescript
30
+ import { CopilotRuntime } from "@copilotkit/runtime/v2";
31
+ import { SqliteAgentRunner } from "@copilotkit/sqlite-runner";
32
+
33
+ const runtime = new CopilotRuntime({
34
+ agents: {
35
+ /* ... */
36
+ } as any,
37
+ runner: new SqliteAgentRunner({ dbPath: "./data/threads.db" }),
38
+ });
39
+ ```
40
+
41
+ Installation for the SQLite runner (the `better-sqlite3` peer is required):
42
+
43
+ ```bash
44
+ pnpm add @copilotkit/sqlite-runner better-sqlite3
45
+ ```
46
+
47
+ ## Core Patterns
48
+
49
+ ### The AgentRunner contract
50
+
51
+ ```typescript
52
+ import { AgentRunner } from "@copilotkit/runtime/v2";
53
+ import type {
54
+ AgentRunnerRunRequest,
55
+ AgentRunnerConnectRequest,
56
+ AgentRunnerIsRunningRequest,
57
+ AgentRunnerStopRequest,
58
+ } from "@copilotkit/runtime/v2";
59
+ import { Observable } from "rxjs";
60
+ import type { BaseEvent } from "@ag-ui/client";
61
+
62
+ class MyRunner extends AgentRunner {
63
+ run(request: AgentRunnerRunRequest): Observable<BaseEvent> {
64
+ // Start a new run for request.threadId. Throw `new Error("Thread already running")`
65
+ // if a run is in flight. Stream events from agent.run(request.input).
66
+ return new Observable<BaseEvent>();
67
+ }
68
+ connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {
69
+ // Replay events for an active run, or historic runs for request.threadId.
70
+ return new Observable<BaseEvent>();
71
+ }
72
+ async isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {
73
+ return false;
74
+ }
75
+ async stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {
76
+ return true;
77
+ }
78
+ }
79
+ ```
80
+
81
+ ### Handle double-submit on the client
82
+
83
+ Both `InMemoryAgentRunner` and `SqliteAgentRunner` throw
84
+ `"Thread already running"` on concurrent `run()` calls for the same `threadId`. How
85
+ that surfaces to the client depends on the runtime mode:
86
+
87
+ - **Intelligence mode** — the Intelligence platform returns HTTP `409` when a lock is
88
+ held. The client core maps this to `CopilotKitCoreErrorCode.AGENT_THREAD_LOCKED`
89
+ and fires `onError({ code: "agent_thread_locked", ... })`. Handle this in
90
+ `<CopilotKitProvider onError>`.
91
+ - **SSE mode** (default, in-memory / SQLite runners) — the runner throws
92
+ synchronously and the handler returns a plain `500` JSON body like
93
+ `{ "error": "Failed to run agent", "message": "Thread already running" }`.
94
+ There is no typed `agent_thread_locked` code — match on the message text or
95
+ just guard on the client with a busy flag.
96
+
97
+ ```tsx
98
+ // client — Intelligence mode (typed code)
99
+ import { CopilotKitProvider } from "@copilotkit/react-core/v2";
100
+
101
+ <CopilotKitProvider
102
+ onError={({ code }) => {
103
+ if (code === "agent_thread_locked") {
104
+ alert("Agent is busy — wait for the current response to finish.");
105
+ }
106
+ }}
107
+ />;
108
+ ```
109
+
110
+ ```tsx
111
+ // client — any mode: guard with a busy flag so double-submit is impossible
112
+ import { useAgent } from "@copilotkit/react-core/v2";
113
+ import { useState } from "react";
114
+
115
+ function Composer() {
116
+ const agent = useAgent({ agentId: "default" });
117
+ const [busy, setBusy] = useState(false);
118
+
119
+ async function send(text: string) {
120
+ if (busy) return;
121
+ setBusy(true);
122
+ try {
123
+ await agent?.addMessage({ role: "user", content: text });
124
+ } finally {
125
+ setBusy(false);
126
+ }
127
+ }
128
+
129
+ return null;
130
+ }
131
+ ```
132
+
133
+ ## Common Mistakes
134
+
135
+ ### HIGH Shipping InMemoryAgentRunner to production
136
+
137
+ Wrong:
138
+
139
+ ```typescript
140
+ // production:
141
+ new CopilotRuntime({ agents: { default: agent } });
142
+ ```
143
+
144
+ Correct:
145
+
146
+ ```typescript
147
+ import { SqliteAgentRunner } from "@copilotkit/sqlite-runner";
148
+
149
+ new CopilotRuntime({
150
+ agents: { default: agent },
151
+ runner: new SqliteAgentRunner({ dbPath: "./data/threads.db" }),
152
+ });
153
+ // Or upgrade to Intelligence mode for managed durability.
154
+ ```
155
+
156
+ The default runner is `new InMemoryAgentRunner()`. It keeps state in a `globalThis`-keyed
157
+ Map — threads are lost on restart, and horizontally-scaled instances see divergent state.
158
+
159
+ Source: `packages/runtime/src/v2/runtime/runner/in-memory.ts:63-96`.
160
+
161
+ ### HIGH Setting runner alongside intelligence option
162
+
163
+ Wrong:
164
+
165
+ ```typescript
166
+ new CopilotRuntime({
167
+ agents,
168
+ intelligence,
169
+ runner: new SqliteAgentRunner({ dbPath: "./data/threads.db" }),
170
+ });
171
+ ```
172
+
173
+ Correct:
174
+
175
+ ```typescript
176
+ new CopilotRuntime({
177
+ agents,
178
+ intelligence,
179
+ identifyUser: (req) => ({ id: req.headers.get("x-user-id")! }),
180
+ });
181
+ ```
182
+
183
+ `CopilotIntelligenceRuntimeOptions` does not declare a `runner` field — Intelligence mode
184
+ auto-wires `IntelligenceAgentRunner` pointed at the Cloud socket. Excess-property checks will
185
+ flag a `runner:` key on an Intelligence-shaped options object as a type error, and at runtime
186
+ the auto-wired Intelligence runner wins regardless of what you pass.
187
+
188
+ Source: `packages/runtime/src/v2/runtime/core/runtime.ts:149-173,285-294`.
189
+
190
+ ### HIGH Forgetting the better-sqlite3 peer
191
+
192
+ Wrong:
193
+
194
+ ```bash
195
+ pnpm add @copilotkit/sqlite-runner
196
+ ```
197
+
198
+ Correct:
199
+
200
+ ```bash
201
+ pnpm add @copilotkit/sqlite-runner better-sqlite3
202
+ ```
203
+
204
+ `@copilotkit/sqlite-runner` imports `better-sqlite3` at the top of its module, so if the peer
205
+ is missing, `import { SqliteAgentRunner } from "@copilotkit/sqlite-runner"` itself fails at
206
+ module load with `Cannot find module 'better-sqlite3'` — long before the constructor runs.
207
+ (The constructor has a friendlier multi-line install hint as a belt-and-suspenders fallback,
208
+ but in practice you will see the bare module-resolution error first.) It is a peer dependency,
209
+ not a direct dep.
210
+
211
+ Source: `packages/sqlite-runner/src/sqlite-runner.ts:18`, `:55-66`.
212
+
213
+ ### HIGH Default SqliteAgentRunner with :memory: dbPath
214
+
215
+ Wrong:
216
+
217
+ ```typescript
218
+ new SqliteAgentRunner();
219
+ ```
220
+
221
+ Correct:
222
+
223
+ ```typescript
224
+ new SqliteAgentRunner({ dbPath: "./data/threads.db" });
225
+ ```
226
+
227
+ The default `dbPath` is `":memory:"` — SQLite's in-memory mode. Data is lost at restart,
228
+ defeating the reason to use the file-backed runner.
229
+
230
+ Source: `packages/sqlite-runner/src/sqlite-runner.ts:48-54`.
231
+
232
+ ### MEDIUM Concurrent run() on the same threadId
233
+
234
+ Wrong:
235
+
236
+ ```tsx
237
+ // Double-click send button → two POST /agent/:id/run to the same thread
238
+ <button onClick={() => agent.addMessage({ role: "user", content })}>
239
+ Send
240
+ </button>
241
+ ```
242
+
243
+ Correct:
244
+
245
+ ```tsx
246
+ const [busy, setBusy] = useState(false);
247
+ <button
248
+ disabled={busy}
249
+ onClick={async () => {
250
+ setBusy(true);
251
+ try {
252
+ await agent.addMessage({ role: "user", content });
253
+ } finally {
254
+ setBusy(false);
255
+ }
256
+ }}
257
+ >
258
+ Send
259
+ </button>;
260
+ ```
261
+
262
+ Both runners throw `"Thread already running"` on concurrent runs. Debounce on the client.
263
+ In Intelligence mode you can additionally handle `code === "agent_thread_locked"` in
264
+ `<CopilotKitProvider onError>`; SSE mode surfaces only a generic 500 with that message.
265
+
266
+ Source: `packages/runtime/src/v2/runtime/runner/in-memory.ts:110`;
267
+ `packages/core/src/intelligence-agent.ts:368-369`.
268
+
269
+ ### HIGH In-memory runner + horizontal scaling
270
+
271
+ Wrong:
272
+
273
+ ```typescript
274
+ // 3 Fly.io / Cloud Run instances, each with its own InMemoryAgentRunner
275
+ new CopilotRuntime({ agents });
276
+ ```
277
+
278
+ Correct:
279
+
280
+ ```typescript
281
+ // Either sticky-session a single instance per thread, or use shared state:
282
+ new CopilotRuntime({
283
+ agents,
284
+ runner: new SqliteAgentRunner({ dbPath: process.env.THREADS_DB! }),
285
+ });
286
+ // Best: Intelligence mode for managed multi-instance durability.
287
+ ```
288
+
289
+ `InMemoryAgentRunner`'s `globalThis` store is per-process — multi-instance deploys see
290
+ totally different thread state per worker, making reconnects and `GET /connect` non-deterministic.
291
+
292
+ Source: `packages/runtime/src/v2/runtime/runner/in-memory.ts:63-96`.
293
+
294
+ ## References
295
+
296
+ - [InMemoryAgentRunner — internals and hot-reload note](agent-runners-in-memory.md)
297
+ - [SqliteAgentRunner — schema, retention, ops](agent-runners-sqlite.md)
298
+ - [Custom runner — Redis/Postgres skeleton](agent-runners-custom.md)
299
+
300
+ ## See also
301
+
302
+ - `copilotkit/intelligence-mode` — managed durability alternative (Cloud-only)
303
+ - `copilotkit/setup-endpoint` — runner is passed via the CopilotRuntime constructor
304
+ - `copilotkit/scale-to-multi-agent` — horizontal scaling considerations
@@ -0,0 +1,232 @@
1
+ BuiltInAgent Factory Modes — cookbook for TanStack AI, AI SDK, and custom AG-UI factories.
2
+
3
+ ## The AgentFactoryContext
4
+
5
+ ```typescript
6
+ // packages/runtime/src/agent/index.ts
7
+ export interface AgentFactoryContext {
8
+ input: RunAgentInput; // messages, tools, forwardedProps, context
9
+ abortController: AbortController; // prefer abortSignal
10
+ abortSignal: AbortSignal; // pass to AI SDK / fetch / custom
11
+ }
12
+ ```
13
+
14
+ Rule of thumb:
15
+
16
+ - Prefer `abortSignal` for AI SDK, fetch, custom backends.
17
+ - Use `abortController` for TanStack AI (its `chat()` takes the controller, not the signal).
18
+ - NEVER call `ctx.abortController.abort()` inside the factory — use
19
+ `agent.abortRun()` from outside.
20
+
21
+ ## TanStack AI factory (preferred)
22
+
23
+ ```typescript
24
+ import { BuiltInAgent, convertInputToTanStackAI } from "@copilotkit/runtime/v2";
25
+ import { chat } from "@tanstack/ai";
26
+ import { openaiText } from "@tanstack/ai-openai";
27
+
28
+ 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
+ tools: [
38
+ /* TanStack AI toolDefinition()s */
39
+ ],
40
+ abortController,
41
+ });
42
+ },
43
+ });
44
+ ```
45
+
46
+ ### TanStack AI + forwardedProps
47
+
48
+ ```typescript
49
+ new BuiltInAgent({
50
+ type: "tanstack",
51
+ factory: ({ input, abortController }) => {
52
+ const { messages, systemPrompts } = convertInputToTanStackAI(input);
53
+ const fwd = input.forwardedProps as
54
+ | { model?: string; temperature?: number }
55
+ | undefined;
56
+ return chat({
57
+ adapter: openaiText(fwd?.model ?? "gpt-4o"),
58
+ messages,
59
+ systemPrompts,
60
+ modelOptions: { temperature: fwd?.temperature ?? 0.2 },
61
+ abortController,
62
+ });
63
+ },
64
+ });
65
+ ```
66
+
67
+ ## AI SDK factory (use when reasoning events are required)
68
+
69
+ ```typescript
70
+ import {
71
+ BuiltInAgent,
72
+ convertMessagesToVercelAISDKMessages,
73
+ convertToolsToVercelAITools,
74
+ } from "@copilotkit/runtime/v2";
75
+ import { streamText, stepCountIs } from "ai";
76
+ import { openai } from "@ai-sdk/openai";
77
+
78
+ new BuiltInAgent({
79
+ type: "aisdk",
80
+ factory: ({ input, abortSignal }) => {
81
+ const messages = convertMessagesToVercelAISDKMessages(input.messages, {
82
+ forwardSystemMessages: true,
83
+ });
84
+ const tools = convertToolsToVercelAITools(input.tools);
85
+ return streamText({
86
+ model: openai("gpt-4o"),
87
+ messages,
88
+ tools,
89
+ abortSignal,
90
+ stopWhen: stepCountIs(5),
91
+ });
92
+ },
93
+ });
94
+ ```
95
+
96
+ The `BuiltInAgentAISDKFactoryConfig` contract requires an object with a `fullStream`
97
+ async iterable — this is exactly what `streamText()` returns.
98
+
99
+ ## AI SDK + reasoning (Anthropic thinking)
100
+
101
+ ```typescript
102
+ import { anthropic } from "@ai-sdk/anthropic";
103
+ import { streamText } from "ai";
104
+ import {
105
+ BuiltInAgent,
106
+ convertMessagesToVercelAISDKMessages,
107
+ } from "@copilotkit/runtime/v2";
108
+
109
+ new BuiltInAgent({
110
+ type: "aisdk",
111
+ factory: ({ input, abortSignal }) =>
112
+ streamText({
113
+ model: anthropic("claude-sonnet-4"),
114
+ messages: convertMessagesToVercelAISDKMessages(input.messages),
115
+ providerOptions: {
116
+ anthropic: { thinking: { type: "enabled", budgetTokens: 10000 } },
117
+ },
118
+ abortSignal,
119
+ }),
120
+ });
121
+ ```
122
+
123
+ TanStack AI silently drops reasoning events — only AI SDK surfaces them.
124
+
125
+ ## Custom factory (raw AG-UI events)
126
+
127
+ ```typescript
128
+ import { BuiltInAgent } from "@copilotkit/runtime/v2";
129
+ import type { BaseEvent } from "@ag-ui/client";
130
+ import { EventType } from "@ag-ui/client";
131
+
132
+ new BuiltInAgent({
133
+ type: "custom",
134
+ factory: async function* ({ input, abortSignal }): AsyncIterable<BaseEvent> {
135
+ // Check abortSignal.aborted on every iteration — agent.abortRun() signals
136
+ // cancellation via this flag, but the generator must consult it to stop yielding.
137
+ if (abortSignal.aborted) return;
138
+
139
+ const messageId = crypto.randomUUID();
140
+ yield {
141
+ type: EventType.TEXT_MESSAGE_START,
142
+ messageId,
143
+ role: "assistant",
144
+ } as any;
145
+
146
+ for (const delta of ["Hello", ", ", "world."]) {
147
+ if (abortSignal.aborted) return; // honor cancellation between yields
148
+ yield {
149
+ type: EventType.TEXT_MESSAGE_CONTENT,
150
+ messageId,
151
+ delta,
152
+ } as any;
153
+ }
154
+
155
+ yield { type: EventType.TEXT_MESSAGE_END, messageId } as any;
156
+ },
157
+ });
158
+ ```
159
+
160
+ A custom factory that never checks `abortSignal.aborted` (or registers an
161
+ `addEventListener("abort", …)` handler to break its loop) is non-cancellable —
162
+ `agent.abortRun()` will flip the flag but the generator will keep yielding until it
163
+ exhausts its own source. Pass `abortSignal` through to any underlying `fetch` /
164
+ streaming API as well so the upstream request is torn down.
165
+
166
+ ## Manual state-tool wiring (Factory Mode only)
167
+
168
+ Simple Mode auto-injects `AGUISendStateSnapshot` / `AGUISendStateDelta`. In Factory Mode
169
+ you must register them by hand for shared-state updates to reach the LLM. The AI SDK
170
+ factory works out of the box because `defineTool` output adapts through
171
+ `convertToolDefinitionsToVercelAITools`:
172
+
173
+ ```typescript
174
+ import {
175
+ BuiltInAgent,
176
+ convertMessagesToVercelAISDKMessages,
177
+ convertToolDefinitionsToVercelAITools,
178
+ defineTool,
179
+ } from "@copilotkit/runtime/v2";
180
+ import { streamText } from "ai";
181
+ import { openai } from "@ai-sdk/openai";
182
+ import { z } from "zod";
183
+
184
+ const sendStateSnapshot = defineTool({
185
+ name: "AGUISendStateSnapshot",
186
+ description: "Replace the entire application state with a new snapshot",
187
+ parameters: z.object({
188
+ snapshot: z.any().describe("The complete new state object"),
189
+ }),
190
+ execute: async ({ snapshot }) => ({ success: true, snapshot }),
191
+ });
192
+ const sendStateDelta = defineTool({
193
+ name: "AGUISendStateDelta",
194
+ description:
195
+ "Apply incremental updates to application state using JSON Patch operations",
196
+ // MUST mirror the Simple-Mode auto-injected schema (src/agent/index.ts:1140-1176)
197
+ // or the frontend's state handler won't recognize the payload.
198
+ parameters: z.object({
199
+ delta: z
200
+ .array(
201
+ z.object({
202
+ op: z.enum(["add", "replace", "remove"]),
203
+ path: z.string(),
204
+ value: z.any().optional(),
205
+ }),
206
+ )
207
+ .describe("Array of JSON Patch operations"),
208
+ }),
209
+ execute: async ({ delta }) => ({ success: true, delta }),
210
+ });
211
+
212
+ new BuiltInAgent({
213
+ type: "aisdk",
214
+ factory: ({ input, abortSignal }) =>
215
+ streamText({
216
+ model: openai("gpt-4o"),
217
+ messages: convertMessagesToVercelAISDKMessages(input.messages),
218
+ tools: convertToolDefinitionsToVercelAITools([
219
+ sendStateSnapshot,
220
+ sendStateDelta,
221
+ ]),
222
+ abortSignal,
223
+ }),
224
+ });
225
+ ```
226
+
227
+ For TanStack AI factories, `defineTool` output is NOT a TanStack tool — passing it to
228
+ `chat({ tools })` does not work. Either switch to the AI SDK factory above, or redefine
229
+ the tools with `toolDefinition()` from `@tanstack/ai`.
230
+
231
+ Source: `packages/runtime/src/agent/index.ts`,
232
+ `docs/content/docs/integrations/built-in-agent/custom-agent.mdx`.
@@ -0,0 +1,123 @@
1
+ BuiltInAgent helper utilities — exported from `@copilotkit/runtime/v2`.
2
+
3
+ ## convertInputToTanStackAI
4
+
5
+ ```typescript
6
+ import { convertInputToTanStackAI } from "@copilotkit/runtime/v2";
7
+
8
+ // signature (simplified):
9
+ // convertInputToTanStackAI(input: RunAgentInput): {
10
+ // messages: TanStackAIMessage[];
11
+ // systemPrompts: string[];
12
+ // }
13
+ ```
14
+
15
+ Converts the AG-UI `RunAgentInput` into TanStack AI's `chat()` inputs. System messages in
16
+ the input are collected into the `systemPrompts` array (not the `messages` array). Unshift
17
+ your own system prompt onto `systemPrompts` before calling `chat()`:
18
+
19
+ ```typescript
20
+ const { messages, systemPrompts } = convertInputToTanStackAI(input);
21
+ systemPrompts.unshift("You are a helpful assistant.");
22
+ return chat({ adapter, messages, systemPrompts, abortController });
23
+ ```
24
+
25
+ Source: `packages/runtime/src/agent/converters/tanstack.ts:156`.
26
+
27
+ ## convertMessagesToVercelAISDKMessages
28
+
29
+ ```typescript
30
+ import { convertMessagesToVercelAISDKMessages } from "@copilotkit/runtime/v2";
31
+
32
+ // signature:
33
+ // convertMessagesToVercelAISDKMessages(
34
+ // messages: Message[],
35
+ // options?: { forwardSystemMessages?: boolean; forwardDeveloperMessages?: boolean }
36
+ // ): ModelMessage[]
37
+ ```
38
+
39
+ Converts AG-UI `Message[]` to the Vercel AI SDK's `ModelMessage[]`. Handles multimodal
40
+ content (text, image, audio/video/document, and legacy `binary`). By default drops
41
+ `role: "system"` and `role: "developer"` messages — set the options to opt in.
42
+
43
+ ```typescript
44
+ const messages = convertMessagesToVercelAISDKMessages(input.messages, {
45
+ forwardSystemMessages: true,
46
+ });
47
+ ```
48
+
49
+ Source: `packages/runtime/src/agent/index.ts:435`.
50
+
51
+ ## convertToolsToVercelAITools
52
+
53
+ ```typescript
54
+ import { convertToolsToVercelAITools } from "@copilotkit/runtime/v2";
55
+
56
+ // signature:
57
+ // convertToolsToVercelAITools(tools: RunAgentInput["tools"]): ToolSet
58
+ ```
59
+
60
+ Converts AG-UI `input.tools` (tools registered on the frontend — their parameters are plain
61
+ JSON Schema) into the AI SDK's `ToolSet`. Throws `Invalid JSON schema for tool ${name}`
62
+ when a tool's parameters aren't a JSON schema object. The resulting tools have no
63
+ `execute` — the AI SDK emits tool-call events and the frontend handles them.
64
+
65
+ ```typescript
66
+ const tools = convertToolsToVercelAITools(input.tools);
67
+ return streamText({ model, messages, tools, abortSignal });
68
+ ```
69
+
70
+ Source: `packages/runtime/src/agent/index.ts:599`.
71
+
72
+ ## convertToolDefinitionsToVercelAITools
73
+
74
+ ```typescript
75
+ import { convertToolDefinitionsToVercelAITools } from "@copilotkit/runtime/v2";
76
+
77
+ // signature:
78
+ // convertToolDefinitionsToVercelAITools(tools: ToolDefinition[]): ToolSet
79
+ ```
80
+
81
+ Converts server-side `ToolDefinition[]` (Standard Schema V1 parameters + `execute`
82
+ function) into an AI SDK `ToolSet`. Zod schemas pass through directly; non-Zod Standard
83
+ Schema V1 parameters (Valibot, ArkType, ...) are converted to JSON Schema via
84
+ `schemaToJsonSchema` and wrapped with `jsonSchema()` from `ai`.
85
+
86
+ ```typescript
87
+ import { defineTool } from "@copilotkit/runtime/v2";
88
+ import { z } from "zod";
89
+
90
+ const searchTool = defineTool({
91
+ name: "search",
92
+ description: "Search the web.",
93
+ parameters: z.object({ query: z.string() }),
94
+ execute: async ({ query }) => ({ results: [] }),
95
+ });
96
+
97
+ const tools = convertToolDefinitionsToVercelAITools([searchTool]);
98
+ return streamText({ model, messages, tools, abortSignal });
99
+ ```
100
+
101
+ Source: `packages/runtime/src/agent/index.ts:633`.
102
+
103
+ ## resolveModel
104
+
105
+ ```typescript
106
+ import { resolveModel } from "@copilotkit/runtime/v2";
107
+
108
+ // signature:
109
+ // resolveModel(spec: ModelSpecifier, apiKey?: string): LanguageModel
110
+ ```
111
+
112
+ Resolves a `"provider/model"` (or `"provider:model"`) string to a `LanguageModel`. If
113
+ `spec` is already a `LanguageModel`, it's returned as-is. Throws
114
+ `Invalid model string "..."` when the provider separator is missing.
115
+
116
+ Supported providers: `openai`, `anthropic`, `google`/`gemini`/`google-gemini`, `vertex`.
117
+ Unknown providers throw `Unknown provider "..." in "...". Supported: openai, anthropic, google (gemini).`
118
+
119
+ ```typescript
120
+ const model = resolveModel("openai/gpt-4o", process.env.OPENAI_API_KEY);
121
+ ```
122
+
123
+ Source: `packages/runtime/src/agent/index.ts:176-249`.