@copilotkit/runtime 1.54.1 → 1.55.0-next.8

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 (337) hide show
  1. package/.eslintrc.js +4 -4
  2. package/CHANGELOG.md +125 -113
  3. package/dist/_virtual/_rolldown/runtime.mjs +25 -1
  4. package/dist/agent/index.cjs +654 -0
  5. package/dist/agent/index.cjs.map +1 -0
  6. package/dist/agent/index.d.cts +263 -0
  7. package/dist/agent/index.d.cts.map +1 -0
  8. package/dist/agent/index.d.mts +263 -0
  9. package/dist/agent/index.d.mts.map +1 -0
  10. package/dist/agent/index.mjs +646 -0
  11. package/dist/agent/index.mjs.map +1 -0
  12. package/dist/graphql/message-conversion/agui-to-gql.cjs.map +1 -1
  13. package/dist/graphql/message-conversion/agui-to-gql.mjs.map +1 -1
  14. package/dist/lib/integrations/nextjs/app-router.cjs +2 -2
  15. package/dist/lib/integrations/nextjs/app-router.cjs.map +1 -1
  16. package/dist/lib/integrations/nextjs/app-router.mjs +1 -1
  17. package/dist/lib/integrations/nextjs/app-router.mjs.map +1 -1
  18. package/dist/lib/integrations/node-http/index.cjs +2 -3
  19. package/dist/lib/integrations/node-http/index.cjs.map +1 -1
  20. package/dist/lib/integrations/node-http/index.mjs +1 -1
  21. package/dist/lib/integrations/node-http/index.mjs.map +1 -1
  22. package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs +1 -1
  23. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +2 -2
  24. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -1
  25. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts +3 -3
  26. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -1
  27. package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs +1 -1
  28. package/dist/lib/runtime/copilot-runtime.cjs +7 -5
  29. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  30. package/dist/lib/runtime/copilot-runtime.d.cts +10 -8
  31. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  32. package/dist/lib/runtime/copilot-runtime.d.mts +10 -8
  33. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  34. package/dist/lib/runtime/copilot-runtime.mjs +7 -5
  35. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  36. package/dist/lib/runtime/telemetry-agent-runner.cjs +2 -2
  37. package/dist/lib/runtime/telemetry-agent-runner.cjs.map +1 -1
  38. package/dist/lib/runtime/telemetry-agent-runner.d.cts +2 -1
  39. package/dist/lib/runtime/telemetry-agent-runner.d.cts.map +1 -1
  40. package/dist/lib/runtime/telemetry-agent-runner.d.mts +2 -1
  41. package/dist/lib/runtime/telemetry-agent-runner.d.mts.map +1 -1
  42. package/dist/lib/runtime/telemetry-agent-runner.mjs +1 -1
  43. package/dist/lib/runtime/telemetry-agent-runner.mjs.map +1 -1
  44. package/dist/lib/telemetry-client.cjs +1 -1
  45. package/dist/lib/telemetry-client.mjs +1 -1
  46. package/dist/package.cjs +21 -4
  47. package/dist/package.mjs +21 -4
  48. package/dist/service-adapters/anthropic/anthropic-adapter.d.mts +1 -1
  49. package/dist/v2/index.cjs +41 -15
  50. package/dist/v2/index.d.cts +14 -2
  51. package/dist/v2/index.d.mts +14 -2
  52. package/dist/v2/index.mjs +13 -4
  53. package/dist/v2/runtime/endpoints/express-single.cjs +190 -0
  54. package/dist/v2/runtime/endpoints/express-single.cjs.map +1 -0
  55. package/dist/v2/runtime/endpoints/express-single.d.cts +16 -0
  56. package/dist/v2/runtime/endpoints/express-single.d.cts.map +1 -0
  57. package/dist/v2/runtime/endpoints/express-single.d.mts +16 -0
  58. package/dist/v2/runtime/endpoints/express-single.d.mts.map +1 -0
  59. package/dist/v2/runtime/endpoints/express-single.mjs +187 -0
  60. package/dist/v2/runtime/endpoints/express-single.mjs.map +1 -0
  61. package/dist/v2/runtime/endpoints/express-utils.cjs +119 -0
  62. package/dist/v2/runtime/endpoints/express-utils.cjs.map +1 -0
  63. package/dist/v2/runtime/endpoints/express-utils.mjs +117 -0
  64. package/dist/v2/runtime/endpoints/express-utils.mjs.map +1 -0
  65. package/dist/v2/runtime/endpoints/express.cjs +217 -0
  66. package/dist/v2/runtime/endpoints/express.cjs.map +1 -0
  67. package/dist/v2/runtime/endpoints/express.d.cts +16 -0
  68. package/dist/v2/runtime/endpoints/express.d.cts.map +1 -0
  69. package/dist/v2/runtime/endpoints/express.d.mts +16 -0
  70. package/dist/v2/runtime/endpoints/express.d.mts.map +1 -0
  71. package/dist/v2/runtime/endpoints/express.mjs +214 -0
  72. package/dist/v2/runtime/endpoints/express.mjs.map +1 -0
  73. package/dist/v2/runtime/endpoints/hono-single.cjs +141 -0
  74. package/dist/v2/runtime/endpoints/hono-single.cjs.map +1 -0
  75. package/dist/v2/runtime/endpoints/hono-single.d.cts +41 -0
  76. package/dist/v2/runtime/endpoints/hono-single.d.cts.map +1 -0
  77. package/dist/v2/runtime/endpoints/hono-single.d.mts +41 -0
  78. package/dist/v2/runtime/endpoints/hono-single.d.mts.map +1 -0
  79. package/dist/v2/runtime/endpoints/hono-single.mjs +140 -0
  80. package/dist/v2/runtime/endpoints/hono-single.mjs.map +1 -0
  81. package/dist/v2/runtime/endpoints/hono.cjs +248 -0
  82. package/dist/v2/runtime/endpoints/hono.cjs.map +1 -0
  83. package/dist/v2/runtime/endpoints/hono.d.cts +164 -0
  84. package/dist/v2/runtime/endpoints/hono.d.cts.map +1 -0
  85. package/dist/v2/runtime/endpoints/hono.d.mts +164 -0
  86. package/dist/v2/runtime/endpoints/hono.d.mts.map +1 -0
  87. package/dist/v2/runtime/endpoints/hono.mjs +247 -0
  88. package/dist/v2/runtime/endpoints/hono.mjs.map +1 -0
  89. package/dist/v2/runtime/endpoints/index.d.cts +5 -0
  90. package/dist/v2/runtime/endpoints/index.d.mts +5 -0
  91. package/dist/v2/runtime/endpoints/single-route-helpers.cjs +68 -0
  92. package/dist/v2/runtime/endpoints/single-route-helpers.cjs.map +1 -0
  93. package/dist/v2/runtime/endpoints/single-route-helpers.mjs +65 -0
  94. package/dist/v2/runtime/endpoints/single-route-helpers.mjs.map +1 -0
  95. package/dist/v2/runtime/handlers/get-runtime-info.cjs +51 -0
  96. package/dist/v2/runtime/handlers/get-runtime-info.cjs.map +1 -0
  97. package/dist/v2/runtime/handlers/get-runtime-info.mjs +51 -0
  98. package/dist/v2/runtime/handlers/get-runtime-info.mjs.map +1 -0
  99. package/dist/v2/runtime/handlers/handle-connect.cjs +49 -0
  100. package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -0
  101. package/dist/v2/runtime/handlers/handle-connect.mjs +49 -0
  102. package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -0
  103. package/dist/v2/runtime/handlers/handle-run.cjs +61 -0
  104. package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -0
  105. package/dist/v2/runtime/handlers/handle-run.mjs +61 -0
  106. package/dist/v2/runtime/handlers/handle-run.mjs.map +1 -0
  107. package/dist/v2/runtime/handlers/handle-stop.cjs +47 -0
  108. package/dist/v2/runtime/handlers/handle-stop.cjs.map +1 -0
  109. package/dist/v2/runtime/handlers/handle-stop.mjs +46 -0
  110. package/dist/v2/runtime/handlers/handle-stop.mjs.map +1 -0
  111. package/dist/v2/runtime/handlers/handle-transcribe.cjs +112 -0
  112. package/dist/v2/runtime/handlers/handle-transcribe.cjs.map +1 -0
  113. package/dist/v2/runtime/handlers/handle-transcribe.mjs +111 -0
  114. package/dist/v2/runtime/handlers/handle-transcribe.mjs.map +1 -0
  115. package/dist/v2/runtime/handlers/header-utils.cjs +26 -0
  116. package/dist/v2/runtime/handlers/header-utils.cjs.map +1 -0
  117. package/dist/v2/runtime/handlers/header-utils.mjs +25 -0
  118. package/dist/v2/runtime/handlers/header-utils.mjs.map +1 -0
  119. package/dist/v2/runtime/handlers/intelligence/connect.cjs +37 -0
  120. package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -0
  121. package/dist/v2/runtime/handlers/intelligence/connect.mjs +37 -0
  122. package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -0
  123. package/dist/v2/runtime/handlers/intelligence/run.cjs +89 -0
  124. package/dist/v2/runtime/handlers/intelligence/run.cjs.map +1 -0
  125. package/dist/v2/runtime/handlers/intelligence/run.mjs +88 -0
  126. package/dist/v2/runtime/handlers/intelligence/run.mjs.map +1 -0
  127. package/dist/v2/runtime/handlers/intelligence/thread-names.cjs +146 -0
  128. package/dist/v2/runtime/handlers/intelligence/thread-names.cjs.map +1 -0
  129. package/dist/v2/runtime/handlers/intelligence/thread-names.mjs +145 -0
  130. package/dist/v2/runtime/handlers/intelligence/thread-names.mjs.map +1 -0
  131. package/dist/v2/runtime/handlers/intelligence/threads.cjs +159 -0
  132. package/dist/v2/runtime/handlers/intelligence/threads.cjs.map +1 -0
  133. package/dist/v2/runtime/handlers/intelligence/threads.mjs +154 -0
  134. package/dist/v2/runtime/handlers/intelligence/threads.mjs.map +1 -0
  135. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +74 -0
  136. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -0
  137. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +70 -0
  138. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -0
  139. package/dist/v2/runtime/handlers/shared/intelligence-utils.cjs +21 -0
  140. package/dist/v2/runtime/handlers/shared/intelligence-utils.cjs.map +1 -0
  141. package/dist/v2/runtime/handlers/shared/intelligence-utils.mjs +20 -0
  142. package/dist/v2/runtime/handlers/shared/intelligence-utils.mjs.map +1 -0
  143. package/dist/v2/runtime/handlers/shared/json-response.cjs +12 -0
  144. package/dist/v2/runtime/handlers/shared/json-response.cjs.map +1 -0
  145. package/dist/v2/runtime/handlers/shared/json-response.mjs +10 -0
  146. package/dist/v2/runtime/handlers/shared/json-response.mjs.map +1 -0
  147. package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs +20 -0
  148. package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -0
  149. package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs +20 -0
  150. package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -0
  151. package/dist/v2/runtime/handlers/shared/sse-response.cjs +69 -0
  152. package/dist/v2/runtime/handlers/shared/sse-response.cjs.map +1 -0
  153. package/dist/v2/runtime/handlers/shared/sse-response.mjs +68 -0
  154. package/dist/v2/runtime/handlers/shared/sse-response.mjs.map +1 -0
  155. package/dist/v2/runtime/handlers/sse/connect.cjs +18 -0
  156. package/dist/v2/runtime/handlers/sse/connect.cjs.map +1 -0
  157. package/dist/v2/runtime/handlers/sse/connect.mjs +18 -0
  158. package/dist/v2/runtime/handlers/sse/connect.mjs.map +1 -0
  159. package/dist/v2/runtime/handlers/sse/run.cjs +18 -0
  160. package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -0
  161. package/dist/v2/runtime/handlers/sse/run.mjs +18 -0
  162. package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -0
  163. package/dist/v2/runtime/index.d.cts +13 -0
  164. package/dist/v2/runtime/index.d.mts +14 -0
  165. package/dist/v2/runtime/intelligence-platform/client.cjs +333 -0
  166. package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -0
  167. package/dist/v2/runtime/intelligence-platform/client.d.cts +336 -0
  168. package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -0
  169. package/dist/v2/runtime/intelligence-platform/client.d.mts +336 -0
  170. package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -0
  171. package/dist/v2/runtime/intelligence-platform/client.mjs +331 -0
  172. package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -0
  173. package/dist/v2/runtime/intelligence-platform/index.d.mts +2 -0
  174. package/dist/v2/runtime/middleware-sse-parser.cjs +138 -0
  175. package/dist/v2/runtime/middleware-sse-parser.cjs.map +1 -0
  176. package/dist/v2/runtime/middleware-sse-parser.d.cts +22 -0
  177. package/dist/v2/runtime/middleware-sse-parser.d.cts.map +1 -0
  178. package/dist/v2/runtime/middleware-sse-parser.d.mts +22 -0
  179. package/dist/v2/runtime/middleware-sse-parser.d.mts.map +1 -0
  180. package/dist/v2/runtime/middleware-sse-parser.mjs +137 -0
  181. package/dist/v2/runtime/middleware-sse-parser.mjs.map +1 -0
  182. package/dist/v2/runtime/middleware.cjs +35 -0
  183. package/dist/v2/runtime/middleware.cjs.map +1 -0
  184. package/dist/v2/runtime/middleware.d.cts +32 -0
  185. package/dist/v2/runtime/middleware.d.cts.map +1 -0
  186. package/dist/v2/runtime/middleware.d.mts +32 -0
  187. package/dist/v2/runtime/middleware.d.mts.map +1 -0
  188. package/dist/v2/runtime/middleware.mjs +33 -0
  189. package/dist/v2/runtime/middleware.mjs.map +1 -0
  190. package/dist/v2/runtime/runner/agent-runner.cjs +8 -0
  191. package/dist/v2/runtime/runner/agent-runner.cjs.map +1 -0
  192. package/dist/v2/runtime/runner/agent-runner.d.cts +32 -0
  193. package/dist/v2/runtime/runner/agent-runner.d.cts.map +1 -0
  194. package/dist/v2/runtime/runner/agent-runner.d.mts +32 -0
  195. package/dist/v2/runtime/runner/agent-runner.d.mts.map +1 -0
  196. package/dist/v2/runtime/runner/agent-runner.mjs +7 -0
  197. package/dist/v2/runtime/runner/agent-runner.mjs.map +1 -0
  198. package/dist/v2/runtime/runner/in-memory.cjs +223 -0
  199. package/dist/v2/runtime/runner/in-memory.cjs.map +1 -0
  200. package/dist/v2/runtime/runner/in-memory.d.cts +15 -0
  201. package/dist/v2/runtime/runner/in-memory.d.cts.map +1 -0
  202. package/dist/v2/runtime/runner/in-memory.d.mts +15 -0
  203. package/dist/v2/runtime/runner/in-memory.d.mts.map +1 -0
  204. package/dist/v2/runtime/runner/in-memory.mjs +222 -0
  205. package/dist/v2/runtime/runner/in-memory.mjs.map +1 -0
  206. package/dist/v2/runtime/runner/index.d.cts +6 -0
  207. package/dist/v2/runtime/runner/index.d.mts +6 -0
  208. package/dist/v2/runtime/runner/index.mjs +7 -0
  209. package/dist/v2/runtime/runner/intelligence.cjs +246 -0
  210. package/dist/v2/runtime/runner/intelligence.cjs.map +1 -0
  211. package/dist/v2/runtime/runner/intelligence.d.cts +57 -0
  212. package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -0
  213. package/dist/v2/runtime/runner/intelligence.d.mts +57 -0
  214. package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -0
  215. package/dist/v2/runtime/runner/intelligence.mjs +245 -0
  216. package/dist/v2/runtime/runner/intelligence.mjs.map +1 -0
  217. package/dist/v2/runtime/runtime.cjs +101 -0
  218. package/dist/v2/runtime/runtime.cjs.map +1 -0
  219. package/dist/v2/runtime/runtime.d.cts +132 -0
  220. package/dist/v2/runtime/runtime.d.cts.map +1 -0
  221. package/dist/v2/runtime/runtime.d.mts +133 -0
  222. package/dist/v2/runtime/runtime.d.mts.map +1 -0
  223. package/dist/v2/runtime/runtime.mjs +97 -0
  224. package/dist/v2/runtime/runtime.mjs.map +1 -0
  225. package/dist/v2/runtime/telemetry/scarf-client.cjs +32 -0
  226. package/dist/v2/runtime/telemetry/scarf-client.cjs.map +1 -0
  227. package/dist/v2/runtime/telemetry/scarf-client.mjs +32 -0
  228. package/dist/v2/runtime/telemetry/scarf-client.mjs.map +1 -0
  229. package/dist/v2/runtime/telemetry/telemetry-client.cjs +35 -0
  230. package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -0
  231. package/dist/v2/runtime/telemetry/telemetry-client.mjs +35 -0
  232. package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -0
  233. package/dist/v2/runtime/transcription-service/transcription-service.cjs +8 -0
  234. package/dist/v2/runtime/transcription-service/transcription-service.cjs.map +1 -0
  235. package/dist/v2/runtime/transcription-service/transcription-service.d.cts +15 -0
  236. package/dist/v2/runtime/transcription-service/transcription-service.d.cts.map +1 -0
  237. package/dist/v2/runtime/transcription-service/transcription-service.d.mts +15 -0
  238. package/dist/v2/runtime/transcription-service/transcription-service.d.mts.map +1 -0
  239. package/dist/v2/runtime/transcription-service/transcription-service.mjs +7 -0
  240. package/dist/v2/runtime/transcription-service/transcription-service.mjs.map +1 -0
  241. package/package.json +24 -7
  242. package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +116 -0
  243. package/src/agent/__tests__/basic-agent.test.ts +1698 -0
  244. package/src/agent/__tests__/config-tools-execution.test.ts +516 -0
  245. package/src/agent/__tests__/mcp-clients.test.ts +260 -0
  246. package/src/agent/__tests__/property-overrides.test.ts +598 -0
  247. package/src/agent/__tests__/standard-schema-tools.test.ts +313 -0
  248. package/src/agent/__tests__/standard-schema-types.test.ts +158 -0
  249. package/src/agent/__tests__/state-tools.test.ts +436 -0
  250. package/src/agent/__tests__/test-helpers.ts +193 -0
  251. package/src/agent/__tests__/utils.test.ts +536 -0
  252. package/src/agent/__tests__/zod-regression.test.ts +350 -0
  253. package/src/agent/index.ts +1329 -0
  254. package/src/graphql/message-conversion/agui-to-gql.test.ts +1 -1
  255. package/src/graphql/message-conversion/agui-to-gql.ts +1 -1
  256. package/src/graphql/message-conversion/gql-to-agui.ts +1 -1
  257. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +1 -1
  258. package/src/lib/integrations/nextjs/app-router.ts +2 -2
  259. package/src/lib/integrations/node-http/index.ts +2 -2
  260. package/src/lib/runtime/copilot-runtime.ts +3 -5
  261. package/src/lib/runtime/telemetry-agent-runner.ts +1 -1
  262. package/src/service-adapters/conversion.test.ts +1 -1
  263. package/src/service-adapters/conversion.ts +1 -28
  264. package/src/v2/index.ts +5 -2
  265. package/src/v2/runtime/__tests__/cors-credentials.test.ts +320 -0
  266. package/src/v2/runtime/__tests__/express-abort-signal.test.ts +25 -0
  267. package/src/v2/runtime/__tests__/express-body-order.test.ts +76 -0
  268. package/src/v2/runtime/__tests__/express-single-sse.test.ts +122 -0
  269. package/src/v2/runtime/__tests__/get-runtime-info.test.ts +141 -0
  270. package/src/v2/runtime/__tests__/handle-connect.test.ts +423 -0
  271. package/src/v2/runtime/__tests__/handle-run.test.ts +910 -0
  272. package/src/v2/runtime/__tests__/handle-threads.test.ts +388 -0
  273. package/src/v2/runtime/__tests__/handle-transcribe.test.ts +301 -0
  274. package/src/v2/runtime/__tests__/header-utils.test.ts +88 -0
  275. package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +230 -0
  276. package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +1030 -0
  277. package/src/v2/runtime/__tests__/middleware-express.test.ts +206 -0
  278. package/src/v2/runtime/__tests__/middleware-single-express.test.ts +211 -0
  279. package/src/v2/runtime/__tests__/middleware-single.test.ts +225 -0
  280. package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +187 -0
  281. package/src/v2/runtime/__tests__/middleware.test.ts +251 -0
  282. package/src/v2/runtime/__tests__/routing-express.test.ts +174 -0
  283. package/src/v2/runtime/__tests__/routing-single-express.test.ts +168 -0
  284. package/src/v2/runtime/__tests__/routing-single.test.ts +193 -0
  285. package/src/v2/runtime/__tests__/routing.test.ts +257 -0
  286. package/src/v2/runtime/__tests__/runtime.test.ts +123 -0
  287. package/src/v2/runtime/__tests__/telemetry.test.ts +167 -0
  288. package/src/v2/runtime/__tests__/thread-names.test.ts +188 -0
  289. package/src/v2/runtime/endpoints/express-single.ts +231 -0
  290. package/src/v2/runtime/endpoints/express-utils.ts +182 -0
  291. package/src/v2/runtime/endpoints/express.ts +275 -0
  292. package/src/v2/runtime/endpoints/hono-single.ts +212 -0
  293. package/src/v2/runtime/endpoints/hono.ts +314 -0
  294. package/src/v2/runtime/endpoints/index.ts +4 -0
  295. package/src/v2/runtime/endpoints/single-route-helpers.ts +125 -0
  296. package/src/v2/runtime/express.ts +2 -0
  297. package/src/v2/runtime/handler.ts +3 -0
  298. package/src/v2/runtime/handlers/get-runtime-info.ts +79 -0
  299. package/src/v2/runtime/handlers/handle-connect.ts +76 -0
  300. package/src/v2/runtime/handlers/handle-run.ts +89 -0
  301. package/src/v2/runtime/handlers/handle-stop.ts +76 -0
  302. package/src/v2/runtime/handlers/handle-threads.ts +7 -0
  303. package/src/v2/runtime/handlers/handle-transcribe.ts +256 -0
  304. package/src/v2/runtime/handlers/header-utils.ts +24 -0
  305. package/src/v2/runtime/handlers/intelligence/connect.ts +65 -0
  306. package/src/v2/runtime/handlers/intelligence/run.ts +152 -0
  307. package/src/v2/runtime/handlers/intelligence/thread-names.ts +246 -0
  308. package/src/v2/runtime/handlers/intelligence/threads.ts +233 -0
  309. package/src/v2/runtime/handlers/shared/agent-utils.ts +136 -0
  310. package/src/v2/runtime/handlers/shared/intelligence-utils.ts +21 -0
  311. package/src/v2/runtime/handlers/shared/json-response.ts +6 -0
  312. package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +25 -0
  313. package/src/v2/runtime/handlers/shared/sse-response.ts +100 -0
  314. package/src/v2/runtime/handlers/sse/connect.ts +24 -0
  315. package/src/v2/runtime/handlers/sse/run.ts +27 -0
  316. package/src/v2/runtime/index.ts +20 -0
  317. package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +605 -0
  318. package/src/v2/runtime/intelligence-platform/client.ts +659 -0
  319. package/src/v2/runtime/intelligence-platform/index.ts +10 -0
  320. package/src/v2/runtime/middleware-sse-parser.ts +200 -0
  321. package/src/v2/runtime/middleware.ts +115 -0
  322. package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +109 -0
  323. package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +775 -0
  324. package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +363 -0
  325. package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +981 -0
  326. package/src/v2/runtime/runner/agent-runner.ts +36 -0
  327. package/src/v2/runtime/runner/in-memory.ts +381 -0
  328. package/src/v2/runtime/runner/index.ts +4 -0
  329. package/src/v2/runtime/runner/intelligence.ts +429 -0
  330. package/src/v2/runtime/runtime.ts +260 -0
  331. package/src/v2/runtime/telemetry/events.ts +35 -0
  332. package/src/v2/runtime/telemetry/index.ts +7 -0
  333. package/src/v2/runtime/telemetry/scarf-client.ts +39 -0
  334. package/src/v2/runtime/telemetry/telemetry-client.ts +70 -0
  335. package/src/v2/runtime/transcription-service/transcription-service.ts +11 -0
  336. package/tsconfig.json +9 -2
  337. package/tsdown.config.ts +1 -0
