@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":"prompts.mjs","names":[],"sources":["../src/prompts/model-variants.ts","../src/prompts/templates.ts","../src/prompts/index.ts"],"sourcesContent":["/**\n * Model-Specific Prompt Variants\n * Adjusts system prompts for different AI models and their capabilities\n */\n\n/**\n * Model capability profile\n */\nexport interface ModelProfile {\n model: string;\n provider: 'anthropic' | 'openai' | 'google' | 'other';\n maxTokens: number;\n supportsFunctions: boolean;\n supportsStreaming: boolean;\n supportsVision: boolean;\n contextWindow: number;\n strengths: string[];\n formatting: string;\n}\n\n/**\n * Catalog of supported models and their profiles\n */\nexport const MODEL_PROFILES: Record<string, ModelProfile> = {\n // Anthropic Claude models\n 'claude-opus': {\n model: 'claude-opus',\n provider: 'anthropic',\n maxTokens: 4096,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: true,\n contextWindow: 200000,\n strengths: ['reasoning', 'analysis', 'code', 'writing'],\n formatting: 'anthropic',\n },\n 'claude-sonnet': {\n model: 'claude-sonnet',\n provider: 'anthropic',\n maxTokens: 4096,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: true,\n contextWindow: 200000,\n strengths: ['speed', 'reasoning', 'code'],\n formatting: 'anthropic',\n },\n 'claude-haiku': {\n model: 'claude-haiku',\n provider: 'anthropic',\n maxTokens: 2048,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: true,\n contextWindow: 200000,\n strengths: ['speed', 'efficiency'],\n formatting: 'anthropic',\n },\n\n // OpenAI GPT models\n 'gpt-4': {\n model: 'gpt-4',\n provider: 'openai',\n maxTokens: 8192,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: true,\n contextWindow: 128000,\n strengths: ['reasoning', 'code', 'analysis'],\n formatting: 'openai',\n },\n 'gpt-4-turbo': {\n model: 'gpt-4-turbo',\n provider: 'openai',\n maxTokens: 4096,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: true,\n contextWindow: 128000,\n strengths: ['speed', 'code', 'reasoning'],\n formatting: 'openai',\n },\n 'gpt-3.5-turbo': {\n model: 'gpt-3.5-turbo',\n provider: 'openai',\n maxTokens: 4096,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: false,\n contextWindow: 16000,\n strengths: ['speed', 'efficiency'],\n formatting: 'openai',\n },\n\n // Google Gemini models\n 'gemini-pro': {\n model: 'gemini-pro',\n provider: 'google',\n maxTokens: 8192,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: false,\n contextWindow: 32000,\n strengths: ['reasoning', 'speed'],\n formatting: 'google',\n },\n 'gemini-pro-vision': {\n model: 'gemini-pro-vision',\n provider: 'google',\n maxTokens: 4096,\n supportsFunctions: true,\n supportsStreaming: true,\n supportsVision: true,\n contextWindow: 32000,\n strengths: ['vision', 'multimodal'],\n formatting: 'google',\n },\n};\n\n/**\n * Get the model profile for a given model identifier\n * @param model Model identifier (e.g., 'claude-opus', 'gpt-4')\n * @returns Model profile or undefined if not found\n */\nexport function getModelProfile(model: string): ModelProfile | undefined {\n return MODEL_PROFILES[model];\n}\n\n/**\n * Formats a prompt with Claude-specific conventions.\n *\n * Wraps the prompt in XML-like `<system>` tags, which Claude models\n * use to clearly delineate system instructions from user content.\n *\n * @param basePrompt - The base system prompt to format\n * @returns The prompt wrapped in Claude-style XML tags\n */\nexport function formatPromptForClaude(basePrompt: string): string {\n // Claude works well with clear XML-like tags for different sections\n if (!basePrompt.includes('<system>')) {\n return `<system>\n${basePrompt}\n</system>`;\n }\n return basePrompt;\n}\n\n/**\n * Formats a prompt with GPT-specific conventions.\n *\n * Prepends an explicit role definition prefix for OpenAI models,\n * which benefit from clear role-based framing.\n *\n * @param basePrompt - The base system prompt to format\n * @returns The prompt with GPT-style role prefix\n */\nexport function formatPromptForGPT(basePrompt: string): string {\n // GPT models benefit from explicit role definition and structured instructions\n if (!basePrompt.includes('As an')) {\n return `You are a helpful AI assistant. ${basePrompt}`;\n }\n return basePrompt;\n}\n\n/**\n * Formats a prompt with Gemini-specific conventions.\n *\n * Currently returns the prompt unmodified, as Gemini responds well\n * to direct, clear instructions without special formatting.\n *\n * @param basePrompt - The base system prompt to format\n * @returns The prompt formatted for Gemini models\n */\nexport function formatPromptForGemini(basePrompt: string): string {\n // Gemini responds well to direct, clear instructions\n // Add emphasis on structured output if needed\n return basePrompt;\n}\n\n/**\n * Adjust prompt based on context window limitations\n * @param prompt The prompt to adjust\n * @param model Model identifier\n * @param maxPromptTokens Maximum tokens for the prompt (leaving room for response)\n * @returns Adjusted prompt\n */\nexport function adjustForContextWindow(\n prompt: string,\n model: string,\n maxPromptTokens: number = 2000,\n): string {\n const profile = getModelProfile(model);\n\n if (!profile) {\n return prompt;\n }\n\n // Estimate tokens (rough approximation: 4 chars ≈ 1 token)\n const estimatedTokens = Math.ceil(prompt.length / 4);\n\n if (estimatedTokens > maxPromptTokens) {\n // For models with large context windows, we can be less aggressive\n const ratio = maxPromptTokens / estimatedTokens;\n\n if (ratio > 0.8) {\n // Only slightly over, we can reduce gracefully\n return prompt.substring(0, Math.floor(prompt.length * 0.9));\n } else if (ratio > 0.5) {\n // Moderately over, trim more significantly\n return prompt.substring(0, Math.floor(prompt.length * ratio));\n } else {\n // Significantly over, drastically reduce\n return prompt.substring(0, Math.floor(prompt.length * 0.5));\n }\n }\n\n return prompt;\n}\n\n/**\n * Optimize prompt for specific model capabilities\n * @param prompt Base prompt\n * @param model Model identifier\n * @returns Optimized prompt\n */\nexport function optimizeForModel(prompt: string, model: string): string {\n const profile = getModelProfile(model);\n\n if (!profile) {\n return prompt;\n }\n\n let optimized = prompt;\n\n // Add vision-specific guidance if model supports vision\n if (profile.supportsVision && !prompt.includes('image')) {\n // Don't modify if already mentions images\n } else if (!profile.supportsVision && prompt.includes('image')) {\n // Remove vision instructions if model doesn't support it\n optimized = optimized.replace(/You can (?:analyze|interpret|describe) images?\\.?\\s*/gi, '');\n }\n\n // Add function-calling guidance if supported\n if (profile.supportsFunctions && !prompt.includes('function')) {\n // Add subtle hint about capability\n optimized += '\\n\\nYou have access to various tools and functions to help accomplish tasks.';\n }\n\n // Apply provider-specific formatting\n switch (profile.provider) {\n case 'anthropic':\n optimized = formatPromptForClaude(optimized);\n break;\n case 'openai':\n optimized = formatPromptForGPT(optimized);\n break;\n case 'google':\n optimized = formatPromptForGemini(optimized);\n break;\n case 'other':\n break;\n default: {\n const exhaustiveCheck: never = profile.provider;\n throw new Error(`Unsupported provider: ${exhaustiveCheck}`);\n }\n }\n\n return optimized;\n}\n\n/**\n * Get model-specific response format guidance\n * @param model Model identifier\n * @returns Format guidance string\n */\nexport function getModelFormatGuidance(model: string): string {\n const profile = getModelProfile(model);\n\n if (!profile) {\n return 'Provide clear, well-formatted responses.';\n }\n\n const guidance: Record<string, string> = {\n anthropic: `Format your response with clear sections. Use XML-like tags for structure:\n<response>\n <summary>Brief overview</summary>\n <details>Main content</details>\n <conclusion>Wrap-up</conclusion>\n</response>`,\n\n openai: `Structure your response clearly:\n- Use numbered or bulleted lists for multiple items\n- Use code blocks (\\`\\`\\`) for code examples\n- Use headers for organization\n- Be direct and concise`,\n\n google: `Organize your response for clarity:\n1. Lead with the most important information\n2. Use clear formatting and bullet points\n3. Provide examples when helpful\n4. End with a clear conclusion`,\n };\n\n return guidance[profile.provider] || 'Provide clear, well-formatted responses.';\n}\n\n/**\n * Get streaming-specific adjustments for a model\n * @param prompt Base prompt\n * @param model Model identifier\n * @returns Streaming-optimized prompt\n */\nexport function optimizeForStreaming(prompt: string, model: string): string {\n const profile = getModelProfile(model);\n\n if (!profile?.supportsStreaming) {\n return prompt;\n }\n\n // Add streaming-friendly guidance\n return `${prompt}\n\nNote: Provide your response in a streaming-friendly format.\nBegin with the most important information first.\nStructure your response in logical chunks that can be transmitted progressively.`;\n}\n\n/**\n * Get cost-optimized variant (prefers faster/cheaper models)\n * @param basePrompt Base prompt\n * @param targetModel Target model to optimize for\n * @returns Cost-optimized prompt\n */\nexport function optimizeForCost(basePrompt: string, targetModel: string): string {\n const profile = getModelProfile(targetModel);\n\n if (!profile) {\n return basePrompt;\n }\n\n let optimized = basePrompt;\n\n // For faster/cheaper models, be more concise\n if (profile.model.includes('haiku') || profile.model.includes('3.5')) {\n optimized = `${basePrompt}\n\nBe concise and direct. Avoid unnecessary elaboration. Focus on the essential information needed to answer the user's question.`;\n }\n\n // Adjust context window usage\n optimized = adjustForContextWindow(optimized, targetModel, 1500);\n\n return optimized;\n}\n\n/**\n * Composite model configuration\n */\nexport interface ModelConfig {\n model: string;\n profile: ModelProfile;\n optimizedPrompt: string;\n formatGuidance: string;\n capabilities: string[];\n}\n\n/**\n * Get complete model configuration with optimized prompt\n * @param basePrompt Base system prompt\n * @param model Model identifier\n * @param optimizationMode 'balanced' | 'speed' | 'quality' | 'cost'\n * @returns Complete model configuration\n */\nexport function getModelConfig(\n basePrompt: string,\n model: string,\n optimizationMode: 'balanced' | 'speed' | 'quality' | 'cost' = 'balanced',\n): ModelConfig {\n const profile = getModelProfile(model);\n\n if (!profile) {\n throw new Error(`Unknown model: ${model}`);\n }\n\n let optimizedPrompt = basePrompt;\n\n switch (optimizationMode) {\n case 'speed':\n optimizedPrompt = optimizeForCost(basePrompt, model);\n break;\n case 'quality':\n optimizedPrompt = optimizeForModel(basePrompt, model);\n break;\n case 'cost':\n optimizedPrompt = optimizeForCost(basePrompt, model);\n break;\n case 'balanced':\n default:\n optimizedPrompt = optimizeForModel(basePrompt, model);\n break;\n }\n\n return {\n model,\n profile,\n optimizedPrompt,\n formatGuidance: getModelFormatGuidance(model),\n capabilities: profile.strengths,\n };\n}\n","/**\n * Prompt Template Utilities\n * Provides template creation, validation, and interpolation functionality\n */\n\n/**\n * Template variable placeholder pattern\n * Matches {{variableName}} or {variableName}\n */\nconst TEMPLATE_VAR_PATTERN = /\\{\\{?(\\w+)\\}?\\}/g;\n\n/**\n * Result of template interpolation\n */\nexport interface InterpolationResult {\n result: string;\n success: boolean;\n missingVariables: string[];\n substitutedVariables: string[];\n}\n\n/**\n * Create a reusable prompt template with variable support\n * @param template Template string with {{variableName}} placeholders\n * @returns PromptTemplate object with template and extracted variables\n */\nexport function createPromptTemplate(template: string) {\n const variables = new Set<string>();\n let match;\n\n // Extract all variable names from template\n TEMPLATE_VAR_PATTERN.lastIndex = 0;\n while ((match = TEMPLATE_VAR_PATTERN.exec(template)) !== null) {\n const varName = match[1];\n if (varName) {\n variables.add(varName);\n }\n }\n\n return {\n template,\n variables,\n /**\n * Interpolate this template with provided variables\n */\n interpolate: (vars: Record<string, string | number | boolean>): InterpolationResult => {\n return interpolateTemplate(template, vars, variables);\n },\n /**\n * Get list of required variables\n */\n getRequiredVariables: (): string[] => Array.from(variables),\n /**\n * Validate that all variables are provided\n */\n validate: (vars: Record<string, unknown>) => {\n const missing = Array.from(variables).filter(v => !(v in vars));\n return {\n valid: missing.length === 0,\n missing,\n };\n },\n };\n}\n\n/**\n * Interpolate template variables into a string\n * @param template Template string with {{variableName}} placeholders\n * @param variables Object containing variable values\n * @param knownVariables Set of known variable names (for validation)\n * @returns Interpolation result with substituted string and metadata\n */\nexport function interpolateTemplate(\n template: string,\n variables: Record<string, string | number | boolean>,\n knownVariables?: Set<string>,\n): InterpolationResult {\n const missingVariables: string[] = [];\n const substitutedVariables: string[] = [];\n let result = template;\n const varPattern = /\\{\\{?(\\w+)\\}?\\}/g;\n\n result = result.replace(varPattern, (matchText, varName) => {\n if (!varName) {\n return matchText;\n }\n\n if (knownVariables && !knownVariables.has(varName)) {\n missingVariables.push(varName);\n return matchText;\n }\n\n if (varName in variables) {\n substitutedVariables.push(varName);\n return String(variables[varName]);\n }\n\n missingVariables.push(varName);\n return matchText; // Keep placeholder if variable not provided\n });\n\n return {\n result,\n success: missingVariables.length === 0,\n missingVariables,\n substitutedVariables,\n };\n}\n\n/**\n * Validate that all required template variables are provided\n * @param template Template string with {{variableName}} placeholders\n * @param variables Object containing variable values\n * @returns Validation result with list of missing variables\n */\nexport function validatePromptTemplate(\n template: string,\n variables: Record<string, unknown>,\n): { valid: boolean; missing: string[] } {\n const varPattern = /\\{\\{?(\\w+)\\}?\\}/g;\n const missing: string[] = [];\n let match;\n\n while ((match = varPattern.exec(template)) !== null) {\n const varName = match[1];\n if (!varName) {\n continue;\n }\n if (!(varName in variables)) {\n missing.push(varName);\n }\n }\n\n return {\n valid: missing.length === 0,\n missing,\n };\n}\n\n/**\n * Merge multiple templates/fragments ensuring no variable conflicts\n * @param templates Array of template strings to merge\n * @param separator String to join templates with (default: double newline)\n * @returns Merged template string and combined variable set\n */\nexport function mergePromptTemplates(\n templates: string[],\n separator: string = '\\n\\n',\n): {\n merged: string;\n variables: Set<string>;\n conflicts: string[];\n} {\n const varPattern = /\\{\\{?(\\w+)\\}?\\}/g;\n const allVariables = new Map<string, number>();\n const conflicts: string[] = [];\n\n // Count variable occurrences across templates\n templates.forEach(template => {\n varPattern.lastIndex = 0;\n let match;\n while ((match = varPattern.exec(template)) !== null) {\n const varName = match[1];\n if (!varName) {\n continue;\n }\n allVariables.set(varName, (allVariables.get(varName) || 0) + 1);\n }\n });\n\n // Identify conflicting variables (same name in multiple templates)\n allVariables.forEach((count, varName) => {\n if (count > 1) {\n conflicts.push(varName);\n }\n });\n\n const merged = templates.filter(t => t.trim().length > 0).join(separator);\n\n return {\n merged,\n variables: new Set(allVariables.keys()),\n conflicts,\n };\n}\n\n/**\n * Extract all variables from a template\n * @param template Template string with {{variableName}} placeholders\n * @returns Array of variable names found in template\n */\nexport function extractTemplateVariables(template: string): string[] {\n const varPattern = /\\{\\{?(\\w+)\\}?\\}/g;\n const variables: string[] = [];\n let match;\n\n while ((match = varPattern.exec(template)) !== null) {\n const varName = match[1];\n if (!varName) {\n continue;\n }\n if (!variables.includes(varName)) {\n variables.push(varName);\n }\n }\n\n return variables;\n}\n\n/**\n * Create a cached template for performance\n */\nexport class CachedPromptTemplate {\n private template: string;\n private variables: Set<string>;\n private cache: Map<string, string> = new Map();\n\n constructor(template: string) {\n this.template = template;\n this.variables = new Set();\n\n // Extract variables\n const varPattern = /\\{\\{?(\\w+)\\}?\\}/g;\n let match;\n while ((match = varPattern.exec(template)) !== null) {\n const varName = match[1];\n if (varName) {\n this.variables.add(varName);\n }\n }\n }\n\n /**\n * Get the raw template string\n */\n getTemplate(): string {\n return this.template;\n }\n\n /**\n * Get list of required variables\n */\n getVariables(): string[] {\n return Array.from(this.variables);\n }\n\n /**\n * Interpolate with caching\n */\n interpolate(variables: Record<string, string | number | boolean>): string {\n const cacheKey = JSON.stringify(variables);\n\n if (this.cache.has(cacheKey)) {\n const cached = this.cache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n }\n\n const { result } = interpolateTemplate(this.template, variables, this.variables);\n this.cache.set(cacheKey, result);\n\n return result;\n }\n\n /**\n * Clear the interpolation cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): { size: number; maxSize: number } {\n return {\n size: this.cache.size,\n maxSize: 1000, // Maximum cached entries\n };\n }\n}\n\n/**\n * Preset templates for common prompt patterns\n */\nexport const PROMPT_TEMPLATES = {\n /**\n * Task execution template\n */\n task: createPromptTemplate(\n `You are tasked with: {{task}}\nContext: {{context}}\nExpected output format: {{format}}\nConstraints: {{constraints}}`,\n ),\n\n /**\n * Conversation template\n */\n conversation: createPromptTemplate(\n `You are {{role}}.\nYour expertise: {{expertise}}\nConversation tone: {{tone}}\nResponse style: {{style}}`,\n ),\n\n /**\n * Analysis template\n */\n analysis: createPromptTemplate(\n `Analyze the following {{subject}}:\nData: {{data}}\nFocus areas: {{focusAreas}}\nProvide: {{deliverables}}`,\n ),\n\n /**\n * Code generation template\n */\n codeGeneration: createPromptTemplate(\n `Generate {{language}} code for: {{task}}\nRequirements: {{requirements}}\nCode style: {{style}}\nInclude: {{includes}}`,\n ),\n};\n","/**\n * @fileoverview Centralized system prompt management with model-specific composition and variants.\n * @module @od-oneapp/ai-platform/prompts\n */\n\nimport { formatPromptForClaude, formatPromptForGemini, formatPromptForGPT } from './model-variants';\n\n// System prompts for different assistant personas\nexport const SYSTEM_PROMPTS = {\n default: `You are a helpful, harmless, and honest AI assistant.\nYou provide accurate, thoughtful responses while maintaining clarity and concision.\nAlways prioritize user safety and accuracy in your responses.`,\n\n assistant: `You are a professional AI assistant designed to help users with a wide variety of tasks.\nYou are knowledgeable, helpful, and respectful. You provide detailed, accurate information.\nYou ask clarifying questions when needed and adapt your communication style to the user's needs.`,\n\n coder: `You are an expert software engineer and code reviewer.\nYou write clean, maintainable, and well-documented code following best practices.\nYou provide comprehensive explanations of technical concepts and help debug complex issues.\nYou recommend performance optimizations and security improvements.`,\n\n analyst: `You are a data analyst and business intelligence expert.\nYou interpret data accurately, identify trends, and provide actionable insights.\nYou communicate complex analytical findings in clear, understandable terms.\nYou consider context and limitations when making recommendations based on data.`,\n\n researcher: `You are a thorough research expert with strong analytical capabilities.\nYou synthesize information from multiple sources and identify patterns and connections.\nYou distinguish between facts, evidence, and speculation clearly.\nYou acknowledge gaps in knowledge and suggest further research directions.`,\n\n writer: `You are a skilled professional writer and editor.\nYou create compelling, well-structured content tailored to your audience.\nYou maintain consistency in tone, style, and messaging.\nYou provide constructive feedback and help refine written work.`,\n};\n\n// Prompt fragments for composition and reuse\nexport const PROMPT_FRAGMENTS = {\n safety: `Always prioritize safety and accuracy. Never provide harmful information.\nBe transparent about limitations and uncertainties in your knowledge.\nIf you're unsure, say so and suggest reliable ways to find accurate information.`,\n\n formatting: `Structure your response clearly with appropriate formatting:\n- Use bullet points for lists\n- Use code blocks for code examples with language specification\n- Use tables for comparative information\n- Use headers to organize long responses\n- Use emphasis (bold/italic) for important points`,\n\n codeStyle: `When writing code:\n- Follow the language's standard conventions and best practices\n- Include meaningful variable and function names\n- Add comments for complex logic\n- Provide error handling where appropriate\n- Consider edge cases and potential issues`,\n\n reasoning: `Show your reasoning and thought process:\n- Explain the why behind recommendations\n- Break down complex problems step by step\n- Consider multiple perspectives and approaches\n- Acknowledge trade-offs and limitations`,\n\n citations: `When referencing information:\n- Cite sources when using specific facts or data\n- Distinguish between widely-known information and specialized knowledge\n- Indicate the recency and reliability of sources when relevant\n- Acknowledge when information might be outdated`,\n};\n\n/**\n * Options for composing system prompts\n */\nexport interface ComposeOptions {\n basePrompt: string;\n fragments?: string[];\n model?: string;\n temperature?: number;\n maxTokens?: number;\n style?: 'concise' | 'detailed' | 'balanced';\n customInstructions?: string;\n}\n\n/**\n * Compose a system prompt from base prompt and fragments\n * @param options Configuration for prompt composition\n * @returns Composed system prompt string\n */\nexport function composeSystemPrompt(options: ComposeOptions): string {\n const { basePrompt, fragments = [], customInstructions, style = 'balanced' } = options;\n\n let composed = basePrompt;\n\n // Add fragments if specified\n if (fragments.length > 0) {\n composed += '\\n\\n';\n composed += fragments.join('\\n\\n');\n }\n\n // Add style-specific guidance\n if (style === 'concise') {\n composed += '\\n\\n';\n composed += 'Keep responses concise and to the point. Avoid unnecessary elaboration.';\n } else if (style === 'detailed') {\n composed += '\\n\\n';\n composed += 'Provide comprehensive, detailed responses with thorough explanations.';\n }\n\n // Add custom instructions if provided\n if (customInstructions) {\n composed += '\\n\\n';\n composed += `Additional instructions: ${customInstructions}`;\n }\n\n return composed;\n}\n\n/**\n * Formats a base prompt with model-specific conventions based on the model identifier.\n *\n * Detects the model family from the ID prefix (e.g., `claude-*`, `gpt-*`, `gemini-*`)\n * and applies the corresponding formatting variant. Returns the prompt unchanged\n * if the model family is not recognized.\n *\n * @param basePrompt - The base system prompt to format\n * @param model - Model identifier (e.g., `'claude-opus'`, `'gpt-4'`, `'gemini-pro'`)\n * @returns The prompt formatted for the target model's conventions\n *\n * @example\n * ```ts\n * const prompt = formatPromptForModel('You are a helpful assistant.', 'claude-opus');\n * // Returns: '<system>\\nYou are a helpful assistant.\\n</system>'\n * ```\n */\nconst MODEL_VARIANTS: Record<string, (prompt: string) => string> = {\n claude: formatPromptForClaude,\n gemini: formatPromptForGemini,\n gpt: formatPromptForGPT,\n};\n\nexport function formatPromptForModel(basePrompt: string, model: string): string {\n const [modelPrefixRaw] = model.split('-');\n const modelPrefix = modelPrefixRaw?.toLowerCase();\n\n if (!modelPrefix) {\n return basePrompt;\n }\n\n const variantFn = MODEL_VARIANTS[modelPrefix];\n\n if (!variantFn) {\n return basePrompt;\n }\n\n return variantFn(basePrompt);\n}\n\n/**\n * Template variables for prompt interpolation\n */\nexport interface TemplateVariables {\n [key: string]: string | number | boolean;\n}\n\n/**\n * Prompt template interface\n */\nexport interface PromptTemplate {\n template: string;\n variables: Set<string>;\n}\n\n/**\n * Validate that all template variables are provided\n * @param template The prompt template\n * @param variables Provided variable values\n * @returns Object indicating validation result and missing variables\n */\nexport function validatePromptVariables(\n template: PromptTemplate,\n variables: TemplateVariables,\n): { valid: boolean; missing: string[] } {\n const missing = Array.from(template.variables).filter(v => !(v in variables));\n return {\n valid: missing.length === 0,\n missing,\n };\n}\n\n/**\n * Merge multiple prompt fragments into a cohesive prompt\n * @param fragments Array of prompt fragments to merge\n * @param separator String to join fragments with (default: double newline)\n * @returns Merged prompt string\n */\nexport function mergePromptFragments(fragments: string[], separator: string = '\\n\\n'): string {\n return fragments.filter(f => f.trim().length > 0).join(separator);\n}\n\n/**\n * Export template utilities\n */\nexport * from './templates';\n\n/**\n * Export model variants\n */\nexport * from './model-variants';\n\n// ---------------------------------------------------------------------------\n// Configuration constants & fragments (migrated from @repo/ai)\n// ---------------------------------------------------------------------------\n\n/**\n * Common temperature presets used across providers.\n * Single source of truth for temperature values.\n */\nexport const TEMPS = {\n PRECISE: 0, // Deterministic, no randomness\n VERY_LOW: 0.1, // Near-deterministic, minimal variation\n FACTUAL: 0.2, // Low creativity, high accuracy\n LOW_CREATIVE: 0.3, // Slightly creative, mostly factual\n MODERATE: 0.5, // Moderate balance\n BALANCED: 0.7, // Default for most use cases\n HIGH_CREATIVE: 0.8, // Higher creativity\n CREATIVE: 0.9, // High creativity, more variety\n} as const;\n\n/**\n * Common token limit presets.\n * Standardized across providers where applicable.\n */\nexport const TOKENS = {\n TINY: 256, // Very short responses\n SHORT: 1024, // Quick responses\n MEDIUM: 2048, // Standard responses\n LONG: 4096, // Detailed responses\n EXTENDED: 8192, // Extended context\n MAX: 16384, // Maximum for most models\n} as const;\n\n/**\n * Chat configuration fragments - frequently reused patterns only.\n *\n * @example\n * ```typescript\n * const { basicChat } = chatFragments;\n * const config = { ...basicChat, system: 'You are a helpful assistant.' };\n * ```\n */\nexport const chatFragments = {\n /** Basic chat configuration - used 6+ times across generation functions */\n basicChat: {\n temperature: TEMPS.BALANCED,\n maxOutputTokens: TOKENS.MEDIUM,\n },\n\n /** Structured data chat - used 6+ times in object generation */\n structured: {\n temperature: TEMPS.VERY_LOW,\n maxOutputTokens: TOKENS.LONG,\n },\n\n /** Tool-enabled chat - used 3+ times */\n withTools: {\n temperature: TEMPS.BALANCED,\n maxOutputTokens: TOKENS.MEDIUM,\n toolChoice: 'auto' as const,\n },\n} as const;\n"],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ //#region src/streaming/core/types.d.ts
2
+ type StreamPartType = 'data-id' | 'data-kind' | 'data-title' | 'data-status' | 'data-textDelta' | 'data-codeDelta' | 'data-progress' | 'data-finish' | 'data-error' | 'data-clear';
3
+ interface StreamPart<T extends StreamPartType = StreamPartType> {
4
+ type: T;
5
+ data: unknown;
6
+ transient?: boolean;
7
+ }
8
+ interface IdStreamPart extends StreamPart<'data-id'> {
9
+ data: string;
10
+ }
11
+ interface KindStreamPart extends StreamPart<'data-kind'> {
12
+ data: string;
13
+ }
14
+ interface TitleStreamPart extends StreamPart<'data-title'> {
15
+ data: string;
16
+ }
17
+ interface StatusStreamPart extends StreamPart<'data-status'> {
18
+ data: 'creating' | 'streaming' | 'complete' | 'error';
19
+ }
20
+ interface TextDeltaStreamPart extends StreamPart<'data-textDelta'> {
21
+ data: string;
22
+ }
23
+ interface CodeDeltaStreamPart extends StreamPart<'data-codeDelta'> {
24
+ data: {
25
+ code: string;
26
+ language?: string;
27
+ };
28
+ }
29
+ interface ProgressStreamPart extends StreamPart<'data-progress'> {
30
+ data: {
31
+ current: number;
32
+ total: number;
33
+ message?: string;
34
+ };
35
+ }
36
+ interface FinishStreamPart extends StreamPart<'data-finish'> {
37
+ data: {
38
+ success: boolean;
39
+ metadata?: Record<string, unknown>;
40
+ };
41
+ }
42
+ interface ErrorStreamPart extends StreamPart<'data-error'> {
43
+ data: {
44
+ message: string;
45
+ code?: string;
46
+ recoverable?: boolean;
47
+ };
48
+ }
49
+ interface ClearStreamPart extends StreamPart<'data-clear'> {
50
+ data: null;
51
+ }
52
+ type AnyStreamPart = IdStreamPart | KindStreamPart | TitleStreamPart | StatusStreamPart | TextDeltaStreamPart | CodeDeltaStreamPart | ProgressStreamPart | FinishStreamPart | ErrorStreamPart | ClearStreamPart;
53
+ interface CustomUIDataTypes {
54
+ id: string;
55
+ kind: string;
56
+ title: string;
57
+ status: 'creating' | 'streaming' | 'complete' | 'error';
58
+ textDelta: string;
59
+ codeDelta: {
60
+ code: string;
61
+ language?: string;
62
+ };
63
+ progress: {
64
+ current: number;
65
+ total: number;
66
+ message?: string;
67
+ };
68
+ finish: {
69
+ success: boolean;
70
+ metadata?: Record<string, unknown>;
71
+ };
72
+ error: {
73
+ message: string;
74
+ code?: string;
75
+ recoverable?: boolean;
76
+ };
77
+ clear: null;
78
+ }
79
+ interface ArtifactStreamWriter {
80
+ writeId(id: string): void;
81
+ writeKind(kind: string): void;
82
+ writeTitle(title: string): void;
83
+ writeStatus(status: CustomUIDataTypes['status']): void;
84
+ writeTextDelta(text: string): void;
85
+ writeCodeDelta(code: string, language?: string): void;
86
+ writeProgress(current: number, total: number, message?: string): void;
87
+ writeFinish(success: boolean, metadata?: Record<string, unknown>): void;
88
+ writeError(message: string, code?: string, recoverable?: boolean): void;
89
+ clear(): void;
90
+ }
91
+ //#endregion
92
+ //#region src/streaming/core/protocol.d.ts
93
+ interface DataStreamWriter {
94
+ write(data: unknown): void;
95
+ }
96
+ declare function createArtifactStreamWriter(writer: DataStreamWriter): ArtifactStreamWriter;
97
+ declare function streamArtifact(dataWriter: DataStreamWriter, config: {
98
+ id: string;
99
+ kind: string;
100
+ title: string;
101
+ }, generator: () => AsyncGenerator<string, void, unknown>): Promise<void>;
102
+ declare function createBufferedStreamWriter(writer: DataStreamWriter, options?: {
103
+ bufferSize?: number;
104
+ flushInterval?: number;
105
+ }): {
106
+ write: (type: string, data: unknown) => void;
107
+ flush: () => void;
108
+ readonly bufferLength: number;
109
+ };
110
+ //#endregion
111
+ export { StreamPartType as _, AnyStreamPart as a, CodeDeltaStreamPart as c, FinishStreamPart as d, IdStreamPart as f, StreamPart as g, StatusStreamPart as h, streamArtifact as i, CustomUIDataTypes as l, ProgressStreamPart as m, createArtifactStreamWriter as n, ArtifactStreamWriter as o, KindStreamPart as p, createBufferedStreamWriter as r, ClearStreamPart as s, DataStreamWriter as t, ErrorStreamPart as u, TextDeltaStreamPart as v, TitleStreamPart as y };
112
+ //# sourceMappingURL=protocol-DfBiEsnl.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-DfBiEsnl.d.mts","names":[],"sources":["../src/streaming/core/types.ts","../src/streaming/core/protocol.ts"],"mappings":";KAQY,cAAA;AAAA,UAeK,UAAA,WAAqB,cAAA,GAAiB,cAAA;EAErD,IAAA,EAAM,CAAA;EAEN,IAAA;EAEA,SAAA;AAAA;AAAA,UAMe,YAAA,SAAqB,UAAA;EACpC,IAAA;AAAA;AAAA,UAMe,cAAA,SAAuB,UAAA;EACtC,IAAA;AAAA;AAAA,UAMe,eAAA,SAAwB,UAAA;EACvC,IAAA;AAAA;AAAA,UAMe,gBAAA,SAAyB,UAAA;EACxC,IAAA;AAAA;AAAA,UAMe,mBAAA,SAA4B,UAAA;EAC3C,IAAA;AAAA;AAAA,UAMe,mBAAA,SAA4B,UAAA;EAC3C,IAAA;IACE,IAAA;IACA,QAAA;EAAA;AAAA;AAAA,UAOa,kBAAA,SAA2B,UAAA;EAC1C,IAAA;IACE,OAAA;IACA,KAAA;IACA,OAAA;EAAA;AAAA;AAAA,UAOa,gBAAA,SAAyB,UAAA;EACxC,IAAA;IACE,OAAA;IACA,QAAA,GAAW,MAAA;EAAA;AAAA;AAAA,UAOE,eAAA,SAAwB,UAAA;EACvC,IAAA;IACE,OAAA;IACA,IAAA;IACA,WAAA;EAAA;AAAA;AAAA,UAOa,eAAA,SAAwB,UAAA;EACvC,IAAA;AAAA;AAAA,KAMU,aAAA,GACR,YAAA,GACA,cAAA,GACA,eAAA,GACA,gBAAA,GACA,mBAAA,GACA,mBAAA,GACA,kBAAA,GACA,gBAAA,GACA,eAAA,GACA,eAAA;AAAA,UAKa,iBAAA;EAEf,EAAA;EAEA,IAAA;EAEA,KAAA;EAEA,MAAA;EAEA,SAAA;EAEA,SAAA;IAAa,IAAA;IAAc,QAAA;EAAA;EAE3B,QAAA;IAAY,OAAA;IAAiB,KAAA;IAAe,OAAA;EAAA;EAE5C,MAAA;IAAU,OAAA;IAAkB,QAAA,GAAW,MAAA;EAAA;EAEvC,KAAA;IAAS,OAAA;IAAiB,IAAA;IAAe,WAAA;EAAA;EAEzC,KAAA;AAAA;AAAA,UAMe,oBAAA;EAEf,OAAA,CAAQ,EAAA;EAER,SAAA,CAAU,IAAA;EAEV,UAAA,CAAW,KAAA;EAEX,WAAA,CAAY,MAAA,EAAQ,iBAAA;EAEpB,cAAA,CAAe,IAAA;EAEf,cAAA,CAAe,IAAA,UAAc,QAAA;EAE7B,aAAA,CAAc,OAAA,UAAiB,KAAA,UAAe,OAAA;EAE9C,WAAA,CAAY,OAAA,WAAkB,QAAA,GAAW,MAAA;EAEzC,UAAA,CAAW,OAAA,UAAiB,IAAA,WAAe,WAAA;EAE3C,KAAA;AAAA;;;UCzKe,gBAAA;EACf,KAAA,CAAM,IAAA;AAAA;AAAA,iBAwBQ,0BAAA,CAA2B,MAAA,EAAQ,gBAAA,GAAmB,oBAAA;AAAA,iBA+DhD,cAAA,CACpB,UAAA,EAAY,gBAAA,EACZ,MAAA;EACE,EAAA;EACA,IAAA;EACA,KAAA;AAAA,GAEF,SAAA,QAAiB,cAAA,0BAChB,OAAA;AAAA,iBAqCa,0BAAA,CACd,MAAA,EAAQ,gBAAA,EACR,OAAA;EAEE,UAAA;EAEA,aAAA;AAAA;wBA0ByB,IAAA"}
@@ -0,0 +1,62 @@
1
+ import { Ur as SDKLanguageModelV3Middleware } from "./ai-runtime-DIwOEc6g.mjs";
2
+
3
+ //#region src/governance/tenancy/types.d.ts
4
+ interface TenantConfig {
5
+ tenantId: string;
6
+ name: string;
7
+ tier: TenantTier;
8
+ quotas: TenantQuotas;
9
+ allowedModels?: string[];
10
+ settings?: Record<string, unknown>;
11
+ }
12
+ type TenantTier = 'free' | 'starter' | 'pro' | 'enterprise';
13
+ interface TenantQuotas {
14
+ requestsPerMinute: number;
15
+ requestsPerDay: number;
16
+ tokensPerDay: number;
17
+ maxMonthlyCost: number;
18
+ maxConcurrent?: number;
19
+ }
20
+ interface TenantContext {
21
+ tenantId: string;
22
+ tier: TenantTier;
23
+ quotas: TenantQuotas;
24
+ }
25
+ declare class TenantQuotaExceededError extends Error {
26
+ readonly tenantId: string;
27
+ readonly quotaType: keyof TenantQuotas;
28
+ readonly current: number;
29
+ readonly limit: number;
30
+ constructor(tenantId: string, quotaType: keyof TenantQuotas, current: number, limit: number);
31
+ }
32
+ //#endregion
33
+ //#region src/governance/tenancy/isolation/context.d.ts
34
+ declare function setTenantContext(context: TenantContext): void;
35
+ declare function getTenantContext(): TenantContext;
36
+ declare function getTenantContextOrNull(): TenantContext | null;
37
+ declare function clearTenantContext(): void;
38
+ declare function withTenantContext<T>(context: TenantContext, fn: () => Promise<T>): Promise<T>;
39
+ declare function createTenantContext(config: TenantConfig): TenantContext;
40
+ //#endregion
41
+ //#region src/governance/tenancy/quotas/quota-manager.d.ts
42
+ interface QuotaTracker {
43
+ getUsage(tenantId: string): Promise<QuotaUsage>;
44
+ recordUsage(tenantId: string, usage: Partial<QuotaUsage>): Promise<void>;
45
+ }
46
+ interface QuotaUsage {
47
+ requestsThisMinute: number;
48
+ requestsToday: number;
49
+ tokensToday: number;
50
+ costThisMonth: number;
51
+ currentConcurrent: number;
52
+ }
53
+ declare class InMemoryQuotaTracker implements QuotaTracker {
54
+ private usage;
55
+ getUsage(tenantId: string): Promise<QuotaUsage>;
56
+ recordUsage(tenantId: string, usage: Partial<QuotaUsage>): Promise<void>;
57
+ reset(tenantId?: string): void;
58
+ }
59
+ declare function createQuotaMiddleware(tracker: QuotaTracker): SDKLanguageModelV3Middleware;
60
+ //#endregion
61
+ export { clearTenantContext as a, getTenantContextOrNull as c, TenantConfig as d, TenantContext as f, TenantTier as h, createQuotaMiddleware as i, setTenantContext as l, TenantQuotas as m, QuotaTracker as n, createTenantContext as o, TenantQuotaExceededError as p, QuotaUsage as r, getTenantContext as s, InMemoryQuotaTracker as t, withTenantContext as u };
62
+ //# sourceMappingURL=quota-manager-0iPMkQWN.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-manager-0iPMkQWN.d.mts","names":[],"sources":["../src/governance/tenancy/types.ts","../src/governance/tenancy/isolation/context.ts","../src/governance/tenancy/quotas/quota-manager.ts"],"mappings":";;;UAOiB,YAAA;EAEf,QAAA;EAEA,IAAA;EAEA,IAAA,EAAM,UAAA;EAEN,MAAA,EAAQ,YAAA;EAER,aAAA;EAEA,QAAA,GAAW,MAAA;AAAA;AAAA,KAMD,UAAA;AAAA,UAKK,YAAA;EAEf,iBAAA;EAEA,cAAA;EAEA,YAAA;EAEA,cAAA;EAEA,aAAA;AAAA;AAAA,UAMe,aAAA;EACf,QAAA;EACA,IAAA,EAAM,UAAA;EACN,MAAA,EAAQ,YAAA;AAAA;AAAA,cAMG,wBAAA,SAAiC,KAAA;EAAA,SAE1B,QAAA;EAAA,SACA,SAAA,QAAiB,YAAA;EAAA,SACjB,OAAA;EAAA,SACA,KAAA;cAHA,QAAA,UACA,SAAA,QAAiB,YAAA,EACjB,OAAA,UACA,KAAA;AAAA;;;iBCrCJ,gBAAA,CAAiB,OAAA,EAAS,aAAA;AAAA,iBAS1B,gBAAA,CAAA,GAAoB,aAAA;AAAA,iBAWpB,sBAAA,CAAA,GAA0B,aAAA;AAAA,iBAQ1B,kBAAA,CAAA;AAAA,iBAiBM,iBAAA,GAAA,CACpB,OAAA,EAAS,aAAA,EACT,EAAA,QAAU,OAAA,CAAQ,CAAA,IACjB,OAAA,CAAQ,CAAA;AAAA,iBAcK,mBAAA,CAAoB,MAAA,EAAQ,YAAA,GAAe,aAAA;;;UCtE1C,YAAA;EAEf,QAAA,CAAS,QAAA,WAAmB,OAAA,CAAQ,UAAA;EAEpC,WAAA,CAAY,QAAA,UAAkB,KAAA,EAAO,OAAA,CAAQ,UAAA,IAAc,OAAA;AAAA;AAAA,UAM5C,UAAA;EACf,kBAAA;EACA,aAAA;EACA,WAAA;EACA,aAAA;EACA,iBAAA;AAAA;AAAA,cAMW,oBAAA,YAAgC,YAAA;EAAA,QACnC,KAAA;EAEF,QAAA,CAAS,QAAA,WAAmB,OAAA,CAAQ,UAAA;EAYpC,WAAA,CAAY,QAAA,UAAkB,KAAA,EAAO,OAAA,CAAQ,UAAA,IAAc,OAAA;EAYjE,KAAA,CAAM,QAAA;AAAA;AAAA,iBAuFQ,qBAAA,CAAsB,OAAA,EAAS,YAAA,GAAe,4BAAA"}
@@ -0,0 +1,180 @@
1
+ //#region src/governance/tenancy/types.ts
2
+ /**
3
+ * Tenant quota exceeded error
4
+ */
5
+ var TenantQuotaExceededError = class extends Error {
6
+ constructor(tenantId, quotaType, current, limit) {
7
+ super(`Tenant ${tenantId} exceeded ${quotaType} quota: ${current}/${limit}`);
8
+ this.tenantId = tenantId;
9
+ this.quotaType = quotaType;
10
+ this.current = current;
11
+ this.limit = limit;
12
+ this.name = "TenantQuotaExceededError";
13
+ }
14
+ };
15
+
16
+ //#endregion
17
+ //#region src/governance/tenancy/isolation/context.ts
18
+ /**
19
+ * Tenant context storage (AsyncLocalStorage would be better in production)
20
+ */
21
+ let currentTenant = null;
22
+ /**
23
+ * Set the current tenant context
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * setTenantContext({
28
+ * tenantId: "tenant-123",
29
+ * tier: "pro",
30
+ * quotas: { requestsPerMinute: 100, ... }
31
+ * });
32
+ * ```
33
+ */
34
+ function setTenantContext(context) {
35
+ currentTenant = structuredClone(context);
36
+ }
37
+ /**
38
+ * Get the current tenant context
39
+ * @throws Error if no tenant context is set
40
+ */
41
+ function getTenantContext() {
42
+ if (!currentTenant) throw new Error("No tenant context set. Call setTenantContext first.");
43
+ return structuredClone(currentTenant);
44
+ }
45
+ /**
46
+ * Get tenant context if available, or null
47
+ */
48
+ function getTenantContextOrNull() {
49
+ return currentTenant ? structuredClone(currentTenant) : null;
50
+ }
51
+ /**
52
+ * Clear the current tenant context
53
+ */
54
+ function clearTenantContext() {
55
+ currentTenant = null;
56
+ }
57
+ /**
58
+ * Run a function with tenant context
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * const result = await withTenantContext(
63
+ * { tenantId: "tenant-123", tier: "pro", quotas: {...} },
64
+ * async () => {
65
+ * return generateText({ model, prompt });
66
+ * }
67
+ * );
68
+ * ```
69
+ */
70
+ async function withTenantContext(context, fn) {
71
+ const previous = currentTenant;
72
+ try {
73
+ currentTenant = structuredClone(context);
74
+ return await fn();
75
+ } finally {
76
+ currentTenant = previous;
77
+ }
78
+ }
79
+ /**
80
+ * Create tenant context from config
81
+ */
82
+ function createTenantContext(config) {
83
+ return {
84
+ tenantId: config.tenantId,
85
+ tier: config.tier,
86
+ quotas: config.quotas
87
+ };
88
+ }
89
+
90
+ //#endregion
91
+ //#region src/governance/tenancy/quotas/quota-manager.ts
92
+ /**
93
+ * Tenant quota management
94
+ */
95
+ /**
96
+ * In-memory quota tracker for development
97
+ */
98
+ var InMemoryQuotaTracker = class {
99
+ usage = /* @__PURE__ */ new Map();
100
+ async getUsage(tenantId) {
101
+ return this.usage.get(tenantId) ?? {
102
+ requestsThisMinute: 0,
103
+ requestsToday: 0,
104
+ tokensToday: 0,
105
+ costThisMonth: 0,
106
+ currentConcurrent: 0
107
+ };
108
+ }
109
+ async recordUsage(tenantId, usage) {
110
+ const current = await this.getUsage(tenantId);
111
+ this.usage.set(tenantId, {
112
+ requestsThisMinute: current.requestsThisMinute + (usage.requestsThisMinute ?? 0),
113
+ requestsToday: current.requestsToday + (usage.requestsToday ?? 0),
114
+ tokensToday: current.tokensToday + (usage.tokensToday ?? 0),
115
+ costThisMonth: current.costThisMonth + (usage.costThisMonth ?? 0),
116
+ currentConcurrent: usage.currentConcurrent ?? current.currentConcurrent
117
+ });
118
+ }
119
+ /** Reset usage for testing */
120
+ reset(tenantId) {
121
+ if (tenantId) this.usage.delete(tenantId);
122
+ else this.usage.clear();
123
+ }
124
+ };
125
+ const getUsageTotal = (value) => {
126
+ if (typeof value === "number") return value;
127
+ if (value && typeof value === "object" && "total" in value) {
128
+ const { total } = value;
129
+ return typeof total === "number" ? total : 0;
130
+ }
131
+ return 0;
132
+ };
133
+ /**
134
+ * Check quota limits
135
+ */
136
+ async function checkQuotas(tenantId, quotas, tracker) {
137
+ const usage = await tracker.getUsage(tenantId);
138
+ if (usage.requestsThisMinute >= quotas.requestsPerMinute) throw new TenantQuotaExceededError(tenantId, "requestsPerMinute", usage.requestsThisMinute, quotas.requestsPerMinute);
139
+ if (usage.requestsToday >= quotas.requestsPerDay) throw new TenantQuotaExceededError(tenantId, "requestsPerDay", usage.requestsToday, quotas.requestsPerDay);
140
+ if (usage.tokensToday >= quotas.tokensPerDay) throw new TenantQuotaExceededError(tenantId, "tokensPerDay", usage.tokensToday, quotas.tokensPerDay);
141
+ if (usage.costThisMonth >= quotas.maxMonthlyCost) throw new TenantQuotaExceededError(tenantId, "maxMonthlyCost", usage.costThisMonth, quotas.maxMonthlyCost);
142
+ if (quotas.maxConcurrent && usage.currentConcurrent >= quotas.maxConcurrent) throw new TenantQuotaExceededError(tenantId, "maxConcurrent", usage.currentConcurrent, quotas.maxConcurrent);
143
+ }
144
+ /**
145
+ * Create tenant quota enforcement middleware
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * const quotaMiddleware = createQuotaMiddleware(new RedisQuotaTracker(redis));
150
+ *
151
+ * const model = wrapLanguageModel({
152
+ * model: anthropic("claude-sonnet-4-20250514"),
153
+ * middleware: quotaMiddleware,
154
+ * });
155
+ * ```
156
+ */
157
+ function createQuotaMiddleware(tracker) {
158
+ return {
159
+ specificationVersion: "v3",
160
+ wrapGenerate: async ({ doGenerate }) => {
161
+ const context = getTenantContext();
162
+ await checkQuotas(context.tenantId, context.quotas, tracker);
163
+ await tracker.recordUsage(context.tenantId, {
164
+ requestsThisMinute: 1,
165
+ requestsToday: 1
166
+ });
167
+ const result = await doGenerate();
168
+ if (result.usage) {
169
+ const inputTokens = getUsageTotal(result.usage.inputTokens);
170
+ const outputTokens = getUsageTotal(result.usage.outputTokens);
171
+ await tracker.recordUsage(context.tenantId, { tokensToday: inputTokens + outputTokens });
172
+ }
173
+ return result;
174
+ }
175
+ };
176
+ }
177
+
178
+ //#endregion
179
+ export { getTenantContext as a, withTenantContext as c, createTenantContext as i, TenantQuotaExceededError as l, createQuotaMiddleware as n, getTenantContextOrNull as o, clearTenantContext as r, setTenantContext as s, InMemoryQuotaTracker as t };
180
+ //# sourceMappingURL=quota-manager-D_N7FuQ2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-manager-D_N7FuQ2.mjs","names":[],"sources":["../src/governance/tenancy/types.ts","../src/governance/tenancy/isolation/context.ts","../src/governance/tenancy/quotas/quota-manager.ts"],"sourcesContent":["/**\n * Multi-tenancy types\n */\n\n/**\n * Tenant configuration\n */\nexport interface TenantConfig {\n /** Unique tenant identifier */\n tenantId: string;\n /** Display name */\n name: string;\n /** Tenant tier for feature gating */\n tier: TenantTier;\n /** Quota configuration */\n quotas: TenantQuotas;\n /** Allowed models for this tenant */\n allowedModels?: string[];\n /** Custom settings */\n settings?: Record<string, unknown>;\n}\n\n/**\n * Tenant tier for feature gating\n */\nexport type TenantTier = 'free' | 'starter' | 'pro' | 'enterprise';\n\n/**\n * Tenant quotas\n */\nexport interface TenantQuotas {\n /** Max requests per minute */\n requestsPerMinute: number;\n /** Max requests per day */\n requestsPerDay: number;\n /** Max tokens per day */\n tokensPerDay: number;\n /** Max cost per month in USD */\n maxMonthlyCost: number;\n /** Max concurrent requests */\n maxConcurrent?: number;\n}\n\n/**\n * Tenant context for request isolation\n */\nexport interface TenantContext {\n tenantId: string;\n tier: TenantTier;\n quotas: TenantQuotas;\n}\n\n/**\n * Tenant quota exceeded error\n */\nexport class TenantQuotaExceededError extends Error {\n constructor(\n public readonly tenantId: string,\n public readonly quotaType: keyof TenantQuotas,\n public readonly current: number,\n public readonly limit: number,\n ) {\n super(`Tenant ${tenantId} exceeded ${quotaType} quota: ${current}/${limit}`);\n this.name = 'TenantQuotaExceededError';\n }\n}\n","/**\n * Tenant context isolation\n */\n\nimport type { TenantContext, TenantConfig } from '../types';\n\n/**\n * Tenant context storage (AsyncLocalStorage would be better in production)\n */\nlet currentTenant: TenantContext | null = null;\n\n/**\n * Set the current tenant context\n *\n * @example\n * ```ts\n * setTenantContext({\n * tenantId: \"tenant-123\",\n * tier: \"pro\",\n * quotas: { requestsPerMinute: 100, ... }\n * });\n * ```\n */\nexport function setTenantContext(context: TenantContext): void {\n // Clone to prevent external mutation of stored context\n currentTenant = structuredClone(context);\n}\n\n/**\n * Get the current tenant context\n * @throws Error if no tenant context is set\n */\nexport function getTenantContext(): TenantContext {\n if (!currentTenant) {\n throw new Error('No tenant context set. Call setTenantContext first.');\n }\n // Return a clone to prevent external mutation\n return structuredClone(currentTenant);\n}\n\n/**\n * Get tenant context if available, or null\n */\nexport function getTenantContextOrNull(): TenantContext | null {\n // Return a clone to prevent external mutation\n return currentTenant ? structuredClone(currentTenant) : null;\n}\n\n/**\n * Clear the current tenant context\n */\nexport function clearTenantContext(): void {\n currentTenant = null;\n}\n\n/**\n * Run a function with tenant context\n *\n * @example\n * ```ts\n * const result = await withTenantContext(\n * { tenantId: \"tenant-123\", tier: \"pro\", quotas: {...} },\n * async () => {\n * return generateText({ model, prompt });\n * }\n * );\n * ```\n */\nexport async function withTenantContext<T>(\n context: TenantContext,\n fn: () => Promise<T>,\n): Promise<T> {\n const previous = currentTenant;\n try {\n // Clone to prevent external mutation during execution\n currentTenant = structuredClone(context);\n return await fn();\n } finally {\n currentTenant = previous;\n }\n}\n\n/**\n * Create tenant context from config\n */\nexport function createTenantContext(config: TenantConfig): TenantContext {\n return {\n tenantId: config.tenantId,\n tier: config.tier,\n quotas: config.quotas,\n };\n}\n","/**\n * Tenant quota management\n */\n\nimport { getTenantContext } from '../isolation/context';\nimport { TenantQuotaExceededError } from '../types';\n\nimport type { WrapGenerateArgs } from '../../../sdk/middleware/model-middleware';\nimport type { SDKLanguageModelV3Middleware } from '../../../shared';\nimport type { TenantQuotas } from '../types';\n\n\n/**\n * Quota usage tracker interface\n */\nexport interface QuotaTracker {\n /** Get current usage for a tenant */\n getUsage(tenantId: string): Promise<QuotaUsage>;\n /** Record usage for a tenant */\n recordUsage(tenantId: string, usage: Partial<QuotaUsage>): Promise<void>;\n}\n\n/**\n * Current quota usage\n */\nexport interface QuotaUsage {\n requestsThisMinute: number;\n requestsToday: number;\n tokensToday: number;\n costThisMonth: number;\n currentConcurrent: number;\n}\n\n/**\n * In-memory quota tracker for development\n */\nexport class InMemoryQuotaTracker implements QuotaTracker {\n private usage = new Map<string, QuotaUsage>();\n\n async getUsage(tenantId: string): Promise<QuotaUsage> {\n return (\n this.usage.get(tenantId) ?? {\n requestsThisMinute: 0,\n requestsToday: 0,\n tokensToday: 0,\n costThisMonth: 0,\n currentConcurrent: 0,\n }\n );\n }\n\n async recordUsage(tenantId: string, usage: Partial<QuotaUsage>): Promise<void> {\n const current = await this.getUsage(tenantId);\n this.usage.set(tenantId, {\n requestsThisMinute: current.requestsThisMinute + (usage.requestsThisMinute ?? 0),\n requestsToday: current.requestsToday + (usage.requestsToday ?? 0),\n tokensToday: current.tokensToday + (usage.tokensToday ?? 0),\n costThisMonth: current.costThisMonth + (usage.costThisMonth ?? 0),\n currentConcurrent: usage.currentConcurrent ?? current.currentConcurrent,\n });\n }\n\n /** Reset usage for testing */\n reset(tenantId?: string): void {\n if (tenantId) {\n this.usage.delete(tenantId);\n } else {\n this.usage.clear();\n }\n }\n}\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\n/**\n * Check quota limits\n */\nasync function checkQuotas(\n tenantId: string,\n quotas: TenantQuotas,\n tracker: QuotaTracker,\n): Promise<void> {\n const usage = await tracker.getUsage(tenantId);\n\n if (usage.requestsThisMinute >= quotas.requestsPerMinute) {\n throw new TenantQuotaExceededError(\n tenantId,\n 'requestsPerMinute',\n usage.requestsThisMinute,\n quotas.requestsPerMinute,\n );\n }\n\n if (usage.requestsToday >= quotas.requestsPerDay) {\n throw new TenantQuotaExceededError(\n tenantId,\n 'requestsPerDay',\n usage.requestsToday,\n quotas.requestsPerDay,\n );\n }\n\n if (usage.tokensToday >= quotas.tokensPerDay) {\n throw new TenantQuotaExceededError(\n tenantId,\n 'tokensPerDay',\n usage.tokensToday,\n quotas.tokensPerDay,\n );\n }\n\n if (usage.costThisMonth >= quotas.maxMonthlyCost) {\n throw new TenantQuotaExceededError(\n tenantId,\n 'maxMonthlyCost',\n usage.costThisMonth,\n quotas.maxMonthlyCost,\n );\n }\n\n if (quotas.maxConcurrent && usage.currentConcurrent >= quotas.maxConcurrent) {\n throw new TenantQuotaExceededError(\n tenantId,\n 'maxConcurrent',\n usage.currentConcurrent,\n quotas.maxConcurrent,\n );\n }\n}\n\n/**\n * Create tenant quota enforcement middleware\n *\n * @example\n * ```ts\n * const quotaMiddleware = createQuotaMiddleware(new RedisQuotaTracker(redis));\n *\n * const model = wrapLanguageModel({\n * model: anthropic(\"claude-sonnet-4-20250514\"),\n * middleware: quotaMiddleware,\n * });\n * ```\n */\nexport function createQuotaMiddleware(tracker: QuotaTracker): SDKLanguageModelV3Middleware {\n return {\n specificationVersion: 'v3',\n wrapGenerate: async ({ doGenerate }: WrapGenerateArgs) => {\n const context = getTenantContext();\n\n // Check quotas before request\n await checkQuotas(context.tenantId, context.quotas, tracker);\n\n // Record request start\n await tracker.recordUsage(context.tenantId, {\n requestsThisMinute: 1,\n requestsToday: 1,\n });\n\n const result = await doGenerate();\n\n // Record token usage\n if (result.usage) {\n const inputTokens = getUsageTotal(result.usage.inputTokens);\n const outputTokens = getUsageTotal(result.usage.outputTokens);\n await tracker.recordUsage(context.tenantId, {\n tokensToday: inputTokens + outputTokens,\n });\n }\n\n return result;\n },\n };\n}\n"],"mappings":"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"}