@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,76 @@
1
+ import { CopilotRuntimeLike } from "../runtime";
2
+ import { EventType } from "@ag-ui/client";
3
+
4
+ interface StopAgentParameters {
5
+ request: Request;
6
+ runtime: CopilotRuntimeLike;
7
+ agentId: string;
8
+ threadId: string;
9
+ }
10
+
11
+ export async function handleStopAgent({
12
+ runtime,
13
+ request,
14
+ agentId,
15
+ threadId,
16
+ }: StopAgentParameters) {
17
+ try {
18
+ const agents = await runtime.agents;
19
+
20
+ if (!agents[agentId]) {
21
+ return new Response(
22
+ JSON.stringify({
23
+ error: "Agent not found",
24
+ message: `Agent '${agentId}' does not exist`,
25
+ }),
26
+ {
27
+ status: 404,
28
+ headers: { "Content-Type": "application/json" },
29
+ },
30
+ );
31
+ }
32
+
33
+ const stopped = await runtime.runner.stop({ threadId });
34
+
35
+ if (!stopped) {
36
+ return new Response(
37
+ JSON.stringify({
38
+ stopped: false,
39
+ message: `No active run for thread '${threadId}'.`,
40
+ }),
41
+ {
42
+ status: 200,
43
+ headers: { "Content-Type": "application/json" },
44
+ },
45
+ );
46
+ }
47
+
48
+ return new Response(
49
+ JSON.stringify({
50
+ stopped: true,
51
+ interrupt: {
52
+ type: EventType.RUN_ERROR,
53
+ message: "Run stopped by user",
54
+ code: "STOPPED",
55
+ },
56
+ }),
57
+ {
58
+ status: 200,
59
+ headers: { "Content-Type": "application/json" },
60
+ },
61
+ );
62
+ } catch (error) {
63
+ console.error("Error stopping agent run:", error);
64
+
65
+ return new Response(
66
+ JSON.stringify({
67
+ error: "Failed to stop agent",
68
+ message: error instanceof Error ? error.message : "Unknown error",
69
+ }),
70
+ {
71
+ status: 500,
72
+ headers: { "Content-Type": "application/json" },
73
+ },
74
+ );
75
+ }
76
+ }
@@ -0,0 +1,7 @@
1
+ export {
2
+ handleArchiveThread,
3
+ handleDeleteThread,
4
+ handleListThreads,
5
+ handleSubscribeToThreads,
6
+ handleUpdateThread,
7
+ } from "./intelligence/threads";
@@ -0,0 +1,256 @@
1
+ import { CopilotRuntimeLike } from "../runtime";
2
+ import {
3
+ TranscriptionErrorCode,
4
+ TranscriptionErrors,
5
+ type TranscriptionErrorResponse,
6
+ } from "@copilotkit/shared";
7
+
8
+ /**
9
+ * HTTP status codes for transcription error codes
10
+ */
11
+ const ERROR_STATUS_CODES: Record<TranscriptionErrorCode, number> = {
12
+ [TranscriptionErrorCode.SERVICE_NOT_CONFIGURED]: 503,
13
+ [TranscriptionErrorCode.INVALID_AUDIO_FORMAT]: 400,
14
+ [TranscriptionErrorCode.AUDIO_TOO_LONG]: 400,
15
+ [TranscriptionErrorCode.AUDIO_TOO_SHORT]: 400,
16
+ [TranscriptionErrorCode.RATE_LIMITED]: 429,
17
+ [TranscriptionErrorCode.AUTH_FAILED]: 401,
18
+ [TranscriptionErrorCode.PROVIDER_ERROR]: 500,
19
+ [TranscriptionErrorCode.NETWORK_ERROR]: 502,
20
+ [TranscriptionErrorCode.INVALID_REQUEST]: 400,
21
+ };
22
+
23
+ interface HandleTranscribeParameters {
24
+ runtime: CopilotRuntimeLike;
25
+ request: Request;
26
+ }
27
+
28
+ interface Base64AudioInput {
29
+ audio: string; // base64-encoded audio data
30
+ mimeType: string;
31
+ filename?: string;
32
+ }
33
+
34
+ const VALID_AUDIO_TYPES = [
35
+ "audio/mpeg",
36
+ "audio/mp3",
37
+ "audio/mp4",
38
+ "audio/wav",
39
+ "audio/webm",
40
+ "audio/ogg",
41
+ "audio/flac",
42
+ "audio/aac",
43
+ ];
44
+
45
+ function isValidAudioType(type: string): boolean {
46
+ // Extract base MIME type (before semicolon) to handle types like "audio/webm; codecs=opus"
47
+ const baseType = type.split(";")[0]?.trim() ?? "";
48
+ return (
49
+ VALID_AUDIO_TYPES.includes(baseType) ||
50
+ baseType === "" ||
51
+ baseType === "application/octet-stream"
52
+ );
53
+ }
54
+
55
+ function createErrorResponse(
56
+ errorResponse: TranscriptionErrorResponse,
57
+ ): Response {
58
+ const status = ERROR_STATUS_CODES[errorResponse.error] ?? 500;
59
+ return new Response(JSON.stringify(errorResponse), {
60
+ status,
61
+ headers: { "Content-Type": "application/json" },
62
+ });
63
+ }
64
+
65
+ function base64ToFile(
66
+ base64: string,
67
+ mimeType: string,
68
+ filename: string,
69
+ ): File {
70
+ // Remove data URL prefix if present (e.g., "data:audio/webm;base64,")
71
+ const base64Data = base64.includes(",")
72
+ ? (base64.split(",")[1] ?? base64)
73
+ : base64;
74
+
75
+ // Decode base64 to binary
76
+ const binaryString = atob(base64Data);
77
+ const bytes = new Uint8Array(binaryString.length);
78
+ for (let i = 0; i < binaryString.length; i++) {
79
+ bytes[i] = binaryString.charCodeAt(i);
80
+ }
81
+
82
+ // Create File object
83
+ return new File([bytes], filename, { type: mimeType });
84
+ }
85
+
86
+ async function extractAudioFromFormData(
87
+ request: Request,
88
+ ): Promise<{ file: File } | { error: Response }> {
89
+ const formData = await request.formData();
90
+ const audioFile = formData.get("audio") as File | null;
91
+
92
+ if (!audioFile || !(audioFile instanceof File)) {
93
+ const err = TranscriptionErrors.invalidRequest(
94
+ "No audio file found in form data. Please include an 'audio' field.",
95
+ );
96
+ return { error: createErrorResponse(err) };
97
+ }
98
+
99
+ if (!isValidAudioType(audioFile.type)) {
100
+ const err = TranscriptionErrors.invalidAudioFormat(
101
+ audioFile.type,
102
+ VALID_AUDIO_TYPES,
103
+ );
104
+ return { error: createErrorResponse(err) };
105
+ }
106
+
107
+ return { file: audioFile };
108
+ }
109
+
110
+ async function extractAudioFromJson(
111
+ request: Request,
112
+ ): Promise<{ file: File } | { error: Response }> {
113
+ let body: Base64AudioInput;
114
+
115
+ try {
116
+ body = await request.json();
117
+ } catch {
118
+ const err = TranscriptionErrors.invalidRequest(
119
+ "Request body must be valid JSON",
120
+ );
121
+ return { error: createErrorResponse(err) };
122
+ }
123
+
124
+ if (!body.audio || typeof body.audio !== "string") {
125
+ const err = TranscriptionErrors.invalidRequest(
126
+ "Request must include 'audio' field with base64-encoded audio data",
127
+ );
128
+ return { error: createErrorResponse(err) };
129
+ }
130
+
131
+ if (!body.mimeType || typeof body.mimeType !== "string") {
132
+ const err = TranscriptionErrors.invalidRequest(
133
+ "Request must include 'mimeType' field (e.g., 'audio/webm')",
134
+ );
135
+ return { error: createErrorResponse(err) };
136
+ }
137
+
138
+ if (!isValidAudioType(body.mimeType)) {
139
+ const err = TranscriptionErrors.invalidAudioFormat(
140
+ body.mimeType,
141
+ VALID_AUDIO_TYPES,
142
+ );
143
+ return { error: createErrorResponse(err) };
144
+ }
145
+
146
+ try {
147
+ const filename = body.filename || "recording.webm";
148
+ const file = base64ToFile(body.audio, body.mimeType, filename);
149
+ return { file };
150
+ } catch {
151
+ const err = TranscriptionErrors.invalidRequest(
152
+ "Failed to decode base64 audio data",
153
+ );
154
+ return { error: createErrorResponse(err) };
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Categorize provider errors into appropriate transcription error responses.
160
+ */
161
+ function categorizeProviderError(error: unknown): TranscriptionErrorResponse {
162
+ const message =
163
+ error instanceof Error ? error.message : "Unknown error occurred";
164
+ const errorStr = String(error).toLowerCase();
165
+
166
+ // Check for rate limiting
167
+ if (
168
+ errorStr.includes("rate") ||
169
+ errorStr.includes("429") ||
170
+ errorStr.includes("too many")
171
+ ) {
172
+ return TranscriptionErrors.rateLimited();
173
+ }
174
+
175
+ // Check for auth errors
176
+ if (
177
+ errorStr.includes("auth") ||
178
+ errorStr.includes("401") ||
179
+ errorStr.includes("api key") ||
180
+ errorStr.includes("unauthorized")
181
+ ) {
182
+ return TranscriptionErrors.authFailed();
183
+ }
184
+
185
+ // Check for audio too long
186
+ if (
187
+ errorStr.includes("too long") ||
188
+ errorStr.includes("duration") ||
189
+ errorStr.includes("length")
190
+ ) {
191
+ return TranscriptionErrors.audioTooLong();
192
+ }
193
+
194
+ // Default to provider error
195
+ return TranscriptionErrors.providerError(message);
196
+ }
197
+
198
+ export async function handleTranscribe({
199
+ runtime,
200
+ request,
201
+ }: HandleTranscribeParameters) {
202
+ try {
203
+ // Check if transcription service is configured
204
+ if (!runtime.transcriptionService) {
205
+ const err = TranscriptionErrors.serviceNotConfigured();
206
+ return createErrorResponse(err);
207
+ }
208
+
209
+ // Determine input type based on content-type header
210
+ const contentType = request.headers.get("content-type") || "";
211
+
212
+ let extractResult: { file: File } | { error: Response };
213
+
214
+ if (contentType.includes("multipart/form-data")) {
215
+ // Handle multipart/form-data (REST mode)
216
+ extractResult = await extractAudioFromFormData(request);
217
+ } else if (contentType.includes("application/json")) {
218
+ // Handle JSON with base64 audio (single-endpoint mode)
219
+ extractResult = await extractAudioFromJson(request);
220
+ } else {
221
+ const err = TranscriptionErrors.invalidRequest(
222
+ "Request must be multipart/form-data or application/json with base64 audio",
223
+ );
224
+ return createErrorResponse(err);
225
+ }
226
+
227
+ // Check for extraction errors
228
+ if ("error" in extractResult) {
229
+ return extractResult.error;
230
+ }
231
+
232
+ const audioFile = extractResult.file;
233
+
234
+ // Transcribe the audio file
235
+ const transcription = await runtime.transcriptionService.transcribeFile({
236
+ audioFile,
237
+ mimeType: audioFile.type,
238
+ size: audioFile.size,
239
+ });
240
+
241
+ return new Response(
242
+ JSON.stringify({
243
+ text: transcription,
244
+ size: audioFile.size,
245
+ type: audioFile.type,
246
+ }),
247
+ {
248
+ status: 200,
249
+ headers: { "Content-Type": "application/json" },
250
+ },
251
+ );
252
+ } catch (error) {
253
+ // Categorize the error for better client-side handling
254
+ return createErrorResponse(categorizeProviderError(error));
255
+ }
256
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Determines if a header should be forwarded based on the allowlist.
3
+ * Forwards: authorization header and all x-* custom headers.
4
+ */
5
+ export function shouldForwardHeader(headerName: string): boolean {
6
+ const lower = headerName.toLowerCase();
7
+ return lower === "authorization" || lower.startsWith("x-");
8
+ }
9
+
10
+ /**
11
+ * Extracts headers that should be forwarded from a Request object.
12
+ * Forwards only authorization and x-* headers.
13
+ */
14
+ export function extractForwardableHeaders(
15
+ request: Request,
16
+ ): Record<string, string> {
17
+ const forwardableHeaders: Record<string, string> = {};
18
+ request.headers.forEach((value, key) => {
19
+ if (shouldForwardHeader(key)) {
20
+ forwardableHeaders[key] = value;
21
+ }
22
+ });
23
+ return forwardableHeaders;
24
+ }
@@ -0,0 +1,65 @@
1
+ import { CopilotIntelligenceRuntimeLike } from "../../runtime";
2
+ import { isPlatformNotFoundError } from "../shared/intelligence-utils";
3
+ import { resolveIntelligenceUser } from "../shared/resolve-intelligence-user";
4
+ import { isHandlerResponse } from "../shared/json-response";
5
+
6
+ interface HandleIntelligenceConnectParams {
7
+ runtime: CopilotIntelligenceRuntimeLike;
8
+ request: Request;
9
+ threadId: string;
10
+ lastSeenEventId: string | null;
11
+ }
12
+
13
+ export async function handleIntelligenceConnect({
14
+ runtime,
15
+ request,
16
+ threadId,
17
+ lastSeenEventId,
18
+ }: HandleIntelligenceConnectParams): Promise<Response> {
19
+ if (!runtime.intelligence) {
20
+ return Response.json(
21
+ {
22
+ error: "Intelligence not configured",
23
+ message: "Intelligence mode requires a CopilotKitIntelligence",
24
+ },
25
+ { status: 500 },
26
+ );
27
+ }
28
+
29
+ try {
30
+ const user = await resolveIntelligenceUser({ runtime, request });
31
+ if (isHandlerResponse(user)) {
32
+ return user;
33
+ }
34
+
35
+ const result = await runtime.intelligence.ɵconnectThread({
36
+ threadId,
37
+ userId: user.id,
38
+ lastSeenEventId,
39
+ });
40
+
41
+ if (result === null) {
42
+ return new Response(null, {
43
+ status: 204,
44
+ });
45
+ }
46
+
47
+ return Response.json(result, {
48
+ headers: { "Cache-Control": "no-cache", Connection: "keep-alive" },
49
+ });
50
+ } catch (error) {
51
+ if (isPlatformNotFoundError(error)) {
52
+ return new Response(null, {
53
+ status: 204,
54
+ });
55
+ }
56
+
57
+ console.error("Connect plan not available:", error);
58
+ return Response.json(
59
+ {
60
+ error: "Connect plan not available",
61
+ },
62
+ { status: 404 },
63
+ );
64
+ }
65
+ }
@@ -0,0 +1,152 @@
1
+ import { AbstractAgent, Message, RunAgentInput } from "@ag-ui/client";
2
+ import { CopilotIntelligenceRuntimeLike } from "../../runtime";
3
+ import { generateThreadNameForNewThread } from "./thread-names";
4
+ import { logger } from "@copilotkit/shared";
5
+ import { telemetry } from "../../telemetry";
6
+ import { resolveIntelligenceUser } from "../shared/resolve-intelligence-user";
7
+ import { isHandlerResponse } from "../shared/json-response";
8
+
9
+ interface HandleIntelligenceRunParams {
10
+ runtime: CopilotIntelligenceRuntimeLike;
11
+ request: Request;
12
+ agentId: string;
13
+ agent: AbstractAgent;
14
+ input: RunAgentInput;
15
+ }
16
+
17
+ export async function handleIntelligenceRun({
18
+ runtime,
19
+ request,
20
+ agentId,
21
+ agent,
22
+ input,
23
+ }: HandleIntelligenceRunParams): Promise<Response> {
24
+ if (!runtime.intelligence) {
25
+ return Response.json(
26
+ {
27
+ error: "Intelligence not configured",
28
+ message: "Intelligence mode requires a CopilotKitIntelligence",
29
+ },
30
+ { status: 500 },
31
+ );
32
+ }
33
+
34
+ const user = await resolveIntelligenceUser({ runtime, request });
35
+ if (isHandlerResponse(user)) {
36
+ return user;
37
+ }
38
+ const userId = user.id;
39
+
40
+ try {
41
+ const { thread, created } = await runtime.intelligence.getOrCreateThread({
42
+ threadId: input.threadId,
43
+ userId,
44
+ agentId,
45
+ });
46
+
47
+ if (created && runtime.generateThreadNames && !thread.name?.trim()) {
48
+ void generateThreadNameForNewThread({
49
+ runtime,
50
+ request,
51
+ agentId,
52
+ sourceInput: input,
53
+ thread,
54
+ userId,
55
+ }).catch((nameError) => {
56
+ logger.error("Failed to generate thread name:", nameError);
57
+ });
58
+ }
59
+ } catch (error) {
60
+ logger.error("Failed to get or create thread:", error);
61
+ return Response.json(
62
+ {
63
+ error: "Failed to initialize thread",
64
+ },
65
+ { status: 502 },
66
+ );
67
+ }
68
+
69
+ let joinCode: string | undefined;
70
+ let joinToken: string | undefined;
71
+ try {
72
+ const lockResult = await runtime.intelligence.ɵacquireThreadLock({
73
+ threadId: input.threadId,
74
+ runId: input.runId,
75
+ userId,
76
+ });
77
+ joinToken = lockResult.joinToken;
78
+ joinCode = lockResult.joinCode;
79
+ } catch (error) {
80
+ logger.error("Thread lock denied:", error);
81
+ return Response.json(
82
+ {
83
+ error: "Thread lock denied",
84
+ },
85
+ { status: 409 },
86
+ );
87
+ }
88
+
89
+ if (!joinToken) {
90
+ return Response.json(
91
+ {
92
+ error: "Join token not available",
93
+ message: "Intelligence platform did not return a join token",
94
+ },
95
+ { status: 502 },
96
+ );
97
+ }
98
+
99
+ let persistedInputMessages: Message[] | undefined;
100
+ if (Array.isArray(input.messages)) {
101
+ try {
102
+ const history = await runtime.intelligence.getThreadMessages({
103
+ threadId: input.threadId,
104
+ });
105
+ const historicMessageIds = new Set(
106
+ history.messages.map((message) => message.id),
107
+ );
108
+ persistedInputMessages = input.messages.filter(
109
+ (message) => !historicMessageIds.has(message.id),
110
+ );
111
+ } catch (error) {
112
+ logger.error("Thread history lookup failed:", error);
113
+ return Response.json(
114
+ {
115
+ error: "Thread history lookup failed",
116
+ },
117
+ { status: 502 },
118
+ );
119
+ }
120
+ }
121
+
122
+ telemetry.capture("oss.runtime.agent_execution_stream_started", {});
123
+
124
+ runtime.runner
125
+ .run({
126
+ threadId: input.threadId,
127
+ agent,
128
+ input,
129
+ ...(persistedInputMessages !== undefined
130
+ ? { persistedInputMessages }
131
+ : {}),
132
+ ...(joinCode ? { joinCode } : {}),
133
+ })
134
+ .subscribe({
135
+ error: (error) => {
136
+ telemetry.capture("oss.runtime.agent_execution_stream_errored", {
137
+ error: error instanceof Error ? error.message : String(error),
138
+ });
139
+ logger.error("Error running agent:", error);
140
+ },
141
+ complete: () => {
142
+ telemetry.capture("oss.runtime.agent_execution_stream_ended", {});
143
+ },
144
+ });
145
+
146
+ return Response.json(
147
+ { joinToken },
148
+ {
149
+ headers: { "Cache-Control": "no-cache" },
150
+ },
151
+ );
152
+ }