@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":"auto-resume-BuFRNvAX.mjs","names":[],"sources":["../src/streaming/core/protocol.ts","../src/streaming/core/multi-step.ts","../src/streaming/core/auto-resume.ts"],"sourcesContent":["/**\n * @fileoverview Streaming protocol utilities for artifact streaming.\n * @module @od-oneapp/ai-platform/streaming\n */\n\nimport type { ArtifactStreamWriter, CustomUIDataTypes } from './types';\n\n/**\n * Generic data stream writer interface.\n * Compatible with AI SDK's data stream patterns.\n */\nexport interface DataStreamWriter {\n write(data: unknown): void;\n}\n\n/**\n * Creates an artifact stream writer for custom data streaming.\n *\n * @param writer - Data stream writer with write method\n * @returns Artifact stream writer with typed methods\n *\n * @example\n * ```ts\n * // With createUIMessageStream\n * const stream = createUIMessageStream({\n * execute: async ({ writer }) => {\n * const artifactWriter = createArtifactStreamWriter({\n * write: (data) => writer.write(JSON.stringify(data)),\n * });\n * artifactWriter.writeId('artifact-123');\n * artifactWriter.writeTextDelta('Hello world');\n * artifactWriter.writeFinish(true);\n * },\n * });\n * ```\n */\nexport function createArtifactStreamWriter(writer: DataStreamWriter): ArtifactStreamWriter {\n return {\n writeId(id: string) {\n writer.write({ type: 'id', data: id });\n },\n\n writeKind(kind: string) {\n writer.write({ type: 'kind', data: kind });\n },\n\n writeTitle(title: string) {\n writer.write({ type: 'title', data: title });\n },\n\n writeStatus(status: CustomUIDataTypes['status']) {\n writer.write({ type: 'status', data: status });\n },\n\n writeTextDelta(text: string) {\n writer.write({ type: 'textDelta', data: text });\n },\n\n writeCodeDelta(code: string, language?: string) {\n writer.write({ type: 'codeDelta', data: { code, language } });\n },\n\n writeProgress(current: number, total: number, message?: string) {\n writer.write({ type: 'progress', data: { current, total, message } });\n },\n\n writeFinish(success: boolean, metadata?: Record<string, unknown>) {\n writer.write({ type: 'finish', data: { success, metadata } });\n },\n\n writeError(message: string, code?: string, recoverable?: boolean) {\n writer.write({ type: 'error', data: { message, code, recoverable } });\n },\n\n clear() {\n writer.write({ type: 'clear', data: null });\n },\n };\n}\n\n/**\n * Helper to stream artifact creation with standard lifecycle.\n *\n * @param writer - Data stream writer\n * @param config - Artifact configuration\n * @param generator - Async generator that yields content\n *\n * @example\n * ```ts\n * await streamArtifact(writer, {\n * id: 'doc-123',\n * kind: 'text',\n * title: 'My Document',\n * }, async function* () {\n * yield 'Hello ';\n * yield 'World!';\n * });\n * ```\n */\nexport async function streamArtifact(\n dataWriter: DataStreamWriter,\n config: {\n id: string;\n kind: string;\n title: string;\n },\n generator: () => AsyncGenerator<string, void, unknown>,\n): Promise<void> {\n const writer = createArtifactStreamWriter(dataWriter);\n\n try {\n // Initialize artifact\n writer.writeId(config.id);\n writer.writeKind(config.kind);\n writer.writeTitle(config.title);\n writer.writeStatus('streaming');\n\n // Stream content\n for await (const chunk of generator()) {\n writer.writeTextDelta(chunk);\n }\n\n // Complete\n writer.writeStatus('complete');\n writer.writeFinish(true);\n } catch (error) {\n writer.writeStatus('error');\n writer.writeError(\n error instanceof Error ? error.message : 'Unknown error',\n 'STREAM_ERROR',\n false,\n );\n writer.writeFinish(false);\n throw error;\n }\n}\n\n/**\n * Creates a buffered stream writer that batches writes for efficiency.\n *\n * @param writer - Data stream writer\n * @param options - Buffer options\n * @returns Buffered writer with flush method\n */\nexport function createBufferedStreamWriter(\n writer: DataStreamWriter,\n options: {\n /** Buffer size before auto-flush */\n bufferSize?: number;\n /** Time in ms before auto-flush */\n flushInterval?: number;\n } = {},\n) {\n const { bufferSize = 10, flushInterval = 100 } = options;\n const buffer: Array<{ type: string; data: unknown }> = [];\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n function flush() {\n if (buffer.length === 0) return;\n\n for (const item of buffer) {\n writer.write(item);\n }\n buffer.length = 0;\n\n if (flushTimer) {\n clearTimeout(flushTimer);\n flushTimer = null;\n }\n }\n\n function scheduleFlush() {\n if (flushTimer) return;\n flushTimer = setTimeout(flush, flushInterval);\n }\n\n function write(type: string, data: unknown) {\n buffer.push({ type, data });\n\n if (buffer.length >= bufferSize) {\n flush();\n } else {\n scheduleFlush();\n }\n }\n\n return {\n write,\n flush,\n get bufferLength() {\n return buffer.length;\n },\n };\n}\n","/**\n * Multi-Step Streaming Module\n *\n * SDK v6 patterns for streaming multi-step agent executions:\n * - createUIMessageStream with sendFinish: false\n * - Step-by-step UI updates\n * - Nested stream forwarding\n *\n * @module streaming/multi-step\n */\n\nimport { createUIMessageStream, createUIMessageStreamResponse } from '../../shared';\n\nimport type {\n SDKStreamTextResult,\n SDKUIMessage,\n SDKUIMessageStreamWriter,\n SDKToolSet,\n} from '../../shared';\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/** Multi-step stream event */\nexport interface MultiStepStreamEvent {\n type:\n | 'step-start'\n | 'step-text'\n | 'step-tool-call'\n | 'step-tool-result'\n | 'step-end'\n | 'finish'\n | 'error';\n stepIndex?: number;\n stepName?: string;\n content?: string;\n toolCall?: {\n id: string;\n name: string;\n input: unknown;\n };\n toolResult?: {\n id: string;\n name: string;\n result: unknown;\n };\n error?: Error;\n}\n\n/** Step definition for multi-step execution */\nexport interface StepDefinition<TContext = unknown> {\n /** Step name */\n name: string;\n /** Execute the step */\n execute: (context: TContext, writer: SDKUIMessageStreamWriter<SDKUIMessage>) => Promise<TContext>;\n /** Optional: check if step should run */\n shouldRun?: (context: TContext) => boolean;\n}\n\n/** Multi-step stream options */\nexport interface MultiStepStreamOptions<TContext> {\n /** Initial context */\n initialContext: TContext;\n /** Steps to execute */\n steps: StepDefinition<TContext>[];\n /** Error handler */\n onError?: (error: Error, stepIndex: number) => void;\n /** Step completion handler */\n onStepComplete?: (stepIndex: number, context: TContext) => void;\n}\n\n// -----------------------------------------------------------------------------\n// Multi-Step Stream Writer\n// -----------------------------------------------------------------------------\n\ntype MultiStepStreamWriter = SDKUIMessageStreamWriter<SDKUIMessage>;\ntype MultiStepStreamResult = SDKStreamTextResult<SDKToolSet, never>;\n\n/**\n * Enhanced writer for multi-step streams.\n * Wraps UIMessageStreamWriter with step-aware methods.\n *\n * Note: SDK v6 uses typed message chunks. This wrapper uses\n * the `data-{name}` format for custom data parts to maintain\n * compatibility with the typed stream protocol.\n */\nexport class MultiStepWriter {\n private currentStep = 0;\n private stepStarted = false;\n\n constructor(\n private readonly writer: MultiStepStreamWriter,\n private readonly options?: { sendFinish?: boolean },\n ) {}\n\n /**\n * Start a new step.\n * Uses data-step-event format for SDK v6 compatibility.\n */\n startStep(name: string): void {\n if (name.trim().length === 0) {\n throw new Error('Step name is required');\n }\n this.stepStarted = true;\n // Use data-${name} format for custom data in SDK v6\n this.writer.write({\n type: 'data-step-event',\n data: { event: 'step-start', stepIndex: this.currentStep, stepName: name },\n });\n }\n\n /**\n * End the current step.\n */\n endStep(): void {\n this.writer.write({\n type: 'data-step-event',\n data: { event: 'step-end', stepIndex: this.currentStep },\n });\n this.currentStep++;\n this.stepStarted = false;\n }\n\n /**\n * Write text delta within current step.\n * Uses the standard text-delta format.\n */\n writeText(text: string): void {\n this.writer.write({\n type: 'text-delta',\n id: `step-${this.currentStep}`,\n delta: text,\n });\n }\n\n /**\n * Write tool call within current step.\n */\n writeToolCall(id: string, name: string, input: unknown): void {\n this.writer.write({\n type: 'data-step-event',\n data: {\n event: 'step-tool-call',\n stepIndex: this.currentStep,\n toolCall: { id, name, input },\n },\n });\n }\n\n /**\n * Write tool result within current step.\n */\n writeToolResult(id: string, name: string, result: unknown): void {\n this.writer.write({\n type: 'data-step-event',\n data: {\n event: 'step-tool-result',\n stepIndex: this.currentStep,\n toolResult: { id, name, result },\n },\n });\n }\n\n /**\n * Forward a streamText result to this writer.\n * Uses merge() to combine streams properly in SDK v6.\n */\n async forwardStream(\n stream: MultiStepStreamResult,\n options?: { sendFinish?: boolean },\n ): Promise<void> {\n void options;\n // SDK v6 uses toUIMessageStream() which returns a ReadableStream\n // Use merge() to forward the stream\n const uiStream = stream.toUIMessageStream?.<SDKUIMessage>();\n if (uiStream) {\n this.writer.merge(uiStream);\n }\n }\n\n /**\n * Write error.\n */\n writeError(error: Error): void {\n this.writer.write({\n type: 'error',\n errorText: error.message,\n });\n }\n\n /**\n * Finish the stream.\n */\n finish(): void {\n if (this.options?.sendFinish !== false) {\n this.writer.write({\n type: 'finish',\n finishReason: 'stop',\n });\n }\n }\n\n /** Get current step index */\n get stepIndex(): number {\n return this.currentStep;\n }\n\n /** Get underlying writer */\n get raw(): MultiStepStreamWriter {\n return this.writer;\n }\n}\n\n// -----------------------------------------------------------------------------\n// Multi-Step Stream Factory\n// -----------------------------------------------------------------------------\n\n/**\n * Create a multi-step streaming response.\n *\n * @example\n * ```typescript\n * // API Route\n * export async function POST(request: Request) {\n * const { messages } = await request.json();\n *\n * return createMultiStepStreamResponse({\n * initialContext: { messages, results: [] },\n * steps: [\n * {\n * name: 'analyze',\n * execute: async (ctx, writer) => {\n * writer.startStep('Analyzing query...');\n * const result = await streamText({\n * model,\n * prompt: 'Analyze: ' + ctx.messages[0].content,\n * });\n * await writer.forwardStream(result, { sendFinish: false });\n * writer.endStep();\n * return { ...ctx, analysis: await result.text };\n * },\n * },\n * {\n * name: 'respond',\n * execute: async (ctx, writer) => {\n * writer.startStep('Generating response...');\n * const result = await streamText({\n * model,\n * prompt: `Based on: ${ctx.analysis}\\nRespond to user.`,\n * });\n * await writer.forwardStream(result);\n * writer.endStep();\n * return ctx;\n * },\n * },\n * ],\n * });\n * }\n * ```\n */\nexport function createMultiStepStreamResponse<TContext>(\n options: MultiStepStreamOptions<TContext>,\n): Response {\n const stream = createUIMessageStream({\n execute: async ({ writer }) => {\n await executeMultiStepStream(writer, options);\n },\n });\n\n return createUIMessageStreamResponse({ stream });\n}\n\n/**\n * Create a multi-step stream (raw stream, not Response).\n */\nexport function createMultiStepStream<TContext>(\n options: MultiStepStreamOptions<TContext>,\n): ReadableStream {\n return createUIMessageStream({\n execute: async ({ writer }) => {\n await executeMultiStepStream(writer, options);\n },\n });\n}\n\n/**\n * Execute multi-step stream with provided writer.\n */\nexport async function executeMultiStepStream<TContext>(\n rawWriter: MultiStepStreamWriter,\n options: MultiStepStreamOptions<TContext>,\n): Promise<TContext> {\n const { initialContext, steps, onError, onStepComplete } = options;\n const writer = new MultiStepWriter(rawWriter);\n\n let context = initialContext;\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n\n // Check if step should run\n if (!step || (step.shouldRun && !step.shouldRun(context))) {\n continue;\n }\n\n try {\n // Execute step\n context = await step.execute(context, rawWriter);\n\n // Notify completion\n onStepComplete?.(i, context);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n writer.writeError(err);\n onError?.(err, i);\n throw err;\n }\n }\n\n writer.finish();\n return context;\n}\n\n// -----------------------------------------------------------------------------\n// Step Helpers\n// -----------------------------------------------------------------------------\n\n/**\n * Create a streaming text step.\n */\nexport function createTextStep<TContext>(config: {\n name: string;\n getPrompt: (context: TContext) => string;\n streamText: (prompt: string) => Promise<MultiStepStreamResult>;\n updateContext: (context: TContext, text: string) => TContext;\n shouldRun?: (context: TContext) => boolean;\n}): StepDefinition<TContext> {\n return {\n name: config.name,\n shouldRun: config.shouldRun,\n execute: async (context, writer) => {\n const msWriter = new MultiStepWriter(writer);\n msWriter.startStep(config.name);\n\n const prompt = config.getPrompt(context);\n const result = await config.streamText(prompt);\n\n await msWriter.forwardStream(result, { sendFinish: false });\n msWriter.endStep();\n\n const text = await result.text;\n return config.updateContext(context, text);\n },\n };\n}\n\n/**\n * Create a tool execution step.\n */\nexport function createToolStep<TContext, TResult>(config: {\n name: string;\n toolName: string;\n getInput: (context: TContext) => unknown;\n executeTool: (input: unknown) => Promise<TResult>;\n updateContext: (context: TContext, result: TResult) => TContext;\n shouldRun?: (context: TContext) => boolean;\n}): StepDefinition<TContext> {\n return {\n name: config.name,\n shouldRun: config.shouldRun,\n execute: async (context, writer) => {\n const msWriter = new MultiStepWriter(writer);\n msWriter.startStep(config.name);\n\n const input = config.getInput(context);\n const toolCallId = `call_${Date.now()}`;\n\n msWriter.writeToolCall(toolCallId, config.toolName, input);\n\n const result = await config.executeTool(input);\n\n msWriter.writeToolResult(toolCallId, config.toolName, result);\n msWriter.endStep();\n\n return config.updateContext(context, result);\n },\n };\n}\n\n/**\n * Create a conditional step that branches based on context.\n */\nexport function createConditionalStep<TContext>(config: {\n name: string;\n condition: (context: TContext) => boolean;\n ifTrue: StepDefinition<TContext>;\n ifFalse?: StepDefinition<TContext>;\n}): StepDefinition<TContext> {\n return {\n name: config.name,\n execute: async (context, writer) => {\n const step = config.condition(context) ? config.ifTrue : config.ifFalse;\n\n if (step) {\n return step.execute(context, writer);\n }\n\n return context;\n },\n };\n}\n\n/**\n * Create a parallel step that runs multiple steps concurrently.\n * Note: Results are merged into context in order of completion.\n */\nexport function createParallelStep<TContext>(config: {\n name: string;\n steps: StepDefinition<TContext>[];\n mergeResults: (context: TContext, results: TContext[]) => TContext;\n}): StepDefinition<TContext> {\n return {\n name: config.name,\n execute: async (context, writer) => {\n const msWriter = new MultiStepWriter(writer);\n msWriter.startStep(config.name);\n\n // Execute all steps in parallel\n const results = await Promise.all(config.steps.map(step => step.execute(context, writer)));\n\n msWriter.endStep();\n\n return config.mergeResults(context, results);\n },\n };\n}\n\n// -----------------------------------------------------------------------------\n// Utilities\n// -----------------------------------------------------------------------------\n\n/**\n * Create a simple multi-step pipeline.\n */\nexport function createStepPipeline<TContext>(\n ...steps: StepDefinition<TContext>[]\n): StepDefinition<TContext>[] {\n return steps;\n}\n\n/**\n * Chain steps sequentially.\n */\nexport function chainSteps<TContext>(\n name: string,\n steps: StepDefinition<TContext>[],\n): StepDefinition<TContext> {\n return {\n name,\n execute: async (context, writer) => {\n let current = context;\n for (const step of steps) {\n if (!step.shouldRun || step.shouldRun(current)) {\n current = await step.execute(current, writer);\n }\n }\n return current;\n },\n };\n}\n","/**\n * @fileoverview Auto-resume helpers for interrupted streams.\n */\n\nexport interface ResumeMessage {\n id?: string;\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PendingToolCall {\n toolCallId: string;\n toolName: string;\n args?: Record<string, unknown>;\n createdAt?: Date;\n}\n\nexport interface StreamResumeState {\n streamId: string;\n messages: ResumeMessage[];\n pendingToolCalls: PendingToolCall[];\n lastUpdatedAt: Date;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ResumeStorage {\n get: (streamId: string) => Promise<StreamResumeState | null>;\n set: (streamId: string, state: StreamResumeState, ttlMs?: number) => Promise<void>;\n delete: (streamId: string) => Promise<void>;\n}\n\nexport interface AutoResumeConfig {\n streamId: string;\n storage: ResumeStorage;\n ttlMs?: number;\n}\n\nexport interface AutoResumeHandler {\n saveState: (\n state: Omit<StreamResumeState, 'streamId' | 'lastUpdatedAt'>,\n ) => Promise<StreamResumeState>;\n loadState: () => Promise<StreamResumeState | null>;\n clearState: () => Promise<void>;\n detect: (\n messages: ResumeMessage[],\n pendingToolCalls?: PendingToolCall[],\n ) => ResumeDetectionResult;\n}\n\nexport interface ResumeDetectionResult {\n shouldResume: boolean;\n reason: 'pending-tool-call' | 'last-message-user' | 'no-resume';\n state?: StreamResumeState;\n}\n\nexport interface ResumeStreamPart {\n type: 'data-appendMessage';\n data: string;\n transient?: boolean;\n}\n\nconst safeStringify = (value: unknown): string => {\n const seen = new WeakSet<object>();\n\n return JSON.stringify(value, (key, current) => {\n void key;\n if (typeof current === 'bigint') {\n return current.toString();\n }\n\n if (current instanceof Date) {\n return current.toISOString();\n }\n\n if (typeof current === 'object' && current !== null) {\n if (seen.has(current)) {\n return '[Circular]';\n }\n seen.add(current);\n }\n\n return current;\n });\n};\n\ntype StoredState = {\n state: StreamResumeState;\n expiresAt?: number;\n};\n\nexport function createInMemoryStorage(): ResumeStorage {\n const store = new Map<string, StoredState>();\n\n return {\n async get(streamId: string): Promise<StreamResumeState | null> {\n const entry = store.get(streamId);\n if (!entry) return null;\n\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n store.delete(streamId);\n return null;\n }\n\n return entry.state;\n },\n\n async set(streamId: string, state: StreamResumeState, ttlMs?: number): Promise<void> {\n store.set(streamId, {\n state,\n expiresAt: typeof ttlMs === 'number' ? Date.now() + ttlMs : undefined,\n });\n },\n\n async delete(streamId: string): Promise<void> {\n store.delete(streamId);\n },\n };\n}\n\nexport function createExternalStorage(storage: ResumeStorage): ResumeStorage {\n return storage;\n}\n\nexport function detectResumeState(options: {\n streamId: string;\n messages: ResumeMessage[];\n pendingToolCalls?: PendingToolCall[];\n metadata?: Record<string, unknown>;\n}): ResumeDetectionResult {\n const pendingToolCalls = options.pendingToolCalls ?? [];\n const lastMessage = options.messages.at(-1);\n\n if (pendingToolCalls.length > 0) {\n return {\n shouldResume: true,\n reason: 'pending-tool-call',\n state: {\n streamId: options.streamId,\n messages: options.messages,\n pendingToolCalls,\n lastUpdatedAt: new Date(),\n metadata: options.metadata,\n },\n };\n }\n\n if (lastMessage?.role === 'user') {\n return {\n shouldResume: true,\n reason: 'last-message-user',\n state: {\n streamId: options.streamId,\n messages: options.messages,\n pendingToolCalls,\n lastUpdatedAt: new Date(),\n metadata: options.metadata,\n },\n };\n }\n\n return {\n shouldResume: false,\n reason: 'no-resume',\n };\n}\n\nexport function restoreDataStreamMessages(messages: ResumeMessage[]): ResumeStreamPart[] {\n return messages.map(message => ({\n type: 'data-appendMessage',\n data: safeStringify(message),\n transient: true,\n }));\n}\n\nexport function buildContinuationPrompt(\n messages: ResumeMessage[],\n pendingToolCalls: PendingToolCall[] = [],\n): string {\n const lastUser = [...messages].reverse().find(message => message.role === 'user');\n const lastAssistant = [...messages].reverse().find(message => message.role === 'assistant');\n\n const lines: string[] = [\n 'Continue the conversation from the last point without repeating prior content.',\n ];\n\n if (pendingToolCalls.length > 0) {\n const pending = pendingToolCalls\n .map(call => `${call.toolName} (${call.toolCallId})`)\n .join(', ');\n lines.push(`Pending tool calls: ${pending}.`);\n }\n\n if (lastUser) {\n lines.push(`Last user message: ${lastUser.content}`);\n }\n\n if (lastAssistant) {\n lines.push(`Last assistant message: ${lastAssistant.content}`);\n }\n\n return lines.join('\\n');\n}\n\nexport function createStreamStateTracker(options: {\n streamId: string;\n messages?: ResumeMessage[];\n pendingToolCalls?: PendingToolCall[];\n metadata?: Record<string, unknown>;\n}) {\n const messages = [...(options.messages ?? [])];\n const pendingToolCalls = [...(options.pendingToolCalls ?? [])];\n let { metadata } = options;\n\n return {\n addMessage(message: ResumeMessage) {\n messages.push(message);\n },\n addPendingToolCall(toolCall: PendingToolCall) {\n pendingToolCalls.push(toolCall);\n },\n resolveToolCall(toolCallId: string) {\n const index = pendingToolCalls.findIndex(call => call.toolCallId === toolCallId);\n if (index >= 0) {\n pendingToolCalls.splice(index, 1);\n }\n },\n setMetadata(nextMetadata: Record<string, unknown>) {\n metadata = nextMetadata;\n },\n getState(): StreamResumeState {\n return {\n streamId: options.streamId,\n messages: [...messages],\n pendingToolCalls: [...pendingToolCalls],\n lastUpdatedAt: new Date(),\n metadata,\n };\n },\n reset() {\n messages.length = 0;\n pendingToolCalls.length = 0;\n metadata = undefined;\n },\n };\n}\n\nexport function createAutoResume(config: AutoResumeConfig): AutoResumeHandler {\n return {\n async saveState(state) {\n const nextState: StreamResumeState = {\n streamId: config.streamId,\n messages: state.messages,\n pendingToolCalls: state.pendingToolCalls,\n lastUpdatedAt: new Date(),\n metadata: state.metadata,\n };\n await config.storage.set(config.streamId, nextState, config.ttlMs);\n return nextState;\n },\n async loadState() {\n return config.storage.get(config.streamId);\n },\n async clearState() {\n await config.storage.delete(config.streamId);\n },\n detect(messages, pendingToolCalls) {\n return detectResumeState({\n streamId: config.streamId,\n messages,\n pendingToolCalls,\n });\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { Ur as SDKLanguageModelV3Middleware } from "./ai-runtime-DIwOEc6g.mjs";
2
+ import { n as Model } from "./registry-DVPWzkXR.mjs";
3
+
4
+ //#region src/observability/cost/types.d.ts
5
+ interface UsageEvent {
6
+ model: Model;
7
+ inputTokens: number;
8
+ outputTokens: number;
9
+ cost: number;
10
+ timestamp: Date;
11
+ metadata: CostMetadata;
12
+ }
13
+ interface CostMetadata {
14
+ userId?: string;
15
+ teamId?: string;
16
+ feature?: string;
17
+ requestId?: string;
18
+ tags?: Record<string, string>;
19
+ }
20
+ interface BudgetConfig {
21
+ maxDailyCost: number;
22
+ maxMonthlyCost: number;
23
+ warningThreshold?: number;
24
+ maxRequestCost?: number;
25
+ }
26
+ interface UsageSummary {
27
+ daily: number;
28
+ monthly: number;
29
+ requestCount: number;
30
+ }
31
+ type UsageCallback = (event: UsageEvent) => Promise<void>;
32
+ declare class BudgetExceededError extends Error {
33
+ readonly budgetType: 'daily' | 'monthly' | 'request';
34
+ readonly current: number;
35
+ readonly limit: number;
36
+ constructor(message: string, budgetType: 'daily' | 'monthly' | 'request', current: number, limit: number);
37
+ }
38
+ //#endregion
39
+ //#region src/observability/cost/tracking/usage-tracker.d.ts
40
+ declare function calculateCost(model: Model, usage?: {
41
+ inputTokens?: unknown;
42
+ outputTokens?: unknown;
43
+ }): number;
44
+ declare function extractMetadata(params: unknown): CostMetadata;
45
+ declare function createUsageTracker(callback: UsageCallback): SDKLanguageModelV3Middleware;
46
+ //#endregion
47
+ //#region src/observability/cost/tracking/budget-guard.d.ts
48
+ type GetCurrentUsage = () => Promise<UsageSummary>;
49
+ declare function createBudgetGuard(config: BudgetConfig, getCurrentUsage: GetCurrentUsage): SDKLanguageModelV3Middleware;
50
+ //#endregion
51
+ export { extractMetadata as a, CostMetadata as c, UsageSummary as d, createUsageTracker as i, UsageCallback as l, createBudgetGuard as n, BudgetConfig as o, calculateCost as r, BudgetExceededError as s, GetCurrentUsage as t, UsageEvent as u };
52
+ //# sourceMappingURL=budget-guard-C83KCH9V.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guard-C83KCH9V.d.mts","names":[],"sources":["../src/observability/cost/types.ts","../src/observability/cost/tracking/usage-tracker.ts","../src/observability/cost/tracking/budget-guard.ts"],"mappings":";;;;UASiB,UAAA;EAEf,KAAA,EAAO,KAAA;EAEP,WAAA;EAEA,YAAA;EAEA,IAAA;EAEA,SAAA,EAAW,IAAA;EAEX,QAAA,EAAU,YAAA;AAAA;AAAA,UAMK,YAAA;EAEf,MAAA;EAEA,MAAA;EAEA,OAAA;EAEA,SAAA;EAEA,IAAA,GAAO,MAAA;AAAA;AAAA,UAMQ,YAAA;EAEf,YAAA;EAEA,cAAA;EAEA,gBAAA;EAEA,cAAA;AAAA;AAAA,UAMe,YAAA;EAEf,KAAA;EAEA,OAAA;EAEA,YAAA;AAAA;AAAA,KAMU,aAAA,IAAiB,KAAA,EAAO,UAAA,KAAe,OAAA;AAAA,cAKtC,mBAAA,SAA4B,KAAA;EAAA,SAGrB,UAAA;EAAA,SACA,OAAA;EAAA,SACA,KAAA;cAHhB,OAAA,UACgB,UAAA,mCACA,OAAA,UACA,KAAA;AAAA;;;iBCvDX,aAAA,CACP,KAAA,EAAO,KAAA,EACP,KAAA;EAAU,WAAA;EAAuB,YAAA;AAAA;AAAA,iBAgB1B,eAAA,CAAgB,MAAA,YAAkB,YAAA;AAAA,iBA4B3B,kBAAA,CAAmB,QAAA,EAAU,aAAA,GAAgB,4BAAA;;;KCtDjD,eAAA,SAAwB,OAAA,CAAQ,YAAA;AAAA,iBA4B5B,iBAAA,CACd,MAAA,EAAQ,YAAA,EACR,eAAA,EAAiB,eAAA,GAChB,4BAAA"}
@@ -0,0 +1,158 @@
1
+ import { i as getModelMetadata, n as Model } from "./registry-CsD3iTIx.mjs";
2
+ import { logError, logWarn } from "@od-oneapp/shared/logs";
3
+
4
+ //#region src/observability/cost/types.ts
5
+ /**
6
+ * Budget exceeded error
7
+ */
8
+ var BudgetExceededError = class extends Error {
9
+ constructor(message, budgetType, current, limit) {
10
+ super(message);
11
+ this.budgetType = budgetType;
12
+ this.current = current;
13
+ this.limit = limit;
14
+ this.name = "BudgetExceededError";
15
+ }
16
+ };
17
+
18
+ //#endregion
19
+ //#region src/observability/cost/tracking/usage-tracker.ts
20
+ /**
21
+ * Usage tracking middleware for AI SDK
22
+ */
23
+ /**
24
+ * Calculate cost based on token usage and model pricing
25
+ */
26
+ const getUsageTotal = (value) => {
27
+ if (typeof value === "number") return value;
28
+ if (value && typeof value === "object" && "total" in value) {
29
+ const { total } = value;
30
+ return typeof total === "number" ? total : 0;
31
+ }
32
+ return 0;
33
+ };
34
+ function calculateCost(model, usage) {
35
+ if (!usage) return 0;
36
+ const metadata = getModelMetadata(model);
37
+ const inputTokens = getUsageTotal(usage.inputTokens);
38
+ const outputTokens = getUsageTotal(usage.outputTokens);
39
+ return inputTokens / 1e3 * metadata.costPer1kInput + outputTokens / 1e3 * metadata.costPer1kOutput;
40
+ }
41
+ /**
42
+ * Extract cost metadata from request parameters
43
+ */
44
+ function extractMetadata(params) {
45
+ const headers = params.headers;
46
+ return {
47
+ userId: headers?.["x-user-id"] ?? void 0,
48
+ teamId: headers?.["x-team-id"] ?? void 0,
49
+ feature: headers?.["x-feature"] ?? void 0,
50
+ requestId: headers?.["x-request-id"] ?? void 0
51
+ };
52
+ }
53
+ /**
54
+ * Create usage tracking middleware
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const tracker = createUsageTracker(async (event) => {
59
+ * await db.insert(usageTable).values(event);
60
+ * console.log(`Cost: $${event.cost.toFixed(4)}`);
61
+ * });
62
+ *
63
+ * const model = wrapLanguageModel({
64
+ * model: createLanguageModel(Model.SONNET),
65
+ * middleware: tracker,
66
+ * });
67
+ * ```
68
+ */
69
+ function createUsageTracker(callback) {
70
+ return {
71
+ specificationVersion: "v3",
72
+ wrapGenerate: async ({ doGenerate, params }) => {
73
+ const result = await doGenerate();
74
+ const rawParams = params;
75
+ const modelId = (typeof rawParams.model === "string" ? rawParams.model : void 0) ?? (typeof rawParams.modelId === "string" ? rawParams.modelId : void 0);
76
+ const model = Object.values(Model).find((entry) => entry === modelId) ?? Model.SONNET;
77
+ const event = {
78
+ model,
79
+ inputTokens: getUsageTotal(result.usage?.inputTokens),
80
+ outputTokens: getUsageTotal(result.usage?.outputTokens),
81
+ cost: calculateCost(model, result.usage),
82
+ timestamp: /* @__PURE__ */ new Date(),
83
+ metadata: extractMetadata(params)
84
+ };
85
+ (async () => {
86
+ try {
87
+ await callback(event);
88
+ } catch (err) {
89
+ logError("[UsageTracker] Callback error", { error: err instanceof Error ? err : new Error(String(err)) });
90
+ }
91
+ })();
92
+ return result;
93
+ },
94
+ wrapStream: async ({ doStream }) => {
95
+ const { stream, ...rest } = await doStream();
96
+ return {
97
+ stream,
98
+ ...rest
99
+ };
100
+ }
101
+ };
102
+ }
103
+
104
+ //#endregion
105
+ //#region src/observability/cost/tracking/budget-guard.ts
106
+ /**
107
+ * Budget guard middleware for cost control
108
+ */
109
+ /**
110
+ * Create budget guard middleware that enforces spending limits
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * const budgetGuard = createBudgetGuard(
115
+ * {
116
+ * maxDailyCost: 100,
117
+ * maxMonthlyCost: 2000,
118
+ * warningThreshold: 0.8,
119
+ * },
120
+ * async () => {
121
+ * const [daily, monthly] = await Promise.all([
122
+ * db.query.dailyUsage(),
123
+ * db.query.monthlyUsage(),
124
+ * ]);
125
+ * return { daily, monthly, requestCount: 0 };
126
+ * }
127
+ * );
128
+ *
129
+ * const model = wrapLanguageModel({
130
+ * model: createLanguageModel(Model.SONNET),
131
+ * middleware: budgetGuard,
132
+ * });
133
+ * ```
134
+ */
135
+ function createBudgetGuard(config, getCurrentUsage) {
136
+ const { maxDailyCost, maxMonthlyCost, warningThreshold = .8 } = config;
137
+ return {
138
+ specificationVersion: "v3",
139
+ wrapGenerate: async ({ doGenerate }) => {
140
+ const usage = await getCurrentUsage();
141
+ if (usage.daily >= maxDailyCost) throw new BudgetExceededError(`Daily budget exceeded: $${usage.daily.toFixed(2)} / $${maxDailyCost}`, "daily", usage.daily, maxDailyCost);
142
+ if (usage.monthly >= maxMonthlyCost) throw new BudgetExceededError(`Monthly budget exceeded: $${usage.monthly.toFixed(2)} / $${maxMonthlyCost}`, "monthly", usage.monthly, maxMonthlyCost);
143
+ if (usage.daily >= maxDailyCost * warningThreshold) logWarn(`[BudgetGuard] Daily budget warning: ${(usage.daily / maxDailyCost * 100).toFixed(1)}% used`);
144
+ if (usage.monthly >= maxMonthlyCost * warningThreshold) logWarn(`[BudgetGuard] Monthly budget warning: ${(usage.monthly / maxMonthlyCost * 100).toFixed(1)}% used`);
145
+ return doGenerate();
146
+ },
147
+ wrapStream: async ({ doStream }) => {
148
+ const usage = await getCurrentUsage();
149
+ if (usage.daily >= maxDailyCost) throw new BudgetExceededError(`Daily budget exceeded`, "daily", usage.daily, maxDailyCost);
150
+ if (usage.monthly >= maxMonthlyCost) throw new BudgetExceededError(`Monthly budget exceeded`, "monthly", usage.monthly, maxMonthlyCost);
151
+ return doStream();
152
+ }
153
+ };
154
+ }
155
+
156
+ //#endregion
157
+ export { BudgetExceededError as a, extractMetadata as i, calculateCost as n, createUsageTracker as r, createBudgetGuard as t };
158
+ //# sourceMappingURL=budget-guard-d_b5rq4u.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guard-d_b5rq4u.mjs","names":[],"sources":["../src/observability/cost/types.ts","../src/observability/cost/tracking/usage-tracker.ts","../src/observability/cost/tracking/budget-guard.ts"],"sourcesContent":["/**\n * Cost tracking and attribution types\n */\n\nimport type { Model } from '../../models/registry';\n\n/**\n * Token usage from a single AI request\n */\nexport interface UsageEvent {\n /** Semantic model name */\n model: Model;\n /** Input/prompt tokens */\n inputTokens: number;\n /** Output/completion tokens */\n outputTokens: number;\n /** Calculated cost in USD */\n cost: number;\n /** When the request occurred */\n timestamp: Date;\n /** Attribution metadata */\n metadata: CostMetadata;\n}\n\n/**\n * Cost attribution metadata\n */\nexport interface CostMetadata {\n /** User ID for per-user tracking */\n userId?: string;\n /** Team ID for team-level aggregation */\n teamId?: string;\n /** Feature/product area for attribution */\n feature?: string;\n /** Request ID for correlation */\n requestId?: string;\n /** Additional custom tags */\n tags?: Record<string, string>;\n}\n\n/**\n * Budget configuration for cost controls\n */\nexport interface BudgetConfig {\n /** Maximum daily spend in USD */\n maxDailyCost: number;\n /** Maximum monthly spend in USD */\n maxMonthlyCost: number;\n /** Warning threshold (0-1), e.g., 0.8 = 80% */\n warningThreshold?: number;\n /** Per-request cost limit */\n maxRequestCost?: number;\n}\n\n/**\n * Current usage summary\n */\nexport interface UsageSummary {\n /** Daily spend so far */\n daily: number;\n /** Monthly spend so far */\n monthly: number;\n /** Request count */\n requestCount: number;\n}\n\n/**\n * Usage callback for tracking\n */\nexport type UsageCallback = (event: UsageEvent) => Promise<void>;\n\n/**\n * Budget exceeded error\n */\nexport class BudgetExceededError extends Error {\n constructor(\n message: string,\n public readonly budgetType: 'daily' | 'monthly' | 'request',\n public readonly current: number,\n public readonly limit: number,\n ) {\n super(message);\n this.name = 'BudgetExceededError';\n }\n}\n","/**\n * Usage tracking middleware for AI SDK\n */\n\nimport { logError } from '@repo/shared/logs';\n\nimport { Model, getModelMetadata } from '../../../models/registry';\n\nimport type { WrapGenerateArgs, WrapStreamArgs } from '../../../sdk/middleware/model-middleware';\nimport type { SDKLanguageModelV3Middleware } from '../../../shared';\nimport type { UsageEvent, UsageCallback, CostMetadata } from '../types';\n\n/**\n * Calculate cost based on token usage and model pricing\n */\nconst getUsageTotal = (value: unknown): number => {\n if (typeof value === 'number') return value;\n if (value && typeof value === 'object' && 'total' in value) {\n const { total } = value as { total?: unknown };\n return typeof total === 'number' ? total : 0;\n }\n return 0;\n};\n\nfunction calculateCost(\n model: Model,\n usage?: { inputTokens?: unknown; outputTokens?: unknown },\n): number {\n if (!usage) return 0;\n\n const metadata = getModelMetadata(model);\n const inputTokens = getUsageTotal(usage.inputTokens);\n const outputTokens = getUsageTotal(usage.outputTokens);\n const inputCost = (inputTokens / 1000) * metadata.costPer1kInput;\n const outputCost = (outputTokens / 1000) * metadata.costPer1kOutput;\n\n return inputCost + outputCost;\n}\n\n/**\n * Extract cost metadata from request parameters\n */\nfunction extractMetadata(params: unknown): CostMetadata {\n const p = params as Record<string, unknown>;\n const headers = p.headers as Record<string, string> | undefined;\n\n return {\n userId: headers?.['x-user-id'] ?? undefined,\n teamId: headers?.['x-team-id'] ?? undefined,\n feature: headers?.['x-feature'] ?? undefined,\n requestId: headers?.['x-request-id'] ?? undefined,\n };\n}\n\n/**\n * Create usage tracking middleware\n *\n * @example\n * ```ts\n * const tracker = createUsageTracker(async (event) => {\n * await db.insert(usageTable).values(event);\n * console.log(`Cost: $${event.cost.toFixed(4)}`);\n * });\n *\n * const model = wrapLanguageModel({\n * model: createLanguageModel(Model.SONNET),\n * middleware: tracker,\n * });\n * ```\n */\nexport function createUsageTracker(callback: UsageCallback): SDKLanguageModelV3Middleware {\n return {\n specificationVersion: 'v3',\n wrapGenerate: async ({ doGenerate, params }: WrapGenerateArgs) => {\n const result = await doGenerate();\n\n // Try to determine model from params\n const rawParams = params as Record<string, unknown>;\n const modelId =\n (typeof rawParams.model === 'string' ? rawParams.model : undefined) ??\n (typeof rawParams.modelId === 'string' ? rawParams.modelId : undefined);\n const model = Object.values(Model).find(entry => entry === modelId) ?? Model.SONNET;\n\n const event: UsageEvent = {\n model,\n inputTokens: getUsageTotal(result.usage?.inputTokens),\n outputTokens: getUsageTotal(result.usage?.outputTokens),\n cost: calculateCost(model, result.usage),\n timestamp: new Date(),\n metadata: extractMetadata(params),\n };\n\n // Fire callback async (don't block response)\n void (async () => {\n try {\n await callback(event);\n } catch (err) {\n logError('[UsageTracker] Callback error', {\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n })();\n\n return result;\n },\n\n wrapStream: async ({ doStream }: WrapStreamArgs) => {\n const { stream, ...rest } = await doStream();\n\n // For streaming, we track usage from the final chunk\n // The AI SDK accumulates usage across chunks\n return {\n stream,\n ...rest,\n };\n },\n };\n}\n\nexport { calculateCost, extractMetadata };\n","/**\n * Budget guard middleware for cost control\n */\n\nimport { logWarn } from '@repo/shared/logs';\n\nimport { BudgetExceededError } from '../types';\n\nimport type { WrapGenerateArgs, WrapStreamArgs } from '../../../sdk/middleware/model-middleware';\nimport type { SDKLanguageModelV3Middleware } from '../../../shared';\nimport type { BudgetConfig, UsageSummary } from '../types';\n\n\n/**\n * Function to get current usage - implement with your storage\n */\nexport type GetCurrentUsage = () => Promise<UsageSummary>;\n\n/**\n * Create budget guard middleware that enforces spending limits\n *\n * @example\n * ```ts\n * const budgetGuard = createBudgetGuard(\n * {\n * maxDailyCost: 100,\n * maxMonthlyCost: 2000,\n * warningThreshold: 0.8,\n * },\n * async () => {\n * const [daily, monthly] = await Promise.all([\n * db.query.dailyUsage(),\n * db.query.monthlyUsage(),\n * ]);\n * return { daily, monthly, requestCount: 0 };\n * }\n * );\n *\n * const model = wrapLanguageModel({\n * model: createLanguageModel(Model.SONNET),\n * middleware: budgetGuard,\n * });\n * ```\n */\nexport function createBudgetGuard(\n config: BudgetConfig,\n getCurrentUsage: GetCurrentUsage,\n): SDKLanguageModelV3Middleware {\n const { maxDailyCost, maxMonthlyCost, warningThreshold = 0.8 } = config;\n\n return {\n specificationVersion: 'v3',\n wrapGenerate: async ({ doGenerate }: WrapGenerateArgs) => {\n const usage = await getCurrentUsage();\n\n // Check daily limit\n if (usage.daily >= maxDailyCost) {\n throw new BudgetExceededError(\n `Daily budget exceeded: $${usage.daily.toFixed(2)} / $${maxDailyCost}`,\n 'daily',\n usage.daily,\n maxDailyCost,\n );\n }\n\n // Check monthly limit\n if (usage.monthly >= maxMonthlyCost) {\n throw new BudgetExceededError(\n `Monthly budget exceeded: $${usage.monthly.toFixed(2)} / $${maxMonthlyCost}`,\n 'monthly',\n usage.monthly,\n maxMonthlyCost,\n );\n }\n\n // Log warning if approaching limits\n if (usage.daily >= maxDailyCost * warningThreshold) {\n logWarn(\n `[BudgetGuard] Daily budget warning: ${((usage.daily / maxDailyCost) * 100).toFixed(1)}% used`,\n );\n }\n if (usage.monthly >= maxMonthlyCost * warningThreshold) {\n logWarn(\n `[BudgetGuard] Monthly budget warning: ${((usage.monthly / maxMonthlyCost) * 100).toFixed(1)}% used`,\n );\n }\n\n return doGenerate();\n },\n\n wrapStream: async ({ doStream }: WrapStreamArgs) => {\n const usage = await getCurrentUsage();\n\n if (usage.daily >= maxDailyCost) {\n throw new BudgetExceededError(`Daily budget exceeded`, 'daily', usage.daily, maxDailyCost);\n }\n\n if (usage.monthly >= maxMonthlyCost) {\n throw new BudgetExceededError(\n `Monthly budget exceeded`,\n 'monthly',\n usage.monthly,\n maxMonthlyCost,\n );\n }\n\n return doStream();\n },\n };\n}\n"],"mappings":";;;;;;;AA0EA,IAAa,sBAAb,cAAyC,MAAM;CAC7C,YACE,SACA,AAAgB,YAChB,AAAgB,SAChB,AAAgB,OAChB;AACA,QAAM,QAAQ;EAJE;EACA;EACA;AAGhB,OAAK,OAAO;;;;;;;;;;;;ACnEhB,MAAM,iBAAiB,UAA2B;AAChD,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,SAAS,OAAO,UAAU,YAAY,WAAW,OAAO;EAC1D,MAAM,EAAE,UAAU;AAClB,SAAO,OAAO,UAAU,WAAW,QAAQ;;AAE7C,QAAO;;AAGT,SAAS,cACP,OACA,OACQ;AACR,KAAI,CAAC,MAAO,QAAO;CAEnB,MAAM,WAAW,iBAAiB,MAAM;CACxC,MAAM,cAAc,cAAc,MAAM,YAAY;CACpD,MAAM,eAAe,cAAc,MAAM,aAAa;AAItD,QAHmB,cAAc,MAAQ,SAAS,iBAC9B,eAAe,MAAQ,SAAS;;;;;AAQtD,SAAS,gBAAgB,QAA+B;CAEtD,MAAM,UADI,OACQ;AAElB,QAAO;EACL,QAAQ,UAAU,gBAAgB;EAClC,QAAQ,UAAU,gBAAgB;EAClC,SAAS,UAAU,gBAAgB;EACnC,WAAW,UAAU,mBAAmB;EACzC;;;;;;;;;;;;;;;;;;AAmBH,SAAgB,mBAAmB,UAAuD;AACxF,QAAO;EACL,sBAAsB;EACtB,cAAc,OAAO,EAAE,YAAY,aAA+B;GAChE,MAAM,SAAS,MAAM,YAAY;GAGjC,MAAM,YAAY;GAClB,MAAM,WACH,OAAO,UAAU,UAAU,WAAW,UAAU,QAAQ,YACxD,OAAO,UAAU,YAAY,WAAW,UAAU,UAAU;GAC/D,MAAM,QAAQ,OAAO,OAAO,MAAM,CAAC,MAAK,UAAS,UAAU,QAAQ,IAAI,MAAM;GAE7E,MAAM,QAAoB;IACxB;IACA,aAAa,cAAc,OAAO,OAAO,YAAY;IACrD,cAAc,cAAc,OAAO,OAAO,aAAa;IACvD,MAAM,cAAc,OAAO,OAAO,MAAM;IACxC,2BAAW,IAAI,MAAM;IACrB,UAAU,gBAAgB,OAAO;IAClC;AAGD,IAAM,YAAY;AAChB,QAAI;AACF,WAAM,SAAS,MAAM;aACd,KAAK;AACZ,cAAS,iCAAiC,EACxC,OAAO,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,EAC3D,CAAC;;OAEF;AAEJ,UAAO;;EAGT,YAAY,OAAO,EAAE,eAA+B;GAClD,MAAM,EAAE,QAAQ,GAAG,SAAS,MAAM,UAAU;AAI5C,UAAO;IACL;IACA,GAAG;IACJ;;EAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEH,SAAgB,kBACd,QACA,iBAC8B;CAC9B,MAAM,EAAE,cAAc,gBAAgB,mBAAmB,OAAQ;AAEjE,QAAO;EACL,sBAAsB;EACtB,cAAc,OAAO,EAAE,iBAAmC;GACxD,MAAM,QAAQ,MAAM,iBAAiB;AAGrC,OAAI,MAAM,SAAS,aACjB,OAAM,IAAI,oBACR,2BAA2B,MAAM,MAAM,QAAQ,EAAE,CAAC,MAAM,gBACxD,SACA,MAAM,OACN,aACD;AAIH,OAAI,MAAM,WAAW,eACnB,OAAM,IAAI,oBACR,6BAA6B,MAAM,QAAQ,QAAQ,EAAE,CAAC,MAAM,kBAC5D,WACA,MAAM,SACN,eACD;AAIH,OAAI,MAAM,SAAS,eAAe,iBAChC,SACE,wCAAyC,MAAM,QAAQ,eAAgB,KAAK,QAAQ,EAAE,CAAC,QACxF;AAEH,OAAI,MAAM,WAAW,iBAAiB,iBACpC,SACE,0CAA2C,MAAM,UAAU,iBAAkB,KAAK,QAAQ,EAAE,CAAC,QAC9F;AAGH,UAAO,YAAY;;EAGrB,YAAY,OAAO,EAAE,eAA+B;GAClD,MAAM,QAAQ,MAAM,iBAAiB;AAErC,OAAI,MAAM,SAAS,aACjB,OAAM,IAAI,oBAAoB,yBAAyB,SAAS,MAAM,OAAO,aAAa;AAG5F,OAAI,MAAM,WAAW,eACnB,OAAM,IAAI,oBACR,2BACA,WACA,MAAM,SACN,eACD;AAGH,UAAO,UAAU;;EAEpB"}
@@ -0,0 +1,234 @@
1
+ //#region src/streaming/control/budget-guard.ts
2
+ /**
3
+ * Default cost table for common models.
4
+ * Prices are per 1K tokens in USD.
5
+ *
6
+ * @remarks
7
+ * Prices are approximate and may change. Update this table
8
+ * or provide custom entries via BudgetGuardConfig.costTable.
9
+ */
10
+ const DEFAULT_COST_TABLE = {
11
+ "gpt-4o": {
12
+ input: .0025,
13
+ output: .01
14
+ },
15
+ "gpt-4o-mini": {
16
+ input: 15e-5,
17
+ output: 6e-4
18
+ },
19
+ "gpt-4-turbo": {
20
+ input: .01,
21
+ output: .03
22
+ },
23
+ "gpt-4": {
24
+ input: .03,
25
+ output: .06
26
+ },
27
+ "gpt-3.5-turbo": {
28
+ input: 5e-4,
29
+ output: .0015
30
+ },
31
+ o1: {
32
+ input: .015,
33
+ output: .06
34
+ },
35
+ "o1-mini": {
36
+ input: .003,
37
+ output: .012
38
+ },
39
+ "o3-mini": {
40
+ input: .0011,
41
+ output: .0044
42
+ },
43
+ "claude-3-5-sonnet-20241022": {
44
+ input: .003,
45
+ output: .015
46
+ },
47
+ "claude-3-5-sonnet": {
48
+ input: .003,
49
+ output: .015
50
+ },
51
+ "claude-sonnet-4-20250514": {
52
+ input: .003,
53
+ output: .015
54
+ },
55
+ "claude-3-5-haiku-20241022": {
56
+ input: 8e-4,
57
+ output: .004
58
+ },
59
+ "claude-3-5-haiku": {
60
+ input: 8e-4,
61
+ output: .004
62
+ },
63
+ "claude-3-opus": {
64
+ input: .015,
65
+ output: .075
66
+ },
67
+ "claude-3-sonnet": {
68
+ input: .003,
69
+ output: .015
70
+ },
71
+ "claude-3-haiku": {
72
+ input: 25e-5,
73
+ output: .00125
74
+ },
75
+ "gemini-1.5-pro": {
76
+ input: .00125,
77
+ output: .005
78
+ },
79
+ "gemini-1.5-flash": {
80
+ input: 75e-6,
81
+ output: 3e-4
82
+ },
83
+ "gemini-2.0-flash": {
84
+ input: 1e-4,
85
+ output: 4e-4
86
+ }
87
+ };
88
+ /**
89
+ * Calculates the cost in USD for a given token usage and model.
90
+ *
91
+ * @param usage - Token usage with prompt and completion tokens.
92
+ * @param modelId - Model identifier to look up in cost table.
93
+ * @param costTable - Optional custom cost table (merged with defaults).
94
+ * @returns Cost in USD, or 0 if model is not in cost table.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * const usage = { promptTokens: 1000, completionTokens: 500, totalTokens: 1500 };
99
+ *
100
+ * // Using default cost table
101
+ * const cost = calculateCost(usage, 'gpt-4o');
102
+ * // cost = (1000/1000 * 0.0025) + (500/1000 * 0.01) = 0.0025 + 0.005 = 0.0075
103
+ *
104
+ * // Using custom cost table
105
+ * const customCost = calculateCost(usage, 'custom-model', {
106
+ * 'custom-model': { input: 0.001, output: 0.002 }
107
+ * });
108
+ * ```
109
+ */
110
+ function calculateCost(usage, modelId, costTable) {
111
+ const entry = {
112
+ ...DEFAULT_COST_TABLE,
113
+ ...costTable
114
+ }[modelId];
115
+ if (!entry) return 0;
116
+ return usage.promptTokens / 1e3 * entry.input + usage.completionTokens / 1e3 * entry.output;
117
+ }
118
+ /**
119
+ * Creates a budget checker function from configuration.
120
+ *
121
+ * @param config - Budget guard configuration with limits.
122
+ * @returns Function that checks if budget is exceeded for given usage.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * const checkBudget = createBudgetChecker({
127
+ * maxTokens: 10_000,
128
+ * maxCost: 1.00,
129
+ * onBudgetExceeded: (usage, limit) => {
130
+ * console.error(`Budget exceeded: ${limit.type}`);
131
+ * }
132
+ * });
133
+ *
134
+ * const result = checkBudget(
135
+ * { promptTokens: 5000, completionTokens: 6000, totalTokens: 11000 },
136
+ * 'gpt-4o'
137
+ * );
138
+ * // result.exceeded === true
139
+ * // result.limit === { type: 'tokens', limit: 10000, actual: 11000 }
140
+ * ```
141
+ */
142
+ function createBudgetChecker(config) {
143
+ return (usage, modelId) => {
144
+ if (config.maxTokens !== void 0 && usage.totalTokens > config.maxTokens) {
145
+ const limit = {
146
+ type: "tokens",
147
+ limit: config.maxTokens,
148
+ actual: usage.totalTokens
149
+ };
150
+ config.onBudgetExceeded?.(usage, limit);
151
+ return {
152
+ exceeded: true,
153
+ limit
154
+ };
155
+ }
156
+ if (config.maxCost !== void 0) {
157
+ const cost = calculateCost(usage, modelId, config.costTable);
158
+ if (cost > config.maxCost) {
159
+ const limit = {
160
+ type: "cost",
161
+ limit: config.maxCost,
162
+ actual: cost
163
+ };
164
+ config.onBudgetExceeded?.(usage, limit);
165
+ return {
166
+ exceeded: true,
167
+ limit
168
+ };
169
+ }
170
+ }
171
+ return { exceeded: false };
172
+ };
173
+ }
174
+ /**
175
+ * Creates an onFinish handler for AI SDK that checks budget limits.
176
+ *
177
+ * @param config - Budget guard configuration.
178
+ * @param modelId - Model identifier for cost calculation.
179
+ * @returns onFinish handler function for AI SDK.
180
+ *
181
+ * @example
182
+ * ```ts
183
+ * import { streamText } from 'ai';
184
+ *
185
+ * const result = await streamText({
186
+ * model: myModel,
187
+ * prompt: 'Hello',
188
+ * onFinish: createBudgetGuardedOnFinish(
189
+ * { maxTokens: 50_000, maxCost: 5.00 },
190
+ * 'gpt-4o'
191
+ * )
192
+ * });
193
+ * ```
194
+ */
195
+ function createBudgetGuardedOnFinish(config, modelId) {
196
+ const checkBudget = createBudgetChecker(config);
197
+ return (result) => {
198
+ if (!result.usage) return;
199
+ checkBudget({
200
+ promptTokens: result.usage.promptTokens,
201
+ completionTokens: result.usage.completionTokens,
202
+ totalTokens: result.usage.totalTokens ?? result.usage.promptTokens + result.usage.completionTokens
203
+ }, modelId);
204
+ };
205
+ }
206
+ /**
207
+ * Estimates cost for a request before execution.
208
+ * Useful for pre-flight budget checks.
209
+ *
210
+ * @param estimatedPromptTokens - Estimated number of prompt tokens.
211
+ * @param estimatedCompletionTokens - Estimated number of completion tokens.
212
+ * @param modelId - Model identifier for cost lookup.
213
+ * @param costTable - Optional custom cost table.
214
+ * @returns Estimated cost in USD.
215
+ *
216
+ * @example
217
+ * ```ts
218
+ * const estimatedCost = estimateCost(2000, 1000, 'gpt-4o');
219
+ * if (estimatedCost > budget) {
220
+ * throw new Error('Estimated cost exceeds budget');
221
+ * }
222
+ * ```
223
+ */
224
+ function estimateCost(estimatedPromptTokens, estimatedCompletionTokens, modelId, costTable) {
225
+ return calculateCost({
226
+ promptTokens: estimatedPromptTokens,
227
+ completionTokens: estimatedCompletionTokens,
228
+ totalTokens: estimatedPromptTokens + estimatedCompletionTokens
229
+ }, modelId, costTable);
230
+ }
231
+
232
+ //#endregion
233
+ export { estimateCost as a, createBudgetGuardedOnFinish as i, calculateCost as n, createBudgetChecker as r, DEFAULT_COST_TABLE as t };
234
+ //# sourceMappingURL=budget-guard-gyhJS00s.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guard-gyhJS00s.mjs","names":[],"sources":["../src/streaming/control/budget-guard.ts"],"sourcesContent":["/**\n * @fileoverview Budget guard utilities for token and cost limits.\n * @module @od-oneapp/ai-platform/streaming-control\n *\n * Provides functions for calculating costs and checking budget limits:\n * - Cost calculation based on token usage and model pricing\n * - Budget checking for token and cost limits\n * - OnFinish handlers for AI SDK integration\n *\n * @example\n * ```ts\n * import {\n * calculateCost,\n * createBudgetChecker,\n * createBudgetGuardedOnFinish,\n * DEFAULT_COST_TABLE\n * } from '@od-oneapp/ai-platform/streaming-control';\n *\n * const cost = calculateCost(\n * { promptTokens: 1000, completionTokens: 500, totalTokens: 1500 },\n * 'gpt-4o'\n * );\n * ```\n */\n\nimport {\n type BudgetCheckResult,\n type BudgetGuardConfig,\n type CostEntry,\n type TokenUsage,\n} from './types';\n\n/**\n * Default cost table for common models.\n * Prices are per 1K tokens in USD.\n *\n * @remarks\n * Prices are approximate and may change. Update this table\n * or provide custom entries via BudgetGuardConfig.costTable.\n */\nexport const DEFAULT_COST_TABLE: Record<string, CostEntry> = {\n // OpenAI models\n 'gpt-4o': { input: 0.0025, output: 0.01 },\n 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },\n 'gpt-4-turbo': { input: 0.01, output: 0.03 },\n 'gpt-4': { input: 0.03, output: 0.06 },\n 'gpt-3.5-turbo': { input: 0.0005, output: 0.0015 },\n o1: { input: 0.015, output: 0.06 },\n 'o1-mini': { input: 0.003, output: 0.012 },\n 'o3-mini': { input: 0.0011, output: 0.0044 },\n // Anthropic models\n 'claude-3-5-sonnet-20241022': { input: 0.003, output: 0.015 },\n 'claude-3-5-sonnet': { input: 0.003, output: 0.015 },\n 'claude-sonnet-4-20250514': { input: 0.003, output: 0.015 },\n 'claude-3-5-haiku-20241022': { input: 0.0008, output: 0.004 },\n 'claude-3-5-haiku': { input: 0.0008, output: 0.004 },\n 'claude-3-opus': { input: 0.015, output: 0.075 },\n 'claude-3-sonnet': { input: 0.003, output: 0.015 },\n 'claude-3-haiku': { input: 0.00025, output: 0.00125 },\n // Google models\n 'gemini-1.5-pro': { input: 0.00125, output: 0.005 },\n 'gemini-1.5-flash': { input: 0.000075, output: 0.0003 },\n 'gemini-2.0-flash': { input: 0.0001, output: 0.0004 },\n};\n\n/**\n * Calculates the cost in USD for a given token usage and model.\n *\n * @param usage - Token usage with prompt and completion tokens.\n * @param modelId - Model identifier to look up in cost table.\n * @param costTable - Optional custom cost table (merged with defaults).\n * @returns Cost in USD, or 0 if model is not in cost table.\n *\n * @example\n * ```ts\n * const usage = { promptTokens: 1000, completionTokens: 500, totalTokens: 1500 };\n *\n * // Using default cost table\n * const cost = calculateCost(usage, 'gpt-4o');\n * // cost = (1000/1000 * 0.0025) + (500/1000 * 0.01) = 0.0025 + 0.005 = 0.0075\n *\n * // Using custom cost table\n * const customCost = calculateCost(usage, 'custom-model', {\n * 'custom-model': { input: 0.001, output: 0.002 }\n * });\n * ```\n */\nexport function calculateCost(\n usage: TokenUsage,\n modelId: string,\n costTable?: Record<string, CostEntry>,\n): number {\n const mergedTable = { ...DEFAULT_COST_TABLE, ...costTable };\n const entry = mergedTable[modelId];\n\n if (!entry) {\n return 0;\n }\n\n const inputCost = (usage.promptTokens / 1000) * entry.input;\n const outputCost = (usage.completionTokens / 1000) * entry.output;\n\n return inputCost + outputCost;\n}\n\n/**\n * Creates a budget checker function from configuration.\n *\n * @param config - Budget guard configuration with limits.\n * @returns Function that checks if budget is exceeded for given usage.\n *\n * @example\n * ```ts\n * const checkBudget = createBudgetChecker({\n * maxTokens: 10_000,\n * maxCost: 1.00,\n * onBudgetExceeded: (usage, limit) => {\n * console.error(`Budget exceeded: ${limit.type}`);\n * }\n * });\n *\n * const result = checkBudget(\n * { promptTokens: 5000, completionTokens: 6000, totalTokens: 11000 },\n * 'gpt-4o'\n * );\n * // result.exceeded === true\n * // result.limit === { type: 'tokens', limit: 10000, actual: 11000 }\n * ```\n */\nexport function createBudgetChecker(\n config: BudgetGuardConfig,\n): (usage: TokenUsage, modelId: string) => BudgetCheckResult {\n return (usage: TokenUsage, modelId: string): BudgetCheckResult => {\n // Check token limit first\n if (config.maxTokens !== undefined && usage.totalTokens > config.maxTokens) {\n const limit = {\n type: 'tokens' as const,\n limit: config.maxTokens,\n actual: usage.totalTokens,\n };\n\n config.onBudgetExceeded?.(usage, limit);\n\n return {\n exceeded: true,\n limit,\n };\n }\n\n // Check cost limit\n if (config.maxCost !== undefined) {\n const cost = calculateCost(usage, modelId, config.costTable);\n\n if (cost > config.maxCost) {\n const limit = {\n type: 'cost' as const,\n limit: config.maxCost,\n actual: cost,\n };\n\n config.onBudgetExceeded?.(usage, limit);\n\n return {\n exceeded: true,\n limit,\n };\n }\n }\n\n return { exceeded: false };\n };\n}\n\n/**\n * Result type for AI SDK onFinish callback.\n * Matches the shape expected by Vercel AI SDK v6.\n */\nexport interface OnFinishResult {\n /** Token usage from the model response. */\n usage?: {\n promptTokens: number;\n completionTokens: number;\n totalTokens?: number;\n };\n}\n\n/**\n * Creates an onFinish handler for AI SDK that checks budget limits.\n *\n * @param config - Budget guard configuration.\n * @param modelId - Model identifier for cost calculation.\n * @returns onFinish handler function for AI SDK.\n *\n * @example\n * ```ts\n * import { streamText } from 'ai';\n *\n * const result = await streamText({\n * model: myModel,\n * prompt: 'Hello',\n * onFinish: createBudgetGuardedOnFinish(\n * { maxTokens: 50_000, maxCost: 5.00 },\n * 'gpt-4o'\n * )\n * });\n * ```\n */\nexport function createBudgetGuardedOnFinish(\n config: BudgetGuardConfig,\n modelId: string,\n): (result: OnFinishResult) => void {\n const checkBudget = createBudgetChecker(config);\n\n return (result: OnFinishResult): void => {\n if (!result.usage) {\n return;\n }\n\n const usage: TokenUsage = {\n promptTokens: result.usage.promptTokens,\n completionTokens: result.usage.completionTokens,\n totalTokens:\n result.usage.totalTokens ?? result.usage.promptTokens + result.usage.completionTokens,\n };\n\n // Check budget (callback will be invoked if exceeded)\n checkBudget(usage, modelId);\n };\n}\n\n/**\n * Estimates cost for a request before execution.\n * Useful for pre-flight budget checks.\n *\n * @param estimatedPromptTokens - Estimated number of prompt tokens.\n * @param estimatedCompletionTokens - Estimated number of completion tokens.\n * @param modelId - Model identifier for cost lookup.\n * @param costTable - Optional custom cost table.\n * @returns Estimated cost in USD.\n *\n * @example\n * ```ts\n * const estimatedCost = estimateCost(2000, 1000, 'gpt-4o');\n * if (estimatedCost > budget) {\n * throw new Error('Estimated cost exceeds budget');\n * }\n * ```\n */\nexport function estimateCost(\n estimatedPromptTokens: number,\n estimatedCompletionTokens: number,\n modelId: string,\n costTable?: Record<string, CostEntry>,\n): number {\n return calculateCost(\n {\n promptTokens: estimatedPromptTokens,\n completionTokens: estimatedCompletionTokens,\n totalTokens: estimatedPromptTokens + estimatedCompletionTokens,\n },\n modelId,\n costTable,\n );\n}\n"],"mappings":";;;;;;;;;AAwCA,MAAa,qBAAgD;CAE3D,UAAU;EAAE,OAAO;EAAQ,QAAQ;EAAM;CACzC,eAAe;EAAE,OAAO;EAAS,QAAQ;EAAQ;CACjD,eAAe;EAAE,OAAO;EAAM,QAAQ;EAAM;CAC5C,SAAS;EAAE,OAAO;EAAM,QAAQ;EAAM;CACtC,iBAAiB;EAAE,OAAO;EAAQ,QAAQ;EAAQ;CAClD,IAAI;EAAE,OAAO;EAAO,QAAQ;EAAM;CAClC,WAAW;EAAE,OAAO;EAAO,QAAQ;EAAO;CAC1C,WAAW;EAAE,OAAO;EAAQ,QAAQ;EAAQ;CAE5C,8BAA8B;EAAE,OAAO;EAAO,QAAQ;EAAO;CAC7D,qBAAqB;EAAE,OAAO;EAAO,QAAQ;EAAO;CACpD,4BAA4B;EAAE,OAAO;EAAO,QAAQ;EAAO;CAC3D,6BAA6B;EAAE,OAAO;EAAQ,QAAQ;EAAO;CAC7D,oBAAoB;EAAE,OAAO;EAAQ,QAAQ;EAAO;CACpD,iBAAiB;EAAE,OAAO;EAAO,QAAQ;EAAO;CAChD,mBAAmB;EAAE,OAAO;EAAO,QAAQ;EAAO;CAClD,kBAAkB;EAAE,OAAO;EAAS,QAAQ;EAAS;CAErD,kBAAkB;EAAE,OAAO;EAAS,QAAQ;EAAO;CACnD,oBAAoB;EAAE,OAAO;EAAU,QAAQ;EAAQ;CACvD,oBAAoB;EAAE,OAAO;EAAQ,QAAQ;EAAQ;CACtD;;;;;;;;;;;;;;;;;;;;;;;AAwBD,SAAgB,cACd,OACA,SACA,WACQ;CAER,MAAM,QADc;EAAE,GAAG;EAAoB,GAAG;EAAW,CACjC;AAE1B,KAAI,CAAC,MACH,QAAO;AAMT,QAHmB,MAAM,eAAe,MAAQ,MAAM,QAClC,MAAM,mBAAmB,MAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;AA6B7D,SAAgB,oBACd,QAC2D;AAC3D,SAAQ,OAAmB,YAAuC;AAEhE,MAAI,OAAO,cAAc,UAAa,MAAM,cAAc,OAAO,WAAW;GAC1E,MAAM,QAAQ;IACZ,MAAM;IACN,OAAO,OAAO;IACd,QAAQ,MAAM;IACf;AAED,UAAO,mBAAmB,OAAO,MAAM;AAEvC,UAAO;IACL,UAAU;IACV;IACD;;AAIH,MAAI,OAAO,YAAY,QAAW;GAChC,MAAM,OAAO,cAAc,OAAO,SAAS,OAAO,UAAU;AAE5D,OAAI,OAAO,OAAO,SAAS;IACzB,MAAM,QAAQ;KACZ,MAAM;KACN,OAAO,OAAO;KACd,QAAQ;KACT;AAED,WAAO,mBAAmB,OAAO,MAAM;AAEvC,WAAO;KACL,UAAU;KACV;KACD;;;AAIL,SAAO,EAAE,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;AAsC9B,SAAgB,4BACd,QACA,SACkC;CAClC,MAAM,cAAc,oBAAoB,OAAO;AAE/C,SAAQ,WAAiC;AACvC,MAAI,CAAC,OAAO,MACV;AAWF,cAR0B;GACxB,cAAc,OAAO,MAAM;GAC3B,kBAAkB,OAAO,MAAM;GAC/B,aACE,OAAO,MAAM,eAAe,OAAO,MAAM,eAAe,OAAO,MAAM;GACxE,EAGkB,QAAQ;;;;;;;;;;;;;;;;;;;;;AAsB/B,SAAgB,aACd,uBACA,2BACA,SACA,WACQ;AACR,QAAO,cACL;EACE,cAAc;EACd,kBAAkB;EAClB,aAAa,wBAAwB;EACtC,EACD,SACA,UACD"}