@copilotkit/runtime 1.55.0-next.9 → 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 +24 -2
  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 +1 -1
  271. package/src/v2/runtime/__tests__/middleware-single-express.test.ts +1 -1
  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
@@ -1,15 +1,48 @@
1
1
  import "reflect-metadata";
2
- import { CopilotRuntimeLike } from "../runtime.mjs";
2
+ import { CopilotRuntimeLike } from "../core/runtime.mjs";
3
+ import { CopilotRuntimeHooks } from "../core/hooks.mjs";
3
4
  import { Router } from "express";
4
5
 
5
6
  //#region src/v2/runtime/endpoints/express-single.d.ts
6
7
  interface CopilotSingleRouteExpressParams {
7
8
  runtime: CopilotRuntimeLike;
8
9
  basePath: string;
10
+ /**
11
+ * Lifecycle hooks for request processing.
12
+ */
13
+ hooks?: CopilotRuntimeHooks;
9
14
  }
15
+ /**
16
+ * Creates an Express router that serves the CopilotKit runtime as a single
17
+ * POST endpoint. Clients send a JSON envelope with `{ method, params, body }`
18
+ * to dispatch to the appropriate handler.
19
+ *
20
+ * This is a convenience wrapper around {@link createCopilotExpressHandler}
21
+ * with `mode: "single-route"` and `cors: true`.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import express from "express";
26
+ * import { CopilotRuntime } from "@copilotkit/runtime/v2";
27
+ * import { createCopilotEndpointSingleRouteExpress } from "@copilotkit/runtime/v2/express";
28
+ *
29
+ * const runtime = new CopilotRuntime({
30
+ * agents: { default: new BuiltInAgent({ model: "openai/gpt-4o-mini" }) },
31
+ * });
32
+ *
33
+ * const app = express();
34
+ * app.use(createCopilotEndpointSingleRouteExpress({
35
+ * runtime,
36
+ * basePath: "/api/copilotkit",
37
+ * }));
38
+ * app.listen(4000);
39
+ * ```
40
+ */
41
+ /** @deprecated Use `createCopilotExpressHandler` with `mode: "single-route"` instead. */
10
42
  declare function createCopilotEndpointSingleRouteExpress({
11
43
  runtime,
12
- basePath
44
+ basePath,
45
+ hooks
13
46
  }: CopilotSingleRouteExpressParams): Router;
14
47
  //#endregion
15
48
  export { createCopilotEndpointSingleRouteExpress };
@@ -1 +1 @@
1
- {"version":3,"file":"express-single.d.mts","names":[],"sources":["../../../../src/v2/runtime/endpoints/express-single.ts"],"mappings":";;;;;UA+BU,+BAAA;EACR,OAAA,EAAS,kBAAA;EACT,QAAA;AAAA;AAAA,iBAGc,uCAAA,CAAA;EACd,OAAA;EACA;AAAA,GACC,+BAAA,GAAkC,MAAA"}
1
+ {"version":3,"file":"express-single.d.mts","names":[],"sources":["../../../../src/v2/runtime/endpoints/express-single.ts"],"mappings":";;;;;;UAKU,+BAAA;EACR,OAAA,EAAS,kBAAA;EACT,QAAA;EAFuC;;;EAMvC,KAAA,GAAQ,mBAAA;AAAA;;;;;;AA8BV;;;;;;;;;;;;;;;;;;;;;;iBAAgB,uCAAA,CAAA;EACd,OAAA;EACA,QAAA;EACA;AAAA,GACC,+BAAA,GAAkC,MAAA"}
@@ -1,185 +1,42 @@
1
1
  import "reflect-metadata";
2
- import { handleRunAgent } from "../handlers/handle-run.mjs";
3
- import { handleGetRuntimeInfo } from "../handlers/get-runtime-info.mjs";
4
- import { handleTranscribe } from "../handlers/handle-transcribe.mjs";
5
- import { callAfterRequestMiddleware, callBeforeRequestMiddleware } from "../middleware.mjs";
6
- import { handleConnectAgent } from "../handlers/handle-connect.mjs";
7
- import { handleStopAgent } from "../handlers/handle-stop.mjs";
8
- import { createJsonRequest, expectString, parseMethodCall } from "./single-route-helpers.mjs";
9
- import { createFetchRequestFromExpress, sendFetchResponse } from "./express-utils.mjs";
10
- import { logger } from "@copilotkit/shared";
11
- import express from "express";
12
- import cors from "cors";
2
+ import { createCopilotExpressHandler } from "./express.mjs";
13
3
 
14
4
  //#region src/v2/runtime/endpoints/express-single.ts
