@copilotkit/runtime 1.55.0-next.8 → 1.55.0

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 (345) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/agent/index.cjs +101 -12
  3. package/dist/agent/index.cjs.map +1 -1
  4. package/dist/agent/index.d.cts.map +1 -1
  5. package/dist/agent/index.d.mts.map +1 -1
  6. package/dist/agent/index.mjs +102 -13
  7. package/dist/agent/index.mjs.map +1 -1
  8. package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs.map +1 -1
  9. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +4 -841
  10. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -1
  11. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts +4 -841
  12. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -1
  13. package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs.map +1 -1
  14. package/dist/lib/runtime/copilot-runtime.cjs +3 -2
  15. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  16. package/dist/lib/runtime/copilot-runtime.d.cts +1 -1
  17. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  18. package/dist/lib/runtime/copilot-runtime.d.mts +3 -3
  19. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  20. package/dist/lib/runtime/copilot-runtime.mjs +3 -2
  21. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  22. package/dist/package.cjs +70 -47
  23. package/dist/package.mjs +70 -47
  24. package/dist/v2/express.cjs +8 -0
  25. package/dist/v2/express.d.cts +5 -0
  26. package/dist/v2/express.d.mts +5 -0
  27. package/dist/v2/express.mjs +5 -0
  28. package/dist/v2/hono.cjs +9 -0
  29. package/dist/v2/hono.d.cts +5 -0
  30. package/dist/v2/hono.d.mts +5 -0
  31. package/dist/v2/hono.mjs +5 -0
  32. package/dist/v2/index.cjs +8 -3
  33. package/dist/v2/index.d.cts +8 -5
  34. package/dist/v2/index.d.mts +8 -5
  35. package/dist/v2/index.mjs +5 -4
  36. package/dist/v2/node.cjs +8 -0
  37. package/dist/v2/node.d.cts +5 -0
  38. package/dist/v2/node.d.mts +5 -0
  39. package/dist/v2/node.mjs +5 -0
  40. package/dist/v2/runtime/core/fetch-cors.cjs +72 -0
  41. package/dist/v2/runtime/core/fetch-cors.cjs.map +1 -0
  42. package/dist/v2/runtime/core/fetch-cors.d.cts +20 -0
  43. package/dist/v2/runtime/core/fetch-cors.d.cts.map +1 -0
  44. package/dist/v2/runtime/core/fetch-cors.d.mts +20 -0
  45. package/dist/v2/runtime/core/fetch-cors.d.mts.map +1 -0
  46. package/dist/v2/runtime/core/fetch-cors.mjs +70 -0
  47. package/dist/v2/runtime/core/fetch-cors.mjs.map +1 -0
  48. package/dist/v2/runtime/core/fetch-handler.cjs +232 -0
  49. package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -0
  50. package/dist/v2/runtime/core/fetch-handler.d.cts +40 -0
  51. package/dist/v2/runtime/core/fetch-handler.d.cts.map +1 -0
  52. package/dist/v2/runtime/core/fetch-handler.d.mts +40 -0
  53. package/dist/v2/runtime/core/fetch-handler.d.mts.map +1 -0
  54. package/dist/v2/runtime/core/fetch-handler.mjs +231 -0
  55. package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -0
  56. package/dist/v2/runtime/core/fetch-router.cjs +68 -0
  57. package/dist/v2/runtime/core/fetch-router.cjs.map +1 -0
  58. package/dist/v2/runtime/core/fetch-router.mjs +67 -0
  59. package/dist/v2/runtime/core/fetch-router.mjs.map +1 -0
  60. package/dist/v2/runtime/core/hooks.cjs +29 -0
  61. package/dist/v2/runtime/core/hooks.cjs.map +1 -0
  62. package/dist/v2/runtime/core/hooks.d.cts +78 -0
  63. package/dist/v2/runtime/core/hooks.d.cts.map +1 -0
  64. package/dist/v2/runtime/core/hooks.d.mts +78 -0
  65. package/dist/v2/runtime/core/hooks.d.mts.map +1 -0
  66. package/dist/v2/runtime/core/hooks.mjs +25 -0
  67. package/dist/v2/runtime/core/hooks.mjs.map +1 -0
  68. package/dist/v2/runtime/{middleware-sse-parser.cjs → core/middleware-sse-parser.cjs} +2 -2
  69. package/dist/v2/runtime/core/middleware-sse-parser.cjs.map +1 -0
  70. package/dist/v2/runtime/{middleware-sse-parser.d.cts → core/middleware-sse-parser.d.cts} +1 -1
  71. package/dist/v2/runtime/core/middleware-sse-parser.d.cts.map +1 -0
  72. package/dist/v2/runtime/{middleware-sse-parser.d.mts → core/middleware-sse-parser.d.mts} +1 -1
  73. package/dist/v2/runtime/core/middleware-sse-parser.d.mts.map +1 -0
  74. package/dist/v2/runtime/{middleware-sse-parser.mjs → core/middleware-sse-parser.mjs} +1 -1
  75. package/dist/v2/runtime/core/middleware-sse-parser.mjs.map +1 -0
  76. package/dist/v2/runtime/{middleware.cjs → core/middleware.cjs} +2 -2
  77. package/dist/v2/runtime/core/middleware.cjs.map +1 -0
  78. package/dist/v2/runtime/{middleware.d.cts → core/middleware.d.cts} +1 -1
  79. package/dist/v2/runtime/core/middleware.d.cts.map +1 -0
  80. package/dist/v2/runtime/{middleware.d.mts → core/middleware.d.mts} +1 -1
  81. package/dist/v2/runtime/core/middleware.d.mts.map +1 -0
  82. package/dist/v2/runtime/{middleware.mjs → core/middleware.mjs} +1 -1
  83. package/dist/v2/runtime/core/middleware.mjs.map +1 -0
  84. package/dist/v2/runtime/{runtime.cjs → core/runtime.cjs} +35 -10
  85. package/dist/v2/runtime/core/runtime.cjs.map +1 -0
  86. package/dist/v2/runtime/{runtime.d.cts → core/runtime.d.cts} +41 -7
  87. package/dist/v2/runtime/core/runtime.d.cts.map +1 -0
  88. package/dist/v2/runtime/{runtime.d.mts → core/runtime.d.mts} +42 -8
  89. package/dist/v2/runtime/core/runtime.d.mts.map +1 -0
  90. package/dist/v2/runtime/{runtime.mjs → core/runtime.mjs} +36 -11
  91. package/dist/v2/runtime/core/runtime.mjs.map +1 -0
  92. package/dist/v2/runtime/endpoints/express-fetch-bridge.cjs +83 -0
  93. package/dist/v2/runtime/endpoints/express-fetch-bridge.cjs.map +1 -0
  94. package/dist/v2/runtime/endpoints/express-fetch-bridge.mjs +82 -0
  95. package/dist/v2/runtime/endpoints/express-fetch-bridge.mjs.map +1 -0
  96. package/dist/v2/runtime/endpoints/express-single.cjs +35 -181
  97. package/dist/v2/runtime/endpoints/express-single.cjs.map +1 -1
  98. package/dist/v2/runtime/endpoints/express-single.d.cts +35 -2
  99. package/dist/v2/runtime/endpoints/express-single.d.cts.map +1 -1
  100. package/dist/v2/runtime/endpoints/express-single.d.mts +35 -2
  101. package/dist/v2/runtime/endpoints/express-single.d.mts.map +1 -1
  102. package/dist/v2/runtime/endpoints/express-single.mjs +35 -178
  103. package/dist/v2/runtime/endpoints/express-single.mjs.map +1 -1
  104. package/dist/v2/runtime/endpoints/express.cjs +41 -195
  105. package/dist/v2/runtime/endpoints/express.cjs.map +1 -1
  106. package/dist/v2/runtime/endpoints/express.d.cts +26 -4
  107. package/dist/v2/runtime/endpoints/express.d.cts.map +1 -1
  108. package/dist/v2/runtime/endpoints/express.d.mts +26 -4
  109. package/dist/v2/runtime/endpoints/express.d.mts.map +1 -1
  110. package/dist/v2/runtime/endpoints/express.mjs +41 -195
  111. package/dist/v2/runtime/endpoints/express.mjs.map +1 -1
  112. package/dist/v2/runtime/endpoints/hono-single.cjs +11 -123
  113. package/dist/v2/runtime/endpoints/hono-single.cjs.map +1 -1
  114. package/dist/v2/runtime/endpoints/hono-single.d.cts +14 -11
  115. package/dist/v2/runtime/endpoints/hono-single.d.cts.map +1 -1
  116. package/dist/v2/runtime/endpoints/hono-single.d.mts +14 -11
  117. package/dist/v2/runtime/endpoints/hono-single.d.mts.map +1 -1
  118. package/dist/v2/runtime/endpoints/hono-single.mjs +11 -123
  119. package/dist/v2/runtime/endpoints/hono-single.mjs.map +1 -1
  120. package/dist/v2/runtime/endpoints/hono.cjs +23 -237
  121. package/dist/v2/runtime/endpoints/hono.cjs.map +1 -1
  122. package/dist/v2/runtime/endpoints/hono.d.cts +29 -120
  123. package/dist/v2/runtime/endpoints/hono.d.cts.map +1 -1
  124. package/dist/v2/runtime/endpoints/hono.d.mts +29 -120
  125. package/dist/v2/runtime/endpoints/hono.d.mts.map +1 -1
  126. package/dist/v2/runtime/endpoints/hono.mjs +22 -238
  127. package/dist/v2/runtime/endpoints/hono.mjs.map +1 -1
  128. package/dist/v2/runtime/endpoints/index.d.cts +2 -2
  129. package/dist/v2/runtime/endpoints/index.d.mts +2 -2
  130. package/dist/v2/runtime/endpoints/node-fetch-handler.cjs +26 -0
  131. package/dist/v2/runtime/endpoints/node-fetch-handler.cjs.map +1 -0
  132. package/dist/v2/runtime/endpoints/node-fetch-handler.d.cts +12 -0
  133. package/dist/v2/runtime/endpoints/node-fetch-handler.d.cts.map +1 -0
  134. package/dist/v2/runtime/endpoints/node-fetch-handler.d.mts +12 -0
  135. package/dist/v2/runtime/endpoints/node-fetch-handler.d.mts.map +1 -0
  136. package/dist/v2/runtime/endpoints/node-fetch-handler.mjs +24 -0
  137. package/dist/v2/runtime/endpoints/node-fetch-handler.mjs.map +1 -0
  138. package/dist/v2/runtime/endpoints/node.cjs +30 -0
  139. package/dist/v2/runtime/endpoints/node.cjs.map +1 -0
  140. package/dist/v2/runtime/endpoints/node.d.cts +27 -0
  141. package/dist/v2/runtime/endpoints/node.d.cts.map +1 -0
  142. package/dist/v2/runtime/endpoints/node.d.mts +27 -0
  143. package/dist/v2/runtime/endpoints/node.d.mts.map +1 -0
  144. package/dist/v2/runtime/endpoints/node.mjs +30 -0
  145. package/dist/v2/runtime/endpoints/node.mjs.map +1 -0
  146. package/dist/v2/runtime/express.d.cts +3 -0
  147. package/dist/v2/runtime/express.d.mts +3 -0
  148. package/dist/v2/runtime/handlers/get-runtime-info.cjs +2 -1
  149. package/dist/v2/runtime/handlers/get-runtime-info.cjs.map +1 -1
  150. package/dist/v2/runtime/handlers/get-runtime-info.mjs +2 -1
  151. package/dist/v2/runtime/handlers/get-runtime-info.mjs.map +1 -1
  152. package/dist/v2/runtime/handlers/handle-connect.cjs +6 -3
  153. package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -1
  154. package/dist/v2/runtime/handlers/handle-connect.mjs +6 -3
  155. package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -1
  156. package/dist/v2/runtime/handlers/handle-run.cjs +6 -3
  157. package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -1
  158. package/dist/v2/runtime/handlers/handle-run.mjs +6 -3
  159. package/dist/v2/runtime/handlers/handle-run.mjs.map +1 -1
  160. package/dist/v2/runtime/handlers/handle-stop.cjs.map +1 -1
  161. package/dist/v2/runtime/handlers/handle-stop.mjs.map +1 -1
  162. package/dist/v2/runtime/handlers/handle-transcribe.cjs.map +1 -1
  163. package/dist/v2/runtime/handlers/handle-transcribe.mjs.map +1 -1
  164. package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -1
  165. package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -1
  166. package/dist/v2/runtime/handlers/intelligence/run.cjs +22 -1
  167. package/dist/v2/runtime/handlers/intelligence/run.cjs.map +1 -1
  168. package/dist/v2/runtime/handlers/intelligence/run.mjs +22 -1
  169. package/dist/v2/runtime/handlers/intelligence/run.mjs.map +1 -1
  170. package/dist/v2/runtime/handlers/intelligence/thread-names.cjs +1 -1
  171. package/dist/v2/runtime/handlers/intelligence/thread-names.cjs.map +1 -1
  172. package/dist/v2/runtime/handlers/intelligence/thread-names.mjs +1 -1
  173. package/dist/v2/runtime/handlers/intelligence/thread-names.mjs.map +1 -1
  174. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +21 -6
  175. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
  176. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +21 -6
  177. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
  178. package/dist/v2/runtime/handlers/shared/json-response.cjs +4 -1
  179. package/dist/v2/runtime/handlers/shared/json-response.cjs.map +1 -1
  180. package/dist/v2/runtime/handlers/shared/json-response.mjs +4 -1
  181. package/dist/v2/runtime/handlers/shared/json-response.mjs.map +1 -1
  182. package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -1
  183. package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -1
  184. package/dist/v2/runtime/handlers/sse/connect.cjs.map +1 -1
  185. package/dist/v2/runtime/handlers/sse/connect.mjs.map +1 -1
  186. package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -1
  187. package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -1
  188. package/dist/v2/runtime/hono.d.cts +3 -0
  189. package/dist/v2/runtime/hono.d.mts +3 -0
  190. package/dist/v2/runtime/index.d.cts +16 -4
  191. package/dist/v2/runtime/index.d.cts.map +1 -0
  192. package/dist/v2/runtime/index.d.mts +16 -4
  193. package/dist/v2/runtime/index.d.mts.map +1 -0
  194. package/dist/v2/runtime/intelligence-platform/client.cjs +10 -1
  195. package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
  196. package/dist/v2/runtime/intelligence-platform/client.d.cts +22 -0
  197. package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
  198. package/dist/v2/runtime/intelligence-platform/client.d.mts +22 -0
  199. package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
  200. package/dist/v2/runtime/intelligence-platform/client.mjs +10 -1
  201. package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
  202. package/dist/v2/runtime/node.d.cts +3 -0
  203. package/dist/v2/runtime/node.d.mts +3 -0
  204. package/dist/v2/runtime/open-generative-ui-middleware.cjs +282 -0
  205. package/dist/v2/runtime/open-generative-ui-middleware.cjs.map +1 -0
  206. package/dist/v2/runtime/open-generative-ui-middleware.mjs +280 -0
  207. package/dist/v2/runtime/open-generative-ui-middleware.mjs.map +1 -0
  208. package/dist/v2/runtime/runner/intelligence.cjs +4 -4
  209. package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
  210. package/dist/v2/runtime/runner/intelligence.d.cts +6 -2
  211. package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
  212. package/dist/v2/runtime/runner/intelligence.d.mts +6 -2
  213. package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
  214. package/dist/v2/runtime/runner/intelligence.mjs +4 -4
  215. package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
  216. package/dist/v2/runtime/telemetry/telemetry-client.cjs +37 -0
  217. package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
  218. package/dist/v2/runtime/telemetry/telemetry-client.mjs +36 -0
  219. package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
  220. package/dist/v2/runtime/telemetry/utils.cjs +15 -0
  221. package/dist/v2/runtime/telemetry/utils.cjs.map +1 -0
  222. package/dist/v2/runtime/telemetry/utils.mjs +14 -0
  223. package/dist/v2/runtime/telemetry/utils.mjs.map +1 -0
  224. package/package.json +81 -48
  225. package/src/agent/__tests__/multimodal.test.ts +176 -0
  226. package/src/agent/index.ts +130 -19
  227. package/src/lib/runtime/agent-integrations/langgraph/agent.ts +3 -3
  228. package/src/lib/runtime/copilot-runtime.ts +1 -0
  229. package/src/v2/express.ts +1 -0
  230. package/src/v2/hono.ts +1 -0
  231. package/src/v2/node.ts +1 -0
  232. package/src/v2/runtime/__tests__/backward-compat.test.ts +261 -0
  233. package/src/v2/runtime/__tests__/code-review-fixes.test.ts +500 -0
  234. package/src/v2/runtime/__tests__/cors-credentials.test.ts +2 -2
  235. package/src/v2/runtime/__tests__/express-adapter.test.ts +188 -0
  236. package/src/v2/runtime/__tests__/express-body-order.test.ts +1 -1
  237. package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +344 -0
  238. package/src/v2/runtime/__tests__/express-single-sse.test.ts +1 -1
  239. package/src/v2/runtime/__tests__/fetch-cors.test.ts +205 -0
  240. package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +372 -0
  241. package/src/v2/runtime/__tests__/fetch-handler.test.ts +456 -0
  242. package/src/v2/runtime/__tests__/fetch-router.test.ts +132 -0
  243. package/src/v2/runtime/__tests__/get-runtime-info.test.ts +4 -1
  244. package/src/v2/runtime/__tests__/handle-connect.test.ts +15 -13
  245. package/src/v2/runtime/__tests__/handle-run.test.ts +21 -17
  246. package/src/v2/runtime/__tests__/handle-threads.test.ts +1 -1
  247. package/src/v2/runtime/__tests__/handle-transcribe.test.ts +1 -1
  248. package/src/v2/runtime/__tests__/hono-adapter.test.ts +150 -0
  249. package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +457 -0
  250. package/src/v2/runtime/__tests__/hooks.test.ts +557 -0
  251. package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +27 -0
  252. package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +32 -0
  253. package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +33 -0
  254. package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +25 -0
  255. package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +32 -0
  256. package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +15 -0
  257. package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +45 -0
  258. package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +58 -0
  259. package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +39 -0
  260. package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +35 -0
  261. package/src/v2/runtime/__tests__/integration/servers/express-single.ts +36 -0
  262. package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +39 -0
  263. package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +30 -0
  264. package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +37 -0
  265. package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +45 -0
  266. package/src/v2/runtime/__tests__/integration/servers/node-single.ts +46 -0
  267. package/src/v2/runtime/__tests__/integration/servers/types.ts +18 -0
  268. package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +358 -0
  269. package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +363 -0
  270. package/src/v2/runtime/__tests__/middleware-express.test.ts +25 -23
  271. package/src/v2/runtime/__tests__/middleware-single-express.test.ts +25 -23
  272. package/src/v2/runtime/__tests__/middleware-single.test.ts +1 -1
  273. package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +1 -1
  274. package/src/v2/runtime/__tests__/middleware.test.ts +1 -2
  275. package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +157 -0
  276. package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +728 -0
  277. package/src/v2/runtime/__tests__/router-edge-cases.test.ts +217 -0
  278. package/src/v2/runtime/__tests__/routing-express.test.ts +1 -1
  279. package/src/v2/runtime/__tests__/routing-single-express.test.ts +1 -1
  280. package/src/v2/runtime/__tests__/routing-single.test.ts +1 -1
  281. package/src/v2/runtime/__tests__/routing.test.ts +1 -1
  282. package/src/v2/runtime/__tests__/runtime.test.ts +110 -1
  283. package/src/v2/runtime/__tests__/telemetry.test.ts +62 -1
  284. package/src/v2/runtime/core/fetch-cors.ts +136 -0
  285. package/src/v2/runtime/core/fetch-handler.ts +415 -0
  286. package/src/v2/runtime/core/fetch-router.ts +112 -0
  287. package/src/v2/runtime/core/hooks.ts +151 -0
  288. package/src/v2/runtime/{runtime.ts → core/runtime.ts} +79 -10
  289. package/src/v2/runtime/endpoints/express-fetch-bridge.ts +137 -0
  290. package/src/v2/runtime/endpoints/express-single.ts +42 -219
  291. package/src/v2/runtime/endpoints/express.ts +128 -230
  292. package/src/v2/runtime/endpoints/hono-single.ts +19 -171
  293. package/src/v2/runtime/endpoints/hono.ts +45 -270
  294. package/src/v2/runtime/endpoints/node-fetch-handler.ts +48 -0
  295. package/src/v2/runtime/endpoints/node.ts +28 -0
  296. package/src/v2/runtime/handlers/get-runtime-info.ts +3 -2
  297. package/src/v2/runtime/handlers/handle-connect.ts +7 -4
  298. package/src/v2/runtime/handlers/handle-run.ts +7 -4
  299. package/src/v2/runtime/handlers/handle-stop.ts +1 -1
  300. package/src/v2/runtime/handlers/handle-transcribe.ts +1 -1
  301. package/src/v2/runtime/handlers/intelligence/connect.ts +1 -1
  302. package/src/v2/runtime/handlers/intelligence/run.ts +31 -1
  303. package/src/v2/runtime/handlers/intelligence/thread-names.ts +2 -2
  304. package/src/v2/runtime/handlers/intelligence/threads.ts +1 -1
  305. package/src/v2/runtime/handlers/shared/agent-utils.ts +29 -10
  306. package/src/v2/runtime/handlers/shared/json-response.ts +4 -1
  307. package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +1 -1
  308. package/src/v2/runtime/handlers/sse/connect.ts +1 -1
  309. package/src/v2/runtime/handlers/sse/run.ts +1 -1
  310. package/src/v2/runtime/hono.ts +2 -0
  311. package/src/v2/runtime/index.ts +27 -1
  312. package/src/v2/runtime/intelligence-platform/client.ts +50 -1
  313. package/src/v2/runtime/node.ts +6 -0
  314. package/src/v2/runtime/open-generative-ui-middleware.ts +373 -0
  315. package/src/v2/runtime/runner/intelligence.ts +14 -4
  316. package/src/v2/runtime/telemetry/telemetry-client.ts +56 -0
  317. package/src/v2/runtime/telemetry/utils.ts +15 -0
  318. package/tsdown.config.ts +8 -1
  319. package/vitest.config.mjs +2 -5
  320. package/.eslintrc.js +0 -7
  321. package/dist/v2/runtime/endpoints/express-utils.cjs +0 -119
  322. package/dist/v2/runtime/endpoints/express-utils.cjs.map +0 -1
  323. package/dist/v2/runtime/endpoints/express-utils.mjs +0 -117
  324. package/dist/v2/runtime/endpoints/express-utils.mjs.map +0 -1
  325. package/dist/v2/runtime/handlers/intelligence/threads.cjs +0 -159
  326. package/dist/v2/runtime/handlers/intelligence/threads.cjs.map +0 -1
  327. package/dist/v2/runtime/handlers/intelligence/threads.mjs +0 -154
  328. package/dist/v2/runtime/handlers/intelligence/threads.mjs.map +0 -1
  329. package/dist/v2/runtime/middleware-sse-parser.cjs.map +0 -1
  330. package/dist/v2/runtime/middleware-sse-parser.d.cts.map +0 -1
  331. package/dist/v2/runtime/middleware-sse-parser.d.mts.map +0 -1
  332. package/dist/v2/runtime/middleware-sse-parser.mjs.map +0 -1
  333. package/dist/v2/runtime/middleware.cjs.map +0 -1
  334. package/dist/v2/runtime/middleware.d.cts.map +0 -1
  335. package/dist/v2/runtime/middleware.d.mts.map +0 -1
  336. package/dist/v2/runtime/middleware.mjs.map +0 -1
  337. package/dist/v2/runtime/runtime.cjs.map +0 -1
  338. package/dist/v2/runtime/runtime.d.cts.map +0 -1
  339. package/dist/v2/runtime/runtime.d.mts.map +0 -1
  340. package/dist/v2/runtime/runtime.mjs.map +0 -1
  341. package/src/v2/runtime/__tests__/express-abort-signal.test.ts +0 -25
  342. package/src/v2/runtime/endpoints/express-utils.ts +0 -182
  343. package/src/v2/runtime/handler.ts +0 -3
  344. /package/src/v2/runtime/{middleware-sse-parser.ts → core/middleware-sse-parser.ts} +0 -0
  345. /package/src/v2/runtime/{middleware.ts → core/middleware.ts} +0 -0
