@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,137 @@
1
+ import "reflect-metadata";
2
+ import { logger } from "@copilotkit/shared";
3
+
4
+ //#region src/v2/runtime/middleware-sse-parser.ts
5
+ /**
6
+ * Parse a cloned SSE Response body into structured messages.
7
+ * Returns empty results for non-SSE responses.
8
+ */
9
+ async function parseSSEResponse(response) {
10
+ if (!(response.headers.get("content-type") ?? "").includes("text/event-stream")) return { messages: [] };
11
+ let text;
12
+ try {
13
+ text = await response.text();
14
+ } catch {
15
+ logger.warn("Failed to read SSE response body in afterRequestMiddleware");
16
+ return { messages: [] };
17
+ }
18
+ if (!text.trim()) return { messages: [] };
19
+ let threadId;
20
+ let runId;
21
+ const messagesById = /* @__PURE__ */ new Map();
22
+ const toolCallsById = /* @__PURE__ */ new Map();
23
+ const toolCallParent = /* @__PURE__ */ new Map();
24
+ let snapshotMessages;
25
+ for (const line of text.split("\n")) {
26
+ const trimmed = line.trim();
27
+ if (!trimmed.startsWith("data:")) continue;
28
+ let event;
29
+ try {
30
+ event = JSON.parse(trimmed.slice(5).trim());
31
+ } catch {
32
+ continue;
33
+ }
34
+ switch (event.type) {
35
+ case "RUN_STARTED":
36
+ threadId = event.threadId;
37
+ runId = event.runId;
38
+ break;
39
+ case "MESSAGES_SNAPSHOT":
40
+ if (Array.isArray(event.messages)) snapshotMessages = event.messages;
41
+ break;
42
+ case "TEXT_MESSAGE_START":
43
+ messagesById.set(event.messageId, {
44
+ id: event.messageId,
45
+ role: event.role ?? "assistant",
46
+ content: ""
47
+ });
48
+ break;
49
+ case "TEXT_MESSAGE_CONTENT": {
50
+ const msg = messagesById.get(event.messageId);
51
+ if (msg) msg.content = (msg.content ?? "") + (event.delta ?? "");
52
+ break;
53
+ }
54
+ case "TEXT_MESSAGE_CHUNK":
55
+ if (event.messageId) {
56
+ const existing = messagesById.get(event.messageId);
57
+ if (existing) existing.content = (existing.content ?? "") + (event.delta ?? "");
58
+ else messagesById.set(event.messageId, {
59
+ id: event.messageId,
60
+ role: event.role ?? "assistant",
61
+ content: event.delta ?? ""
62
+ });
63
+ }
64
+ break;
65
+ case "TOOL_CALL_START": {
66
+ const tc = {
67
+ id: event.toolCallId,
68
+ name: event.toolCallName,
69
+ args: ""
70
+ };
71
+ toolCallsById.set(event.toolCallId, tc);
72
+ if (event.parentMessageId) toolCallParent.set(event.toolCallId, event.parentMessageId);
73
+ break;
74
+ }
75
+ case "TOOL_CALL_ARGS": {
76
+ const tc = toolCallsById.get(event.toolCallId);
77
+ if (tc) tc.args += event.delta ?? "";
78
+ break;
79
+ }
80
+ case "TOOL_CALL_CHUNK":
81
+ if (event.toolCallId) {
82
+ let tc = toolCallsById.get(event.toolCallId);
83
+ if (!tc) {
84
+ tc = {
85
+ id: event.toolCallId,
86
+ name: event.toolCallName ?? "",
87
+ args: ""
88
+ };
89
+ toolCallsById.set(event.toolCallId, tc);
90
+ if (event.parentMessageId) toolCallParent.set(event.toolCallId, event.parentMessageId);
91
+ }
92
+ if (event.toolCallName) tc.name = event.toolCallName;
93
+ tc.args += event.delta ?? "";
94
+ }
95
+ break;
96
+ case "TOOL_CALL_END": {
97
+ const tc = toolCallsById.get(event.toolCallId);
98
+ const parentId = toolCallParent.get(event.toolCallId);
99
+ if (tc && parentId) {
100
+ const parent = messagesById.get(parentId);
101
+ if (parent) {
102
+ parent.toolCalls = parent.toolCalls ?? [];
103
+ parent.toolCalls.push(tc);
104
+ }
105
+ }
106
+ break;
107
+ }
108
+ case "TOOL_CALL_RESULT":
109
+ messagesById.set(event.messageId, {
110
+ id: event.messageId,
111
+ role: "tool",
112
+ content: event.content,
113
+ toolCallId: event.toolCallId
114
+ });
115
+ break;
116
+ }
117
+ }
118
+ for (const [toolCallId, tc] of toolCallsById) {
119
+ const parentId = toolCallParent.get(toolCallId);
120
+ if (!parentId) continue;
121
+ const parent = messagesById.get(parentId);
122
+ if (!parent) continue;
123
+ if (!parent.toolCalls?.some((t) => t.id === tc.id)) {
124
+ parent.toolCalls = parent.toolCalls ?? [];
125
+ parent.toolCalls.push(tc);
126
+ }
127
+ }
128
+ return {
129
+ messages: snapshotMessages ?? [...messagesById.values()],
130
+ threadId,
131
+ runId
132
+ };
133
+ }
134
+
135
+ //#endregion
136
+ export { parseSSEResponse };
137
+ //# sourceMappingURL=middleware-sse-parser.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-sse-parser.mjs","names":[],"sources":["../../../src/v2/runtime/middleware-sse-parser.ts"],"sourcesContent":["import { logger } from \"@copilotkit/shared\";\n\nexport interface ParsedSSEResult {\n messages: Message[];\n threadId?: string;\n runId?: string;\n}\n\n/** Minimal message shape reconstructed from AG-UI events. */\nexport interface Message {\n id: string;\n role: string;\n content?: string;\n toolCalls?: ToolCall[];\n toolCallId?: string;\n}\n\ninterface ToolCall {\n id: string;\n name: string;\n args: string;\n}\n\n/**\n * Parse a cloned SSE Response body into structured messages.\n * Returns empty results for non-SSE responses.\n */\nexport async function parseSSEResponse(\n response: Response,\n): Promise<ParsedSSEResult> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"text/event-stream\")) {\n return { messages: [] };\n }\n\n let text: string;\n try {\n text = await response.text();\n } catch {\n logger.warn(\"Failed to read SSE response body in afterRequestMiddleware\");\n return { messages: [] };\n }\n\n if (!text.trim()) {\n return { messages: [] };\n }\n\n let threadId: string | undefined;\n let runId: string | undefined;\n const messagesById = new Map<string, Message>();\n const toolCallsById = new Map<string, ToolCall>();\n const toolCallParent = new Map<string, string>(); // toolCallId → messageId\n let snapshotMessages: Message[] | undefined;\n\n for (const line of text.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"data:\")) continue;\n\n let event: Record<string, any>;\n try {\n event = JSON.parse(trimmed.slice(5).trim());\n } catch {\n continue;\n }\n\n switch (event.type) {\n case \"RUN_STARTED\":\n threadId = event.threadId;\n runId = event.runId;\n break;\n\n case \"MESSAGES_SNAPSHOT\":\n if (Array.isArray(event.messages)) {\n snapshotMessages = event.messages;\n }\n break;\n\n case \"TEXT_MESSAGE_START\":\n messagesById.set(event.messageId, {\n id: event.messageId,\n role: event.role ?? \"assistant\",\n content: \"\",\n });\n break;\n\n case \"TEXT_MESSAGE_CONTENT\": {\n const msg = messagesById.get(event.messageId);\n if (msg) {\n msg.content = (msg.content ?? \"\") + (event.delta ?? \"\");\n }\n break;\n }\n\n case \"TEXT_MESSAGE_CHUNK\": {\n // Chunk format: combined start+content. First chunk creates the\n // message, subsequent chunks append delta to content.\n if (event.messageId) {\n const existing = messagesById.get(event.messageId);\n if (existing) {\n existing.content = (existing.content ?? \"\") + (event.delta ?? \"\");\n } else {\n messagesById.set(event.messageId, {\n id: event.messageId,\n role: event.role ?? \"assistant\",\n content: event.delta ?? \"\",\n });\n }\n }\n break;\n }\n\n case \"TOOL_CALL_START\": {\n const tc: ToolCall = {\n id: event.toolCallId,\n name: event.toolCallName,\n args: \"\",\n };\n toolCallsById.set(event.toolCallId, tc);\n if (event.parentMessageId) {\n toolCallParent.set(event.toolCallId, event.parentMessageId);\n }\n break;\n }\n\n case \"TOOL_CALL_ARGS\": {\n const tc = toolCallsById.get(event.toolCallId);\n if (tc) {\n tc.args += event.delta ?? \"\";\n }\n break;\n }\n\n case \"TOOL_CALL_CHUNK\": {\n // Chunk format: combined start+args. First chunk for a given\n // toolCallId creates the tool call, subsequent chunks append delta.\n if (event.toolCallId) {\n let tc = toolCallsById.get(event.toolCallId);\n if (!tc) {\n tc = {\n id: event.toolCallId,\n name: event.toolCallName ?? \"\",\n args: \"\",\n };\n toolCallsById.set(event.toolCallId, tc);\n if (event.parentMessageId) {\n toolCallParent.set(event.toolCallId, event.parentMessageId);\n }\n }\n if (event.toolCallName) {\n tc.name = event.toolCallName;\n }\n tc.args += event.delta ?? \"\";\n }\n break;\n }\n\n case \"TOOL_CALL_END\": {\n const tc = toolCallsById.get(event.toolCallId);\n const parentId = toolCallParent.get(event.toolCallId);\n if (tc && parentId) {\n const parent = messagesById.get(parentId);\n if (parent) {\n parent.toolCalls = parent.toolCalls ?? [];\n parent.toolCalls.push(tc);\n }\n }\n break;\n }\n\n case \"TOOL_CALL_RESULT\":\n messagesById.set(event.messageId, {\n id: event.messageId,\n role: \"tool\",\n content: event.content,\n toolCallId: event.toolCallId,\n });\n break;\n }\n }\n\n // Attach any tool calls not yet linked to their parent message.\n // This handles TOOL_CALL_CHUNK flows which don't emit TOOL_CALL_END.\n for (const [toolCallId, tc] of toolCallsById) {\n const parentId = toolCallParent.get(toolCallId);\n if (!parentId) continue;\n const parent = messagesById.get(parentId);\n if (!parent) continue;\n const alreadyAttached = parent.toolCalls?.some((t) => t.id === tc.id);\n if (!alreadyAttached) {\n parent.toolCalls = parent.toolCalls ?? [];\n parent.toolCalls.push(tc);\n }\n }\n\n // Prefer MESSAGES_SNAPSHOT if present (contains full history).\n // Otherwise reconstruct from individual events.\n const messages = snapshotMessages ?? [...messagesById.values()];\n\n return { messages, threadId, runId };\n}\n"],"mappings":";;;;;;;;AA2BA,eAAsB,iBACpB,UAC0B;AAE1B,KAAI,EADgB,SAAS,QAAQ,IAAI,eAAe,IAAI,IAC3C,SAAS,oBAAoB,CAC5C,QAAO,EAAE,UAAU,EAAE,EAAE;CAGzB,IAAI;AACJ,KAAI;AACF,SAAO,MAAM,SAAS,MAAM;SACtB;AACN,SAAO,KAAK,6DAA6D;AACzE,SAAO,EAAE,UAAU,EAAE,EAAE;;AAGzB,KAAI,CAAC,KAAK,MAAM,CACd,QAAO,EAAE,UAAU,EAAE,EAAE;CAGzB,IAAI;CACJ,IAAI;CACJ,MAAM,+BAAe,IAAI,KAAsB;CAC/C,MAAM,gCAAgB,IAAI,KAAuB;CACjD,MAAM,iCAAiB,IAAI,KAAqB;CAChD,IAAI;AAEJ,MAAK,MAAM,QAAQ,KAAK,MAAM,KAAK,EAAE;EACnC,MAAM,UAAU,KAAK,MAAM;AAC3B,MAAI,CAAC,QAAQ,WAAW,QAAQ,CAAE;EAElC,IAAI;AACJ,MAAI;AACF,WAAQ,KAAK,MAAM,QAAQ,MAAM,EAAE,CAAC,MAAM,CAAC;UACrC;AACN;;AAGF,UAAQ,MAAM,MAAd;GACE,KAAK;AACH,eAAW,MAAM;AACjB,YAAQ,MAAM;AACd;GAEF,KAAK;AACH,QAAI,MAAM,QAAQ,MAAM,SAAS,CAC/B,oBAAmB,MAAM;AAE3B;GAEF,KAAK;AACH,iBAAa,IAAI,MAAM,WAAW;KAChC,IAAI,MAAM;KACV,MAAM,MAAM,QAAQ;KACpB,SAAS;KACV,CAAC;AACF;GAEF,KAAK,wBAAwB;IAC3B,MAAM,MAAM,aAAa,IAAI,MAAM,UAAU;AAC7C,QAAI,IACF,KAAI,WAAW,IAAI,WAAW,OAAO,MAAM,SAAS;AAEtD;;GAGF,KAAK;AAGH,QAAI,MAAM,WAAW;KACnB,MAAM,WAAW,aAAa,IAAI,MAAM,UAAU;AAClD,SAAI,SACF,UAAS,WAAW,SAAS,WAAW,OAAO,MAAM,SAAS;SAE9D,cAAa,IAAI,MAAM,WAAW;MAChC,IAAI,MAAM;MACV,MAAM,MAAM,QAAQ;MACpB,SAAS,MAAM,SAAS;MACzB,CAAC;;AAGN;GAGF,KAAK,mBAAmB;IACtB,MAAM,KAAe;KACnB,IAAI,MAAM;KACV,MAAM,MAAM;KACZ,MAAM;KACP;AACD,kBAAc,IAAI,MAAM,YAAY,GAAG;AACvC,QAAI,MAAM,gBACR,gBAAe,IAAI,MAAM,YAAY,MAAM,gBAAgB;AAE7D;;GAGF,KAAK,kBAAkB;IACrB,MAAM,KAAK,cAAc,IAAI,MAAM,WAAW;AAC9C,QAAI,GACF,IAAG,QAAQ,MAAM,SAAS;AAE5B;;GAGF,KAAK;AAGH,QAAI,MAAM,YAAY;KACpB,IAAI,KAAK,cAAc,IAAI,MAAM,WAAW;AAC5C,SAAI,CAAC,IAAI;AACP,WAAK;OACH,IAAI,MAAM;OACV,MAAM,MAAM,gBAAgB;OAC5B,MAAM;OACP;AACD,oBAAc,IAAI,MAAM,YAAY,GAAG;AACvC,UAAI,MAAM,gBACR,gBAAe,IAAI,MAAM,YAAY,MAAM,gBAAgB;;AAG/D,SAAI,MAAM,aACR,IAAG,OAAO,MAAM;AAElB,QAAG,QAAQ,MAAM,SAAS;;AAE5B;GAGF,KAAK,iBAAiB;IACpB,MAAM,KAAK,cAAc,IAAI,MAAM,WAAW;IAC9C,MAAM,WAAW,eAAe,IAAI,MAAM,WAAW;AACrD,QAAI,MAAM,UAAU;KAClB,MAAM,SAAS,aAAa,IAAI,SAAS;AACzC,SAAI,QAAQ;AACV,aAAO,YAAY,OAAO,aAAa,EAAE;AACzC,aAAO,UAAU,KAAK,GAAG;;;AAG7B;;GAGF,KAAK;AACH,iBAAa,IAAI,MAAM,WAAW;KAChC,IAAI,MAAM;KACV,MAAM;KACN,SAAS,MAAM;KACf,YAAY,MAAM;KACnB,CAAC;AACF;;;AAMN,MAAK,MAAM,CAAC,YAAY,OAAO,eAAe;EAC5C,MAAM,WAAW,eAAe,IAAI,WAAW;AAC/C,MAAI,CAAC,SAAU;EACf,MAAM,SAAS,aAAa,IAAI,SAAS;AACzC,MAAI,CAAC,OAAQ;AAEb,MAAI,CADoB,OAAO,WAAW,MAAM,MAAM,EAAE,OAAO,GAAG,GAAG,EAC/C;AACpB,UAAO,YAAY,OAAO,aAAa,EAAE;AACzC,UAAO,UAAU,KAAK,GAAG;;;AAQ7B,QAAO;EAAE,UAFQ,oBAAoB,CAAC,GAAG,aAAa,QAAQ,CAAC;EAE5C;EAAU;EAAO"}
@@ -0,0 +1,35 @@
1
+ require("reflect-metadata");
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_middleware_sse_parser = require('./middleware-sse-parser.cjs');
4
+ let _copilotkit_shared = require("@copilotkit/shared");
5
+
6
+ //#region src/v2/runtime/middleware.ts
7
+ async function callBeforeRequestMiddleware({ runtime, request, path }) {
8
+ const mw = runtime.beforeRequestMiddleware;
9
+ if (!mw) return;
10
+ if (typeof mw === "function") return mw({
11
+ runtime,
12
+ request,
13
+ path
14
+ });
15
+ _copilotkit_shared.logger.warn({ mw }, "Unsupported beforeRequestMiddleware value – skipped");
16
+ }
17
+ async function callAfterRequestMiddleware({ runtime, response, path }) {
18
+ const mw = runtime.afterRequestMiddleware;
19
+ if (!mw) return;
20
+ const { messages, threadId, runId } = await require_middleware_sse_parser.parseSSEResponse(response);
21
+ if (typeof mw === "function") return mw({
22
+ runtime,
23
+ response,
24
+ path,
25
+ messages,
26
+ threadId,
27
+ runId
28
+ });
29
+ _copilotkit_shared.logger.warn({ mw }, "Unsupported afterRequestMiddleware value – skipped");
30
+ }
31
+
32
+ //#endregion
33
+ exports.callAfterRequestMiddleware = callAfterRequestMiddleware;
34
+ exports.callBeforeRequestMiddleware = callBeforeRequestMiddleware;
35
+ //# sourceMappingURL=middleware.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.cjs","names":["parseSSEResponse"],"sources":["../../../src/v2/runtime/middleware.ts"],"sourcesContent":["/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntimeLike } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkit/shared\";\nimport { logger } from \"@copilotkit/shared\";\nimport { parseSSEResponse } from \"./middleware-sse-parser\";\nimport type { Message } from \"./middleware-sse-parser\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntimeLike;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntimeLike;\n response: Response;\n path: string;\n /** Reconstructed messages from the SSE stream (empty for non-SSE responses). */\n messages?: Message[];\n /** Thread ID extracted from the RUN_STARTED event. */\n threadId?: string;\n /** Run ID extracted from the RUN_STARTED event. */\n runId?: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters,\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters,\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: {\n runtime: CopilotRuntimeLike;\n response: Response;\n path: string;\n}): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n const { messages, threadId, runId } = await parseSSEResponse(response);\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({\n runtime,\n response,\n path,\n messages,\n threadId,\n runId,\n });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n"],"mappings":";;;;;;AAuEA,eAAsB,4BAA4B,EAChD,SACA,SACA,QAC6D;CAC7D,MAAM,KAAK,QAAQ;AACnB,KAAI,CAAC,GAAI;AAGT,KAAI,OAAO,OAAO,WAChB,QAAQ,GAAiC;EAAE;EAAS;EAAS;EAAM,CAAC;AAGtE,2BAAO,KAAK,EAAE,IAAI,EAAE,sDAAsD;;AAI5E,eAAsB,2BAA2B,EAC/C,SACA,UACA,QAKgB;CAChB,MAAM,KAAK,QAAQ;AACnB,KAAI,CAAC,GAAI;CAET,MAAM,EAAE,UAAU,UAAU,UAAU,MAAMA,+CAAiB,SAAS;AAEtE,KAAI,OAAO,OAAO,WAChB,QAAQ,GAAgC;EACtC;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAGJ,2BAAO,KAAK,EAAE,IAAI,EAAE,qDAAqD"}
@@ -0,0 +1,32 @@
1
+
2
+ import { Message } from "./middleware-sse-parser.cjs";
3
+ import { CopilotRuntimeLike } from "./runtime.cjs";
4
+ import { MaybePromise } from "@copilotkit/shared";
5
+
6
+ //#region src/v2/runtime/middleware.d.ts
7
+ interface BeforeRequestMiddlewareParameters {
8
+ runtime: CopilotRuntimeLike;
9
+ request: Request;
10
+ path: string;
11
+ }
12
+ interface AfterRequestMiddlewareParameters {
13
+ runtime: CopilotRuntimeLike;
14
+ response: Response;
15
+ path: string;
16
+ /** Reconstructed messages from the SSE stream (empty for non-SSE responses). */
17
+ messages?: Message[];
18
+ /** Thread ID extracted from the RUN_STARTED event. */
19
+ threadId?: string;
20
+ /** Run ID extracted from the RUN_STARTED event. */
21
+ runId?: string;
22
+ }
23
+ type BeforeRequestMiddlewareFn = (params: BeforeRequestMiddlewareParameters) => MaybePromise<Request | void>;
24
+ type AfterRequestMiddlewareFn = (params: AfterRequestMiddlewareParameters) => MaybePromise<void>;
25
+ /**
26
+ * A middleware value can be either a callback function or a webhook URL.
27
+ */
28
+ type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;
29
+ type AfterRequestMiddleware = AfterRequestMiddlewareFn;
30
+ //#endregion
31
+ export { AfterRequestMiddleware, BeforeRequestMiddleware };
32
+ //# sourceMappingURL=middleware.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.cts","names":[],"sources":["../../../src/v2/runtime/middleware.ts"],"mappings":";;;;;;UAwBiB,iCAAA;EACf,OAAA,EAAS,kBAAA;EACT,OAAA,EAAS,OAAA;EACT,IAAA;AAAA;AAAA,UAEe,gCAAA;EACf,OAAA,EAAS,kBAAA;EACT,QAAA,EAAU,QAAA;EACV,IAAA;EAFS;EAIT,QAAA,GAAW,OAAA;EAHD;EAKV,QAAA;EAFA;EAIA,KAAA;AAAA;AAAA,KAGU,yBAAA,IACV,MAAA,EAAQ,iCAAA,KACL,YAAA,CAAa,OAAA;AAAA,KACN,wBAAA,IACV,MAAA,EAAQ,gCAAA,KACL,YAAA;;AALL;;KAUY,uBAAA,GAA0B,yBAAA;AAAA,KAC1B,sBAAA,GAAyB,wBAAA"}
@@ -0,0 +1,32 @@
1
+ import "reflect-metadata";
2
+ import { Message } from "./middleware-sse-parser.mjs";
3
+ import { CopilotRuntimeLike } from "./runtime.mjs";
4
+ import { MaybePromise } from "@copilotkit/shared";
5
+
6
+ //#region src/v2/runtime/middleware.d.ts
7
+ interface BeforeRequestMiddlewareParameters {
8
+ runtime: CopilotRuntimeLike;
9
+ request: Request;
10
+ path: string;
11
+ }
12
+ interface AfterRequestMiddlewareParameters {
13
+ runtime: CopilotRuntimeLike;
14
+ response: Response;
15
+ path: string;
16
+ /** Reconstructed messages from the SSE stream (empty for non-SSE responses). */
17
+ messages?: Message[];
18
+ /** Thread ID extracted from the RUN_STARTED event. */
19
+ threadId?: string;
20
+ /** Run ID extracted from the RUN_STARTED event. */
21
+ runId?: string;
22
+ }
23
+ type BeforeRequestMiddlewareFn = (params: BeforeRequestMiddlewareParameters) => MaybePromise<Request | void>;
24
+ type AfterRequestMiddlewareFn = (params: AfterRequestMiddlewareParameters) => MaybePromise<void>;
25
+ /**
26
+ * A middleware value can be either a callback function or a webhook URL.
27
+ */
28
+ type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;
29
+ type AfterRequestMiddleware = AfterRequestMiddlewareFn;
30
+ //#endregion
31
+ export { AfterRequestMiddleware, BeforeRequestMiddleware };
32
+ //# sourceMappingURL=middleware.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.mts","names":[],"sources":["../../../src/v2/runtime/middleware.ts"],"mappings":";;;;;;UAwBiB,iCAAA;EACf,OAAA,EAAS,kBAAA;EACT,OAAA,EAAS,OAAA;EACT,IAAA;AAAA;AAAA,UAEe,gCAAA;EACf,OAAA,EAAS,kBAAA;EACT,QAAA,EAAU,QAAA;EACV,IAAA;EAFS;EAIT,QAAA,GAAW,OAAA;EAHD;EAKV,QAAA;EAFA;EAIA,KAAA;AAAA;AAAA,KAGU,yBAAA,IACV,MAAA,EAAQ,iCAAA,KACL,YAAA,CAAa,OAAA;AAAA,KACN,wBAAA,IACV,MAAA,EAAQ,gCAAA,KACL,YAAA;;AALL;;KAUY,uBAAA,GAA0B,yBAAA;AAAA,KAC1B,sBAAA,GAAyB,wBAAA"}
@@ -0,0 +1,33 @@
1
+ import "reflect-metadata";
2
+ import { parseSSEResponse } from "./middleware-sse-parser.mjs";
3
+ import { logger } from "@copilotkit/shared";
4
+
5
+ //#region src/v2/runtime/middleware.ts
6
+ async function callBeforeRequestMiddleware({ runtime, request, path }) {
7
+ const mw = runtime.beforeRequestMiddleware;
8
+ if (!mw) return;
9
+ if (typeof mw === "function") return mw({
10
+ runtime,
11
+ request,
12
+ path
13
+ });
14
+ logger.warn({ mw }, "Unsupported beforeRequestMiddleware value – skipped");
15
+ }
16
+ async function callAfterRequestMiddleware({ runtime, response, path }) {
17
+ const mw = runtime.afterRequestMiddleware;
18
+ if (!mw) return;
19
+ const { messages, threadId, runId } = await parseSSEResponse(response);
20
+ if (typeof mw === "function") return mw({
21
+ runtime,
22
+ response,
23
+ path,
24
+ messages,
25
+ threadId,
26
+ runId
27
+ });
28
+ logger.warn({ mw }, "Unsupported afterRequestMiddleware value – skipped");
29
+ }
30
+
31
+ //#endregion
32
+ export { callAfterRequestMiddleware, callBeforeRequestMiddleware };
33
+ //# sourceMappingURL=middleware.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.mjs","names":[],"sources":["../../../src/v2/runtime/middleware.ts"],"sourcesContent":["/**\n * Middleware support for CopilotKit Runtime.\n *\n * A middleware hook can be provided as either:\n * 1. A **callback function** executed in-process.\n * 2. A **webhook URL** (http/https). The runtime will `POST` a JSON payload\n * to the URL and, for *before* hooks, accept an optional modified\n * `Request` object in the response body.\n *\n * Two lifecycle hooks are available:\n * • `BEFORE_REQUEST` – runs *before* the request handler.\n * • `AFTER_REQUEST` – runs *after* the handler returns a `Response`.\n */\n\nimport type { CopilotRuntimeLike } from \"./runtime\";\nimport type { MaybePromise } from \"@copilotkit/shared\";\nimport { logger } from \"@copilotkit/shared\";\nimport { parseSSEResponse } from \"./middleware-sse-parser\";\nimport type { Message } from \"./middleware-sse-parser\";\n\n/* ------------------------------------------------------------------------------------------------\n * Public types\n * --------------------------------------------------------------------------------------------- */\n\nexport interface BeforeRequestMiddlewareParameters {\n runtime: CopilotRuntimeLike;\n request: Request;\n path: string;\n}\nexport interface AfterRequestMiddlewareParameters {\n runtime: CopilotRuntimeLike;\n response: Response;\n path: string;\n /** Reconstructed messages from the SSE stream (empty for non-SSE responses). */\n messages?: Message[];\n /** Thread ID extracted from the RUN_STARTED event. */\n threadId?: string;\n /** Run ID extracted from the RUN_STARTED event. */\n runId?: string;\n}\n\nexport type BeforeRequestMiddlewareFn = (\n params: BeforeRequestMiddlewareParameters,\n) => MaybePromise<Request | void>;\nexport type AfterRequestMiddlewareFn = (\n params: AfterRequestMiddlewareParameters,\n) => MaybePromise<void>;\n\n/**\n * A middleware value can be either a callback function or a webhook URL.\n */\nexport type BeforeRequestMiddleware = BeforeRequestMiddlewareFn;\nexport type AfterRequestMiddleware = AfterRequestMiddlewareFn;\n\n/** Lifecycle events emitted to webhook middleware. */\nexport enum CopilotKitMiddlewareEvent {\n BeforeRequest = \"BEFORE_REQUEST\",\n AfterRequest = \"AFTER_REQUEST\",\n}\n\n/** Stages used by the Middleware Webhook Protocol */\n/** Stages used by the CopilotKit webhook protocol */\nexport enum WebhookStage {\n BeforeRequest = \"before_request\",\n AfterRequest = \"after_request\",\n}\n\n/* ------------------------------------------------------------------------------------------------\n * Internal helpers – (de)serialisation\n * --------------------------------------------------------------------------------------------- */\n\nexport async function callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n}: BeforeRequestMiddlewareParameters): Promise<Request | void> {\n const mw = runtime.beforeRequestMiddleware;\n if (!mw) return;\n\n // Function-based middleware (in-process)\n if (typeof mw === \"function\") {\n return (mw as BeforeRequestMiddlewareFn)({ runtime, request, path });\n }\n\n logger.warn({ mw }, \"Unsupported beforeRequestMiddleware value – skipped\");\n return;\n}\n\nexport async function callAfterRequestMiddleware({\n runtime,\n response,\n path,\n}: {\n runtime: CopilotRuntimeLike;\n response: Response;\n path: string;\n}): Promise<void> {\n const mw = runtime.afterRequestMiddleware;\n if (!mw) return;\n\n const { messages, threadId, runId } = await parseSSEResponse(response);\n\n if (typeof mw === \"function\") {\n return (mw as AfterRequestMiddlewareFn)({\n runtime,\n response,\n path,\n messages,\n threadId,\n runId,\n });\n }\n\n logger.warn({ mw }, \"Unsupported afterRequestMiddleware value – skipped\");\n}\n"],"mappings":";;;;;AAuEA,eAAsB,4BAA4B,EAChD,SACA,SACA,QAC6D;CAC7D,MAAM,KAAK,QAAQ;AACnB,KAAI,CAAC,GAAI;AAGT,KAAI,OAAO,OAAO,WAChB,QAAQ,GAAiC;EAAE;EAAS;EAAS;EAAM,CAAC;AAGtE,QAAO,KAAK,EAAE,IAAI,EAAE,sDAAsD;;AAI5E,eAAsB,2BAA2B,EAC/C,SACA,UACA,QAKgB;CAChB,MAAM,KAAK,QAAQ;AACnB,KAAI,CAAC,GAAI;CAET,MAAM,EAAE,UAAU,UAAU,UAAU,MAAM,iBAAiB,SAAS;AAEtE,KAAI,OAAO,OAAO,WAChB,QAAQ,GAAgC;EACtC;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAGJ,QAAO,KAAK,EAAE,IAAI,EAAE,qDAAqD"}
@@ -0,0 +1,8 @@
1
+ require("reflect-metadata");
2
+
3
+ //#region src/v2/runtime/runner/agent-runner.ts
4
+ var AgentRunner = class {};
5
+
6
+ //#endregion
7
+ exports.AgentRunner = AgentRunner;
8
+ //# sourceMappingURL=agent-runner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.cjs","names":[],"sources":["../../../../src/v2/runtime/runner/agent-runner.ts"],"sourcesContent":["import {\n AbstractAgent,\n BaseEvent,\n Message,\n RunAgentInput,\n} from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface AgentRunnerRunRequest {\n threadId: string;\n agent: AbstractAgent;\n input: RunAgentInput;\n joinCode?: string;\n persistedInputMessages?: Message[];\n}\n\nexport interface AgentRunnerConnectRequest {\n threadId: string;\n headers?: Record<string, string>;\n joinCode?: string;\n}\n\nexport interface AgentRunnerIsRunningRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerStopRequest {\n threadId: string;\n}\n\nexport abstract class AgentRunner {\n abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;\n abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;\n abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;\n abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;\n}\n"],"mappings":";;;AA8BA,IAAsB,cAAtB,MAAkC"}
@@ -0,0 +1,32 @@
1
+
2
+ import { Observable } from "rxjs";
3
+ import { AbstractAgent, BaseEvent, Message, RunAgentInput } from "@ag-ui/client";
4
+
5
+ //#region src/v2/runtime/runner/agent-runner.d.ts
6
+ interface AgentRunnerRunRequest {
7
+ threadId: string;
8
+ agent: AbstractAgent;
9
+ input: RunAgentInput;
10
+ joinCode?: string;
11
+ persistedInputMessages?: Message[];
12
+ }
13
+ interface AgentRunnerConnectRequest {
14
+ threadId: string;
15
+ headers?: Record<string, string>;
16
+ joinCode?: string;
17
+ }
18
+ interface AgentRunnerIsRunningRequest {
19
+ threadId: string;
20
+ }
21
+ interface AgentRunnerStopRequest {
22
+ threadId: string;
23
+ }
24
+ declare abstract class AgentRunner {
25
+ abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;
26
+ abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;
27
+ abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;
28
+ abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
29
+ }
30
+ //#endregion
31
+ export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest };
32
+ //# sourceMappingURL=agent-runner.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.d.cts","names":[],"sources":["../../../../src/v2/runtime/runner/agent-runner.ts"],"mappings":";;;;;UAQiB,qBAAA;EACf,QAAA;EACA,KAAA,EAAO,aAAA;EACP,KAAA,EAAO,aAAA;EACP,QAAA;EACA,sBAAA,GAAyB,OAAA;AAAA;AAAA,UAGV,yBAAA;EACf,QAAA;EACA,OAAA,GAAU,MAAA;EACV,QAAA;AAAA;AAAA,UAGe,2BAAA;EACf,QAAA;AAAA;AAAA,UAGe,sBAAA;EACf,QAAA;AAAA;AAAA,uBAGoB,WAAA;EAAA,SACX,GAAA,CAAI,OAAA,EAAS,qBAAA,GAAwB,UAAA,CAAW,SAAA;EAAA,SAChD,OAAA,CAAQ,OAAA,EAAS,yBAAA,GAA4B,UAAA,CAAW,SAAA;EAAA,SACxD,SAAA,CAAU,OAAA,EAAS,2BAAA,GAA8B,OAAA;EAAA,SACjD,IAAA,CAAK,OAAA,EAAS,sBAAA,GAAyB,OAAA;AAAA"}
@@ -0,0 +1,32 @@
1
+ import "reflect-metadata";
2
+ import { Observable } from "rxjs";
3
+ import { AbstractAgent, BaseEvent, Message, RunAgentInput } from "@ag-ui/client";
4
+
5
+ //#region src/v2/runtime/runner/agent-runner.d.ts
6
+ interface AgentRunnerRunRequest {
7
+ threadId: string;
8
+ agent: AbstractAgent;
9
+ input: RunAgentInput;
10
+ joinCode?: string;
11
+ persistedInputMessages?: Message[];
12
+ }
13
+ interface AgentRunnerConnectRequest {
14
+ threadId: string;
15
+ headers?: Record<string, string>;
16
+ joinCode?: string;
17
+ }
18
+ interface AgentRunnerIsRunningRequest {
19
+ threadId: string;
20
+ }
21
+ interface AgentRunnerStopRequest {
22
+ threadId: string;
23
+ }
24
+ declare abstract class AgentRunner {
25
+ abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;
26
+ abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;
27
+ abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;
28
+ abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
29
+ }
30
+ //#endregion
31
+ export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest };
32
+ //# sourceMappingURL=agent-runner.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.d.mts","names":[],"sources":["../../../../src/v2/runtime/runner/agent-runner.ts"],"mappings":";;;;;UAQiB,qBAAA;EACf,QAAA;EACA,KAAA,EAAO,aAAA;EACP,KAAA,EAAO,aAAA;EACP,QAAA;EACA,sBAAA,GAAyB,OAAA;AAAA;AAAA,UAGV,yBAAA;EACf,QAAA;EACA,OAAA,GAAU,MAAA;EACV,QAAA;AAAA;AAAA,UAGe,2BAAA;EACf,QAAA;AAAA;AAAA,UAGe,sBAAA;EACf,QAAA;AAAA;AAAA,uBAGoB,WAAA;EAAA,SACX,GAAA,CAAI,OAAA,EAAS,qBAAA,GAAwB,UAAA,CAAW,SAAA;EAAA,SAChD,OAAA,CAAQ,OAAA,EAAS,yBAAA,GAA4B,UAAA,CAAW,SAAA;EAAA,SACxD,SAAA,CAAU,OAAA,EAAS,2BAAA,GAA8B,OAAA;EAAA,SACjD,IAAA,CAAK,OAAA,EAAS,sBAAA,GAAyB,OAAA;AAAA"}
@@ -0,0 +1,7 @@
1
+ import "reflect-metadata";
2
+ //#region src/v2/runtime/runner/agent-runner.ts
3
+ var AgentRunner = class {};
4
+
5
+ //#endregion
6
+ export { AgentRunner };
7
+ //# sourceMappingURL=agent-runner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.mjs","names":[],"sources":["../../../../src/v2/runtime/runner/agent-runner.ts"],"sourcesContent":["import {\n AbstractAgent,\n BaseEvent,\n Message,\n RunAgentInput,\n} from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\n\nexport interface AgentRunnerRunRequest {\n threadId: string;\n agent: AbstractAgent;\n input: RunAgentInput;\n joinCode?: string;\n persistedInputMessages?: Message[];\n}\n\nexport interface AgentRunnerConnectRequest {\n threadId: string;\n headers?: Record<string, string>;\n joinCode?: string;\n}\n\nexport interface AgentRunnerIsRunningRequest {\n threadId: string;\n}\n\nexport interface AgentRunnerStopRequest {\n threadId: string;\n}\n\nexport abstract class AgentRunner {\n abstract run(request: AgentRunnerRunRequest): Observable<BaseEvent>;\n abstract connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;\n abstract isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;\n abstract stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;\n}\n"],"mappings":";;AA8BA,IAAsB,cAAtB,MAAkC"}
@@ -0,0 +1,223 @@
1
+ require("reflect-metadata");
2
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
3
+ const require_agent_runner = require('./agent-runner.cjs');
4
+ let _copilotkit_shared = require("@copilotkit/shared");
5
+ let rxjs = require("rxjs");
6
+ let _ag_ui_client = require("@ag-ui/client");
7
+
8
+ //#region src/v2/runtime/runner/in-memory.ts
9
+ var InMemoryEventStore = class {
10
+ constructor(threadId) {
11
+ this.threadId = threadId;
12
+ this.subject = null;
13
+ this.isRunning = false;
14
+ this.currentRunId = null;
15
+ this.historicRuns = [];
16
+ this.agent = null;
17
+ this.runSubject = null;
18
+ this.stopRequested = false;
19
+ this.currentEvents = null;
20
+ }
21
+ };
22
+ const GLOBAL_STORE_KEY = Symbol.for("@copilotkit/runtime/in-memory-store");
23
+ function getGlobalStore() {
24
+ const globalAny = globalThis;
25
+ if (!globalAny[GLOBAL_STORE_KEY]) globalAny[GLOBAL_STORE_KEY] = {
26
+ stores: /* @__PURE__ */ new Map(),
27
+ historicRunsBackup: /* @__PURE__ */ new Map()
28
+ };
29
+ const data = globalAny[GLOBAL_STORE_KEY];
30
+ if (data.stores.size === 0 && data.historicRunsBackup.size > 0) for (const [threadId, historicRuns] of data.historicRunsBackup) {
31
+ const store = new InMemoryEventStore(threadId);
32
+ store.historicRuns = historicRuns;
33
+ data.stores.set(threadId, store);
34
+ }
35
+ return data.stores;
36
+ }
37
+ function backupHistoricRuns(threadId, historicRuns) {
38
+ const globalAny = globalThis;
39
+ if (globalAny[GLOBAL_STORE_KEY]) globalAny[GLOBAL_STORE_KEY].historicRunsBackup.set(threadId, historicRuns);
40
+ }
41
+ const GLOBAL_STORE = getGlobalStore();
42
+ var InMemoryAgentRunner = class extends require_agent_runner.AgentRunner {
43
+ run(request) {
44
+ let existingStore = GLOBAL_STORE.get(request.threadId);
45
+ if (!existingStore) {
46
+ existingStore = new InMemoryEventStore(request.threadId);
47
+ GLOBAL_STORE.set(request.threadId, existingStore);
48
+ }
49
+ const store = existingStore;
50
+ if (store.isRunning) throw new Error("Thread already running");
51
+ store.isRunning = true;
52
+ store.currentRunId = request.input.runId;
53
+ store.agent = request.agent;
54
+ store.stopRequested = false;
55
+ const seenMessageIds = /* @__PURE__ */ new Set();
56
+ const currentRunEvents = [];
57
+ store.currentEvents = currentRunEvents;
58
+ const historicMessageIds = /* @__PURE__ */ new Set();
59
+ for (const run of store.historicRuns) for (const event of run.events) {
60
+ if ("messageId" in event && typeof event.messageId === "string") historicMessageIds.add(event.messageId);
61
+ if (event.type === _ag_ui_client.EventType.RUN_STARTED) {
62
+ const messages = event.input?.messages ?? [];
63
+ for (const message of messages) historicMessageIds.add(message.id);
64
+ }
65
+ }
66
+ const nextSubject = new rxjs.ReplaySubject(Infinity);
67
+ const prevSubject = store.subject;
68
+ store.subject = nextSubject;
69
+ const runSubject = new rxjs.ReplaySubject(Infinity);
70
+ store.runSubject = runSubject;
71
+ const runAgent = async () => {
72
+ const parentRunId = store.historicRuns[store.historicRuns.length - 1]?.runId ?? null;
73
+ try {
74
+ await request.agent.runAgent(request.input, {
75
+ onEvent: ({ event }) => {
76
+ let processedEvent = event;
77
+ if (event.type === _ag_ui_client.EventType.RUN_STARTED) {
78
+ const runStartedEvent = event;
79
+ if (!runStartedEvent.input) {
80
+ const sanitizedMessages = request.input.messages ? request.input.messages.filter((message) => !historicMessageIds.has(message.id)) : void 0;
81
+ const updatedInput = {
82
+ ...request.input,
83
+ ...sanitizedMessages !== void 0 ? { messages: sanitizedMessages } : {}
84
+ };
85
+ processedEvent = {
86
+ ...runStartedEvent,
87
+ input: updatedInput
88
+ };
89
+ }
90
+ }
91
+ runSubject.next(processedEvent);
92
+ nextSubject.next(processedEvent);
93
+ currentRunEvents.push(processedEvent);
94
+ },
95
+ onNewMessage: ({ message }) => {
96
+ if (!seenMessageIds.has(message.id)) seenMessageIds.add(message.id);
97
+ },
98
+ onRunStartedEvent: () => {
99
+ if (request.input.messages) {
100
+ for (const message of request.input.messages) if (!seenMessageIds.has(message.id)) seenMessageIds.add(message.id);
101
+ }
102
+ }
103
+ });
104
+ const appendedEvents = (0, _copilotkit_shared.finalizeRunEvents)(currentRunEvents, { stopRequested: store.stopRequested });
105
+ for (const event of appendedEvents) {
106
+ runSubject.next(event);
107
+ nextSubject.next(event);
108
+ }
109
+ if (store.currentRunId) {
110
+ const compactedEvents = (0, _ag_ui_client.compactEvents)(currentRunEvents);
111
+ store.historicRuns.push({
112
+ threadId: request.threadId,
113
+ runId: store.currentRunId,
114
+ parentRunId,
115
+ events: compactedEvents,
116
+ createdAt: Date.now()
117
+ });
118
+ backupHistoricRuns(request.threadId, store.historicRuns);
119
+ }
120
+ store.currentEvents = null;
121
+ store.currentRunId = null;
122
+ store.agent = null;
123
+ store.runSubject = null;
124
+ store.stopRequested = false;
125
+ store.isRunning = false;
126
+ runSubject.complete();
127
+ nextSubject.complete();
128
+ } catch (error) {
129
+ const interruptionMessage = error instanceof Error ? error.message : String(error);
130
+ const appendedEvents = (0, _copilotkit_shared.finalizeRunEvents)(currentRunEvents, {
131
+ stopRequested: store.stopRequested,
132
+ interruptionMessage
133
+ });
134
+ for (const event of appendedEvents) {
135
+ runSubject.next(event);
136
+ nextSubject.next(event);
137
+ }
138
+ if (store.currentRunId && currentRunEvents.length > 0) {
139
+ const compactedEvents = (0, _ag_ui_client.compactEvents)(currentRunEvents);
140
+ store.historicRuns.push({
141
+ threadId: request.threadId,
142
+ runId: store.currentRunId,
143
+ parentRunId,
144
+ events: compactedEvents,
145
+ createdAt: Date.now()
146
+ });
147
+ backupHistoricRuns(request.threadId, store.historicRuns);
148
+ }
149
+ store.currentEvents = null;
150
+ store.currentRunId = null;
151
+ store.agent = null;
152
+ store.runSubject = null;
153
+ store.stopRequested = false;
154
+ store.isRunning = false;
155
+ runSubject.complete();
156
+ nextSubject.complete();
157
+ }
158
+ };
159
+ if (prevSubject) prevSubject.subscribe({
160
+ next: (e) => nextSubject.next(e),
161
+ error: (err) => nextSubject.error(err),
162
+ complete: () => {}
163
+ });
164
+ runAgent();
165
+ return runSubject.asObservable();
166
+ }
167
+ connect(request) {
168
+ const store = GLOBAL_STORE.get(request.threadId);
169
+ const connectionSubject = new rxjs.ReplaySubject(Infinity);
170
+ if (!store) {
171
+ connectionSubject.complete();
172
+ return connectionSubject.asObservable();
173
+ }
174
+ const allHistoricEvents = [];
175
+ for (const run of store.historicRuns) allHistoricEvents.push(...run.events);
176
+ const compactedEvents = (0, _ag_ui_client.compactEvents)(allHistoricEvents);
177
+ const emittedMessageIds = /* @__PURE__ */ new Set();
178
+ for (const event of compactedEvents) {
179
+ connectionSubject.next(event);
180
+ if ("messageId" in event && typeof event.messageId === "string") emittedMessageIds.add(event.messageId);
181
+ }
182
+ if (store.subject && (store.isRunning || store.stopRequested)) store.subject.subscribe({
183
+ next: (event) => {
184
+ if ("messageId" in event && typeof event.messageId === "string" && emittedMessageIds.has(event.messageId)) return;
185
+ connectionSubject.next(event);
186
+ },
187
+ complete: () => connectionSubject.complete(),
188
+ error: (err) => connectionSubject.error(err)
189
+ });
190
+ else connectionSubject.complete();
191
+ return connectionSubject.asObservable();
192
+ }
193
+ isRunning(request) {
194
+ const store = GLOBAL_STORE.get(request.threadId);
195
+ return Promise.resolve(store?.isRunning ?? false);
196
+ }
197
+ stop(request) {
198
+ const store = GLOBAL_STORE.get(request.threadId);
199
+ if (!store || !store.isRunning) return Promise.resolve(false);
200
+ if (store.stopRequested) return Promise.resolve(false);
201
+ store.stopRequested = true;
202
+ store.isRunning = false;
203
+ const agent = store.agent;
204
+ if (!agent) {
205
+ store.stopRequested = false;
206
+ store.isRunning = false;
207
+ return Promise.resolve(false);
208
+ }
209
+ try {
210
+ agent.abortRun();
211
+ return Promise.resolve(true);
212
+ } catch (error) {
213
+ console.error("Failed to abort agent run", error);
214
+ store.stopRequested = false;
215
+ store.isRunning = true;
216
+ return Promise.resolve(false);
217
+ }
218
+ }
219
+ };
220
+
221
+ //#endregion
222
+ exports.InMemoryAgentRunner = InMemoryAgentRunner;
223
+ //# sourceMappingURL=in-memory.cjs.map