@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,36 @@
1
+ import {
2
+ AbstractAgent,
3
+ BaseEvent,
4
+ Message,
5
+ RunAgentInput,
6
+ } from "@ag-ui/client";
7
+ import { Observable } from "rxjs";
8
+
9
+ export interface AgentRunnerRunRequest {
10
+ threadId: string;
11
+ agent: AbstractAgent;
12
+ input: RunAgentInput;
13
+ joinCode?: string;
14
+ persistedInputMessages?: Message[];
15
+ }
16
+
17
+ export interface AgentRunnerConnectRequest {
18
+ threadId: string;
19
+ headers?: Record<string, string>;
20
+ joinCode?: string;
21
+ }
22
+
23
+ export interface AgentRunnerIsRunningRequest {
24
+ threadId: string;
25
+ }
26
+
27
+ export interface AgentRunnerStopRequest {
28
+ threadId: string;
29
+ }
30
+
31
+ export abstract class AgentRunner {
32
+ abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;
33
+ abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;
34
+ abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;
35
+ abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
36
+ }
@@ -0,0 +1,381 @@
1
+ import {
2
+ AgentRunner,
3
+ AgentRunnerConnectRequest,
4
+ AgentRunnerIsRunningRequest,
5
+ AgentRunnerRunRequest,
6
+ type AgentRunnerStopRequest,
7
+ } from "./agent-runner";
8
+ import { Observable, ReplaySubject } from "rxjs";
9
+ import {
10
+ AbstractAgent,
11
+ BaseEvent,
12
+ EventType,
13
+ MessagesSnapshotEvent,
14
+ RunStartedEvent,
15
+ compactEvents,
16
+ } from "@ag-ui/client";
17
+ import { finalizeRunEvents } from "@copilotkit/shared";
18
+
19
+ interface HistoricRun {
20
+ threadId: string;
21
+ runId: string;
22
+ parentRunId: string | null;
23
+ events: BaseEvent[];
24
+ createdAt: number;
25
+ }
26
+
27
+ class InMemoryEventStore {
28
+ constructor(public threadId: string) {}
29
+
30
+ /** The subject that current consumers subscribe to. */
31
+ subject: ReplaySubject<BaseEvent> | null = null;
32
+
33
+ /** True while a run is actively producing events. */
34
+ isRunning = false;
35
+
36
+ /** Current run ID */
37
+ currentRunId: string | null = null;
38
+
39
+ /** Historic completed runs */
40
+ historicRuns: HistoricRun[] = [];
41
+
42
+ /** Currently running agent instance (if any). */
43
+ agent: AbstractAgent | null = null;
44
+
45
+ /** Subject returned from run() while the run is active. */
46
+ runSubject: ReplaySubject<BaseEvent> | null = null;
47
+
48
+ /** True once stop() has been requested but the run has not yet finalized. */
49
+ stopRequested = false;
50
+
51
+ /** Reference to the events emitted in the current run. */
52
+ currentEvents: BaseEvent[] | null = null;
53
+ }
54
+
55
+ // Use a symbol key on globalThis to survive hot reloads in development
56
+ const GLOBAL_STORE_KEY = Symbol.for("@copilotkit/runtime/in-memory-store");
57
+
58
+ interface GlobalStoreData {
59
+ stores: Map<string, InMemoryEventStore>;
60
+ historicRunsBackup: Map<string, HistoricRun[]>;
61
+ }
62
+
63
+ function getGlobalStore(): Map<string, InMemoryEventStore> {
64
+ const globalAny = globalThis as unknown as Record<symbol, GlobalStoreData>;
65
+
66
+ if (!globalAny[GLOBAL_STORE_KEY]) {
67
+ globalAny[GLOBAL_STORE_KEY] = {
68
+ stores: new Map<string, InMemoryEventStore>(),
69
+ historicRunsBackup: new Map<string, HistoricRun[]>(),
70
+ };
71
+ }
72
+
73
+ const data = globalAny[GLOBAL_STORE_KEY];
74
+
75
+ // Restore historic runs from backup after hot reload
76
+ // (when stores map is empty but backup has data)
77
+ if (data.stores.size === 0 && data.historicRunsBackup.size > 0) {
78
+ for (const [threadId, historicRuns] of data.historicRunsBackup) {
79
+ const store = new InMemoryEventStore(threadId);
80
+ store.historicRuns = historicRuns;
81
+ data.stores.set(threadId, store);
82
+ }
83
+ }
84
+
85
+ return data.stores;
86
+ }
87
+
88
+ function backupHistoricRuns(
89
+ threadId: string,
90
+ historicRuns: HistoricRun[],
91
+ ): void {
92
+ const globalAny = globalThis as unknown as Record<symbol, GlobalStoreData>;
93
+ if (globalAny[GLOBAL_STORE_KEY]) {
94
+ globalAny[GLOBAL_STORE_KEY].historicRunsBackup.set(threadId, historicRuns);
95
+ }
96
+ }
97
+
98
+ const GLOBAL_STORE = getGlobalStore();
99
+
100
+ export class InMemoryAgentRunner extends AgentRunner {
101
+ run(request: AgentRunnerRunRequest): Observable<BaseEvent> {
102
+ let existingStore = GLOBAL_STORE.get(request.threadId);
103
+ if (!existingStore) {
104
+ existingStore = new InMemoryEventStore(request.threadId);
105
+ GLOBAL_STORE.set(request.threadId, existingStore);
106
+ }
107
+ const store = existingStore; // Now store is const and non-null
108
+
109
+ if (store.isRunning) {
110
+ throw new Error("Thread already running");
111
+ }
112
+ store.isRunning = true;
113
+ store.currentRunId = request.input.runId;
114
+ store.agent = request.agent;
115
+ store.stopRequested = false;
116
+
117
+ // Track seen message IDs and current run events for this run
118
+ const seenMessageIds = new Set<string>();
119
+ const currentRunEvents: BaseEvent[] = [];
120
+ store.currentEvents = currentRunEvents;
121
+
122
+ // Get all previously seen message IDs from historic runs
123
+ const historicMessageIds = new Set<string>();
124
+ for (const run of store.historicRuns) {
125
+ for (const event of run.events) {
126
+ if ("messageId" in event && typeof event.messageId === "string") {
127
+ historicMessageIds.add(event.messageId);
128
+ }
129
+ if (event.type === EventType.RUN_STARTED) {
130
+ const runStarted = event as RunStartedEvent;
131
+ const messages = runStarted.input?.messages ?? [];
132
+ for (const message of messages) {
133
+ historicMessageIds.add(message.id);
134
+ }
135
+ }
136
+ }
137
+ }
138
+
139
+ const nextSubject = new ReplaySubject<BaseEvent>(Infinity);
140
+ const prevSubject = store.subject;
141
+
142
+ // Update the store's subject immediately
143
+ store.subject = nextSubject;
144
+
145
+ // Create a subject for run() return value
146
+ const runSubject = new ReplaySubject<BaseEvent>(Infinity);
147
+ store.runSubject = runSubject;
148
+
149
+ // Helper function to run the agent and handle errors
150
+ const runAgent = async () => {
151
+ // Get parent run ID for chaining
152
+ const lastRun = store.historicRuns[store.historicRuns.length - 1];
153
+ const parentRunId = lastRun?.runId ?? null;
154
+
155
+ try {
156
+ await request.agent.runAgent(request.input, {
157
+ onEvent: ({ event }) => {
158
+ let processedEvent: BaseEvent = event;
159
+ if (event.type === EventType.RUN_STARTED) {
160
+ const runStartedEvent = event as RunStartedEvent;
161
+ if (!runStartedEvent.input) {
162
+ const sanitizedMessages = request.input.messages
163
+ ? request.input.messages.filter(
164
+ (message) => !historicMessageIds.has(message.id),
165
+ )
166
+ : undefined;
167
+ const updatedInput = {
168
+ ...request.input,
169
+ ...(sanitizedMessages !== undefined
170
+ ? { messages: sanitizedMessages }
171
+ : {}),
172
+ };
173
+ processedEvent = {
174
+ ...runStartedEvent,
175
+ input: updatedInput,
176
+ } as RunStartedEvent;
177
+ }
178
+ }
179
+
180
+ runSubject.next(processedEvent); // For run() return - only agent events
181
+ nextSubject.next(processedEvent); // For connect() / store - all events
182
+ currentRunEvents.push(processedEvent); // Accumulate for storage
183
+ },
184
+ onNewMessage: ({ message }) => {
185
+ // Called for each new message
186
+ if (!seenMessageIds.has(message.id)) {
187
+ seenMessageIds.add(message.id);
188
+ }
189
+ },
190
+ onRunStartedEvent: () => {
191
+ // Mark any messages from the input as seen so they aren't emitted twice
192
+ if (request.input.messages) {
193
+ for (const message of request.input.messages) {
194
+ if (!seenMessageIds.has(message.id)) {
195
+ seenMessageIds.add(message.id);
196
+ }
197
+ }
198
+ }
199
+ },
200
+ });
201
+
202
+ const appendedEvents = finalizeRunEvents(currentRunEvents, {
203
+ stopRequested: store.stopRequested,
204
+ });
205
+ for (const event of appendedEvents) {
206
+ runSubject.next(event);
207
+ nextSubject.next(event);
208
+ }
209
+
210
+ // Store the completed run in memory with ONLY its events
211
+ if (store.currentRunId) {
212
+ // Compact the events before storing (like SQLite does)
213
+ const compactedEvents = compactEvents(currentRunEvents);
214
+
215
+ store.historicRuns.push({
216
+ threadId: request.threadId,
217
+ runId: store.currentRunId,
218
+ parentRunId,
219
+ events: compactedEvents,
220
+ createdAt: Date.now(),
221
+ });
222
+
223
+ // Backup for hot reload survival
224
+ backupHistoricRuns(request.threadId, store.historicRuns);
225
+ }
226
+
227
+ // Complete the run
228
+ store.currentEvents = null;
229
+ store.currentRunId = null;
230
+ store.agent = null;
231
+ store.runSubject = null;
232
+ store.stopRequested = false;
233
+ store.isRunning = false;
234
+ runSubject.complete();
235
+ nextSubject.complete();
236
+ } catch (error) {
237
+ const interruptionMessage =
238
+ error instanceof Error ? error.message : String(error);
239
+ const appendedEvents = finalizeRunEvents(currentRunEvents, {
240
+ stopRequested: store.stopRequested,
241
+ interruptionMessage,
242
+ });
243
+ for (const event of appendedEvents) {
244
+ runSubject.next(event);
245
+ nextSubject.next(event);
246
+ }
247
+
248
+ // Store the run even if it failed (partial events)
249
+ if (store.currentRunId && currentRunEvents.length > 0) {
250
+ // Compact the events before storing (like SQLite does)
251
+ const compactedEvents = compactEvents(currentRunEvents);
252
+ store.historicRuns.push({
253
+ threadId: request.threadId,
254
+ runId: store.currentRunId,
255
+ parentRunId,
256
+ events: compactedEvents,
257
+ createdAt: Date.now(),
258
+ });
259
+
260
+ // Backup for hot reload survival
261
+ backupHistoricRuns(request.threadId, store.historicRuns);
262
+ }
263
+
264
+ // Complete the run
265
+ store.currentEvents = null;
266
+ store.currentRunId = null;
267
+ store.agent = null;
268
+ store.runSubject = null;
269
+ store.stopRequested = false;
270
+ store.isRunning = false;
271
+ runSubject.complete();
272
+ nextSubject.complete();
273
+ }
274
+ };
275
+
276
+ // Bridge previous events if they exist
277
+ if (prevSubject) {
278
+ prevSubject.subscribe({
279
+ next: (e) => nextSubject.next(e),
280
+ error: (err) => nextSubject.error(err),
281
+ complete: () => {
282
+ // Don't complete nextSubject here - it needs to stay open for new events
283
+ },
284
+ });
285
+ }
286
+
287
+ // Start the agent execution immediately (not lazily)
288
+ runAgent();
289
+
290
+ // Return the run subject (only agent events, no injected messages)
291
+ return runSubject.asObservable();
292
+ }
293
+
294
+ connect(request: AgentRunnerConnectRequest): Observable<BaseEvent> {
295
+ const store = GLOBAL_STORE.get(request.threadId);
296
+ const connectionSubject = new ReplaySubject<BaseEvent>(Infinity);
297
+
298
+ if (!store) {
299
+ // No store means no events
300
+ connectionSubject.complete();
301
+ return connectionSubject.asObservable();
302
+ }
303
+
304
+ // Collect all historic events from memory
305
+ const allHistoricEvents: BaseEvent[] = [];
306
+ for (const run of store.historicRuns) {
307
+ allHistoricEvents.push(...run.events);
308
+ }
309
+
310
+ // Apply compaction to all historic events together (like SQLite)
311
+ const compactedEvents = compactEvents(allHistoricEvents);
312
+
313
+ // Emit compacted events and track message IDs
314
+ const emittedMessageIds = new Set<string>();
315
+ for (const event of compactedEvents) {
316
+ connectionSubject.next(event);
317
+ if ("messageId" in event && typeof event.messageId === "string") {
318
+ emittedMessageIds.add(event.messageId);
319
+ }
320
+ }
321
+
322
+ // Bridge active run to connection if exists
323
+ if (store.subject && (store.isRunning || store.stopRequested)) {
324
+ store.subject.subscribe({
325
+ next: (event) => {
326
+ // Skip message events that we've already emitted from historic
327
+ if (
328
+ "messageId" in event &&
329
+ typeof event.messageId === "string" &&
330
+ emittedMessageIds.has(event.messageId)
331
+ ) {
332
+ return;
333
+ }
334
+ connectionSubject.next(event);
335
+ },
336
+ complete: () => connectionSubject.complete(),
337
+ error: (err) => connectionSubject.error(err),
338
+ });
339
+ } else {
340
+ // No active run, complete after historic events
341
+ connectionSubject.complete();
342
+ }
343
+
344
+ return connectionSubject.asObservable();
345
+ }
346
+
347
+ isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean> {
348
+ const store = GLOBAL_STORE.get(request.threadId);
349
+ return Promise.resolve(store?.isRunning ?? false);
350
+ }
351
+
352
+ stop(request: AgentRunnerStopRequest): Promise<boolean | undefined> {
353
+ const store = GLOBAL_STORE.get(request.threadId);
354
+ if (!store || !store.isRunning) {
355
+ return Promise.resolve(false);
356
+ }
357
+ if (store.stopRequested) {
358
+ return Promise.resolve(false);
359
+ }
360
+
361
+ store.stopRequested = true;
362
+ store.isRunning = false;
363
+
364
+ const agent = store.agent;
365
+ if (!agent) {
366
+ store.stopRequested = false;
367
+ store.isRunning = false;
368
+ return Promise.resolve(false);
369
+ }
370
+
371
+ try {
372
+ agent.abortRun();
373
+ return Promise.resolve(true);
374
+ } catch (error) {
375
+ console.error("Failed to abort agent run", error);
376
+ store.stopRequested = false;
377
+ store.isRunning = true;
378
+ return Promise.resolve(false);
379
+ }
380
+ }
381
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./agent-runner";
2
+ export * from "./in-memory";
3
+ export * from "./intelligence";
4
+ export { finalizeRunEvents } from "@copilotkit/shared";