@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.
Files changed (342) hide show
  1. package/dist/lib/runtime/copilot-runtime.cjs +2 -0
  2. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  3. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  4. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  5. package/dist/lib/runtime/copilot-runtime.mjs +2 -0
  6. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  7. package/dist/package.cjs +52 -19
  8. package/dist/package.mjs +52 -19
  9. package/dist/v2/runtime/core/runtime.cjs +4 -1
  10. package/dist/v2/runtime/core/runtime.cjs.map +1 -1
  11. package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
  12. package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
  13. package/dist/v2/runtime/core/runtime.mjs +4 -1
  14. package/dist/v2/runtime/core/runtime.mjs.map +1 -1
  15. package/dist/v2/runtime/handlers/get-runtime-info.cjs +1 -1
  16. package/dist/v2/runtime/handlers/get-runtime-info.mjs +1 -1
  17. package/dist/v2/runtime/handlers/handle-connect.cjs +1 -1
  18. package/dist/v2/runtime/handlers/handle-connect.mjs +1 -1
  19. package/dist/v2/runtime/handlers/handle-run.cjs +1 -1
  20. package/dist/v2/runtime/handlers/handle-run.mjs +1 -1
  21. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +1 -1
  22. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
  23. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -1
  24. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
  25. package/dist/v2/runtime/telemetry/telemetry-client.cjs +22 -6
  26. package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
  27. package/dist/v2/runtime/telemetry/telemetry-client.mjs +27 -11
  28. package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
  29. package/package.json +8 -18
  30. package/skills/runtime/SKILL.md +98 -0
  31. package/skills/runtime/references/agent-runners-custom.md +161 -0
  32. package/skills/runtime/references/agent-runners-in-memory.md +64 -0
  33. package/skills/runtime/references/agent-runners-sqlite.md +90 -0
  34. package/skills/runtime/references/agent-runners.md +304 -0
  35. package/skills/runtime/references/built-in-agent-factory-modes.md +232 -0
  36. package/skills/runtime/references/built-in-agent-helper-utilities.md +123 -0
  37. package/skills/runtime/references/built-in-agent-model-identifiers.md +59 -0
  38. package/skills/runtime/references/built-in-agent.md +523 -0
  39. package/skills/runtime/references/intelligence-mode.md +336 -0
  40. package/skills/runtime/references/middleware.md +376 -0
  41. package/skills/runtime/references/server-side-tools.md +414 -0
  42. package/skills/runtime/references/setup-endpoint.md +503 -0
  43. package/skills/runtime/references/transcription.md +287 -0
  44. package/skills/runtime/references/wiring-a2a.md +40 -0
  45. package/skills/runtime/references/wiring-adk.md +45 -0
  46. package/skills/runtime/references/wiring-ag2.md +41 -0
  47. package/skills/runtime/references/wiring-agno.md +39 -0
  48. package/skills/runtime/references/wiring-aws-strands.md +59 -0
  49. package/skills/runtime/references/wiring-crewai-crews.md +51 -0
  50. package/skills/runtime/references/wiring-crewai-flows.md +45 -0
  51. package/skills/runtime/references/wiring-external-agents.md +348 -0
  52. package/skills/runtime/references/wiring-langgraph.md +50 -0
  53. package/skills/runtime/references/wiring-llamaindex.md +39 -0
  54. package/skills/runtime/references/wiring-mastra.md +70 -0
  55. package/skills/runtime/references/wiring-mcp-apps-middleware.md +68 -0
  56. package/skills/runtime/references/wiring-ms-agent-framework.md +41 -0
  57. package/skills/runtime/references/wiring-pydantic-ai.md +45 -0
  58. package/CHANGELOG.md +0 -3624
  59. package/__snapshots__/schema/schema.graphql +0 -371
  60. package/dist/v2/runtime/telemetry/scarf-client.cjs +0 -32
  61. package/dist/v2/runtime/telemetry/scarf-client.cjs.map +0 -1
  62. package/dist/v2/runtime/telemetry/scarf-client.mjs +0 -32
  63. package/dist/v2/runtime/telemetry/scarf-client.mjs.map +0 -1
  64. package/scripts/generate-gql-schema.ts +0 -16
  65. package/src/agent/__tests__/agent-test-helpers.ts +0 -476
  66. package/src/agent/__tests__/agent.test.ts +0 -593
  67. package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +0 -116
  68. package/src/agent/__tests__/basic-agent.test.ts +0 -1698
  69. package/src/agent/__tests__/capabilities.test.ts +0 -81
  70. package/src/agent/__tests__/config-tools-execution.test.ts +0 -516
  71. package/src/agent/__tests__/converter-aisdk.test.ts +0 -692
  72. package/src/agent/__tests__/converter-custom.test.ts +0 -319
  73. package/src/agent/__tests__/converter-tanstack-input.test.ts +0 -211
  74. package/src/agent/__tests__/converter-tanstack.test.ts +0 -594
  75. package/src/agent/__tests__/mcp-clients.test.ts +0 -246
  76. package/src/agent/__tests__/mcp-servers-integration.test.ts +0 -373
  77. package/src/agent/__tests__/multimodal-tanstack.test.ts +0 -284
  78. package/src/agent/__tests__/multimodal.test.ts +0 -176
  79. package/src/agent/__tests__/property-overrides.test.ts +0 -598
  80. package/src/agent/__tests__/provider-id-collision.test.ts +0 -195
  81. package/src/agent/__tests__/standard-schema-tools.test.ts +0 -313
  82. package/src/agent/__tests__/standard-schema-types.test.ts +0 -158
  83. package/src/agent/__tests__/state-tools.test.ts +0 -436
  84. package/src/agent/__tests__/test-helpers.ts +0 -197
  85. package/src/agent/__tests__/utils.test.ts +0 -536
  86. package/src/agent/__tests__/zod-regression.test.ts +0 -350
  87. package/src/agent/converters/aisdk.ts +0 -326
  88. package/src/agent/converters/index.ts +0 -7
  89. package/src/agent/converters/tanstack.ts +0 -451
  90. package/src/agent/index.ts +0 -1743
  91. package/src/agents/langgraph/__tests__/event-source.test.ts +0 -256
  92. package/src/agents/langgraph/event-source.ts +0 -365
  93. package/src/agents/langgraph/events.ts +0 -394
  94. package/src/graphql/inputs/action.input.ts +0 -16
  95. package/src/graphql/inputs/agent-session.input.ts +0 -13
  96. package/src/graphql/inputs/agent-state.input.ts +0 -13
  97. package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
  98. package/src/graphql/inputs/cloud.input.ts +0 -8
  99. package/src/graphql/inputs/context-property.input.ts +0 -10
  100. package/src/graphql/inputs/copilot-context.input.ts +0 -10
  101. package/src/graphql/inputs/custom-property.input.ts +0 -15
  102. package/src/graphql/inputs/extensions.input.ts +0 -21
  103. package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
  104. package/src/graphql/inputs/frontend.input.ts +0 -14
  105. package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
  106. package/src/graphql/inputs/load-agent-state.input.ts +0 -10
  107. package/src/graphql/inputs/message.input.ts +0 -110
  108. package/src/graphql/inputs/meta-event.input.ts +0 -18
  109. package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1384
  110. package/src/graphql/message-conversion/agui-to-gql.ts +0 -384
  111. package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1653
  112. package/src/graphql/message-conversion/gql-to-agui.ts +0 -297
  113. package/src/graphql/message-conversion/index.ts +0 -2
  114. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -561
  115. package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +0 -25
  116. package/src/graphql/resolvers/copilot.resolver.ts +0 -785
  117. package/src/graphql/resolvers/resolve-message-id.ts +0 -14
  118. package/src/graphql/resolvers/state.resolver.ts +0 -30
  119. package/src/graphql/types/agents-response.type.ts +0 -19
  120. package/src/graphql/types/base/index.ts +0 -10
  121. package/src/graphql/types/converted/index.ts +0 -183
  122. package/src/graphql/types/copilot-response.type.ts +0 -141
  123. package/src/graphql/types/enums.ts +0 -38
  124. package/src/graphql/types/extensions-response.type.ts +0 -23
  125. package/src/graphql/types/guardrails-result.type.ts +0 -20
  126. package/src/graphql/types/load-agent-state-response.type.ts +0 -17
  127. package/src/graphql/types/message-status.type.ts +0 -48
  128. package/src/graphql/types/meta-events.type.ts +0 -78
  129. package/src/graphql/types/response-status.type.ts +0 -77
  130. package/src/index.ts +0 -3
  131. package/src/langgraph.ts +0 -1
  132. package/src/lib/__tests__/telemetry-disclosure.test.ts +0 -55
  133. package/src/lib/cloud/index.ts +0 -4
  134. package/src/lib/error-messages.ts +0 -211
  135. package/src/lib/index.ts +0 -52
  136. package/src/lib/integrations/index.ts +0 -6
  137. package/src/lib/integrations/nest/index.ts +0 -21
  138. package/src/lib/integrations/nextjs/app-router.ts +0 -47
  139. package/src/lib/integrations/nextjs/pages-router.ts +0 -45
  140. package/src/lib/integrations/node-express/index.ts +0 -21
  141. package/src/lib/integrations/node-http/__tests__/request-duck-type.test.ts +0 -66
  142. package/src/lib/integrations/node-http/index.ts +0 -187
  143. package/src/lib/integrations/node-http/request-handler.ts +0 -128
  144. package/src/lib/integrations/shared.ts +0 -112
  145. package/src/lib/logger.ts +0 -31
  146. package/src/lib/observability.ts +0 -167
  147. package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -183
  148. package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +0 -108
  149. package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -499
  150. package/src/lib/runtime/__tests__/on-after-request.test.ts +0 -122
  151. package/src/lib/runtime/__tests__/retry-utils.test.ts +0 -137
  152. package/src/lib/runtime/__tests__/v1-agent-factory.test.ts +0 -109
  153. package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +0 -345
  154. package/src/lib/runtime/agent-integrations/langgraph/__tests__/run-message-filtering.test.ts +0 -156
  155. package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -263
  156. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -37
  157. package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
  158. package/src/lib/runtime/copilot-runtime.ts +0 -863
  159. package/src/lib/runtime/mcp-tools-utils.ts +0 -313
  160. package/src/lib/runtime/retry-utils.ts +0 -141
  161. package/src/lib/runtime/telemetry-agent-runner.ts +0 -151
  162. package/src/lib/runtime/types.ts +0 -48
  163. package/src/lib/runtime/utils.ts +0 -93
  164. package/src/lib/streaming.ts +0 -220
  165. package/src/lib/telemetry-client.ts +0 -66
  166. package/src/lib/telemetry-disclosure.ts +0 -53
  167. package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -532
  168. package/src/service-adapters/anthropic/utils.ts +0 -219
  169. package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
  170. package/src/service-adapters/conversion.test.ts +0 -56
  171. package/src/service-adapters/conversion.ts +0 -69
  172. package/src/service-adapters/empty/empty-adapter.ts +0 -38
  173. package/src/service-adapters/events.ts +0 -337
  174. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
  175. package/src/service-adapters/google/google-genai-adapter.test.ts +0 -151
  176. package/src/service-adapters/google/google-genai-adapter.ts +0 -95
  177. package/src/service-adapters/groq/groq-adapter.ts +0 -229
  178. package/src/service-adapters/index.ts +0 -18
  179. package/src/service-adapters/langchain/langchain-adapter.ts +0 -113
  180. package/src/service-adapters/langchain/langserve.ts +0 -88
  181. package/src/service-adapters/langchain/types.ts +0 -20
  182. package/src/service-adapters/langchain/utils.ts +0 -330
  183. package/src/service-adapters/openai/__tests__/openai-v5-compat.test.ts +0 -177
  184. package/src/service-adapters/openai/openai-adapter.ts +0 -324
  185. package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -385
  186. package/src/service-adapters/openai/utils.ts +0 -305
  187. package/src/service-adapters/service-adapter.ts +0 -50
  188. package/src/service-adapters/shared/error-utils.ts +0 -64
  189. package/src/service-adapters/shared/index.ts +0 -2
  190. package/src/service-adapters/shared/sdk-client-utils.ts +0 -19
  191. package/src/service-adapters/unify/unify-adapter.ts +0 -165
  192. package/src/utils/failed-response-status-reasons.ts +0 -70
  193. package/src/utils/index.ts +0 -1
  194. package/src/v2/express.ts +0 -1
  195. package/src/v2/hono.ts +0 -1
  196. package/src/v2/index.ts +0 -5
  197. package/src/v2/node.ts +0 -1
  198. package/src/v2/runtime/__tests__/agents-factory.test.ts +0 -136
  199. package/src/v2/runtime/__tests__/backward-compat.test.ts +0 -261
  200. package/src/v2/runtime/__tests__/code-review-fixes.test.ts +0 -500
  201. package/src/v2/runtime/__tests__/cors-credentials.test.ts +0 -320
  202. package/src/v2/runtime/__tests__/debug-sse-response.test.ts +0 -302
  203. package/src/v2/runtime/__tests__/express-adapter.test.ts +0 -188
  204. package/src/v2/runtime/__tests__/express-body-order.test.ts +0 -76
  205. package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +0 -344
  206. package/src/v2/runtime/__tests__/express-single-sse.test.ts +0 -122
  207. package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +0 -65
  208. package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +0 -101
  209. package/src/v2/runtime/__tests__/fetch-cors.test.ts +0 -205
  210. package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +0 -440
  211. package/src/v2/runtime/__tests__/fetch-handler.test.ts +0 -456
  212. package/src/v2/runtime/__tests__/fetch-router.test.ts +0 -276
  213. package/src/v2/runtime/__tests__/get-runtime-info.test.ts +0 -335
  214. package/src/v2/runtime/__tests__/handle-connect.test.ts +0 -585
  215. package/src/v2/runtime/__tests__/handle-run.test.ts +0 -1388
  216. package/src/v2/runtime/__tests__/handle-threads.test.ts +0 -930
  217. package/src/v2/runtime/__tests__/handle-transcribe.test.ts +0 -301
  218. package/src/v2/runtime/__tests__/header-utils.test.ts +0 -88
  219. package/src/v2/runtime/__tests__/hono-adapter.test.ts +0 -150
  220. package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +0 -46
  221. package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +0 -99
  222. package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +0 -457
  223. package/src/v2/runtime/__tests__/hooks.test.ts +0 -557
  224. package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +0 -230
  225. package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +0 -1030
  226. package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +0 -27
  227. package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +0 -32
  228. package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +0 -33
  229. package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +0 -25
  230. package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +0 -32
  231. package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +0 -15
  232. package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +0 -45
  233. package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +0 -58
  234. package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +0 -58
  235. package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +0 -35
  236. package/src/v2/runtime/__tests__/integration/servers/express-single.ts +0 -36
  237. package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +0 -39
  238. package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +0 -30
  239. package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +0 -37
  240. package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +0 -45
  241. package/src/v2/runtime/__tests__/integration/servers/node-single.ts +0 -46
  242. package/src/v2/runtime/__tests__/integration/servers/types.ts +0 -18
  243. package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +0 -253
  244. package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +0 -358
  245. package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +0 -363
  246. package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +0 -194
  247. package/src/v2/runtime/__tests__/mcp-apps-middleware-integration.test.ts +0 -275
  248. package/src/v2/runtime/__tests__/middleware-express.test.ts +0 -208
  249. package/src/v2/runtime/__tests__/middleware-single-express.test.ts +0 -213
  250. package/src/v2/runtime/__tests__/middleware-single.test.ts +0 -225
  251. package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +0 -237
  252. package/src/v2/runtime/__tests__/middleware.test.ts +0 -250
  253. package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +0 -157
  254. package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +0 -728
  255. package/src/v2/runtime/__tests__/router-edge-cases.test.ts +0 -217
  256. package/src/v2/runtime/__tests__/routing-express.test.ts +0 -174
  257. package/src/v2/runtime/__tests__/routing-single-express.test.ts +0 -168
  258. package/src/v2/runtime/__tests__/routing-single.test.ts +0 -193
  259. package/src/v2/runtime/__tests__/routing.test.ts +0 -257
  260. package/src/v2/runtime/__tests__/runtime.test.ts +0 -234
  261. package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +0 -108
  262. package/src/v2/runtime/__tests__/telemetry.test.ts +0 -167
  263. package/src/v2/runtime/__tests__/thread-names.test.ts +0 -188
  264. package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +0 -156
  265. package/src/v2/runtime/core/debug-event-bus.ts +0 -45
  266. package/src/v2/runtime/core/fetch-cors.ts +0 -136
  267. package/src/v2/runtime/core/fetch-handler.ts +0 -492
  268. package/src/v2/runtime/core/fetch-router.ts +0 -203
  269. package/src/v2/runtime/core/hooks.ts +0 -160
  270. package/src/v2/runtime/core/middleware-sse-parser.ts +0 -210
  271. package/src/v2/runtime/core/middleware.ts +0 -115
  272. package/src/v2/runtime/core/runtime.ts +0 -432
  273. package/src/v2/runtime/endpoints/express-fetch-bridge.ts +0 -137
  274. package/src/v2/runtime/endpoints/express-single.ts +0 -54
  275. package/src/v2/runtime/endpoints/express.ts +0 -179
  276. package/src/v2/runtime/endpoints/hono-single.ts +0 -60
  277. package/src/v2/runtime/endpoints/hono.ts +0 -89
  278. package/src/v2/runtime/endpoints/index.ts +0 -4
  279. package/src/v2/runtime/endpoints/node-fetch-handler.ts +0 -48
  280. package/src/v2/runtime/endpoints/node.ts +0 -28
  281. package/src/v2/runtime/endpoints/single-route-helpers.ts +0 -125
  282. package/src/v2/runtime/express.ts +0 -2
  283. package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +0 -176
  284. package/src/v2/runtime/handlers/get-runtime-info.ts +0 -101
  285. package/src/v2/runtime/handlers/handle-connect.ts +0 -80
  286. package/src/v2/runtime/handlers/handle-debug-events.ts +0 -52
  287. package/src/v2/runtime/handlers/handle-run.ts +0 -111
  288. package/src/v2/runtime/handlers/handle-stop.ts +0 -77
  289. package/src/v2/runtime/handlers/handle-threads.ts +0 -11
  290. package/src/v2/runtime/handlers/handle-transcribe.ts +0 -269
  291. package/src/v2/runtime/handlers/header-utils.ts +0 -24
  292. package/src/v2/runtime/handlers/intelligence/connect.ts +0 -102
  293. package/src/v2/runtime/handlers/intelligence/run.ts +0 -351
  294. package/src/v2/runtime/handlers/intelligence/thread-names.ts +0 -246
  295. package/src/v2/runtime/handlers/intelligence/threads.ts +0 -420
  296. package/src/v2/runtime/handlers/shared/agent-utils.ts +0 -154
  297. package/src/v2/runtime/handlers/shared/intelligence-utils.ts +0 -41
  298. package/src/v2/runtime/handlers/shared/json-response.ts +0 -9
  299. package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +0 -28
  300. package/src/v2/runtime/handlers/shared/sse-response.ts +0 -215
  301. package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +0 -71
  302. package/src/v2/runtime/handlers/sse/connect.ts +0 -30
  303. package/src/v2/runtime/handlers/sse/run.ts +0 -40
  304. package/src/v2/runtime/hono.ts +0 -2
  305. package/src/v2/runtime/index.ts +0 -51
  306. package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +0 -601
  307. package/src/v2/runtime/intelligence-platform/__tests__/intelligence-mcp-helper.test.ts +0 -246
  308. package/src/v2/runtime/intelligence-platform/client.ts +0 -818
  309. package/src/v2/runtime/intelligence-platform/index.ts +0 -10
  310. package/src/v2/runtime/node.ts +0 -6
  311. package/src/v2/runtime/open-generative-ui-middleware.ts +0 -373
  312. package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +0 -109
  313. package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +0 -775
  314. package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +0 -777
  315. package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +0 -1039
  316. package/src/v2/runtime/runner/agent-runner.ts +0 -35
  317. package/src/v2/runtime/runner/in-memory.ts +0 -467
  318. package/src/v2/runtime/runner/index.ts +0 -4
  319. package/src/v2/runtime/runner/intelligence.ts +0 -498
  320. package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +0 -96
  321. package/src/v2/runtime/telemetry/events.ts +0 -35
  322. package/src/v2/runtime/telemetry/index.ts +0 -7
  323. package/src/v2/runtime/telemetry/instance-created.ts +0 -44
  324. package/src/v2/runtime/telemetry/scarf-client.ts +0 -39
  325. package/src/v2/runtime/telemetry/telemetry-client.ts +0 -70
  326. package/src/v2/runtime/transcription-service/transcription-service.ts +0 -11
  327. package/tests/global.d.ts +0 -1
  328. package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -259
  329. package/tests/service-adapters/anthropic/anthropic-adapter-language-model.test.ts +0 -101
  330. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -645
  331. package/tests/service-adapters/anthropic/utils-token-trimming.test.ts +0 -301
  332. package/tests/service-adapters/groq/groq-adapter-language-model.test.ts +0 -102
  333. package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -294
  334. package/tests/service-adapters/openai/openai-adapter-language-model.test.ts +0 -122
  335. package/tests/service-adapters/openai/openai-adapter.test.ts +0 -291
  336. package/tests/service-adapters/shared/sdk-client-utils.test.ts +0 -36
  337. package/tests/setup.vitest.ts +0 -8
  338. package/tests/tsconfig.json +0 -10
  339. package/tsconfig.json +0 -20
  340. package/tsdown.config.ts +0 -45
  341. package/typedoc.json +0 -4
  342. 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`.