@@ -0,0 +1,536 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { z } from "zod";
3
+ import {
4
+ resolveModel,
5
+ convertMessagesToVercelAISDKMessages,
6
+ convertJsonSchemaToZodSchema,
7
+ convertToolsToVercelAITools,
8
+ convertToolDefinitionsToVercelAITools,
9
+ defineTool,
10
+ type ToolDefinition,
11
+ } from "../index";
12
+ import type { Message } from "@ag-ui/client";
13
+
14
+ describe("resolveModel", () => {
15
+ const originalEnv = process.env;
16
+
17
+ beforeEach(() => {
18
+ process.env = { ...originalEnv };
19
+ process.env.OPENAI_API_KEY = "test-openai-key";
20
+ process.env.ANTHROPIC_API_KEY = "test-anthropic-key";
21
+ process.env.GOOGLE_API_KEY = "test-google-key";
22
+ });
23
+
24
+ afterEach(() => {
25
+ process.env = originalEnv;
26
+ });
27
+
28
+ it("should resolve OpenAI models with / separator", () => {
29
+ const model = resolveModel("openai/gpt-4o");
30
+ expect(model).toBeDefined();
31
+ expect(model.modelId).toBe("gpt-4o");
32
+ });
33
+
34
+ it("should resolve OpenAI models with : separator", () => {
35
+ const model = resolveModel("openai:gpt-4o-mini");
36
+ expect(model).toBeDefined();
37
+ expect(model.modelId).toBe("gpt-4o-mini");
38
+ });
39
+
40
+ it("should resolve Anthropic models", () => {
41
+ const model = resolveModel("anthropic/claude-sonnet-4.5");
42
+ expect(model).toBeDefined();
43
+ expect(model.modelId).toBe("claude-sonnet-4.5");
44
+ });
45
+
46
+ it("should resolve Google models", () => {
47
+ const model = resolveModel("google/gemini-2.5-pro");
48
+ expect(model).toBeDefined();
49
+ expect(model.modelId).toBe("gemini-2.5-pro");
50
+ });
51
+
52
+ it("should handle gemini provider alias", () => {
53
+ const model = resolveModel("gemini/gemini-2.5-flash");
54
+ expect(model).toBeDefined();
55
+ expect(model.modelId).toBe("gemini-2.5-flash");
56
+ });
57
+
58
+ it("should throw error for invalid format", () => {
59
+ expect(() => resolveModel("invalid")).toThrow("Invalid model string");
60
+ });
61
+
62
+ it("should throw error for unknown provider", () => {
63
+ expect(() => resolveModel("unknown/model")).toThrow("Unknown provider");
64
+ });
65
+
66
+ it("should pass through LanguageModel instances", () => {
67
+ const mockModel = resolveModel("openai/gpt-4o");
68
+ const result = resolveModel(mockModel as any);
69
+ expect(result).toBe(mockModel);
70
+ });
71
+ });
72
+
73
+ describe("convertMessagesToVercelAISDKMessages", () => {
74
+ it("should convert user messages", () => {
75
+ const messages: Message[] = [
76
+ {
77
+ id: "1",
78
+ role: "user",
79
+ content: "Hello",
80
+ },
81
+ ];
82
+
83
+ const result = convertMessagesToVercelAISDKMessages(messages);
84
+
85
+ expect(result).toEqual([
86
+ {
87
+ role: "user",
88
+ content: "Hello",
89
+ },
90
+ ]);
91
+ });
92
+
93
+ it("should convert assistant messages with text content", () => {
94
+ const messages: Message[] = [
95
+ {
96
+ id: "1",
97
+ role: "assistant",
98
+ content: "Hello there",
99
+ },
100
+ ];
101
+
102
+ const result = convertMessagesToVercelAISDKMessages(messages);
103
+
104
+ expect(result).toEqual([
105
+ {
106
+ role: "assistant",
107
+ content: [{ type: "text", text: "Hello there" }],
108
+ },
109
+ ]);
110
+ });
111
+
112
+ it("should convert assistant messages with tool calls", () => {
113
+ const messages: Message[] = [
114
+ {
115
+ id: "1",
116
+ role: "assistant",
117
+ content: "Let me help",
118
+ toolCalls: [
119
+ {
120
+ id: "call1",
121
+ type: "function",
122
+ function: {
123
+ name: "getTool",
124
+ arguments: '{"arg":"value"}',
125
+ },
126
+ },
127
+ ],
128
+ },
129
+ ];
130
+
131
+ const result = convertMessagesToVercelAISDKMessages(messages);
132
+
133
+ expect(result[0]).toEqual({
134
+ role: "assistant",
135
+ content: [
136
+ { type: "text", text: "Let me help" },
137
+ {
138
+ type: "tool-call",
139
+ toolCallId: "call1",
140
+ toolName: "getTool",
141
+ input: { arg: "value" },
142
+ },
143
+ ],
144
+ });
145
+ });
146
+
147
+ it("should convert tool messages", () => {
148
+ const messages: Message[] = [
149
+ {
150
+ id: "1",
151
+ role: "assistant",
152
+ toolCalls: [
153
+ {
154
+ id: "call1",
155
+ type: "function",
156
+ function: {
157
+ name: "getTool",
158
+ arguments: "{}",
159
+ },
160
+ },
161
+ ],
162
+ },
163
+ {
164
+ id: "2",
165
+ role: "tool",
166
+ content: "result",
167
+ toolCallId: "call1",
168
+ },
169
+ ];
170
+
171
+ const result = convertMessagesToVercelAISDKMessages(messages);
172
+
173
+ expect(result[1]).toEqual({
174
+ role: "tool",
175
+ content: [
176
+ {
177
+ type: "tool-result",
178
+ toolCallId: "call1",
179
+ toolName: "getTool",
180
+ output: {
181
+ type: "text",
182
+ value: "result",
183
+ },
184
+ },
185
+ ],
186
+ });
187
+ });
188
+
189
+ it("should handle multiple messages", () => {
190
+ const messages: Message[] = [
191
+ { id: "1", role: "user", content: "Hi" },
192
+ { id: "2", role: "assistant", content: "Hello" },
193
+ { id: "3", role: "user", content: "How are you?" },
194
+ ];
195
+
196
+ const result = convertMessagesToVercelAISDKMessages(messages);
197
+
198
+ expect(result).toHaveLength(3);
199
+ expect(result[0].role).toBe("user");
200
+ expect(result[1].role).toBe("assistant");
201
+ expect(result[2].role).toBe("user");
202
+ });
203
+ });
204
+
205
+ describe("convertJsonSchemaToZodSchema", () => {
206
+ it("should convert string schema", () => {
207
+ const jsonSchema = {
208
+ type: "string" as const,
209
+ description: "A string field",
210
+ };
211
+
212
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, true);
213
+ expect(zodSchema.parse("test")).toBe("test");
214
+ expect(() => zodSchema.parse(123)).toThrow();
215
+ });
216
+
217
+ it("should convert number schema", () => {
218
+ const jsonSchema = {
219
+ type: "number" as const,
220
+ description: "A number field",
221
+ };
222
+
223
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, true);
224
+ expect(zodSchema.parse(123)).toBe(123);
225
+ expect(() => zodSchema.parse("test")).toThrow();
226
+ });
227
+
228
+ it("should convert boolean schema", () => {
229
+ const jsonSchema = {
230
+ type: "boolean" as const,
231
+ description: "A boolean field",
232
+ };
233
+
234
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, true);
235
+ expect(zodSchema.parse(true)).toBe(true);
236
+ expect(() => zodSchema.parse("true")).toThrow();
237
+ });
238
+
239
+ it("should convert array schema", () => {
240
+ const jsonSchema = {
241
+ type: "array" as const,
242
+ description: "An array field",
243
+ items: {
244
+ type: "string" as const,
245
+ },
246
+ };
247
+
248
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, true);
249
+ expect(zodSchema.parse(["a", "b"])).toEqual(["a", "b"]);
250
+ expect(() => zodSchema.parse([1, 2])).toThrow();
251
+ });
252
+
253
+ it("should convert object schema with properties", () => {
254
+ const jsonSchema = {
255
+ type: "object" as const,
256
+ description: "An object",
257
+ properties: {
258
+ name: { type: "string" as const },
259
+ age: { type: "number" as const },
260
+ },
261
+ required: ["name"],
262
+ };
263
+
264
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, true);
265
+ const valid = zodSchema.parse({ name: "John", age: 30 });
266
+ expect(valid).toEqual({ name: "John", age: 30 });
267
+
268
+ expect(() => zodSchema.parse({ age: 30 })).toThrow();
269
+ });
270
+
271
+ it("should make schema optional when required is false", () => {
272
+ const jsonSchema = {
273
+ type: "string" as const,
274
+ description: "Optional string",
275
+ };
276
+
277
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, false);
278
+ expect(zodSchema.parse(undefined)).toBeUndefined();
279
+ expect(zodSchema.parse("test")).toBe("test");
280
+ });
281
+
282
+ it("should preserve string enum constraints", () => {
283
+ const jsonSchema = {
284
+ type: "object" as const,
285
+ properties: {
286
+ status: {
287
+ type: "string" as const,
288
+ description: "The status",
289
+ enum: ["todo", "done"],
290
+ },
291
+ },
292
+ required: ["status"],
293
+ };
294
+ const result = convertJsonSchemaToZodSchema(jsonSchema, true);
295
+ const statusSchema = (result as z.ZodObject<any>).shape.status;
296
+ expect(statusSchema._def.typeName).toBe("ZodEnum");
297
+ expect(statusSchema._def.values).toEqual(["todo", "done"]);
298
+ });
299
+
300
+ it("should handle nested object schemas", () => {
301
+ const jsonSchema = {
302
+ type: "object" as const,
303
+ properties: {
304
+ user: {
305
+ type: "object" as const,
306
+ properties: {
307
+ name: { type: "string" as const },
308
+ },
309
+ required: ["name"],
310
+ },
311
+ },
312
+ required: ["user"],
313
+ };
314
+
315
+ const zodSchema = convertJsonSchemaToZodSchema(jsonSchema, true);
316
+ const valid = zodSchema.parse({ user: { name: "John" } });
317
+ expect(valid).toEqual({ user: { name: "John" } });
318
+ });
319
+ });
320
+
321
+ describe("convertToolsToVercelAITools", () => {
322
+ it("should convert AG-UI tools to Vercel AI tools", () => {
323
+ const tools = [
324
+ {
325
+ name: "testTool",
326
+ description: "A test tool",
327
+ parameters: {
328
+ type: "object" as const,
329
+ properties: {
330
+ input: { type: "string" as const },
331
+ },
332
+ required: ["input"],
333
+ },
334
+ },
335
+ ];
336
+
337
+ const result = convertToolsToVercelAITools(tools);
338
+
339
+ expect(result).toHaveProperty("testTool");
340
+ expect(result.testTool).toBeDefined();
341
+ });
342
+
343
+ it("should throw error for invalid JSON schema", () => {
344
+ const tools = [
345
+ {
346
+ name: "testTool",
347
+ description: "A test tool",
348
+ parameters: { invalid: "schema" } as any,
349
+ },
350
+ ];
351
+
352
+ expect(() => convertToolsToVercelAITools(tools)).toThrow(
353
+ "Invalid JSON schema",
354
+ );
355
+ });
356
+
357
+ it("should handle multiple tools", () => {
358
+ const tools = [
359
+ {
360
+ name: "tool1",
361
+ description: "First tool",
362
+ parameters: {
363
+ type: "object" as const,
364
+ properties: {},
365
+ },
366
+ },
367
+ {
368
+ name: "tool2",
369
+ description: "Second tool",
370
+ parameters: {
371
+ type: "object" as const,
372
+ properties: {},
373
+ },
374
+ },
375
+ ];
376
+
377
+ const result = convertToolsToVercelAITools(tools);
378
+
379
+ expect(result).toHaveProperty("tool1");
380
+ expect(result).toHaveProperty("tool2");
381
+ });
382
+ });
383
+
384
+ describe("convertToolDefinitionsToVercelAITools", () => {
385
+ it("should convert ToolDefinitions to Vercel AI tools", () => {
386
+ const tools: ToolDefinition[] = [
387
+ {
388
+ name: "testTool",
389
+ description: "A test tool",
390
+ parameters: z.object({
391
+ input: z.string(),
392
+ }),
393
+ },
394
+ ];
395
+
396
+ const result = convertToolDefinitionsToVercelAITools(tools);
397
+
398
+ expect(result).toHaveProperty("testTool");
399
+ expect(result.testTool).toBeDefined();
400
+ });
401
+
402
+ it("should handle multiple tool definitions", () => {
403
+ const tools: ToolDefinition[] = [
404
+ {
405
+ name: "tool1",
406
+ description: "First tool",
407
+ parameters: z.object({}),
408
+ },
409
+ {
410
+ name: "tool2",
411
+ description: "Second tool",
412
+ parameters: z.object({ value: z.number() }),
413
+ },
414
+ ];
415
+
416
+ const result = convertToolDefinitionsToVercelAITools(tools);
417
+
418
+ expect(result).toHaveProperty("tool1");
419
+ expect(result).toHaveProperty("tool2");
420
+ expect(Object.keys(result)).toHaveLength(2);
421
+ });
422
+ });
423
+
424
+ describe("ensureObjectArgs via convertMessagesToVercelAISDKMessages", () => {
425
+ function makeAssistantWithToolArgs(argsJson: string): Message[] {
426
+ return [
427
+ {
428
+ id: "1",
429
+ role: "assistant",
430
+ content: "calling tool",
431
+ toolCalls: [
432
+ {
433
+ id: "call1",
434
+ type: "function",
435
+ function: {
436
+ name: "myTool",
437
+ arguments: argsJson,
438
+ },
439
+ },
440
+ ],
441
+ },
442
+ ];
443
+ }
444
+
445
+ it("should pass through valid object arguments", () => {
446
+ const result = convertMessagesToVercelAISDKMessages(
447
+ makeAssistantWithToolArgs('{"key":"value"}'),
448
+ );
449
+ const toolCall = (result[0] as any).content[1];
450
+ expect(toolCall.input).toEqual({ key: "value" });
451
+ });
452
+
453
+ it("should replace a string argument with an empty object", () => {
454
+ const result = convertMessagesToVercelAISDKMessages(
455
+ makeAssistantWithToolArgs('""'),
456
+ );
457
+ const toolCall = (result[0] as any).content[1];
458
+ expect(toolCall.input).toEqual({});
459
+ });
460
+
461
+ it("should replace an array argument with an empty object", () => {
462
+ const result = convertMessagesToVercelAISDKMessages(
463
+ makeAssistantWithToolArgs("[1,2,3]"),
464
+ );
465
+ const toolCall = (result[0] as any).content[1];
466
+ expect(toolCall.input).toEqual({});
467
+ });
468
+
469
+ it("should replace a null argument with an empty object", () => {
470
+ const result = convertMessagesToVercelAISDKMessages(
471
+ makeAssistantWithToolArgs("null"),
472
+ );
473
+ const toolCall = (result[0] as any).content[1];
474
+ expect(toolCall.input).toEqual({});
475
+ });
476
+
477
+ it("should replace a numeric argument with an empty object", () => {
478
+ const result = convertMessagesToVercelAISDKMessages(
479
+ makeAssistantWithToolArgs("42"),
480
+ );
481
+ const toolCall = (result[0] as any).content[1];
482
+ expect(toolCall.input).toEqual({});
483
+ });
484
+
485
+ it("should replace a boolean argument with an empty object", () => {
486
+ const result = convertMessagesToVercelAISDKMessages(
487
+ makeAssistantWithToolArgs("true"),
488
+ );
489
+ const toolCall = (result[0] as any).content[1];
490
+ expect(toolCall.input).toEqual({});
491
+ });
492
+
493
+ it("should replace unparseable JSON with an empty object", () => {
494
+ const result = convertMessagesToVercelAISDKMessages(
495
+ makeAssistantWithToolArgs("{broken"),
496
+ );
497
+ const toolCall = (result[0] as any).content[1];
498
+ expect(toolCall.input).toEqual({});
499
+ });
500
+ });
501
+
502
+ describe("defineTool", () => {
503
+ it("should create a ToolDefinition", () => {
504
+ const tool = defineTool({
505
+ name: "myTool",
506
+ description: "My test tool",
507
+ parameters: z.object({
508
+ input: z.string(),
509
+ }),
510
+ });
511
+
512
+ expect(tool).toEqual({
513
+ name: "myTool",
514
+ description: "My test tool",
515
+ parameters: expect.any(Object),
516
+ });
517
+
518
+ expect(tool.name).toBe("myTool");
519
+ expect(tool.description).toBe("My test tool");
520
+ });
521
+
522
+ it("should preserve type information", () => {
523
+ const tool = defineTool({
524
+ name: "calc",
525
+ description: "Calculate",
526
+ parameters: z.object({
527
+ a: z.number(),
528
+ b: z.number(),
529
+ }),
530
+ });
531
+
532
+ // Should be able to parse valid input
533
+ const result = tool.parameters.parse({ a: 1, b: 2 });
534
+ expect(result).toEqual({ a: 1, b: 2 });
535
+ });
536
+ });