@copilotkit/runtime 2.0.0-next.1 → 2.0.0-rc.1

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 (623) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +135 -1
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/_virtual/_rolldown/runtime.mjs +18 -0
  5. package/dist/agent/converters/aisdk.cjs +355 -0
  6. package/dist/agent/converters/aisdk.cjs.map +1 -0
  7. package/dist/agent/converters/aisdk.d.cts +22 -0
  8. package/dist/agent/converters/aisdk.d.cts.map +1 -0
  9. package/dist/agent/converters/aisdk.d.mts +22 -0
  10. package/dist/agent/converters/aisdk.d.mts.map +1 -0
  11. package/dist/agent/converters/aisdk.mjs +351 -0
  12. package/dist/agent/converters/aisdk.mjs.map +1 -0
  13. package/dist/agent/converters/index.d.mts +2 -0
  14. package/dist/agent/converters/tanstack.cjs +374 -0
  15. package/dist/agent/converters/tanstack.cjs.map +1 -0
  16. package/dist/agent/converters/tanstack.d.cts +83 -0
  17. package/dist/agent/converters/tanstack.d.cts.map +1 -0
  18. package/dist/agent/converters/tanstack.d.mts +83 -0
  19. package/dist/agent/converters/tanstack.d.mts.map +1 -0
  20. package/dist/agent/converters/tanstack.mjs +372 -0
  21. package/dist/agent/converters/tanstack.mjs.map +1 -0
  22. package/dist/agent/converters/usage.cjs +68 -0
  23. package/dist/agent/converters/usage.cjs.map +1 -0
  24. package/dist/agent/converters/usage.d.cts +19 -0
  25. package/dist/agent/converters/usage.d.cts.map +1 -0
  26. package/dist/agent/converters/usage.d.mts +19 -0
  27. package/dist/agent/converters/usage.d.mts.map +1 -0
  28. package/dist/agent/converters/usage.mjs +62 -0
  29. package/dist/agent/converters/usage.mjs.map +1 -0
  30. package/dist/agent/index.cjs +1328 -0
  31. package/dist/agent/index.cjs.map +1 -0
  32. package/dist/agent/index.d.cts +467 -0
  33. package/dist/agent/index.d.cts.map +1 -0
  34. package/dist/agent/index.d.mts +468 -0
  35. package/dist/agent/index.d.mts.map +1 -0
  36. package/dist/agent/index.mjs +1318 -0
  37. package/dist/agent/index.mjs.map +1 -0
  38. package/dist/agent/learned-skills.cjs +76 -0
  39. package/dist/agent/learned-skills.cjs.map +1 -0
  40. package/dist/agent/learned-skills.d.cts +15 -0
  41. package/dist/agent/learned-skills.d.cts.map +1 -0
  42. package/dist/agent/learned-skills.d.mts +15 -0
  43. package/dist/agent/learned-skills.d.mts.map +1 -0
  44. package/dist/agent/learned-skills.mjs +74 -0
  45. package/dist/agent/learned-skills.mjs.map +1 -0
  46. package/dist/agent/mcp-tool-names.cjs +82 -0
  47. package/dist/agent/mcp-tool-names.cjs.map +1 -0
  48. package/dist/agent/mcp-tool-names.mjs +80 -0
  49. package/dist/agent/mcp-tool-names.mjs.map +1 -0
  50. package/dist/agent/state-delta.cjs +321 -0
  51. package/dist/agent/state-delta.cjs.map +1 -0
  52. package/dist/agent/state-delta.mjs +320 -0
  53. package/dist/agent/state-delta.mjs.map +1 -0
  54. package/dist/agent/url-download.cjs +503 -0
  55. package/dist/agent/url-download.cjs.map +1 -0
  56. package/dist/agent/url-download.d.cts +79 -0
  57. package/dist/agent/url-download.d.cts.map +1 -0
  58. package/dist/agent/url-download.d.mts +79 -0
  59. package/dist/agent/url-download.d.mts.map +1 -0
  60. package/dist/agent/url-download.mjs +500 -0
  61. package/dist/agent/url-download.mjs.map +1 -0
  62. package/dist/index.cjs +75 -0
  63. package/dist/index.d.cts +24 -0
  64. package/dist/index.d.mts +24 -0
  65. package/dist/index.mjs +17 -5598
  66. package/dist/internal/learned-skills.cjs +21 -0
  67. package/dist/internal/learned-skills.d.cts +9 -0
  68. package/dist/internal/learned-skills.d.mts +9 -0
  69. package/dist/internal/learned-skills.mjs +9 -0
  70. package/dist/node.cjs +7 -0
  71. package/dist/node.d.cts +4 -0
  72. package/dist/node.d.mts +4 -0
  73. package/dist/node.mjs +4 -0
  74. package/dist/runtime/core/channel-activation-config.cjs +87 -0
  75. package/dist/runtime/core/channel-activation-config.cjs.map +1 -0
  76. package/dist/runtime/core/channel-activation-config.d.cts +39 -0
  77. package/dist/runtime/core/channel-activation-config.d.cts.map +1 -0
  78. package/dist/runtime/core/channel-activation-config.d.mts +39 -0
  79. package/dist/runtime/core/channel-activation-config.d.mts.map +1 -0
  80. package/dist/runtime/core/channel-activation-config.mjs +85 -0
  81. package/dist/runtime/core/channel-activation-config.mjs.map +1 -0
  82. package/dist/runtime/core/channel-manager.cjs +973 -0
  83. package/dist/runtime/core/channel-manager.cjs.map +1 -0
  84. package/dist/runtime/core/channel-manager.d.cts +166 -0
  85. package/dist/runtime/core/channel-manager.d.cts.map +1 -0
  86. package/dist/runtime/core/channel-manager.d.mts +167 -0
  87. package/dist/runtime/core/channel-manager.d.mts.map +1 -0
  88. package/dist/runtime/core/channel-manager.mjs +972 -0
  89. package/dist/runtime/core/channel-manager.mjs.map +1 -0
  90. package/dist/runtime/core/debug-event-bus.cjs +57 -0
  91. package/dist/runtime/core/debug-event-bus.cjs.map +1 -0
  92. package/dist/runtime/core/debug-event-bus.d.cts +18 -0
  93. package/dist/runtime/core/debug-event-bus.d.cts.map +1 -0
  94. package/dist/runtime/core/debug-event-bus.d.mts +18 -0
  95. package/dist/runtime/core/debug-event-bus.d.mts.map +1 -0
  96. package/dist/runtime/core/debug-event-bus.mjs +55 -0
  97. package/dist/runtime/core/debug-event-bus.mjs.map +1 -0
  98. package/dist/runtime/core/fetch-cors.cjs +71 -0
  99. package/dist/runtime/core/fetch-cors.cjs.map +1 -0
  100. package/dist/runtime/core/fetch-cors.d.cts +19 -0
  101. package/dist/runtime/core/fetch-cors.d.cts.map +1 -0
  102. package/dist/runtime/core/fetch-cors.d.mts +19 -0
  103. package/dist/runtime/core/fetch-cors.d.mts.map +1 -0
  104. package/dist/runtime/core/fetch-cors.mjs +69 -0
  105. package/dist/runtime/core/fetch-cors.mjs.map +1 -0
  106. package/dist/runtime/core/fetch-handler.cjs +539 -0
  107. package/dist/runtime/core/fetch-handler.cjs.map +1 -0
  108. package/dist/runtime/core/fetch-handler.d.cts +99 -0
  109. package/dist/runtime/core/fetch-handler.d.cts.map +1 -0
  110. package/dist/runtime/core/fetch-handler.d.mts +99 -0
  111. package/dist/runtime/core/fetch-handler.d.mts.map +1 -0
  112. package/dist/runtime/core/fetch-handler.mjs +538 -0
  113. package/dist/runtime/core/fetch-handler.mjs.map +1 -0
  114. package/dist/runtime/core/fetch-router.cjs +141 -0
  115. package/dist/runtime/core/fetch-router.cjs.map +1 -0
  116. package/dist/runtime/core/fetch-router.mjs +140 -0
  117. package/dist/runtime/core/fetch-router.mjs.map +1 -0
  118. package/dist/runtime/core/hooks.cjs +28 -0
  119. package/dist/runtime/core/hooks.cjs.map +1 -0
  120. package/dist/runtime/core/hooks.d.cts +121 -0
  121. package/dist/runtime/core/hooks.d.cts.map +1 -0
  122. package/dist/runtime/core/hooks.d.mts +121 -0
  123. package/dist/runtime/core/hooks.d.mts.map +1 -0
  124. package/dist/runtime/core/hooks.mjs +24 -0
  125. package/dist/runtime/core/hooks.mjs.map +1 -0
  126. package/dist/runtime/core/learning.cjs +61 -0
  127. package/dist/runtime/core/learning.cjs.map +1 -0
  128. package/dist/runtime/core/learning.d.cts +61 -0
  129. package/dist/runtime/core/learning.d.cts.map +1 -0
  130. package/dist/runtime/core/learning.d.mts +61 -0
  131. package/dist/runtime/core/learning.d.mts.map +1 -0
  132. package/dist/runtime/core/learning.mjs +56 -0
  133. package/dist/runtime/core/learning.mjs.map +1 -0
  134. package/dist/runtime/core/logger.cjs +21 -0
  135. package/dist/runtime/core/logger.cjs.map +1 -0
  136. package/dist/runtime/core/logger.d.cts +12 -0
  137. package/dist/runtime/core/logger.d.cts.map +1 -0
  138. package/dist/runtime/core/logger.d.mts +12 -0
  139. package/dist/runtime/core/logger.d.mts.map +1 -0
  140. package/dist/runtime/core/logger.mjs +18 -0
  141. package/dist/runtime/core/logger.mjs.map +1 -0
  142. package/dist/runtime/core/middleware-sse-parser.cjs +149 -0
  143. package/dist/runtime/core/middleware-sse-parser.cjs.map +1 -0
  144. package/dist/runtime/core/middleware-sse-parser.d.cts +21 -0
  145. package/dist/runtime/core/middleware-sse-parser.d.cts.map +1 -0
  146. package/dist/runtime/core/middleware-sse-parser.d.mts +21 -0
  147. package/dist/runtime/core/middleware-sse-parser.d.mts.map +1 -0
  148. package/dist/runtime/core/middleware-sse-parser.mjs +148 -0
  149. package/dist/runtime/core/middleware-sse-parser.mjs.map +1 -0
  150. package/dist/runtime/core/middleware.cjs +34 -0
  151. package/dist/runtime/core/middleware.cjs.map +1 -0
  152. package/dist/runtime/core/middleware.d.cts +31 -0
  153. package/dist/runtime/core/middleware.d.cts.map +1 -0
  154. package/dist/runtime/core/middleware.d.mts +31 -0
  155. package/dist/runtime/core/middleware.d.mts.map +1 -0
  156. package/dist/runtime/core/middleware.mjs +32 -0
  157. package/dist/runtime/core/middleware.mjs.map +1 -0
  158. package/dist/runtime/core/package-info.cjs +9 -0
  159. package/dist/runtime/core/package-info.cjs.map +1 -0
  160. package/dist/runtime/core/package-info.mjs +7 -0
  161. package/dist/runtime/core/package-info.mjs.map +1 -0
  162. package/dist/runtime/core/runtime-error-reporter.cjs +21 -0
  163. package/dist/runtime/core/runtime-error-reporter.cjs.map +1 -0
  164. package/dist/runtime/core/runtime-error-reporter.mjs +18 -0
  165. package/dist/runtime/core/runtime-error-reporter.mjs.map +1 -0
  166. package/dist/runtime/core/runtime.cjs +256 -0
  167. package/dist/runtime/core/runtime.cjs.map +1 -0
  168. package/dist/runtime/core/runtime.d.cts +481 -0
  169. package/dist/runtime/core/runtime.d.cts.map +1 -0
  170. package/dist/runtime/core/runtime.d.mts +481 -0
  171. package/dist/runtime/core/runtime.d.mts.map +1 -0
  172. package/dist/runtime/core/runtime.mjs +249 -0
  173. package/dist/runtime/core/runtime.mjs.map +1 -0
  174. package/dist/runtime/endpoints/auto-start-channels.cjs +46 -0
  175. package/dist/runtime/endpoints/auto-start-channels.cjs.map +1 -0
  176. package/dist/runtime/endpoints/auto-start-channels.mjs +45 -0
  177. package/dist/runtime/endpoints/auto-start-channels.mjs.map +1 -0
  178. package/dist/runtime/endpoints/node-fetch-handler.cjs +75 -0
  179. package/dist/runtime/endpoints/node-fetch-handler.cjs.map +1 -0
  180. package/dist/runtime/endpoints/node-fetch-handler.d.cts +11 -0
  181. package/dist/runtime/endpoints/node-fetch-handler.d.cts.map +1 -0
  182. package/dist/runtime/endpoints/node-fetch-handler.d.mts +11 -0
  183. package/dist/runtime/endpoints/node-fetch-handler.d.mts.map +1 -0
  184. package/dist/runtime/endpoints/node-fetch-handler.mjs +73 -0
  185. package/dist/runtime/endpoints/node-fetch-handler.mjs.map +1 -0
  186. package/dist/runtime/endpoints/node.cjs +16 -0
  187. package/dist/runtime/endpoints/node.cjs.map +1 -0
  188. package/dist/runtime/endpoints/node.d.cts +104 -0
  189. package/dist/runtime/endpoints/node.d.cts.map +1 -0
  190. package/dist/runtime/endpoints/node.d.mts +104 -0
  191. package/dist/runtime/endpoints/node.d.mts.map +1 -0
  192. package/dist/runtime/endpoints/node.mjs +16 -0
  193. package/dist/runtime/endpoints/node.mjs.map +1 -0
  194. package/dist/runtime/endpoints/single-route-helpers.cjs +130 -0
  195. package/dist/runtime/endpoints/single-route-helpers.cjs.map +1 -0
  196. package/dist/runtime/endpoints/single-route-helpers.mjs +125 -0
  197. package/dist/runtime/endpoints/single-route-helpers.mjs.map +1 -0
  198. package/dist/runtime/generative-ui/generative-ui-middleware.cjs +393 -0
  199. package/dist/runtime/generative-ui/generative-ui-middleware.cjs.map +1 -0
  200. package/dist/runtime/generative-ui/generative-ui-middleware.d.cts +20 -0
  201. package/dist/runtime/generative-ui/generative-ui-middleware.d.cts.map +1 -0
  202. package/dist/runtime/generative-ui/generative-ui-middleware.d.mts +20 -0
  203. package/dist/runtime/generative-ui/generative-ui-middleware.d.mts.map +1 -0
  204. package/dist/runtime/generative-ui/generative-ui-middleware.mjs +392 -0
  205. package/dist/runtime/generative-ui/generative-ui-middleware.mjs.map +1 -0
  206. package/dist/runtime/generative-ui/index.d.cts +2 -0
  207. package/dist/runtime/generative-ui/index.d.mts +2 -0
  208. package/dist/runtime/generative-ui/surface-writer.cjs +85 -0
  209. package/dist/runtime/generative-ui/surface-writer.cjs.map +1 -0
  210. package/dist/runtime/generative-ui/surface-writer.d.cts +32 -0
  211. package/dist/runtime/generative-ui/surface-writer.d.cts.map +1 -0
  212. package/dist/runtime/generative-ui/surface-writer.d.mts +32 -0
  213. package/dist/runtime/generative-ui/surface-writer.d.mts.map +1 -0
  214. package/dist/runtime/generative-ui/surface-writer.mjs +84 -0
  215. package/dist/runtime/generative-ui/surface-writer.mjs.map +1 -0
  216. package/dist/runtime/handlers/get-runtime-info.cjs +140 -0
  217. package/dist/runtime/handlers/get-runtime-info.cjs.map +1 -0
  218. package/dist/runtime/handlers/get-runtime-info.mjs +140 -0
  219. package/dist/runtime/handlers/get-runtime-info.mjs.map +1 -0
  220. package/dist/runtime/handlers/handle-connect.cjs +62 -0
  221. package/dist/runtime/handlers/handle-connect.cjs.map +1 -0
  222. package/dist/runtime/handlers/handle-connect.mjs +62 -0
  223. package/dist/runtime/handlers/handle-connect.mjs.map +1 -0
  224. package/dist/runtime/handlers/handle-debug-events.cjs +33 -0
  225. package/dist/runtime/handlers/handle-debug-events.cjs.map +1 -0
  226. package/dist/runtime/handlers/handle-debug-events.mjs +33 -0
  227. package/dist/runtime/handlers/handle-debug-events.mjs.map +1 -0
  228. package/dist/runtime/handlers/handle-inspector-learning.cjs +56 -0
  229. package/dist/runtime/handlers/handle-inspector-learning.cjs.map +1 -0
  230. package/dist/runtime/handlers/handle-inspector-learning.mjs +55 -0
  231. package/dist/runtime/handlers/handle-inspector-learning.mjs.map +1 -0
  232. package/dist/runtime/handlers/handle-inspector-metadata.cjs +36 -0
  233. package/dist/runtime/handlers/handle-inspector-metadata.cjs.map +1 -0
  234. package/dist/runtime/handlers/handle-inspector-metadata.mjs +35 -0
  235. package/dist/runtime/handlers/handle-inspector-metadata.mjs.map +1 -0
  236. package/dist/runtime/handlers/handle-run.cjs +111 -0
  237. package/dist/runtime/handlers/handle-run.cjs.map +1 -0
  238. package/dist/runtime/handlers/handle-run.mjs +110 -0
  239. package/dist/runtime/handlers/handle-run.mjs.map +1 -0
  240. package/dist/runtime/handlers/handle-stop.cjs +102 -0
  241. package/dist/runtime/handlers/handle-stop.cjs.map +1 -0
  242. package/dist/runtime/handlers/handle-stop.mjs +101 -0
  243. package/dist/runtime/handlers/handle-stop.mjs.map +1 -0
  244. package/dist/runtime/handlers/handle-suggest.cjs +83 -0
  245. package/dist/runtime/handlers/handle-suggest.cjs.map +1 -0
  246. package/dist/runtime/handlers/handle-suggest.mjs +82 -0
  247. package/dist/runtime/handlers/handle-suggest.mjs.map +1 -0
  248. package/dist/runtime/handlers/handle-trajectory-connect.cjs +40 -0
  249. package/dist/runtime/handlers/handle-trajectory-connect.cjs.map +1 -0
  250. package/dist/runtime/handlers/handle-trajectory-connect.mjs +39 -0
  251. package/dist/runtime/handlers/handle-trajectory-connect.mjs.map +1 -0
  252. package/dist/runtime/handlers/handle-transcribe.cjs +112 -0
  253. package/dist/runtime/handlers/handle-transcribe.cjs.map +1 -0
  254. package/dist/runtime/handlers/handle-transcribe.mjs +111 -0
  255. package/dist/runtime/handlers/handle-transcribe.mjs.map +1 -0
  256. package/dist/runtime/handlers/header-utils.cjs +185 -0
  257. package/dist/runtime/handlers/header-utils.cjs.map +1 -0
  258. package/dist/runtime/handlers/header-utils.d.cts +53 -0
  259. package/dist/runtime/handlers/header-utils.d.cts.map +1 -0
  260. package/dist/runtime/handlers/header-utils.d.mts +53 -0
  261. package/dist/runtime/handlers/header-utils.d.mts.map +1 -0
  262. package/dist/runtime/handlers/header-utils.mjs +183 -0
  263. package/dist/runtime/handlers/header-utils.mjs.map +1 -0
  264. package/dist/runtime/handlers/intelligence/annotate.cjs +83 -0
  265. package/dist/runtime/handlers/intelligence/annotate.cjs.map +1 -0
  266. package/dist/runtime/handlers/intelligence/annotate.mjs +82 -0
  267. package/dist/runtime/handlers/intelligence/annotate.mjs.map +1 -0
  268. package/dist/runtime/handlers/intelligence/connect.cjs +68 -0
  269. package/dist/runtime/handlers/intelligence/connect.cjs.map +1 -0
  270. package/dist/runtime/handlers/intelligence/connect.mjs +68 -0
  271. package/dist/runtime/handlers/intelligence/connect.mjs.map +1 -0
  272. package/dist/runtime/handlers/intelligence/memories.cjs +260 -0
  273. package/dist/runtime/handlers/intelligence/memories.cjs.map +1 -0
  274. package/dist/runtime/handlers/intelligence/memories.mjs +254 -0
  275. package/dist/runtime/handlers/intelligence/memories.mjs.map +1 -0
  276. package/dist/runtime/handlers/intelligence/run.cjs +283 -0
  277. package/dist/runtime/handlers/intelligence/run.cjs.map +1 -0
  278. package/dist/runtime/handlers/intelligence/run.mjs +282 -0
  279. package/dist/runtime/handlers/intelligence/run.mjs.map +1 -0
  280. package/dist/runtime/handlers/intelligence/thread-names.cjs +172 -0
  281. package/dist/runtime/handlers/intelligence/thread-names.cjs.map +1 -0
  282. package/dist/runtime/handlers/intelligence/thread-names.mjs +171 -0
  283. package/dist/runtime/handlers/intelligence/thread-names.mjs.map +1 -0
  284. package/dist/runtime/handlers/intelligence/threads.cjs +399 -0
  285. package/dist/runtime/handlers/intelligence/threads.cjs.map +1 -0
  286. package/dist/runtime/handlers/intelligence/threads.mjs +390 -0
  287. package/dist/runtime/handlers/intelligence/threads.mjs.map +1 -0
  288. package/dist/runtime/handlers/shared/agent-utils.cjs +267 -0
  289. package/dist/runtime/handlers/shared/agent-utils.cjs.map +1 -0
  290. package/dist/runtime/handlers/shared/agent-utils.mjs +262 -0
  291. package/dist/runtime/handlers/shared/agent-utils.mjs.map +1 -0
  292. package/dist/runtime/handlers/shared/cloud-telemetry.cjs +30 -0
  293. package/dist/runtime/handlers/shared/cloud-telemetry.cjs.map +1 -0
  294. package/dist/runtime/handlers/shared/cloud-telemetry.mjs +29 -0
  295. package/dist/runtime/handlers/shared/cloud-telemetry.mjs.map +1 -0
  296. package/dist/runtime/handlers/shared/describe-endpoint.cjs +25 -0
  297. package/dist/runtime/handlers/shared/describe-endpoint.cjs.map +1 -0
  298. package/dist/runtime/handlers/shared/describe-endpoint.mjs +24 -0
  299. package/dist/runtime/handlers/shared/describe-endpoint.mjs.map +1 -0
  300. package/dist/runtime/handlers/shared/intelligence-utils.cjs +24 -0
  301. package/dist/runtime/handlers/shared/intelligence-utils.cjs.map +1 -0
  302. package/dist/runtime/handlers/shared/intelligence-utils.mjs +23 -0
  303. package/dist/runtime/handlers/shared/intelligence-utils.mjs.map +1 -0
  304. package/dist/runtime/handlers/shared/json-response.cjs +14 -0
  305. package/dist/runtime/handlers/shared/json-response.cjs.map +1 -0
  306. package/dist/runtime/handlers/shared/json-response.mjs +12 -0
  307. package/dist/runtime/handlers/shared/json-response.mjs.map +1 -0
  308. package/dist/runtime/handlers/shared/mcp-apps-servers.cjs +22 -0
  309. package/dist/runtime/handlers/shared/mcp-apps-servers.cjs.map +1 -0
  310. package/dist/runtime/handlers/shared/mcp-apps-servers.mjs +22 -0
  311. package/dist/runtime/handlers/shared/mcp-apps-servers.mjs.map +1 -0
  312. package/dist/runtime/handlers/shared/memory-policy.cjs +78 -0
  313. package/dist/runtime/handlers/shared/memory-policy.cjs.map +1 -0
  314. package/dist/runtime/handlers/shared/memory-policy.mjs +77 -0
  315. package/dist/runtime/handlers/shared/memory-policy.mjs.map +1 -0
  316. package/dist/runtime/handlers/shared/platform-error.cjs +39 -0
  317. package/dist/runtime/handlers/shared/platform-error.cjs.map +1 -0
  318. package/dist/runtime/handlers/shared/platform-error.mjs +39 -0
  319. package/dist/runtime/handlers/shared/platform-error.mjs.map +1 -0
  320. package/dist/runtime/handlers/shared/resolve-intelligence-user.cjs +50 -0
  321. package/dist/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -0
  322. package/dist/runtime/handlers/shared/resolve-intelligence-user.mjs +49 -0
  323. package/dist/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -0
  324. package/dist/runtime/handlers/shared/sse-keep-alive.cjs +68 -0
  325. package/dist/runtime/handlers/shared/sse-keep-alive.cjs.map +1 -0
  326. package/dist/runtime/handlers/shared/sse-keep-alive.mjs +66 -0
  327. package/dist/runtime/handlers/shared/sse-keep-alive.mjs.map +1 -0
  328. package/dist/runtime/handlers/shared/sse-response.cjs +237 -0
  329. package/dist/runtime/handlers/shared/sse-response.cjs.map +1 -0
  330. package/dist/runtime/handlers/shared/sse-response.mjs +236 -0
  331. package/dist/runtime/handlers/shared/sse-response.mjs.map +1 -0
  332. package/dist/runtime/handlers/shared/thread-access.cjs +137 -0
  333. package/dist/runtime/handlers/shared/thread-access.cjs.map +1 -0
  334. package/dist/runtime/handlers/shared/thread-access.d.cts +28 -0
  335. package/dist/runtime/handlers/shared/thread-access.d.cts.map +1 -0
  336. package/dist/runtime/handlers/shared/thread-access.d.mts +28 -0
  337. package/dist/runtime/handlers/shared/thread-access.d.mts.map +1 -0
  338. package/dist/runtime/handlers/shared/thread-access.mjs +132 -0
  339. package/dist/runtime/handlers/shared/thread-access.mjs.map +1 -0
  340. package/dist/runtime/handlers/sse/connect.cjs +23 -0
  341. package/dist/runtime/handlers/sse/connect.cjs.map +1 -0
  342. package/dist/runtime/handlers/sse/connect.mjs +23 -0
  343. package/dist/runtime/handlers/sse/connect.mjs.map +1 -0
  344. package/dist/runtime/handlers/sse/run.cjs +44 -0
  345. package/dist/runtime/handlers/sse/run.cjs.map +1 -0
  346. package/dist/runtime/handlers/sse/run.mjs +44 -0
  347. package/dist/runtime/handlers/sse/run.mjs.map +1 -0
  348. package/dist/runtime/index.d.cts +29 -0
  349. package/dist/runtime/index.d.cts.map +1 -0
  350. package/dist/runtime/index.d.mts +29 -0
  351. package/dist/runtime/index.d.mts.map +1 -0
  352. package/dist/runtime/intelligence-platform/client.cjs +1338 -0
  353. package/dist/runtime/intelligence-platform/client.cjs.map +1 -0
  354. package/dist/runtime/intelligence-platform/client.d.cts +824 -0
  355. package/dist/runtime/intelligence-platform/client.d.cts.map +1 -0
  356. package/dist/runtime/intelligence-platform/client.d.mts +824 -0
  357. package/dist/runtime/intelligence-platform/client.d.mts.map +1 -0
  358. package/dist/runtime/intelligence-platform/client.mjs +1334 -0
  359. package/dist/runtime/intelligence-platform/client.mjs.map +1 -0
  360. package/dist/runtime/intelligence-platform/experimental.d.cts +26 -0
  361. package/dist/runtime/intelligence-platform/experimental.d.cts.map +1 -0
  362. package/dist/runtime/intelligence-platform/experimental.d.mts +26 -0
  363. package/dist/runtime/intelligence-platform/experimental.d.mts.map +1 -0
  364. package/dist/runtime/intelligence-platform/index.d.cts +3 -0
  365. package/dist/runtime/intelligence-platform/index.d.mts +3 -0
  366. package/dist/runtime/intelligence-platform/learned-skills.cjs +95 -0
  367. package/dist/runtime/intelligence-platform/learned-skills.cjs.map +1 -0
  368. package/dist/runtime/intelligence-platform/learned-skills.d.cts +43 -0
  369. package/dist/runtime/intelligence-platform/learned-skills.d.cts.map +1 -0
  370. package/dist/runtime/intelligence-platform/learned-skills.d.mts +43 -0
  371. package/dist/runtime/intelligence-platform/learned-skills.d.mts.map +1 -0
  372. package/dist/runtime/intelligence-platform/learned-skills.mjs +92 -0
  373. package/dist/runtime/intelligence-platform/learned-skills.mjs.map +1 -0
  374. package/dist/runtime/intelligence-platform/learning-management.cjs +203 -0
  375. package/dist/runtime/intelligence-platform/learning-management.cjs.map +1 -0
  376. package/dist/runtime/intelligence-platform/learning-management.d.cts +111 -0
  377. package/dist/runtime/intelligence-platform/learning-management.d.cts.map +1 -0
  378. package/dist/runtime/intelligence-platform/learning-management.d.mts +111 -0
  379. package/dist/runtime/intelligence-platform/learning-management.d.mts.map +1 -0
  380. package/dist/runtime/intelligence-platform/learning-management.mjs +193 -0
  381. package/dist/runtime/intelligence-platform/learning-management.mjs.map +1 -0
  382. package/dist/runtime/intelligence-platform/skill-registry/archive.cjs +131 -0
  383. package/dist/runtime/intelligence-platform/skill-registry/archive.cjs.map +1 -0
  384. package/dist/runtime/intelligence-platform/skill-registry/archive.d.cts +10 -0
  385. package/dist/runtime/intelligence-platform/skill-registry/archive.d.cts.map +1 -0
  386. package/dist/runtime/intelligence-platform/skill-registry/archive.d.mts +10 -0
  387. package/dist/runtime/intelligence-platform/skill-registry/archive.d.mts.map +1 -0
  388. package/dist/runtime/intelligence-platform/skill-registry/archive.mjs +127 -0
  389. package/dist/runtime/intelligence-platform/skill-registry/archive.mjs.map +1 -0
  390. package/dist/runtime/intelligence-platform/skill-registry/config.cjs +65 -0
  391. package/dist/runtime/intelligence-platform/skill-registry/config.cjs.map +1 -0
  392. package/dist/runtime/intelligence-platform/skill-registry/config.d.cts +47 -0
  393. package/dist/runtime/intelligence-platform/skill-registry/config.d.cts.map +1 -0
  394. package/dist/runtime/intelligence-platform/skill-registry/config.d.mts +47 -0
  395. package/dist/runtime/intelligence-platform/skill-registry/config.d.mts.map +1 -0
  396. package/dist/runtime/intelligence-platform/skill-registry/config.mjs +65 -0
  397. package/dist/runtime/intelligence-platform/skill-registry/config.mjs.map +1 -0
  398. package/dist/runtime/intelligence-platform/skill-registry/errors.cjs +10 -0
  399. package/dist/runtime/intelligence-platform/skill-registry/errors.cjs.map +1 -0
  400. package/dist/runtime/intelligence-platform/skill-registry/errors.d.cts +7 -0
  401. package/dist/runtime/intelligence-platform/skill-registry/errors.d.cts.map +1 -0
  402. package/dist/runtime/intelligence-platform/skill-registry/errors.d.mts +7 -0
  403. package/dist/runtime/intelligence-platform/skill-registry/errors.d.mts.map +1 -0
  404. package/dist/runtime/intelligence-platform/skill-registry/errors.mjs +10 -0
  405. package/dist/runtime/intelligence-platform/skill-registry/errors.mjs.map +1 -0
  406. package/dist/runtime/intelligence-platform/skill-registry/index.d.cts +7 -0
  407. package/dist/runtime/intelligence-platform/skill-registry/index.d.mts +7 -0
  408. package/dist/runtime/intelligence-platform/skill-registry/registry.cjs +247 -0
  409. package/dist/runtime/intelligence-platform/skill-registry/registry.cjs.map +1 -0
  410. package/dist/runtime/intelligence-platform/skill-registry/registry.d.cts +36 -0
  411. package/dist/runtime/intelligence-platform/skill-registry/registry.d.cts.map +1 -0
  412. package/dist/runtime/intelligence-platform/skill-registry/registry.d.mts +36 -0
  413. package/dist/runtime/intelligence-platform/skill-registry/registry.d.mts.map +1 -0
  414. package/dist/runtime/intelligence-platform/skill-registry/registry.mjs +246 -0
  415. package/dist/runtime/intelligence-platform/skill-registry/registry.mjs.map +1 -0
  416. package/dist/runtime/intelligence-platform/skill-registry/skill-content.cjs +41 -0
  417. package/dist/runtime/intelligence-platform/skill-registry/skill-content.cjs.map +1 -0
  418. package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.cts +12 -0
  419. package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.cts.map +1 -0
  420. package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.mts +12 -0
  421. package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.mts.map +1 -0
  422. package/dist/runtime/intelligence-platform/skill-registry/skill-content.mjs +38 -0
  423. package/dist/runtime/intelligence-platform/skill-registry/skill-content.mjs.map +1 -0
  424. package/dist/runtime/intelligence-platform/skill-registry/snapshot.cjs +92 -0
  425. package/dist/runtime/intelligence-platform/skill-registry/snapshot.cjs.map +1 -0
  426. package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.cts +27 -0
  427. package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.cts.map +1 -0
  428. package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.mts +27 -0
  429. package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.mts.map +1 -0
  430. package/dist/runtime/intelligence-platform/skill-registry/snapshot.mjs +91 -0
  431. package/dist/runtime/intelligence-platform/skill-registry/snapshot.mjs.map +1 -0
  432. package/dist/runtime/intelligence-platform/thread-lock-heartbeat.cjs +142 -0
  433. package/dist/runtime/intelligence-platform/thread-lock-heartbeat.cjs.map +1 -0
  434. package/dist/runtime/intelligence-platform/thread-lock-heartbeat.mjs +141 -0
  435. package/dist/runtime/intelligence-platform/thread-lock-heartbeat.mjs.map +1 -0
  436. package/dist/runtime/intelligence-platform/trajectories.cjs +95 -0
  437. package/dist/runtime/intelligence-platform/trajectories.cjs.map +1 -0
  438. package/dist/runtime/intelligence-platform/trajectories.d.cts +11 -0
  439. package/dist/runtime/intelligence-platform/trajectories.d.cts.map +1 -0
  440. package/dist/runtime/intelligence-platform/trajectories.d.mts +11 -0
  441. package/dist/runtime/intelligence-platform/trajectories.d.mts.map +1 -0
  442. package/dist/runtime/intelligence-platform/trajectories.mjs +91 -0
  443. package/dist/runtime/intelligence-platform/trajectories.mjs.map +1 -0
  444. package/dist/runtime/node.d.cts +2 -0
  445. package/dist/runtime/node.d.mts +2 -0
  446. package/dist/runtime/runner/agent-runner.cjs +82 -0
  447. package/dist/runtime/runner/agent-runner.cjs.map +1 -0
  448. package/dist/runtime/runner/agent-runner.d.cts +151 -0
  449. package/dist/runtime/runner/agent-runner.d.cts.map +1 -0
  450. package/dist/runtime/runner/agent-runner.d.mts +151 -0
  451. package/dist/runtime/runner/agent-runner.d.mts.map +1 -0
  452. package/dist/runtime/runner/agent-runner.mjs +73 -0
  453. package/dist/runtime/runner/agent-runner.mjs.map +1 -0
  454. package/dist/runtime/runner/in-memory.cjs +741 -0
  455. package/dist/runtime/runner/in-memory.cjs.map +1 -0
  456. package/dist/runtime/runner/in-memory.d.cts +427 -0
  457. package/dist/runtime/runner/in-memory.d.cts.map +1 -0
  458. package/dist/runtime/runner/in-memory.d.mts +427 -0
  459. package/dist/runtime/runner/in-memory.d.mts.map +1 -0
  460. package/dist/runtime/runner/in-memory.mjs +734 -0
  461. package/dist/runtime/runner/in-memory.mjs.map +1 -0
  462. package/dist/runtime/runner/index.d.cts +5 -0
  463. package/dist/runtime/runner/index.d.mts +5 -0
  464. package/dist/runtime/runner/index.mjs +6 -0
  465. package/dist/runtime/runner/intelligence.cjs +617 -0
  466. package/dist/runtime/runner/intelligence.cjs.map +1 -0
  467. package/dist/runtime/runner/intelligence.d.cts +104 -0
  468. package/dist/runtime/runner/intelligence.d.cts.map +1 -0
  469. package/dist/runtime/runner/intelligence.d.mts +104 -0
  470. package/dist/runtime/runner/intelligence.d.mts.map +1 -0
  471. package/dist/runtime/runner/intelligence.mjs +616 -0
  472. package/dist/runtime/runner/intelligence.mjs.map +1 -0
  473. package/dist/runtime/telemetry/disclosure.cjs +25 -0
  474. package/dist/runtime/telemetry/disclosure.cjs.map +1 -0
  475. package/dist/runtime/telemetry/disclosure.mjs +24 -0
  476. package/dist/runtime/telemetry/disclosure.mjs.map +1 -0
  477. package/dist/runtime/telemetry/events.d.cts +66 -0
  478. package/dist/runtime/telemetry/events.d.cts.map +1 -0
  479. package/dist/runtime/telemetry/events.d.mts +66 -0
  480. package/dist/runtime/telemetry/events.d.mts.map +1 -0
  481. package/dist/runtime/telemetry/instance-created.cjs +34 -0
  482. package/dist/runtime/telemetry/instance-created.cjs.map +1 -0
  483. package/dist/runtime/telemetry/instance-created.mjs +34 -0
  484. package/dist/runtime/telemetry/instance-created.mjs.map +1 -0
  485. package/dist/runtime/telemetry/telemetry-client.cjs +108 -0
  486. package/dist/runtime/telemetry/telemetry-client.cjs.map +1 -0
  487. package/dist/runtime/telemetry/telemetry-client.d.cts +10 -0
  488. package/dist/runtime/telemetry/telemetry-client.d.cts.map +1 -0
  489. package/dist/runtime/telemetry/telemetry-client.d.mts +10 -0
  490. package/dist/runtime/telemetry/telemetry-client.d.mts.map +1 -0
  491. package/dist/runtime/telemetry/telemetry-client.mjs +107 -0
  492. package/dist/runtime/telemetry/telemetry-client.mjs.map +1 -0
  493. package/dist/runtime/telemetry/telemetry-identity.cjs +12 -0
  494. package/dist/runtime/telemetry/telemetry-identity.cjs.map +1 -0
  495. package/dist/runtime/telemetry/telemetry-identity.mjs +11 -0
  496. package/dist/runtime/telemetry/telemetry-identity.mjs.map +1 -0
  497. package/dist/runtime/transcription-service/transcription-service.cjs +7 -0
  498. package/dist/runtime/transcription-service/transcription-service.cjs.map +1 -0
  499. package/dist/runtime/transcription-service/transcription-service.d.cts +14 -0
  500. package/dist/runtime/transcription-service/transcription-service.d.cts.map +1 -0
  501. package/dist/runtime/transcription-service/transcription-service.d.mts +14 -0
  502. package/dist/runtime/transcription-service/transcription-service.d.mts.map +1 -0
  503. package/dist/runtime/transcription-service/transcription-service.mjs +6 -0
  504. package/dist/runtime/transcription-service/transcription-service.mjs.map +1 -0
  505. package/package.json +104 -105
  506. package/.eslintrc.js +0 -7
  507. package/CHANGELOG.md +0 -2920
  508. package/__snapshots__/schema/schema.graphql +0 -371
  509. package/dist/index.d.ts +0 -1494
  510. package/dist/index.js +0 -5641
  511. package/dist/index.js.map +0 -1
  512. package/dist/index.mjs.map +0 -1
  513. package/dist/langgraph.d.ts +0 -284
  514. package/dist/langgraph.js +0 -211
  515. package/dist/langgraph.js.map +0 -1
  516. package/dist/langgraph.mjs +0 -206
  517. package/dist/langgraph.mjs.map +0 -1
  518. package/dist/v2/index.d.ts +0 -2
  519. package/dist/v2/index.js +0 -22
  520. package/dist/v2/index.js.map +0 -1
  521. package/dist/v2/index.mjs +0 -5
  522. package/dist/v2/index.mjs.map +0 -1
  523. package/jest.config.js +0 -10
  524. package/scripts/generate-gql-schema.ts +0 -13
  525. package/src/agents/langgraph/event-source.ts +0 -329
  526. package/src/agents/langgraph/events.ts +0 -377
  527. package/src/graphql/inputs/action.input.ts +0 -16
  528. package/src/graphql/inputs/agent-session.input.ts +0 -13
  529. package/src/graphql/inputs/agent-state.input.ts +0 -13
  530. package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
  531. package/src/graphql/inputs/cloud.input.ts +0 -8
  532. package/src/graphql/inputs/context-property.input.ts +0 -10
  533. package/src/graphql/inputs/copilot-context.input.ts +0 -10
  534. package/src/graphql/inputs/custom-property.input.ts +0 -15
  535. package/src/graphql/inputs/extensions.input.ts +0 -21
  536. package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
  537. package/src/graphql/inputs/frontend.input.ts +0 -14
  538. package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
  539. package/src/graphql/inputs/load-agent-state.input.ts +0 -10
  540. package/src/graphql/inputs/message.input.ts +0 -110
  541. package/src/graphql/inputs/meta-event.input.ts +0 -18
  542. package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1263
  543. package/src/graphql/message-conversion/agui-to-gql.ts +0 -333
  544. package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1580
  545. package/src/graphql/message-conversion/gql-to-agui.ts +0 -278
  546. package/src/graphql/message-conversion/index.ts +0 -2
  547. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -526
  548. package/src/graphql/resolvers/copilot.resolver.ts +0 -708
  549. package/src/graphql/resolvers/state.resolver.ts +0 -27
  550. package/src/graphql/types/agents-response.type.ts +0 -19
  551. package/src/graphql/types/base/index.ts +0 -10
  552. package/src/graphql/types/converted/index.ts +0 -176
  553. package/src/graphql/types/copilot-response.type.ts +0 -138
  554. package/src/graphql/types/enums.ts +0 -38
  555. package/src/graphql/types/extensions-response.type.ts +0 -23
  556. package/src/graphql/types/guardrails-result.type.ts +0 -20
  557. package/src/graphql/types/load-agent-state-response.type.ts +0 -17
  558. package/src/graphql/types/message-status.type.ts +0 -42
  559. package/src/graphql/types/meta-events.type.ts +0 -71
  560. package/src/graphql/types/response-status.type.ts +0 -66
  561. package/src/index.ts +0 -4
  562. package/src/langgraph.ts +0 -1
  563. package/src/lib/cloud/index.ts +0 -4
  564. package/src/lib/error-messages.ts +0 -200
  565. package/src/lib/index.ts +0 -52
  566. package/src/lib/integrations/index.ts +0 -6
  567. package/src/lib/integrations/nest/index.ts +0 -14
  568. package/src/lib/integrations/nextjs/app-router.ts +0 -38
  569. package/src/lib/integrations/nextjs/pages-router.ts +0 -39
  570. package/src/lib/integrations/node-express/index.ts +0 -14
  571. package/src/lib/integrations/node-http/index.ts +0 -143
  572. package/src/lib/integrations/node-http/request-handler.ts +0 -111
  573. package/src/lib/integrations/shared.ts +0 -161
  574. package/src/lib/logger.ts +0 -28
  575. package/src/lib/observability.ts +0 -160
  576. package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -169
  577. package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -464
  578. package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -209
  579. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -34
  580. package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
  581. package/src/lib/runtime/copilot-runtime.ts +0 -710
  582. package/src/lib/runtime/mcp-tools-utils.ts +0 -254
  583. package/src/lib/runtime/retry-utils.ts +0 -96
  584. package/src/lib/runtime/telemetry-agent-runner.ts +0 -139
  585. package/src/lib/runtime/types.ts +0 -49
  586. package/src/lib/runtime/utils.ts +0 -87
  587. package/src/lib/streaming.ts +0 -202
  588. package/src/lib/telemetry-client.ts +0 -64
  589. package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -452
  590. package/src/service-adapters/anthropic/utils.ts +0 -152
  591. package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
  592. package/src/service-adapters/conversion.ts +0 -67
  593. package/src/service-adapters/empty/empty-adapter.ts +0 -38
  594. package/src/service-adapters/events.ts +0 -294
  595. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
  596. package/src/service-adapters/google/google-genai-adapter.test.ts +0 -104
  597. package/src/service-adapters/google/google-genai-adapter.ts +0 -88
  598. package/src/service-adapters/groq/groq-adapter.ts +0 -203
  599. package/src/service-adapters/index.ts +0 -18
  600. package/src/service-adapters/langchain/langchain-adapter.ts +0 -111
  601. package/src/service-adapters/langchain/langserve.ts +0 -88
  602. package/src/service-adapters/langchain/types.ts +0 -14
  603. package/src/service-adapters/langchain/utils.ts +0 -313
  604. package/src/service-adapters/openai/openai-adapter.ts +0 -283
  605. package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -344
  606. package/src/service-adapters/openai/utils.ts +0 -199
  607. package/src/service-adapters/service-adapter.ts +0 -41
  608. package/src/service-adapters/shared/error-utils.ts +0 -61
  609. package/src/service-adapters/shared/index.ts +0 -1
  610. package/src/service-adapters/unify/unify-adapter.ts +0 -151
  611. package/src/utils/failed-response-status-reasons.ts +0 -70
  612. package/src/utils/index.ts +0 -1
  613. package/src/v2/index.ts +0 -3
  614. package/tests/global.d.ts +0 -13
  615. package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -226
  616. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -389
  617. package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -238
  618. package/tests/service-adapters/openai/openai-adapter.test.ts +0 -301
  619. package/tests/setup.jest.ts +0 -21
  620. package/tests/tsconfig.json +0 -10
  621. package/tsconfig.json +0 -13
  622. package/tsup.config.ts +0 -20
  623. package/typedoc.json +0 -4
