@od-oneapp/ai-platform 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (872) hide show
  1. package/README.md +235 -0
  2. package/dist/agents-base.d.mts +12 -0
  3. package/dist/agents-base.d.mts.map +1 -0
  4. package/dist/agents-base.mjs +20 -0
  5. package/dist/agents-base.mjs.map +1 -0
  6. package/dist/agents-control-flow.d.mts +115 -0
  7. package/dist/agents-control-flow.d.mts.map +1 -0
  8. package/dist/agents-control-flow.mjs +514 -0
  9. package/dist/agents-control-flow.mjs.map +1 -0
  10. package/dist/agents-coordinator.d.mts +11 -0
  11. package/dist/agents-coordinator.d.mts.map +1 -0
  12. package/dist/agents-coordinator.mjs +12 -0
  13. package/dist/agents-coordinator.mjs.map +1 -0
  14. package/dist/agents-experimental.d.mts +153 -0
  15. package/dist/agents-experimental.d.mts.map +1 -0
  16. package/dist/agents-experimental.mjs +580 -0
  17. package/dist/agents-experimental.mjs.map +1 -0
  18. package/dist/agents-fallback.d.mts +10 -0
  19. package/dist/agents-fallback.d.mts.map +1 -0
  20. package/dist/agents-fallback.mjs +15 -0
  21. package/dist/agents-fallback.mjs.map +1 -0
  22. package/dist/agents-multi-swarm.d.mts +9 -0
  23. package/dist/agents-multi-swarm.d.mts.map +1 -0
  24. package/dist/agents-multi-swarm.mjs +44 -0
  25. package/dist/agents-multi-swarm.mjs.map +1 -0
  26. package/dist/agents-multi.d.mts +10 -0
  27. package/dist/agents-multi.d.mts.map +1 -0
  28. package/dist/agents-multi.mjs +44 -0
  29. package/dist/agents-multi.mjs.map +1 -0
  30. package/dist/agents-observability.d.mts +161 -0
  31. package/dist/agents-observability.d.mts.map +1 -0
  32. package/dist/agents-observability.mjs +550 -0
  33. package/dist/agents-observability.mjs.map +1 -0
  34. package/dist/agents-patterns.d.mts +9 -0
  35. package/dist/agents-patterns.d.mts.map +1 -0
  36. package/dist/agents-patterns.mjs +18 -0
  37. package/dist/agents-patterns.mjs.map +1 -0
  38. package/dist/agents-persistence.d.mts +234 -0
  39. package/dist/agents-persistence.d.mts.map +1 -0
  40. package/dist/agents-persistence.mjs +447 -0
  41. package/dist/agents-persistence.mjs.map +1 -0
  42. package/dist/agents-triage.d.mts +11 -0
  43. package/dist/agents-triage.d.mts.map +1 -0
  44. package/dist/agents-triage.mjs +13 -0
  45. package/dist/agents-triage.mjs.map +1 -0
  46. package/dist/agents-workflows.d.mts +9 -0
  47. package/dist/agents-workflows.d.mts.map +1 -0
  48. package/dist/agents-workflows.mjs +9 -0
  49. package/dist/agents-workflows.mjs.map +1 -0
  50. package/dist/agents.d.mts +30 -0
  51. package/dist/agents.d.mts.map +1 -0
  52. package/dist/agents.mjs +50 -0
  53. package/dist/agents.mjs.map +1 -0
  54. package/dist/aggregation-8KJF1uzp.d.mts +276 -0
  55. package/dist/aggregation-8KJF1uzp.d.mts.map +1 -0
  56. package/dist/aggregation-BDop87kL.mjs +1180 -0
  57. package/dist/aggregation-BDop87kL.mjs.map +1 -0
  58. package/dist/ai-runtime-CDzQztTt.mjs +85 -0
  59. package/dist/ai-runtime-CDzQztTt.mjs.map +1 -0
  60. package/dist/ai-runtime-DIwOEc6g.d.mts +56 -0
  61. package/dist/ai-runtime-DIwOEc6g.d.mts.map +1 -0
  62. package/dist/ai-sdk-error-integration-D0GDqrM0.d.mts +553 -0
  63. package/dist/ai-sdk-error-integration-D0GDqrM0.d.mts.map +1 -0
  64. package/dist/approval-queue-BcDDQ4oQ.mjs +104 -0
  65. package/dist/approval-queue-BcDDQ4oQ.mjs.map +1 -0
  66. package/dist/approval-queue-CiKiFT9z.d.mts +21 -0
  67. package/dist/approval-queue-CiKiFT9z.d.mts.map +1 -0
  68. package/dist/audio-BzvN7r10.d.mts +79 -0
  69. package/dist/audio-BzvN7r10.d.mts.map +1 -0
  70. package/dist/audio-vBG_62ME.mjs +226 -0
  71. package/dist/audio-vBG_62ME.mjs.map +1 -0
  72. package/dist/audit-logger-Bb2JIcIk.d.mts +12 -0
  73. package/dist/audit-logger-Bb2JIcIk.d.mts.map +1 -0
  74. package/dist/audit-logger-CHIP8bRO.mjs +596 -0
  75. package/dist/audit-logger-CHIP8bRO.mjs.map +1 -0
  76. package/dist/auto-resume-BpUNbPtp.d.mts +160 -0
  77. package/dist/auto-resume-BpUNbPtp.d.mts.map +1 -0
  78. package/dist/auto-resume-BuFRNvAX.mjs +638 -0
  79. package/dist/auto-resume-BuFRNvAX.mjs.map +1 -0
  80. package/dist/budget-guard-C83KCH9V.d.mts +52 -0
  81. package/dist/budget-guard-C83KCH9V.d.mts.map +1 -0
  82. package/dist/budget-guard-d_b5rq4u.mjs +158 -0
  83. package/dist/budget-guard-d_b5rq4u.mjs.map +1 -0
  84. package/dist/budget-guard-gyhJS00s.mjs +234 -0
  85. package/dist/budget-guard-gyhJS00s.mjs.map +1 -0
  86. package/dist/buffer-BC8mvXHE.d.mts +98 -0
  87. package/dist/buffer-BC8mvXHE.d.mts.map +1 -0
  88. package/dist/buffer-CefJGbRy.mjs +289 -0
  89. package/dist/buffer-CefJGbRy.mjs.map +1 -0
  90. package/dist/caching-adapters.d.mts +5 -0
  91. package/dist/caching-adapters.mjs +3 -0
  92. package/dist/caching-strategies.d.mts +52 -0
  93. package/dist/caching-strategies.d.mts.map +1 -0
  94. package/dist/caching-strategies.mjs +703 -0
  95. package/dist/caching-strategies.mjs.map +1 -0
  96. package/dist/caching.d.mts +14 -0
  97. package/dist/caching.d.mts.map +1 -0
  98. package/dist/caching.mjs +15 -0
  99. package/dist/caching.mjs.map +1 -0
  100. package/dist/catalog.d.mts +19 -0
  101. package/dist/catalog.d.mts.map +1 -0
  102. package/dist/catalog.mjs +1114 -0
  103. package/dist/catalog.mjs.map +1 -0
  104. package/dist/chunk-CkzbjWQW.mjs +20 -0
  105. package/dist/circuit-breaker-DoKWPORd.mjs +262 -0
  106. package/dist/circuit-breaker-DoKWPORd.mjs.map +1 -0
  107. package/dist/circuit-breaker-Mey3E7tW.d.mts +64 -0
  108. package/dist/circuit-breaker-Mey3E7tW.d.mts.map +1 -0
  109. package/dist/citation-generator-C-9RpbHq.mjs +103 -0
  110. package/dist/citation-generator-C-9RpbHq.mjs.map +1 -0
  111. package/dist/citation-generator-CDSymDs_.d.mts +18 -0
  112. package/dist/citation-generator-CDSymDs_.d.mts.map +1 -0
  113. package/dist/client-CpacYDIE.mjs +882 -0
  114. package/dist/client-CpacYDIE.mjs.map +1 -0
  115. package/dist/client.d.mts +103 -0
  116. package/dist/client.d.mts.map +1 -0
  117. package/dist/client.mjs +470 -0
  118. package/dist/client.mjs.map +1 -0
  119. package/dist/compliance-approval-queue-DQGLojAm.mjs +172 -0
  120. package/dist/compliance-approval-queue-DQGLojAm.mjs.map +1 -0
  121. package/dist/compliance-approval-queue-IrMxFfSJ.d.mts +99 -0
  122. package/dist/compliance-approval-queue-IrMxFfSJ.d.mts.map +1 -0
  123. package/dist/compliance-wrapper-CrOMHhHN.mjs +528 -0
  124. package/dist/compliance-wrapper-CrOMHhHN.mjs.map +1 -0
  125. package/dist/conditions-DmQ6Y1Wt.mjs +179 -0
  126. package/dist/conditions-DmQ6Y1Wt.mjs.map +1 -0
  127. package/dist/conditions-zDrKfrc3.d.mts +42 -0
  128. package/dist/conditions-zDrKfrc3.d.mts.map +1 -0
  129. package/dist/console-BGMxxPZN.mjs +181 -0
  130. package/dist/console-BGMxxPZN.mjs.map +1 -0
  131. package/dist/console-DqEqZd4A.d.mts +76 -0
  132. package/dist/console-DqEqZd4A.d.mts.map +1 -0
  133. package/dist/controller-BOy3-xbC.mjs +501 -0
  134. package/dist/controller-BOy3-xbC.mjs.map +1 -0
  135. package/dist/controller-Y0NGosbJ.d.mts +104 -0
  136. package/dist/controller-Y0NGosbJ.d.mts.map +1 -0
  137. package/dist/coordinator-agent-BglqZLwo.d.mts +54 -0
  138. package/dist/coordinator-agent-BglqZLwo.d.mts.map +1 -0
  139. package/dist/coordinator-agent-WFWBRL-G.mjs +236 -0
  140. package/dist/coordinator-agent-WFWBRL-G.mjs.map +1 -0
  141. package/dist/crypto-8ABhc3TD.mjs +40 -0
  142. package/dist/crypto-8ABhc3TD.mjs.map +1 -0
  143. package/dist/environment-CSoJb0SW.mjs +255 -0
  144. package/dist/environment-CSoJb0SW.mjs.map +1 -0
  145. package/dist/error-handling-DNVkm6RY.mjs +1334 -0
  146. package/dist/error-handling-DNVkm6RY.mjs.map +1 -0
  147. package/dist/errors-CQ8tF4dP.mjs +985 -0
  148. package/dist/errors-CQ8tF4dP.mjs.map +1 -0
  149. package/dist/errors-CfYdVeum.d.mts +212 -0
  150. package/dist/errors-CfYdVeum.d.mts.map +1 -0
  151. package/dist/errors-Dtn-UeRi.mjs +61 -0
  152. package/dist/errors-Dtn-UeRi.mjs.map +1 -0
  153. package/dist/evaluator-Cs84qkr8.mjs +91 -0
  154. package/dist/evaluator-Cs84qkr8.mjs.map +1 -0
  155. package/dist/evaluator-optimizer-De67_mJC.mjs +1086 -0
  156. package/dist/evaluator-optimizer-De67_mJC.mjs.map +1 -0
  157. package/dist/evaluator-optimizer-pattern-B5939s2Z.mjs +367 -0
  158. package/dist/evaluator-optimizer-pattern-B5939s2Z.mjs.map +1 -0
  159. package/dist/evaluator-optimizer-pattern-D1AJrzBD.d.mts +72 -0
  160. package/dist/evaluator-optimizer-pattern-D1AJrzBD.d.mts.map +1 -0
  161. package/dist/factory-DP6VSl8C.mjs +307 -0
  162. package/dist/factory-DP6VSl8C.mjs.map +1 -0
  163. package/dist/generative-ui-catalog.d.mts +8 -0
  164. package/dist/generative-ui-catalog.d.mts.map +1 -0
  165. package/dist/generative-ui-catalog.mjs +679 -0
  166. package/dist/generative-ui-catalog.mjs.map +1 -0
  167. package/dist/generative-ui-registry.d.mts +195 -0
  168. package/dist/generative-ui-registry.d.mts.map +1 -0
  169. package/dist/generative-ui-registry.mjs +250 -0
  170. package/dist/generative-ui-registry.mjs.map +1 -0
  171. package/dist/generative-ui-stream.d.mts +23 -0
  172. package/dist/generative-ui-stream.d.mts.map +1 -0
  173. package/dist/generative-ui-stream.mjs +219 -0
  174. package/dist/generative-ui-stream.mjs.map +1 -0
  175. package/dist/generative-ui-types.d.mts +123 -0
  176. package/dist/generative-ui-types.d.mts.map +1 -0
  177. package/dist/generative-ui-types.mjs +1 -0
  178. package/dist/generative-ui.d.mts +13 -0
  179. package/dist/generative-ui.d.mts.map +1 -0
  180. package/dist/generative-ui.mjs +21 -0
  181. package/dist/generative-ui.mjs.map +1 -0
  182. package/dist/governance-audit.d.mts +3 -0
  183. package/dist/governance-audit.mjs +3 -0
  184. package/dist/governance-compliance.d.mts +5 -0
  185. package/dist/governance-compliance.mjs +4 -0
  186. package/dist/governance-policies.d.mts +4 -0
  187. package/dist/governance-policies.mjs +4 -0
  188. package/dist/governance-tenancy.d.mts +3 -0
  189. package/dist/governance-tenancy.mjs +3 -0
  190. package/dist/governance.d.mts +88 -0
  191. package/dist/governance.d.mts.map +1 -0
  192. package/dist/governance.mjs +432 -0
  193. package/dist/governance.mjs.map +1 -0
  194. package/dist/grounding-attribution.d.mts +63 -0
  195. package/dist/grounding-attribution.d.mts.map +1 -0
  196. package/dist/grounding-attribution.mjs +259 -0
  197. package/dist/grounding-attribution.mjs.map +1 -0
  198. package/dist/grounding-citation.d.mts +2 -0
  199. package/dist/grounding-citation.mjs +3 -0
  200. package/dist/grounding-context.d.mts +9 -0
  201. package/dist/grounding-context.d.mts.map +1 -0
  202. package/dist/grounding-context.mjs +19 -0
  203. package/dist/grounding-context.mjs.map +1 -0
  204. package/dist/grounding-embed.d.mts +102 -0
  205. package/dist/grounding-embed.d.mts.map +1 -0
  206. package/dist/grounding-embed.mjs +417 -0
  207. package/dist/grounding-embed.mjs.map +1 -0
  208. package/dist/grounding-hallucination.d.mts +44 -0
  209. package/dist/grounding-hallucination.d.mts.map +1 -0
  210. package/dist/grounding-hallucination.mjs +115 -0
  211. package/dist/grounding-hallucination.mjs.map +1 -0
  212. package/dist/grounding-proof-map.d.mts +9 -0
  213. package/dist/grounding-proof-map.d.mts.map +1 -0
  214. package/dist/grounding-proof-map.mjs +26 -0
  215. package/dist/grounding-proof-map.mjs.map +1 -0
  216. package/dist/grounding-rag.d.mts +10 -0
  217. package/dist/grounding-rag.d.mts.map +1 -0
  218. package/dist/grounding-rag.mjs +27 -0
  219. package/dist/grounding-rag.mjs.map +1 -0
  220. package/dist/grounding-verification.d.mts +48 -0
  221. package/dist/grounding-verification.d.mts.map +1 -0
  222. package/dist/grounding-verification.mjs +224 -0
  223. package/dist/grounding-verification.mjs.map +1 -0
  224. package/dist/grounding.d.mts +24 -0
  225. package/dist/grounding.d.mts.map +1 -0
  226. package/dist/grounding.mjs +77 -0
  227. package/dist/grounding.mjs.map +1 -0
  228. package/dist/hitl-active-learning.d.mts +41 -0
  229. package/dist/hitl-active-learning.d.mts.map +1 -0
  230. package/dist/hitl-active-learning.mjs +178 -0
  231. package/dist/hitl-active-learning.mjs.map +1 -0
  232. package/dist/hitl-annotation.d.mts +74 -0
  233. package/dist/hitl-annotation.d.mts.map +1 -0
  234. package/dist/hitl-annotation.mjs +170 -0
  235. package/dist/hitl-annotation.mjs.map +1 -0
  236. package/dist/hitl-approval.d.mts +2 -0
  237. package/dist/hitl-approval.mjs +3 -0
  238. package/dist/hitl-feedback.d.mts +59 -0
  239. package/dist/hitl-feedback.d.mts.map +1 -0
  240. package/dist/hitl-feedback.mjs +137 -0
  241. package/dist/hitl-feedback.mjs.map +1 -0
  242. package/dist/hitl-review.d.mts +2 -0
  243. package/dist/hitl-review.mjs +3 -0
  244. package/dist/hitl.d.mts +14 -0
  245. package/dist/hitl.d.mts.map +1 -0
  246. package/dist/hitl.mjs +22 -0
  247. package/dist/hitl.mjs.map +1 -0
  248. package/dist/index-B17HT-VL.d.mts +285 -0
  249. package/dist/index-B17HT-VL.d.mts.map +1 -0
  250. package/dist/index-BDwgsK9B.d.mts +101 -0
  251. package/dist/index-BDwgsK9B.d.mts.map +1 -0
  252. package/dist/index-BGgMn_Ev.d.mts +2615 -0
  253. package/dist/index-BGgMn_Ev.d.mts.map +1 -0
  254. package/dist/index-DOqe5r9G.d.mts +318 -0
  255. package/dist/index-DOqe5r9G.d.mts.map +1 -0
  256. package/dist/index-DotINT7o.d.mts +1004 -0
  257. package/dist/index-DotINT7o.d.mts.map +1 -0
  258. package/dist/index-URlW7aD1.d.mts +67 -0
  259. package/dist/index-URlW7aD1.d.mts.map +1 -0
  260. package/dist/index.d.mts +64 -0
  261. package/dist/index.d.mts.map +1 -0
  262. package/dist/index.mjs +46 -0
  263. package/dist/index.mjs.map +1 -0
  264. package/dist/integrations-blob-storage.d.mts +25 -0
  265. package/dist/integrations-blob-storage.d.mts.map +1 -0
  266. package/dist/integrations-blob-storage.mjs +3 -0
  267. package/dist/integrations-notifications.d.mts +2 -0
  268. package/dist/integrations-notifications.mjs +3 -0
  269. package/dist/integrations-rate-limit.d.mts +27 -0
  270. package/dist/integrations-rate-limit.d.mts.map +1 -0
  271. package/dist/integrations-rate-limit.mjs +30 -0
  272. package/dist/integrations-rate-limit.mjs.map +1 -0
  273. package/dist/integrations-redis.d.mts +3 -0
  274. package/dist/integrations-redis.mjs +3 -0
  275. package/dist/integrations-stream.d.mts +14 -0
  276. package/dist/integrations-stream.d.mts.map +1 -0
  277. package/dist/integrations-stream.mjs +3 -0
  278. package/dist/integrations.d.mts +7 -0
  279. package/dist/integrations.mjs +7 -0
  280. package/dist/log-adapter-BLegSZtz.d.mts +16 -0
  281. package/dist/log-adapter-BLegSZtz.d.mts.map +1 -0
  282. package/dist/log-adapter-PPe_2Pwv.mjs +28 -0
  283. package/dist/log-adapter-PPe_2Pwv.mjs.map +1 -0
  284. package/dist/loop-BOYEtr2g.mjs +520 -0
  285. package/dist/loop-BOYEtr2g.mjs.map +1 -0
  286. package/dist/loop-C-tBBOqi.d.mts +219 -0
  287. package/dist/loop-C-tBBOqi.d.mts.map +1 -0
  288. package/dist/middleware-5wQ9bANW.mjs +306 -0
  289. package/dist/middleware-5wQ9bANW.mjs.map +1 -0
  290. package/dist/middleware-C1apSrj0.mjs +613 -0
  291. package/dist/middleware-C1apSrj0.mjs.map +1 -0
  292. package/dist/middleware-C7k0uItW.d.mts +9 -0
  293. package/dist/middleware-C7k0uItW.d.mts.map +1 -0
  294. package/dist/middleware-CZQCTHfl.mjs +366 -0
  295. package/dist/middleware-CZQCTHfl.mjs.map +1 -0
  296. package/dist/models.d.mts +11 -0
  297. package/dist/models.d.mts.map +1 -0
  298. package/dist/models.mjs +32 -0
  299. package/dist/models.mjs.map +1 -0
  300. package/dist/observability-analytics.d.mts +107 -0
  301. package/dist/observability-analytics.d.mts.map +1 -0
  302. package/dist/observability-analytics.mjs +409 -0
  303. package/dist/observability-analytics.mjs.map +1 -0
  304. package/dist/observability-cost.d.mts +10 -0
  305. package/dist/observability-cost.d.mts.map +1 -0
  306. package/dist/observability-cost.mjs +15 -0
  307. package/dist/observability-cost.mjs.map +1 -0
  308. package/dist/observability-telemetry.d.mts +111 -0
  309. package/dist/observability-telemetry.d.mts.map +1 -0
  310. package/dist/observability-telemetry.mjs +343 -0
  311. package/dist/observability-telemetry.mjs.map +1 -0
  312. package/dist/observability-tracing.d.mts +10 -0
  313. package/dist/observability-tracing.d.mts.map +1 -0
  314. package/dist/observability-tracing.mjs +17 -0
  315. package/dist/observability-tracing.mjs.map +1 -0
  316. package/dist/observability.d.mts +15 -0
  317. package/dist/observability.d.mts.map +1 -0
  318. package/dist/observability.mjs +17 -0
  319. package/dist/observability.mjs.map +1 -0
  320. package/dist/optimizer-DhXXpci6.mjs +97 -0
  321. package/dist/optimizer-DhXXpci6.mjs.map +1 -0
  322. package/dist/output-multimodal.d.mts +9 -0
  323. package/dist/output-multimodal.d.mts.map +1 -0
  324. package/dist/output-multimodal.mjs +18 -0
  325. package/dist/output-multimodal.mjs.map +1 -0
  326. package/dist/output.d.mts +11 -0
  327. package/dist/output.d.mts.map +1 -0
  328. package/dist/output.mjs +40 -0
  329. package/dist/output.mjs.map +1 -0
  330. package/dist/pii-filter-3AxmYSiu.d.mts +23 -0
  331. package/dist/pii-filter-3AxmYSiu.d.mts.map +1 -0
  332. package/dist/pipelines.d.mts +448 -0
  333. package/dist/pipelines.d.mts.map +1 -0
  334. package/dist/pipelines.mjs +1534 -0
  335. package/dist/pipelines.mjs.map +1 -0
  336. package/dist/prompt-injection-DQXchzsV.d.mts +8 -0
  337. package/dist/prompt-injection-DQXchzsV.d.mts.map +1 -0
  338. package/dist/prompt-injection-RpoLPwSa.mjs +52 -0
  339. package/dist/prompt-injection-RpoLPwSa.mjs.map +1 -0
  340. package/dist/prompts.d.mts +192 -0
  341. package/dist/prompts.d.mts.map +1 -0
  342. package/dist/prompts.mjs +732 -0
  343. package/dist/prompts.mjs.map +1 -0
  344. package/dist/protocol-DfBiEsnl.d.mts +112 -0
  345. package/dist/protocol-DfBiEsnl.d.mts.map +1 -0
  346. package/dist/quota-manager-0iPMkQWN.d.mts +62 -0
  347. package/dist/quota-manager-0iPMkQWN.d.mts.map +1 -0
  348. package/dist/quota-manager-D_N7FuQ2.mjs +180 -0
  349. package/dist/quota-manager-D_N7FuQ2.mjs.map +1 -0
  350. package/dist/redaction-utils-DcQwsiNh.mjs +438 -0
  351. package/dist/redaction-utils-DcQwsiNh.mjs.map +1 -0
  352. package/dist/redis-CpsSrF8K.mjs +102 -0
  353. package/dist/redis-CpsSrF8K.mjs.map +1 -0
  354. package/dist/redis-CwguYFGh.d.mts +33 -0
  355. package/dist/redis-CwguYFGh.d.mts.map +1 -0
  356. package/dist/registry-CsD3iTIx.mjs +190 -0
  357. package/dist/registry-CsD3iTIx.mjs.map +1 -0
  358. package/dist/registry-DVPWzkXR.d.mts +36 -0
  359. package/dist/registry-DVPWzkXR.d.mts.map +1 -0
  360. package/dist/reranking-BpWYhYzl.d.mts +72 -0
  361. package/dist/reranking-BpWYhYzl.d.mts.map +1 -0
  362. package/dist/reranking-Ck8aKZW7.mjs +331 -0
  363. package/dist/reranking-Ck8aKZW7.mjs.map +1 -0
  364. package/dist/resumable-adapter-CO1HtsgJ.mjs +21 -0
  365. package/dist/resumable-adapter-CO1HtsgJ.mjs.map +1 -0
  366. package/dist/review-trigger-DmAsiQlM.d.mts +24 -0
  367. package/dist/review-trigger-DmAsiQlM.d.mts.map +1 -0
  368. package/dist/review-trigger-DwXfpww9.mjs +112 -0
  369. package/dist/review-trigger-DwXfpww9.mjs.map +1 -0
  370. package/dist/safe-context-BynhkTKR.d.mts +54 -0
  371. package/dist/safe-context-BynhkTKR.d.mts.map +1 -0
  372. package/dist/safe-context-C5A3Wv3b.mjs +143 -0
  373. package/dist/safe-context-C5A3Wv3b.mjs.map +1 -0
  374. package/dist/schema-Bu2noOZ4.mjs +27 -0
  375. package/dist/schema-Bu2noOZ4.mjs.map +1 -0
  376. package/dist/schema-CwFvuCnA.mjs +97 -0
  377. package/dist/schema-CwFvuCnA.mjs.map +1 -0
  378. package/dist/schema-Wz-1-ro9.d.mts +37 -0
  379. package/dist/schema-Wz-1-ro9.d.mts.map +1 -0
  380. package/dist/schemas-CxQtxIga.mjs +62 -0
  381. package/dist/schemas-CxQtxIga.mjs.map +1 -0
  382. package/dist/schemas-DBOhxgW7.d.mts +32 -0
  383. package/dist/schemas-DBOhxgW7.d.mts.map +1 -0
  384. package/dist/schemas-Dp_OCqBt.d.mts +63 -0
  385. package/dist/schemas-Dp_OCqBt.d.mts.map +1 -0
  386. package/dist/schemas-SwCsnT0z.mjs +83 -0
  387. package/dist/schemas-SwCsnT0z.mjs.map +1 -0
  388. package/dist/sdk-errors.d.mts +2 -0
  389. package/dist/sdk-errors.mjs +3 -0
  390. package/dist/sdk-experimental.d.mts +59 -0
  391. package/dist/sdk-experimental.d.mts.map +1 -0
  392. package/dist/sdk-experimental.mjs +193 -0
  393. package/dist/sdk-experimental.mjs.map +1 -0
  394. package/dist/sdk-stop-conditions.d.mts +3 -0
  395. package/dist/sdk-stop-conditions.mjs +3 -0
  396. package/dist/sdk.d.mts +15 -0
  397. package/dist/sdk.d.mts.map +1 -0
  398. package/dist/sdk.mjs +50 -0
  399. package/dist/sdk.mjs.map +1 -0
  400. package/dist/security-guardrails.d.mts +3 -0
  401. package/dist/security-guardrails.mjs +3 -0
  402. package/dist/security-injection.d.mts +2 -0
  403. package/dist/security-injection.mjs +3 -0
  404. package/dist/security.d.mts +12 -0
  405. package/dist/security.d.mts.map +1 -0
  406. package/dist/security.mjs +18 -0
  407. package/dist/security.mjs.map +1 -0
  408. package/dist/server.d.mts +420 -0
  409. package/dist/server.d.mts.map +1 -0
  410. package/dist/server.mjs +2225 -0
  411. package/dist/server.mjs.map +1 -0
  412. package/dist/shared.d.mts +2 -0
  413. package/dist/shared.mjs +3 -0
  414. package/dist/streaming-control.d.mts +2 -0
  415. package/dist/streaming-control.mjs +4 -0
  416. package/dist/streaming-core.d.mts +4 -0
  417. package/dist/streaming-core.mjs +3 -0
  418. package/dist/streaming-infra-resilience.d.mts +120 -0
  419. package/dist/streaming-infra-resilience.d.mts.map +1 -0
  420. package/dist/streaming-infra-resilience.mjs +358 -0
  421. package/dist/streaming-infra-resilience.mjs.map +1 -0
  422. package/dist/streaming-infra-transport.d.mts +57 -0
  423. package/dist/streaming-infra-transport.d.mts.map +1 -0
  424. package/dist/streaming-infra-transport.mjs +488 -0
  425. package/dist/streaming-infra-transport.mjs.map +1 -0
  426. package/dist/streaming-infra.d.mts +5 -0
  427. package/dist/streaming-infra.mjs +5 -0
  428. package/dist/streaming.d.mts +17 -0
  429. package/dist/streaming.d.mts.map +1 -0
  430. package/dist/streaming.mjs +71 -0
  431. package/dist/streaming.mjs.map +1 -0
  432. package/dist/telemetry-2eKMojIb.mjs +1046 -0
  433. package/dist/telemetry-2eKMojIb.mjs.map +1 -0
  434. package/dist/telemetry-C2t03dwD.d.mts +59 -0
  435. package/dist/telemetry-C2t03dwD.d.mts.map +1 -0
  436. package/dist/tool-Btbththq.d.mts +253 -0
  437. package/dist/tool-Btbththq.d.mts.map +1 -0
  438. package/dist/tool-JSf8JXZ8.mjs +1150 -0
  439. package/dist/tool-JSf8JXZ8.mjs.map +1 -0
  440. package/dist/tool-safety-CZO8a4D4.d.mts +60 -0
  441. package/dist/tool-safety-CZO8a4D4.d.mts.map +1 -0
  442. package/dist/tool-safety-DXtYDXod.mjs +319 -0
  443. package/dist/tool-safety-DXtYDXod.mjs.map +1 -0
  444. package/dist/tools-BuS2Uv0q.mjs +1708 -0
  445. package/dist/tools-BuS2Uv0q.mjs.map +1 -0
  446. package/dist/tools-approval.d.mts +99 -0
  447. package/dist/tools-approval.d.mts.map +1 -0
  448. package/dist/tools-approval.mjs +395 -0
  449. package/dist/tools-approval.mjs.map +1 -0
  450. package/dist/tools-compliance.d.mts +67 -0
  451. package/dist/tools-compliance.d.mts.map +1 -0
  452. package/dist/tools-compliance.mjs +330 -0
  453. package/dist/tools-compliance.mjs.map +1 -0
  454. package/dist/tools-computer.d.mts +25 -0
  455. package/dist/tools-computer.d.mts.map +1 -0
  456. package/dist/tools-computer.mjs +64 -0
  457. package/dist/tools-computer.mjs.map +1 -0
  458. package/dist/tools-core.d.mts +3 -0
  459. package/dist/tools-core.mjs +3 -0
  460. package/dist/tools-mcp.d.mts +3 -0
  461. package/dist/tools-mcp.mjs +5 -0
  462. package/dist/tools-superpowers.d.mts +2 -0
  463. package/dist/tools-superpowers.mjs +3 -0
  464. package/dist/tools.d.mts +401 -0
  465. package/dist/tools.d.mts.map +1 -0
  466. package/dist/tools.mjs +1921 -0
  467. package/dist/tools.mjs.map +1 -0
  468. package/dist/transport-selector-D-Ib05X1.mjs +1936 -0
  469. package/dist/transport-selector-D-Ib05X1.mjs.map +1 -0
  470. package/dist/triage-agent-BEsXg5sw.d.mts +63 -0
  471. package/dist/triage-agent-BEsXg5sw.d.mts.map +1 -0
  472. package/dist/triage-agent-CBsfX-HW.mjs +167 -0
  473. package/dist/triage-agent-CBsfX-HW.mjs.map +1 -0
  474. package/dist/types-BPnq3GQo.d.mts +23 -0
  475. package/dist/types-BPnq3GQo.d.mts.map +1 -0
  476. package/dist/types-BjWgimpY.d.mts +16 -0
  477. package/dist/types-BjWgimpY.d.mts.map +1 -0
  478. package/dist/types-BxD-5btB.d.mts +41 -0
  479. package/dist/types-BxD-5btB.d.mts.map +1 -0
  480. package/dist/types-By-r93bE.d.mts +36 -0
  481. package/dist/types-By-r93bE.d.mts.map +1 -0
  482. package/dist/types-CLBWFRZN.d.mts +69 -0
  483. package/dist/types-CLBWFRZN.d.mts.map +1 -0
  484. package/dist/types-CQ0HFd0u.d.mts +62 -0
  485. package/dist/types-CQ0HFd0u.d.mts.map +1 -0
  486. package/dist/types-D3zJb59_.d.mts +47 -0
  487. package/dist/types-D3zJb59_.d.mts.map +1 -0
  488. package/dist/types-DJnugQX0.d.mts +80 -0
  489. package/dist/types-DJnugQX0.d.mts.map +1 -0
  490. package/dist/types-DbUfMCnT.d.mts +70 -0
  491. package/dist/types-DbUfMCnT.d.mts.map +1 -0
  492. package/dist/upstash-adapter-D96Caq2O.mjs +22 -0
  493. package/dist/upstash-adapter-D96Caq2O.mjs.map +1 -0
  494. package/dist/upstash-adapter-DD4433dx.d.mts +8 -0
  495. package/dist/upstash-adapter-DD4433dx.d.mts.map +1 -0
  496. package/dist/utils-BlYhcD6M.mjs +319 -0
  497. package/dist/utils-BlYhcD6M.mjs.map +1 -0
  498. package/dist/utils-DpJGOb3y.d.mts +120 -0
  499. package/dist/utils-DpJGOb3y.d.mts.map +1 -0
  500. package/dist/vercel-blob-adapter-CkOXLT2D.mjs +25 -0
  501. package/dist/vercel-blob-adapter-CkOXLT2D.mjs.map +1 -0
  502. package/dist/xai-CbV_dCnP.mjs +1600 -0
  503. package/dist/xai-CbV_dCnP.mjs.map +1 -0
  504. package/package.json +479 -0
  505. package/src/agents/base/factory.ts +382 -0
  506. package/src/agents/base/index.ts +8 -0
  507. package/src/agents/base/schemas.ts +117 -0
  508. package/src/agents/base/types.ts +192 -0
  509. package/src/agents/control-flow/index.ts +683 -0
  510. package/src/agents/coordinator/coordinator-agent.ts +381 -0
  511. package/src/agents/coordinator/index.ts +6 -0
  512. package/src/agents/default-agent.ts +211 -0
  513. package/src/agents/evaluator-optimizer/README.md +612 -0
  514. package/src/agents/evaluator-optimizer/evaluator-optimizer.example.ts +437 -0
  515. package/src/agents/evaluator-optimizer/evaluator.ts +282 -0
  516. package/src/agents/evaluator-optimizer/index.test.ts +416 -0
  517. package/src/agents/evaluator-optimizer/index.ts +519 -0
  518. package/src/agents/evaluator-optimizer/optimizer.ts +322 -0
  519. package/src/agents/evaluator-optimizer/schema.ts +302 -0
  520. package/src/agents/evaluator-optimizer/utils.ts +42 -0
  521. package/src/agents/experimental/index.ts +1095 -0
  522. package/src/agents/experimental/types.ts +212 -0
  523. package/src/agents/fallback/index.ts +18 -0
  524. package/src/agents/fallback/recovery/circuit-breaker.ts +166 -0
  525. package/src/agents/fallback/strategies/model-fallback.ts +192 -0
  526. package/src/agents/fallback/types.ts +87 -0
  527. package/src/agents/governance-agent.ts +446 -0
  528. package/src/agents/index.ts +79 -0
  529. package/src/agents/multi/coordination/index.ts +6 -0
  530. package/src/agents/multi/coordination/message-bus.ts +144 -0
  531. package/src/agents/multi/index.ts +6 -0
  532. package/src/agents/multi/state/index.ts +162 -0
  533. package/src/agents/multi/supervisor/index.ts +7 -0
  534. package/src/agents/multi/supervisor/supervisor.ts +254 -0
  535. package/src/agents/multi/swarm/aggregation.ts +466 -0
  536. package/src/agents/multi/swarm/communication.ts +388 -0
  537. package/src/agents/multi/swarm/coordination.ts +380 -0
  538. package/src/agents/multi/swarm/index.ts +73 -0
  539. package/src/agents/multi/swarm/swarm-executor.ts +479 -0
  540. package/src/agents/multi/types.ts +181 -0
  541. package/src/agents/observability/index.ts +914 -0
  542. package/src/agents/orchestrator.ts +218 -0
  543. package/src/agents/patterns/README.md +512 -0
  544. package/src/agents/patterns/evaluator-optimizer-pattern.example.ts +455 -0
  545. package/src/agents/patterns/evaluator-optimizer-pattern.ts +653 -0
  546. package/src/agents/patterns/index.ts +26 -0
  547. package/src/agents/persistence/index.ts +726 -0
  548. package/src/agents/tools/index.ts +291 -0
  549. package/src/agents/tools/mcp.ts +188 -0
  550. package/src/agents/triage/index.ts +6 -0
  551. package/src/agents/triage/triage-agent.ts +280 -0
  552. package/src/agents/workflows/index.ts +6 -0
  553. package/src/agents/workflows/interfaces.ts +36 -0
  554. package/src/agents/workflows/schema.ts +20 -0
  555. package/src/caching/adapters/index.ts +7 -0
  556. package/src/caching/adapters/memory.ts +77 -0
  557. package/src/caching/adapters/redis.ts +60 -0
  558. package/src/caching/index.ts +17 -0
  559. package/src/caching/middleware.ts +452 -0
  560. package/src/caching/strategies/index.ts +1008 -0
  561. package/src/caching/types.ts +47 -0
  562. package/src/catalog.ts +921 -0
  563. package/src/client/chat-usage.ts +53 -0
  564. package/src/client/hooks.ts +343 -0
  565. package/src/client/index.ts +36 -0
  566. package/src/client/message-utils.ts +29 -0
  567. package/src/client/use-generative-ui.ts +174 -0
  568. package/src/client/utils.ts +66 -0
  569. package/src/generative-ui/catalog.ts +653 -0
  570. package/src/generative-ui/index.ts +82 -0
  571. package/src/generative-ui/registry.ts +273 -0
  572. package/src/generative-ui/stream.ts +324 -0
  573. package/src/generative-ui/types.ts +376 -0
  574. package/src/governance/audit/audit-logger.ts +239 -0
  575. package/src/governance/audit/audit-schema.ts +82 -0
  576. package/src/governance/audit/index.ts +6 -0
  577. package/src/governance/compliance/abac/policy-engine.ts +175 -0
  578. package/src/governance/compliance/abac/types.ts +40 -0
  579. package/src/governance/compliance/approval/compliance-approval-queue.ts +217 -0
  580. package/src/governance/compliance/index.ts +16 -0
  581. package/src/governance/compliance/schemas.ts +68 -0
  582. package/src/governance/compliance/types.ts +143 -0
  583. package/src/governance/compliance/validators/phi-detector.ts +145 -0
  584. package/src/governance/compliance/validators/redaction-utils.ts +176 -0
  585. package/src/governance/compliance/validators/safe-harbor.ts +135 -0
  586. package/src/governance/entitlements/index.ts +585 -0
  587. package/src/governance/entitlements/middleware.ts +651 -0
  588. package/src/governance/entitlements/rate-limiter.ts +711 -0
  589. package/src/governance/index.ts +32 -0
  590. package/src/governance/policies/guardrails.ts +1121 -0
  591. package/src/governance/policies/index.ts +42 -0
  592. package/src/governance/policies/loop-controls.ts +136 -0
  593. package/src/governance/policies/telemetry.ts +63 -0
  594. package/src/governance/tenancy/index.ts +30 -0
  595. package/src/governance/tenancy/isolation/context.ts +92 -0
  596. package/src/governance/tenancy/isolation/index.ts +13 -0
  597. package/src/governance/tenancy/quotas/index.ts +11 -0
  598. package/src/governance/tenancy/quotas/quota-manager.ts +180 -0
  599. package/src/governance/tenancy/types.ts +66 -0
  600. package/src/governance/types.ts +16 -0
  601. package/src/governance/versioning/index.ts +573 -0
  602. package/src/grounding/attribution/index.ts +424 -0
  603. package/src/grounding/citation/citation-generator.ts +174 -0
  604. package/src/grounding/citation/index.ts +12 -0
  605. package/src/grounding/context/index.ts +32 -0
  606. package/src/grounding/context/safe-context.ts +116 -0
  607. package/src/grounding/context/types.ts +62 -0
  608. package/src/grounding/context-engineering/error-handling.ts +359 -0
  609. package/src/grounding/context-engineering/index.ts +23 -0
  610. package/src/grounding/context-engineering/memory.ts +559 -0
  611. package/src/grounding/context-engineering/tool-masking.ts +338 -0
  612. package/src/grounding/embed/index.ts +704 -0
  613. package/src/grounding/embed/reranking.ts +604 -0
  614. package/src/grounding/hallucination/index.ts +223 -0
  615. package/src/grounding/index.ts +82 -0
  616. package/src/grounding/proof-map/applyPatch.ts +172 -0
  617. package/src/grounding/proof-map/index.ts +41 -0
  618. package/src/grounding/proof-map/loop.ts +275 -0
  619. package/src/grounding/proof-map/schema.ts +217 -0
  620. package/src/grounding/rag/__tests__/pipeline.test.ts +274 -0
  621. package/src/grounding/rag/__tests__/tool.test.ts +202 -0
  622. package/src/grounding/rag/__tests__/trace.test.ts +229 -0
  623. package/src/grounding/rag/circuit-breaker.ts +152 -0
  624. package/src/grounding/rag/index.ts +64 -0
  625. package/src/grounding/rag/pipeline.ts +602 -0
  626. package/src/grounding/rag/tool.ts +281 -0
  627. package/src/grounding/rag/trace.ts +503 -0
  628. package/src/grounding/rag/types.ts +284 -0
  629. package/src/grounding/retrieval/in-memory-store.ts +107 -0
  630. package/src/grounding/sources/index.ts +943 -0
  631. package/src/grounding/tests/applyPatch.test.ts +194 -0
  632. package/src/grounding/tests/loop.test.ts +141 -0
  633. package/src/grounding/tests/schema.test.ts +160 -0
  634. package/src/grounding/types.ts +100 -0
  635. package/src/grounding/verification/index.ts +419 -0
  636. package/src/hitl/active-learning/index.ts +332 -0
  637. package/src/hitl/annotation/index.ts +362 -0
  638. package/src/hitl/approval/approval-queue.ts +132 -0
  639. package/src/hitl/approval/index.ts +5 -0
  640. package/src/hitl/feedback/index.ts +284 -0
  641. package/src/hitl/index.ts +69 -0
  642. package/src/hitl/review/index.ts +6 -0
  643. package/src/hitl/review/review-trigger.ts +162 -0
  644. package/src/hitl/types.ts +126 -0
  645. package/src/index.ts +125 -0
  646. package/src/integrations/blob-storage/index.ts +7 -0
  647. package/src/integrations/blob-storage/types.ts +28 -0
  648. package/src/integrations/blob-storage/vercel-blob-adapter.ts +35 -0
  649. package/src/integrations/index.ts +15 -0
  650. package/src/integrations/notifications/index.ts +7 -0
  651. package/src/integrations/notifications/log-adapter.ts +30 -0
  652. package/src/integrations/notifications/types.ts +27 -0
  653. package/src/integrations/rate-limit/index.ts +7 -0
  654. package/src/integrations/rate-limit/types.ts +26 -0
  655. package/src/integrations/rate-limit/upstash-adapter.ts +45 -0
  656. package/src/integrations/redis/index.ts +7 -0
  657. package/src/integrations/redis/types.ts +67 -0
  658. package/src/integrations/redis/upstash-adapter.ts +18 -0
  659. package/src/integrations/stream/index.ts +7 -0
  660. package/src/integrations/stream/resumable-adapter.ts +20 -0
  661. package/src/integrations/stream/types.ts +21 -0
  662. package/src/internal/__tests__/hallucination.test.ts +162 -0
  663. package/src/internal/__tests__/models.test.ts +104 -0
  664. package/src/internal/__tests__/sdk-errors.test.ts +201 -0
  665. package/src/internal/__tests__/stop-conditions.test.ts +210 -0
  666. package/src/internal/shared/ai-types.ts +942 -0
  667. package/src/internal/testing/evaluators.ts +575 -0
  668. package/src/internal/testing/index.ts +960 -0
  669. package/src/internal/ui/data-parts.ts +511 -0
  670. package/src/internal/ui/type-guards.ts +344 -0
  671. package/src/internal/ui-factories/__tests__/ui-factories.test.ts +548 -0
  672. package/src/internal/ui-factories/artifact-factory.ts +667 -0
  673. package/src/internal/ui-factories/index.ts +82 -0
  674. package/src/internal/ui-factories/shimmer-manager.ts +220 -0
  675. package/src/internal/ui-factories/status-helpers.ts +149 -0
  676. package/src/internal/ui-factories/tool-renderer.ts +167 -0
  677. package/src/internal/ui-factories/types.ts +235 -0
  678. package/src/models/capabilities.ts +88 -0
  679. package/src/models/index.ts +16 -0
  680. package/src/models/provider-factory.ts +229 -0
  681. package/src/models/providers/anthropic.ts +539 -0
  682. package/src/models/providers/google.ts +354 -0
  683. package/src/models/providers/index.ts +21 -0
  684. package/src/models/providers/openai.ts +346 -0
  685. package/src/models/providers/perplexity.ts +276 -0
  686. package/src/models/providers/shared.ts +90 -0
  687. package/src/models/providers/xai.ts +269 -0
  688. package/src/models/registry.ts +208 -0
  689. package/src/models/routing/index.ts +45 -0
  690. package/src/models/routing/intent-router.ts +143 -0
  691. package/src/models/routing/model-router.ts +300 -0
  692. package/src/models/routing/types.ts +106 -0
  693. package/src/models/types.ts +23 -0
  694. package/src/observability/analytics/index.ts +593 -0
  695. package/src/observability/cost/index.ts +16 -0
  696. package/src/observability/cost/tracking/budget-guard.ts +110 -0
  697. package/src/observability/cost/tracking/usage-tracker.ts +120 -0
  698. package/src/observability/cost/types.ts +85 -0
  699. package/src/observability/index.ts +17 -0
  700. package/src/observability/telemetry/index.ts +508 -0
  701. package/src/observability/tracing/index.ts +30 -0
  702. package/src/observability/tracing/otel/ai-instrumentation.ts +193 -0
  703. package/src/observability/tracing/otel/exporters/console.ts +58 -0
  704. package/src/observability/tracing/otel/exporters/index.ts +6 -0
  705. package/src/observability/tracing/provenance.ts +769 -0
  706. package/src/observability/tracing/types.ts +92 -0
  707. package/src/output/__tests__/output.test.ts +737 -0
  708. package/src/output/element-stream.ts +678 -0
  709. package/src/output/errors.ts +108 -0
  710. package/src/output/factories.ts +392 -0
  711. package/src/output/index.ts +98 -0
  712. package/src/output/multimodal/EXPORTS.md +306 -0
  713. package/src/output/multimodal/IMPLEMENTATION_SUMMARY.md +421 -0
  714. package/src/output/multimodal/README.md +349 -0
  715. package/src/output/multimodal/SETUP_GUIDE.md +472 -0
  716. package/src/output/multimodal/audio.ts +650 -0
  717. package/src/output/multimodal/image.ts +22 -0
  718. package/src/output/multimodal/index.ts +32 -0
  719. package/src/output/multimodal/providers.example.ts +375 -0
  720. package/src/output/validator.ts +495 -0
  721. package/src/pipelines/adapters/trace-storage-blob.ts +458 -0
  722. package/src/pipelines/adapters/trace-storage-memory.ts +319 -0
  723. package/src/pipelines/defaults.ts +109 -0
  724. package/src/pipelines/index.ts +24 -0
  725. package/src/pipelines/message-transforms.ts +107 -0
  726. package/src/pipelines/multi-step-wrapper.ts +433 -0
  727. package/src/pipelines/pipeline-presets.ts +339 -0
  728. package/src/pipelines/step-executor.ts +257 -0
  729. package/src/pipelines/storage-factory.ts +85 -0
  730. package/src/pipelines/trace-storage-interface.ts +216 -0
  731. package/src/pipelines/types.ts +255 -0
  732. package/src/pipelines/validation.ts +323 -0
  733. package/src/prompts/index.ts +271 -0
  734. package/src/prompts/model-variants.ts +410 -0
  735. package/src/prompts/templates.ts +327 -0
  736. package/src/sdk/errors/base.ts +296 -0
  737. package/src/sdk/errors/index.ts +31 -0
  738. package/src/sdk/errors/utils.ts +148 -0
  739. package/src/sdk/experimental/index.ts +286 -0
  740. package/src/sdk/index.ts +25 -0
  741. package/src/sdk/middleware/ai-middleware.ts +95 -0
  742. package/src/sdk/middleware/cache.ts +154 -0
  743. package/src/sdk/middleware/circuit-breaker.ts +388 -0
  744. package/src/sdk/middleware/compose.ts +81 -0
  745. package/src/sdk/middleware/deduplication.ts +307 -0
  746. package/src/sdk/middleware/index.ts +660 -0
  747. package/src/sdk/middleware/model-middleware.ts +200 -0
  748. package/src/sdk/stop-conditions/conditions.ts +209 -0
  749. package/src/sdk/stop-conditions/index.ts +35 -0
  750. package/src/sdk/stop-conditions/types.ts +59 -0
  751. package/src/security/guardrails/index.ts +6 -0
  752. package/src/security/guardrails/middleware.ts +465 -0
  753. package/src/security/guardrails/pii-filter.ts +396 -0
  754. package/src/security/index.ts +33 -0
  755. package/src/security/injection/index.ts +5 -0
  756. package/src/security/injection/prompt-injection.ts +64 -0
  757. package/src/security/types.ts +85 -0
  758. package/src/server/cache/crypto.ts +47 -0
  759. package/src/server/cache/performance.ts +79 -0
  760. package/src/server/error-handler.ts +93 -0
  761. package/src/server/errors.ts +73 -0
  762. package/src/server/helpers.ts +944 -0
  763. package/src/server/http.ts +156 -0
  764. package/src/server/index.ts +12 -0
  765. package/src/server/messages/__tests__/messages.test.ts +720 -0
  766. package/src/server/messages/converter.ts +245 -0
  767. package/src/server/messages/data-parts.ts +338 -0
  768. package/src/server/messages/extraction.ts +328 -0
  769. package/src/server/messages/index.ts +126 -0
  770. package/src/server/messages/types.ts +355 -0
  771. package/src/server/messages/window.ts +450 -0
  772. package/src/server/rate-limit/env.ts +8 -0
  773. package/src/server/rate-limit/rate-limit.ts +165 -0
  774. package/src/server/routes/HEALTH_CHECK.md +502 -0
  775. package/src/server/routes/IMPLEMENTATION_SUMMARY.md +432 -0
  776. package/src/server/routes/QUICK_START.md +327 -0
  777. package/src/server/routes/README.md +357 -0
  778. package/src/server/routes/__tests__/routes.test.ts +628 -0
  779. package/src/server/routes/agent-route.ts +224 -0
  780. package/src/server/routes/agent-routes.ts +191 -0
  781. package/src/server/routes/embed-config.ts +181 -0
  782. package/src/server/routes/health-check.example.ts +507 -0
  783. package/src/server/routes/health-check.test.ts +533 -0
  784. package/src/server/routes/health-check.ts +639 -0
  785. package/src/server/routes/health-check.types.ts +217 -0
  786. package/src/server/routes/index.ts +32 -0
  787. package/src/server/routes/types.ts +274 -0
  788. package/src/shared/__tests__/schemas.test.ts +317 -0
  789. package/src/shared/ai-runtime.ts +139 -0
  790. package/src/shared/ai-types.ts +133 -0
  791. package/src/shared/index.ts +30 -0
  792. package/src/shared/sdk-runtime.ts +198 -0
  793. package/src/shared/sdk-types.ts +301 -0
  794. package/src/streaming/control/__tests__/streaming-control.test.ts +708 -0
  795. package/src/streaming/control/budget-guard.ts +264 -0
  796. package/src/streaming/control/controller.ts +255 -0
  797. package/src/streaming/control/index.ts +105 -0
  798. package/src/streaming/control/smoothing.ts +201 -0
  799. package/src/streaming/control/step-limit.ts +215 -0
  800. package/src/streaming/control/types.ts +234 -0
  801. package/src/streaming/core/auto-resume.ts +276 -0
  802. package/src/streaming/core/index.ts +85 -0
  803. package/src/streaming/core/multi-step.ts +471 -0
  804. package/src/streaming/core/protocol.ts +194 -0
  805. package/src/streaming/core/types.ts +182 -0
  806. package/src/streaming/index.ts +97 -0
  807. package/src/streaming/infra/backpressure/buffer.ts +210 -0
  808. package/src/streaming/infra/backpressure/index.ts +6 -0
  809. package/src/streaming/infra/index.ts +75 -0
  810. package/src/streaming/infra/multiplexing/index.ts +311 -0
  811. package/src/streaming/infra/resilience/index.ts +684 -0
  812. package/src/streaming/infra/transform/index.ts +15 -0
  813. package/src/streaming/infra/transform/stream-transforms.ts +166 -0
  814. package/src/streaming/infra/transport/index.ts +774 -0
  815. package/src/streaming/infra/types.ts +118 -0
  816. package/src/streaming/infra-extra/types.ts +118 -0
  817. package/src/tools/advanced/caching.ts +299 -0
  818. package/src/tools/advanced/generator.ts +267 -0
  819. package/src/tools/advanced/hitl.ts +251 -0
  820. package/src/tools/advanced/index.ts +9 -0
  821. package/src/tools/advanced/llm-tool.ts +208 -0
  822. package/src/tools/approval/FILES.md +449 -0
  823. package/src/tools/approval/IMPLEMENTATION_SUMMARY.md +567 -0
  824. package/src/tools/approval/QUICK_START.md +362 -0
  825. package/src/tools/approval/README.md +514 -0
  826. package/src/tools/approval/advanced-approval-queue.ts +7 -0
  827. package/src/tools/approval/approval.example.ts +571 -0
  828. package/src/tools/approval/in-memory-queue.ts +405 -0
  829. package/src/tools/approval/index.ts +737 -0
  830. package/src/tools/approval/middleware.ts +590 -0
  831. package/src/tools/approval/queue-factory.ts +162 -0
  832. package/src/tools/approval/redis-queue.ts +327 -0
  833. package/src/tools/approval/testing.ts +493 -0
  834. package/src/tools/approval/types.ts +221 -0
  835. package/src/tools/approval/with-approval.ts +366 -0
  836. package/src/tools/artifacts/artifact-tools.ts +273 -0
  837. package/src/tools/artifacts/index.ts +6 -0
  838. package/src/tools/compliance/compliance-wrapper.ts +789 -0
  839. package/src/tools/compliance/create-compliant-stream.ts +226 -0
  840. package/src/tools/compliance/index.ts +8 -0
  841. package/src/tools/compliance/phi-redaction.ts +406 -0
  842. package/src/tools/compliance/tool-wrapper.ts +306 -0
  843. package/src/tools/computer/index.ts +99 -0
  844. package/src/tools/computer/types.ts +41 -0
  845. package/src/tools/core/abort.ts +202 -0
  846. package/src/tools/core/factory.ts +197 -0
  847. package/src/tools/core/index.ts +8 -0
  848. package/src/tools/core/tool-safety.ts +112 -0
  849. package/src/tools/generic/index.ts +9 -0
  850. package/src/tools/generic/json-schema-tool.ts +301 -0
  851. package/src/tools/generic/tiptap-context.ts +619 -0
  852. package/src/tools/generic/web-search-tool.ts +82 -0
  853. package/src/tools/generic/web-search.ts +142 -0
  854. package/src/tools/index.ts +36 -0
  855. package/src/tools/mcp/ai-sdk-error-integration.ts +401 -0
  856. package/src/tools/mcp/client.ts +988 -0
  857. package/src/tools/mcp/connection-manager.ts +380 -0
  858. package/src/tools/mcp/connection-pool.ts +408 -0
  859. package/src/tools/mcp/edge-runtime.ts +318 -0
  860. package/src/tools/mcp/environment.ts +310 -0
  861. package/src/tools/mcp/index.ts +20 -0
  862. package/src/tools/mcp/next-pattern.ts +401 -0
  863. package/src/tools/mcp/stream-lifecycle-integration.ts +617 -0
  864. package/src/tools/mcp/tool-cache.ts +359 -0
  865. package/src/tools/mcp/transport-selector.ts +492 -0
  866. package/src/tools/mcp/transports.ts +99 -0
  867. package/src/tools/simple-factory.ts +55 -0
  868. package/src/tools/superpowers/index.ts +122 -0
  869. package/src/tools/superpowers/prompts/index.ts +533 -0
  870. package/src/tools/superpowers/schemas/index.ts +701 -0
  871. package/src/tools/superpowers/tools/index.ts +721 -0
  872. package/src/tools/validation-wrapper.ts +97 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-selector-D-Ib05X1.mjs","names":[],"sources":["../src/tools/mcp/stream-lifecycle-integration.ts","../src/tools/mcp/next-pattern.ts","../src/tools/mcp/connection-manager.ts","../src/tools/mcp/tool-cache.ts","../src/tools/mcp/connection-pool.ts","../src/tools/mcp/edge-runtime.ts","../src/tools/mcp/transport-selector.ts"],"sourcesContent":["/**\n * @fileoverview stream-lifecycle-integration.ts\n */\n\nimport { logError, logInfo, logWarn } from '@repo/shared/logs';\n\nimport 'server-only';\n\nimport { AISDKCompatibleMCPError, MCPErrorHandlerFactory } from './ai-sdk-error-integration';\n\nimport type { MCPClient, MCPClientConfig } from './client';\nimport type { SDKToolSet } from '../../shared';\n\n/**\n * AI SDK v6 Stream Lifecycle Integration for MCP\n *\n * Provides comprehensive stream lifecycle management that integrates with AI SDK v6\n * streaming patterns and ensures proper resource cleanup throughout the stream lifecycle.\n *\n * Key Features:\n * - Stream initialization with MCP client setup\n * - Streaming event handling (onStart, onProgress, onComplete)\n * - Stream error recovery and fallback mechanisms\n * - Proper resource cleanup at stream end\n * - Integration with AI SDK v6 streaming callbacks\n * - Memory management during long streams\n * - Stream abort handling\n */\n\n/**\n * Stream lifecycle phases for proper state management\n */\nexport enum StreamLifecyclePhase {\n INITIALIZING = 'initializing',\n CONNECTED = 'connected',\n STREAMING = 'streaming',\n PAUSED = 'paused',\n COMPLETING = 'completing',\n COMPLETED = 'completed',\n ERROR = 'error',\n ABORTED = 'aborted',\n CLEANUP = 'cleanup',\n}\n\n/**\n * Stream lifecycle events for monitoring and callbacks\n */\nexport interface StreamLifecycleEvent {\n phase: StreamLifecyclePhase;\n timestamp: Date;\n metadata: Record<string, unknown>;\n error?: Error;\n}\n\n/**\n * Configuration for stream lifecycle management\n */\nexport interface StreamLifecycleConfig {\n enableHealthChecks: boolean;\n healthCheckIntervalMs: number;\n streamTimeoutMs: number;\n maxRetryAttempts: number;\n backoffStrategy: 'linear' | 'exponential';\n enableMemoryMonitoring: boolean;\n maxMemoryUsageMB: number;\n enableAbortHandling: boolean;\n gracefulShutdownTimeoutMs: number;\n}\n\n/**\n * Default stream lifecycle configuration\n */\nexport const DEFAULT_STREAM_LIFECYCLE_CONFIG: StreamLifecycleConfig = {\n enableHealthChecks: true,\n healthCheckIntervalMs: 30000, // 30 seconds\n streamTimeoutMs: 300000, // 5 minutes\n maxRetryAttempts: 3,\n backoffStrategy: 'exponential',\n enableMemoryMonitoring: true,\n maxMemoryUsageMB: 200,\n enableAbortHandling: true,\n gracefulShutdownTimeoutMs: 10000, // 10 seconds\n};\n\n/**\n * Stream lifecycle manager for MCP clients\n * Handles the complete lifecycle of AI SDK streams with MCP tool integration\n */\nexport class MCPStreamLifecycleManager {\n private phase: StreamLifecyclePhase = StreamLifecyclePhase.INITIALIZING;\n private eventHistory: StreamLifecycleEvent[] = [];\n private config: StreamLifecycleConfig;\n private clients: MCPClient[] = [];\n private tools: SDKToolSet = {};\n private closeAllClients: () => Promise<void> = async () => {};\n private errorHandlers: MCPErrorHandlerFactory[] = [];\n private abortController?: AbortController;\n private healthCheckInterval?: NodeJS.Timeout;\n private memoryMonitorInterval?: NodeJS.Timeout;\n private streamStartTime?: Date;\n\n constructor(\n private clientConfigs: MCPClientConfig[],\n config: Partial<StreamLifecycleConfig> = {},\n ) {\n this.config = { ...DEFAULT_STREAM_LIFECYCLE_CONFIG, ...config };\n this.logEvent(StreamLifecyclePhase.INITIALIZING, {\n clientCount: clientConfigs.length,\n });\n }\n\n /**\n * Initialize the stream lifecycle with MCP clients\n */\n async initialize(): Promise<{\n tools: SDKToolSet;\n clients: MCPClient[];\n streamCallbacks: StreamCallbacks;\n }> {\n try {\n this.streamStartTime = new Date();\n this.logEvent(StreamLifecyclePhase.INITIALIZING, {\n startTime: this.streamStartTime.toISOString(),\n });\n\n // Create abort controller if enabled\n if (this.config.enableAbortHandling) {\n this.abortController = new AbortController();\n }\n\n // Import the createMCPToolsFromConfigs function\n const { createMCPToolsFromConfigs } = await import('./client');\n\n // Initialize MCP clients\n const result = await createMCPToolsFromConfigs(this.clientConfigs, {\n gracefulDegradation: true,\n });\n\n this.clients = result.clients;\n this.tools = result.tools;\n this.closeAllClients = result.closeAllClients;\n\n // Create error handlers for each client\n this.errorHandlers = this.clientConfigs.map(\n config => new MCPErrorHandlerFactory(config.name, 'stream-lifecycle'),\n );\n\n this.phase = StreamLifecyclePhase.CONNECTED;\n this.logEvent(StreamLifecyclePhase.CONNECTED, {\n clientCount: this.clients.length,\n toolCount: Object.keys(this.tools).length,\n });\n\n // Start monitoring if enabled\n this.startMonitoring();\n\n // Create stream callbacks\n const streamCallbacks = this.createStreamCallbacks();\n\n return {\n tools: this.tools,\n clients: this.clients,\n streamCallbacks,\n };\n } catch (error) {\n this.phase = StreamLifecyclePhase.ERROR;\n const aiError = new AISDKCompatibleMCPError(\n 'Failed to initialize MCP stream lifecycle',\n 'connection-error',\n error instanceof Error ? error : new Error(String(error)),\n { phase: this.phase },\n true,\n );\n\n this.logEvent(StreamLifecyclePhase.ERROR, { error: aiError.message });\n throw aiError;\n }\n }\n\n /**\n * Create AI SDK v6 compatible stream callbacks\n */\n private createStreamCallbacks(): StreamCallbacks {\n return {\n onStart: () => {\n this.phase = StreamLifecyclePhase.STREAMING;\n this.logEvent(StreamLifecyclePhase.STREAMING, {\n elapsedMs: this.getElapsedTime(),\n });\n\n logInfo('MCP stream started', {\n operation: 'mcp_stream_start',\n metadata: {\n clientCount: this.clients.length,\n toolCount: Object.keys(this.tools).length,\n phase: this.phase,\n },\n });\n },\n\n onProgress: (data: unknown) => {\n // Monitor memory usage if enabled\n if (this.config.enableMemoryMonitoring) {\n this.checkMemoryUsage();\n }\n\n if (this.abortController?.signal.aborted) {\n this.handleAbort();\n return;\n }\n\n this.logEvent(StreamLifecyclePhase.STREAMING, {\n progressData: data,\n elapsedMs: this.getElapsedTime(),\n });\n },\n\n onFinish: async (event: StreamFinishEvent) => {\n this.phase = StreamLifecyclePhase.COMPLETING;\n this.logEvent(StreamLifecyclePhase.COMPLETING, {\n finishEvent: event,\n elapsedMs: this.getElapsedTime(),\n });\n\n try {\n // Perform graceful cleanup\n await this.performGracefulCleanup();\n\n this.phase = StreamLifecyclePhase.COMPLETED;\n this.logEvent(StreamLifecyclePhase.COMPLETED, {\n totalElapsedMs: this.getElapsedTime(),\n eventCount: this.eventHistory.length,\n });\n\n logInfo('MCP stream completed successfully', {\n operation: 'mcp_stream_complete',\n metadata: {\n totalElapsedMs: this.getElapsedTime(),\n toolCallCount: event?.toolResults?.length ?? 0,\n usage: event?.usage,\n },\n });\n } catch (error) {\n this.phase = StreamLifecyclePhase.ERROR;\n const aiError = new AISDKCompatibleMCPError(\n 'Failed to complete MCP stream lifecycle',\n 'resource-exhausted',\n error instanceof Error ? error : new Error(String(error)),\n { phase: this.phase, elapsedMs: this.getElapsedTime() },\n false,\n );\n\n this.logEvent(StreamLifecyclePhase.ERROR, { error: aiError.message });\n logError('MCP stream completion failed', {\n operation: 'mcp_stream_completion_error',\n error: aiError,\n metadata: { phase: this.phase },\n });\n\n throw aiError;\n }\n },\n\n onError: async (error: Error) => {\n this.phase = StreamLifecyclePhase.ERROR;\n const aiError = new AISDKCompatibleMCPError(\n 'MCP stream error occurred',\n 'tool-execution-error',\n error,\n {\n phase: this.phase,\n elapsedMs: this.getElapsedTime(),\n errorLocation: 'stream_callback',\n },\n true,\n );\n\n this.logEvent(StreamLifecyclePhase.ERROR, {\n error: aiError.message,\n errorType: aiError.errorType,\n });\n\n logError('MCP stream error', {\n operation: 'mcp_stream_error',\n error: aiError,\n metadata: {\n phase: this.phase,\n clientCount: this.clients.length,\n },\n });\n\n // Attempt emergency cleanup\n try {\n await this.performEmergencyCleanup();\n } catch (cleanupError) {\n logError('Emergency cleanup failed after stream error', {\n operation: 'mcp_emergency_cleanup_failure',\n error: cleanupError instanceof Error ? cleanupError : new Error(String(cleanupError)),\n metadata: { originalError: aiError.message },\n });\n }\n },\n\n onUncaughtError: (error: Error) => {\n this.phase = StreamLifecyclePhase.ERROR;\n const aiError = new AISDKCompatibleMCPError(\n 'Uncaught error in MCP stream',\n 'unknown-error',\n error,\n {\n phase: this.phase,\n elapsedMs: this.getElapsedTime(),\n errorLocation: 'uncaught',\n },\n false,\n );\n\n this.logEvent(StreamLifecyclePhase.ERROR, {\n error: aiError.message,\n errorType: 'uncaught',\n });\n\n logError('Uncaught MCP stream error', {\n operation: 'mcp_stream_uncaught_error',\n error: aiError,\n metadata: {\n phase: this.phase,\n stackTrace: error.stack,\n },\n });\n\n // Delegate to error handlers\n this.errorHandlers.forEach(handler => {\n const uncaughtHandler = handler.createUncaughtErrorHandler(\n () => this.performEmergencyCleanup(),\n { enableRecovery: false },\n );\n uncaughtHandler(error);\n });\n },\n\n onAbort: () => {\n this.handleAbort();\n },\n };\n }\n\n /**\n * Handle stream abortion\n */\n private handleAbort(): void {\n this.phase = StreamLifecyclePhase.ABORTED;\n this.logEvent(StreamLifecyclePhase.ABORTED, {\n elapsedMs: this.getElapsedTime(),\n reason: 'user_requested',\n });\n\n logWarn('MCP stream aborted', {\n operation: 'mcp_stream_abort',\n metadata: {\n phase: this.phase,\n elapsedMs: this.getElapsedTime(),\n },\n });\n\n // Perform abort cleanup\n void this.performAsyncCleanup('mcp_abort_cleanup_failure');\n }\n\n /**\n * Start monitoring services\n */\n private startMonitoring(): void {\n // Health check monitoring\n if (this.config.enableHealthChecks) {\n this.healthCheckInterval = setInterval(() => {\n this.performHealthCheck();\n }, this.config.healthCheckIntervalMs);\n }\n\n // Memory monitoring\n if (this.config.enableMemoryMonitoring) {\n this.memoryMonitorInterval = setInterval(() => {\n this.checkMemoryUsage();\n }, 10000); // Check every 10 seconds\n }\n }\n\n /**\n * Perform health check on MCP clients\n */\n private performHealthCheck(): void {\n const healthStatus = this.clients.length > 0 ? 'healthy' : 'degraded';\n\n this.logEvent(this.phase, {\n healthCheck: {\n status: healthStatus,\n clientCount: this.clients.length,\n toolCount: Object.keys(this.tools).length,\n elapsedMs: this.getElapsedTime(),\n },\n });\n\n if (healthStatus === 'degraded') {\n logWarn('MCP stream health degraded', {\n operation: 'mcp_stream_health_check',\n metadata: {\n clientCount: this.clients.length,\n phase: this.phase,\n },\n });\n }\n }\n\n /**\n * Check memory usage\n */\n private checkMemoryUsage(): void {\n if (typeof process !== 'undefined' && process.memoryUsage) {\n const memUsage = process.memoryUsage();\n const heapUsedMB = memUsage.heapUsed / 1024 / 1024;\n\n if (heapUsedMB > this.config.maxMemoryUsageMB) {\n logWarn('MCP stream memory usage high', {\n operation: 'mcp_stream_memory_warning',\n metadata: {\n heapUsedMB: Math.round(heapUsedMB),\n maxMemoryUsageMB: this.config.maxMemoryUsageMB,\n phase: this.phase,\n },\n });\n\n // Force garbage collection if available\n if (global.gc) {\n global.gc();\n }\n }\n }\n }\n\n /**\n * Perform graceful cleanup\n */\n private async performGracefulCleanup(): Promise<void> {\n this.phase = StreamLifecyclePhase.CLEANUP;\n this.logEvent(StreamLifecyclePhase.CLEANUP, {\n cleanupType: 'graceful',\n elapsedMs: this.getElapsedTime(),\n });\n\n // Stop monitoring\n if (this.healthCheckInterval) {\n clearInterval(this.healthCheckInterval);\n this.healthCheckInterval = undefined;\n }\n\n if (this.memoryMonitorInterval) {\n clearInterval(this.memoryMonitorInterval);\n this.memoryMonitorInterval = undefined;\n }\n\n // Close MCP clients with timeout\n const cleanupPromise = this.closeAllClients();\n const timeoutPromise = new Promise<never>((resolve, reject) => {\n void resolve;\n setTimeout(() => {\n reject(new Error('Graceful cleanup timeout'));\n }, this.config.gracefulShutdownTimeoutMs);\n });\n\n try {\n await Promise.race([cleanupPromise, timeoutPromise]);\n logInfo('MCP stream graceful cleanup completed', {\n operation: 'mcp_stream_graceful_cleanup',\n metadata: { elapsedMs: this.getElapsedTime() },\n });\n } catch (error) {\n logWarn('Graceful cleanup timeout, performing emergency cleanup', {\n operation: 'mcp_graceful_cleanup_timeout',\n metadata: {\n error: error instanceof Error ? error.message : String(error),\n },\n });\n await this.performEmergencyCleanup();\n }\n }\n\n /**\n * Perform emergency cleanup\n */\n private async performEmergencyCleanup(): Promise<void> {\n this.logEvent(StreamLifecyclePhase.CLEANUP, {\n cleanupType: 'emergency',\n elapsedMs: this.getElapsedTime(),\n });\n\n // Stop all monitoring immediately\n if (this.healthCheckInterval) {\n clearInterval(this.healthCheckInterval);\n this.healthCheckInterval = undefined;\n }\n\n if (this.memoryMonitorInterval) {\n clearInterval(this.memoryMonitorInterval);\n this.memoryMonitorInterval = undefined;\n }\n\n // Force close clients without waiting\n void this.performAsyncCleanup('mcp_emergency_cleanup_error');\n\n logWarn('MCP stream emergency cleanup performed', {\n operation: 'mcp_stream_emergency_cleanup',\n metadata: { elapsedMs: this.getElapsedTime() },\n });\n }\n\n /**\n * Log lifecycle event\n */\n private logEvent(phase: StreamLifecyclePhase, metadata: Record<string, unknown>): void {\n const event: StreamLifecycleEvent = {\n phase,\n timestamp: new Date(),\n metadata: {\n ...metadata,\n clientConfigs: this.clientConfigs.map(c => c.name),\n },\n };\n\n this.eventHistory.push(event);\n\n // Keep only last 100 events to prevent memory leaks\n if (this.eventHistory.length > 100) {\n this.eventHistory = this.eventHistory.slice(-100);\n }\n }\n\n /**\n * Get elapsed time since stream start\n */\n private getElapsedTime(): number {\n if (!this.streamStartTime) return 0;\n return Date.now() - this.streamStartTime.getTime();\n }\n\n /**\n * Get current lifecycle status\n */\n getStatus(): {\n phase: StreamLifecyclePhase;\n elapsedMs: number;\n clientCount: number;\n toolCount: number;\n eventCount: number;\n recentEvents: StreamLifecycleEvent[];\n } {\n return {\n phase: this.phase,\n elapsedMs: this.getElapsedTime(),\n clientCount: this.clients.length,\n toolCount: Object.keys(this.tools).length,\n eventCount: this.eventHistory.length,\n recentEvents: this.eventHistory.slice(-10), // Last 10 events\n };\n }\n\n /**\n * Request abort\n */\n requestAbort(): void {\n if (this.abortController && !this.abortController.signal.aborted) {\n this.abortController.abort();\n }\n }\n\n /**\n * Perform async cleanup with proper error handling\n */\n private async performAsyncCleanup(operationType: string): Promise<void> {\n try {\n await this.closeAllClients();\n } catch (error) {\n logError('Cleanup failed', {\n operation: operationType,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n}\n\n/**\n * Stream callback interface for AI SDK v6 integration\n */\nexport interface StreamFinishEvent {\n toolResults?: unknown[];\n usage?: unknown;\n [key: string]: unknown;\n}\n\nexport interface StreamCallbacks {\n onStart: () => void;\n onProgress: (data: unknown) => void;\n onFinish: (event: StreamFinishEvent) => Promise<void>;\n onError: (error: Error) => Promise<void>;\n onUncaughtError: (error: Error) => void;\n onAbort: () => void;\n}\n\n/**\n * Factory function to create MCP stream lifecycle manager\n */\nexport function createMCPStreamLifecycleManager(\n clientConfigs: MCPClientConfig[],\n config?: Partial<StreamLifecycleConfig>,\n): MCPStreamLifecycleManager {\n return new MCPStreamLifecycleManager(clientConfigs, config);\n}\n","/**\n * @fileoverview next-pattern.ts\n */\n\nimport { logError, logInfo } from '@repo/shared/logs';\n\nimport 'server-only';\n\nimport { createMCPToolsFromConfigs, type MCPClientConfig, type MCPClient } from './client';\nimport {\n createMCPStreamLifecycleManager,\n type MCPStreamLifecycleManager,\n type StreamFinishEvent,\n type StreamLifecycleConfig,\n} from './stream-lifecycle-integration';\n\nimport type { SDKToolSet } from '../../shared';\n\n/**\n * Helper function to handle async cleanup with error logging\n */\nasync function performCleanupWithLogging(\n cleanupFn: () => Promise<void>,\n originalError: Error,\n operationType: string,\n): Promise<void> {\n try {\n await cleanupFn();\n } catch (closeError) {\n logError('Failed to close MCP clients after error', {\n operation: operationType,\n metadata: {\n originalError: originalError.message,\n closeError: closeError instanceof Error ? closeError.message : String(closeError),\n },\n error: closeError instanceof Error ? closeError : new Error(String(closeError)),\n });\n }\n}\n\n/**\n * Next.js streamText-compatible MCP tools factory\n * Follows the exact pattern from Next.js documentation:\n * https://sdk.vercel.ai/docs/ai-sdk-ui/mcp-tools\n *\n * This implementation supports:\n * - ✅ stdio transport (local processes)\n * - ✅ SSE transport (Server-Sent Events)\n * - ✅ HTTP transport (StreamableHTTP from @modelcontextprotocol/sdk)\n * - ✅ Per-request client creation and cleanup\n * - ✅ Graceful degradation when servers are unavailable\n * - ✅ Environment-based configuration\n * - ✅ AI SDK v6 error handling integration\n * - ✅ Stream lifecycle management\n * - ✅ Uncaught error handling\n *\n * Usage in streamText with AI SDK v6 error handling:\n * ```typescript\n * const { tools, closeAllClients, onUncaughtError } = await createMCPToolsForStreamText(configs);\n *\n * const result = streamText({\n * model: openai('gpt-4o'),\n * tools: {\n * // Built-in tools\n * someBuiltinTool,\n * // MCP tools (following official docs pattern)\n * ...tools,\n * },\n * prompt: 'Your prompt here',\n * onFinish: async () => {\n * await closeAllClients();\n * },\n * onError: (error) => {\n * closeAllClients().catch((closeError) => {\n * logError('Failed to close MCP clients on error', closeError instanceof Error ? closeError : new Error(String(closeError)));\n * });\n * },\n * // AI SDK v6 uncaught error handling\n * onUncaughtError: onUncaughtError,\n * });\n * ```\n */\nexport async function createMCPToolsForStreamText(configs: MCPClientConfig[]): Promise<{\n tools: SDKToolSet;\n clients: MCPClient[];\n closeAllClients: () => Promise<void>;\n onUncaughtError: (error: Error) => void;\n onFinish: () => Promise<void>;\n}> {\n const result = await createMCPToolsFromConfigs(configs, {\n gracefulDegradation: true,\n });\n\n // AI SDK v6 error handling integration\n const onUncaughtError = (error: Error) => {\n logError('MCP uncaught error detected', {\n operation: 'mcp_uncaught_error',\n metadata: {\n errorType: error.name,\n errorMessage: error.message,\n clientCount: result.clients.length,\n toolCount: Object.keys(result.tools).length,\n },\n error,\n });\n\n // Attempt graceful cleanup on uncaught errors\n void performCleanupWithLogging(\n () => result.closeAllClients(),\n error,\n 'mcp_cleanup_after_uncaught_error',\n );\n };\n\n // Enhanced finish handler for proper lifecycle management\n const onFinish = async () => {\n try {\n await result.closeAllClients();\n logInfo('MCP clients successfully closed on finish', {\n operation: 'mcp_finish_cleanup',\n metadata: {\n clientCount: result.clients.length,\n toolCount: Object.keys(result.tools).length,\n },\n });\n } catch (error) {\n logError('Failed to close MCP clients on finish', {\n operation: 'mcp_finish_cleanup_error',\n metadata: {\n clientCount: result.clients.length,\n error: error instanceof Error ? error.message : String(error),\n },\n error: error instanceof Error ? error : new Error(String(error)),\n });\n throw error; // Re-throw to maintain AI SDK error handling flow\n }\n };\n\n return {\n ...result,\n onUncaughtError,\n onFinish,\n };\n}\n\n/**\n * Simplified factory for basic MCP setup with AI SDK v6 integration\n * Automatically handles common error cases and provides error callbacks\n */\nexport async function createMCPToolsWithDefaults(\n configs: MCPClientConfig[],\n options: {\n gracefulDegradation?: boolean;\n logErrors?: boolean;\n includeAISDKCallbacks?: boolean;\n } = {},\n): Promise<{\n tools: SDKToolSet;\n clients: MCPClient[];\n closeAllClients: () => Promise<void>;\n isAvailable: boolean;\n errors: string[];\n onUncaughtError?: (error: Error) => void;\n onFinish?: () => Promise<void>;\n}> {\n const { gracefulDegradation = true, logErrors = true, includeAISDKCallbacks = true } = options;\n const errors: string[] = [];\n let tools: SDKToolSet = {};\n let clients: MCPClient[] = [];\n let closeAllClients: () => Promise<void> = async () => {};\n let isAvailable = false;\n let onUncaughtError: ((error: Error) => void) | undefined;\n let onFinish: (() => Promise<void>) | undefined;\n\n if (configs.length === 0) {\n if (logErrors) {\n logInfo('No MCP configs provided', { operation: 'mcp_tools_creation' });\n }\n return {\n tools,\n clients,\n closeAllClients,\n isAvailable,\n errors,\n onUncaughtError,\n onFinish,\n };\n }\n\n try {\n const result = await createMCPToolsFromConfigs(configs, {\n gracefulDegradation,\n });\n ({ tools, clients, closeAllClients } = result);\n isAvailable = Object.keys(tools).length > 0;\n\n // Create AI SDK v6 error handling callbacks if requested\n if (includeAISDKCallbacks) {\n onUncaughtError = (error: Error) => {\n if (logErrors) {\n logError('MCP uncaught error in defaults setup', {\n operation: 'mcp_defaults_uncaught_error',\n metadata: {\n errorType: error.name,\n errorMessage: error.message,\n clientCount: clients.length,\n toolCount: Object.keys(tools).length,\n },\n error,\n });\n }\n\n // Graceful cleanup\n if (logErrors) {\n void performCleanupWithLogging(closeAllClients, error, 'mcp_defaults_cleanup_error');\n } else {\n void (async () => {\n try {\n await closeAllClients();\n } catch {\n // Silent cleanup\n }\n })();\n }\n };\n\n onFinish = async () => {\n try {\n await closeAllClients();\n if (logErrors) {\n logInfo('MCP clients closed successfully on finish (defaults)', {\n operation: 'mcp_defaults_finish_cleanup',\n metadata: {\n clientCount: clients.length,\n toolCount: Object.keys(tools).length,\n },\n });\n }\n } catch (error) {\n if (logErrors) {\n logError('Failed to close MCP clients on finish (defaults)', {\n operation: 'mcp_defaults_finish_error',\n metadata: {\n clientCount: clients.length,\n error: error instanceof Error ? error.message : String(error),\n },\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n throw error;\n }\n };\n }\n\n if (logErrors && isAvailable) {\n logInfo(`MCP tools loaded: ${Object.keys(tools).join(', ')}`, {\n toolCount: Object.keys(tools).length,\n toolNames: Object.keys(tools),\n operation: 'mcp_tools_creation',\n });\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown MCP error';\n errors.push(errorMessage);\n\n if (logErrors) {\n logError('MCP tools failed to load', {\n operation: 'mcp_tools_creation',\n errorMessage,\n error: error instanceof Error ? error : new Error(errorMessage),\n });\n }\n\n if (!gracefulDegradation) {\n throw error;\n }\n }\n\n return {\n tools,\n clients,\n closeAllClients,\n isAvailable,\n errors,\n onUncaughtError,\n onFinish,\n };\n}\n\n/**\n * Test MCP connectivity without creating persistent connections\n */\nexport async function testMCPConnectivity(configs: MCPClientConfig[]): Promise<{\n results: Array<{\n name: string;\n success: boolean;\n error?: string;\n toolCount: number;\n }>;\n overallSuccess: boolean;\n}> {\n const results: Array<{\n name: string;\n success: boolean;\n error?: string;\n toolCount: number;\n }> = [];\n\n for (const config of configs) {\n try {\n const { tools, closeAllClients } = await createMCPToolsFromConfigs([config]);\n const toolCount = Object.keys(tools).length;\n\n results.push({\n name: config.name,\n success: true,\n toolCount,\n });\n\n await closeAllClients();\n } catch (error) {\n results.push({\n name: config.name,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n toolCount: 0,\n });\n }\n }\n\n const overallSuccess = results.every(r => r.success);\n return { results, overallSuccess };\n}\n\n/**\n * Advanced MCP tools factory with full AI SDK v6 stream lifecycle management\n * Provides comprehensive error handling, monitoring, and resource management\n */\nexport async function createMCPToolsWithStreamLifecycle(\n configs: MCPClientConfig[],\n lifecycleConfig?: Partial<StreamLifecycleConfig>,\n): Promise<{\n tools: SDKToolSet;\n clients: MCPClient[];\n closeAllClients: () => Promise<void>;\n onUncaughtError: (error: Error) => void;\n onFinish: () => Promise<void>;\n streamCallbacks: {\n onStart: () => void;\n onProgress: (data: unknown) => void;\n onFinish: (event: StreamFinishEvent) => Promise<void>;\n onError: (error: Error) => Promise<void>;\n onUncaughtError: (error: Error) => void;\n onAbort: () => void;\n };\n lifecycleManager: {\n getStatus: () => ReturnType<MCPStreamLifecycleManager['getStatus']>;\n requestAbort: () => void;\n };\n}> {\n // Create stream lifecycle manager\n const lifecycleManager = createMCPStreamLifecycleManager(configs, lifecycleConfig);\n\n // Initialize with full lifecycle management\n const { tools, clients, streamCallbacks } = await lifecycleManager.initialize();\n\n // Create enhanced cleanup function\n const closeAllClients = async () => {\n try {\n await streamCallbacks.onFinish({});\n } catch (error) {\n logError('Failed to close MCP clients via lifecycle manager', {\n operation: 'mcp_lifecycle_cleanup_error',\n error: error instanceof Error ? error : new Error(String(error)),\n metadata: {\n clientCount: clients.length,\n toolCount: Object.keys(tools).length,\n },\n });\n throw error;\n }\n };\n\n // Create compatible onFinish that matches expected signature\n const compatibleOnFinish = async () => {\n await streamCallbacks.onFinish({});\n };\n\n return {\n tools,\n clients,\n closeAllClients,\n onUncaughtError: streamCallbacks.onUncaughtError,\n onFinish: compatibleOnFinish,\n streamCallbacks,\n lifecycleManager: {\n getStatus: lifecycleManager.getStatus.bind(lifecycleManager),\n requestAbort: lifecycleManager.requestAbort.bind(lifecycleManager),\n },\n };\n}\n","/**\n * @fileoverview connection-manager.ts\n */\n\nimport { createHash } from 'node:crypto';\n\nimport { createMCPClient } from '@ai-sdk/mcp';\nimport { logWarn } from '@repo/shared/logs';\n\nimport { createTransportFromConfig } from './client';\n\nimport type { MCPClient, MCPClientConfig } from './client';\nimport type { SDKToolSet } from '../../shared';\n// Use AI SDK tool types instead of MCP SDK types\n\n/**\n * Connection pool configuration\n */\nexport interface ConnectionPoolConfig {\n maxConnections: number;\n connectionTimeout: number;\n healthCheckInterval: number;\n retryAttempts: number;\n retryDelay: number;\n}\n\n/**\n * Connection metadata for monitoring\n */\nexport interface ConnectionMetadata {\n config: MCPClientConfig;\n client: MCPClient;\n tools: SDKToolSet;\n createdAt: Date;\n lastUsed: Date;\n useCount: number;\n isHealthy: boolean;\n lastHealthCheck: Date;\n}\n\n/**\n * Connection pool events\n */\nexport interface ConnectionPoolEvents {\n created: (config: MCPClientConfig) => void;\n destroyed: (config: MCPClientConfig) => void;\n error: (config: MCPClientConfig, error: Error) => void;\n healthCheck: (config: MCPClientConfig, healthy: boolean) => void;\n}\n\n/**\n * Enhanced MCP connection manager with pooling and monitoring\n * Provides connection reuse, health checking, and monitoring for production use\n */\nexport class MCPConnectionManager {\n private connections = new Map<string, ConnectionMetadata>();\n private config: ConnectionPoolConfig;\n private healthCheckTimer?: NodeJS.Timeout;\n private events: Partial<ConnectionPoolEvents> = {};\n\n constructor(config: Partial<ConnectionPoolConfig> = {}) {\n this.config = {\n maxConnections: 10,\n connectionTimeout: 30000,\n healthCheckInterval: 60000,\n retryAttempts: 3,\n retryDelay: 1000,\n ...config,\n };\n\n // Start health checking\n this.startHealthChecking();\n }\n\n /**\n * Register event listeners\n */\n on<K extends keyof ConnectionPoolEvents>(event: K, listener: ConnectionPoolEvents[K]): void {\n this.events[event] = listener;\n }\n\n /**\n * Get or create a connection for the given config\n */\n async getConnection(config: MCPClientConfig): Promise<ConnectionMetadata> {\n const key = this.getConnectionKey(config);\n let connection = this.connections.get(key);\n\n if (connection) {\n // Update usage statistics\n connection.lastUsed = new Date();\n connection.useCount += 1;\n return connection;\n }\n\n // Check connection limits\n if (this.connections.size >= this.config.maxConnections) {\n // Remove oldest unused connection\n await this.evictOldestConnection();\n }\n\n // Create new connection\n connection = await this.createConnection(config);\n this.connections.set(key, connection);\n this.events.created?.(config);\n\n return connection;\n }\n\n /**\n * Get all tools from active connections\n */\n async getAllTools(): Promise<SDKToolSet> {\n const allTools: SDKToolSet = {};\n\n for (const connection of this.connections.values()) {\n if (connection.isHealthy) {\n Object.assign(allTools, connection.tools);\n }\n }\n\n return allTools;\n }\n\n /**\n * Get connection statistics\n */\n getStats(): {\n totalConnections: number;\n healthyConnections: number;\n totalUseCount: number;\n oldestConnection?: Date;\n newestConnection?: Date;\n } {\n const connections = Array.from(this.connections.values());\n const healthyConnections = connections.filter(c => c.isHealthy);\n const totalUseCount = connections.reduce((sum, c) => sum + c.useCount, 0);\n\n const createdDates = connections.map(c => c.createdAt);\n const oldestConnection =\n createdDates.length > 0\n ? new Date(Math.min(...createdDates.map(d => d.getTime())))\n : undefined;\n const newestConnection =\n createdDates.length > 0\n ? new Date(Math.max(...createdDates.map(d => d.getTime())))\n : undefined;\n\n return {\n totalConnections: connections.length,\n healthyConnections: healthyConnections.length,\n totalUseCount,\n oldestConnection,\n newestConnection,\n };\n }\n\n /**\n * Close specific connection\n */\n async closeConnection(config: MCPClientConfig): Promise<void> {\n const key = this.getConnectionKey(config);\n const connection = this.connections.get(key);\n\n if (connection) {\n try {\n await connection.client.close();\n } catch (error) {\n logWarn(`Failed to close MCP connection ${config.name}`, {\n connectionName: config.name,\n error: error instanceof Error ? error.message : String(error),\n operation: 'mcp_close_connection',\n });\n }\n\n this.connections.delete(key);\n this.events.destroyed?.(config);\n }\n }\n\n /**\n * Close all connections and cleanup\n */\n async closeAll(): Promise<void> {\n if (this.healthCheckTimer) {\n clearInterval(this.healthCheckTimer);\n }\n\n const closePromises = Array.from(this.connections.values()).map(async connection => {\n try {\n await connection.client.close();\n } catch (error) {\n logWarn(`Failed to close MCP connection ${connection.config.name}`, {\n connectionName: connection.config.name,\n error: error instanceof Error ? error.message : String(error),\n operation: 'mcp_close_all_connections',\n });\n }\n });\n\n await Promise.all(closePromises);\n this.connections.clear();\n }\n\n /**\n * Perform health check on all connections\n */\n async performHealthCheck(): Promise<void> {\n const healthCheckPromises = Array.from(this.connections.values()).map(async connection => {\n try {\n // Simple health check: try to get tools\n await connection.client.tools();\n connection.isHealthy = true;\n connection.lastHealthCheck = new Date();\n this.events.healthCheck?.(connection.config, true);\n } catch (error) {\n connection.isHealthy = false;\n connection.lastHealthCheck = new Date();\n this.events.healthCheck?.(connection.config, false);\n this.events.error?.(\n connection.config,\n error instanceof Error ? error : new Error(String(error)),\n );\n\n // Remove unhealthy connections\n const key = this.getConnectionKey(connection.config);\n this.connections.delete(key);\n\n try {\n await connection.client.close();\n } catch (closeError) {\n logWarn(`Failed to close unhealthy connection ${connection.config.name}`, {\n connectionName: connection.config.name,\n error: closeError instanceof Error ? closeError.message : String(closeError),\n operation: 'mcp_close_unhealthy_connection',\n });\n }\n }\n });\n\n await Promise.all(healthCheckPromises);\n }\n\n private getConnectionKey(config: MCPClientConfig): string {\n const { transport } = config;\n const normalizedTransport =\n transport.type === 'stdio'\n ? {\n type: transport.type,\n command: transport.command,\n args: transport.args,\n cwd: transport.cwd,\n }\n : {\n type: transport.type,\n url: transport.url ?? transport.httpUrl,\n sessionId: transport.sessionId,\n };\n\n const hash = createHash('sha256')\n .update(JSON.stringify(normalizedTransport))\n .digest('hex')\n .slice(0, 12);\n return `${config.name}-${transport.type}-${hash}`;\n }\n\n private async createConnection(config: MCPClientConfig): Promise<ConnectionMetadata> {\n let attempt = 0;\n let lastError: Error | undefined;\n\n while (attempt < this.config.retryAttempts) {\n try {\n const transport = createTransportFromConfig(config.transport);\n const client = await createMCPClient({ transport });\n const tools = await client.tools();\n\n return {\n config,\n client,\n tools,\n createdAt: new Date(),\n lastUsed: new Date(),\n useCount: 1,\n isHealthy: true,\n lastHealthCheck: new Date(),\n };\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n attempt++;\n\n if (attempt < this.config.retryAttempts) {\n await new Promise(resolve => setTimeout(resolve, this.config.retryDelay * attempt));\n }\n }\n }\n\n throw lastError ?? new Error('All connection attempts failed');\n }\n\n private async evictOldestConnection(): Promise<void> {\n let oldestConnection: { key: string; connection: ConnectionMetadata } | null = null;\n\n for (const [key, connection] of this.connections.entries()) {\n if (!oldestConnection || connection.lastUsed < oldestConnection.connection.lastUsed) {\n oldestConnection = { key, connection };\n }\n }\n\n if (oldestConnection) {\n await this.closeConnection(oldestConnection.connection.config);\n }\n }\n\n private startHealthChecking(): void {\n this.healthCheckTimer = setInterval(() => {\n void (async () => {\n try {\n await this.performHealthCheck();\n } catch (error) {\n logWarn('Health check failed', {\n error: error instanceof Error ? error.message : String(error),\n operation: 'mcp_health_check',\n });\n }\n })();\n }, this.config.healthCheckInterval);\n }\n}\n\n/**\n * Global connection manager instance\n * Provides a singleton for connection pooling across the application\n */\nlet globalConnectionManager: MCPConnectionManager | null = null;\n\nexport function getGlobalConnectionManager(\n config?: Partial<ConnectionPoolConfig>,\n): MCPConnectionManager {\n if (!globalConnectionManager) {\n globalConnectionManager = new MCPConnectionManager(config);\n }\n return globalConnectionManager;\n}\n\n/**\n * Create MCP tools with connection pooling\n * This provides better performance and resource management for production use\n */\nexport async function createPooledMCPTools(\n configs: MCPClientConfig[],\n options: {\n useGlobalPool?: boolean;\n poolConfig?: Partial<ConnectionPoolConfig>;\n } = {},\n): Promise<{\n tools: SDKToolSet;\n manager: MCPConnectionManager;\n}> {\n const manager = options.useGlobalPool\n ? getGlobalConnectionManager(options.poolConfig)\n : new MCPConnectionManager(options.poolConfig);\n\n const tools: SDKToolSet = {};\n\n // Get connections for all configs\n for (const config of configs) {\n try {\n const connection = await manager.getConnection(config);\n Object.assign(tools, connection.tools);\n } catch (error) {\n logWarn(`Failed to get connection for ${config.name}`, {\n connectionName: config.name,\n error: error instanceof Error ? error.message : String(error),\n operation: 'mcp_get_connection',\n });\n }\n }\n\n return { tools, manager };\n}\n","/**\n * @fileoverview tool-cache.ts\n */\n\nimport { logWarn } from '@repo/shared/logs';\n\nimport type { MCPClientConfig } from './client';\nimport type { SDKToolSet } from '../../shared';\n\n/**\n * Configuration for MCP tool caching\n */\nexport interface MCPToolCacheConfig {\n enabled: boolean;\n maxEntries: number;\n ttlMs: number;\n maxMemoryMB: number;\n compressionEnabled: boolean;\n}\n\n/**\n * Default tool cache configuration\n */\nexport const DEFAULT_CACHE_CONFIG: MCPToolCacheConfig = {\n enabled: true,\n maxEntries: 1000,\n ttlMs: 300000, // 5 minutes\n maxMemoryMB: 50,\n compressionEnabled: false, // Disabled by default for simplicity\n};\n\n/**\n * Cache entry with metadata\n */\ninterface CacheEntry {\n tools: SDKToolSet;\n createdAt: Date;\n lastAccessed: Date;\n accessCount: number;\n size: number; // Approximate size in bytes\n}\n\n/**\n * Tool cache statistics\n */\nexport interface CacheStats {\n hits: number;\n misses: number;\n entries: number;\n totalSize: number;\n hitRate: number;\n avgAccessTime: number;\n oldestEntry?: Date;\n newestEntry?: Date;\n}\n\n/**\n * MCP Tool Cache\n * Caches frequently used MCP tools to improve performance\n */\nexport class MCPToolCache {\n private cache = new Map<string, CacheEntry>();\n private config: MCPToolCacheConfig;\n private stats = {\n hits: 0,\n misses: 0,\n totalAccessTime: 0,\n accessCount: 0,\n };\n private cleanupInterval?: NodeJS.Timeout;\n\n constructor(config: Partial<MCPToolCacheConfig> = {}) {\n this.config = { ...DEFAULT_CACHE_CONFIG, ...config };\n\n if (this.config.enabled) {\n this.startCleanupTask();\n }\n }\n\n /**\n * Get tools from cache if available\n */\n get(clientConfig: MCPClientConfig): SDKToolSet | null {\n if (!this.config.enabled) {\n return null;\n }\n\n const key = this.getCacheKey(clientConfig);\n const entry = this.cache.get(key);\n\n if (!entry) {\n this.stats.misses++;\n return null;\n }\n\n // Check if entry has expired\n const now = new Date();\n const age = now.getTime() - entry.createdAt.getTime();\n\n if (age > this.config.ttlMs) {\n this.cache.delete(key);\n this.stats.misses++;\n return null;\n }\n\n // Update access metadata\n entry.lastAccessed = now;\n entry.accessCount++;\n this.stats.hits++;\n\n return entry.tools;\n }\n\n /**\n * Store tools in cache\n */\n set(clientConfig: MCPClientConfig, tools: SDKToolSet): void {\n if (!this.config.enabled) {\n return;\n }\n\n const key = this.getCacheKey(clientConfig);\n const size = this.estimateSize(tools);\n const now = new Date();\n\n // Check memory limits\n if (this.shouldEvictForMemory(size)) {\n this.evictLeastRecentlyUsed();\n }\n\n // Check entry limits\n if (this.cache.size >= this.config.maxEntries) {\n this.evictOldestEntry();\n }\n\n const entry: CacheEntry = {\n tools,\n createdAt: now,\n lastAccessed: now,\n accessCount: 1,\n size,\n };\n\n this.cache.set(key, entry);\n }\n\n /**\n * Clear all cached tools for a specific client\n */\n invalidate(clientConfig: MCPClientConfig): void {\n const key = this.getCacheKey(clientConfig);\n this.cache.delete(key);\n }\n\n /**\n * Clear all cached tools\n */\n clear(): void {\n this.cache.clear();\n this.resetStats();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n const entries = Array.from(this.cache.values());\n const totalSize = entries.reduce((sum, entry) => sum + entry.size, 0);\n const totalRequests = this.stats.hits + this.stats.misses;\n const hitRate = totalRequests > 0 ? this.stats.hits / totalRequests : 0;\n const avgAccessTime =\n this.stats.accessCount > 0 ? this.stats.totalAccessTime / this.stats.accessCount : 0;\n\n return {\n hits: this.stats.hits,\n misses: this.stats.misses,\n entries: this.cache.size,\n totalSize,\n hitRate,\n avgAccessTime,\n oldestEntry:\n entries.length > 0\n ? new Date(Math.min(...entries.map(e => e.createdAt.getTime())))\n : undefined,\n newestEntry:\n entries.length > 0\n ? new Date(Math.max(...entries.map(e => e.createdAt.getTime())))\n : undefined,\n };\n }\n\n /**\n * Generate cache key for client configuration\n */\n private getCacheKey(clientConfig: MCPClientConfig): string {\n // Include transport details and relevant config in key\n return `mcp:${clientConfig.name}:${clientConfig.transport.type}:${JSON.stringify(clientConfig.transport)}`;\n }\n\n /**\n * Estimate memory size of tools object\n */\n private estimateSize(tools: SDKToolSet): number {\n try {\n return JSON.stringify(tools).length * 2; // Rough estimate: 2 bytes per character\n } catch {\n return 1024; // Default estimate if serialization fails\n }\n }\n\n /**\n * Check if we should evict entries to stay within memory limits\n */\n private shouldEvictForMemory(newEntrySize: number): boolean {\n const currentSize = Array.from(this.cache.values()).reduce((sum, entry) => sum + entry.size, 0);\n const maxSizeBytes = this.config.maxMemoryMB * 1024 * 1024;\n\n return currentSize + newEntrySize > maxSizeBytes;\n }\n\n /**\n * Evict least recently used entries\n */\n private evictLeastRecentlyUsed(): void {\n if (this.cache.size === 0) return;\n\n // Sort by last accessed time (oldest first)\n const entries = Array.from(this.cache.entries()).sort(\n ([, a], [, b]) => a.lastAccessed.getTime() - b.lastAccessed.getTime(),\n );\n\n // Remove oldest 25% of entries\n const toRemove = Math.max(1, Math.floor(entries.length * 0.25));\n\n for (let i = 0; i < toRemove; i++) {\n const entry = entries[i];\n if (!entry) continue;\n const [key] = entry;\n this.cache.delete(key);\n }\n\n logWarn(`Evicted ${toRemove} LRU entries from MCP tool cache`, {\n operation: 'mcp_cache_lru_eviction',\n metadata: {\n evictedCount: toRemove,\n remainingEntries: this.cache.size,\n },\n });\n }\n\n /**\n * Evict oldest entry\n */\n private evictOldestEntry(): void {\n if (this.cache.size === 0) return;\n\n // Find oldest entry\n let oldestKey: string | null = null;\n let oldestTime = Date.now();\n\n for (const [key, entry] of this.cache.entries()) {\n if (entry.createdAt.getTime() < oldestTime) {\n oldestTime = entry.createdAt.getTime();\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.cache.delete(oldestKey);\n }\n }\n\n /**\n * Start periodic cleanup task\n */\n private startCleanupTask(): void {\n this.cleanupInterval = setInterval(() => {\n this.cleanupExpiredEntries();\n }, 60000); // Run every minute\n }\n\n /**\n * Clean up expired entries\n */\n private cleanupExpiredEntries(): void {\n const now = new Date();\n const expiredKeys: string[] = [];\n\n for (const [key, entry] of this.cache.entries()) {\n const age = now.getTime() - entry.createdAt.getTime();\n if (age > this.config.ttlMs) {\n expiredKeys.push(key);\n }\n }\n\n for (const key of expiredKeys) {\n this.cache.delete(key);\n }\n\n if (expiredKeys.length > 0) {\n logWarn(`Cleaned up ${expiredKeys.length} expired entries from MCP tool cache`, {\n operation: 'mcp_cache_cleanup',\n metadata: {\n expiredCount: expiredKeys.length,\n remainingEntries: this.cache.size,\n },\n });\n }\n }\n\n /**\n * Reset statistics\n */\n private resetStats(): void {\n this.stats = {\n hits: 0,\n misses: 0,\n totalAccessTime: 0,\n accessCount: 0,\n };\n }\n\n /**\n * Disable caching\n */\n disable(): void {\n this.config.enabled = false;\n this.clear();\n\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = undefined;\n }\n }\n\n /**\n * Enable caching\n */\n enable(): void {\n this.config.enabled = true;\n this.startCleanupTask();\n }\n\n /**\n * Cleanup resources\n */\n cleanup(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = undefined;\n }\n this.clear();\n }\n}\n\n/**\n * Global MCP tool cache instance\n */\nexport const globalMCPToolCache = new MCPToolCache();\n","/**\n * @fileoverview connection-pool.ts\n */\n\nimport { createMCPClient } from '@ai-sdk/mcp';\nimport { logError, logWarn } from '@repo/shared/logs';\n\nimport {\n DEFAULT_RETRY_CONFIG,\n type MCPClient,\n type MCPClientConfig,\n MCPConnectionError,\n createTransportFromConfig,\n globalMCPHealthMonitor,\n withRetryAndTimeout,\n} from './client';\nimport { globalMCPToolCache } from './tool-cache';\n\nimport type { SDKToolSet } from '../../shared';\n\n/**\n * Configuration for MCP connection pool\n */\nexport interface MCPConnectionPoolConfig {\n maxConnections: number;\n minConnections: number;\n idleTimeoutMs: number;\n connectionTimeoutMs: number;\n retryConfig?: typeof DEFAULT_RETRY_CONFIG;\n healthCheckEnabled: boolean;\n}\n\n/**\n * Default connection pool configuration\n */\nexport const DEFAULT_POOL_CONFIG: MCPConnectionPoolConfig = {\n maxConnections: 10,\n minConnections: 2,\n idleTimeoutMs: 300000, // 5 minutes\n connectionTimeoutMs: 30000, // 30 seconds\n healthCheckEnabled: true,\n};\n\n/**\n * Connection wrapper with metadata\n */\ninterface PooledConnection {\n client: MCPClient;\n config: MCPClientConfig;\n createdAt: Date;\n lastUsed: Date;\n inUse: boolean;\n id: string;\n}\n\n/**\n * MCP Connection Pool\n * Manages a pool of reusable MCP client connections for better performance\n */\nexport class MCPConnectionPool {\n private connections = new Map<string, PooledConnection[]>();\n private poolConfig: MCPConnectionPoolConfig;\n private cleanupInterval?: NodeJS.Timeout;\n\n constructor(config: Partial<MCPConnectionPoolConfig> = {}) {\n this.poolConfig = { ...DEFAULT_POOL_CONFIG, ...config };\n this.startCleanupTask();\n }\n\n /**\n * Get a connection from the pool or create a new one\n */\n async getConnection(config: MCPClientConfig): Promise<PooledConnection> {\n const poolKey = this.getPoolKey(config);\n let pool = this.connections.get(poolKey);\n\n if (!pool) {\n pool = [];\n this.connections.set(poolKey, pool);\n }\n\n // Try to find an available connection\n const availableConnection = pool.find(conn => !conn.inUse);\n if (availableConnection) {\n availableConnection.inUse = true;\n availableConnection.lastUsed = new Date();\n return availableConnection;\n }\n\n // Check if we can create a new connection\n if (pool.length >= this.poolConfig.maxConnections) {\n // Wait for a connection to become available\n return this.waitForAvailableConnection(poolKey);\n }\n\n // Create a new connection\n return this.createConnection(config, poolKey);\n }\n\n /**\n * Return a connection to the pool\n */\n releaseConnection(connection: PooledConnection): void {\n connection.inUse = false;\n connection.lastUsed = new Date();\n }\n\n /**\n * Get tools from a pooled connection with caching\n */\n async getTools(config: MCPClientConfig): Promise<SDKToolSet> {\n // Try cache first\n const cachedTools = globalMCPToolCache.get(config);\n if (cachedTools) {\n return cachedTools;\n }\n\n // Check health status\n if (this.poolConfig.healthCheckEnabled && globalMCPHealthMonitor.shouldExclude(config.name)) {\n if (config.gracefulDegradation) {\n logWarn(`Skipping unhealthy MCP client '${config.name}' in pool`, {\n operation: 'mcp_pool_skip_unhealthy',\n metadata: {\n clientName: config.name,\n healthStatus: globalMCPHealthMonitor.getHealthStatus(config.name),\n },\n });\n return emptyToolSet();\n } else {\n throw new MCPConnectionError(\n `MCP client '${config.name}' is marked as unhealthy`,\n config.name,\n config.transport.type,\n );\n }\n }\n\n let connection: PooledConnection | null = null;\n try {\n connection = await this.getConnection(config);\n\n const tools = await withRetryAndTimeout<SDKToolSet>(\n () => {\n if (!connection) throw new Error('Connection is null');\n return connection.client.tools();\n },\n config.retry ?? DEFAULT_RETRY_CONFIG,\n config.timeoutMs || this.poolConfig.connectionTimeoutMs,\n `MCP pooled tools retrieval (${config.name})`,\n );\n\n // Cache the tools\n globalMCPToolCache.set(config, tools);\n\n return tools;\n } catch (error) {\n // If connection failed, remove it from pool\n if (connection) {\n await this.removeConnection(connection);\n }\n\n const mcpError = new MCPConnectionError(\n `Failed to get tools from pooled MCP client '${config.name}'`,\n config.name,\n config.transport.type,\n error instanceof Error ? error : new Error(String(error)),\n );\n\n if (config.gracefulDegradation) {\n logWarn(\n `Pooled MCP client '${config.name}' failed, continuing with degraded functionality`,\n {\n operation: 'mcp_pool_degraded',\n metadata: {\n clientName: config.name,\n transportType: config.transport.type,\n error: mcpError.message,\n },\n },\n );\n return emptyToolSet();\n }\n\n throw mcpError;\n } finally {\n if (connection) {\n this.releaseConnection(connection);\n }\n }\n }\n\n /**\n * Create a new pooled connection\n */\n private async createConnection(\n config: MCPClientConfig,\n poolKey: string,\n ): Promise<PooledConnection> {\n const connectionId = `${config.name}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n try {\n const client = await withRetryAndTimeout(\n async () => {\n const transport = createTransportFromConfig(config.transport);\n return createMCPClient({ transport });\n },\n config.retry ?? DEFAULT_RETRY_CONFIG,\n config.timeoutMs || this.poolConfig.connectionTimeoutMs,\n `MCP pool connection creation (${config.name})`,\n );\n\n const connection: PooledConnection = {\n client,\n config,\n createdAt: new Date(),\n lastUsed: new Date(),\n inUse: true,\n id: connectionId,\n };\n\n const pool = this.connections.get(poolKey);\n if (!pool) throw new Error(`Pool not found for key: ${poolKey}`);\n pool.push(connection);\n\n // Start health monitoring if enabled\n if (this.poolConfig.healthCheckEnabled) {\n globalMCPHealthMonitor.startMonitoring(config);\n }\n\n return connection;\n } catch (error) {\n throw new MCPConnectionError(\n `Failed to create pooled MCP client '${config.name}'`,\n config.name,\n config.transport.type,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n /**\n * Wait for an available connection\n */\n private async waitForAvailableConnection(poolKey: string): Promise<PooledConnection> {\n const maxWaitTime = 30000; // 30 seconds\n const checkInterval = 100; // 100ms\n const startTime = Date.now();\n\n while (Date.now() - startTime < maxWaitTime) {\n const pool = this.connections.get(poolKey);\n if (pool) {\n const availableConnection = pool.find(conn => !conn.inUse);\n if (availableConnection) {\n availableConnection.inUse = true;\n availableConnection.lastUsed = new Date();\n return availableConnection;\n }\n }\n\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n }\n\n throw new Error(`Timeout waiting for available MCP connection (pool: ${poolKey})`);\n }\n\n /**\n * Remove a connection from the pool\n */\n private async removeConnection(connection: PooledConnection): Promise<void> {\n const poolKey = this.getPoolKey(connection.config);\n const pool = this.connections.get(poolKey);\n\n if (pool) {\n const index = pool.findIndex(conn => conn.id === connection.id);\n if (index >= 0) {\n pool.splice(index, 1);\n\n try {\n await connection.client.close();\n } catch (error) {\n logWarn(`Failed to close removed pooled connection ${connection.id}`, {\n operation: 'mcp_pool_connection_close_failed',\n metadata: {\n connectionId: connection.id,\n clientName: connection.config.name,\n error: error instanceof Error ? error.message : String(error),\n },\n });\n }\n }\n }\n }\n\n /**\n * Generate a pool key for a client configuration\n */\n private getPoolKey(config: MCPClientConfig): string {\n return `${config.transport.type}:${JSON.stringify(config.transport)}`;\n }\n\n /**\n * Start periodic cleanup of idle connections\n */\n private startCleanupTask(): void {\n this.cleanupInterval = setInterval(() => {\n void this.cleanupIdleConnections();\n }, 60000); // Run every minute\n }\n\n /**\n * Clean up idle connections\n */\n private async cleanupIdleConnections(): Promise<void> {\n const now = new Date();\n const idleThreshold = new Date(now.getTime() - this.poolConfig.idleTimeoutMs);\n\n for (const [poolKey, pool] of this.connections.entries()) {\n const connectionsToRemove: PooledConnection[] = [];\n\n // Find idle connections to remove\n for (const connection of pool) {\n if (!connection.inUse && connection.lastUsed < idleThreshold) {\n // Keep minimum connections\n const remainingConnections = pool.length - connectionsToRemove.length;\n if (remainingConnections > this.poolConfig.minConnections) {\n connectionsToRemove.push(connection);\n }\n }\n }\n\n // Remove idle connections\n for (const connection of connectionsToRemove) {\n await this.removeConnection(connection);\n }\n\n // Remove empty pools\n if (pool.length === 0) {\n this.connections.delete(poolKey);\n }\n }\n }\n\n /**\n * Get pool statistics\n */\n getPoolStats(): Record<string, { total: number; inUse: number; idle: number }> {\n const stats: Record<string, { total: number; inUse: number; idle: number }> = {};\n\n for (const [poolKey, pool] of this.connections.entries()) {\n const inUse = pool.filter(conn => conn.inUse).length;\n const idle = pool.filter(conn => !conn.inUse).length;\n\n stats[poolKey] = {\n total: pool.length,\n inUse,\n idle,\n };\n }\n\n return stats;\n }\n\n /**\n * Cleanup all connections and stop background tasks\n */\n async cleanup(): Promise<void> {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = undefined;\n }\n\n // Close all connections\n const closePromises: Promise<void>[] = [];\n\n for (const pool of this.connections.values()) {\n for (const connection of pool) {\n closePromises.push(\n (async () => {\n try {\n await connection.client.close();\n } catch (error) {\n logError(`Failed to close pooled connection ${connection.id}`, {\n operation: 'mcp_pool_cleanup_failed',\n metadata: {\n connectionId: connection.id,\n clientName: connection.config.name,\n },\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n })(),\n );\n }\n }\n\n await Promise.all(closePromises);\n this.connections.clear();\n }\n}\n\nfunction emptyToolSet(): SDKToolSet {\n return {};\n}\n\n/**\n * Global MCP connection pool instance\n */\nexport const globalMCPConnectionPool = new MCPConnectionPool();\n","/**\n * @fileoverview edge-runtime.ts\n */\n\nimport { createMCPClient, type OAuthClientProvider } from '@ai-sdk/mcp';\nimport { logWarn } from '@repo/shared/logs';\n\nimport type { MCPClient, MCPClientConfig } from './client';\nimport type { SDKToolSet } from '../../shared';\n// Use AI SDK tool types instead of MCP SDK types\n\n/**\n * Edge runtime compatible MCP client configuration\n * Limitations: No stdio transport (no child processes), HTTP transport only\n */\nexport interface EdgeMCPClientConfig {\n name: string;\n transport: EdgeMCPTransportConfig;\n}\n\nexport interface EdgeMCPTransportConfig {\n type: 'sse' | 'http';\n // For SSE transport\n url?: string;\n headers?: Record<string, string>;\n // For HTTP transport\n httpUrl?: string;\n sessionId?: string;\n authProvider?: OAuthClientProvider;\n}\n\n/**\n * Check if we're running in edge runtime\n */\nexport function isEdgeRuntime(): boolean {\n try {\n const runtimeGlobal = globalThis as { WorkerGlobalScope?: unknown; EdgeRuntime?: unknown };\n // Edge runtime doesn't have process object\n return (\n typeof process === 'undefined' ||\n // Vercel Edge Runtime\n process.env.VERCEL_REGION !== undefined ||\n // Cloudflare Workers\n typeof runtimeGlobal.WorkerGlobalScope !== 'undefined' ||\n // Other edge indicators\n typeof runtimeGlobal.EdgeRuntime !== 'undefined'\n );\n } catch {\n return true; // If we can't access process, assume edge runtime\n }\n}\n\n/**\n * Filter MCP configurations for edge runtime compatibility\n */\nexport function getEdgeCompatibleConfigs(configs: MCPClientConfig[]): EdgeMCPClientConfig[] {\n return configs\n .filter(config => config.transport.type !== 'stdio')\n .map(config => ({\n name: config.name,\n transport: config.transport as EdgeMCPTransportConfig,\n }));\n}\n\n/**\n * Create edge-compatible MCP tools\n * This function works in both Node.js and edge runtimes\n */\nexport async function createEdgeMCPTools(\n configs: EdgeMCPClientConfig[],\n options: {\n gracefulDegradation?: boolean;\n timeout?: number;\n } = {},\n): Promise<{\n tools: SDKToolSet;\n clients: MCPClient[];\n closeAllClients: () => Promise<void>;\n}> {\n const clients: MCPClient[] = [];\n const toolSets: SDKToolSet[] = [];\n const timeout = options.timeout ?? 10000; // 10 second timeout for edge\n\n const withTimeout = async <T>(operation: () => Promise<T>, label: string): Promise<T> => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n operation(),\n new Promise<T>((_resolve, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`${label} timed out after ${timeout}ms`));\n }, timeout);\n }),\n ]);\n } finally {\n if (timer) {\n clearTimeout(timer);\n }\n }\n };\n\n // Create clients with timeout\n const clientPromises = configs.map(async config => {\n try {\n const transport = buildEdgeTransport(config.transport);\n const { client, toolSet } = await withTimeout(async () => {\n const clientInstance = await createMCPClient({ transport });\n const tools = await clientInstance.tools();\n return { client: clientInstance, toolSet: tools };\n }, `MCP client ${config.name}`);\n return { client, toolSet, config };\n } catch (error) {\n if (options.gracefulDegradation) {\n logWarn(`Failed to create edge MCP client ${config.name}`, {\n clientName: config.name,\n error: error instanceof Error ? error.message : String(error),\n operation: 'mcp_edge_client_creation',\n });\n return null;\n } else {\n throw error;\n }\n }\n });\n\n const results = await Promise.all(clientPromises);\n\n // Filter successful results\n for (const result of results) {\n if (result) {\n clients.push(result.client);\n toolSets.push(result.toolSet);\n }\n }\n\n // Merge tool sets\n const tools: SDKToolSet = Object.assign({}, ...toolSets);\n\n const closeAllClients = async (): Promise<void> => {\n await Promise.all(\n clients.map(client =>\n client.close().catch((error: unknown) => {\n logWarn('Failed to close edge MCP client', {\n error: error instanceof Error ? error.message : String(error),\n operation: 'mcp_edge_client_close',\n });\n }),\n ),\n );\n };\n\n return {\n tools,\n clients,\n closeAllClients,\n };\n}\n\ntype EdgeRemoteTransport = {\n type: 'sse' | 'http';\n url: string;\n headers?: Record<string, string>;\n authProvider?: OAuthClientProvider;\n};\n\nfunction buildEdgeTransport(transport: EdgeMCPTransportConfig): EdgeRemoteTransport {\n const url = transport.url ?? transport.httpUrl;\n\n if (!url) {\n throw new Error('HTTP URL is required for HTTP transport');\n }\n\n const headers = { ...transport.headers };\n if (transport.type === 'http' && transport.sessionId) {\n headers['x-mcp-session-id'] = transport.sessionId;\n }\n\n return {\n type: transport.type,\n url,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n authProvider: transport.authProvider,\n };\n}\n\n/**\n * Pre-configured edge-compatible MCP transports\n */\nexport const edgeMCPTransports = {\n /**\n * SSE transport for edge runtime\n */\n sse: (name: string, url: string, headers?: Record<string, string>): EdgeMCPClientConfig => ({\n name,\n transport: {\n type: 'sse',\n url,\n headers,\n },\n }),\n\n /**\n * HTTP transport for edge runtime\n */\n http: (name: string, httpUrl: string, sessionId?: string): EdgeMCPClientConfig => ({\n name,\n transport: {\n type: 'http',\n url: httpUrl,\n sessionId,\n },\n }),\n\n /**\n * Zapier MCP via SSE (edge compatible)\n */\n zapier: (apiKey: string): EdgeMCPClientConfig => ({\n name: 'zapier',\n transport: {\n type: 'sse',\n url: `https://actions.zapier.com/mcp/${apiKey}/sse`,\n },\n }),\n\n /**\n * Custom SSE-based search API\n */\n search: (baseUrl: string, apiKey?: string): EdgeMCPClientConfig => ({\n name: 'search',\n transport: {\n type: 'sse',\n url: `${baseUrl}/mcp/sse`,\n headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,\n },\n }),\n};\n\n/**\n * Environment discovery for edge runtime\n */\nexport function discoverEdgeMCPServers(): EdgeMCPClientConfig[] {\n const servers: EdgeMCPClientConfig[] = [];\n\n // Look for edge-compatible environment variables\n if (typeof process !== 'undefined' && process.env) {\n // Zapier integration\n if (process.env.ZAPIER_MCP_API_KEY) {\n servers.push(edgeMCPTransports.zapier(process.env.ZAPIER_MCP_API_KEY));\n }\n\n // Custom SSE servers\n const sseUrl = process.env.MCP_SSE_URL;\n if (sseUrl) {\n const headers: Record<string, string> = {};\n if (process.env.MCP_SSE_API_KEY) {\n headers['Authorization'] = `Bearer ${process.env.MCP_SSE_API_KEY}`;\n }\n servers.push(edgeMCPTransports.sse('custom-sse', sseUrl, headers));\n }\n\n // Custom HTTP servers\n const httpUrl = process.env.MCP_HTTP_URL;\n if (httpUrl) {\n servers.push(edgeMCPTransports.http('custom-http', httpUrl, process.env.MCP_HTTP_SESSION_ID));\n }\n }\n\n return servers;\n}\n\n/**\n * Smart MCP client factory that chooses the right implementation based on runtime\n */\nexport async function createSmartMCPTools(\n nodeConfigs: MCPClientConfig[] = [],\n edgeConfigs: EdgeMCPClientConfig[] = [],\n options: {\n gracefulDegradation?: boolean;\n discoverFromEnvironment?: boolean;\n } = {},\n): Promise<{\n tools: SDKToolSet;\n clients: MCPClient[];\n closeAllClients: () => Promise<void>;\n runtime: 'node' | 'edge';\n}> {\n const runtime = isEdgeRuntime() ? 'edge' : 'node';\n\n if (runtime === 'edge') {\n // Use edge-compatible configurations\n let configs = edgeConfigs;\n\n if (options.discoverFromEnvironment) {\n const discovered = discoverEdgeMCPServers();\n configs = [...configs, ...discovered];\n }\n\n // Filter node configs to edge-compatible ones\n const edgeCompatible = getEdgeCompatibleConfigs(nodeConfigs);\n configs = [...configs, ...edgeCompatible];\n\n const result = await createEdgeMCPTools(configs, options);\n return { ...result, runtime };\n } else {\n // Use full Node.js implementation (import dynamically to avoid edge runtime issues)\n const { createMCPToolsFromConfigs } = await import('./client');\n\n let configs = nodeConfigs;\n\n if (options.discoverFromEnvironment) {\n const { getMCPServers } = await import('./environment');\n configs = getMCPServers(configs);\n }\n\n const result = await createMCPToolsFromConfigs(configs, options);\n return { ...result, runtime };\n }\n}\n","/**\n * @fileoverview transport-selector.ts\n */\n\nimport type { MCPClientConfig } from './client';\n\n/**\n * Transport selection criteria\n */\nexport interface TransportSelectionCriteria {\n latencyRequirement: 'low' | 'medium' | 'high';\n reliabilityRequirement: 'basic' | 'standard' | 'high';\n throughputRequirement: 'low' | 'medium' | 'high';\n networkEnvironment: 'local' | 'lan' | 'wan' | 'internet';\n securityRequirement: 'basic' | 'standard' | 'high';\n scalabilityRequirement: 'single' | 'multiple' | 'massive';\n}\n\n/**\n * Transport performance characteristics\n */\ninterface TransportCharacteristics {\n latency: number; // Lower is better (1-10 scale)\n reliability: number; // Higher is better (1-10 scale)\n throughput: number; // Higher is better (1-10 scale)\n scalability: number; // Higher is better (1-10 scale)\n security: number; // Higher is better (1-10 scale)\n complexity: number; // Lower is better (1-10 scale)\n overhead: number; // Lower is better (1-10 scale)\n}\n\n/**\n * Transport scoring weights\n */\ninterface TransportScoringWeights {\n latency: number;\n reliability: number;\n throughput: number;\n scalability: number;\n security: number;\n complexity: number;\n overhead: number;\n}\n\n/**\n * Transport performance profiles\n */\nconst TRANSPORT_CHARACTERISTICS: Record<string, TransportCharacteristics> = {\n stdio: {\n latency: 9, // Excellent - direct IPC\n reliability: 8, // Very good - OS managed\n throughput: 7, // Good - direct pipes\n scalability: 4, // Limited - single process\n security: 7, // Good - OS process isolation\n complexity: 9, // Excellent - simple setup\n overhead: 9, // Excellent - minimal overhead\n },\n sse: {\n latency: 6, // Good - HTTP overhead\n reliability: 7, // Good - HTTP retry mechanisms\n throughput: 6, // Good - HTTP streaming\n scalability: 8, // Very good - HTTP scalable\n security: 6, // Good - HTTPS available\n complexity: 7, // Good - standard HTTP\n overhead: 6, // Good - HTTP headers\n },\n http: {\n latency: 5, // Fair - request/response cycle\n reliability: 6, // Fair - stateless, needs retry\n throughput: 5, // Fair - request/response only\n scalability: 9, // Excellent - stateless HTTP\n security: 7, // Good - HTTPS + auth\n complexity: 8, // Very good - standard REST\n overhead: 5, // Fair - full HTTP headers\n },\n};\n\n/**\n * Default scoring weights based on use case\n */\nconst USE_CASE_WEIGHTS: Record<string, TransportScoringWeights> = {\n 'real-time': {\n latency: 0.4,\n reliability: 0.2,\n throughput: 0.2,\n scalability: 0.1,\n security: 0.05,\n complexity: 0.03,\n overhead: 0.02,\n },\n 'batch-processing': {\n latency: 0.1,\n reliability: 0.3,\n throughput: 0.3,\n scalability: 0.2,\n security: 0.05,\n complexity: 0.03,\n overhead: 0.02,\n },\n 'high-availability': {\n latency: 0.15,\n reliability: 0.4,\n throughput: 0.15,\n scalability: 0.2,\n security: 0.05,\n complexity: 0.03,\n overhead: 0.02,\n },\n development: {\n latency: 0.2,\n reliability: 0.2,\n throughput: 0.1,\n scalability: 0.1,\n security: 0.1,\n complexity: 0.25,\n overhead: 0.05,\n },\n production: {\n latency: 0.2,\n reliability: 0.25,\n throughput: 0.2,\n scalability: 0.15,\n security: 0.15,\n complexity: 0.03,\n overhead: 0.02,\n },\n};\n\n/**\n * Transport selection result\n */\nexport interface TransportSelectionResult {\n recommendedTransport: 'stdio' | 'sse' | 'http';\n score: number;\n reasoningText: string[];\n alternatives: Array<{\n transport: 'stdio' | 'sse' | 'http';\n score: number;\n reason: string;\n }>;\n}\n\n/**\n * MCP Transport Selector\n * Intelligently selects the best transport based on use case requirements\n */\nexport class MCPTransportSelector {\n /**\n * Select optimal transport based on criteria\n */\n selectTransport(\n criteria: TransportSelectionCriteria,\n availableTransports: Array<'stdio' | 'sse' | 'http'> = ['stdio', 'sse', 'http'],\n ): TransportSelectionResult {\n const weights = this.getWeightsForCriteria(criteria);\n const scores = this.calculateTransportScores(weights, availableTransports);\n\n // Sort by score (highest first)\n const sortedScores = scores.sort((a, b) => b.score - a.score);\n const best = sortedScores[0];\n if (!best) {\n throw new Error('No transport available');\n }\n\n const reasoningText = this.generateReasoning(criteria, best.transport);\n const alternatives = sortedScores.slice(1).map(result => ({\n transport: result.transport,\n score: result.score,\n reason: this.getTransportReason(result.transport, criteria),\n }));\n\n return {\n recommendedTransport: best.transport,\n score: best.score,\n reasoningText,\n alternatives,\n };\n }\n\n /**\n * Select optimal transport for common use cases\n */\n selectForUseCase(\n useCase: 'real-time' | 'batch-processing' | 'high-availability' | 'development' | 'production',\n availableTransports: Array<'stdio' | 'sse' | 'http'> = ['stdio', 'sse', 'http'],\n ): TransportSelectionResult {\n const weights = USE_CASE_WEIGHTS[useCase];\n if (!weights) {\n throw new Error(`Unknown use case: ${useCase}`);\n }\n const scores = this.calculateTransportScores(weights, availableTransports);\n\n const sortedScores = scores.sort((a, b) => b.score - a.score);\n const best = sortedScores[0];\n if (!best) {\n throw new Error('No transport available');\n }\n\n const reasoningText = [`Optimized for ${useCase} use case`];\n const alternatives = sortedScores.slice(1).map(result => ({\n transport: result.transport,\n score: result.score,\n reason: `Alternative for ${useCase}`,\n }));\n\n return {\n recommendedTransport: best.transport,\n score: best.score,\n reasoningText,\n alternatives,\n };\n }\n\n /**\n * Get transport recommendation for specific client config\n */\n recommendForClient(config: MCPClientConfig): TransportSelectionResult {\n // Analyze existing transport configuration to infer requirements\n const criteria = this.inferCriteriaFromConfig(config);\n return this.selectTransport(criteria);\n }\n\n /**\n * Calculate weighted scores for available transports\n */\n private calculateTransportScores(\n weights: TransportScoringWeights,\n availableTransports: Array<'stdio' | 'sse' | 'http'>,\n ): Array<{ transport: 'stdio' | 'sse' | 'http'; score: number }> {\n return availableTransports.map(transport => {\n const characteristics = TRANSPORT_CHARACTERISTICS[transport];\n if (!characteristics) {\n return { transport, score: 0 };\n }\n\n // Calculate weighted score (higher is better)\n const score =\n characteristics.latency * weights.latency +\n characteristics.reliability * weights.reliability +\n characteristics.throughput * weights.throughput +\n characteristics.scalability * weights.scalability +\n characteristics.security * weights.security +\n (10 - characteristics.complexity) * weights.complexity + // Invert complexity (lower is better)\n (10 - characteristics.overhead) * weights.overhead; // Invert overhead (lower is better)\n\n return { transport, score };\n });\n }\n\n /**\n * Convert selection criteria to scoring weights\n */\n private getWeightsForCriteria(criteria: TransportSelectionCriteria): TransportScoringWeights {\n const weights: TransportScoringWeights = {\n latency: 0,\n reliability: 0,\n throughput: 0,\n scalability: 0,\n security: 0,\n complexity: 0,\n overhead: 0,\n };\n\n // Latency requirement\n switch (criteria.latencyRequirement) {\n case 'low':\n weights.latency = 0.1;\n break;\n case 'medium':\n weights.latency = 0.25;\n break;\n case 'high':\n weights.latency = 0.4;\n break;\n }\n\n // Reliability requirement\n switch (criteria.reliabilityRequirement) {\n case 'basic':\n weights.reliability = 0.1;\n break;\n case 'standard':\n weights.reliability = 0.25;\n break;\n case 'high':\n weights.reliability = 0.4;\n break;\n }\n\n // Throughput requirement\n switch (criteria.throughputRequirement) {\n case 'low':\n weights.throughput = 0.1;\n break;\n case 'medium':\n weights.throughput = 0.2;\n break;\n case 'high':\n weights.throughput = 0.3;\n break;\n }\n\n // Scalability requirement\n switch (criteria.scalabilityRequirement) {\n case 'single':\n weights.scalability = 0.05;\n break;\n case 'multiple':\n weights.scalability = 0.15;\n break;\n case 'massive':\n weights.scalability = 0.3;\n break;\n }\n\n // Security requirement\n switch (criteria.securityRequirement) {\n case 'basic':\n weights.security = 0.05;\n break;\n case 'standard':\n weights.security = 0.1;\n break;\n case 'high':\n weights.security = 0.2;\n break;\n }\n\n // Network environment adjustments\n switch (criteria.networkEnvironment) {\n case 'local':\n weights.complexity = 0.15; // Prefer simplicity for local\n weights.overhead = 0.1;\n break;\n case 'lan':\n weights.reliability = Math.min(weights.reliability + 0.1, 0.5);\n break;\n case 'wan':\n case 'internet':\n weights.scalability = Math.min(weights.scalability + 0.1, 0.4);\n weights.security = Math.min(weights.security + 0.1, 0.3);\n break;\n }\n\n // Normalize weights to sum to 1.0\n const total = Object.values(weights).reduce((sum, weight) => sum + weight, 0);\n if (total > 0) {\n Object.keys(weights).forEach(key => {\n weights[key as keyof TransportScoringWeights] /= total;\n });\n }\n\n return weights;\n }\n\n /**\n * Generate reasoning for transport selection\n */\n private generateReasoning(\n criteria: TransportSelectionCriteria,\n selectedTransport: 'stdio' | 'sse' | 'http',\n ): string[] {\n const reasoning: string[] = [];\n const characteristics = TRANSPORT_CHARACTERISTICS[selectedTransport];\n if (!characteristics) {\n return reasoning;\n }\n\n // Add specific reasoning based on criteria\n if (criteria.latencyRequirement === 'high' && selectedTransport === 'stdio') {\n reasoning.push('STDIO selected for lowest latency via direct IPC');\n }\n\n if (criteria.scalabilityRequirement === 'massive' && selectedTransport === 'http') {\n reasoning.push('HTTP selected for maximum scalability in distributed environments');\n }\n\n if (criteria.networkEnvironment === 'local' && selectedTransport === 'stdio') {\n reasoning.push('STDIO optimal for local process communication');\n }\n\n if (criteria.reliabilityRequirement === 'high') {\n reasoning.push(\n `Selected transport provides reliability score of ${characteristics.reliability}/10`,\n );\n }\n\n // Add general strengths\n const strengths: string[] = [];\n if (characteristics.latency >= 8) strengths.push('excellent latency');\n if (characteristics.reliability >= 8) strengths.push('high reliability');\n if (characteristics.throughput >= 8) strengths.push('high throughput');\n if (characteristics.scalability >= 8) strengths.push('excellent scalability');\n if (characteristics.security >= 8) strengths.push('strong security');\n if (characteristics.complexity >= 8) strengths.push('simple setup');\n\n if (strengths.length > 0) {\n reasoning.push(`Transport provides: ${strengths.join(', ')}`);\n }\n\n return reasoning.length > 0 ? reasoning : ['Selected based on overall optimization criteria'];\n }\n\n /**\n * Get reason for alternative transport\n */\n private getTransportReason(\n transport: 'stdio' | 'sse' | 'http',\n criteria: TransportSelectionCriteria,\n ): string {\n void criteria;\n\n switch (transport) {\n case 'stdio':\n return 'Best for low-latency local communication';\n case 'sse':\n return 'Good balance of features with streaming support';\n case 'http':\n return 'Best for scalable, distributed architectures';\n default:\n return 'Alternative transport option';\n }\n }\n\n /**\n * Infer selection criteria from existing client configuration\n */\n private inferCriteriaFromConfig(config: MCPClientConfig): TransportSelectionCriteria {\n // Make educated guesses based on configuration\n const criteria: TransportSelectionCriteria = {\n latencyRequirement: 'medium',\n reliabilityRequirement: 'standard',\n throughputRequirement: 'medium',\n networkEnvironment: 'local',\n securityRequirement: 'standard',\n scalabilityRequirement: 'multiple',\n };\n\n // Adjust based on transport type\n switch (config.transport.type) {\n case 'stdio':\n criteria.networkEnvironment = 'local';\n criteria.latencyRequirement = 'high';\n criteria.scalabilityRequirement = 'single';\n break;\n case 'sse':\n criteria.networkEnvironment = 'lan';\n criteria.throughputRequirement = 'high';\n break;\n case 'http':\n criteria.networkEnvironment = 'internet';\n criteria.scalabilityRequirement = 'massive';\n break;\n }\n\n // Adjust based on other config options\n if (config.gracefulDegradation) {\n criteria.reliabilityRequirement = 'high';\n }\n\n if (config.timeoutMs && config.timeoutMs < 5000) {\n criteria.latencyRequirement = 'high';\n }\n\n return criteria;\n }\n}\n\n/**\n * Global transport selector instance\n */\nexport const globalTransportSelector = new MCPTransportSelector();\n\n/**\n * Convenience function to get transport recommendation\n */\nexport function selectOptimalTransport(\n criteria: TransportSelectionCriteria,\n availableTransports?: Array<'stdio' | 'sse' | 'http'>,\n): TransportSelectionResult {\n return globalTransportSelector.selectTransport(criteria, availableTransports);\n}\n\n/**\n * Convenience function to get transport recommendation for use case\n */\nexport function selectTransportForUseCase(\n useCase: 'real-time' | 'batch-processing' | 'high-availability' | 'development' | 'production',\n availableTransports?: Array<'stdio' | 'sse' | 'http'>,\n): TransportSelectionResult {\n return globalTransportSelector.selectForUseCase(useCase, availableTransports);\n}\n"],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { Nr as SDKLanguageModel } from "./ai-runtime-DIwOEc6g.mjs";
2
+ import { a as AgentExecutionOptions, c as BaseAgentState, n as AgentConfig, t as Agent } from "./types-DbUfMCnT.mjs";
3
+ import { z } from "zod";
4
+
5
+ //#region src/agents/triage/triage-agent.d.ts
6
+ interface AgentCapability {
7
+ agentId: string;
8
+ name: string;
9
+ description: string;
10
+ examples?: string[];
11
+ keywords?: string[];
12
+ }
13
+ declare const TriageResultSchema: z.ZodObject<{
14
+ selectedAgentId: z.ZodString;
15
+ confidence: z.ZodNumber;
16
+ reasoning: z.ZodString;
17
+ reformulatedQuery: z.ZodOptional<z.ZodString>;
18
+ requiresMultiAgent: z.ZodDefault<z.ZodBoolean>;
19
+ alternativeAgents: z.ZodOptional<z.ZodArray<z.ZodObject<{
20
+ agentId: z.ZodString;
21
+ confidence: z.ZodNumber;
22
+ }, z.core.$strip>>>;
23
+ }, z.core.$strip>;
24
+ type TriageResult = z.infer<typeof TriageResultSchema>;
25
+ interface TriageAgentConfig extends Omit<AgentConfig, 'systemPrompt'> {
26
+ agents: AgentCapability[];
27
+ confidenceThreshold?: number;
28
+ fallbackAgentId?: string;
29
+ customPrompt?: string;
30
+ maxTurns?: 1;
31
+ }
32
+ declare function createTriageAgent(config: TriageAgentConfig): {
33
+ config: {
34
+ id: string;
35
+ name: string;
36
+ description: string;
37
+ systemPrompt: string;
38
+ maxIterations: number;
39
+ maxTokens?: number | undefined;
40
+ temperature?: number | undefined;
41
+ };
42
+ agents: AgentCapability[];
43
+ triage(query: string, options: {
44
+ model: SDKLanguageModel;
45
+ context?: AgentExecutionOptions["context"];
46
+ }): Promise<TriageResult>;
47
+ execute(prompt: string, options: AgentExecutionOptions & {
48
+ agentRegistry: Map<string, Agent>;
49
+ }): Promise<BaseAgentState & {
50
+ triageResult: TriageResult;
51
+ }>;
52
+ };
53
+ interface KeywordTriageOptions {
54
+ minMatchesForFullConfidence?: number;
55
+ }
56
+ declare function createKeywordTriage(rules: Array<{
57
+ keywords: string[];
58
+ agentId: string;
59
+ priority?: number;
60
+ }>, fallback: string, options?: KeywordTriageOptions): (query: string) => TriageResult;
61
+ //#endregion
62
+ export { TriageResultSchema as a, TriageResult as i, KeywordTriageOptions as n, createKeywordTriage as o, TriageAgentConfig as r, createTriageAgent as s, AgentCapability as t };
63
+ //# sourceMappingURL=triage-agent-BEsXg5sw.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage-agent-BEsXg5sw.d.mts","names":[],"sources":["../src/agents/triage/triage-agent.ts"],"mappings":";;;;;UAiBiB,eAAA;EAEf,OAAA;EAEA,IAAA;EAEA,WAAA;EAEA,QAAA;EAEA,QAAA;AAAA;AAAA,cAMW,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;;;;;;;;;KAsBnB,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,UAKzB,iBAAA,SAA0B,IAAA,CAAK,WAAA;EAE9C,MAAA,EAAQ,eAAA;EAER,mBAAA;EAEA,eAAA;EAEA,YAAA;EAMA,QAAA;AAAA;AAAA,iBA2Bc,iBAAA,CAAkB,MAAA,EAAQ,iBAAA;;;;;;;;;;;wBAkBvB,OAAA;IACF,KAAA,EAAO,gBAAA;IAAkB,OAAA,GAAU,qBAAA;EAAA,IAC7C,OAAA,CAAQ,YAAA;0BAyBK,OAAA,EACL,qBAAA;IACP,aAAA,EAAe,GAAA,SAAY,KAAA;EAAA,IAE5B,OAAA,CAAQ,cAAA;IAAmB,YAAA,EAAc,YAAA;EAAA;AAAA;AAAA,UAyE/B,oBAAA;EAEf,2BAAA;AAAA;AAAA,iBAWc,mBAAA,CACd,KAAA,EAAO,KAAA;EAAQ,QAAA;EAAoB,OAAA;EAAiB,QAAA;AAAA,IACpD,QAAA,UACA,OAAA,GAAU,oBAAA,IACR,KAAA,aAAkB,YAAA"}
@@ -0,0 +1,167 @@
1
+ import { $ as generateObject } from "./ai-runtime-CDzQztTt.mjs";
2
+ import { n as createInitialState } from "./factory-DP6VSl8C.mjs";
3
+ import { z } from "zod";
4
+
5
+ //#region src/agents/triage/triage-agent.ts
6
+ /**
7
+ * @fileoverview Triage agent for routing requests to specialized agents.
8
+ * @module @od-oneapp/ai-platform/agents/triage
9
+ */
10
+ /**
11
+ * Triage result schema.
12
+ */
13
+ const TriageResultSchema = z.object({
14
+ selectedAgentId: z.string(),
15
+ confidence: z.number().min(0).max(1),
16
+ reasoning: z.string(),
17
+ reformulatedQuery: z.string().optional(),
18
+ requiresMultiAgent: z.boolean().default(false),
19
+ alternativeAgents: z.array(z.object({
20
+ agentId: z.string(),
21
+ confidence: z.number().min(0).max(1)
22
+ })).optional()
23
+ });
24
+ /**
25
+ * Creates a triage agent that routes requests to specialized agents.
26
+ *
27
+ * @param config - Triage agent configuration
28
+ * @returns Triage agent
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const triageAgent = createTriageAgent({
33
+ * id: 'triage',
34
+ * name: 'Request Router',
35
+ * description: 'Routes requests to appropriate agents',
36
+ * agents: [
37
+ * { agentId: 'code', name: 'Code Agent', description: 'Writes and reviews code' },
38
+ * { agentId: 'research', name: 'Research Agent', description: 'Researches topics' },
39
+ * ],
40
+ * fallbackAgentId: 'general',
41
+ * });
42
+ *
43
+ * const result = await triageAgent.triage('Help me write a React component', {
44
+ * model: openai('gpt-4o-mini'),
45
+ * });
46
+ * ```
47
+ */
48
+ function createTriageAgent(config) {
49
+ const { agents, confidenceThreshold = .5, fallbackAgentId, customPrompt } = config;
50
+ const systemPrompt = customPrompt ?? buildTriagePrompt(agents);
51
+ return {
52
+ config: {
53
+ ...config,
54
+ systemPrompt
55
+ },
56
+ agents,
57
+ async triage(query, options) {
58
+ const { object } = await generateObject({
59
+ model: options.model,
60
+ system: systemPrompt,
61
+ prompt: `Route this query to the most appropriate agent:\n\n"${query}"`,
62
+ schema: TriageResultSchema,
63
+ abortSignal: options.context?.abortSignal
64
+ });
65
+ if (object.confidence < confidenceThreshold && fallbackAgentId) return {
66
+ ...object,
67
+ selectedAgentId: fallbackAgentId,
68
+ reasoning: `Confidence (${object.confidence}) below threshold. Using fallback agent. Original reasoning: ${object.reasoning}`
69
+ };
70
+ return object;
71
+ },
72
+ async execute(prompt, options) {
73
+ const state = createInitialState(options.messages);
74
+ const triageResult = await this.triage(prompt, {
75
+ model: options.model,
76
+ context: options.context
77
+ });
78
+ state.metadata.triageResult = triageResult;
79
+ const selectedAgent = options.agentRegistry.get(triageResult.selectedAgentId);
80
+ if (!selectedAgent) {
81
+ state.error = /* @__PURE__ */ new Error(`Agent not found: ${triageResult.selectedAgentId}`);
82
+ state.isComplete = true;
83
+ return {
84
+ ...state,
85
+ triageResult
86
+ };
87
+ }
88
+ const agentQuery = triageResult.reformulatedQuery ?? prompt;
89
+ const { agentRegistry: _, ...agentOptions } = options;
90
+ const agentResult = await selectedAgent.execute(agentQuery, agentOptions);
91
+ return {
92
+ ...agentResult,
93
+ metadata: {
94
+ ...agentResult.metadata,
95
+ triageResult,
96
+ delegatedTo: triageResult.selectedAgentId
97
+ },
98
+ triageResult
99
+ };
100
+ }
101
+ };
102
+ }
103
+ /**
104
+ * Builds the triage system prompt from agent capabilities.
105
+ */
106
+ function buildTriagePrompt(agents) {
107
+ return `You are a request routing agent. Your job is to analyze incoming queries and route them to the most appropriate specialized agent.
108
+
109
+ Available Agents:
110
+ ${agents.map((agent) => {
111
+ let desc = `- ${agent.name} (ID: ${agent.agentId}): ${agent.description}`;
112
+ if (agent.examples?.length) desc += `\n Examples: ${agent.examples.join(", ")}`;
113
+ if (agent.keywords?.length) desc += `\n Keywords: ${agent.keywords.join(", ")}`;
114
+ return desc;
115
+ }).join("\n\n")}
116
+
117
+ Instructions:
118
+ 1. Analyze the query to understand the user's intent
119
+ 2. Match the intent to the most suitable agent based on capabilities
120
+ 3. Provide a confidence score (0-1) for your selection
121
+ 4. Optionally reformulate the query to be more specific for the selected agent
122
+ 5. Consider if multiple agents might be needed for complex queries
123
+
124
+ Always respond with your routing decision in the specified JSON format.`;
125
+ }
126
+ /**
127
+ * Creates a simple keyword-based triage function.
128
+ *
129
+ * @param rules - Keyword to agent ID mapping
130
+ * @param fallback - Fallback agent ID
131
+ * @param options - Optional configuration for the triage function
132
+ * @returns Triage function
133
+ */
134
+ function createKeywordTriage(rules, fallback, options) {
135
+ const minMatches = options?.minMatchesForFullConfidence ?? 3;
136
+ return (query) => {
137
+ const lowerQuery = query.toLowerCase();
138
+ const matches = [];
139
+ for (const rule of rules) {
140
+ const count = rule.keywords.filter((kw) => lowerQuery.includes(kw.toLowerCase())).length;
141
+ if (count > 0) matches.push({
142
+ agentId: rule.agentId,
143
+ count,
144
+ priority: rule.priority ?? 0
145
+ });
146
+ }
147
+ matches.sort((a, b) => {
148
+ if (b.count !== a.count) return b.count - a.count;
149
+ return b.priority - a.priority;
150
+ });
151
+ const best = matches[0];
152
+ return {
153
+ selectedAgentId: best?.agentId ?? fallback,
154
+ confidence: best ? Math.min(best.count / minMatches, 1) : 0,
155
+ reasoning: best ? `Matched ${best.count} keywords for agent ${best.agentId}` : `No keyword matches, using fallback`,
156
+ requiresMultiAgent: false,
157
+ alternativeAgents: matches.slice(1).map((m) => ({
158
+ agentId: m.agentId,
159
+ confidence: Math.min(m.count / minMatches, 1)
160
+ }))
161
+ };
162
+ };
163
+ }
164
+
165
+ //#endregion
166
+ export { createKeywordTriage as n, createTriageAgent as r, TriageResultSchema as t };
167
+ //# sourceMappingURL=triage-agent-CBsfX-HW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage-agent-CBsfX-HW.mjs","names":[],"sources":["../src/agents/triage/triage-agent.ts"],"sourcesContent":["/**\n * @fileoverview Triage agent for routing requests to specialized agents.\n * @module @od-oneapp/ai-platform/agents/triage\n */\n\nimport { z } from 'zod';\n\nimport { generateObject } from '../../shared';\nimport { createInitialState } from '../base/factory';\n\nimport type { SDKLanguageModel } from '../../shared';\nimport type { Agent, AgentConfig, BaseAgentState, AgentExecutionOptions } from '../base/types';\n\n\n/**\n * Agent capability description.\n */\nexport interface AgentCapability {\n /** Agent ID */\n agentId: string;\n /** Agent name */\n name: string;\n /** What the agent can do */\n description: string;\n /** Example queries this agent handles */\n examples?: string[];\n /** Keywords that indicate this agent */\n keywords?: string[];\n}\n\n/**\n * Triage result schema.\n */\nexport const TriageResultSchema = z.object({\n /** Selected agent ID */\n selectedAgentId: z.string(),\n /** Confidence score 0-1 */\n confidence: z.number().min(0).max(1),\n /** Reasoning for selection */\n reasoning: z.string(),\n /** Reformulated query for the selected agent */\n reformulatedQuery: z.string().optional(),\n /** Whether multiple agents might be needed */\n requiresMultiAgent: z.boolean().default(false),\n /** Other potentially relevant agents */\n alternativeAgents: z\n .array(\n z.object({\n agentId: z.string(),\n confidence: z.number().min(0).max(1),\n }),\n )\n .optional(),\n});\n\nexport type TriageResult = z.infer<typeof TriageResultSchema>;\n\n/**\n * Triage agent configuration.\n */\nexport interface TriageAgentConfig extends Omit<AgentConfig, 'systemPrompt'> {\n /** Available agents to route to */\n agents: AgentCapability[];\n /** Minimum confidence threshold for routing */\n confidenceThreshold?: number;\n /** Fallback agent ID if no match */\n fallbackAgentId?: string;\n /** Custom triage prompt */\n customPrompt?: string;\n /**\n * Max turns for triage (defaults to 1).\n * Triage is inherently a single-turn operation - we want ONE routing decision.\n * This aligns with SDK v6 pattern: maxTurns: 1 for pure routing.\n */\n maxTurns?: 1;\n}\n\n/**\n * Creates a triage agent that routes requests to specialized agents.\n *\n * @param config - Triage agent configuration\n * @returns Triage agent\n *\n * @example\n * ```ts\n * const triageAgent = createTriageAgent({\n * id: 'triage',\n * name: 'Request Router',\n * description: 'Routes requests to appropriate agents',\n * agents: [\n * { agentId: 'code', name: 'Code Agent', description: 'Writes and reviews code' },\n * { agentId: 'research', name: 'Research Agent', description: 'Researches topics' },\n * ],\n * fallbackAgentId: 'general',\n * });\n *\n * const result = await triageAgent.triage('Help me write a React component', {\n * model: openai('gpt-4o-mini'),\n * });\n * ```\n */\nexport function createTriageAgent(config: TriageAgentConfig) {\n const { agents, confidenceThreshold = 0.5, fallbackAgentId, customPrompt } = config;\n\n const systemPrompt = customPrompt ?? buildTriagePrompt(agents);\n\n const triageConfig: AgentConfig = {\n ...config,\n systemPrompt,\n };\n\n return {\n config: triageConfig,\n agents,\n\n /**\n * Routes a query to the most appropriate agent.\n */\n async triage(\n query: string,\n options: { model: SDKLanguageModel; context?: AgentExecutionOptions['context'] },\n ): Promise<TriageResult> {\n const { object } = await generateObject({\n model: options.model,\n system: systemPrompt,\n prompt: `Route this query to the most appropriate agent:\\n\\n\"${query}\"`,\n schema: TriageResultSchema,\n abortSignal: options.context?.abortSignal,\n });\n\n // Apply confidence threshold\n if (object.confidence < confidenceThreshold && fallbackAgentId) {\n return {\n ...object,\n selectedAgentId: fallbackAgentId,\n reasoning: `Confidence (${object.confidence}) below threshold. Using fallback agent. Original reasoning: ${object.reasoning}`,\n };\n }\n\n return object;\n },\n\n /**\n * Full agent execution (includes triage + delegation).\n */\n async execute(\n prompt: string,\n options: AgentExecutionOptions & {\n agentRegistry: Map<string, Agent>;\n },\n ): Promise<BaseAgentState & { triageResult: TriageResult }> {\n const state = createInitialState(options.messages);\n\n // Triage the request\n const triageResult = await this.triage(prompt, {\n model: options.model,\n context: options.context,\n });\n\n state.metadata.triageResult = triageResult;\n\n // Get the selected agent\n const selectedAgent = options.agentRegistry.get(triageResult.selectedAgentId);\n\n if (!selectedAgent) {\n state.error = new Error(`Agent not found: ${triageResult.selectedAgentId}`);\n state.isComplete = true;\n return { ...state, triageResult };\n }\n\n // Execute the selected agent (exclude agentRegistry from options to avoid passing it to child agents)\n const agentQuery = triageResult.reformulatedQuery ?? prompt;\n const { agentRegistry: _, ...agentOptions } = options;\n const agentResult = await selectedAgent.execute(agentQuery, agentOptions);\n\n return {\n ...agentResult,\n metadata: {\n ...agentResult.metadata,\n triageResult,\n delegatedTo: triageResult.selectedAgentId,\n },\n triageResult,\n };\n },\n };\n}\n\n/**\n * Builds the triage system prompt from agent capabilities.\n */\nfunction buildTriagePrompt(agents: AgentCapability[]): string {\n const agentDescriptions = agents\n .map(agent => {\n let desc = `- ${agent.name} (ID: ${agent.agentId}): ${agent.description}`;\n if (agent.examples?.length) {\n desc += `\\n Examples: ${agent.examples.join(', ')}`;\n }\n if (agent.keywords?.length) {\n desc += `\\n Keywords: ${agent.keywords.join(', ')}`;\n }\n return desc;\n })\n .join('\\n\\n');\n\n return `You are a request routing agent. Your job is to analyze incoming queries and route them to the most appropriate specialized agent.\n\nAvailable Agents:\n${agentDescriptions}\n\nInstructions:\n1. Analyze the query to understand the user's intent\n2. Match the intent to the most suitable agent based on capabilities\n3. Provide a confidence score (0-1) for your selection\n4. Optionally reformulate the query to be more specific for the selected agent\n5. Consider if multiple agents might be needed for complex queries\n\nAlways respond with your routing decision in the specified JSON format.`;\n}\n\n/**\n * Options for keyword-based triage.\n */\nexport interface KeywordTriageOptions {\n /** Minimum keyword matches required for full confidence (default: 3) */\n minMatchesForFullConfidence?: number;\n}\n\n/**\n * Creates a simple keyword-based triage function.\n *\n * @param rules - Keyword to agent ID mapping\n * @param fallback - Fallback agent ID\n * @param options - Optional configuration for the triage function\n * @returns Triage function\n */\nexport function createKeywordTriage(\n rules: Array<{ keywords: string[]; agentId: string; priority?: number }>,\n fallback: string,\n options?: KeywordTriageOptions,\n): (query: string) => TriageResult {\n const minMatches = options?.minMatchesForFullConfidence ?? 3;\n\n return (query: string) => {\n const lowerQuery = query.toLowerCase();\n const matches: Array<{ agentId: string; count: number; priority: number }> = [];\n\n for (const rule of rules) {\n const count = rule.keywords.filter(kw => lowerQuery.includes(kw.toLowerCase())).length;\n if (count > 0) {\n matches.push({\n agentId: rule.agentId,\n count,\n priority: rule.priority ?? 0,\n });\n }\n }\n\n // Sort by count then priority\n matches.sort((a, b) => {\n if (b.count !== a.count) return b.count - a.count;\n return b.priority - a.priority;\n });\n\n const best = matches[0];\n\n return {\n selectedAgentId: best?.agentId ?? fallback,\n confidence: best ? Math.min(best.count / minMatches, 1) : 0,\n reasoning: best\n ? `Matched ${best.count} keywords for agent ${best.agentId}`\n : `No keyword matches, using fallback`,\n requiresMultiAgent: false,\n alternativeAgents: matches.slice(1).map(m => ({\n agentId: m.agentId,\n confidence: Math.min(m.count / minMatches, 1),\n })),\n };\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Rr as SDKLanguageModelV3 } from "./ai-runtime-DIwOEc6g.mjs";
2
+
3
+ //#region src/caching/types.d.ts
4
+ type CachedResponse = Awaited<ReturnType<SDKLanguageModelV3['doGenerate']>> & {
5
+ cachedAt: number;
6
+ };
7
+ interface CacheAdapter {
8
+ get(key: string): Promise<CachedResponse | null>;
9
+ set(key: string, value: CachedResponse, ttl: number): Promise<void>;
10
+ delete(key: string): Promise<void>;
11
+ clear(): Promise<void>;
12
+ }
13
+ type CacheStrategy = 'exact-match' | 'semantic' | 'prompt-prefix';
14
+ interface CachingMiddlewareOptions {
15
+ adapter: CacheAdapter;
16
+ strategy?: CacheStrategy;
17
+ ttl?: number;
18
+ excludeTools?: string[];
19
+ cacheStreaming?: boolean;
20
+ }
21
+ //#endregion
22
+ export { CachingMiddlewareOptions as i, CacheStrategy as n, CachedResponse as r, CacheAdapter as t };
23
+ //# sourceMappingURL=types-BPnq3GQo.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BPnq3GQo.d.mts","names":[],"sources":["../src/caching/types.ts"],"mappings":";;;KASY,cAAA,GAAiB,OAAA,CAAQ,UAAA,CAAW,kBAAA;EAC9C,QAAA;AAAA;AAAA,UAMe,YAAA;EAEf,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,cAAA;EAE1B,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,cAAA,EAAgB,GAAA,WAAc,OAAA;EAEtD,MAAA,CAAO,GAAA,WAAc,OAAA;EAErB,KAAA,IAAS,OAAA;AAAA;AAAA,KAMC,aAAA;AAAA,UAKK,wBAAA;EAEf,OAAA,EAAS,YAAA;EAET,QAAA,GAAW,aAAA;EAEX,GAAA;EAEA,YAAA;EAEA,cAAA;AAAA"}
@@ -0,0 +1,16 @@
1
+ //#region src/tools/computer/types.d.ts
2
+ type ComputerAction = 'key' | 'type' | 'mouse_move' | 'left_click' | 'left_click_drag' | 'right_click' | 'middle_click' | 'double_click' | 'screenshot' | 'cursor_position';
3
+ interface ComputerLayoutInput {
4
+ action: ComputerAction;
5
+ coordinate?: [number, number];
6
+ text?: string;
7
+ }
8
+ interface ComputerResult {
9
+ output?: string;
10
+ error?: string;
11
+ base64_image?: string;
12
+ system?: string;
13
+ }
14
+ //#endregion
15
+ export { ComputerLayoutInput as n, ComputerResult as r, ComputerAction as t };
16
+ //# sourceMappingURL=types-BjWgimpY.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BjWgimpY.d.mts","names":[],"sources":["../src/tools/computer/types.ts"],"mappings":";KAWY,cAAA;AAAA,UAeK,mBAAA;EACf,MAAA,EAAQ,cAAA;EACR,UAAA;EACA,IAAA;AAAA;AAAA,UAMe,cAAA;EACf,MAAA;EACA,KAAA;EACA,YAAA;EACA,MAAA;AAAA"}