@@ -0,0 +1,457 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { createCopilotRuntimeHandler } from "../core/fetch-handler";
3
+ import { CopilotRuntime } from "../core/runtime";
4
+ import type { AbstractAgent } from "@ag-ui/client";
5
+ import type { CopilotRuntimeHooks } from "../core/hooks";
6
+
7
+ /* ------------------------------------------------------------------------------------------------
8
+ * Helpers
9
+ * --------------------------------------------------------------------------------------------- */
10
+
11
+ const createMockAgent = () => {
12
+ const agent: unknown = {
13
+ execute: vi.fn().mockResolvedValue({ events: [] }),
14
+ };
15
+ (agent as { clone: () => unknown }).clone = () => createMockAgent();
16
+ return agent as AbstractAgent;
17
+ };
18
+
19
+ const createRuntime = (opts?: Partial<CopilotRuntime>) =>
20
+ new CopilotRuntime({
21
+ agents: { default: createMockAgent() },
22
+ ...opts,
23
+ });
24
+
25
+ const get = (url: string) => new Request(url, { method: "GET" });
26
+
27
+ const post = (url: string, body?: unknown) =>
28
+ new Request(url, {
29
+ method: "POST",
30
+ headers: { "Content-Type": "application/json" },
31
+ body: body ? JSON.stringify(body) : undefined,
32
+ });
33
+
34
+ /* ------------------------------------------------------------------------------------------------
35
+ * onRequest — error edge cases
36
+ * --------------------------------------------------------------------------------------------- */
37
+
38
+ describe("hooks edge cases — onRequest errors", () => {
39
+ it("async onRequest throwing Error triggers onError", async () => {
40
+ const onError = vi
41
+ .fn()
42
+ .mockReturnValue(new Response("handled", { status: 503 }));
43
+ const handler = createCopilotRuntimeHandler({
44
+ runtime: createRuntime(),
45
+ basePath: "/api",
46
+ hooks: {
47
+ onRequest: async () => {
48
+ await Promise.resolve();
49
+ throw new Error("async boom");
50
+ },
51
+ onError,
52
+ },
53
+ });
54
+
55
+ const response = await handler(get("http://localhost/api/info"));
56
+ expect(response.status).toBe(503);
57
+ expect(onError).toHaveBeenCalledWith(
58
+ expect.objectContaining({
59
+ error: expect.objectContaining({ message: "async boom" }),
60
+ }),
61
+ );
62
+ });
63
+
64
+ it("onRequest throwing a string (non-Error) triggers onError", async () => {
65
+ const onError = vi
66
+ .fn()
67
+ .mockReturnValue(new Response("handled", { status: 503 }));
68
+ const handler = createCopilotRuntimeHandler({
69
+ runtime: createRuntime(),
70
+ basePath: "/api",
71
+ hooks: {
72
+ onRequest: () => {
73
+ throw "string error";
74
+ },
75
+ onError,
76
+ },
77
+ });
78
+
79
+ const response = await handler(get("http://localhost/api/info"));
80
+ expect(response.status).toBe(503);
81
+ expect(onError).toHaveBeenCalledWith(
82
+ expect.objectContaining({ error: "string error" }),
83
+ );
84
+ });
85
+
86
+ it("onRequest returning non-Request value is ignored (uses original)", async () => {
87
+ const handler = createCopilotRuntimeHandler({
88
+ runtime: createRuntime(),
89
+ basePath: "/api",
90
+ hooks: {
91
+ onRequest: () => {
92
+ return "not a request" as unknown as Request;
93
+ },
94
+ },
95
+ });
96
+
97
+ // Should succeed because runOnRequest falls back to original request
98
+ const response = await handler(get("http://localhost/api/info"));
99
+ expect(response.status).toBe(200);
100
+ });
101
+ });
102
+
103
+ /* ------------------------------------------------------------------------------------------------
104
+ * onBeforeHandler — error edge cases
105
+ * --------------------------------------------------------------------------------------------- */
106
+
107
+ describe("hooks edge cases — onBeforeHandler errors", () => {
108
+ it("async onBeforeHandler throwing Error triggers onError with route info", async () => {
109
+ const onError = vi
110
+ .fn()
111
+ .mockReturnValue(new Response("handled", { status: 503 }));
112
+ const handler = createCopilotRuntimeHandler({
113
+ runtime: createRuntime(),
114
+ basePath: "/api",
115
+ hooks: {
116
+ onBeforeHandler: async () => {
117
+ throw new Error("pre-handler async error");
118
+ },
119
+ onError,
120
+ },
121
+ });
122
+
123
+ const response = await handler(get("http://localhost/api/info"));
124
+ expect(response.status).toBe(503);
125
+ expect(onError).toHaveBeenCalledWith(
126
+ expect.objectContaining({
127
+ error: expect.objectContaining({ message: "pre-handler async error" }),
128
+ route: expect.objectContaining({ method: "info" }),
129
+ }),
130
+ );
131
+ });
132
+
133
+ it("onBeforeHandler returning non-Request value is ignored", async () => {
134
+ const handler = createCopilotRuntimeHandler({
135
+ runtime: createRuntime(),
136
+ basePath: "/api",
137
+ hooks: {
138
+ onBeforeHandler: () => {
139
+ return 42 as unknown as Request;
140
+ },
141
+ },
142
+ });
143
+
144
+ const response = await handler(get("http://localhost/api/info"));
145
+ expect(response.status).toBe(200);
146
+ });
147
+
148
+ it("is NOT called when 405 (wrong HTTP method)", async () => {
149
+ const onBeforeHandler = vi.fn();
150
+ const handler = createCopilotRuntimeHandler({
151
+ runtime: createRuntime(),
152
+ basePath: "/api",
153
+ hooks: { onBeforeHandler },
154
+ });
155
+
156
+ const response = await handler(post("http://localhost/api/info"));
157
+ expect(response.status).toBe(405);
158
+ expect(onBeforeHandler).not.toHaveBeenCalled();
159
+ });
160
+ });
161
+
162
+ /* ------------------------------------------------------------------------------------------------
163
+ * onResponse — edge cases
164
+ * --------------------------------------------------------------------------------------------- */
165
+
166
+ describe("hooks edge cases — onResponse", () => {
167
+ it("onResponse returning non-Response value is ignored (uses original)", async () => {
168
+ const handler = createCopilotRuntimeHandler({
169
+ runtime: createRuntime(),
170
+ basePath: "/api",
171
+ hooks: {
172
+ onResponse: () => {
173
+ return "not a response" as unknown as Response;
174
+ },
175
+ },
176
+ });
177
+
178
+ const response = await handler(get("http://localhost/api/info"));
179
+ expect(response.status).toBe(200);
180
+ const body = await response.json();
181
+ expect(body).toHaveProperty("version");
182
+ });
183
+
184
+ it("onResponse is called for thrown Response (short-circuit)", async () => {
185
+ const onResponse = vi.fn().mockImplementation(({ response }) => {
186
+ // Add a marker header to prove onResponse ran
187
+ const headers = new Headers(response.headers);
188
+ headers.set("x-intercepted", "true");
189
+ return new Response(response.body, { status: response.status, headers });
190
+ });
191
+
192
+ const handler = createCopilotRuntimeHandler({
193
+ runtime: createRuntime(),
194
+ basePath: "/api",
195
+ hooks: {
196
+ onRequest: () => {
197
+ throw new Response("Forbidden", { status: 403 });
198
+ },
199
+ onResponse,
200
+ },
201
+ });
202
+
203
+ const response = await handler(get("http://localhost/api/info"));
204
+ expect(response.status).toBe(403);
205
+ expect(onResponse).toHaveBeenCalled();
206
+ expect(response.headers.get("x-intercepted")).toBe("true");
207
+ });
208
+
209
+ it("onResponse is NOT called when onError handles a non-Response error", async () => {
210
+ const onResponse = vi.fn();
211
+ const handler = createCopilotRuntimeHandler({
212
+ runtime: createRuntime(),
213
+ basePath: "/api",
214
+ hooks: {
215
+ onRequest: () => {
216
+ throw new Error("boom");
217
+ },
218
+ onError: () => new Response("handled", { status: 503 }),
219
+ onResponse,
220
+ },
221
+ });
222
+
223
+ const response = await handler(get("http://localhost/api/info"));
224
+ expect(response.status).toBe(503);
225
+ // onResponse is NOT called for error-path responses
226
+ expect(onResponse).not.toHaveBeenCalled();
227
+ });
228
+ });
229
+
230
+ /* ------------------------------------------------------------------------------------------------
231
+ * onError — edge cases
232
+ * --------------------------------------------------------------------------------------------- */
233
+
234
+ describe("hooks edge cases — onError", () => {
235
+ it("onError is NOT called when a Response is thrown", async () => {
236
+ const onError = vi.fn();
237
+ const handler = createCopilotRuntimeHandler({
238
+ runtime: createRuntime(),
239
+ basePath: "/api",
240
+ hooks: {
241
+ onRequest: () => {
242
+ throw new Response("Short circuit", { status: 401 });
243
+ },
244
+ onError,
245
+ },
246
+ });
247
+
248
+ const response = await handler(get("http://localhost/api/info"));
249
+ expect(response.status).toBe(401);
250
+ expect(onError).not.toHaveBeenCalled();
251
+ });
252
+
253
+ it("onError itself throwing returns a 500 fallback instead of rejecting", async () => {
254
+ const handler = createCopilotRuntimeHandler({
255
+ runtime: createRuntime(),
256
+ basePath: "/api",
257
+ hooks: {
258
+ onRequest: () => {
259
+ throw new Error("original error");
260
+ },
261
+ onError: () => {
262
+ throw new Error("error in error handler");
263
+ },
264
+ },
265
+ });
266
+
267
+ // When onError throws, the handler catches it and returns a 500 response
268
+ // instead of letting the promise reject (which would crash the server).
269
+ const response = await handler(get("http://localhost/api/info"));
270
+ expect(response.status).toBe(500);
271
+ const body = await response.json();
272
+ expect(body.error).toBe("internal_error");
273
+ });
274
+
275
+ it("onError receives route info when error happens after routing", async () => {
276
+ const onError = vi
277
+ .fn()
278
+ .mockReturnValue(new Response("handled", { status: 503 }));
279
+ const handler = createCopilotRuntimeHandler({
280
+ runtime: createRuntime(),
281
+ basePath: "/api",
282
+ hooks: {
283
+ onBeforeHandler: ({ route }) => {
284
+ if (route.method === "agent/run") {
285
+ throw new Error("post-routing failure");
286
+ }
287
+ },
288
+ onError,
289
+ },
290
+ });
291
+
292
+ const response = await handler(
293
+ post("http://localhost/api/agent/default/run", {
294
+ threadId: "t1",
295
+ runId: "r1",
296
+ }),
297
+ );
298
+ expect(response.status).toBe(503);
299
+ expect(onError).toHaveBeenCalledWith(
300
+ expect.objectContaining({
301
+ route: expect.objectContaining({
302
+ method: "agent/run",
303
+ agentId: "default",
304
+ }),
305
+ }),
306
+ );
307
+ });
308
+
309
+ it("onError route is undefined when error happens before routing", async () => {
310
+ const onError = vi
311
+ .fn()
312
+ .mockReturnValue(new Response("handled", { status: 503 }));
313
+ const handler = createCopilotRuntimeHandler({
314
+ runtime: createRuntime(),
315
+ basePath: "/api",
316
+ hooks: {
317
+ onRequest: () => {
318
+ throw new Error("pre-routing");
319
+ },
320
+ onError,
321
+ },
322
+ });
323
+
324
+ await handler(get("http://localhost/api/info"));
325
+ expect(onError).toHaveBeenCalledWith(
326
+ expect.objectContaining({
327
+ route: undefined,
328
+ }),
329
+ );
330
+ });
331
+ });
332
+
333
+ /* ------------------------------------------------------------------------------------------------
334
+ * Full pipeline — combined hook scenarios
335
+ * --------------------------------------------------------------------------------------------- */
336
+
337
+ describe("hooks edge cases — full pipeline", () => {
338
+ it("all hooks fire in order on a successful request", async () => {
339
+ const order: string[] = [];
340
+
341
+ const hooks: CopilotRuntimeHooks = {
342
+ onRequest: () => {
343
+ order.push("onRequest");
344
+ },
345
+ onBeforeHandler: () => {
346
+ order.push("onBeforeHandler");
347
+ },
348
+ onResponse: () => {
349
+ order.push("onResponse");
350
+ },
351
+ };
352
+
353
+ const handler = createCopilotRuntimeHandler({
354
+ runtime: createRuntime(),
355
+ basePath: "/api",
356
+ hooks,
357
+ });
358
+
359
+ await handler(get("http://localhost/api/info"));
360
+
361
+ expect(order).toEqual(["onRequest", "onBeforeHandler", "onResponse"]);
362
+ });
363
+
364
+ it("onRequest can modify request seen by onBeforeHandler", async () => {
365
+ let headerInBeforeHandler: string | null = null;
366
+
367
+ const handler = createCopilotRuntimeHandler({
368
+ runtime: createRuntime(),
369
+ basePath: "/api",
370
+ hooks: {
371
+ onRequest: ({ request }) => {
372
+ const headers = new Headers(request.headers);
373
+ headers.set("x-injected", "from-onRequest");
374
+ return new Request(request, { headers });
375
+ },
376
+ onBeforeHandler: ({ request }) => {
377
+ headerInBeforeHandler = request.headers.get("x-injected");
378
+ },
379
+ },
380
+ });
381
+
382
+ await handler(get("http://localhost/api/info"));
383
+ expect(headerInBeforeHandler).toBe("from-onRequest");
384
+ });
385
+
386
+ it("onResponse can read and modify response body", async () => {
387
+ const handler = createCopilotRuntimeHandler({
388
+ runtime: createRuntime(),
389
+ basePath: "/api",
390
+ hooks: {
391
+ onResponse: async ({ response }) => {
392
+ const body = await response.json();
393
+ return new Response(JSON.stringify({ ...body, injected: true }), {
394
+ status: response.status,
395
+ headers: { "Content-Type": "application/json" },
396
+ });
397
+ },
398
+ },
399
+ });
400
+
401
+ const response = await handler(get("http://localhost/api/info"));
402
+ expect(response.status).toBe(200);
403
+ const body = await response.json();
404
+ expect(body).toHaveProperty("version");
405
+ expect(body.injected).toBe(true);
406
+ });
407
+
408
+ it("hooks work correctly in single-route mode", async () => {
409
+ const onRequest = vi.fn();
410
+ const onBeforeHandler = vi.fn();
411
+ const onResponse = vi.fn();
412
+
413
+ const handler = createCopilotRuntimeHandler({
414
+ runtime: createRuntime(),
415
+ basePath: "/api",
416
+ mode: "single-route",
417
+ hooks: { onRequest, onBeforeHandler, onResponse },
418
+ });
419
+
420
+ await handler(post("http://localhost/api", { method: "info" }));
421
+
422
+ expect(onRequest).toHaveBeenCalled();
423
+ expect(onBeforeHandler).toHaveBeenCalledWith(
424
+ expect.objectContaining({
425
+ route: expect.objectContaining({ method: "info" }),
426
+ }),
427
+ );
428
+ expect(onResponse).toHaveBeenCalled();
429
+ });
430
+
431
+ it("onBeforeHandler receives correct agentId in single-route mode", async () => {
432
+ const onBeforeHandler = vi.fn();
433
+ const handler = createCopilotRuntimeHandler({
434
+ runtime: createRuntime(),
435
+ basePath: "/api",
436
+ mode: "single-route",
437
+ hooks: { onBeforeHandler },
438
+ });
439
+
440
+ await handler(
441
+ post("http://localhost/api", {
442
+ method: "agent/run",
443
+ params: { agentId: "default" },
444
+ body: { threadId: "t1", runId: "r1" },
445
+ }),
446
+ );
447
+
448
+ expect(onBeforeHandler).toHaveBeenCalledWith(
449
+ expect.objectContaining({
450
+ route: expect.objectContaining({
451
+ method: "agent/run",
452
+ agentId: "default",
453
+ }),
454
+ }),
455
+ );
456
+ });
457
+ });