@@ -0,0 +1,1318 @@
1
+ import { describeEndpoint } from "../runtime/handlers/shared/describe-endpoint.mjs";
2
+ import { createSafeUrlDownload, logModelCallError, resolveUrlDownloadSetting } from "./url-download.mjs";
3
+ import { createStateEventNormalizer } from "./state-delta.mjs";
4
+ import { collectStandardRunFinishedDetails, getNonEmptyString, isRecord } from "./converters/usage.mjs";
5
+ import { convertAISDKStream, formatToolError, getAISDKRunFinishedDetails, resolveStreamPartMessageId } from "./converters/aisdk.mjs";
6
+ import { convertInputToTanStackAI, convertTanStackStream } from "./converters/tanstack.mjs";
7
+ import { SkillRegistry } from "../runtime/intelligence-platform/skill-registry/registry.mjs";
8
+ import { assertNoSkillToolConflicts, prepareLearnedSkills } from "./learned-skills.mjs";
9
+ import { mergeMCPTools, toToolNamePrefix } from "./mcp-tool-names.mjs";
10
+ import { classifyModelHost, randomUUID, safeParseToolArgs, schemaToJsonSchema } from "@copilotkit/shared";
11
+ import { z } from "zod";
12
+ import { Observable } from "rxjs";
13
+ import { AbstractAgent, EventType, PROTOCOL_VERSION } from "@ag-ui/client";
14
+ import { RENDER_A2UI_TOOL } from "@ag-ui/a2ui-middleware";
15
+ import { Validator } from "@cfworker/json-schema";
16
+ import { jsonSchema, stepCountIs, streamText, tool } from "ai";
17
+ import { createMCPClient } from "@ai-sdk/mcp";
18
+ import { createOpenAI } from "@ai-sdk/openai";
19
+ import { createAnthropic } from "@ai-sdk/anthropic";
20
+ import { createGoogleGenerativeAI } from "@ai-sdk/google";
21
+ import { createVertex } from "@ai-sdk/google-vertex";
22
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
23
+
24
+ //#region src/agent/index.ts
25
+ /**
26
+ * Resolves a model specifier to a LanguageModel instance
27
+ * @param spec - Model string (e.g., "openai/gpt-4o") or LanguageModel instance
28
+ * @param apiKey - Optional API key to use instead of environment variables
29
+ * @returns LanguageModel instance
30
+ */
31
+ /**
32
+ * An AG-UI tool result as the AI SDK's tool result output.
33
+ *
34
+ * Providers hold one response per tool call, and the Google adapter emits one
35
+ * functionResponse per text entry of a content list, so all of a result's text
36
+ * is collected into a single entry: text parts run together, and a
37
+ * URL-referenced part contributes the URL it carries on a line of its own —
38
+ * the bytes are not here to hand over, and the reference is the content the
39
+ * tool actually returned. A result with no inline media is that text alone.
40
+ * One with inline media is a content list: the text entry first, when there is
41
+ * any, then each media part with its bytes and media type. A media-only result
42
+ * is media alone: a placeholder text would be content the tool never returned.
43
+ * Which adapters can place media inside a tool response is theirs to decide.
44
+ * A provider file handle (`file` source) is neither bytes nor a URL, and this
45
+ * path cannot hand it to the provider, so the part is dropped with a warning.
46
+ * A result whose parts were all dropped is the empty string, as AG-UI 1.0
47
+ * requires: the call must still be answered.
48
+ */
49
+ function warnDroppedFileSource(what) {
50
+ console.warn(`[CopilotKit] Dropping a ${what} that references a provider file handle: it is not a URL or inline data, so it cannot be sent to the model here.`);
51
+ }
52
+ function toolResultOutput(content) {
53
+ if (typeof content === "string") return {
54
+ type: "text",
55
+ value: content
56
+ };
57
+ const segments = [];
58
+ const media = [];
59
+ let open = false;
60
+ for (const part of content) if (part.type === "text") {
61
+ if (open) segments[segments.length - 1] += part.text;
62
+ else segments.push(part.text);
63
+ open = true;
64
+ } else if (part.source.type === "file") warnDroppedFileSource(`${part.type} part in a tool result`);
65
+ else if (part.source.type === "url") {
66
+ segments.push(part.source.value);
67
+ open = false;
68
+ } else {
69
+ media.push({
70
+ type: "media",
71
+ data: part.source.value,
72
+ mediaType: part.source.mimeType
73
+ });
74
+ open = false;
75
+ }
76
+ const text = segments.join("\n");
77
+ if (media.length === 0) return {
78
+ type: "text",
79
+ value: text
80
+ };
81
+ return {
82
+ type: "content",
83
+ value: [...text.length > 0 ? [{
84
+ type: "text",
85
+ text
86
+ }] : [], ...media]
87
+ };
88
+ }
89
+ /**
90
+ * Split a model string into provider and model id. The provider is the text
91
+ * before the FIRST ":" or "/"; everything after it is the model id, unchanged.
92
+ * So "openai:meta-llama/llama-3.3-70b" keeps the slash in its model id, and
93
+ * "openai/ft:gpt-4o-mini:org::id" keeps its colons. Empty strings mean the
94
+ * part is missing.
95
+ */
96
+ function parseModelSpec(spec) {
97
+ const trimmed = spec.trim();
98
+ const separator = trimmed.search(/[:/]/);
99
+ if (separator === -1) return {
100
+ provider: trimmed.toLowerCase(),
101
+ model: ""
102
+ };
103
+ return {
104
+ provider: trimmed.slice(0, separator).toLowerCase(),
105
+ model: trimmed.slice(separator + 1).trim()
106
+ };
107
+ }
108
+ /**
109
+ * Whether an `OPENAI_BASE_URL` should get Chat Completions instead of the
110
+ * Responses API. OpenAI's own hosts (including `*.api.openai.com`, such as the
111
+ * EU data-residency host) and Azure serve `/responses`, so they keep it, as
112
+ * does an unset value. Any other host gets `/chat/completions`, which is what
113
+ * most OpenAI-compatible servers implement. The host rule is
114
+ * `classifyModelHost`, the same one telemetry uses.
115
+ *
116
+ * A value `new URL` throws on keeps the Responses route; the request will
117
+ * fail on that base URL either way. A schemeless value such as
118
+ * `localhost:11434/v1` does not throw (it parses with scheme `localhost:` and
119
+ * an empty host), so it classifies as `other` and gets Chat Completions.
120
+ */
121
+ function usesChatCompletions(baseURL) {
122
+ const trimmed = baseURL?.trim();
123
+ if (!trimmed) return false;
124
+ try {
125
+ new URL(trimmed);
126
+ } catch {
127
+ return false;
128
+ }
129
+ const host = classifyModelHost(trimmed, "openai");
130
+ return host !== "openai" && host !== "azure";
131
+ }
132
+ /** Whether the Chat Completions notice below was already logged. */
133
+ let loggedChatCompletionsRoute = false;
134
+ /**
135
+ * Which OpenAI API an `openai/...` model string targets.
136
+ *
137
+ * `COPILOTKIT_OPENAI_API` (`responses` or `chat`) wins when set, so a proxy in
138
+ * front of OpenAI can keep the Responses API, and an OpenAI host can use Chat
139
+ * Completions. Unset or blank, `usesChatCompletions` decides from
140
+ * `OPENAI_BASE_URL`.
141
+ *
142
+ * When that rule picks Chat Completions, this logs once per process. Through a
143
+ * proxy, Chat Completions drops Responses-only features (such as reasoning
144
+ * summaries) without an error, and the notice names the way back.
145
+ */
146
+ function openAIApiFor(baseURL) {
147
+ const raw = process.env.COPILOTKIT_OPENAI_API;
148
+ const override = raw?.trim().toLowerCase();
149
+ if (override === "responses" || override === "chat") return override;
150
+ if (override) throw new Error(`Invalid COPILOTKIT_OPENAI_API "${raw}". Use "responses" or "chat", or leave it unset.`);
151
+ if (!usesChatCompletions(baseURL)) return "responses";
152
+ if (!loggedChatCompletionsRoute) {
153
+ loggedChatCompletionsRoute = true;
154
+ console.info("[CopilotKit] OPENAI_BASE_URL is not an OpenAI or Azure host, so \"openai/...\" models use the Chat Completions API. To use the Responses API instead, set COPILOTKIT_OPENAI_API=responses.");
155
+ }
156
+ return "chat";
157
+ }
158
+ function resolveModel(spec, apiKey) {
159
+ if (typeof spec !== "string") return spec;
160
+ const { provider, model } = parseModelSpec(spec);
161
+ if (!provider) throw new Error(`Invalid model string "${spec}". Use "openai/gpt-5", "anthropic/claude-sonnet-4.5", or "google/gemini-3.8-flash".`);
162
+ if (!model) throw new Error(`Invalid model string "${spec}". Use "openai/gpt-5", "anthropic/claude-sonnet-4.5", or "google/gemini-3.8-flash".`);
163
+ switch (provider) {
164
+ case "openai": {
165
+ const openai = createOpenAI({
166
+ apiKey: apiKey || process.env.OPENAI_API_KEY,
167
+ baseURL: process.env.OPENAI_BASE_URL
168
+ });
169
+ return openAIApiFor(process.env.OPENAI_BASE_URL) === "chat" ? openai.chat(model) : openai(model);
170
+ }
171
+ case "anthropic": return createAnthropic({
172
+ apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
173
+ baseURL: process.env.ANTHROPIC_BASE_URL
174
+ })(model);
175
+ case "google":
176
+ case "gemini":
177
+ case "google-gemini": return createGoogleGenerativeAI({
178
+ apiKey: apiKey || process.env.GOOGLE_API_KEY,
179
+ baseURL: process.env.GOOGLE_GENERATIVE_AI_BASE_URL
180
+ })(model);
181
+ case "minimax": return createOpenAI({
182
+ name: "minimax",
183
+ apiKey: apiKey || process.env.MINIMAX_API_KEY,
184
+ baseURL: process.env.MINIMAX_BASE_URL || "https://api.minimax.io/v1"
185
+ })(model);
186
+ case "vertex": return createVertex()(model);
187
+ default: throw new Error(`Unknown provider "${provider}" in "${spec}". Supported: openai, anthropic, google (gemini).`);
188
+ }
189
+ }
190
+ /**
191
+ * Which vendor a model specifier will actually reach, as a closed vocabulary.
192
+ *
193
+ * `resolveModel` above is the only place this runtime builds a provider, so it
194
+ * is the only place that knows the endpoint. Once built, the endpoint is gone:
195
+ * an AI SDK model's `provider` names only the wire API (`"openai.responses"`
196
+ * on OpenAI and Azure, `"openai.chat"` on any other host), so it cannot tell
197
+ * OpenRouter from a laptop, and its base URL survives
198
+ * only inside a closure that the public `LanguageModelV3` type does not
199
+ * expose. Azure's own migration guide tells customers to use that same OpenAI
200
+ * client, so the case we are blindest to is the common one.
201
+ *
202
+ * A caller who hands us an already-built LanguageModel gets `unknown`. Nobody
203
+ * can recover the host from it, and saying so is more useful than guessing
204
+ * `openai` from a provider label that means only "speaks the OpenAI wire".
205
+ *
206
+ * The branches below mirror `resolveModel`'s switch and must change with it.
207
+ * `model-host-class.test.ts` walks every provider that switch accepts and
208
+ * fails if one lands here as `unknown`.
209
+ */
210
+ function classifyModelSpec(spec) {
211
+ if (typeof spec !== "string") return "unknown";
212
+ const { provider } = parseModelSpec(spec);
213
+ switch (provider) {
214
+ case "openai": return classifyModelHost(process.env.OPENAI_BASE_URL, "openai");
215
+ case "anthropic": return classifyModelHost(process.env.ANTHROPIC_BASE_URL, "anthropic");
216
+ case "google":
217
+ case "gemini":
218
+ case "google-gemini": return classifyModelHost(process.env.GOOGLE_GENERATIVE_AI_BASE_URL, "google");
219
+ case "minimax": return classifyModelHost(process.env.MINIMAX_BASE_URL || "https://api.minimax.io/v1", "minimax");
220
+ case "vertex": return "vertex";
221
+ default: return "unknown";
222
+ }
223
+ }
224
+ /**
225
+ * Thrown by `AgentFactoryContext.interrupt()` on a fresh (non-resume) run to
226
+ * pause the factory. Caught in `runFactory` and translated into a RUN_FINISHED
227
+ * event carrying `outcome:{type:"interrupt",interrupts}`. Not a real error.
228
+ */
229
+ var InterruptSignal = class extends Error {
230
+ constructor(interrupts) {
231
+ super("CopilotKit interrupt: run paused awaiting human input");
232
+ this.interrupts = interrupts;
233
+ this.name = "InterruptSignal";
234
+ }
235
+ };
236
+ /**
237
+ * Define a tool for use with BuiltInAgent
238
+ * @param name - The name of the tool
239
+ * @param description - Description of what the tool does
240
+ * @param parameters - Schema for the tool's input parameters (any Standard Schema V1 compatible library: Zod, Valibot, ArkType, etc.)
241
+ * @param execute - Function to execute the tool server-side
242
+ * @returns Tool definition
243
+ */
244
+ function defineTool(config) {
245
+ return {
246
+ name: config.name,
247
+ description: config.description,
248
+ parameters: config.parameters,
249
+ execute: config.execute,
250
+ interrupt: config.interrupt,
251
+ interruptReason: config.interruptReason,
252
+ interruptMessage: config.interruptMessage
253
+ };
254
+ }
255
+ /**
256
+ * Converts AG-UI user message content to Vercel AI SDK UserContent format.
257
+ * Handles plain strings, new modality-specific parts (image/audio/video/document),
258
+ * and legacy BinaryInputContent for backward compatibility.
259
+ */
260
+ function convertUserMessageContent(content) {
261
+ if (!content) return "";
262
+ if (typeof content === "string") return content;
263
+ const parts = [];
264
+ for (const part of content) {
265
+ if (!part || typeof part !== "object" || !("type" in part)) continue;
266
+ switch (part.type) {
267
+ case "text": {
268
+ const text = part.text;
269
+ if (text) parts.push({
270
+ type: "text",
271
+ text
272
+ });
273
+ break;
274
+ }
275
+ case "image": {
276
+ const source = part.source;
277
+ if (!source) break;
278
+ if (source.type === "data") parts.push({
279
+ type: "image",
280
+ image: source.value,
281
+ mediaType: source.mimeType
282
+ });
283
+ else if (source.type === "file") warnDroppedFileSource("image part");
284
+ else if (source.type === "url") try {
285
+ parts.push({
286
+ type: "image",
287
+ image: new URL(source.value),
288
+ mediaType: source.mimeType
289
+ });
290
+ } catch {
291
+ console.error(`[CopilotKit] convertUserMessageContent: invalid URL "${source.value}" in image part — skipping`);
292
+ }
293
+ break;
294
+ }
295
+ case "audio":
296
+ case "video":
297
+ case "document": {
298
+ const source = part.source;
299
+ if (!source) break;
300
+ if (source.type === "data") parts.push({
301
+ type: "file",
302
+ data: source.value,
303
+ mediaType: source.mimeType
304
+ });
305
+ else if (source.type === "file") warnDroppedFileSource(`${part.type} part`);
306
+ else if (source.type === "url") try {
307
+ parts.push({
308
+ type: "file",
309
+ data: new URL(source.value),
310
+ mediaType: source.mimeType ?? "application/octet-stream"
311
+ });
312
+ } catch {
313
+ console.error(`[CopilotKit] convertUserMessageContent: invalid URL "${source.value}" in ${part.type} part — skipping`);
314
+ }
315
+ break;
316
+ }
317
+ case "binary": {
318
+ const legacy = part;
319
+ const mimeType = legacy.mimeType ?? "application/octet-stream";
320
+ const isImage = mimeType.startsWith("image/");
321
+ if (legacy.data) if (isImage) parts.push({
322
+ type: "image",
323
+ image: legacy.data,
324
+ mediaType: mimeType
325
+ });
326
+ else parts.push({
327
+ type: "file",
328
+ data: legacy.data,
329
+ mediaType: mimeType
330
+ });
331
+ else if (legacy.url) try {
332
+ const url = new URL(legacy.url);
333
+ if (isImage) parts.push({
334
+ type: "image",
335
+ image: url,
336
+ mediaType: mimeType
337
+ });
338
+ else parts.push({
339
+ type: "file",
340
+ data: url,
341
+ mediaType: mimeType
342
+ });
343
+ } catch {
344
+ console.error(`[CopilotKit] convertUserMessageContent: invalid URL "${legacy.url}" in binary part — skipping`);
345
+ }
346
+ break;
347
+ }
348
+ default:
349
+ console.error(`[CopilotKit] convertUserMessageContent: unrecognized content part type "${part.type}" — skipping`);
350
+ break;
351
+ }
352
+ }
353
+ return parts.length > 0 ? parts : "";
354
+ }
355
+ /**
356
+ * Converts AG-UI messages to Vercel AI SDK ModelMessage format
357
+ */
358
+ function convertMessagesToVercelAISDKMessages(messages, options = {}) {
359
+ const result = [];
360
+ for (const message of messages) if (message.role === "system" && options.forwardSystemMessages) {
361
+ const systemMsg = {
362
+ role: "system",
363
+ content: message.content ?? ""
364
+ };
365
+ result.push(systemMsg);
366
+ } else if (message.role === "developer" && options.forwardDeveloperMessages) {
367
+ const systemMsg = {
368
+ role: "system",
369
+ content: message.content ?? ""
370
+ };
371
+ result.push(systemMsg);
372
+ } else if (message.role === "assistant") {
373
+ const parts = message.content ? [{
374
+ type: "text",
375
+ text: message.content
376
+ }] : [];
377
+ for (const toolCall of message.toolCalls ?? []) {
378
+ const toolCallPart = {
379
+ type: "tool-call",
380
+ toolCallId: toolCall.id,
381
+ toolName: toolCall.function.name,
382
+ input: safeParseToolArgs(toolCall.function.arguments)
383
+ };
384
+ parts.push(toolCallPart);
385
+ }
386
+ const assistantMsg = {
387
+ role: "assistant",
388
+ content: parts
389
+ };
390
+ result.push(assistantMsg);
391
+ } else if (message.role === "user") {
392
+ const userMsg = {
393
+ role: "user",
394
+ content: convertUserMessageContent(message.content)
395
+ };
396
+ result.push(userMsg);
397
+ } else if (message.role === "tool") {
398
+ let toolName = "unknown";
399
+ for (const msg of messages) if (msg.role === "assistant") {
400
+ for (const toolCall of msg.toolCalls ?? []) if (toolCall.id === message.toolCallId) {
401
+ toolName = toolCall.function.name;
402
+ break;
403
+ }
404
+ }
405
+ const toolMsg = {
406
+ role: "tool",
407
+ content: [{
408
+ type: "tool-result",
409
+ toolCallId: message.toolCallId,
410
+ toolName,
411
+ output: toolResultOutput(message.content)
412
+ }]
413
+ };
414
+ result.push(toolMsg);
415
+ }
416
+ return result;
417
+ }
418
+ /**
419
+ * Converts JSON Schema to Zod schema
420
+ */
421
+ function convertJsonSchemaToZodSchema(jsonSchema, required) {
422
+ if (jsonSchema.type === "null") {
423
+ const schema = z.null().describe(jsonSchema.description ?? "");
424
+ return required ? schema : schema.optional();
425
+ }
426
+ const unionVariants = jsonSchema.anyOf ?? jsonSchema.oneOf;
427
+ if (Array.isArray(unionVariants) && unionVariants.length > 0) {
428
+ if (unionVariants.length === 1) return convertJsonSchemaToZodSchema(unionVariants[0], required);
429
+ const variantSchemas = unionVariants.map((variant) => convertJsonSchemaToZodSchema(variant, true));
430
+ const schema = z.union(variantSchemas).describe(jsonSchema.description ?? "");
431
+ return required ? schema : schema.optional();
432
+ }
433
+ if (!jsonSchema.type) return required ? z.object({}) : z.object({}).optional();
434
+ if (jsonSchema.type === "object") {
435
+ const spec = {};
436
+ if (!jsonSchema.properties || !Object.keys(jsonSchema.properties).length) return !required ? z.object(spec).optional() : z.object(spec);
437
+ for (const [key, value] of Object.entries(jsonSchema.properties)) spec[key] = convertJsonSchemaToZodSchema(value, jsonSchema.required ? jsonSchema.required.includes(key) : false);
438
+ const schema = z.object(spec).describe(jsonSchema.description ?? "");
439
+ return required ? schema : schema.optional();
440
+ } else if (jsonSchema.type === "string") {
441
+ if (jsonSchema.enum && jsonSchema.enum.length > 0) {
442
+ const schema = z.enum(jsonSchema.enum).describe(jsonSchema.description ?? "");
443
+ return required ? schema : schema.optional();
444
+ }
445
+ const schema = z.string().describe(jsonSchema.description ?? "");
446
+ return required ? schema : schema.optional();
447
+ } else if (jsonSchema.type === "number" || jsonSchema.type === "integer") {
448
+ const schema = z.number().describe(jsonSchema.description ?? "");
449
+ return required ? schema : schema.optional();
450
+ } else if (jsonSchema.type === "boolean") {
451
+ const schema = z.boolean().describe(jsonSchema.description ?? "");
452
+ return required ? schema : schema.optional();
453
+ } else if (jsonSchema.type === "array") {
454
+ if (!jsonSchema.items) throw new Error("Array type must have items property");
455
+ const itemSchema = convertJsonSchemaToZodSchema(jsonSchema.items, true);
456
+ const schema = z.array(itemSchema).describe(jsonSchema.description ?? "");
457
+ return required ? schema : schema.optional();
458
+ }
459
+ console.error("Invalid JSON schema:", JSON.stringify(jsonSchema, null, 2));
460
+ throw new Error("Invalid JSON schema");
461
+ }
462
+ /**
463
+ * Converts AG-UI tools to Vercel AI SDK ToolSet
464
+ */
465
+ function isJsonSchema(obj) {
466
+ if (typeof obj !== "object" || obj === null) return false;
467
+ const schema = obj;
468
+ if (Object.keys(schema).length === 0) return true;
469
+ return typeof schema.type === "string" && [
470
+ "object",
471
+ "string",
472
+ "number",
473
+ "integer",
474
+ "boolean",
475
+ "array"
476
+ ].includes(schema.type);
477
+ }
478
+ /**
479
+ * Type-only pass-through for handing a Zod schema to the AI SDK's `tool()`.
480
+ * The raw Zod schema is returned unchanged at runtime — the SDK's `asSchema()`
481
+ * converts and validates it internally exactly as before.
482
+ *
483
+ * The Zod type is erased through `unknown` deliberately: letting tsc relate
484
+ * Zod schema types to the AI SDK's `FlexibleSchema` union (conditional types
485
+ * spanning zod v3/v4) makes type instantiation explode (TS2589 / compiler
486
+ * OOM) under this package's `moduleResolution: node`.
487
+ */
488
+ function toLanguageModelSchema(schema) {
489
+ return schema;
490
+ }
491
+ /** Preserve AG-UI tool schemas when passing them to the model provider. */
492
+ function convertToolsToVercelAITools(tools) {
493
+ const result = {};
494
+ for (const tool$1 of tools) {
495
+ if (!isJsonSchema(tool$1.parameters)) throw new Error(`Invalid JSON schema for tool ${tool$1.name}`);
496
+ const validator = new Validator(tool$1.parameters, "7");
497
+ result[tool$1.name] = tool({
498
+ description: tool$1.description,
499
+ inputSchema: jsonSchema(tool$1.parameters, { validate: (value) => {
500
+ return validator.validate(value).valid ? {
501
+ success: true,
502
+ value
503
+ } : {
504
+ success: false,
505
+ error: /* @__PURE__ */ new Error(`Invalid arguments for tool ${tool$1.name}`)
506
+ };
507
+ } }),
508
+ ...tool$1.name === RENDER_A2UI_TOOL.name ? { strict: false } : {}
509
+ });
510
+ }
511
+ return result;
512
+ }
513
+ /**
514
+ * Check whether a schema is a Zod schema by inspecting its Standard Schema vendor.
515
+ */
516
+ function isZodSchema(schema) {
517
+ return schema["~standard"]?.vendor === "zod";
518
+ }
519
+ /**
520
+ * Converts ToolDefinition array to Vercel AI SDK ToolSet.
521
+ *
522
+ * For Zod schemas, passes them directly to the AI SDK (Zod satisfies FlexibleSchema).
523
+ * For non-Zod schemas, converts to JSON Schema via schemaToJsonSchema() and wraps
524
+ * with the AI SDK's jsonSchema() helper.
525
+ */
526
+ function convertToolDefinitionsToVercelAITools(tools) {
527
+ const result = {};
528
+ for (const tool$2 of tools) if (isZodSchema(tool$2.parameters)) result[tool$2.name] = tool({
529
+ description: tool$2.description,
530
+ inputSchema: tool$2.parameters,
531
+ execute: tool$2.execute
532
+ });
533
+ else {
534
+ const jsonSchemaObj = schemaToJsonSchema(tool$2.parameters);
535
+ result[tool$2.name] = tool({
536
+ description: tool$2.description,
537
+ inputSchema: jsonSchema(jsonSchemaObj),
538
+ execute: tool$2.execute
539
+ });
540
+ }
541
+ return result;
542
+ }
543
+ /**
544
+ * Type guard: returns true if this is a factory-mode config.
545
+ */
546
+ function isFactoryConfig(config) {
547
+ return "factory" in config;
548
+ }
549
+ var BuiltInAgent = class BuiltInAgent extends AbstractAgent {
550
+ constructor(config) {
551
+ super();
552
+ this.config = config;
553
+ if (!isFactoryConfig(config)) this.urlDownload = resolveUrlDownloadSetting(config.urlDownload);
554
+ else if ("urlDownload" in config) throw new Error("BuiltInAgent: urlDownload has no effect in factory mode. Pass experimental_download: createSafeUrlDownload({ signal: ctx.abortSignal }) (from @copilotkit/runtime) to your own streamText() call instead.");
555
+ this.skillRegistry = config.learnedSkills === void 0 ? void 0 : new SkillRegistry(config.learnedSkills);
556
+ this.modelHostClass = isFactoryConfig(config) ? "unknown" : classifyModelSpec(config.model);
557
+ }
558
+ /**
559
+ * Check if a property can be overridden by forwardedProps
560
+ */
561
+ canOverride(property) {
562
+ if (isFactoryConfig(this.config)) return false;
563
+ return this.config?.overridableProperties?.includes(property) ?? false;
564
+ }
565
+ async getCapabilities() {
566
+ const inferred = {
567
+ tools: {
568
+ supported: true,
569
+ clientProvided: true
570
+ },
571
+ transport: { streaming: true },
572
+ humanInTheLoop: { interrupts: true }
573
+ };
574
+ const capabilities = isFactoryConfig(this.config) ? void 0 : this.config.capabilities;
575
+ if (!capabilities) return inferred;
576
+ return {
577
+ ...inferred,
578
+ ...capabilities
579
+ };
580
+ }
581
+ run(input) {
582
+ if (isFactoryConfig(this.config)) return this.runFactory(input, this.config);
583
+ const config = this.config;
584
+ if (this.abortController) throw new Error("Agent is already running. Call abortRun() first or create a new instance.");
585
+ this.abortController = new AbortController();
586
+ const abortController = this.abortController;
587
+ return new Observable((subscriber) => {
588
+ const startEvent = {
589
+ type: EventType.RUN_STARTED,
590
+ threadId: input.threadId,
591
+ runId: input.runId,
592
+ protocolVersion: PROTOCOL_VERSION
593
+ };
594
+ subscriber.next(startEvent);
595
+ const model = resolveModel(config.model, config.apiKey);
596
+ let systemPrompt = void 0;
597
+ const hasPrompt = !!config.prompt;
598
+ const hasContext = input.context && input.context.length > 0;
599
+ const hasState = input.state !== void 0 && input.state !== null && !(typeof input.state === "object" && Object.keys(input.state).length === 0);
600
+ if (hasPrompt || hasContext || hasState) {
601
+ const parts = [];
602
+ if (hasPrompt) parts.push(config.prompt);
603
+ if (hasContext) {
604
+ parts.push("\n## Context from the application\n");
605
+ for (const ctx of input.context) parts.push(`${ctx.description}:\n${ctx.value}\n`);
606
+ }
607
+ if (hasState) parts.push(`
608
+ ## Application State
609
+ This is state from the application that you can edit by calling AGUISendStateSnapshot or AGUISendStateDelta.
610
+ \`\`\`json\n${JSON.stringify(input.state, null, 2)}\n\`\`\`\n`);
611
+ systemPrompt = parts.join("");
612
+ }
613
+ const systemMessages = [];
614
+ if (systemPrompt) systemMessages.push({
615
+ role: "system",
616
+ content: systemPrompt
617
+ });
618
+ const messages = convertMessagesToVercelAISDKMessages(input.messages, {
619
+ forwardSystemMessages: config.forwardSystemMessages,
620
+ forwardDeveloperMessages: config.forwardDeveloperMessages
621
+ });
622
+ const resumeEntries = input.resume ?? [];
623
+ if (resumeEntries.length > 0) {
624
+ const toolNameById = /* @__PURE__ */ new Map();
625
+ for (const m of input.messages) {
626
+ if (m.role !== "assistant") continue;
627
+ for (const tc of m.toolCalls ?? []) if (tc.id && tc.function?.name) toolNameById.set(tc.id, tc.function.name);
628
+ }
629
+ const alreadyAnswered = /* @__PURE__ */ new Set();
630
+ for (const m of messages) {
631
+ if (m.role !== "tool" || !Array.isArray(m.content)) continue;
632
+ for (const part of m.content) if (part && typeof part === "object" && "toolCallId" in part) alreadyAnswered.add(part.toolCallId);
633
+ }
634
+ for (const entry of resumeEntries) {
635
+ if (alreadyAnswered.has(entry.interruptId)) continue;
636
+ const value = entry.status === "cancelled" ? { status: "cancelled" } : entry.payload ?? { status: "resolved" };
637
+ const toolResultMessage = {
638
+ role: "tool",
639
+ content: [{
640
+ type: "tool-result",
641
+ toolCallId: entry.interruptId,
642
+ toolName: toolNameById.get(entry.interruptId) ?? "",
643
+ output: {
644
+ type: "json",
645
+ value
646
+ }
647
+ }]
648
+ };
649
+ messages.push(toolResultMessage);
650
+ }
651
+ }
652
+ let allTools = convertToolsToVercelAITools(input.tools);
653
+ if (config.tools && config.tools.length > 0) {
654
+ const configTools = convertToolDefinitionsToVercelAITools(config.tools);
655
+ allTools = {
656
+ ...allTools,
657
+ ...configTools
658
+ };
659
+ }
660
+ const streamTextParams = {
661
+ model,
662
+ messages,
663
+ tools: allTools,
664
+ toolChoice: config.toolChoice,
665
+ stopWhen: config.maxSteps ? stepCountIs(config.maxSteps) : void 0,
666
+ maxOutputTokens: config.maxOutputTokens,
667
+ temperature: config.temperature,
668
+ topP: config.topP,
669
+ topK: config.topK,
670
+ presencePenalty: config.presencePenalty,
671
+ frequencyPenalty: config.frequencyPenalty,
672
+ stopSequences: config.stopSequences,
673
+ seed: config.seed,
674
+ providerOptions: config.providerOptions,
675
+ maxRetries: config.maxRetries,
676
+ experimental_download: this.urlDownload?.(abortController.signal)
677
+ };
678
+ if (input.forwardedProps && typeof input.forwardedProps === "object") {
679
+ const props = input.forwardedProps;
680
+ if (props.model !== void 0 && this.canOverride("model")) {
681
+ if (typeof props.model === "string" || typeof props.model === "object") streamTextParams.model = resolveModel(props.model, config.apiKey);
682
+ }
683
+ if (props.toolChoice !== void 0 && this.canOverride("toolChoice")) {
684
+ const toolChoice = props.toolChoice;
685
+ if (toolChoice === "auto" || toolChoice === "required" || toolChoice === "none" || typeof toolChoice === "object" && toolChoice !== null && "type" in toolChoice && toolChoice.type === "tool") streamTextParams.toolChoice = toolChoice;
686
+ }
687
+ if (typeof props.maxOutputTokens === "number" && this.canOverride("maxOutputTokens")) streamTextParams.maxOutputTokens = props.maxOutputTokens;
688
+ if (typeof props.temperature === "number" && this.canOverride("temperature")) streamTextParams.temperature = props.temperature;
689
+ if (typeof props.topP === "number" && this.canOverride("topP")) streamTextParams.topP = props.topP;
690
+ if (typeof props.topK === "number" && this.canOverride("topK")) streamTextParams.topK = props.topK;
691
+ if (typeof props.presencePenalty === "number" && this.canOverride("presencePenalty")) streamTextParams.presencePenalty = props.presencePenalty;
692
+ if (typeof props.frequencyPenalty === "number" && this.canOverride("frequencyPenalty")) streamTextParams.frequencyPenalty = props.frequencyPenalty;
693
+ if (Array.isArray(props.stopSequences) && this.canOverride("stopSequences")) {
694
+ if (props.stopSequences.every((item) => typeof item === "string")) streamTextParams.stopSequences = props.stopSequences;
695
+ }
696
+ if (typeof props.seed === "number" && this.canOverride("seed")) streamTextParams.seed = props.seed;
697
+ if (typeof props.maxRetries === "number" && this.canOverride("maxRetries")) streamTextParams.maxRetries = props.maxRetries;
698
+ if (props.providerOptions !== void 0 && this.canOverride("providerOptions")) {
699
+ if (typeof props.providerOptions === "object" && props.providerOptions !== null) streamTextParams.providerOptions = props.providerOptions;
700
+ }
701
+ }
702
+ const mcpClients = [];
703
+ (async () => {
704
+ let terminalEventEmitted = false;
705
+ let messageId = randomUUID();
706
+ let reasoningMessageId = randomUUID();
707
+ let isInReasoning = false;
708
+ const closeReasoningIfOpen = () => {
709
+ if (!isInReasoning) return;
710
+ isInReasoning = false;
711
+ const reasoningMsgEnd = {
712
+ type: EventType.REASONING_MESSAGE_END,
713
+ messageId: reasoningMessageId
714
+ };
715
+ subscriber.next(reasoningMsgEnd);
716
+ const reasoningEnd = {
717
+ type: EventType.REASONING_END,
718
+ messageId: reasoningMessageId
719
+ };
720
+ subscriber.next(reasoningEnd);
721
+ };
722
+ try {
723
+ const learnedSkills = await prepareLearnedSkills(this.skillRegistry, abortController.signal);
724
+ abortController.signal.throwIfAborted();
725
+ if (learnedSkills.catalog) {
726
+ systemMessages.unshift({
727
+ role: "system",
728
+ content: learnedSkills.catalog
729
+ });
730
+ if (config.maxSteps === void 0) streamTextParams.stopWhen = stepCountIs(10);
731
+ }
732
+ streamTextParams.tools = {
733
+ ...streamTextParams.tools,
734
+ AGUISendStateSnapshot: tool({
735
+ description: "Replace the entire application state with a new snapshot",
736
+ inputSchema: toLanguageModelSchema(z.object({ snapshot: z.any().describe("The complete new state object") })),
737
+ execute: async ({ snapshot }) => {
738
+ return {
739
+ success: true,
740
+ snapshot
741
+ };
742
+ }
743
+ }),
744
+ AGUISendStateDelta: tool({
745
+ description: "Apply incremental updates to application state using JSON Patch operations",
746
+ inputSchema: toLanguageModelSchema(z.object({ delta: z.array(z.object({
747
+ op: z.enum([
748
+ "add",
749
+ "replace",
750
+ "remove"
751
+ ]).describe("The operation to perform"),
752
+ path: z.string().describe("JSON Pointer path (e.g., '/foo/bar')"),
753
+ value: z.any().optional().describe("The value to set. Required for 'add' and 'replace' operations, ignored for 'remove'.")
754
+ })).describe("Array of JSON Patch operations") })),
755
+ execute: async ({ delta }) => {
756
+ return {
757
+ success: true,
758
+ delta
759
+ };
760
+ }
761
+ })
762
+ };
763
+ const mcpToolSources = [];
764
+ const userMcpClients = config.mcpClients ?? [];
765
+ for (const [index, client] of userMcpClients.entries()) {
766
+ const mcpTools = await client.tools();
767
+ abortController.signal.throwIfAborted();
768
+ mcpToolSources.push({
769
+ label: `mcp${index + 1}`,
770
+ tools: mcpTools
771
+ });
772
+ }
773
+ const allMcpServers = [...config.mcpServers ?? []];
774
+ if (allMcpServers.length > 0) for (const [index, serverConfig] of allMcpServers.entries()) {
775
+ const label = serverConfig.name ? toToolNamePrefix(serverConfig.name) : `mcp${userMcpClients.length + index + 1}`;
776
+ let transport;
777
+ if (serverConfig.type === "http") transport = new StreamableHTTPClientTransport(new URL(serverConfig.url), serverConfig.options);
778
+ else if (serverConfig.type === "sse") {
779
+ const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js");
780
+ abortController.signal.throwIfAborted();
781
+ transport = new SSEClientTransport(new URL(serverConfig.url), serverConfig.headers ? { requestInit: { headers: serverConfig.headers } } : void 0);
782
+ }
783
+ if (transport) {
784
+ let mcpClient;
785
+ try {
786
+ mcpClient = await createMCPClient({ transport });
787
+ } catch (err) {
788
+ abortController.signal.throwIfAborted();
789
+ console.error(`[CopilotKit] MCP server ${describeEndpoint(serverConfig.url)} failed to connect — skipping it for this run:`, err);
790
+ continue;
791
+ }
792
+ if (abortController.signal.aborted) {
793
+ await mcpClient.close();
794
+ abortController.signal.throwIfAborted();
795
+ }
796
+ mcpClients.push(mcpClient);
797
+ try {
798
+ const mcpTools = await mcpClient.tools();
799
+ abortController.signal.throwIfAborted();
800
+ mcpToolSources.push({
801
+ label,
802
+ tools: mcpTools
803
+ });
804
+ } catch (err) {
805
+ abortController.signal.throwIfAborted();
806
+ console.error(`[CopilotKit] MCP server ${describeEndpoint(serverConfig.url)} tools() failed — skipping its tools for this run:`, err);
807
+ }
808
+ }
809
+ }
810
+ if (mcpToolSources.length > 0) streamTextParams.tools = mergeMCPTools(streamTextParams.tools ?? {}, mcpToolSources);
811
+ if (this.skillRegistry) {
812
+ assertNoSkillToolConflicts(streamTextParams.tools ?? {});
813
+ streamTextParams.tools = {
814
+ ...streamTextParams.tools,
815
+ ...learnedSkills.tools
816
+ };
817
+ }
818
+ abortController.signal.throwIfAborted();
819
+ const response = streamText({
820
+ ...streamTextParams,
821
+ ...messages.length > 0 ? { system: systemMessages.length > 0 ? systemMessages : void 0 } : { messages: systemMessages },
822
+ abortSignal: abortController.signal,
823
+ onError: ({ error }) => logModelCallError(error)
824
+ });
825
+ const interruptToolNames = new Set((isFactoryConfig(this.config) ? [] : this.config.tools ?? []).filter((t) => t.interrupt).map((t) => t.name));
826
+ const interruptToolMeta = new Map((isFactoryConfig(this.config) ? [] : this.config.tools ?? []).filter((t) => t.interrupt).map((t) => [t.name, {
827
+ reason: t.interruptReason ?? "tool_call",
828
+ message: t.interruptMessage
829
+ }]));
830
+ const pendingInterrupts = [];
831
+ const normalizeStateEvent = createStateEventNormalizer(input.state);
832
+ const toolCallStates = /* @__PURE__ */ new Map();
833
+ const ensureToolCallState = (toolCallId) => {
834
+ let state = toolCallStates.get(toolCallId);
835
+ if (!state) {
836
+ state = {
837
+ started: false,
838
+ hasArgsDelta: false,
839
+ ended: false
840
+ };
841
+ toolCallStates.set(toolCallId, state);
842
+ }
843
+ return state;
844
+ };
845
+ const warnedUnknownPartTypes = /* @__PURE__ */ new Set();
846
+ for await (const part of response.fullStream) {
847
+ if (part.type !== "reasoning-delta") closeReasoningIfOpen();
848
+ switch (part.type) {
849
+ case "abort": {
850
+ const abortEndEvent = {
851
+ type: EventType.RUN_FINISHED,
852
+ threadId: input.threadId,
853
+ runId: input.runId,
854
+ ...input.protocolVersion !== void 0 ? { outcome: { type: "cancelled" } } : {}
855
+ };
856
+ subscriber.next(abortEndEvent);
857
+ terminalEventEmitted = true;
858
+ subscriber.complete();
859
+ break;
860
+ }
861
+ case "reasoning-start": {
862
+ reasoningMessageId = resolveStreamPartMessageId("id" in part ? part.id : void 0);
863
+ const reasoningStartEvent = {
864
+ type: EventType.REASONING_START,
865
+ messageId: reasoningMessageId
866
+ };
867
+ subscriber.next(reasoningStartEvent);
868
+ const reasoningMessageStart = {
869
+ type: EventType.REASONING_MESSAGE_START,
870
+ messageId: reasoningMessageId,
871
+ role: "reasoning"
872
+ };
873
+ subscriber.next(reasoningMessageStart);
874
+ isInReasoning = true;
875
+ break;
876
+ }
877
+ case "reasoning-delta": {
878
+ const delta = part.text ?? "";
879
+ if (!delta) break;
880
+ const reasoningDeltaEvent = {
881
+ type: EventType.REASONING_MESSAGE_CONTENT,
882
+ messageId: reasoningMessageId,
883
+ delta
884
+ };
885
+ subscriber.next(reasoningDeltaEvent);
886
+ break;
887
+ }
888
+ case "reasoning-end": break;
889
+ case "tool-input-start": {
890
+ const toolCallId = part.id;
891
+ const state = ensureToolCallState(toolCallId);
892
+ state.toolName = part.toolName;
893
+ if (!state.started) {
894
+ state.started = true;
895
+ const startEvent = {
896
+ type: EventType.TOOL_CALL_START,
897
+ parentMessageId: messageId,
898
+ toolCallId,
899
+ toolCallName: part.toolName
900
+ };
901
+ subscriber.next(startEvent);
902
+ }
903
+ break;
904
+ }
905
+ case "tool-input-delta": {
906
+ const toolCallId = part.id;
907
+ const state = ensureToolCallState(toolCallId);
908
+ state.hasArgsDelta = true;
909
+ const argsEvent = {
910
+ type: EventType.TOOL_CALL_ARGS,
911
+ toolCallId,
912
+ delta: part.delta
913
+ };
914
+ subscriber.next(argsEvent);
915
+ break;
916
+ }
917
+ case "tool-input-end": break;
918
+ case "text-start":
919
+ messageId = resolveStreamPartMessageId("id" in part ? part.id : void 0);
920
+ break;
921
+ case "text-delta": {
922
+ const textDelta = "text" in part ? part.text : "";
923
+ const textEvent = {
924
+ type: EventType.TEXT_MESSAGE_CHUNK,
925
+ role: "assistant",
926
+ messageId,
927
+ delta: textDelta
928
+ };
929
+ subscriber.next(textEvent);
930
+ break;
931
+ }
932
+ case "tool-call": {
933
+ const toolCallId = part.toolCallId;
934
+ const state = ensureToolCallState(toolCallId);
935
+ state.toolName = part.toolName ?? state.toolName;
936
+ if (!state.started) {
937
+ state.started = true;
938
+ const startEvent = {
939
+ type: EventType.TOOL_CALL_START,
940
+ parentMessageId: messageId,
941
+ toolCallId,
942
+ toolCallName: part.toolName
943
+ };
944
+ subscriber.next(startEvent);
945
+ }
946
+ if (!state.hasArgsDelta && "input" in part && part.input !== void 0) {
947
+ let serializedInput = "";
948
+ if (typeof part.input === "string") serializedInput = part.input;
949
+ else try {
950
+ serializedInput = JSON.stringify(part.input);
951
+ } catch {
952
+ serializedInput = String(part.input);
953
+ }
954
+ if (serializedInput.length > 0) {
955
+ const argsEvent = {
956
+ type: EventType.TOOL_CALL_ARGS,
957
+ toolCallId,
958
+ delta: serializedInput
959
+ };
960
+ subscriber.next(argsEvent);
961
+ state.hasArgsDelta = true;
962
+ }
963
+ }
964
+ if (!state.ended) {
965
+ state.ended = true;
966
+ const endEvent = {
967
+ type: EventType.TOOL_CALL_END,
968
+ toolCallId
969
+ };
970
+ subscriber.next(endEvent);
971
+ }
972
+ if (state.toolName && interruptToolNames.has(state.toolName)) {
973
+ const meta = interruptToolMeta.get(state.toolName);
974
+ pendingInterrupts.push({
975
+ id: toolCallId,
976
+ toolCallId,
977
+ reason: meta?.reason ?? "tool_call",
978
+ ...meta?.message ? { message: meta.message } : {}
979
+ });
980
+ }
981
+ break;
982
+ }
983
+ case "tool-result": {
984
+ const toolName = "toolName" in part && part.toolName || toolCallStates.get(part.toolCallId)?.toolName || "";
985
+ if (toolName && interruptToolNames.has(toolName)) {
986
+ toolCallStates.delete(part.toolCallId);
987
+ break;
988
+ }
989
+ const legacyPart = part;
990
+ const toolResult = "output" in part ? part.output : "result" in legacyPart ? legacyPart.result : null;
991
+ toolCallStates.delete(part.toolCallId);
992
+ if (toolName === "AGUISendStateSnapshot" && toolResult && typeof toolResult === "object") {
993
+ const snapshot = toolResult.snapshot;
994
+ if (snapshot !== void 0) {
995
+ const stateSnapshotEvent = {
996
+ type: EventType.STATE_SNAPSHOT,
997
+ snapshot
998
+ };
999
+ for (const event of normalizeStateEvent(stateSnapshotEvent)) subscriber.next(event);
1000
+ }
1001
+ } else if (toolName === "AGUISendStateDelta" && toolResult && typeof toolResult === "object") {
1002
+ const delta = toolResult.delta;
1003
+ if (delta !== void 0) {
1004
+ const stateDeltaEvent = {
1005
+ type: EventType.STATE_DELTA,
1006
+ delta
1007
+ };
1008
+ for (const event of normalizeStateEvent(stateDeltaEvent)) subscriber.next(event);
1009
+ }
1010
+ }
1011
+ let serializedResult;
1012
+ try {
1013
+ serializedResult = JSON.stringify(toolResult);
1014
+ } catch {
1015
+ serializedResult = `[Unserializable tool result from ${toolName || part.toolCallId}]`;
1016
+ }
1017
+ const resultEvent = {
1018
+ type: EventType.TOOL_CALL_RESULT,
1019
+ role: "tool",
1020
+ messageId: randomUUID(),
1021
+ toolCallId: part.toolCallId,
1022
+ content: serializedResult
1023
+ };
1024
+ subscriber.next(resultEvent);
1025
+ break;
1026
+ }
1027
+ case "tool-error": {
1028
+ const toolCallId = part.toolCallId;
1029
+ const toolName = "toolName" in part && part.toolName || toolCallStates.get(toolCallId)?.toolName || "";
1030
+ if (toolName && interruptToolNames.has(toolName)) {
1031
+ toolCallStates.delete(toolCallId);
1032
+ break;
1033
+ }
1034
+ toolCallStates.delete(toolCallId);
1035
+ const resultEvent = {
1036
+ type: EventType.TOOL_CALL_RESULT,
1037
+ role: "tool",
1038
+ messageId: randomUUID(),
1039
+ toolCallId,
1040
+ content: `Error: ${formatToolError(part.error)}`
1041
+ };
1042
+ subscriber.next(resultEvent);
1043
+ break;
1044
+ }
1045
+ case "finish": {
1046
+ const model = streamTextParams.model;
1047
+ const finishedEvent = {
1048
+ type: EventType.RUN_FINISHED,
1049
+ threadId: input.threadId,
1050
+ runId: input.runId,
1051
+ ...getAISDKRunFinishedDetails(part, {
1052
+ provider: isRecord(model) ? getNonEmptyString(model.provider) : void 0,
1053
+ model: isRecord(model) ? getNonEmptyString(model.modelId) : void 0
1054
+ }),
1055
+ ...pendingInterrupts.length > 0 ? { outcome: {
1056
+ type: "interrupt",
1057
+ interrupts: pendingInterrupts
1058
+ } } : {}
1059
+ };
1060
+ subscriber.next(finishedEvent);
1061
+ terminalEventEmitted = true;
1062
+ subscriber.complete();
1063
+ break;
1064
+ }
1065
+ case "error": {
1066
+ if (abortController.signal.aborted) break;
1067
+ const err = part.error ?? ("message" in part ? part.message : void 0) ?? ("cause" in part ? part.cause : void 0);
1068
+ const runErrorEvent = {
1069
+ type: EventType.RUN_ERROR,
1070
+ message: err instanceof Error ? err.message : typeof err === "string" ? err : `AI SDK stream error: ${JSON.stringify(part)}`,
1071
+ threadId: input.threadId,
1072
+ runId: input.runId
1073
+ };
1074
+ subscriber.next(runErrorEvent);
1075
+ terminalEventEmitted = true;
1076
+ if (err instanceof Error) subscriber.error(err);
1077
+ else subscriber.error(new Error(typeof err === "string" ? err : `AI SDK stream error`));
1078
+ break;
1079
+ }
1080
+ case "start":
1081
+ case "start-step":
1082
+ case "finish-step":
1083
+ case "text-end":
1084
+ case "source":
1085
+ case "file":
1086
+ case "tool-output-denied":
1087
+ case "tool-approval-request":
1088
+ case "raw": break;
1089
+ default: {
1090
+ const _exhaustive = part;
1091
+ const unknownType = String(_exhaustive.type);
1092
+ if (!warnedUnknownPartTypes.has(unknownType)) {
1093
+ warnedUnknownPartTypes.add(unknownType);
1094
+ console.warn(`[BuiltInAgent] Ignoring unhandled AI SDK stream part: ${unknownType}`);
1095
+ }
1096
+ break;
1097
+ }
1098
+ }
1099
+ }
1100
+ if (!terminalEventEmitted) {
1101
+ closeReasoningIfOpen();
1102
+ if (abortController.signal.aborted) {} else {
1103
+ const finishedEvent = {
1104
+ type: EventType.RUN_FINISHED,
1105
+ threadId: input.threadId,
1106
+ runId: input.runId,
1107
+ ...pendingInterrupts.length > 0 ? { outcome: {
1108
+ type: "interrupt",
1109
+ interrupts: pendingInterrupts
1110
+ } } : {}
1111
+ };
1112
+ subscriber.next(finishedEvent);
1113
+ }
1114
+ terminalEventEmitted = true;
1115
+ subscriber.complete();
1116
+ }
1117
+ } catch (error) {
1118
+ closeReasoningIfOpen();
1119
+ if (abortController.signal.aborted) subscriber.complete();
1120
+ else {
1121
+ const runErrorEvent = {
1122
+ type: EventType.RUN_ERROR,
1123
+ message: error instanceof Error ? error.message : String(error),
1124
+ threadId: input.threadId,
1125
+ runId: input.runId
1126
+ };
1127
+ subscriber.next(runErrorEvent);
1128
+ terminalEventEmitted = true;
1129
+ subscriber.error(error);
1130
+ }
1131
+ } finally {
1132
+ if (this.abortController === abortController) this.abortController = void 0;
1133
+ await Promise.all(mcpClients.map((client) => client.close()));
1134
+ }
1135
+ })();
1136
+ return () => {
1137
+ abortController.abort();
1138
+ if (this.abortController === abortController) this.abortController = void 0;
1139
+ Promise.all(mcpClients.map((client) => client.close())).catch(() => {});
1140
+ };
1141
+ });
1142
+ }
1143
+ runFactory(input, config) {
1144
+ if (this.abortController) throw new Error("Agent is already running. Call abortRun() first or create a new instance.");
1145
+ this.abortController = new AbortController();
1146
+ const controller = this.abortController;
1147
+ return new Observable((subscriber) => {
1148
+ const startEvent = {
1149
+ type: EventType.RUN_STARTED,
1150
+ threadId: input.threadId,
1151
+ runId: input.runId,
1152
+ protocolVersion: PROTOCOL_VERSION
1153
+ };
1154
+ subscriber.next(startEvent);
1155
+ const ctx = {
1156
+ input,
1157
+ abortController: controller,
1158
+ abortSignal: controller.signal,
1159
+ interrupt: async (interrupts) => {
1160
+ const resume = input.resume ?? [];
1161
+ const ids = new Set(interrupts.map((i) => i.id));
1162
+ const matching = resume.filter((r) => ids.has(r.interruptId));
1163
+ if (interrupts.length > 0 && matching.length === interrupts.length) return matching;
1164
+ throw new InterruptSignal(interrupts);
1165
+ }
1166
+ };
1167
+ (async () => {
1168
+ const runFinishedDetails = {};
1169
+ try {
1170
+ const toolCallIds = new Set(input.messages.flatMap((message) => message.role === "assistant" ? (message.toolCalls ?? []).map((call) => call.id) : []));
1171
+ const answeredToolMessages = input.messages.filter((message) => message.role === "tool");
1172
+ const answeredToolCallIds = new Set(answeredToolMessages.map((message) => message.toolCallId));
1173
+ const nativeResume = config.type === "custom" ? [] : input.resume ?? [];
1174
+ const resumeToolMessages = [];
1175
+ const decisionsByCall = /* @__PURE__ */ new Map();
1176
+ for (const entry of nativeResume) {
1177
+ if (!toolCallIds.has(entry.interruptId)) continue;
1178
+ const content = JSON.stringify(entry.status === "cancelled" ? { status: "cancelled" } : entry.payload ?? { status: "resolved" });
1179
+ if (decisionsByCall.has(entry.interruptId)) {
1180
+ if (decisionsByCall.get(entry.interruptId) !== content) throw new Error(`Conflicting decisions for resumed tool call ${entry.interruptId}`);
1181
+ continue;
1182
+ }
1183
+ decisionsByCall.set(entry.interruptId, content);
1184
+ if (answeredToolCallIds.has(entry.interruptId)) continue;
1185
+ resumeToolMessages.push({
1186
+ id: randomUUID(),
1187
+ role: "tool",
1188
+ toolCallId: entry.interruptId,
1189
+ content
1190
+ });
1191
+ }
1192
+ const resumedIds = new Set(nativeResume.map((entry) => entry.interruptId));
1193
+ const resumedResults = new Map([...answeredToolMessages, ...resumeToolMessages].filter((message) => resumedIds.has(message.toolCallId)).map((message) => [message.toolCallId, message.content]));
1194
+ for (const message of resumeToolMessages) {
1195
+ const event = {
1196
+ type: EventType.TOOL_CALL_RESULT,
1197
+ messageId: message.id,
1198
+ toolCallId: message.toolCallId,
1199
+ role: "tool",
1200
+ content: message.content
1201
+ };
1202
+ subscriber.next(event);
1203
+ }
1204
+ const factoryInput = resumeToolMessages.length > 0 && config.type !== "custom" ? {
1205
+ ...input,
1206
+ messages: [...input.messages, ...resumeToolMessages]
1207
+ } : input;
1208
+ const learnedSkills = await prepareLearnedSkills(this.skillRegistry, controller.signal);
1209
+ controller.signal.throwIfAborted();
1210
+ const factoryCtx = {
1211
+ ...ctx,
1212
+ input: factoryInput,
1213
+ learnedSkills
1214
+ };
1215
+ let events;
1216
+ let customRunFinishedEvent;
1217
+ const pendingInterrupts = [];
1218
+ switch (config.type) {
1219
+ case "aisdk":
1220
+ events = convertAISDKStream((await config.factory(factoryCtx)).fullStream, controller.signal, pendingInterrupts, input.state, runFinishedDetails);
1221
+ break;
1222
+ case "tanstack":
1223
+ events = convertTanStackStream(await config.factory(factoryCtx), controller.signal, pendingInterrupts, input.state, runFinishedDetails);
1224
+ break;
1225
+ case "custom":
1226
+ events = await config.factory(factoryCtx);
1227
+ break;
1228
+ default: {
1229
+ const _exhaustive = config;
1230
+ throw new Error(`Unknown agent config type: ${_exhaustive.type}`);
1231
+ }
1232
+ }
1233
+ for await (const event of events) {
1234
+ if (event.type === EventType.TOOL_CALL_RESULT && "toolCallId" in event && typeof event.toolCallId === "string" && "content" in event && resumedResults.has(event.toolCallId)) {
1235
+ if (resumedResults.get(event.toolCallId) !== event.content) throw new Error(`Conflicting result for resumed tool call ${event.toolCallId}`);
1236
+ continue;
1237
+ }
1238
+ if (config.type === "custom" && event.type === EventType.RUN_FINISHED) {
1239
+ customRunFinishedEvent = event;
1240
+ collectStandardRunFinishedDetails(event, runFinishedDetails);
1241
+ continue;
1242
+ }
1243
+ subscriber.next(event);
1244
+ }
1245
+ if (pendingInterrupts.length > 0 && !controller.signal.aborted) throw new InterruptSignal(pendingInterrupts);
1246
+ if (!controller.signal.aborted) {
1247
+ const finishedEvent = {
1248
+ ...customRunFinishedEvent,
1249
+ type: EventType.RUN_FINISHED,
1250
+ threadId: input.threadId,
1251
+ runId: input.runId,
1252
+ ...runFinishedDetails
1253
+ };
1254
+ subscriber.next(finishedEvent);
1255
+ }
1256
+ subscriber.complete();
1257
+ } catch (error) {
1258
+ if (error instanceof InterruptSignal) {
1259
+ const finishedEvent = {
1260
+ type: EventType.RUN_FINISHED,
1261
+ threadId: input.threadId,
1262
+ runId: input.runId,
1263
+ ...runFinishedDetails,
1264
+ outcome: {
1265
+ type: "interrupt",
1266
+ interrupts: error.interrupts
1267
+ }
1268
+ };
1269
+ subscriber.next(finishedEvent);
1270
+ subscriber.complete();
1271
+ } else if (controller.signal.aborted) subscriber.complete();
1272
+ else {
1273
+ const runErrorEvent = {
1274
+ type: EventType.RUN_ERROR,
1275
+ message: error instanceof Error ? error.message : String(error),
1276
+ threadId: input.threadId,
1277
+ runId: input.runId
1278
+ };
1279
+ subscriber.next(runErrorEvent);
1280
+ subscriber.error(error);
1281
+ }
1282
+ } finally {
1283
+ if (this.abortController === controller) this.abortController = void 0;
1284
+ }
1285
+ })();
1286
+ return () => {
1287
+ controller.abort();
1288
+ if (this.abortController === controller) this.abortController = void 0;
1289
+ };
1290
+ });
1291
+ }
1292
+ clone() {
1293
+ const cloned = new BuiltInAgent({
1294
+ ...this.config,
1295
+ learnedSkills: void 0
1296
+ });
1297
+ cloned.config = this.config;
1298
+ cloned.skillRegistry = this.skillRegistry;
1299
+ cloned.middlewares = [...this.middlewares];
1300
+ return cloned;
1301
+ }
1302
+ abortRun() {
1303
+ this.abortController?.abort();
1304
+ }
1305
+ };
1306
+ /**
1307
+ * @deprecated Use BuiltInAgent instead
1308
+ */
1309
+ var BasicAgent = class extends BuiltInAgent {
1310
+ constructor(config) {
1311
+ super(config);
1312
+ console.warn("BasicAgent is deprecated, use BuiltInAgent instead");
1313
+ }
1314
+ };
1315
+
1316
+ //#endregion
1317
+ export { BasicAgent, BuiltInAgent, InterruptSignal, classifyModelSpec, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel };
1318
+ //# sourceMappingURL=index.mjs.map