15
- function createCopilotEndpointSingleRouteExpress({ runtime, basePath }) {
16
- const router = express.Router();
17
- const routePath = normalizeSingleRoutePath(basePath);
18
- router.use(cors({
19
- origin: "*",
20
- methods: [
21
- "GET",
22
- "HEAD",
23
- "PUT",
24
- "POST",
25
- "DELETE",
26
- "PATCH",
27
- "OPTIONS"
28
- ],
29
- allowedHeaders: ["*"]
30
- }));
31
- router.post(routePath, createSingleRouteHandler(runtime));
32
- router.use((req, res) => {
33
- res.status(404).json({ error: "Not found" });
5
+ /**
6
+ * Creates an Express router that serves the CopilotKit runtime as a single
7
+ * POST endpoint. Clients send a JSON envelope with `{ method, params, body }`
8
+ * to dispatch to the appropriate handler.
9
+ *
10
+ * This is a convenience wrapper around {@link createCopilotExpressHandler}
11
+ * with `mode: "single-route"` and `cors: true`.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import express from "express";
16
+ * import { CopilotRuntime } from "@copilotkit/runtime/v2";
17
+ * import { createCopilotEndpointSingleRouteExpress } from "@copilotkit/runtime/v2/express";
18
+ *
19
+ * const runtime = new CopilotRuntime({
20
+ * agents: { default: new BuiltInAgent({ model: "openai/gpt-4o-mini" }) },
21
+ * });
22
+ *
23
+ * const app = express();
24
+ * app.use(createCopilotEndpointSingleRouteExpress({
25
+ * runtime,
26
+ * basePath: "/api/copilotkit",
27
+ * }));
28
+ * app.listen(4000);
29
+ * ```
30
+ */
31
+ /** @deprecated Use `createCopilotExpressHandler` with `mode: "single-route"` instead. */
32
+ function createCopilotEndpointSingleRouteExpress({ runtime, basePath, hooks }) {
33
+ return createCopilotExpressHandler({
34
+ runtime,
35
+ basePath,
36
+ mode: "single-route",
37
+ cors: true,
38
+ hooks
34
39
  });
35
- return router;
36
- }
37
- function createSingleRouteHandler(runtime) {
38
- return async (req, res, next) => {
39
- const path = req.originalUrl ?? req.path;
40
- let request = createFetchRequestFromExpress(req);
41
- try {
42
- const maybeModifiedRequest = await callBeforeRequestMiddleware({
43
- runtime,
44
- request,
45
- path
46
- });
47
- if (maybeModifiedRequest) request = maybeModifiedRequest;
48
- } catch (error) {
49
- logger.error({
50
- err: error,
51
- url: request.url,
52
- path
53
- }, "Error running before request middleware");
54
- if (error instanceof Response) {
55
- try {
56
- await sendFetchResponse(res, error);
57
- } catch (streamError) {
58
- next(streamError);
59
- }
60
- return;
61
- }
62
- next(error);
63
- return;
64
- }
65
- let methodCall;
66
- try {
67
- methodCall = await parseMethodCall(request);
68
- } catch (error) {
69
- if (error instanceof Response) {
70
- logger.warn({ url: request.url }, "Invalid single-route payload");
71
- try {
72
- await sendFetchResponse(res, error);
73
- } catch (streamError) {
74
- next(streamError);
75
- }
76
- return;
77
- }
78
- logger.warn({
79
- err: error,
80
- url: request.url
81
- }, "Invalid single-route payload");
82
- res.status(400).json({
83
- error: "invalid_request",
84
- message: error instanceof Error ? error.message : "Invalid request payload"
85
- });
86
- return;
87
- }
88
- try {
89
- let response;
90
- switch (methodCall.method) {
91
- case "agent/run": {
92
- const agentId = expectString(methodCall.params, "agentId");
93
- response = await handleRunAgent({
94
- runtime,
95
- request: createJsonRequest(request, methodCall.body),
96
- agentId
97
- });
98
- break;
99
- }
100
- case "agent/connect": {
101
- const agentId = expectString(methodCall.params, "agentId");
102
- response = await handleConnectAgent({
103
- runtime,
104
- request: createJsonRequest(request, methodCall.body),
105
- agentId
106
- });
107
- break;
108
- }
109
- case "agent/stop": {
110
- const agentId = expectString(methodCall.params, "agentId");
111
- const threadId = expectString(methodCall.params, "threadId");
112
- response = await handleStopAgent({
113
- runtime,
114
- request,
115
- agentId,
116
- threadId
117
- });
118
- break;
119
- }
120
- case "info":
121
- response = await handleGetRuntimeInfo({
122
- runtime,
123
- request
124
- });
125
- break;
126
- case "transcribe":
127
- response = await handleTranscribe({
128
- runtime,
129
- request: createJsonRequest(request, methodCall.body)
130
- });
131
- break;
132
- default: return methodCall.method;
133
- }
134
- const responseForMiddleware = response.clone();
135
- await sendFetchResponse(res, response);
136
- callAfterRequestMiddleware({
137
- runtime,
138
- response: responseForMiddleware,
139
- path
140
- }).catch((error) => {
141
- logger.error({
142
- err: error,
143
- url: req.originalUrl ?? req.url,
144
- path
145
- }, "Error running after request middleware");
146
- });
147
- } catch (error) {
148
- if (error instanceof Response) {
149
- const errorResponseForMiddleware = error.clone();
150
- try {
151
- await sendFetchResponse(res, error);
152
- } catch (streamError) {
153
- next(streamError);
154
- return;
155
- }
156
- callAfterRequestMiddleware({
157
- runtime,
158
- response: errorResponseForMiddleware,
159
- path
160
- }).catch((mwError) => {
161
- logger.error({
162
- err: mwError,
163
- url: req.originalUrl ?? req.url,
164
- path
165
- }, "Error running after request middleware");
166
- });
167
- return;
168
- }
169
- logger.error({
170
- err: error,
171
- url: request.url,
172
- path
173
- }, "Error running single-route handler");
174
- next(error);
175
- }
176
- };
177
- }
178
- function normalizeSingleRoutePath(path) {
179
- if (!path) throw new Error("basePath must be provided for Express single-route endpoint");
180
- if (!path.startsWith("/")) return `/${path}`;
181
- if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
182
- return path;
183
40
  }
184
41
 
185
42
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"express-single.mjs","names":[],"sources":["../../../../src/v2/runtime/endpoints/express-single.ts"],"sourcesContent":["import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntimeLike } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkit/shared\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"../middleware\";\nimport {\n createFetchRequestFromExpress,\n sendFetchResponse,\n} from \"./express-utils\";\nimport {\n createJsonRequest,\n expectString,\n MethodCall,\n parseMethodCall,\n} from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntimeLike;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(\n cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }),\n );\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntimeLike) {\n return async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn(\n { err: error, url: request.url },\n \"Invalid single-route payload\",\n );\n res.status(400).json({\n error: \"invalid_request\",\n message:\n error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleTranscribe({\n runtime,\n request: handlerRequest,\n });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n const responseForMiddleware = response.clone();\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({\n runtime,\n response: responseForMiddleware,\n path,\n }).catch((error) => {\n logger.error(\n { err: error, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n } catch (error) {\n if (error instanceof Response) {\n const errorResponseForMiddleware = error.clone();\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({\n runtime,\n response: errorResponseForMiddleware,\n path,\n }).catch((mwError) => {\n logger.error(\n { err: mwError, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n return;\n }\n logger.error(\n { err: error, url: request.url, path },\n \"Error running single-route handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\n \"basePath must be provided for Express single-route endpoint\",\n );\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"express-single.mjs","names":[],"sources":["../../../../src/v2/runtime/endpoints/express-single.ts"],"sourcesContent":["import type { Router } from \"express\";\nimport { createCopilotExpressHandler } from \"./express\";\nimport type { CopilotRuntimeLike } from \"../core/runtime\";\nimport type { CopilotRuntimeHooks } from \"../core/hooks\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntimeLike;\n basePath: string;\n /**\n * Lifecycle hooks for request processing.\n */\n hooks?: CopilotRuntimeHooks;\n}\n\n/**\n * Creates an Express router that serves the CopilotKit runtime as a single\n * POST endpoint. Clients send a JSON envelope with `{ method, params, body }`\n * to dispatch to the appropriate handler.\n *\n * This is a convenience wrapper around {@link createCopilotExpressHandler}\n * with `mode: \"single-route\"` and `cors: true`.\n *\n * @example\n * ```typescript\n * import express from \"express\";\n * import { CopilotRuntime } from \"@copilotkit/runtime/v2\";\n * import { createCopilotEndpointSingleRouteExpress } from \"@copilotkit/runtime/v2/express\";\n *\n * const runtime = new CopilotRuntime({\n * agents: { default: new BuiltInAgent({ model: \"openai/gpt-4o-mini\" }) },\n * });\n *\n * const app = express();\n * app.use(createCopilotEndpointSingleRouteExpress({\n * runtime,\n * basePath: \"/api/copilotkit\",\n * }));\n * app.listen(4000);\n * ```\n */\n/** @deprecated Use `createCopilotExpressHandler` with `mode: \"single-route\"` instead. */\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n hooks,\n}: CopilotSingleRouteExpressParams): Router {\n return createCopilotExpressHandler({\n runtime,\n basePath,\n mode: \"single-route\",\n cors: true,\n hooks,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,wCAAwC,EACtD,SACA,UACA,SAC0C;AAC1C,QAAO,4BAA4B;EACjC;EACA;EACA,MAAM;EACN,MAAM;EACN;EACD,CAAC"}
@@ -1,203 +1,55 @@
1
1
  require("reflect-metadata");
2
2
  const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
3
- const require_telemetry_client = require('../telemetry/telemetry-client.cjs');
4
- const require_handle_run = require('../handlers/handle-run.cjs');
5
- const require_get_runtime_info = require('../handlers/get-runtime-info.cjs');
6
- const require_handle_transcribe = require('../handlers/handle-transcribe.cjs');
7
- const require_middleware = require('../middleware.cjs');
8
- const require_handle_connect = require('../handlers/handle-connect.cjs');
9
- const require_handle_stop = require('../handlers/handle-stop.cjs');
10
- const require_threads = require('../handlers/intelligence/threads.cjs');
11
- const require_express_utils = require('./express-utils.cjs');
12
- let _copilotkit_shared = require("@copilotkit/shared");
3
+ const require_fetch_handler = require('../core/fetch-handler.cjs');
4
+ const require_express_fetch_bridge = require('./express-fetch-bridge.cjs');
13
5
  let express = require("express");
14
6
  express = require_runtime.__toESM(express);
15
7
  let cors = require("cors");
16
8
  cors = require_runtime.__toESM(cors);
17
9
 
18
10
  //#region src/v2/runtime/endpoints/express.ts
19
- function createCopilotEndpointExpress({ runtime, basePath }) {
20
- const router = express.default.Router();
11
+ function createCopilotExpressHandler({ runtime, basePath, mode = "multi-route", cors: corsOption = true, hooks }) {
21
12
  const normalizedBase = normalizeBasePath(basePath);
22
- Promise.resolve(runtime.agents).then((agents) => {
23
- require_telemetry_client.default.capture("oss.runtime.instance_created", {
24
- actionsAmount: 0,
25
- endpointTypes: [],
26
- endpointsAmount: 0,
27
- agentsAmount: Object.keys(agents).length,
28
- "cloud.api_key_provided": false
29
- });
30
- }).catch(() => {});
31
- router.use((0, cors.default)({
32
- origin: "*",
33
- methods: [
34
- "GET",
35
- "HEAD",
36
- "PUT",
37
- "POST",
38
- "DELETE",
39
- "PATCH",
40
- "OPTIONS"
41
- ],
42
- allowedHeaders: ["*"]
43
- }));
44
- router.post(joinPath(normalizedBase, "/agent/:agentId/run"), createRouteHandler(runtime, async ({ request, req }) => {
45
- const agentId = req.params.agentId;
46
- return require_handle_run.handleRunAgent({
47
- runtime,
48
- request,
49
- agentId
50
- });
51
- }));
52
- router.post(joinPath(normalizedBase, "/agent/:agentId/connect"), createRouteHandler(runtime, async ({ request, req }) => {
53
- const agentId = req.params.agentId;
54
- return require_handle_connect.handleConnectAgent({
55
- runtime,
56
- request,
57
- agentId
58
- });
59
- }));
60
- router.post(joinPath(normalizedBase, "/agent/:agentId/stop/:threadId"), createRouteHandler(runtime, async ({ request, req }) => {
61
- const agentId = req.params.agentId;
62
- const threadId = req.params.threadId;
63
- return require_handle_stop.handleStopAgent({
64
- runtime,
65
- request,
66
- agentId,
67
- threadId
68
- });
69
- }));
70
- router.get(joinPath(normalizedBase, "/info"), createRouteHandler(runtime, async ({ request }) => {
71
- return require_get_runtime_info.handleGetRuntimeInfo({
72
- runtime,
73
- request
74
- });
75
- }));
76
- router.post(joinPath(normalizedBase, "/transcribe"), createRouteHandler(runtime, async ({ request }) => {
77
- return require_handle_transcribe.handleTranscribe({
78
- runtime,
79
- request
80
- });
81
- }));
82
- router.get(joinPath(normalizedBase, "/threads"), createRouteHandler(runtime, async ({ request }) => {
83
- return require_threads.handleListThreads({
84
- runtime,
85
- request
86
- });
87
- }));
88
- router.post(joinPath(normalizedBase, "/threads/subscribe"), createRouteHandler(runtime, async ({ request }) => {
89
- return require_threads.handleSubscribeToThreads({
90
- runtime,
91
- request
92
- });
93
- }));
94
- router.patch(joinPath(normalizedBase, "/threads/:threadId"), createRouteHandler(runtime, async ({ request, req }) => {
95
- const threadId = req.params.threadId;
96
- return require_threads.handleUpdateThread({
97
- runtime,
98
- request,
99
- threadId
100
- });
101
- }));
102
- router.post(joinPath(normalizedBase, "/threads/:threadId/archive"), createRouteHandler(runtime, async ({ request, req }) => {
103
- const threadId = req.params.threadId;
104
- return require_threads.handleArchiveThread({
105
- runtime,
106
- request,
107
- threadId
108
- });
109
- }));
110
- router.delete(joinPath(normalizedBase, "/threads/:threadId"), createRouteHandler(runtime, async ({ request, req }) => {
111
- const threadId = req.params.threadId;
112
- return require_threads.handleDeleteThread({
113
- runtime,
114
- request,
115
- threadId
116
- });
117
- }));
118
- router.use(joinPath(normalizedBase, "*"), (req, res) => {
119
- res.status(404).json({ error: "Not found" });
120
- });
121
- return router;
122
- }
123
- function createRouteHandler(runtime, factory) {
124
- return async (req, res, next) => {
125
- const path = req.originalUrl ?? req.path;
126
- let request = require_express_utils.createFetchRequestFromExpress(req);
127
- const warning = (0, _copilotkit_shared.getLicenseWarningHeader)(runtime.licenseChecker);
128
- if (warning) res.setHeader(warning.key, warning.value);
13
+ const nodeHandler = require_express_fetch_bridge.createExpressNodeHandler(require_fetch_handler.createCopilotRuntimeHandler({
14
+ runtime,
15
+ basePath: normalizedBase,
16
+ mode,
17
+ cors: false,
18
+ hooks
19
+ }));
20
+ const expressHandler = async (req, res, next) => {
129
21
  try {
130
- const maybeModifiedRequest = await require_middleware.callBeforeRequestMiddleware({
131
- runtime,
132
- request,
133
- path
134
- });
135
- if (maybeModifiedRequest) request = maybeModifiedRequest;
136
- } catch (error) {
137
- _copilotkit_shared.logger.error({
138
- err: error,
139
- url: request.url,
140
- path
141
- }, "Error running before request middleware");
142
- if (error instanceof Response) {
143
- try {
144
- await require_express_utils.sendFetchResponse(res, error);
145
- } catch (streamError) {
146
- next(streamError);
147
- }
148
- return;
149
- }
150
- next(error);
151
- return;
152
- }
153
- try {
154
- const response = await factory({
155
- request,
156
- req
157
- });
158
- const responseForMiddleware = response.clone();
159
- await require_express_utils.sendFetchResponse(res, response);
160
- require_middleware.callAfterRequestMiddleware({
161
- runtime,
162
- response: responseForMiddleware,
163
- path
164
- }).catch((error) => {
165
- _copilotkit_shared.logger.error({
166
- err: error,
167
- url: req.originalUrl ?? req.url,
168
- path
169
- }, "Error running after request middleware");
170
- });
171
- } catch (error) {
172
- if (error instanceof Response) {
173
- const errorResponseForMiddleware = error.clone();
174
- try {
175
- await require_express_utils.sendFetchResponse(res, error);
176
- } catch (streamError) {
177
- next(streamError);
178
- return;
179
- }
180
- require_middleware.callAfterRequestMiddleware({
181
- runtime,
182
- response: errorResponseForMiddleware,
183
- path
184
- }).catch((mwError) => {
185
- _copilotkit_shared.logger.error({
186
- err: mwError,
187
- url: req.originalUrl ?? req.url,
188
- path
189
- }, "Error running after request middleware");
190
- });
191
- return;
192
- }
193
- _copilotkit_shared.logger.error({
194
- err: error,
195
- url: request.url,
196
- path
197
- }, "Error running request handler");
198
- next(error);
22
+ await nodeHandler(req, res);
23
+ } catch (err) {
24
+ next(err);
199
25
  }
200
26
  };
27
+ const router = express.default.Router();
28
+ if (corsOption) {
29
+ const corsConfig = corsOption === true ? {
30
+ origin: "*",
31
+ methods: [
32
+ "GET",
33
+ "HEAD",
34
+ "PUT",
35
+ "POST",
36
+ "DELETE",
37
+ "PATCH",
38
+ "OPTIONS"
39
+ ],
40
+ allowedHeaders: ["*"]
41
+ } : corsOption;
42
+ router.use((0, cors.default)(corsConfig));
43
+ }
44
+ if (mode === "single-route") {
45
+ router.post(normalizedBase, expressHandler);
46
+ router.options(normalizedBase, expressHandler);
47
+ } else if (normalizedBase === "/") router.all("*", expressHandler);
48
+ else {
49
+ router.all(`${normalizedBase}/*`, expressHandler);
50
+ router.all(normalizedBase, expressHandler);
51
+ }
52
+ return router;
201
53
  }
202
54
  function normalizeBasePath(path) {
203
55
  if (!path) throw new Error("basePath must be provided for Express endpoint");
@@ -205,13 +57,7 @@ function normalizeBasePath(path) {
205
57
  if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
206
58
  return path;
207
59
  }
208
- function joinPath(basePath, suffix) {
209
- if (basePath === "/") return suffix.startsWith("/") ? suffix : `/${suffix}`;
210
- if (!suffix) return basePath;
211
- if (suffix === "*") return `${basePath}/*`;
212
- return `${basePath}${suffix.startsWith("/") ? suffix : `/${suffix}`}`;
213
- }
214
60
 
215
61
  //#endregion
216
- exports.createCopilotEndpointExpress = createCopilotEndpointExpress;
62
+ exports.createCopilotExpressHandler = createCopilotExpressHandler;
217
63
  //# sourceMappingURL=express.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.cjs","names":["handleRunAgent","handleConnectAgent","handleStopAgent","handleGetRuntimeInfo","handleTranscribe","handleListThreads","handleSubscribeToThreads","handleUpdateThread","handleArchiveThread","handleDeleteThread","createFetchRequestFromExpress","callBeforeRequestMiddleware","sendFetchResponse"],"sources":["../../../../src/v2/runtime/endpoints/express.ts"],"sourcesContent":["import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntimeLike } from \"../runtime\";\nimport { telemetry } from \"../telemetry\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport {\n handleListThreads,\n handleSubscribeToThreads,\n handleUpdateThread,\n handleArchiveThread,\n handleDeleteThread,\n} from \"../handlers/handle-threads\";\nimport { logger, getLicenseWarningHeader } from \"@copilotkit/shared\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"../middleware\";\nimport {\n createFetchRequestFromExpress,\n sendFetchResponse,\n} from \"./express-utils\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntimeLike;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({\n runtime,\n basePath,\n}: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(basePath);\n\n // Fire instance_created telemetry - resolve agents if needed\n Promise.resolve(runtime.agents)\n .then((agents) => {\n telemetry.capture(\"oss.runtime.instance_created\", {\n actionsAmount: 0,\n endpointTypes: [],\n endpointsAmount: 0,\n agentsAmount: Object.keys(agents).length,\n \"cloud.api_key_provided\": false,\n });\n })\n .catch(() => {\n // Silently fail - telemetry should not break the application\n });\n\n router.use(\n cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/run\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/connect\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }),\n );\n\n router.get(\n joinPath(normalizedBase, \"/info\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/transcribe\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }),\n );\n\n router.get(\n joinPath(normalizedBase, \"/threads\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleListThreads({ runtime, request });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/threads/subscribe\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleSubscribeToThreads({ runtime, request });\n }),\n );\n\n router.patch(\n joinPath(normalizedBase, \"/threads/:threadId\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const threadId = req.params.threadId as string;\n return handleUpdateThread({ runtime, request, threadId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/threads/:threadId/archive\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const threadId = req.params.threadId as string;\n return handleArchiveThread({ runtime, request, threadId });\n }),\n );\n\n router.delete(\n joinPath(normalizedBase, \"/threads/:threadId\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const threadId = req.params.threadId as string;\n return handleDeleteThread({ runtime, request, threadId });\n }),\n );\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(\n runtime: CopilotRuntimeLike,\n factory: RouteHandlerFactory,\n) {\n return async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n const warning = getLicenseWarningHeader(runtime.licenseChecker);\n if (warning) res.setHeader(warning.key, warning.value);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n try {\n const response = await factory({ request, req });\n const responseForMiddleware = response.clone();\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({\n runtime,\n response: responseForMiddleware,\n path,\n }).catch((error) => {\n logger.error(\n { err: error, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n } catch (error) {\n if (error instanceof Response) {\n const errorResponseForMiddleware = error.clone();\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({\n runtime,\n response: errorResponseForMiddleware,\n path,\n }).catch((mwError) => {\n logger.error(\n { err: mwError, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n return;\n }\n logger.error(\n { err: error, url: request.url, path },\n \"Error running request handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"express.cjs","names":["createExpressNodeHandler","createCopilotRuntimeHandler"],"sources":["../../../../src/v2/runtime/endpoints/express.ts"],"sourcesContent":["import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\nimport type { CorsOptions } from \"cors\";\nimport type { CopilotRuntimeLike } from \"../core/runtime\";\nimport { createCopilotRuntimeHandler } from \"../core/fetch-handler\";\nimport { createExpressNodeHandler } from \"./express-fetch-bridge\";\nimport type { CopilotRuntimeHooks } from \"../core/hooks\";\n\nexport interface CopilotExpressEndpointParams {\n runtime: CopilotRuntimeLike;\n basePath: string;\n\n /**\n * Endpoint mode.\n * - `\"multi-route\"` (default): separate routes for each operation\n * - `\"single-route\"`: single POST endpoint with JSON envelope dispatch\n */\n mode?: \"multi-route\" | \"single-route\";\n\n /**\n * CORS configuration for the Express router.\n * - `true` (default): permissive CORS (`origin: \"*\"`, all methods, all headers).\n * - `false`: no CORS middleware is applied — handle it yourself.\n * - object: passed directly to the Express `cors()` middleware.\n */\n cors?: boolean | CorsOptions;\n\n /**\n * Lifecycle hooks for request processing.\n */\n hooks?: CopilotRuntimeHooks;\n}\n\n/**\n * Creates an Express router that serves the CopilotKit runtime.\n *\n * In **multi-route** mode (default) the router exposes:\n * - `GET {basePath}/info` — runtime info\n * - `POST {basePath}/agent/:agentId/run` — start an agent run\n * - `POST {basePath}/agent/:agentId/connect` — connect to an agent run\n * - `POST {basePath}/agent/:agentId/stop/:threadId` — stop an agent run\n * - `POST {basePath}/transcribe` — transcribe audio\n *\n * In **single-route** mode a single `POST {basePath}` endpoint accepts a JSON\n * envelope `{ method, params, body }` and dispatches to the appropriate handler.\n *\n * @example\n * ```typescript\n * import express from \"express\";\n * import { CopilotRuntime } from \"@copilotkit/runtime/v2\";\n * import { createCopilotExpressHandler } from \"@copilotkit/runtime/v2/express\";\n *\n * const runtime = new CopilotRuntime({\n * agents: { default: new BuiltInAgent({ model: \"openai/gpt-4o-mini\" }) },\n * });\n *\n * const app = express();\n * app.use(createCopilotExpressHandler({\n * runtime,\n * basePath: \"/api/copilotkit\",\n * cors: true,\n * }));\n * app.listen(4000);\n * ```\n *\n * @example Single-route mode with lifecycle hooks\n * ```typescript\n * app.use(createCopilotExpressHandler({\n * runtime,\n * basePath: \"/api/copilotkit\",\n * mode: \"single-route\",\n * hooks: {\n * onRequest: ({ request }) => {\n * if (!request.headers.get(\"authorization\")) {\n * throw new Response(\"Unauthorized\", { status: 401 });\n * }\n * },\n * },\n * }));\n * ```\n */\n/** @deprecated Use `createCopilotExpressHandler` instead. */\nexport { createCopilotExpressHandler as createCopilotEndpointExpress };\n\nexport function createCopilotExpressHandler({\n runtime,\n basePath,\n mode = \"multi-route\",\n cors: corsOption = true,\n hooks,\n}: CopilotExpressEndpointParams): Router {\n const normalizedBase = normalizeBasePath(basePath);\n\n const handler = createCopilotRuntimeHandler({\n runtime,\n basePath: normalizedBase,\n mode,\n cors: false, // CORS is handled at the Express middleware layer\n hooks,\n });\n\n const nodeHandler = createExpressNodeHandler(handler);\n\n const expressHandler = async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n try {\n await nodeHandler(req, res);\n } catch (err) {\n next(err);\n }\n };\n\n const router = express.Router();\n\n // CORS middleware\n if (corsOption) {\n const corsConfig: CorsOptions =\n corsOption === true\n ? {\n origin: \"*\",\n methods: [\n \"GET\",\n \"HEAD\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\",\n ],\n allowedHeaders: [\"*\"],\n }\n : corsOption;\n router.use(cors(corsConfig));\n }\n\n // Route mounting\n if (mode === \"single-route\") {\n router.post(normalizedBase, expressHandler);\n router.options(normalizedBase, expressHandler);\n } else if (normalizedBase === \"/\") {\n router.all(\"*\", expressHandler);\n } else {\n router.all(`${normalizedBase}/*`, expressHandler);\n router.all(normalizedBase, expressHandler);\n }\n\n return router;\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"],"mappings":";;;;;;;;;;AA0FA,SAAgB,4BAA4B,EAC1C,SACA,UACA,OAAO,eACP,MAAM,aAAa,MACnB,SACuC;CACvC,MAAM,iBAAiB,kBAAkB,SAAS;CAUlD,MAAM,cAAcA,sDARJC,kDAA4B;EAC1C;EACA,UAAU;EACV;EACA,MAAM;EACN;EACD,CAAC,CAEmD;CAErD,MAAM,iBAAiB,OACrB,KACA,KACA,SACG;AACH,MAAI;AACF,SAAM,YAAY,KAAK,IAAI;WACpB,KAAK;AACZ,QAAK,IAAI;;;CAIb,MAAM,SAAS,gBAAQ,QAAQ;AAG/B,KAAI,YAAY;EACd,MAAM,aACJ,eAAe,OACX;GACE,QAAQ;GACR,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GACD,gBAAgB,CAAC,IAAI;GACtB,GACD;AACN,SAAO,sBAAS,WAAW,CAAC;;AAI9B,KAAI,SAAS,gBAAgB;AAC3B,SAAO,KAAK,gBAAgB,eAAe;AAC3C,SAAO,QAAQ,gBAAgB,eAAe;YACrC,mBAAmB,IAC5B,QAAO,IAAI,KAAK,eAAe;MAC1B;AACL,SAAO,IAAI,GAAG,eAAe,KAAK,eAAe;AACjD,SAAO,IAAI,gBAAgB,eAAe;;AAG5C,QAAO;;AAGT,SAAS,kBAAkB,MAAsB;AAC/C,KAAI,CAAC,KACH,OAAM,IAAI,MAAM,iDAAiD;AAGnE,KAAI,CAAC,KAAK,WAAW,IAAI,CACvB,QAAO,IAAI;AAGb,KAAI,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CACvC,QAAO,KAAK,MAAM,GAAG,GAAG;AAG1B,QAAO"}
@@ -1,16 +1,38 @@
1
1
 
2
- import { CopilotRuntimeLike } from "../runtime.cjs";
2
+ import { CopilotRuntimeLike } from "../core/runtime.cjs";
3
+ import { CopilotRuntimeHooks } from "../core/hooks.cjs";
3
4
  import { Router } from "express";
5
+ import { CorsOptions } from "cors";
4
6
 
5
7
  //#region src/v2/runtime/endpoints/express.d.ts
6
8
  interface CopilotExpressEndpointParams {
7
9
  runtime: CopilotRuntimeLike;
8
10
  basePath: string;
11
+ /**
12
+ * Endpoint mode.
13
+ * - `"multi-route"` (default): separate routes for each operation
14
+ * - `"single-route"`: single POST endpoint with JSON envelope dispatch
15
+ */
16
+ mode?: "multi-route" | "single-route";
17
+ /**
18
+ * CORS configuration for the Express router.
19
+ * - `true` (default): permissive CORS (`origin: "*"`, all methods, all headers).
20
+ * - `false`: no CORS middleware is applied — handle it yourself.
21
+ * - object: passed directly to the Express `cors()` middleware.
22
+ */
23
+ cors?: boolean | CorsOptions;
24
+ /**
25
+ * Lifecycle hooks for request processing.
26
+ */
27
+ hooks?: CopilotRuntimeHooks;
9
28
  }
10
- declare function createCopilotEndpointExpress({
29
+ declare function createCopilotExpressHandler({
11
30
  runtime,
12
- basePath
31
+ basePath,
32
+ mode,
33
+ cors: corsOption,
34
+ hooks
13
35
  }: CopilotExpressEndpointParams): Router;
14
36
  //#endregion
15
- export { createCopilotEndpointExpress };
37
+ export { CopilotExpressEndpointParams, createCopilotExpressHandler };
16
38
  //# sourceMappingURL=express.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.d.cts","names":[],"sources":["../../../../src/v2/runtime/endpoints/express.ts"],"mappings":";;;;;UAiCU,4BAAA;EACR,OAAA,EAAS,kBAAA;EACT,QAAA;AAAA;AAAA,iBAGc,4BAAA,CAAA;EACd,OAAA;EACA;AAAA,GACC,4BAAA,GAA+B,MAAA"}
1
+ {"version":3,"file":"express.d.cts","names":[],"sources":["../../../../src/v2/runtime/endpoints/express.ts"],"mappings":";;;;;;;UAciB,4BAAA;EACf,OAAA,EAAS,kBAAA;EACT,QAAA;EAF2C;;;;;EAS3C,IAAA;EAa2B;;;;;;EAL3B,IAAA,aAAiB,WAAA;EAKjB;;;EAAA,KAAA,GAAQ,mBAAA;AAAA;AAAA,iBAsDM,2BAAA,CAAA;EACd,OAAA;EACA,QAAA;EACA,IAAA;EACA,IAAA,EAAM,UAAA;EACN;AAAA,GACC,4BAAA,GAA+B,MAAA"}