agentic-qe 3.15.14 → 3.15.16

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 (513) hide show
  1. package/.claude/agents/v3/templates/qx-report-template.html +1 -1
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +136 -0
  4. package/assets/agents/v3/templates/qx-report-template.html +1 -1
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/audit/witness-chain.d.ts +7 -0
  7. package/dist/audit/witness-chain.js +10 -0
  8. package/dist/cli/bundle.js +6 -6
  9. package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
  10. package/dist/cli/chunks/agent-booster-wasm-45NWEKVS.js +2 -0
  11. package/dist/cli/chunks/{agent-handler-P3IY7XEE.js → agent-handler-LVHMYFEF.js} +2 -2
  12. package/dist/cli/chunks/{agent-memory-branch-WWKC2H3G.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
  13. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
  14. package/dist/cli/chunks/{arena-EIV5OALF.js → arena-CZKHXDDS.js} +2 -2
  15. package/dist/cli/chunks/{arena-4BMFF6BS.js → arena-ELDZH3CZ.js} +4 -4
  16. package/dist/cli/chunks/{audit-DNTI453H.js → audit-5MT4T47Z.js} +3 -3
  17. package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
  18. package/dist/cli/chunks/{better-sqlite3-TQBQGNC6.js → better-sqlite3-6TGYPC2B.js} +2 -2
  19. package/dist/cli/chunks/{brain-handler-HY57CNAO.js → brain-handler-HQWZFO52.js} +3 -3
  20. package/dist/cli/chunks/{branch-enumerator-THPMZPHQ.js → branch-enumerator-WVILM4SO.js} +2 -2
  21. package/dist/cli/chunks/{browser-O6JJOZCK.js → browser-RX5ALU3H.js} +2 -2
  22. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
  23. package/dist/cli/chunks/{chunk-CIINJHOX.js → chunk-24OX5TQJ.js} +1 -1
  24. package/dist/cli/chunks/{chunk-6P4Q4RTC.js → chunk-24QHCVX6.js} +1 -1
  25. package/dist/cli/chunks/{chunk-U6IOQKCT.js → chunk-2H4XH6FT.js} +2 -2
  26. package/dist/cli/chunks/{chunk-OGEIHS76.js → chunk-2YZ4G6NW.js} +1 -1
  27. package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
  28. package/dist/cli/chunks/{chunk-5PLBQZ5J.js → chunk-32GN3JKR.js} +1 -1
  29. package/dist/cli/chunks/{chunk-AJVLVF7V.js → chunk-3HD7E6HN.js} +2 -2
  30. package/dist/cli/chunks/{chunk-X7CUI7KH.js → chunk-4D4DENG6.js} +2 -2
  31. package/dist/cli/chunks/{chunk-E2JLAW3U.js → chunk-4LQFBY5L.js} +6 -6
  32. package/dist/cli/chunks/{chunk-E3QIQMMN.js → chunk-4NFQLP6R.js} +1 -1
  33. package/dist/cli/chunks/{chunk-7Y3LXH57.js → chunk-525CFDUE.js} +2 -2
  34. package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
  35. package/dist/cli/chunks/{chunk-X6Q2N5S5.js → chunk-5JZRZI4S.js} +2 -2
  36. package/dist/cli/chunks/{chunk-MB4UKUBV.js → chunk-5LAVKGLH.js} +2 -2
  37. package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
  38. package/dist/cli/chunks/{chunk-NKOLILT7.js → chunk-5PBLPQ5T.js} +2 -2
  39. package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
  40. package/dist/cli/chunks/{chunk-7T6L3LFN.js → chunk-5SPCGMBB.js} +2 -2
  41. package/dist/cli/chunks/{chunk-2QLE6NDW.js → chunk-5V3TI2LG.js} +1 -1
  42. package/dist/cli/chunks/{chunk-A2T56XVL.js → chunk-5VZL4UVN.js} +2 -2
  43. package/dist/cli/chunks/{chunk-TWOV3I3A.js → chunk-63GMRQ25.js} +1 -1
  44. package/dist/cli/chunks/{chunk-YGOSSVY5.js → chunk-63ZKI4PX.js} +6 -6
  45. package/dist/cli/chunks/{chunk-FHPNWHY7.js → chunk-67Z5R7RJ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-PCQZIAXB.js → chunk-6DPYNAOK.js} +2 -2
  47. package/dist/cli/chunks/{chunk-WCM6WE7G.js → chunk-6ICX3FEG.js} +3 -3
  48. package/dist/cli/chunks/{chunk-JB7R77SH.js → chunk-6XXZDV2C.js} +2 -2
  49. package/dist/cli/chunks/{chunk-FJOIBZUB.js → chunk-6ZBXSOX6.js} +2 -2
  50. package/dist/cli/chunks/{chunk-WZQADC5R.js → chunk-72XSEQMW.js} +2 -2
  51. package/dist/cli/chunks/{chunk-AYLEH2UF.js → chunk-7TE5ONQQ.js} +1 -1
  52. package/dist/cli/chunks/{chunk-7QUSNBAA.js → chunk-A5GBXCP5.js} +2 -2
  53. package/dist/cli/chunks/{chunk-7724KXM2.js → chunk-AAMLQ2LF.js} +3 -3
  54. package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
  55. package/dist/cli/chunks/{chunk-2UZBLC5H.js → chunk-AGRV5B3T.js} +2 -2
  56. package/dist/cli/chunks/{chunk-V6SE2ZU2.js → chunk-AJMJNQMP.js} +1 -1
  57. package/dist/cli/chunks/{chunk-2HPNGK7A.js → chunk-AR67RJPY.js} +2 -2
  58. package/dist/cli/chunks/{chunk-G7HGUQAE.js → chunk-ASEOFRIG.js} +2 -2
  59. package/dist/cli/chunks/{chunk-7TH4PJSU.js → chunk-BEKDKVQT.js} +2 -2
  60. package/dist/cli/chunks/{chunk-M5JEA6ZY.js → chunk-BY5OF7OH.js} +2 -2
  61. package/dist/cli/chunks/{chunk-OLUOVNUF.js → chunk-C5FP5GW3.js} +2 -2
  62. package/dist/cli/chunks/{chunk-R5RRWLRI.js → chunk-C6D5AHBO.js} +2 -2
  63. package/dist/cli/chunks/{chunk-K7GFYFBO.js → chunk-CAKMOVZ6.js} +2 -2
  64. package/dist/cli/chunks/{chunk-6NIGSY5L.js → chunk-CEYSYSK5.js} +2 -2
  65. package/dist/cli/chunks/{chunk-U4TML2VD.js → chunk-CGGUM2YJ.js} +2 -2
  66. package/dist/cli/chunks/{chunk-YE54T2NQ.js → chunk-CJSHWQXP.js} +2 -2
  67. package/dist/cli/chunks/{chunk-7SQTLUEN.js → chunk-CRPIYUTJ.js} +2 -2
  68. package/dist/cli/chunks/{chunk-65EE2EST.js → chunk-D6COXLYE.js} +2 -2
  69. package/dist/cli/chunks/{chunk-4WLIOPHX.js → chunk-DTMAS2GB.js} +2 -2
  70. package/dist/cli/chunks/{chunk-E7QTWGPI.js → chunk-DVYHMDFR.js} +470 -411
  71. package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
  72. package/dist/cli/chunks/{chunk-HSDWPQQY.js → chunk-E3D4GPLP.js} +3 -3
  73. package/dist/cli/chunks/{chunk-JJHLGGPP.js → chunk-EA4YQVKS.js} +1 -1
  74. package/dist/cli/chunks/{chunk-EIEEST4T.js → chunk-EGYE5UPQ.js} +2 -2
  75. package/dist/cli/chunks/{chunk-O756AOUX.js → chunk-EK7OLYOZ.js} +2 -2
  76. package/dist/cli/chunks/{chunk-57DRT6UA.js → chunk-F742SZAX.js} +2 -2
  77. package/dist/cli/chunks/{chunk-6OI5SK7M.js → chunk-FBDVGRSC.js} +1 -1
  78. package/dist/cli/chunks/{chunk-H3C5FJRH.js → chunk-FDDC72IA.js} +2 -2
  79. package/dist/cli/chunks/{chunk-IQRPR4KB.js → chunk-FL64OUBA.js} +2 -2
  80. package/dist/cli/chunks/{chunk-BNG4J3CE.js → chunk-FLNAW7C4.js} +2 -2
  81. package/dist/cli/chunks/{chunk-C3OIBFAA.js → chunk-G5RHFBAY.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NPCXGX7N.js → chunk-GAHNO6JJ.js} +2 -2
  83. package/dist/cli/chunks/{chunk-PNRPVQGI.js → chunk-GFWHUQSF.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OCN53CCK.js → chunk-GJYHWYXR.js} +2 -2
  85. package/dist/cli/chunks/{chunk-5Z4MO2F3.js → chunk-GQ6TUIKY.js} +1 -1
  86. package/dist/cli/chunks/{chunk-N736GLWZ.js → chunk-GSKMOPL7.js} +2 -2
  87. package/dist/cli/chunks/{chunk-43XHGWYH.js → chunk-HCH4Y6XX.js} +2 -2
  88. package/dist/cli/chunks/{chunk-QP6GL3O5.js → chunk-HGWXF45W.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PGN4TARY.js → chunk-HJ6ZGVTB.js} +2 -2
  90. package/dist/cli/chunks/{chunk-M2TG7VDK.js → chunk-HLUXXCHF.js} +1 -1
  91. package/dist/cli/chunks/{chunk-UMHFTQTR.js → chunk-HVRRLYX6.js} +4 -4
  92. package/dist/cli/chunks/{chunk-L7PC675Y.js → chunk-I7MQIM2U.js} +1 -1
  93. package/dist/cli/chunks/{chunk-JSSU4RIK.js → chunk-IESR7TNB.js} +2 -2
  94. package/dist/cli/chunks/{chunk-H4LYXLAT.js → chunk-IHRXZZQM.js} +1 -1
  95. package/dist/cli/chunks/{chunk-HV43NX4A.js → chunk-IOKYCMTJ.js} +6 -6
  96. package/dist/cli/chunks/{chunk-NZQYJCO6.js → chunk-IOQ6ZQ5W.js} +1 -1
  97. package/dist/cli/chunks/{chunk-JO26SG47.js → chunk-IOYG4VFL.js} +2 -2
  98. package/dist/cli/chunks/{chunk-6O63ZTVX.js → chunk-IUBJVHNB.js} +2 -2
  99. package/dist/cli/chunks/{chunk-XSPMLJCQ.js → chunk-J442IZLE.js} +1 -1
  100. package/dist/cli/chunks/{chunk-LTGQJYYO.js → chunk-J4ELZNLY.js} +2 -2
  101. package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
  102. package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
  103. package/dist/cli/chunks/{chunk-TOJF3ZG4.js → chunk-JHQCRRJI.js} +2 -2
  104. package/dist/cli/chunks/{chunk-QUZ745UQ.js → chunk-JQ3DYUMS.js} +2 -2
  105. package/dist/cli/chunks/{chunk-P2TPH3TC.js → chunk-KITOPKRG.js} +2 -2
  106. package/dist/cli/chunks/{chunk-QNQE3EOH.js → chunk-KKU2QGSJ.js} +2 -2
  107. package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
  108. package/dist/cli/chunks/{chunk-L5VSLPMW.js → chunk-KNSRL6NO.js} +2 -2
  109. package/dist/cli/chunks/{chunk-INGXD5IX.js → chunk-KPRCB5LT.js} +2 -2
  110. package/dist/cli/chunks/{chunk-GY4P7KAI.js → chunk-KQYJ4VQ5.js} +1 -1
  111. package/dist/cli/chunks/{chunk-Z2S7DNFP.js → chunk-KU2AUFGX.js} +2 -2
  112. package/dist/cli/chunks/{chunk-O5CEL447.js → chunk-KVF4NXGQ.js} +2 -2
  113. package/dist/cli/chunks/{chunk-2IJO3657.js → chunk-KXCLACFG.js} +2 -2
  114. package/dist/cli/chunks/{chunk-ZJGFQK27.js → chunk-L2DWPVNJ.js} +1 -1
  115. package/dist/cli/chunks/{chunk-E7OR6V3V.js → chunk-L6QSTQME.js} +2 -2
  116. package/dist/cli/chunks/{chunk-RE6JTSDM.js → chunk-LE4QJREF.js} +1 -1
  117. package/dist/cli/chunks/{chunk-DSQESXL4.js → chunk-LKTTUHLF.js} +2 -2
  118. package/dist/cli/chunks/{chunk-YGC5QKQ4.js → chunk-LQLPB2T6.js} +2 -2
  119. package/dist/cli/chunks/{chunk-VGZOPQQY.js → chunk-LRSX2FJM.js} +1 -1
  120. package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
  121. package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
  122. package/dist/cli/chunks/{chunk-56NSE3LJ.js → chunk-MAFQV4U4.js} +2 -2
  123. package/dist/cli/chunks/{chunk-MKYOE7NE.js → chunk-MD43XRX5.js} +1 -1
  124. package/dist/cli/chunks/{chunk-3TF27MG5.js → chunk-MI5MFHRA.js} +2 -2
  125. package/dist/cli/chunks/{chunk-JK6PMLQQ.js → chunk-MO55CVMT.js} +32 -32
  126. package/dist/cli/chunks/{chunk-X6NJOT3V.js → chunk-N7HL5PHH.js} +1 -1
  127. package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
  128. package/dist/cli/chunks/{chunk-WUGXXNK4.js → chunk-NDJ7P2EP.js} +1 -1
  129. package/dist/cli/chunks/{chunk-D5GB5PUU.js → chunk-NO3IV5Q5.js} +1 -1
  130. package/dist/cli/chunks/{chunk-3XACRXBY.js → chunk-NQXXI77K.js} +2 -2
  131. package/dist/cli/chunks/{chunk-EC65UZ77.js → chunk-NVEWF4JV.js} +1 -1
  132. package/dist/cli/chunks/{chunk-JI67T6Q2.js → chunk-NZU4ACBZ.js} +2 -2
  133. package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
  134. package/dist/cli/chunks/{chunk-YEFTK4HD.js → chunk-OAEE6JWQ.js} +2 -2
  135. package/dist/cli/chunks/{chunk-JAOCHPYX.js → chunk-OCV2XEWQ.js} +2 -2
  136. package/dist/cli/chunks/{chunk-IDBA5GK2.js → chunk-P3EYRILV.js} +2 -2
  137. package/dist/cli/chunks/{chunk-4RPBODN5.js → chunk-PEQDY4BO.js} +2 -2
  138. package/dist/cli/chunks/{chunk-CPPYZYXC.js → chunk-PF7RBAYL.js} +2 -2
  139. package/dist/cli/chunks/{chunk-WCPSR4MJ.js → chunk-PHT5N7SC.js} +2 -2
  140. package/dist/cli/chunks/{chunk-O2AAYJUV.js → chunk-PINSJCM3.js} +1 -1
  141. package/dist/cli/chunks/{chunk-HEDGFKC5.js → chunk-PPUZWYUG.js} +2 -2
  142. package/dist/cli/chunks/{chunk-XMCSKYDE.js → chunk-QPEOLAAS.js} +1 -1
  143. package/dist/cli/chunks/{chunk-7MUO4DEH.js → chunk-QQWBWEJS.js} +18 -18
  144. package/dist/cli/chunks/{chunk-UFP7SN5V.js → chunk-QVDCVD5D.js} +2 -2
  145. package/dist/cli/chunks/{chunk-NHEG2DLN.js → chunk-RJIEG3NA.js} +2 -2
  146. package/dist/cli/chunks/{chunk-KJ5A54ZH.js → chunk-RV74I3YO.js} +2 -2
  147. package/dist/cli/chunks/{chunk-UDSB3XCG.js → chunk-S75SOOZL.js} +2 -2
  148. package/dist/cli/chunks/{chunk-BPDAQB3F.js → chunk-SASBO5Y5.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VJBJRFUO.js → chunk-SDLWKRVL.js} +9 -9
  150. package/dist/cli/chunks/{chunk-J6ASX536.js → chunk-SHKOCGNK.js} +2 -2
  151. package/dist/cli/chunks/{chunk-J35JWDJE.js → chunk-SI6DPU5D.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V3MGY76S.js → chunk-SJ6Y4725.js} +2 -2
  153. package/dist/cli/chunks/{chunk-FTYRPEJS.js → chunk-SR52XP5F.js} +1 -1
  154. package/dist/cli/chunks/{chunk-ZUE524JL.js → chunk-SSUAAX3F.js} +2 -2
  155. package/dist/cli/chunks/{chunk-VG32EEUG.js → chunk-SSYAQZXA.js} +2 -2
  156. package/dist/cli/chunks/{chunk-HTVGHHX2.js → chunk-SUDMM5SO.js} +2 -2
  157. package/dist/cli/chunks/{chunk-K2SMP4OD.js → chunk-TIUKLYAI.js} +1 -1
  158. package/dist/cli/chunks/{chunk-VCVRZD4Y.js → chunk-TVGI32MB.js} +33 -33
  159. package/dist/cli/chunks/{chunk-CAZM63TP.js → chunk-U2A7NHZA.js} +2 -2
  160. package/dist/cli/chunks/{chunk-WBC6WB32.js → chunk-UE5ZOZR2.js} +2 -2
  161. package/dist/cli/chunks/{chunk-BQJ7CV53.js → chunk-UHEOGZLX.js} +12 -12
  162. package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
  163. package/dist/cli/chunks/{chunk-XN3KCKAM.js → chunk-V5NHZV7S.js} +2 -2
  164. package/dist/cli/chunks/{chunk-UNYTHZDZ.js → chunk-VJCIEHEF.js} +1 -1
  165. package/dist/cli/chunks/{chunk-5Y7UFHJD.js → chunk-VMDFFTCK.js} +1 -1
  166. package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
  167. package/dist/cli/chunks/{chunk-UPWLMIDY.js → chunk-VWPM27GU.js} +2 -2
  168. package/dist/cli/chunks/{chunk-USAKCGHC.js → chunk-VXFLJNCA.js} +2 -2
  169. package/dist/cli/chunks/{chunk-WKI46WWN.js → chunk-W5HQUIML.js} +2 -2
  170. package/dist/cli/chunks/{chunk-Z54G2YOL.js → chunk-WP4RETKG.js} +2 -2
  171. package/dist/cli/chunks/{chunk-IRPNEXOU.js → chunk-XIIQ5QTT.js} +2 -2
  172. package/dist/cli/chunks/{chunk-O32BFQV4.js → chunk-XIQW7EFL.js} +2 -2
  173. package/dist/cli/chunks/{chunk-TW6Z6W4X.js → chunk-XWUWX7BV.js} +13 -13
  174. package/dist/cli/chunks/{chunk-57FX3GP6.js → chunk-Y4PFUMOU.js} +1 -1
  175. package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
  176. package/dist/cli/chunks/{chunk-4T7XV5KQ.js → chunk-YLMNVLDK.js} +1 -1
  177. package/dist/cli/chunks/{chunk-TSP6SU5V.js → chunk-YNMJEDN5.js} +2 -2
  178. package/dist/cli/chunks/{chunk-PWQWKYBG.js → chunk-YPBSUGMI.js} +1 -1
  179. package/dist/cli/chunks/{chunk-QP2HLKTS.js → chunk-YRAX7SFJ.js} +2 -2
  180. package/dist/cli/chunks/{chunk-O3ERGUXH.js → chunk-YTHTQPWR.js} +1 -1
  181. package/dist/cli/chunks/{chunk-MR2OPUSA.js → chunk-YU2BDRSD.js} +1 -1
  182. package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
  183. package/dist/cli/chunks/{chunk-2W5MQDHM.js → chunk-ZFL436FN.js} +2 -2
  184. package/dist/cli/chunks/{chunk-7MISCSL5.js → chunk-ZJH5MU2I.js} +2 -2
  185. package/dist/cli/chunks/{chunk-52KOPIMI.js → chunk-ZQ2XW3IP.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
  187. package/dist/cli/chunks/{ci-UMA2SMNW.js → ci-MFUR4CWV.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-UQSILJFQ.js → ci-config-PNDLQ6XV.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-U6YZLLKH.js → ci-output-PFZ4M7NC.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-ATYQP6X2.js → circuit-breaker-5HH6NLZN.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-6YHFD7AN.js → claude-flow-setup-QCKYLGLC.js} +2 -2
  192. package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-EPE7IOZE.js → cline-installer-EASVPFXR.js} +2 -2
  194. package/dist/cli/chunks/{code-NUEJ4XYO.js → code-UJXDVYRK.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-D4DBT6OL.js → code-index-extractor-BZJ3UDP4.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-633SM4LR.js → codex-installer-XSQZUVOZ.js} +4 -4
  197. package/dist/cli/chunks/{completions-WUKVIW3L.js → completions-OWOOJFI2.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-F73ACR5H.js → complexity-analyzer-KP5TOHDT.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-QH42TKMS.js → continuedev-installer-IFKQXLHM.js} +2 -2
  200. package/dist/cli/chunks/{copilot-installer-Y3XC7BTT.js → copilot-installer-IGJ6KGQY.js} +2 -2
  201. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-57QPV7E3.js → cost-tracker-MMDDNKZB.js} +2 -2
  203. package/dist/cli/chunks/{coverage-IBCHMBCR.js → coverage-LUH2B7NT.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-F4UYQHIN.js → cursor-installer-4YLM5GWM.js} +2 -2
  206. package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
  207. package/dist/cli/chunks/{daemon-XR4Q6YZF.js → daemon-MZKVM4CJ.js} +3 -3
  208. package/dist/cli/chunks/{dag-attention-scheduler-ZR5ZD3TW.js → dag-attention-scheduler-X4CYW665.js} +2 -2
  209. package/dist/cli/chunks/{detect-GEGYURLL.js → detect-7BM2XINO.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-JU3KT2JO.js → dist-node-Y5APLEYB.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-7QI3FJGE.js → domain-handler-X3ZRJNAH.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-O2YRM2PD.js → domain-plugins-2UW5KQJB.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-7J3S2OS6.js → domain-transfer-35W4CIBV.js} +2 -2
  214. package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
  216. package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
  217. package/dist/cli/chunks/{eval-RVMCIUOR.js → eval-4QA2SROK.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-QUKPKWKZ.js → fast-paths-FIORX6GN.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-K7JXNKJI.js → feature-flags-6LYI2T4G.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-5JCSKL2P.js → feature-flags-ZOO7LMIC.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
  223. package/dist/cli/chunks/{fleet-II4Q6HXK.js → fleet-7WF53H4F.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-M7VO2EMS.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-ND5CY26N.js → heartbeat-handler-DEKKMOVW.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-N3AUUUU7.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-NZY3E5EN.js → hnswlib-node-4YOQC6L4.js} +2 -2
  231. package/dist/cli/chunks/{hooks-QVJDTII5.js → hooks-TAOKV4EJ.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-ZRY6MTDV.js → hypergraph-engine-BODRJLHL.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-56DO4XZQ.js → hypergraph-handler-RKMYJNTU.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DTF4EVUY.js → init-guard-MXHSLSB2.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-M6CNQHMX.js → init-handler-HUE57IFW.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
  239. package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-IJN7XKBH.js → kilocode-installer-S333IKYQ.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-UKKPGPDC.js → kiro-installer-WM5DLQWC.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
  243. package/dist/cli/chunks/{learning-W2HETWQ4.js → learning-LNHMQLH5.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-Y546K4VX.js → llm-router-EWFXYZZR.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
  246. package/dist/cli/chunks/{load-MKAB2AXE.js → load-FGYGWVDK.js} +2 -2
  247. package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
  248. package/dist/cli/chunks/{mcp-AZKUS6K3.js → mcp-2FHNAAOM.js} +2 -2
  249. package/dist/cli/chunks/{memory-ZDOQN2KU.js → memory-DZMQ73AB.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-WWVXDHG4.js → multi-model-executor-6F2UAEUW.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-YUJNXXWS.js → opencode-installer-XY3BGOTZ.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-Z6PWPLRE.js → orchestrator-B4CNKUOS.js} +17 -17
  255. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-TPWPX32U.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-4BBGTE4M.js → pipeline-FG5RKVRO.js} +2 -2
  258. package/dist/cli/chunks/{platform-5GSHXCV5.js → platform-3BT4KEVJ.js} +2 -2
  259. package/dist/cli/chunks/{plugin-OFDVF5HS.js → plugin-WI4RIN7O.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NC6MUYGJ.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
  261. package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-MPOAAEPA.js → protocol-handler-WNODKPGW.js} +2 -2
  264. package/dist/cli/chunks/{prove-CDKMAIVM.js → prove-5RHAEPYZ.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
  266. package/dist/cli/chunks/{quality-ZH4F7R7R.js → quality-WPHR7BGQ.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-IDRMW6OE.js → quality-gate-4RKTEZMX.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-Z5GCGVXK.js → ref-validation-TPAWHOHH.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-IZ2S7PH2.js → roocode-installer-7AVHFNDI.js} +2 -2
  272. package/dist/cli/chunks/router-EP34O3KB.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-NAX35VUW.js → routing-handler-YKEDVJSH.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-5YW2SOFF.js → ruvector-commands-JUAMM354.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-IPGCAT6C.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
  281. package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
  282. package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
  283. package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
  284. package/dist/cli/chunks/{security-3IH4BO5Z.js → security-ORDN3RD2.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-ABY7PAY2.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-6KENLN2W.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-RLFAUGOW.js → standalone-memory-OXRJYZXN.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-FCOZBPE5.js → status-handler-BCX5D4HY.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-4RDA5UUM.js → structural-health-LFG7RUU6.js} +2 -2
  291. package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
  292. package/dist/cli/chunks/{sync-KGEEXXCC.js → sync-YJEE2K2L.js} +2 -2
  293. package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-6H7L2UT4.js → task-handlers-CILP36I7.js} +4 -4
  295. package/dist/cli/chunks/{test-S7IG6EIX.js → test-SD457QJ6.js} +4 -4
  296. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-7XYXI4L2.js → test-scheduling-ISI2O4Q5.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
  299. package/dist/cli/chunks/{token-usage-Y2YTPOFE.js → token-usage-XOC5KG7S.js} +2 -2
  300. package/dist/cli/chunks/{transformers-UCJ3HHHC.js → transformers-LSLQAARK.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
  302. package/dist/cli/chunks/{types-6CMFPETH.js → types-5BLCGLCR.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
  306. package/dist/cli/chunks/{upgrade-K25DN6WU.js → upgrade-RQJYLK3J.js} +2 -2
  307. package/dist/cli/chunks/{validate-T4V3TBY3.js → validate-QBHWXXCK.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-XSRC576T.js → validate-swarm-IKXBKFB5.js} +2 -2
  309. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-YOZXHRTN.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-ITPU2IYL.js → windsurf-installer-HQGDZT5D.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
  313. package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-DTDSVKOG.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-EWACWGAW.js → witness-key-manager-RXYQNFJB.js} +2 -2
  317. package/dist/cli/chunks/{workflow-ZIQ4FV42.js → workflow-FBKCA4H6.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
  319. package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/handlers/task-handler.d.ts +5 -0
  323. package/dist/cli/handlers/task-handler.js +21 -1
  324. package/dist/cli/utils/task-result.d.ts +11 -0
  325. package/dist/cli/utils/task-result.js +39 -0
  326. package/dist/coordination/handlers/test-execution-handlers.js +92 -58
  327. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  328. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  329. package/dist/domains/code-intelligence/coordinator.js +46 -13
  330. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  331. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
  333. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  334. package/dist/domains/quality-assessment/coordinator.js +2 -1
  335. package/dist/domains/test-execution/coordinator.js +10 -5
  336. package/dist/domains/test-execution/interfaces.d.ts +12 -0
  337. package/dist/domains/test-execution/plugin.js +6 -2
  338. package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
  339. package/dist/domains/test-execution/services/retry-handler.js +14 -9
  340. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  341. package/dist/domains/test-execution/services/test-executor.js +28 -9
  342. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  343. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  344. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  345. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  346. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  347. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  348. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  349. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  350. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  351. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  352. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  353. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  354. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  355. package/dist/feedback/coverage-learner.js +13 -9
  356. package/dist/feedback/test-outcome-tracker.js +13 -9
  357. package/dist/governance/witness-chain.d.ts +5 -0
  358. package/dist/governance/witness-chain.js +22 -6
  359. package/dist/init/init-wizard-hooks.d.ts +1 -1
  360. package/dist/init/init-wizard-hooks.js +7 -8
  361. package/dist/init/phases/08-mcp.js +9 -0
  362. package/dist/init/settings-merge.d.ts +13 -0
  363. package/dist/init/settings-merge.js +49 -2
  364. package/dist/integrations/agent-booster-wasm/agent_booster_wasm.js +849 -0
  365. package/dist/integrations/agent-booster-wasm/agent_booster_wasm_bg.wasm +0 -0
  366. package/dist/integrations/agent-booster-wasm/index.d.ts +8 -0
  367. package/dist/integrations/agent-booster-wasm/index.js +25 -2
  368. package/dist/integrations/agent-booster-wasm/package.json +16 -0
  369. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  370. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  371. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  373. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  374. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  375. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  376. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  377. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  378. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  379. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  380. package/dist/kernel/unified-memory.d.ts +24 -0
  381. package/dist/kernel/unified-memory.js +63 -8
  382. package/dist/learning/aqe-learning-engine.js +1 -1
  383. package/dist/learning/dream/dream-engine.d.ts +3 -2
  384. package/dist/learning/dream/dream-engine.js +42 -24
  385. package/dist/learning/dream/dream-lock-retry.d.ts +38 -0
  386. package/dist/learning/dream/dream-lock-retry.js +66 -0
  387. package/dist/learning/dream/speculative-dreamer.js +1 -1
  388. package/dist/learning/embed-and-insert-pattern.js +4 -2
  389. package/dist/learning/embedder-endpoint-client.d.ts +31 -0
  390. package/dist/learning/embedder-endpoint-client.js +103 -10
  391. package/dist/learning/embedding-space.d.ts +12 -0
  392. package/dist/learning/embedding-space.js +17 -0
  393. package/dist/learning/experience-capture-middleware.js +25 -13
  394. package/dist/learning/experience-capture.js +1 -1
  395. package/dist/learning/experience-consolidation.d.ts +18 -0
  396. package/dist/learning/experience-consolidation.js +55 -8
  397. package/dist/learning/experience-space-verification.d.ts +71 -0
  398. package/dist/learning/experience-space-verification.js +147 -0
  399. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  400. package/dist/learning/pattern-lifecycle.js +153 -76
  401. package/dist/learning/pattern-null-store.d.ts +5 -0
  402. package/dist/learning/pattern-null-store.js +8 -0
  403. package/dist/learning/pattern-promotion.js +6 -3
  404. package/dist/learning/pattern-store.d.ts +6 -0
  405. package/dist/learning/pattern-store.js +19 -6
  406. package/dist/learning/qe-reasoning-bank.js +2 -2
  407. package/dist/learning/real-embeddings.js +3 -1
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +642 -571
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  430. package/dist/shared/llm/spend-ledger.js +64 -39
  431. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  432. package/dist/shared/sqlite-lock-wait.js +37 -0
  433. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  434. package/dist/shared/sqlite-write-queue.js +38 -0
  435. package/dist/shared/test-runner-project.d.ts +69 -0
  436. package/dist/shared/test-runner-project.js +186 -0
  437. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  438. package/dist/skills/security-visual-testing/index.js +49 -35
  439. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  440. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  441. package/dist/workers/workers/learning-consolidation.js +8 -7
  442. package/package.json +4 -2
  443. package/dist/cli/chunks/adapter-23KA2YW7.js +0 -2
  444. package/dist/cli/chunks/agent-booster-wasm-2DLAEZK6.js +0 -2
  445. package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +0 -2
  446. package/dist/cli/chunks/base-XPWGYDKD.js +0 -2
  447. package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +0 -2
  448. package/dist/cli/chunks/chunk-3FITMWWJ.js +0 -21
  449. package/dist/cli/chunks/chunk-ARRBXCII.js +0 -4
  450. package/dist/cli/chunks/chunk-BBYJBZHG.js +0 -14
  451. package/dist/cli/chunks/chunk-BM3EJLMV.js +0 -153
  452. package/dist/cli/chunks/chunk-D3ZZ2NLL.js +0 -62
  453. package/dist/cli/chunks/chunk-DLTB5KCR.js +0 -2
  454. package/dist/cli/chunks/chunk-DRLSJJIC.js +0 -6
  455. package/dist/cli/chunks/chunk-HAYKLXCT.js +0 -744
  456. package/dist/cli/chunks/chunk-HHBF2BZC.js +0 -65
  457. package/dist/cli/chunks/chunk-K7RT6ITZ.js +0 -2
  458. package/dist/cli/chunks/chunk-L752CNG3.js +0 -13
  459. package/dist/cli/chunks/chunk-MQXWG55U.js +0 -12
  460. package/dist/cli/chunks/chunk-WM2QRIRD.js +0 -14
  461. package/dist/cli/chunks/chunk-WRC3HLUY.js +0 -29
  462. package/dist/cli/chunks/chunk-XTZGAG6P.js +0 -27
  463. package/dist/cli/chunks/chunk-YKQWIXUY.js +0 -2
  464. package/dist/cli/chunks/client-E43GWLQH.js +0 -2
  465. package/dist/cli/chunks/core-handlers-R5A3SQDY.js +0 -2
  466. package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +0 -2
  467. package/dist/cli/chunks/daemon-BYYPIJ7G.js +0 -18
  468. package/dist/cli/chunks/dream-6C4NURSE.js +0 -2
  469. package/dist/cli/chunks/embed-and-insert-pattern-URES5Q6J.js +0 -3
  470. package/dist/cli/chunks/experience-capture-middleware-SYJQSBKE.js +0 -40
  471. package/dist/cli/chunks/file-discovery-J5IE5KP7.js +0 -2
  472. package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +0 -2
  473. package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +0 -2
  474. package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +0 -2
  475. package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +0 -2
  476. package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +0 -2
  477. package/dist/cli/chunks/init-wizard-RTLCRWDT.js +0 -2
  478. package/dist/cli/chunks/kernel-2OWIGGGT.js +0 -2
  479. package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +0 -2
  480. package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +0 -2
  481. package/dist/cli/chunks/load-test-D6QYNIVT.js +0 -2
  482. package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +0 -2
  483. package/dist/cli/chunks/memory-handlers-3SQVY7FE.js +0 -2
  484. package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +0 -2
  485. package/dist/cli/chunks/project-root-DDGBWDP6.js +0 -2
  486. package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +0 -2
  487. package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +0 -2
  488. package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +0 -2
  489. package/dist/cli/chunks/real-embeddings-I2UVNNB3.js +0 -2
  490. package/dist/cli/chunks/router-FT5WJPUH.js +0 -2
  491. package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +0 -2
  492. package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +0 -2
  493. package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +0 -2
  494. package/dist/cli/chunks/rvf-migration-coordinator-VUIZHTVG.js +0 -2
  495. package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +0 -2
  496. package/dist/cli/chunks/safe-db-TDZKUOZJ.js +0 -2
  497. package/dist/cli/chunks/schedule-CRKTRY2A.js +0 -2
  498. package/dist/cli/chunks/scheduler-6ZBDVQWN.js +0 -2
  499. package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +0 -2
  500. package/dist/cli/chunks/sync-54LUAUTK.js +0 -2
  501. package/dist/cli/chunks/task-handler-K3OXHYKU.js +0 -62
  502. package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +0 -2
  503. package/dist/cli/chunks/token-bootstrap-3QMABE45.js +0 -2
  504. package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +0 -2
  505. package/dist/cli/chunks/unified-memory-QARWQKJ2.js +0 -2
  506. package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +0 -2
  507. package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +0 -2
  508. package/dist/cli/chunks/visual-security-O4ALMCXQ.js +0 -2
  509. package/dist/cli/chunks/witness-chain-B3YW5NMS.js +0 -2
  510. package/dist/cli/chunks/witness-chain-PIYR72HJ.js +0 -2
  511. package/dist/cli/chunks/witness-chain-repair-YUG7E3UX.js +0 -2
  512. package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +0 -2
  513. package/dist/cli/chunks/wrappers-PW2O27LL.js +0 -2
@@ -1,5 +1,5 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.14");process.exit(0)}
2
- import{b as E}from"./chunk-O32BFQV4.js";import{a as Me,c as Le}from"./chunk-TOJF3ZG4.js";import{b as a,g as we}from"./chunk-4WLIOPHX.js";import{a as me,b as ze}from"./chunk-7T6L3LFN.js";import{b as _e,c as _,d as Ae,f as U}from"./chunk-VG32EEUG.js";import{e as H,h as Re,i as de,n as j}from"./chunk-52KOPIMI.js";import{b as z,d as Ee}from"./chunk-XN3KCKAM.js";import{a as pe,e as We}from"./chunk-UDSB3XCG.js";import{b as Ce,d as $e}from"./chunk-AJVLVF7V.js";import{a as ke,d as Ge}from"./chunk-IRPNEXOU.js";import{b as R,e as I}from"./chunk-L5VSLPMW.js";import{b as W}from"./chunk-V6SE2ZU2.js";async function A(g,t,e,r,o="absolute",s){let n=new AbortController,i=!1,l,d=()=>{i=!0;let u=r();l?.(u),n.abort(u)},h=setTimeout(d,e),c=s!==void 0&&s>0?setTimeout(d,s):void 0;c?.unref?.();let p=()=>{clearTimeout(h),c&&clearTimeout(c)},m=()=>{o==="idle"&&(clearTimeout(h),h=setTimeout(d,e),h.unref?.())};h.unref?.();try{let u=await fetch(g,{...t,signal:n.signal});if(!u.body)return p(),u;m();let f=u.body.getReader(),b=!1,y,k=()=>{b=!0,p()},v=o==="idle"?1048576:0,P=T=>{y&&T.desiredSize===v&&T.error(y)},w=new ReadableStream({start(T){l=M=>{b||(k(),y=M,P(T),f.cancel(M).catch(()=>{}).finally(()=>f.releaseLock()))}},async pull(T){if(y)return P(T);try{let M=await f.read();if(b)return;M.done?(k(),f.releaseLock(),T.close()):(m(),T.enqueue(M.value))}catch(M){if(b)return;k(),f.releaseLock(),T.error(M)}},async cancel(T){if(!b){k();try{await f.cancel(T)}finally{f.releaseLock()}}}},new ByteLengthQueuingStrategy({highWaterMark:v})),S=new Response(w,{status:u.status,statusText:u.statusText,headers:u.headers});for(let T of["url","redirected","type"])Object.defineProperty(S,T,{value:u[T]});return S}catch(u){throw p(),i||u instanceof Error&&u.name==="AbortError"?r():u}}var x=W(()=>{"use strict"});import{readFileSync as Je}from"fs";import*as Se from"path";function X(g){return typeof g=="string"&&Xe.includes(g)}function Ze(g){try{let e=Je(g,"utf8").match(/^\s*effort_level\s*:\s*['"]?([a-z]+)['"]?\s*$/m);return e&&X(e[1])?e[1]:null}catch{return null}}function xe(g={}){if(g.override&&X(g.override))return g.override;if(g.agentEffort&&X(g.agentEffort))return g.agentEffort;let e=(g.env??process.env).QE_EFFORT_LEVEL;if(e&&X(e))return e;let r=g.fleetDefaultsPath??Se.join(process.cwd(),"config","fleet-defaults.yaml");return J===void 0&&(J=Ze(r)),J||Qe}var Xe,Qe,J,Ne=W(()=>{"use strict";Xe=["low","medium","high","xhigh","max"],Qe="xhigh"});function et(g){try{let t=H(g);return{sendSampling:t.supportsSamplingParams!==!1,supportsEffort:t.supportsEffortXHigh===!0}}catch{return{sendSampling:!1,supportsEffort:!1}}}function Q(g,t,e){let r=et(t);if(r.sendSampling&&e.temperature!==void 0&&(g.temperature=e.temperature),r.supportsEffort){let o=e.effort??(tt(t)?xe():void 0);o!==void 0&&(g.output_config={effort:o})}return g}function tt(g){return Re(g)?.tier==="flagship"}var be=W(()=>{"use strict";j();Ne()});function yt(g){try{let t=H(g);return{sendSampling:t.supportsSamplingParams!==!1,maxTokensField:t.usesMaxCompletionTokens===!0?"max_completion_tokens":"max_tokens"}}catch{return ht.test(g)?{...ft}:{...gt}}}function K(g,t,e){let r=yt(t),o=g;return e.maxTokens!==void 0&&(o[r.maxTokensField]=e.maxTokens),r.sendSampling&&e.temperature!==void 0&&(o.temperature=e.temperature),g}var ht,gt,ft,ve=W(()=>{"use strict";j();ht=/^(openai\/)?(gpt-5|gpt-6|o\d)/i,gt={sendSampling:!0,maxTokensField:"max_tokens"},ft={sendSampling:!1,maxTokensField:"max_completion_tokens"}});$e();I();var Pe={failureThreshold:5,resetTimeoutMs:3e4,halfOpenSuccessThreshold:2,failureWindowMs:6e4,includeTimeouts:!0},he=class{state="closed";failures=[];successCount=0;totalRequests=0;totalSuccesses=0;totalFailures=0;rejectedCount=0;lastFailureTime;lastSuccessTime;openedAt;halfOpenSuccesses=0;config;providerType;constructor(t,e={}){this.providerType=t,this.config={...Pe,...e}}getState(){return this.state==="open"&&this.openedAt&&Date.now()-this.openedAt.getTime()>=this.config.resetTimeoutMs&&this.transitionTo("half-open"),this.state}canExecute(){let t=this.getState();return t==="closed"?!0:t!=="open"}async execute(t){if(this.totalRequests++,this.getState()==="open")throw this.rejectedCount++,a(`Circuit breaker is open for provider ${this.providerType}`,"CIRCUIT_OPEN",{provider:this.providerType,retryable:!0,retryAfterMs:this.getTimeUntilTransition()});try{let r=await t();return this.recordSuccess(),r}catch(r){throw this.recordFailure(R(r)),r}}recordSuccess(){this.successCount++,this.totalSuccesses++,this.lastSuccessTime=new Date,this.getState()==="half-open"&&(this.halfOpenSuccesses++,this.halfOpenSuccesses>=this.config.halfOpenSuccessThreshold&&this.transitionTo("closed"))}recordFailure(t){if(this.totalFailures++,this.lastFailureTime=new Date,(t.message.toLowerCase().includes("timeout")||t.name==="TimeoutError"||t.name==="AbortError")&&!this.config.includeTimeouts)return;this.failures.push({timestamp:new Date,error:t}),this.cleanOldFailures();let r=this.getState();if(r==="half-open"){this.transitionTo("open");return}r==="closed"&&this.failures.length>=this.config.failureThreshold&&this.transitionTo("open")}getStats(){return{state:this.getState(),totalRequests:this.totalRequests,successCount:this.totalSuccesses,failureCount:this.totalFailures,rejectedCount:this.rejectedCount,lastFailureTime:this.lastFailureTime,lastSuccessTime:this.lastSuccessTime,timeUntilTransitionMs:this.getTimeUntilTransition()}}reset(){this.state="closed",this.failures=[],this.successCount=0,this.halfOpenSuccesses=0,this.openedAt=void 0}forceOpen(){this.transitionTo("open")}forceHalfOpen(){this.transitionTo("half-open")}getRecentFailures(t=5){return this.failures.slice(-t).map(e=>`[${e.timestamp.toISOString()}] ${e.error.message}`)}transitionTo(t){if(this.state!==t)switch(this.state=t,t){case"open":this.openedAt=new Date,this.halfOpenSuccesses=0;break;case"half-open":this.halfOpenSuccesses=0;break;case"closed":this.failures=[],this.openedAt=void 0,this.halfOpenSuccesses=0;break}}cleanOldFailures(){let t=Date.now()-this.config.failureWindowMs;this.failures=this.failures.filter(e=>e.timestamp.getTime()>t)}getTimeUntilTransition(){if(this.state==="open"&&this.openedAt){let t=Date.now()-this.openedAt.getTime(),e=this.config.resetTimeoutMs-t;return Math.max(0,e)}}},V=class{breakers=new Map;defaultConfig;constructor(t={}){this.defaultConfig={...Pe,...t}}getBreaker(t,e){let r=this.breakers.get(t);return r||(r=new he(t,{...this.defaultConfig,...e}),this.breakers.set(t,r)),r}getAllStats(){let t={};for(let[e,r]of this.breakers)t[e]=r.getStats();return t}getAvailableProviders(){let t=[];for(let[e,r]of this.breakers)r.canExecute()&&t.push(e);return t}resetAll(){for(let t of this.breakers.values())t.reset()}reset(t){let e=this.breakers.get(t);e&&e.reset()}};import{createHash as He}from"node:crypto";var Oe={maxSize:1e3,defaultTtlMs:36e5,enableLRU:!0,cacheGenerations:!0,cacheEmbeddings:!0,cacheCompletions:!0},L=class{cache=new Map;accessOrder=[];config;hits=0;misses=0;evictions=0;constructor(t={}){this.config={...Oe,...t}}static generateKey(t,e,r){let o=[t,r?.model??"default",String(r?.temperature??.7),String(r?.maxTokens??0),r?.systemPrompt??"",e],s=[r?.stopSequences,r?.effort,r?.preferredProvider];s.some(i=>i!==void 0)&&o.push(JSON.stringify(s));let n=He("sha256").update(JSON.stringify(o)).digest("hex");return`${t}:${n}`}get(t){let e=this.cache.get(t);if(!e){this.misses++;return}if(e.ttlMs>0&&Date.now()-e.createdAt.getTime()>e.ttlMs){this.delete(t),this.misses++;return}return this.hits++,e.lastAccessedAt=new Date,e.accessCount++,this.config.enableLRU&&this.updateAccessOrder(t),e.value}set(t,e,r){this.cache.size>=this.config.maxSize&&!this.cache.has(t)&&this.evictLRU();let o={value:e,createdAt:new Date,lastAccessedAt:new Date,accessCount:1,ttlMs:r??this.config.defaultTtlMs,keyHash:t};this.cache.set(t,o),this.config.enableLRU&&this.updateAccessOrder(t)}has(t){let e=this.cache.get(t);return e?e.ttlMs>0&&Date.now()-e.createdAt.getTime()>e.ttlMs?(this.delete(t),!1):!0:!1}delete(t){let e=this.cache.delete(t);if(e){let r=this.accessOrder.indexOf(t);r!==-1&&this.accessOrder.splice(r,1)}return e}clear(){this.cache.clear(),this.accessOrder=[],this.hits=0,this.misses=0,this.evictions=0}getStats(){let t=this.hits+this.misses,e=t>0?this.hits/t:0,r=0;for(let o of this.cache.values())r+=this.estimateSize(o.value);return{size:this.cache.size,maxSize:this.config.maxSize,hits:this.hits,misses:this.misses,hitRate:e,evictions:this.evictions,memoryUsageBytes:r}}keys(){return Array.from(this.cache.keys())}entries(){return Array.from(this.cache.entries())}import(t){for(let[e,r]of t)r.createdAt=new Date(r.createdAt),r.lastAccessedAt=new Date(r.lastAccessedAt),this.cache.set(e,r),this.config.enableLRU&&this.updateAccessOrder(e);for(;this.cache.size>this.config.maxSize;)this.evictLRU()}pruneExpired(){let t=Date.now(),e=0;for(let[r,o]of this.cache.entries())o.ttlMs>0&&t-o.createdAt.getTime()>o.ttlMs&&(this.delete(r),e++);return e}updateAccessOrder(t){let e=this.accessOrder.indexOf(t);e!==-1&&this.accessOrder.splice(e,1),this.accessOrder.push(t)}evictLRU(){if(this.accessOrder.length===0){let e=this.cache.keys().next().value;e!==void 0&&(this.cache.delete(e),this.evictions++);return}let t=this.accessOrder.shift();t!==void 0&&(this.cache.delete(t),this.evictions++)}estimateSize(t){return t==null?0:JSON.stringify(t).length*2}},Y=class{generationCache;embeddingCache;completionCache;config;constructor(t={}){this.config={...Oe,...t},this.generationCache=new L(t),this.embeddingCache=new L(t),this.completionCache=new L(t)}getGeneration(t,e){if(!this.config.cacheGenerations)return;let r=L.generateKey("generation",t,e);return this.generationCache.get(r)}setGeneration(t,e,r,o){if(!this.config.cacheGenerations||e.finishReason==="content_filter")return;let s=L.generateKey("generation",t,r);this.generationCache.set(s,e,o)}getEmbedding(t,e){if(!this.config.cacheEmbeddings)return;let r=L.generateKey("embedding",t,e);return this.embeddingCache.get(r)}setEmbedding(t,e,r,o){if(!this.config.cacheEmbeddings)return;let s=L.generateKey("embedding",t,r);this.embeddingCache.set(s,e,o)}getCompletion(t,e){if(!this.config.cacheCompletions)return;let r=L.generateKey("completion",t,e);return this.completionCache.get(r)}setCompletion(t,e,r,o){if(!this.config.cacheCompletions||e.completion.length===0)return;let s=L.generateKey("completion",t,r);this.completionCache.set(s,e,o)}getStats(){let t=this.generationCache.getStats(),e=this.embeddingCache.getStats(),r=this.completionCache.getStats(),o=t.hits+e.hits+r.hits,s=t.misses+e.misses+r.misses,n=o+s;return{generation:t,embedding:e,completion:r,total:{size:t.size+e.size+r.size,maxSize:this.config.maxSize*3,hits:o,misses:s,hitRate:n>0?o/n:0,evictions:t.evictions+e.evictions+r.evictions,memoryUsageBytes:t.memoryUsageBytes+e.memoryUsageBytes+r.memoryUsageBytes}}}clear(){this.generationCache.clear(),this.embeddingCache.clear(),this.completionCache.clear()}pruneExpired(){return this.generationCache.pruneExpired()+this.embeddingCache.pruneExpired()+this.completionCache.pruneExpired()}};U();We();var ge="(unattributed)",je=`
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.16");process.exit(0)}
2
+ import{b as E}from"./chunk-XIQW7EFL.js";import{a as Le,c as Pe}from"./chunk-JHQCRRJI.js";import{b as a,g as Me}from"./chunk-DTMAS2GB.js";import{a as he,b as je}from"./chunk-5SPCGMBB.js";import{b as Ae,c as _,d as we,f as U}from"./chunk-SSYAQZXA.js";import{e as H,h as _e,i as me,n as j}from"./chunk-ZQ2XW3IP.js";import{c as Ce,d as We}from"./chunk-JDIYMZCQ.js";import{b as z,d as Ee}from"./chunk-V5NHZV7S.js";import{a as de,e as He}from"./chunk-S75SOOZL.js";import{b as Re,d as ze}from"./chunk-3HD7E6HN.js";import{a as ke,d as $e}from"./chunk-XIIQ5QTT.js";import{b as R,e as I}from"./chunk-KNSRL6NO.js";import{b as W}from"./chunk-AJMJNQMP.js";async function A(g,t,e,r,o="absolute",s){let n=new AbortController,i=!1,l,d=()=>{i=!0;let u=r();l?.(u),n.abort(u)},h=setTimeout(d,e),c=s!==void 0&&s>0?setTimeout(d,s):void 0;c?.unref?.();let p=()=>{clearTimeout(h),c&&clearTimeout(c)},m=()=>{o==="idle"&&(clearTimeout(h),h=setTimeout(d,e),h.unref?.())};h.unref?.();try{let u=await fetch(g,{...t,signal:n.signal});if(!u.body)return p(),u;m();let f=u.body.getReader(),b=!1,y,k=()=>{b=!0,p()},v=o==="idle"?1048576:0,P=T=>{y&&T.desiredSize===v&&T.error(y)},w=new ReadableStream({start(T){l=M=>{b||(k(),y=M,P(T),f.cancel(M).catch(()=>{}).finally(()=>f.releaseLock()))}},async pull(T){if(y)return P(T);try{let M=await f.read();if(b)return;M.done?(k(),f.releaseLock(),T.close()):(m(),T.enqueue(M.value))}catch(M){if(b)return;k(),f.releaseLock(),T.error(M)}},async cancel(T){if(!b){k();try{await f.cancel(T)}finally{f.releaseLock()}}}},new ByteLengthQueuingStrategy({highWaterMark:v})),S=new Response(w,{status:u.status,statusText:u.statusText,headers:u.headers});for(let T of["url","redirected","type"])Object.defineProperty(S,T,{value:u[T]});return S}catch(u){throw p(),i||u instanceof Error&&u.name==="AbortError"?r():u}}var x=W(()=>{"use strict"});import{readFileSync as Qe}from"fs";import*as xe from"path";function Q(g){return typeof g=="string"&&Ze.includes(g)}function tt(g){try{let e=Qe(g,"utf8").match(/^\s*effort_level\s*:\s*['"]?([a-z]+)['"]?\s*$/m);return e&&Q(e[1])?e[1]:null}catch{return null}}function Ne(g={}){if(g.override&&Q(g.override))return g.override;if(g.agentEffort&&Q(g.agentEffort))return g.agentEffort;let e=(g.env??process.env).QE_EFFORT_LEVEL;if(e&&Q(e))return e;let r=g.fleetDefaultsPath??xe.join(process.cwd(),"config","fleet-defaults.yaml");return X===void 0&&(X=tt(r)),X||et}var Ze,et,X,Ue=W(()=>{"use strict";Ze=["low","medium","high","xhigh","max"],et="xhigh"});function rt(g){try{let t=H(g);return{sendSampling:t.supportsSamplingParams!==!1,supportsEffort:t.supportsEffortXHigh===!0}}catch{return{sendSampling:!1,supportsEffort:!1}}}function Z(g,t,e){let r=rt(t);if(r.sendSampling&&e.temperature!==void 0&&(g.temperature=e.temperature),r.supportsEffort){let o=e.effort??(ot(t)?Ne():void 0);o!==void 0&&(g.output_config={effort:o})}return g}function ot(g){return _e(g)?.tier==="flagship"}var be=W(()=>{"use strict";j();Ue()});function vt(g){try{let t=H(g);return{sendSampling:t.supportsSamplingParams!==!1,maxTokensField:t.usesMaxCompletionTokens===!0?"max_completion_tokens":"max_tokens"}}catch{return ft.test(g)?{...bt}:{...yt}}}function K(g,t,e){let r=vt(t),o=g;return e.maxTokens!==void 0&&(o[r.maxTokensField]=e.maxTokens),r.sendSampling&&e.temperature!==void 0&&(o.temperature=e.temperature),g}var ft,yt,bt,ve=W(()=>{"use strict";j();ft=/^(openai\/)?(gpt-5|gpt-6|o\d)/i,yt={sendSampling:!0,maxTokensField:"max_tokens"},bt={sendSampling:!1,maxTokensField:"max_completion_tokens"}});ze();I();var Oe={failureThreshold:5,resetTimeoutMs:3e4,halfOpenSuccessThreshold:2,failureWindowMs:6e4,includeTimeouts:!0},ge=class{state="closed";failures=[];successCount=0;totalRequests=0;totalSuccesses=0;totalFailures=0;rejectedCount=0;lastFailureTime;lastSuccessTime;openedAt;halfOpenSuccesses=0;config;providerType;constructor(t,e={}){this.providerType=t,this.config={...Oe,...e}}getState(){return this.state==="open"&&this.openedAt&&Date.now()-this.openedAt.getTime()>=this.config.resetTimeoutMs&&this.transitionTo("half-open"),this.state}canExecute(){let t=this.getState();return t==="closed"?!0:t!=="open"}async execute(t){if(this.totalRequests++,this.getState()==="open")throw this.rejectedCount++,a(`Circuit breaker is open for provider ${this.providerType}`,"CIRCUIT_OPEN",{provider:this.providerType,retryable:!0,retryAfterMs:this.getTimeUntilTransition()});try{let r=await t();return this.recordSuccess(),r}catch(r){throw this.recordFailure(R(r)),r}}recordSuccess(){this.successCount++,this.totalSuccesses++,this.lastSuccessTime=new Date,this.getState()==="half-open"&&(this.halfOpenSuccesses++,this.halfOpenSuccesses>=this.config.halfOpenSuccessThreshold&&this.transitionTo("closed"))}recordFailure(t){if(this.totalFailures++,this.lastFailureTime=new Date,(t.message.toLowerCase().includes("timeout")||t.name==="TimeoutError"||t.name==="AbortError")&&!this.config.includeTimeouts)return;this.failures.push({timestamp:new Date,error:t}),this.cleanOldFailures();let r=this.getState();if(r==="half-open"){this.transitionTo("open");return}r==="closed"&&this.failures.length>=this.config.failureThreshold&&this.transitionTo("open")}getStats(){return{state:this.getState(),totalRequests:this.totalRequests,successCount:this.totalSuccesses,failureCount:this.totalFailures,rejectedCount:this.rejectedCount,lastFailureTime:this.lastFailureTime,lastSuccessTime:this.lastSuccessTime,timeUntilTransitionMs:this.getTimeUntilTransition()}}reset(){this.state="closed",this.failures=[],this.successCount=0,this.halfOpenSuccesses=0,this.openedAt=void 0}forceOpen(){this.transitionTo("open")}forceHalfOpen(){this.transitionTo("half-open")}getRecentFailures(t=5){return this.failures.slice(-t).map(e=>`[${e.timestamp.toISOString()}] ${e.error.message}`)}transitionTo(t){if(this.state!==t)switch(this.state=t,t){case"open":this.openedAt=new Date,this.halfOpenSuccesses=0;break;case"half-open":this.halfOpenSuccesses=0;break;case"closed":this.failures=[],this.openedAt=void 0,this.halfOpenSuccesses=0;break}}cleanOldFailures(){let t=Date.now()-this.config.failureWindowMs;this.failures=this.failures.filter(e=>e.timestamp.getTime()>t)}getTimeUntilTransition(){if(this.state==="open"&&this.openedAt){let t=Date.now()-this.openedAt.getTime(),e=this.config.resetTimeoutMs-t;return Math.max(0,e)}}},V=class{breakers=new Map;defaultConfig;constructor(t={}){this.defaultConfig={...Oe,...t}}getBreaker(t,e){let r=this.breakers.get(t);return r||(r=new ge(t,{...this.defaultConfig,...e}),this.breakers.set(t,r)),r}getAllStats(){let t={};for(let[e,r]of this.breakers)t[e]=r.getStats();return t}getAvailableProviders(){let t=[];for(let[e,r]of this.breakers)r.canExecute()&&t.push(e);return t}resetAll(){for(let t of this.breakers.values())t.reset()}reset(t){let e=this.breakers.get(t);e&&e.reset()}};import{createHash as Ve}from"node:crypto";var Ie={maxSize:1e3,defaultTtlMs:36e5,enableLRU:!0,cacheGenerations:!0,cacheEmbeddings:!0,cacheCompletions:!0},L=class{cache=new Map;accessOrder=[];config;hits=0;misses=0;evictions=0;constructor(t={}){this.config={...Ie,...t}}static generateKey(t,e,r){let o=[t,r?.model??"default",String(r?.temperature??.7),String(r?.maxTokens??0),r?.systemPrompt??"",e],s=[r?.stopSequences,r?.effort,r?.preferredProvider];s.some(i=>i!==void 0)&&o.push(JSON.stringify(s));let n=Ve("sha256").update(JSON.stringify(o)).digest("hex");return`${t}:${n}`}get(t){let e=this.cache.get(t);if(!e){this.misses++;return}if(e.ttlMs>0&&Date.now()-e.createdAt.getTime()>e.ttlMs){this.delete(t),this.misses++;return}return this.hits++,e.lastAccessedAt=new Date,e.accessCount++,this.config.enableLRU&&this.updateAccessOrder(t),e.value}set(t,e,r){this.cache.size>=this.config.maxSize&&!this.cache.has(t)&&this.evictLRU();let o={value:e,createdAt:new Date,lastAccessedAt:new Date,accessCount:1,ttlMs:r??this.config.defaultTtlMs,keyHash:t};this.cache.set(t,o),this.config.enableLRU&&this.updateAccessOrder(t)}has(t){let e=this.cache.get(t);return e?e.ttlMs>0&&Date.now()-e.createdAt.getTime()>e.ttlMs?(this.delete(t),!1):!0:!1}delete(t){let e=this.cache.delete(t);if(e){let r=this.accessOrder.indexOf(t);r!==-1&&this.accessOrder.splice(r,1)}return e}clear(){this.cache.clear(),this.accessOrder=[],this.hits=0,this.misses=0,this.evictions=0}getStats(){let t=this.hits+this.misses,e=t>0?this.hits/t:0,r=0;for(let o of this.cache.values())r+=this.estimateSize(o.value);return{size:this.cache.size,maxSize:this.config.maxSize,hits:this.hits,misses:this.misses,hitRate:e,evictions:this.evictions,memoryUsageBytes:r}}keys(){return Array.from(this.cache.keys())}entries(){return Array.from(this.cache.entries())}import(t){for(let[e,r]of t)r.createdAt=new Date(r.createdAt),r.lastAccessedAt=new Date(r.lastAccessedAt),this.cache.set(e,r),this.config.enableLRU&&this.updateAccessOrder(e);for(;this.cache.size>this.config.maxSize;)this.evictLRU()}pruneExpired(){let t=Date.now(),e=0;for(let[r,o]of this.cache.entries())o.ttlMs>0&&t-o.createdAt.getTime()>o.ttlMs&&(this.delete(r),e++);return e}updateAccessOrder(t){let e=this.accessOrder.indexOf(t);e!==-1&&this.accessOrder.splice(e,1),this.accessOrder.push(t)}evictLRU(){if(this.accessOrder.length===0){let e=this.cache.keys().next().value;e!==void 0&&(this.cache.delete(e),this.evictions++);return}let t=this.accessOrder.shift();t!==void 0&&(this.cache.delete(t),this.evictions++)}estimateSize(t){return t==null?0:JSON.stringify(t).length*2}},Y=class{generationCache;embeddingCache;completionCache;config;constructor(t={}){this.config={...Ie,...t},this.generationCache=new L(t),this.embeddingCache=new L(t),this.completionCache=new L(t)}getGeneration(t,e){if(!this.config.cacheGenerations)return;let r=L.generateKey("generation",t,e);return this.generationCache.get(r)}setGeneration(t,e,r,o){if(!this.config.cacheGenerations||e.finishReason==="content_filter")return;let s=L.generateKey("generation",t,r);this.generationCache.set(s,e,o)}getEmbedding(t,e){if(!this.config.cacheEmbeddings)return;let r=L.generateKey("embedding",t,e);return this.embeddingCache.get(r)}setEmbedding(t,e,r,o){if(!this.config.cacheEmbeddings)return;let s=L.generateKey("embedding",t,r);this.embeddingCache.set(s,e,o)}getCompletion(t,e){if(!this.config.cacheCompletions)return;let r=L.generateKey("completion",t,e);return this.completionCache.get(r)}setCompletion(t,e,r,o){if(!this.config.cacheCompletions||e.completion.length===0)return;let s=L.generateKey("completion",t,r);this.completionCache.set(s,e,o)}getStats(){let t=this.generationCache.getStats(),e=this.embeddingCache.getStats(),r=this.completionCache.getStats(),o=t.hits+e.hits+r.hits,s=t.misses+e.misses+r.misses,n=o+s;return{generation:t,embedding:e,completion:r,total:{size:t.size+e.size+r.size,maxSize:this.config.maxSize*3,hits:o,misses:s,hitRate:n>0?o/n:0,evictions:t.evictions+e.evictions+r.evictions,memoryUsageBytes:t.memoryUsageBytes+e.memoryUsageBytes+r.memoryUsageBytes}}}clear(){this.generationCache.clear(),this.embeddingCache.clear(),this.completionCache.clear()}pruneExpired(){return this.generationCache.pruneExpired()+this.embeddingCache.pruneExpired()+this.completionCache.pruneExpired()}};U();He();We();var J="(unattributed)",Ye=`
3
3
  CREATE TABLE IF NOT EXISTS llm_spend (
4
4
  id INTEGER PRIMARY KEY AUTOINCREMENT,
5
5
  ts INTEGER NOT NULL,
@@ -12,18 +12,18 @@ CREATE TABLE IF NOT EXISTS llm_spend (
12
12
  request_id TEXT
13
13
  );
14
14
  CREATE INDEX IF NOT EXISTS idx_llm_spend_ts ON llm_spend(ts);
15
- `,fe=class{db;hasAgentColumn=!1;constructor(t){this.db=t,this.db.exec(je);try{this.db.prepare("PRAGMA table_info(llm_spend)").all().some(r=>r.name==="agent_type")||this.db.exec("ALTER TABLE llm_spend ADD COLUMN agent_type TEXT"),this.db.exec("CREATE INDEX IF NOT EXISTS idx_llm_spend_agent ON llm_spend(agent_type)"),this.hasAgentColumn=!0}catch{}}record(t){try{this.hasAgentColumn?this.db.prepare(`INSERT INTO llm_spend
16
- (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id, agent_type)
17
- VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id, @agent_type)`).run({ts:Date.now(),provider:t.provider,model:t.model,cost_usd:t.costUsd,cost_source:t.costSource,prompt_tokens:t.promptTokens,completion_tokens:t.completionTokens,request_id:t.requestId,agent_type:t.agent??null}):this.db.prepare(`INSERT INTO llm_spend
18
- (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id)
19
- VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id)`).run({ts:Date.now(),provider:t.provider,model:t.model,cost_usd:t.costUsd,cost_source:t.costSource,prompt_tokens:t.promptTokens,completion_tokens:t.completionTokens,request_id:t.requestId})}catch{}}spentSince(t,e=Date.now()){try{return this.db.prepare("SELECT COALESCE(SUM(cost_usd), 0) AS total FROM llm_spend WHERE ts >= ?").get(e-t)?.total??0}catch{return 0}}spentByAgentSince(t,e=Date.now()){try{let r=this.db.prepare(`SELECT COALESCE(agent_type, ?) AS agent, COALESCE(SUM(cost_usd), 0) AS total
20
- FROM llm_spend WHERE ts >= ? GROUP BY COALESCE(agent_type, ?)`).all(ge,e-t,ge),o=pe();for(let s of r)o[s.agent]=s.total;return o}catch{return{}}}},F=class{entries=[];record(t){this.entries.push({ts:Date.now(),costUsd:t.costUsd,agent:t.agent??ge})}spentSince(t,e=Date.now()){let r=e-t,o=0;for(let s of this.entries)s.ts>=r&&(o+=s.costUsd);return o}spentByAgentSince(t,e=Date.now()){let r=e-t,o=pe();for(let s of this.entries)s.ts>=r&&(o[s.agent]=(o[s.agent]??0)+s.costUsd);return o}};async function Ie(){try{let t=(await import("./unified-memory-QARWQKJ2.js")).getUnifiedMemory();return t.isInitialized()||await t.initialize(),new fe(t.getDatabase())}catch{return new F}}U();I();I();function ye(g,t,e,r){let o=Math.min(t*Math.pow(2,g),e),s=Math.random()*r*o;return o+s}var Ve=1e3,Ye=3e4;function C(g,t=Ve,e=Ye){return ye(g,t,e,0)}x();be();j();var rt={model:de,maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,anthropicVersion:"2023-06-01",enableCache:!0,enableCircuitBreaker:!0},Z=class{type="claude";name="Anthropic Claude";config;requestId=0;constructor(t={}){this.config={...rt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set ANTHROPIC_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/messages`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:this.config.model,max_tokens:1,messages:[{role:"user",content:"Hi"}]})},5e3),o=Date.now()-e;if(!r.ok){let s=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${s}`}}return{healthy:!0,latencyMs:o,models:this.getSupportedModels(),details:{apiVersion:this.config.anthropicVersion,defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("Anthropic API key not configured","API_KEY_MISSING",{provider:"claude",retryable:!1});let o=this.formatMessages(t),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`claude-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,messages:o};Q(h,s,{temperature:i,effort:e?.effort}),e?.systemPrompt&&(h.system=this.config.enableCache!==!1?[{type:"text",text:e.systemPrompt,cache_control:{type:"ephemeral"}}]:e.systemPrompt),e?.stopSequences&&e.stopSequences.length>0&&(h.stop_sequences=e.stopSequences);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/v1/messages`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let v=await c.json().catch(()=>({error:{message:"Unknown error"}}));throw this.handleApiError(c.status,v,s)}let m=await c.json(),u=m.usage.cache_creation_input_tokens??0,f=m.usage.cache_read_input_tokens??0,b={promptTokens:m.usage.input_tokens,completionTokens:m.usage.output_tokens,totalTokens:m.usage.input_tokens+u+f+m.usage.output_tokens,cacheCreationTokens:u,cacheReadTokens:f},y=_.calculateCost(s,b);return E.recordTokenUsage(l,"claude-provider","llm","generate",{inputTokens:m.usage.input_tokens,outputTokens:m.usage.output_tokens,totalTokens:m.usage.input_tokens+m.usage.output_tokens,estimatedCostUsd:y.totalCost}),{content:m.content.filter(v=>v.type==="text").map(v=>v.text).join(""),model:m.model,provider:"claude",usage:b,cost:y,latencyMs:p,finishReason:this.mapFinishReason(m.stop_reason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"claude",model:s,retryable:!0,cause:c})}}async embed(t,e){throw a("Claude does not support native embeddings. Use OpenAI or Ollama for embeddings.","MODEL_NOT_FOUND",{provider:"claude",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
15
+ `,fe=class{db;hasAgentColumn=!1;pending=new Set;constructor(t){this.db=t,this.db.exec(Ye);try{this.db.prepare("PRAGMA table_info(llm_spend)").all().some(r=>r.name==="agent_type")||this.db.exec("ALTER TABLE llm_spend ADD COLUMN agent_type TEXT"),this.db.exec("CREATE INDEX IF NOT EXISTS idx_llm_spend_agent ON llm_spend(agent_type)"),this.hasAgentColumn=!0}catch{}}record(t){let e=Date.now(),r={ts:e,costUsd:t.costUsd,agent:t.agent??J};this.pending.add(r),Ce(this.db,()=>{this.insert(t,e),this.pending.delete(r)}).catch(()=>{this.pending.delete(r)})}insert(t,e){this.hasAgentColumn?this.db.prepare(`INSERT INTO llm_spend
16
+ (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id, agent_type)
17
+ VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id, @agent_type)`).run({ts:e,provider:t.provider,model:t.model,cost_usd:t.costUsd,cost_source:t.costSource,prompt_tokens:t.promptTokens,completion_tokens:t.completionTokens,request_id:t.requestId,agent_type:t.agent??null}):this.db.prepare(`INSERT INTO llm_spend
18
+ (ts, provider, model, cost_usd, cost_source, prompt_tokens, completion_tokens, request_id)
19
+ VALUES (@ts, @provider, @model, @cost_usd, @cost_source, @prompt_tokens, @completion_tokens, @request_id)`).run({ts:e,provider:t.provider,model:t.model,cost_usd:t.costUsd,cost_source:t.costSource,prompt_tokens:t.promptTokens,completion_tokens:t.completionTokens,request_id:t.requestId})}spentSince(t,e=Date.now()){try{let o=this.db.prepare("SELECT COALESCE(SUM(cost_usd), 0) AS total FROM llm_spend WHERE ts >= ?").get(e-t)?.total??0;for(let s of this.pending)s.ts>=e-t&&(o+=s.costUsd);return o}catch{return 0}}spentByAgentSince(t,e=Date.now()){try{let r=this.db.prepare(`SELECT COALESCE(agent_type, ?) AS agent, COALESCE(SUM(cost_usd), 0) AS total
20
+ FROM llm_spend WHERE ts >= ? GROUP BY COALESCE(agent_type, ?)`).all(J,e-t,J),o=de();for(let s of r)o[s.agent]=s.total;for(let s of this.pending)s.ts>=e-t&&(o[s.agent]=(o[s.agent]??0)+s.costUsd);return o}catch{return{}}}},F=class{entries=[];record(t){this.entries.push({ts:Date.now(),costUsd:t.costUsd,agent:t.agent??J})}spentSince(t,e=Date.now()){let r=e-t,o=0;for(let s of this.entries)s.ts>=r&&(o+=s.costUsd);return o}spentByAgentSince(t,e=Date.now()){let r=e-t,o=de();for(let s of this.entries)s.ts>=r&&(o[s.agent]=(o[s.agent]??0)+s.costUsd);return o}};async function Se(){try{let t=(await import("./unified-memory-GI76TXFV.js")).getUnifiedMemory();return t.isInitialized()||await t.initialize(),new fe(t.getDatabase())}catch{return new F}}U();I();I();function ye(g,t,e,r){let o=Math.min(t*Math.pow(2,g),e),s=Math.random()*r*o;return o+s}var Je=1e3,Xe=3e4;function C(g,t=Je,e=Xe){return ye(g,t,e,0)}x();be();j();var st={model:me,maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,anthropicVersion:"2023-06-01",enableCache:!0,enableCircuitBreaker:!0},ee=class{type="claude";name="Anthropic Claude";config;requestId=0;constructor(t={}){this.config={...st,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set ANTHROPIC_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/messages`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:this.config.model,max_tokens:1,messages:[{role:"user",content:"Hi"}]})},5e3),o=Date.now()-e;if(!r.ok){let s=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${s}`}}return{healthy:!0,latencyMs:o,models:this.getSupportedModels(),details:{apiVersion:this.config.anthropicVersion,defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("Anthropic API key not configured","API_KEY_MISSING",{provider:"claude",retryable:!1});let o=this.formatMessages(t),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`claude-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,messages:o};Z(h,s,{temperature:i,effort:e?.effort}),e?.systemPrompt&&(h.system=this.config.enableCache!==!1?[{type:"text",text:e.systemPrompt,cache_control:{type:"ephemeral"}}]:e.systemPrompt),e?.stopSequences&&e.stopSequences.length>0&&(h.stop_sequences=e.stopSequences);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/v1/messages`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let v=await c.json().catch(()=>({error:{message:"Unknown error"}}));throw this.handleApiError(c.status,v,s)}let m=await c.json(),u=m.usage.cache_creation_input_tokens??0,f=m.usage.cache_read_input_tokens??0,b={promptTokens:m.usage.input_tokens,completionTokens:m.usage.output_tokens,totalTokens:m.usage.input_tokens+u+f+m.usage.output_tokens,cacheCreationTokens:u,cacheReadTokens:f},y=_.calculateCost(s,b);return E.recordTokenUsage(l,"claude-provider","llm","generate",{inputTokens:m.usage.input_tokens,outputTokens:m.usage.output_tokens,totalTokens:m.usage.input_tokens+m.usage.output_tokens,estimatedCostUsd:y.totalCost}),{content:m.content.filter(v=>v.type==="text").map(v=>v.text).join(""),model:m.model,provider:"claude",usage:b,cost:y,latencyMs:p,finishReason:this.mapFinishReason(m.stop_reason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"claude",model:s,retryable:!0,cause:c})}}async embed(t,e){throw a("Claude does not support native embeddings. Use OpenAI or Ollama for embeddings.","MODEL_NOT_FOUND",{provider:"claude",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
21
21
 
22
- `,"```"]});return{completion:r.content,model:r.model,provider:"claude",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["claude-opus-4-7","claude-sonnet-4-6","claude-haiku-4-5-20251001","claude-3-opus-20240229","claude-3-sonnet-20240229","claude-3-haiku-20240307"]}getCostPerToken(){return _.getCostPerToken(this.config.model)}async dispose(){}getApiKey(){return this.config.apiKey??process.env.ANTHROPIC_API_KEY}getBaseUrl(){return(this.config.baseUrl??process.env.ANTHROPIC_BASE_URL??"https://api.anthropic.com").replace(/\/$/,"")}getHeaders(){return{"Content-Type":"application/json","x-api-key":this.getApiKey(),"anthropic-version":this.config.anthropicVersion??"2023-06-01"}}formatMessages(t){return typeof t=="string"?[{role:"user",content:t}]:t.filter(e=>e.role!=="system").map(e=>({role:e.role,content:e.content}))}mapFinishReason(t){switch(t){case"end_turn":return"stop";case"max_tokens":return"length";case"stop_sequence":return"stop";default:return"stop"}}handleApiError(t,e,r){let o="error"in e?e.error?.message??"Unknown API error":"Unknown API error",s="error"in e&&"type"in e.error?e.error.type:"";switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"claude",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"claude",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw s==="invalid_request_error"&&o.includes("context")?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"claude",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"claude",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"claude",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"claude",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"claude",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};import{spawn as ot}from"node:child_process";Ge();var st=["ANTHROPIC_API_KEY","CLAUDE_API_KEY","ANTHROPIC_AUTH_TOKEN"],nt={model:"sonnet",maxTokens:4096,temperature:.7,timeoutMs:12e4,maxRetries:1,binaryPath:"claude",maxConcurrency:2,disallowedTools:["Bash","Edit","Write","NotebookEdit","WebFetch","WebSearch","Task"]},ee=class g{type="claude-code";name="Claude Code (subscription)";billingMode="subscription";config;requestId=0;availabilityCache;active=0;queue=[];constructor(t={}){this.config={...nt,...t};let e=Number.parseInt(process.env.AQE_CLAUDE_CODE_CONCURRENCY??"",10);Number.isFinite(e)&&e>0&&(this.config.maxConcurrency=e)}async isAvailable(){let t=Date.now();if(this.availabilityCache&&t-this.availabilityCache.at<6e4)return this.availabilityCache.available;let e=!1;try{let{code:r}=await this.runProcess(["--version"],void 0,5e3);e=r===0}catch{e=!1}return this.availabilityCache={at:t,available:e},e}async healthCheck(){let t=Date.now(),e=await this.isAvailable(),r=Date.now()-t;return e?{healthy:!0,latencyMs:r,models:this.getSupportedModels(),details:{binaryPath:this.config.binaryPath,billing:"subscription"}}:{healthy:!1,latencyMs:r,error:`Claude Code CLI ("${this.config.binaryPath}") not found or not runnable. Install Claude Code and log in with your Pro/Max account.`}}async generate(t,e){let r=this.toCliModel(e?.model??this.config.model),o=`claude-code-${++this.requestId}-${Date.now()}`,{prompt:s,systemPrompt:n}=this.flatten(t,e?.systemPrompt),i=["-p","--output-format","json","--model",r];n&&i.push("--append-system-prompt",n);let l=this.config.disallowedTools??[];l.length>0&&i.push("--disallowedTools",...l);let d=Date.now(),h=e?.timeoutMs??this.config.timeoutMs??12e4,{code:c,stdout:p,stderr:m}=await this.withConcurrency(()=>this.runProcess(i,s,h)),u=Date.now()-d;if(c!==0&&!p.trim())throw this.classifyError(m||`claude exited with code ${c}`,r);let f;try{f=JSON.parse(p)}catch{throw a(`Could not parse claude -p JSON output: ${ke(p,Number.POSITIVE_INFINITY).slice(0,200)}`,"PROVIDER_UNAVAILABLE",{provider:"claude-code",model:r,retryable:!0})}if(f.is_error)throw this.classifyError(f.result??f.api_error_status??"claude error",r);let b=f.usage??{},y={promptTokens:b.input_tokens??0,completionTokens:b.output_tokens??0,totalTokens:(b.input_tokens??0)+(b.output_tokens??0),cacheCreationTokens:b.cache_creation_input_tokens??0,cacheReadTokens:b.cache_read_input_tokens??0},k=f.modelUsage&&Object.keys(f.modelUsage)[0]||r;return E.recordTokenUsage(o,"claude-code-provider","llm","generate",{inputTokens:y.promptTokens,outputTokens:y.completionTokens,totalTokens:y.totalTokens,estimatedCostUsd:0}),{content:f.result??"",model:k,provider:"claude-code",usage:y,cost:{inputCost:0,outputCost:0,totalCost:0,currency:"USD",source:"provider-receipt"},latencyMs:u,finishReason:this.mapFinishReason(f.stop_reason),cached:!1,requestId:o}}async embed(t,e){throw a("Claude Code provider does not support embeddings. Use openai, ollama, or cognitum.","MODEL_NOT_FOUND",{provider:"claude-code",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256});return{completion:r.content,model:r.model,provider:"claude-code",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["opus","sonnet","haiku"]}getCostPerToken(){return{input:0,output:0}}async dispose(){}toCliModel(t){let e=t.toLowerCase();return e.includes("opus")?"opus":e.includes("haiku")?"haiku":e.includes("sonnet")?"sonnet":t}flatten(t,e){if(typeof t=="string")return{prompt:t,systemPrompt:e};let r=t.filter(s=>s.role==="system").map(s=>s.content);return e&&r.unshift(e),{prompt:t.filter(s=>s.role!=="system").map(s=>`${s.role==="assistant"?"Assistant":"User"}: ${s.content}`).join(`
22
+ `,"```"]});return{completion:r.content,model:r.model,provider:"claude",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["claude-opus-4-7","claude-sonnet-4-6","claude-haiku-4-5-20251001","claude-3-opus-20240229","claude-3-sonnet-20240229","claude-3-haiku-20240307"]}getCostPerToken(){return _.getCostPerToken(this.config.model)}async dispose(){}getApiKey(){return this.config.apiKey??process.env.ANTHROPIC_API_KEY}getBaseUrl(){return(this.config.baseUrl??process.env.ANTHROPIC_BASE_URL??"https://api.anthropic.com").replace(/\/$/,"")}getHeaders(){return{"Content-Type":"application/json","x-api-key":this.getApiKey(),"anthropic-version":this.config.anthropicVersion??"2023-06-01"}}formatMessages(t){return typeof t=="string"?[{role:"user",content:t}]:t.filter(e=>e.role!=="system").map(e=>({role:e.role,content:e.content}))}mapFinishReason(t){switch(t){case"end_turn":return"stop";case"max_tokens":return"length";case"stop_sequence":return"stop";default:return"stop"}}handleApiError(t,e,r){let o="error"in e?e.error?.message??"Unknown API error":"Unknown API error",s="error"in e&&"type"in e.error?e.error.type:"";switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"claude",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"claude",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw s==="invalid_request_error"&&o.includes("context")?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"claude",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"claude",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"claude",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"claude",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"claude",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};import{spawn as nt}from"node:child_process";$e();var it=["ANTHROPIC_API_KEY","CLAUDE_API_KEY","ANTHROPIC_AUTH_TOKEN"],at={model:"sonnet",maxTokens:4096,temperature:.7,timeoutMs:12e4,maxRetries:1,binaryPath:"claude",maxConcurrency:2,disallowedTools:["Bash","Edit","Write","NotebookEdit","WebFetch","WebSearch","Task"]},te=class g{type="claude-code";name="Claude Code (subscription)";billingMode="subscription";config;requestId=0;availabilityCache;active=0;queue=[];constructor(t={}){this.config={...at,...t};let e=Number.parseInt(process.env.AQE_CLAUDE_CODE_CONCURRENCY??"",10);Number.isFinite(e)&&e>0&&(this.config.maxConcurrency=e)}async isAvailable(){let t=Date.now();if(this.availabilityCache&&t-this.availabilityCache.at<6e4)return this.availabilityCache.available;let e=!1;try{let{code:r}=await this.runProcess(["--version"],void 0,5e3);e=r===0}catch{e=!1}return this.availabilityCache={at:t,available:e},e}async healthCheck(){let t=Date.now(),e=await this.isAvailable(),r=Date.now()-t;return e?{healthy:!0,latencyMs:r,models:this.getSupportedModels(),details:{binaryPath:this.config.binaryPath,billing:"subscription"}}:{healthy:!1,latencyMs:r,error:`Claude Code CLI ("${this.config.binaryPath}") not found or not runnable. Install Claude Code and log in with your Pro/Max account.`}}async generate(t,e){let r=this.toCliModel(e?.model??this.config.model),o=`claude-code-${++this.requestId}-${Date.now()}`,{prompt:s,systemPrompt:n}=this.flatten(t,e?.systemPrompt),i=["-p","--output-format","json","--model",r];n&&i.push("--append-system-prompt",n);let l=this.config.disallowedTools??[];l.length>0&&i.push("--disallowedTools",...l);let d=Date.now(),h=e?.timeoutMs??this.config.timeoutMs??12e4,{code:c,stdout:p,stderr:m}=await this.withConcurrency(()=>this.runProcess(i,s,h)),u=Date.now()-d;if(c!==0&&!p.trim())throw this.classifyError(m||`claude exited with code ${c}`,r);let f;try{f=JSON.parse(p)}catch{throw a(`Could not parse claude -p JSON output: ${ke(p,Number.POSITIVE_INFINITY).slice(0,200)}`,"PROVIDER_UNAVAILABLE",{provider:"claude-code",model:r,retryable:!0})}if(f.is_error)throw this.classifyError(f.result??f.api_error_status??"claude error",r);let b=f.usage??{},y={promptTokens:b.input_tokens??0,completionTokens:b.output_tokens??0,totalTokens:(b.input_tokens??0)+(b.output_tokens??0),cacheCreationTokens:b.cache_creation_input_tokens??0,cacheReadTokens:b.cache_read_input_tokens??0},k=f.modelUsage&&Object.keys(f.modelUsage)[0]||r;return E.recordTokenUsage(o,"claude-code-provider","llm","generate",{inputTokens:y.promptTokens,outputTokens:y.completionTokens,totalTokens:y.totalTokens,estimatedCostUsd:0}),{content:f.result??"",model:k,provider:"claude-code",usage:y,cost:{inputCost:0,outputCost:0,totalCost:0,currency:"USD",source:"provider-receipt"},latencyMs:u,finishReason:this.mapFinishReason(f.stop_reason),cached:!1,requestId:o}}async embed(t,e){throw a("Claude Code provider does not support embeddings. Use openai, ollama, or cognitum.","MODEL_NOT_FOUND",{provider:"claude-code",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256});return{completion:r.content,model:r.model,provider:"claude-code",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["opus","sonnet","haiku"]}getCostPerToken(){return{input:0,output:0}}async dispose(){}toCliModel(t){let e=t.toLowerCase();return e.includes("opus")?"opus":e.includes("haiku")?"haiku":e.includes("sonnet")?"sonnet":t}flatten(t,e){if(typeof t=="string")return{prompt:t,systemPrompt:e};let r=t.filter(s=>s.role==="system").map(s=>s.content);return e&&r.unshift(e),{prompt:t.filter(s=>s.role!=="system").map(s=>`${s.role==="assistant"?"Assistant":"User"}: ${s.content}`).join(`
23
23
 
24
24
  `),systemPrompt:r.length>0?r.join(`
25
25
 
26
- `):void 0}}mapFinishReason(t){return t==="max_tokens"?"length":"stop"}classifyError(t,e){let r=t.toLowerCase();return r.includes("rate limit")||r.includes("usage limit")||r.includes("429")||r.includes("quota")?a(t,"RATE_LIMITED",{provider:"claude-code",model:e,retryable:!0,retryAfterMs:6e4}):a(t,"PROVIDER_UNAVAILABLE",{provider:"claude-code",model:e,retryable:!0})}static childEnv(t=process.env){let e={...t};for(let r of st)delete e[r];return e}runProcess(t,e,r){return new Promise((o,s)=>{let n=ot(this.config.binaryPath??"claude",t,{env:g.childEnv(),stdio:["pipe","pipe","pipe"]}),i="",l="",d=!1,h=setTimeout(()=>{d||(d=!0,n.kill("SIGKILL"),s(a("claude -p timed out","TIMEOUT",{provider:"claude-code",retryable:!0})))},r);n.stdout.on("data",c=>i+=c.toString()),n.stderr.on("data",c=>l+=c.toString()),n.on("error",c=>{d||(d=!0,clearTimeout(h),s(a(`Failed to spawn claude: ${c.message}`,"PROVIDER_UNAVAILABLE",{provider:"claude-code",retryable:!1,cause:c})))}),n.on("close",c=>{d||(d=!0,clearTimeout(h),o({code:c??0,stdout:i,stderr:l}))}),n.stdin.on("error",()=>{});try{e!==void 0&&n.stdin.write(e),n.stdin.end()}catch{}})}async withConcurrency(t){let e=this.config.maxConcurrency??2;this.active>=e&&await new Promise(r=>this.queue.push(r)),this.active++;try{return await t()}finally{this.active--;let r=this.queue.shift();r&&r()}}};import{spawn as it}from"node:child_process";import{mkdtempSync as at,readFileSync as ct,rmSync as lt}from"node:fs";import{tmpdir as ut}from"node:os";import{join as Ue}from"node:path";var pt=["OPENAI_API_KEY","CODEX_API_KEY"],G="default",dt={model:G,maxTokens:4096,temperature:.7,timeoutMs:18e4,maxRetries:1,binaryPath:"codex",maxConcurrency:2},te=class g{type="codex";name="Codex CLI (subscription)";billingMode="subscription";config;requestId=0;availabilityCache;active=0;queue=[];constructor(t={}){this.config={...dt,...t};let e=Number.parseInt(process.env.AQE_CODEX_CONCURRENCY??"",10);Number.isFinite(e)&&e>0&&(this.config.maxConcurrency=e)}async isAvailable(){let t=Date.now();if(this.availabilityCache&&t-this.availabilityCache.at<6e4)return this.availabilityCache.available;let e=!1;try{let{code:r}=await this.runProcess(["--version"],void 0,void 0,5e3);e=r===0}catch{e=!1}return this.availabilityCache={at:t,available:e},e}async healthCheck(){let t=Date.now(),e=await this.isAvailable(),r=Date.now()-t;return e?{healthy:!0,latencyMs:r,models:this.getSupportedModels(),details:{binaryPath:this.config.binaryPath,billing:"subscription"}}:{healthy:!1,latencyMs:r,error:`Codex CLI ("${this.config.binaryPath}") not found or not runnable. Install Codex and log in with your ChatGPT account (\`codex login\`).`}}async generate(t,e){let r=e?.model??this.config.model??G,o=`codex-${++this.requestId}-${Date.now()}`,{prompt:s}=this.flatten(t,e?.systemPrompt),n=at(Ue(ut(),"aqe-codex-")),i=Ue(n,"last-message.txt"),l=["exec","--skip-git-repo-check","--sandbox","read-only","-o",i];r&&r!==G&&l.push("-m",r);let d=Date.now(),h=e?.timeoutMs??this.config.timeoutMs??18e4;try{let{code:c,stderr:p}=await this.withConcurrency(()=>this.runProcess(l,s,void 0,h)),m=Date.now()-d,u="";try{u=ct(i,"utf8").trim()}catch{u=""}if(c!==0&&!u)throw this.classifyError(p||`codex exited with code ${c}`,r);let f=Math.ceil(s.length/4),b=Math.ceil(u.length/4),y={promptTokens:f,completionTokens:b,totalTokens:f+b,cacheCreationTokens:0,cacheReadTokens:0};return E.recordTokenUsage(o,"codex-provider","llm","generate",{inputTokens:y.promptTokens,outputTokens:y.completionTokens,totalTokens:y.totalTokens,estimatedCostUsd:0}),{content:u,model:r===G?"codex-default":r,provider:"codex",usage:y,cost:{inputCost:0,outputCost:0,totalCost:0,currency:"USD",source:"provider-receipt"},latencyMs:m,finishReason:"stop",cached:!1,requestId:o}}finally{lt(n,{recursive:!0,force:!0})}}async embed(t,e){throw a("Codex provider does not support embeddings. Use openai, ollama, or cognitum.","MODEL_NOT_FOUND",{provider:"codex",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256});return{completion:r.content,model:r.model,provider:"codex",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return[G,"gpt-6-sol","gpt-6-luna","gpt-6-astra","gpt-5.6-sol","gpt-5.3-codex"]}getCostPerToken(){return{input:0,output:0}}async dispose(){}flatten(t,e){if(typeof t=="string")return{prompt:e?`${e}
26
+ `):void 0}}mapFinishReason(t){return t==="max_tokens"?"length":"stop"}classifyError(t,e){let r=t.toLowerCase();return r.includes("rate limit")||r.includes("usage limit")||r.includes("429")||r.includes("quota")?a(t,"RATE_LIMITED",{provider:"claude-code",model:e,retryable:!0,retryAfterMs:6e4}):a(t,"PROVIDER_UNAVAILABLE",{provider:"claude-code",model:e,retryable:!0})}static childEnv(t=process.env){let e={...t};for(let r of it)delete e[r];return e}runProcess(t,e,r){return new Promise((o,s)=>{let n=nt(this.config.binaryPath??"claude",t,{env:g.childEnv(),stdio:["pipe","pipe","pipe"]}),i="",l="",d=!1,h=setTimeout(()=>{d||(d=!0,n.kill("SIGKILL"),s(a("claude -p timed out","TIMEOUT",{provider:"claude-code",retryable:!0})))},r);n.stdout.on("data",c=>i+=c.toString()),n.stderr.on("data",c=>l+=c.toString()),n.on("error",c=>{d||(d=!0,clearTimeout(h),s(a(`Failed to spawn claude: ${c.message}`,"PROVIDER_UNAVAILABLE",{provider:"claude-code",retryable:!1,cause:c})))}),n.on("close",c=>{d||(d=!0,clearTimeout(h),o({code:c??0,stdout:i,stderr:l}))}),n.stdin.on("error",()=>{});try{e!==void 0&&n.stdin.write(e),n.stdin.end()}catch{}})}async withConcurrency(t){let e=this.config.maxConcurrency??2;this.active>=e&&await new Promise(r=>this.queue.push(r)),this.active++;try{return await t()}finally{this.active--;let r=this.queue.shift();r&&r()}}};import{spawn as ct}from"node:child_process";import{mkdtempSync as lt,readFileSync as ut,rmSync as pt}from"node:fs";import{tmpdir as dt}from"node:os";import{join as De}from"node:path";var mt=["OPENAI_API_KEY","CODEX_API_KEY"],G="default",ht={model:G,maxTokens:4096,temperature:.7,timeoutMs:18e4,maxRetries:1,binaryPath:"codex",maxConcurrency:2},re=class g{type="codex";name="Codex CLI (subscription)";billingMode="subscription";config;requestId=0;availabilityCache;active=0;queue=[];constructor(t={}){this.config={...ht,...t};let e=Number.parseInt(process.env.AQE_CODEX_CONCURRENCY??"",10);Number.isFinite(e)&&e>0&&(this.config.maxConcurrency=e)}async isAvailable(){let t=Date.now();if(this.availabilityCache&&t-this.availabilityCache.at<6e4)return this.availabilityCache.available;let e=!1;try{let{code:r}=await this.runProcess(["--version"],void 0,void 0,5e3);e=r===0}catch{e=!1}return this.availabilityCache={at:t,available:e},e}async healthCheck(){let t=Date.now(),e=await this.isAvailable(),r=Date.now()-t;return e?{healthy:!0,latencyMs:r,models:this.getSupportedModels(),details:{binaryPath:this.config.binaryPath,billing:"subscription"}}:{healthy:!1,latencyMs:r,error:`Codex CLI ("${this.config.binaryPath}") not found or not runnable. Install Codex and log in with your ChatGPT account (\`codex login\`).`}}async generate(t,e){let r=e?.model??this.config.model??G,o=`codex-${++this.requestId}-${Date.now()}`,{prompt:s}=this.flatten(t,e?.systemPrompt),n=lt(De(dt(),"aqe-codex-")),i=De(n,"last-message.txt"),l=["exec","--skip-git-repo-check","--sandbox","read-only","-o",i];r&&r!==G&&l.push("-m",r);let d=Date.now(),h=e?.timeoutMs??this.config.timeoutMs??18e4;try{let{code:c,stderr:p}=await this.withConcurrency(()=>this.runProcess(l,s,void 0,h)),m=Date.now()-d,u="";try{u=ut(i,"utf8").trim()}catch{u=""}if(c!==0&&!u)throw this.classifyError(p||`codex exited with code ${c}`,r);let f=Math.ceil(s.length/4),b=Math.ceil(u.length/4),y={promptTokens:f,completionTokens:b,totalTokens:f+b,cacheCreationTokens:0,cacheReadTokens:0};return E.recordTokenUsage(o,"codex-provider","llm","generate",{inputTokens:y.promptTokens,outputTokens:y.completionTokens,totalTokens:y.totalTokens,estimatedCostUsd:0}),{content:u,model:r===G?"codex-default":r,provider:"codex",usage:y,cost:{inputCost:0,outputCost:0,totalCost:0,currency:"USD",source:"provider-receipt"},latencyMs:m,finishReason:"stop",cached:!1,requestId:o}}finally{pt(n,{recursive:!0,force:!0})}}async embed(t,e){throw a("Codex provider does not support embeddings. Use openai, ollama, or cognitum.","MODEL_NOT_FOUND",{provider:"codex",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256});return{completion:r.content,model:r.model,provider:"codex",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return[G,"gpt-6-sol","gpt-6-luna","gpt-6-astra","gpt-5.6-sol","gpt-5.3-codex"]}getCostPerToken(){return{input:0,output:0}}async dispose(){}flatten(t,e){if(typeof t=="string")return{prompt:e?`${e}
27
27
 
28
28
  ${t}`:t};let r=t.filter(n=>n.role==="system").map(n=>n.content);e&&r.unshift(e);let o=t.filter(n=>n.role!=="system").map(n=>`${n.role==="assistant"?"Assistant":"User"}: ${n.content}`).join(`
29
29
 
@@ -31,24 +31,24 @@ ${t}`:t};let r=t.filter(n=>n.role==="system").map(n=>n.content);e&&r.unshift(e);
31
31
 
32
32
  `)}
33
33
 
34
- `:""}${o}`}}classifyError(t,e){let r=t.toLowerCase();return r.includes("rate limit")||r.includes("usage limit")||r.includes("429")||r.includes("quota")?a(t,"RATE_LIMITED",{provider:"codex",model:e,retryable:!0,retryAfterMs:6e4}):a(t,"PROVIDER_UNAVAILABLE",{provider:"codex",model:e,retryable:!0})}static childEnv(t=process.env){let e={...t};for(let r of pt)delete e[r];return e}runProcess(t,e,r,o){return new Promise((s,n)=>{let i=it(this.config.binaryPath??"codex",t,{env:g.childEnv(),stdio:["pipe","pipe","pipe"]}),l="",d="",h=!1,c=setTimeout(()=>{h||(h=!0,i.kill("SIGKILL"),n(a("codex exec timed out","TIMEOUT",{provider:"codex",retryable:!0})))},o);i.stdout.on("data",p=>l+=p.toString()),i.stderr.on("data",p=>d+=p.toString()),i.on("error",p=>{h||(h=!0,clearTimeout(c),n(a(`Failed to spawn codex: ${p.message}`,"PROVIDER_UNAVAILABLE",{provider:"codex",retryable:!1,cause:p})))}),i.on("close",p=>{h||(h=!0,clearTimeout(c),s({code:p??0,stdout:l,stderr:d}))}),i.stdin.on("error",()=>{});try{e!==void 0&&i.stdin.write(e),i.stdin.end()}catch{}})}async withConcurrency(t){let e=this.config.maxConcurrency??2;this.active>=e&&await new Promise(r=>this.queue.push(r)),this.active++;try{return await t()}finally{this.active--;let r=this.queue.shift();r&&r()}}};I();x();var mt={model:"cognitum-auto",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0},re=class{type="cognitum";name="Cognitum";billingMode="metered-capped";config;requestId=0;constructor(t={}){this.config={...mt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set COGNITUM_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/models`,{method:"GET",headers:this.getHeaders()},5e3),o=Date.now()-e;return r.ok?{healthy:!0,latencyMs:o,models:this.getSupportedModels(),details:{billing:"metered-capped",baseUrl:this.getBaseUrl()}}:{healthy:!1,latencyMs:o,error:`API error: ${r.status}`}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("Cognitum API key not configured","API_KEY_MISSING",{provider:"cognitum",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`cognitum-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,temperature:i,messages:o};e?.stopSequences?.length&&(h.stop=e.stopSequences);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/v1/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok)throw await this.toApiError(c,s);let m=await c.json(),u=m.x_cognitum,f={promptTokens:m.usage.prompt_tokens,completionTokens:m.usage.completion_tokens,totalTokens:m.usage.total_tokens,cacheReadTokens:m.usage.cache_read_tokens??0},b=this.receiptCost(u);return E.recordTokenUsage(l,"cognitum-provider","llm","generate",{inputTokens:f.promptTokens,outputTokens:f.completionTokens,totalTokens:f.totalTokens,estimatedCostUsd:b.totalCost}),{content:m.choices[0]?.message?.content??"",model:u?.resolved_model??m.model,provider:"cognitum",usage:f,cost:b,latencyMs:p,finishReason:this.mapFinishReason(m.choices[0]?.finish_reason),cached:u?.cache==="hit",requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"cognitum",model:s,retryable:!0,cause:c})}}async embed(t,e){if(!this.getApiKey())throw a("Cognitum API key not configured","API_KEY_MISSING",{provider:"cognitum",retryable:!1});let o=e?.model??"cognitum-embed",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/embeddings`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:o,input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok)throw await this.toApiError(n,o);let l=await n.json();return{embedding:l.data[0].embedding,model:l.x_cognitum?.resolved_model??l.model,provider:"cognitum",tokenCount:l.usage.total_tokens,latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"cognitum",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences});return{completion:r.content,model:r.model,provider:"cognitum",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["cognitum-auto","cognitum-low","cognitum-mid","cognitum-high"]}getCostPerToken(){return{input:0,output:0}}async dispose(){}async getRemoteBudget(){try{let t=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/usage`,{method:"GET",headers:this.getHeaders()},5e3);if(!t.ok)return;let r=(await t.json()).budget;return r?{servingBudgetUsd:r.servingBudgetUsd??0,hardCapUsd:r.hardCapUsd??0,committedUsd:r.committedUsd??0,headroomUsd:r.headroomUsd??0,status:r.status??"unknown",headroomExhausted:r.headroomExhausted??!1}:void 0}catch{return}}receiptCost(t){return{inputCost:0,outputCost:0,totalCost:t?.price_usd??0,currency:"USD",source:t?.price_usd!==void 0?"provider-receipt":"local-estimate"}}getApiKey(){return this.config.apiKey??process.env.COGNITUM_API_KEY}getBaseUrl(){return(this.config.baseUrl??process.env.COGNITUM_BASE_URL??"https://api.cognitum.one").replace(/\/$/,"")}getHeaders(){return{"Content-Type":"application/json","X-API-Key":this.getApiKey()}}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"length":return"length";case"content_filter":return"content_filter";default:return"stop"}}async toApiError(t,e){let r=await t.text().catch(()=>""),o=r;try{o=JSON.parse(r).error??r}catch{}switch(t.status){case 401:case 403:return a(o||"Unauthorized","API_KEY_INVALID",{provider:"cognitum",model:e,retryable:!1});case 402:return a(o||"Budget cap reached","COST_LIMIT_EXCEEDED",{provider:"cognitum",model:e,retryable:!1});case 429:return a(o||"Rate limited","RATE_LIMITED",{provider:"cognitum",model:e,retryable:!0,retryAfterMs:6e4});case 500:case 502:case 503:return a(o||"Provider unavailable","PROVIDER_UNAVAILABLE",{provider:"cognitum",model:e,retryable:!0,retryAfterMs:5e3});default:return a(o||`HTTP ${t.status}`,"UNKNOWN",{provider:"cognitum",model:e,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"cognitum",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){await this.sleep(C(n));continue}return i}catch(i){s=R(i),n<o-1&&await this.sleep(C(n))}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};U();ve();I();x();var bt={model:"gpt-6-sol",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0},oe=class{type="openai";name="OpenAI";config;requestId=0;constructor(t={}){this.config={...bt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set OPENAI_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(K({model:this.config.model,messages:[{role:"user",content:"Hi"}]},this.config.model,{maxTokens:1}))},5e3),o=Date.now()-e;if(!r.ok){let s=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${s}`}}return{healthy:!0,latencyMs:o,models:this.getSupportedModels(),details:{defaultModel:this.config.model,organization:this.config.organization}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("OpenAI API key not configured","API_KEY_MISSING",{provider:"openai",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`openai-${++this.requestId}-${Date.now()}`,d=Date.now(),h=K({model:s,messages:o},s,{maxTokens:n,temperature:i});e?.stopSequences&&e.stopSequences.length>0&&(h.stop=e.stopSequences),this.config.presencePenalty!==void 0&&(h.presence_penalty=this.config.presencePenalty),this.config.frequencyPenalty!==void 0&&(h.frequency_penalty=this.config.frequencyPenalty);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/v1/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let y=await c.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(c.status,y,s)}let m=await c.json(),u={promptTokens:m.usage.prompt_tokens,completionTokens:m.usage.completion_tokens,totalTokens:m.usage.total_tokens},f=_.calculateCost(s,u);return E.recordTokenUsage(l,"openai-provider","llm","generate",{inputTokens:m.usage.prompt_tokens,outputTokens:m.usage.completion_tokens,totalTokens:m.usage.total_tokens,estimatedCostUsd:f.totalCost}),{content:m.choices[0]?.message?.content??"",model:m.model,provider:"openai",usage:u,cost:f,latencyMs:p,finishReason:this.mapFinishReason(m.choices[0]?.finish_reason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"openai",model:s,retryable:!0,cause:c})}}async embed(t,e){if(!this.getApiKey())throw a("OpenAI API key not configured","API_KEY_MISSING",{provider:"openai",retryable:!1});let o=e?.model??"text-embedding-3-small",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/embeddings`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:o,input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok){let d=await n.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(n.status,d,o)}let l=await n.json();return{embedding:l.data[0].embedding,model:l.model,provider:"openai",tokenCount:l.usage.total_tokens,latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"openai",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
34
+ `:""}${o}`}}classifyError(t,e){let r=t.toLowerCase();return r.includes("rate limit")||r.includes("usage limit")||r.includes("429")||r.includes("quota")?a(t,"RATE_LIMITED",{provider:"codex",model:e,retryable:!0,retryAfterMs:6e4}):a(t,"PROVIDER_UNAVAILABLE",{provider:"codex",model:e,retryable:!0})}static childEnv(t=process.env){let e={...t};for(let r of mt)delete e[r];return e}runProcess(t,e,r,o){return new Promise((s,n)=>{let i=ct(this.config.binaryPath??"codex",t,{env:g.childEnv(),stdio:["pipe","pipe","pipe"]}),l="",d="",h=!1,c=setTimeout(()=>{h||(h=!0,i.kill("SIGKILL"),n(a("codex exec timed out","TIMEOUT",{provider:"codex",retryable:!0})))},o);i.stdout.on("data",p=>l+=p.toString()),i.stderr.on("data",p=>d+=p.toString()),i.on("error",p=>{h||(h=!0,clearTimeout(c),n(a(`Failed to spawn codex: ${p.message}`,"PROVIDER_UNAVAILABLE",{provider:"codex",retryable:!1,cause:p})))}),i.on("close",p=>{h||(h=!0,clearTimeout(c),s({code:p??0,stdout:l,stderr:d}))}),i.stdin.on("error",()=>{});try{e!==void 0&&i.stdin.write(e),i.stdin.end()}catch{}})}async withConcurrency(t){let e=this.config.maxConcurrency??2;this.active>=e&&await new Promise(r=>this.queue.push(r)),this.active++;try{return await t()}finally{this.active--;let r=this.queue.shift();r&&r()}}};I();x();var gt={model:"cognitum-auto",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0},oe=class{type="cognitum";name="Cognitum";billingMode="metered-capped";config;requestId=0;constructor(t={}){this.config={...gt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set COGNITUM_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/models`,{method:"GET",headers:this.getHeaders()},5e3),o=Date.now()-e;return r.ok?{healthy:!0,latencyMs:o,models:this.getSupportedModels(),details:{billing:"metered-capped",baseUrl:this.getBaseUrl()}}:{healthy:!1,latencyMs:o,error:`API error: ${r.status}`}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("Cognitum API key not configured","API_KEY_MISSING",{provider:"cognitum",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`cognitum-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,temperature:i,messages:o};e?.stopSequences?.length&&(h.stop=e.stopSequences);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/v1/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok)throw await this.toApiError(c,s);let m=await c.json(),u=m.x_cognitum,f={promptTokens:m.usage.prompt_tokens,completionTokens:m.usage.completion_tokens,totalTokens:m.usage.total_tokens,cacheReadTokens:m.usage.cache_read_tokens??0},b=this.receiptCost(u);return E.recordTokenUsage(l,"cognitum-provider","llm","generate",{inputTokens:f.promptTokens,outputTokens:f.completionTokens,totalTokens:f.totalTokens,estimatedCostUsd:b.totalCost}),{content:m.choices[0]?.message?.content??"",model:u?.resolved_model??m.model,provider:"cognitum",usage:f,cost:b,latencyMs:p,finishReason:this.mapFinishReason(m.choices[0]?.finish_reason),cached:u?.cache==="hit",requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"cognitum",model:s,retryable:!0,cause:c})}}async embed(t,e){if(!this.getApiKey())throw a("Cognitum API key not configured","API_KEY_MISSING",{provider:"cognitum",retryable:!1});let o=e?.model??"cognitum-embed",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/embeddings`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:o,input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok)throw await this.toApiError(n,o);let l=await n.json();return{embedding:l.data[0].embedding,model:l.x_cognitum?.resolved_model??l.model,provider:"cognitum",tokenCount:l.usage.total_tokens,latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"cognitum",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences});return{completion:r.content,model:r.model,provider:"cognitum",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["cognitum-auto","cognitum-low","cognitum-mid","cognitum-high"]}getCostPerToken(){return{input:0,output:0}}async dispose(){}async getRemoteBudget(){try{let t=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/usage`,{method:"GET",headers:this.getHeaders()},5e3);if(!t.ok)return;let r=(await t.json()).budget;return r?{servingBudgetUsd:r.servingBudgetUsd??0,hardCapUsd:r.hardCapUsd??0,committedUsd:r.committedUsd??0,headroomUsd:r.headroomUsd??0,status:r.status??"unknown",headroomExhausted:r.headroomExhausted??!1}:void 0}catch{return}}receiptCost(t){return{inputCost:0,outputCost:0,totalCost:t?.price_usd??0,currency:"USD",source:t?.price_usd!==void 0?"provider-receipt":"local-estimate"}}getApiKey(){return this.config.apiKey??process.env.COGNITUM_API_KEY}getBaseUrl(){return(this.config.baseUrl??process.env.COGNITUM_BASE_URL??"https://api.cognitum.one").replace(/\/$/,"")}getHeaders(){return{"Content-Type":"application/json","X-API-Key":this.getApiKey()}}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"length":return"length";case"content_filter":return"content_filter";default:return"stop"}}async toApiError(t,e){let r=await t.text().catch(()=>""),o=r;try{o=JSON.parse(r).error??r}catch{}switch(t.status){case 401:case 403:return a(o||"Unauthorized","API_KEY_INVALID",{provider:"cognitum",model:e,retryable:!1});case 402:return a(o||"Budget cap reached","COST_LIMIT_EXCEEDED",{provider:"cognitum",model:e,retryable:!1});case 429:return a(o||"Rate limited","RATE_LIMITED",{provider:"cognitum",model:e,retryable:!0,retryAfterMs:6e4});case 500:case 502:case 503:return a(o||"Provider unavailable","PROVIDER_UNAVAILABLE",{provider:"cognitum",model:e,retryable:!0,retryAfterMs:5e3});default:return a(o||`HTTP ${t.status}`,"UNKNOWN",{provider:"cognitum",model:e,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"cognitum",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){await this.sleep(C(n));continue}return i}catch(i){s=R(i),n<o-1&&await this.sleep(C(n))}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};U();ve();I();x();var Tt={model:"gpt-6-sol",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0},se=class{type="openai";name="OpenAI";config;requestId=0;constructor(t={}){this.config={...Tt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set OPENAI_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(K({model:this.config.model,messages:[{role:"user",content:"Hi"}]},this.config.model,{maxTokens:1}))},5e3),o=Date.now()-e;if(!r.ok){let s=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${s}`}}return{healthy:!0,latencyMs:o,models:this.getSupportedModels(),details:{defaultModel:this.config.model,organization:this.config.organization}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("OpenAI API key not configured","API_KEY_MISSING",{provider:"openai",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`openai-${++this.requestId}-${Date.now()}`,d=Date.now(),h=K({model:s,messages:o},s,{maxTokens:n,temperature:i});e?.stopSequences&&e.stopSequences.length>0&&(h.stop=e.stopSequences),this.config.presencePenalty!==void 0&&(h.presence_penalty=this.config.presencePenalty),this.config.frequencyPenalty!==void 0&&(h.frequency_penalty=this.config.frequencyPenalty);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/v1/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let y=await c.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(c.status,y,s)}let m=await c.json(),u={promptTokens:m.usage.prompt_tokens,completionTokens:m.usage.completion_tokens,totalTokens:m.usage.total_tokens},f=_.calculateCost(s,u);return E.recordTokenUsage(l,"openai-provider","llm","generate",{inputTokens:m.usage.prompt_tokens,outputTokens:m.usage.completion_tokens,totalTokens:m.usage.total_tokens,estimatedCostUsd:f.totalCost}),{content:m.choices[0]?.message?.content??"",model:m.model,provider:"openai",usage:u,cost:f,latencyMs:p,finishReason:this.mapFinishReason(m.choices[0]?.finish_reason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"openai",model:s,retryable:!0,cause:c})}}async embed(t,e){if(!this.getApiKey())throw a("OpenAI API key not configured","API_KEY_MISSING",{provider:"openai",retryable:!1});let o=e?.model??"text-embedding-3-small",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/v1/embeddings`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:o,input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok){let d=await n.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(n.status,d,o)}let l=await n.json();return{embedding:l.data[0].embedding,model:l.model,provider:"openai",tokenCount:l.usage.total_tokens,latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"openai",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
35
35
 
36
- `]});return{completion:r.content,model:r.model,provider:"openai",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["gpt-6-sol","gpt-6-luna","gpt-6-astra","gpt-5.6-sol","gpt-5.6-luna","gpt-5.4-mini"]}getCostPerToken(){return _.getCostPerToken(this.config.model)}async dispose(){}getApiKey(){return this.config.apiKey??process.env.OPENAI_API_KEY}getBaseUrl(){return(this.config.baseUrl??"https://api.openai.com").replace(/\/$/,"")}getHeaders(){let t={"Content-Type":"application/json",Authorization:`Bearer ${this.getApiKey()}`};return this.config.organization&&(t["OpenAI-Organization"]=this.config.organization),t}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content_filter";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error",s=e.error?.type??"",n=e.error?.code??"";switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"openai",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"openai",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw n==="context_length_exceeded"||s==="invalid_request_error"?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"openai",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"openai",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"openai",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"openai",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"openai",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};x();U();ze();var q={DEFAULT_TOK_PER_SEC:15,SAFETY_FACTOR:2.5,LOAD_OVERHEAD_MS:15e3,FLOOR_MS:3e4,CEIL_MS:6e5};function De(g,t=q.DEFAULT_TOK_PER_SEC){let e=t>0?t:q.DEFAULT_TOK_PER_SEC,o=Math.max(0,g)/e*1e3*q.SAFETY_FACTOR+q.LOAD_OVERHEAD_MS;return Math.min(q.CEIL_MS,Math.max(q.FLOOR_MS,Math.round(o)))}var Ke={model:"qwen3-coder:30b",baseUrl:me("http://localhost:11434"),maxTokens:4096,temperature:.7,timeoutMs:12e4,maxRetries:2,contextLength:4096,keepAlive:"5m",enableCache:!0,enableCircuitBreaker:!0},se=class{type="ollama";name="Ollama (Local)";config;requestId=0;availableModels=[];installedTags=[];observedTokPerSec=new Map;constructor(t={}){this.config={...Ke,...t}}timeoutFor(t,e){let r=this.config.timeoutMs;return r&&r!==Ke.timeoutMs?r:De(e,this.observedTokPerSec.get(t))}recordThroughput(t,e,r){if(!e||!r||r<=0)return;let o=e/(r/1e9);if(!Number.isFinite(o)||o<=0)return;let s=this.observedTokPerSec.get(t);this.observedTokPerSec.set(t,s?s*.5+o*.5:o)}async isAvailable(){try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){let t=Date.now();try{let e=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/tags`,{method:"GET",headers:{"Content-Type":"application/json"}},5e3),r=Date.now()-t;if(!e.ok)return{healthy:!1,latencyMs:r,error:`Ollama server returned ${e.status}`};let o=await e.json();this.installedTags=o.models?.map(i=>i.name)??[],this.availableModels=this.installedTags.map(i=>i.split(":")[0]);let s=this.config.model;return!(s.includes(":")?this.installedTags.includes(s):this.availableModels.includes(s))&&this.availableModels.length>0?{healthy:!0,latencyMs:r,models:this.availableModels,details:{warning:`Configured model '${this.config.model}' not found. Available: ${this.availableModels.join(", ")}`,defaultModel:this.config.model}}:{healthy:!0,latencyMs:r,models:this.availableModels,details:{defaultModel:this.config.model,modelCount:this.availableModels.length}}}catch(e){return{healthy:!1,error:`Ollama not running. Start with: ollama serve. Error: ${e instanceof Error?e.message:"Unknown"}`}}}async generate(t,e){let r=e?.model??this.config.model,o=e?.maxTokens??this.config.maxTokens??4096,s=e?.temperature??this.config.temperature??.7,n=`ollama-${++this.requestId}-${Date.now()}`,i=Date.now(),l=Array.isArray(t);try{let d,h,c,p;if(l){let b=this.formatMessages(t,e?.systemPrompt);if(d=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:r,messages:b,stream:!1,options:{temperature:s,num_predict:o,stop:e?.stopSequences}})},e?.timeoutMs??this.timeoutFor(r,o)),!d.ok)throw await this.handleApiError(d,r);let y=await d.json();h=y.message.content,this.recordThroughput(r,y.eval_count,y.eval_duration),c=y.prompt_eval_count??this.estimateTokens(JSON.stringify(b)),p=y.eval_count??this.estimateTokens(h)}else{let b=e?.systemPrompt?`${e.systemPrompt}
36
+ `]});return{completion:r.content,model:r.model,provider:"openai",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["gpt-6-sol","gpt-6-luna","gpt-6-astra","gpt-5.6-sol","gpt-5.6-luna","gpt-5.4-mini"]}getCostPerToken(){return _.getCostPerToken(this.config.model)}async dispose(){}getApiKey(){return this.config.apiKey??process.env.OPENAI_API_KEY}getBaseUrl(){return(this.config.baseUrl??"https://api.openai.com").replace(/\/$/,"")}getHeaders(){let t={"Content-Type":"application/json",Authorization:`Bearer ${this.getApiKey()}`};return this.config.organization&&(t["OpenAI-Organization"]=this.config.organization),t}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content_filter";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error",s=e.error?.type??"",n=e.error?.code??"";switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"openai",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"openai",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw n==="context_length_exceeded"||s==="invalid_request_error"?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"openai",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"openai",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"openai",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"openai",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"openai",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};x();U();je();var q={DEFAULT_TOK_PER_SEC:15,SAFETY_FACTOR:2.5,LOAD_OVERHEAD_MS:15e3,FLOOR_MS:3e4,CEIL_MS:6e5};function Ke(g,t=q.DEFAULT_TOK_PER_SEC){let e=t>0?t:q.DEFAULT_TOK_PER_SEC,o=Math.max(0,g)/e*1e3*q.SAFETY_FACTOR+q.LOAD_OVERHEAD_MS;return Math.min(q.CEIL_MS,Math.max(q.FLOOR_MS,Math.round(o)))}var qe={model:"qwen3-coder:30b",baseUrl:he("http://localhost:11434"),maxTokens:4096,temperature:.7,timeoutMs:12e4,maxRetries:2,contextLength:4096,keepAlive:"5m",enableCache:!0,enableCircuitBreaker:!0},ne=class{type="ollama";name="Ollama (Local)";config;requestId=0;availableModels=[];installedTags=[];observedTokPerSec=new Map;constructor(t={}){this.config={...qe,...t}}timeoutFor(t,e){let r=this.config.timeoutMs;return r&&r!==qe.timeoutMs?r:Ke(e,this.observedTokPerSec.get(t))}recordThroughput(t,e,r){if(!e||!r||r<=0)return;let o=e/(r/1e9);if(!Number.isFinite(o)||o<=0)return;let s=this.observedTokPerSec.get(t);this.observedTokPerSec.set(t,s?s*.5+o*.5:o)}async isAvailable(){try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){let t=Date.now();try{let e=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/tags`,{method:"GET",headers:{"Content-Type":"application/json"}},5e3),r=Date.now()-t;if(!e.ok)return{healthy:!1,latencyMs:r,error:`Ollama server returned ${e.status}`};let o=await e.json();this.installedTags=o.models?.map(i=>i.name)??[],this.availableModels=this.installedTags.map(i=>i.split(":")[0]);let s=this.config.model;return!(s.includes(":")?this.installedTags.includes(s):this.availableModels.includes(s))&&this.availableModels.length>0?{healthy:!0,latencyMs:r,models:this.availableModels,details:{warning:`Configured model '${this.config.model}' not found. Available: ${this.availableModels.join(", ")}`,defaultModel:this.config.model}}:{healthy:!0,latencyMs:r,models:this.availableModels,details:{defaultModel:this.config.model,modelCount:this.availableModels.length}}}catch(e){return{healthy:!1,error:`Ollama not running. Start with: ollama serve. Error: ${e instanceof Error?e.message:"Unknown"}`}}}async generate(t,e){let r=e?.model??this.config.model,o=e?.maxTokens??this.config.maxTokens??4096,s=e?.temperature??this.config.temperature??.7,n=`ollama-${++this.requestId}-${Date.now()}`,i=Date.now(),l=Array.isArray(t);try{let d,h,c,p;if(l){let b=this.formatMessages(t,e?.systemPrompt);if(d=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:r,messages:b,stream:!1,options:{temperature:s,num_predict:o,stop:e?.stopSequences}})},e?.timeoutMs??this.timeoutFor(r,o)),!d.ok)throw await this.handleApiError(d,r);let y=await d.json();h=y.message.content,this.recordThroughput(r,y.eval_count,y.eval_duration),c=y.prompt_eval_count??this.estimateTokens(JSON.stringify(b)),p=y.eval_count??this.estimateTokens(h)}else{let b=e?.systemPrompt?`${e.systemPrompt}
37
37
 
38
38
  ${t}`:t;if(d=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/generate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:r,prompt:b,stream:!1,options:{temperature:s,num_predict:o,stop:e?.stopSequences}})},e?.timeoutMs??this.timeoutFor(r,o)),!d.ok)throw await this.handleApiError(d,r);let y=await d.json();h=y.response,this.recordThroughput(r,y.eval_count,y.eval_duration),c=y.prompt_eval_count??this.estimateTokens(b),p=y.eval_count??this.estimateTokens(h)}let m=Date.now()-i,u={promptTokens:c,completionTokens:p,totalTokens:c+p},f=_.calculateCost(r,u);return E.recordTokenUsage(n,"ollama-provider","llm","generate",{inputTokens:c,outputTokens:p,totalTokens:c+p,estimatedCostUsd:f.totalCost}),{content:h,model:r,provider:"ollama",usage:u,cost:f,latencyMs:m,finishReason:"stop",cached:!1,requestId:n}}catch(d){throw d instanceof Error&&"code"in d?d:a(d instanceof Error?d.message:"Request failed","NETWORK_ERROR",{provider:"ollama",model:r,retryable:!0,cause:d})}}async embed(t,e){let r=e?.model??"all-MiniLM-L6-v2",o=Date.now();try{let s=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/embeddings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:r,prompt:t})},e?.timeoutMs??3e4),n=Date.now()-o;if(!s.ok)throw await this.handleApiError(s,r);return{embedding:(await s.json()).embedding,model:r,provider:"ollama",tokenCount:this.estimateTokens(t),latencyMs:n,cached:!1}}catch(s){throw s instanceof Error&&"code"in s?s:a(s instanceof Error?s.message:"Embedding request failed","NETWORK_ERROR",{provider:"ollama",model:r,retryable:!0,cause:s})}}async complete(t,e){let r=e?.model??this.selectCodeModel(),o=await this.generate(t,{model:r,temperature:e?.temperature??.1,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
39
39
 
40
- `,"```","// ","# "]});return{completion:o.content,model:o.model,provider:"ollama",usage:o.usage,latencyMs:o.latencyMs,cached:o.cached}}getConfig(){return{...this.config}}getSupportedModels(){let t=["qwen3-coder:30b","qwen3:30b-a3b","gpt-oss:20b","gpt-oss:120b","llama4:scout","gemma4","nomic-embed-text"],e=new Set([...t,...this.availableModels]);return Array.from(e)}getCostPerToken(){return{input:0,output:0}}async dispose(){}async pullModel(t){try{let e=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/pull`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,stream:!1})},6e5);if(!e.ok){let r=await e.text();throw new Error(`Failed to pull model: ${r}`)}}catch(e){throw a(`Failed to pull model ${t}: ${e instanceof Error?e.message:"Unknown"}`,"MODEL_NOT_FOUND",{provider:"ollama",model:t,retryable:!0})}}getBaseUrl(){return(this.config.baseUrl??me()).replace(/\/$/,"")}formatMessages(t,e){let r=[];e&&r.push({role:"system",content:e});for(let o of t)r.push({role:o.role,content:o.content});return r}selectCodeModel(){let t=["qwen3-coder","gpt-oss","qwen3:30b-a3b","codellama"];for(let e of t){let r=this.installedTags.find(o=>o===e||o.startsWith(e));if(r)return r}return this.config.model}estimateTokens(t){return Math.ceil(t.length/4)}async handleApiError(t,e){let r=await t.text().catch(()=>"Unknown error");throw t.status===404?a(`Model '${e}' not found. Pull it with: ollama pull ${e}`,"MODEL_NOT_FOUND",{provider:"ollama",model:e,retryable:!1}):t.status===500?a(`Ollama server error: ${r}`,"PROVIDER_UNAVAILABLE",{provider:"ollama",model:e,retryable:!0,retryAfterMs:1e3}):a(`Ollama API error (${t.status}): ${r}`,"UNKNOWN",{provider:"ollama",model:e,retryable:!1})}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"ollama",retryable:!0}))}};I();x();Ee();U();var vt={model:"anthropic/claude-sonnet-5",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0,baseUrl:"https://openrouter.ai/api/v1",allowFallback:!1},qe={"anthropic/claude-sonnet-5":{input:2,output:10},"anthropic/claude-opus-5":{input:5,output:25},"anthropic/claude-opus-5.5":{input:4,output:20},"anthropic/claude-haiku-4.5":{input:1,output:5},"openai/gpt-6-astra":{input:10,output:50},"openai/gpt-6-sol":{input:2,output:10},"openai/gpt-6-luna":{input:.1,output:.5},"openai/gpt-oss-120b":{input:.15,output:.6},"google/gemini-3.8-flash":{input:.75,output:3.75},"google/gemini-3.5-flash":{input:1.5,output:9},"google/gemini-3.5-flash-lite":{input:.3,output:2.5},"google/gemini-3.1-pro-preview":{input:2,output:12},"google/gemini-2.5-pro":{input:1.25,output:10},"google/gemini-2.5-flash":{input:.3,output:2.5},"meta-llama/llama-4-maverick":{input:.1875,output:.6525},"meta-llama/llama-4-scout":{input:.1,output:.3},"mistralai/mistral-large-2512":{input:.5,output:1.5},"deepseek/deepseek-v4-pro":{input:.348,output:.696},"deepseek/deepseek-v4.1-flash":{input:.035,output:.29},"qwen/qwen3-coder":{input:.3,output:1},"openai/gpt-oss-20b":{input:.018,output:.09},"anthropic/claude-3.5-sonnet":{input:3,output:15},"anthropic/claude-3.5-sonnet:beta":{input:3,output:15},"anthropic/claude-3-opus":{input:15,output:75},"anthropic/claude-3-sonnet":{input:3,output:15},"anthropic/claude-3-haiku":{input:.25,output:1.25},"openai/gpt-4o":{input:5,output:15},"openai/gpt-4o-mini":{input:.15,output:.6},"openai/gpt-4-turbo":{input:10,output:30},"openai/gpt-3.5-turbo":{input:.5,output:1.5},"google/gemini-pro":{input:.125,output:.375},"google/gemini-pro-1.5":{input:3.5,output:10.5},"meta-llama/llama-3.1-70b-instruct":{input:.59,output:.79},"meta-llama/llama-3.1-8b-instruct":{input:.06,output:.06},"mistralai/mistral-large":{input:2,output:6},"mistralai/mixtral-8x7b-instruct":{input:.24,output:.24},"mistralai/mistral-7b-instruct":{input:.06,output:.06},default:{input:1,output:3}};function Be(g){return qe[g]??_e(g)??qe.default}var ne=class{type="openrouter";name="OpenRouter";config;requestId=0;cachedModels=null;constructor(t={}){this.config={...vt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set OPENROUTER_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/models`,{method:"GET",headers:this.getHeaders()},5e3),o=Date.now()-e;if(!r.ok){let i=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${i}`}}let n=(await r.json()).data?.map(i=>i.id)||[];return this.cachedModels=n,{healthy:!0,latencyMs:o,models:n.slice(0,20),details:{totalModels:n.length,defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("OpenRouter API key not configured","API_KEY_MISSING",{provider:"openrouter",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`openrouter-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,temperature:i,messages:o};e?.stopSequences&&e.stopSequences.length>0&&(h.stop=e.stopSequences),this.config.allowFallback!==void 0&&(h.route=this.config.allowFallback?"fallback":void 0),this.config.forceProvider&&(h.provider={order:[this.config.forceProvider]});try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let y=await c.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(c.status,y,s)}let m=await c.json(),u={promptTokens:m.usage?.prompt_tokens??0,completionTokens:m.usage?.completion_tokens??0,totalTokens:m.usage?.total_tokens??0},f=this.calculateCost(s,u);return E.recordTokenUsage(l,"openrouter-provider","llm","generate",{inputTokens:u.promptTokens,outputTokens:u.completionTokens,totalTokens:u.totalTokens,estimatedCostUsd:f.totalCost}),{content:m.choices[0]?.message?.content??"",model:m.model,provider:"openrouter",usage:u,cost:f,latencyMs:p,finishReason:this.mapFinishReason(m.choices[0]?.finish_reason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"openrouter",model:s,retryable:!0,cause:c})}}async*generateStream(t,e){if(!this.getApiKey())throw a("OpenRouter API key not configured","API_KEY_MISSING",{provider:"openrouter",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`openrouter-stream-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,temperature:i,messages:o,stream:!0};e?.stopSequences&&e.stopSequences.length>0&&(h.stop=e.stopSequences);let c=await this.fetchWithTimeout(`${this.getBaseUrl()}/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,"idle");if(!c.ok){let T=await c.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(c.status,T,s)}if(!c.body)throw a("No response body for streaming","NETWORK_ERROR",{provider:"openrouter",model:s,retryable:!0});let p="",m="stop",u=s,f=c.body.getReader(),b=new TextDecoder,y="";try{for(;;){let{done:T,value:M}=await f.read();if(T)break;y+=b.decode(M,{stream:!0});let D=y.split(`
41
- `);y=D.pop()||"";for(let O of D){let N=O.trim();if(!N||!N.startsWith("data:"))continue;let $=N.slice(5).trimStart();if($!=="[DONE]"&&N.startsWith("data:"))try{let B=z($),ue=B.choices[0]?.delta;ue?.content&&(p+=ue.content,yield ue.content),B.choices[0]?.finish_reason&&(m=this.mapFinishReason(B.choices[0].finish_reason)),B.model&&(u=B.model)}catch{}}}}finally{await f.cancel().catch(()=>{}),f.releaseLock()}let k=Date.now()-d,v=Math.ceil(JSON.stringify(o).length/4),P=Math.ceil(p.length/4),w={promptTokens:v,completionTokens:P,totalTokens:v+P},S=this.calculateCost(s,w);return E.recordTokenUsage(l,"openrouter-provider","llm","generate-stream",{inputTokens:w.promptTokens,outputTokens:w.completionTokens,totalTokens:w.totalTokens,estimatedCostUsd:S.totalCost}),{content:p,model:u,provider:"openrouter",usage:w,cost:S,latencyMs:k,finishReason:m,cached:!1,requestId:l}}async embed(t,e){if(!this.getApiKey())throw a("OpenRouter API key not configured","API_KEY_MISSING",{provider:"openrouter",retryable:!1});let o=e?.model??"openai/text-embedding-3-small",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/embeddings`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:o,input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok){let d=await n.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(n.status,d,o)}let l=await n.json();return{embedding:l.data[0].embedding,model:l.model,provider:"openrouter",tokenCount:l.usage.total_tokens,latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"openrouter",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
40
+ `,"```","// ","# "]});return{completion:o.content,model:o.model,provider:"ollama",usage:o.usage,latencyMs:o.latencyMs,cached:o.cached}}getConfig(){return{...this.config}}getSupportedModels(){let t=["qwen3-coder:30b","qwen3:30b-a3b","gpt-oss:20b","gpt-oss:120b","llama4:scout","gemma4","nomic-embed-text"],e=new Set([...t,...this.availableModels]);return Array.from(e)}getCostPerToken(){return{input:0,output:0}}async dispose(){}async pullModel(t){try{let e=await this.fetchWithTimeout(`${this.getBaseUrl()}/api/pull`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,stream:!1})},6e5);if(!e.ok){let r=await e.text();throw new Error(`Failed to pull model: ${r}`)}}catch(e){throw a(`Failed to pull model ${t}: ${e instanceof Error?e.message:"Unknown"}`,"MODEL_NOT_FOUND",{provider:"ollama",model:t,retryable:!0})}}getBaseUrl(){return(this.config.baseUrl??he()).replace(/\/$/,"")}formatMessages(t,e){let r=[];e&&r.push({role:"system",content:e});for(let o of t)r.push({role:o.role,content:o.content});return r}selectCodeModel(){let t=["qwen3-coder","gpt-oss","qwen3:30b-a3b","codellama"];for(let e of t){let r=this.installedTags.find(o=>o===e||o.startsWith(e));if(r)return r}return this.config.model}estimateTokens(t){return Math.ceil(t.length/4)}async handleApiError(t,e){let r=await t.text().catch(()=>"Unknown error");throw t.status===404?a(`Model '${e}' not found. Pull it with: ollama pull ${e}`,"MODEL_NOT_FOUND",{provider:"ollama",model:e,retryable:!1}):t.status===500?a(`Ollama server error: ${r}`,"PROVIDER_UNAVAILABLE",{provider:"ollama",model:e,retryable:!0,retryAfterMs:1e3}):a(`Ollama API error (${t.status}): ${r}`,"UNKNOWN",{provider:"ollama",model:e,retryable:!1})}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"ollama",retryable:!0}))}};I();x();Ee();U();var kt={model:"anthropic/claude-sonnet-5",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0,baseUrl:"https://openrouter.ai/api/v1",allowFallback:!1},Be={"anthropic/claude-sonnet-5":{input:2,output:10},"anthropic/claude-opus-5":{input:5,output:25},"anthropic/claude-opus-5.5":{input:4,output:20},"anthropic/claude-haiku-4.5":{input:1,output:5},"openai/gpt-6-astra":{input:10,output:50},"openai/gpt-6-sol":{input:2,output:10},"openai/gpt-6-luna":{input:.1,output:.5},"openai/gpt-oss-120b":{input:.15,output:.6},"google/gemini-3.8-flash":{input:.75,output:3.75},"google/gemini-3.5-flash":{input:1.5,output:9},"google/gemini-3.5-flash-lite":{input:.3,output:2.5},"google/gemini-3.1-pro-preview":{input:2,output:12},"google/gemini-2.5-pro":{input:1.25,output:10},"google/gemini-2.5-flash":{input:.3,output:2.5},"meta-llama/llama-4-maverick":{input:.1875,output:.6525},"meta-llama/llama-4-scout":{input:.1,output:.3},"mistralai/mistral-large-2512":{input:.5,output:1.5},"deepseek/deepseek-v4-pro":{input:.348,output:.696},"deepseek/deepseek-v4.1-flash":{input:.035,output:.29},"qwen/qwen3-coder":{input:.3,output:1},"openai/gpt-oss-20b":{input:.018,output:.09},"anthropic/claude-3.5-sonnet":{input:3,output:15},"anthropic/claude-3.5-sonnet:beta":{input:3,output:15},"anthropic/claude-3-opus":{input:15,output:75},"anthropic/claude-3-sonnet":{input:3,output:15},"anthropic/claude-3-haiku":{input:.25,output:1.25},"openai/gpt-4o":{input:5,output:15},"openai/gpt-4o-mini":{input:.15,output:.6},"openai/gpt-4-turbo":{input:10,output:30},"openai/gpt-3.5-turbo":{input:.5,output:1.5},"google/gemini-pro":{input:.125,output:.375},"google/gemini-pro-1.5":{input:3.5,output:10.5},"meta-llama/llama-3.1-70b-instruct":{input:.59,output:.79},"meta-llama/llama-3.1-8b-instruct":{input:.06,output:.06},"mistralai/mistral-large":{input:2,output:6},"mistralai/mixtral-8x7b-instruct":{input:.24,output:.24},"mistralai/mistral-7b-instruct":{input:.06,output:.06},default:{input:1,output:3}};function Fe(g){return Be[g]??Ae(g)??Be.default}var ie=class{type="openrouter";name="OpenRouter";config;requestId=0;cachedModels=null;constructor(t={}){this.config={...kt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getApiKey())return{healthy:!1,error:"API key not configured. Set OPENROUTER_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/models`,{method:"GET",headers:this.getHeaders()},5e3),o=Date.now()-e;if(!r.ok){let i=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${i}`}}let n=(await r.json()).data?.map(i=>i.id)||[];return this.cachedModels=n,{healthy:!0,latencyMs:o,models:n.slice(0,20),details:{totalModels:n.length,defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getApiKey())throw a("OpenRouter API key not configured","API_KEY_MISSING",{provider:"openrouter",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`openrouter-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,temperature:i,messages:o};e?.stopSequences&&e.stopSequences.length>0&&(h.stop=e.stopSequences),this.config.allowFallback!==void 0&&(h.route=this.config.allowFallback?"fallback":void 0),this.config.forceProvider&&(h.provider={order:[this.config.forceProvider]});try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let y=await c.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(c.status,y,s)}let m=await c.json(),u={promptTokens:m.usage?.prompt_tokens??0,completionTokens:m.usage?.completion_tokens??0,totalTokens:m.usage?.total_tokens??0},f=this.calculateCost(s,u);return E.recordTokenUsage(l,"openrouter-provider","llm","generate",{inputTokens:u.promptTokens,outputTokens:u.completionTokens,totalTokens:u.totalTokens,estimatedCostUsd:f.totalCost}),{content:m.choices[0]?.message?.content??"",model:m.model,provider:"openrouter",usage:u,cost:f,latencyMs:p,finishReason:this.mapFinishReason(m.choices[0]?.finish_reason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"openrouter",model:s,retryable:!0,cause:c})}}async*generateStream(t,e){if(!this.getApiKey())throw a("OpenRouter API key not configured","API_KEY_MISSING",{provider:"openrouter",retryable:!1});let o=this.formatMessages(t,e?.systemPrompt),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??4096,i=e?.temperature??this.config.temperature??.7,l=`openrouter-stream-${++this.requestId}-${Date.now()}`,d=Date.now(),h={model:s,max_tokens:n,temperature:i,messages:o,stream:!0};e?.stopSequences&&e.stopSequences.length>0&&(h.stop=e.stopSequences);let c=await this.fetchWithTimeout(`${this.getBaseUrl()}/chat/completions`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,"idle");if(!c.ok){let T=await c.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(c.status,T,s)}if(!c.body)throw a("No response body for streaming","NETWORK_ERROR",{provider:"openrouter",model:s,retryable:!0});let p="",m="stop",u=s,f=c.body.getReader(),b=new TextDecoder,y="";try{for(;;){let{done:T,value:M}=await f.read();if(T)break;y+=b.decode(M,{stream:!0});let D=y.split(`
41
+ `);y=D.pop()||"";for(let O of D){let N=O.trim();if(!N||!N.startsWith("data:"))continue;let $=N.slice(5).trimStart();if($!=="[DONE]"&&N.startsWith("data:"))try{let B=z($),pe=B.choices[0]?.delta;pe?.content&&(p+=pe.content,yield pe.content),B.choices[0]?.finish_reason&&(m=this.mapFinishReason(B.choices[0].finish_reason)),B.model&&(u=B.model)}catch{}}}}finally{await f.cancel().catch(()=>{}),f.releaseLock()}let k=Date.now()-d,v=Math.ceil(JSON.stringify(o).length/4),P=Math.ceil(p.length/4),w={promptTokens:v,completionTokens:P,totalTokens:v+P},S=this.calculateCost(s,w);return E.recordTokenUsage(l,"openrouter-provider","llm","generate-stream",{inputTokens:w.promptTokens,outputTokens:w.completionTokens,totalTokens:w.totalTokens,estimatedCostUsd:S.totalCost}),{content:p,model:u,provider:"openrouter",usage:w,cost:S,latencyMs:k,finishReason:m,cached:!1,requestId:l}}async embed(t,e){if(!this.getApiKey())throw a("OpenRouter API key not configured","API_KEY_MISSING",{provider:"openrouter",retryable:!1});let o=e?.model??"openai/text-embedding-3-small",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/embeddings`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({model:o,input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok){let d=await n.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(n.status,d,o)}let l=await n.json();return{embedding:l.data[0].embedding,model:l.model,provider:"openrouter",tokenCount:l.usage.total_tokens,latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"openrouter",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
42
42
 
43
- `]});return{completion:r.content,model:r.model,provider:"openrouter",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return this.cachedModels?this.cachedModels:["anthropic/claude-sonnet-5","anthropic/claude-opus-5.5","anthropic/claude-opus-5","anthropic/claude-haiku-4.5","openai/gpt-6-sol","openai/gpt-6-luna","openai/gpt-6-astra","google/gemini-3.8-flash","google/gemini-3.1-pro-preview","google/gemini-2.5-flash","meta-llama/llama-4-maverick","deepseek/deepseek-v4-pro","qwen/qwen3-coder","mistralai/mistral-large-2512","openai/gpt-oss-120b"]}getCostPerToken(){let t=Be(this.config.model);return{input:t.input/1e6,output:t.output/1e6}}async dispose(){this.cachedModels=null}calculateCost(t,e){let r=Be(t),o=e.promptTokens/1e6*r.input,s=e.completionTokens/1e6*r.output;return{inputCost:o,outputCost:s,totalCost:o+s,currency:"USD"}}getApiKey(){return this.config.apiKey??process.env.OPENROUTER_API_KEY}getBaseUrl(){return(this.config.baseUrl??"https://openrouter.ai/api/v1").replace(/\/$/,"")}getHeaders(){let t={"Content-Type":"application/json",Authorization:`Bearer ${this.getApiKey()}`};return this.config.siteUrl&&(t["HTTP-Referer"]=this.config.siteUrl),this.config.siteName&&(t["X-Title"]=this.config.siteName),t}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content_filter";case"tool_calls":return"stop";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error",s=e.error?.type??"",n=e.error?.code;switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"openrouter",model:r,retryable:!1});case 402:throw a(o,"COST_LIMIT_EXCEEDED",{provider:"openrouter",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"openrouter",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw n==="context_length_exceeded"||s==="invalid_request_error"?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"openrouter",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"openrouter",model:r,retryable:!1});case 404:throw a(o,"MODEL_NOT_FOUND",{provider:"openrouter",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"openrouter",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"openrouter",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r,o="absolute"){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"openrouter",retryable:!0}),o)}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};I();x();Ee();var Tt={model:"gemini-2.5-flash",maxTokens:8192,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0,baseUrl:"https://generativelanguage.googleapis.com/v1beta",safetyThreshold:"BLOCK_MEDIUM_AND_ABOVE"},ie={"gemini-3.8-flash":{input:.75,output:3.75},"gemini-3.5-flash":{input:1.5,output:9},"gemini-3.5-flash-lite":{input:.3,output:2.5},"gemini-3.1-pro-preview":{input:2,output:12},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:.3,output:2.5},"gemini-flash-latest":{input:.3,output:2.5},"gemini-pro":{input:.5,output:1.5},"gemini-1.0-pro":{input:.5,output:1.5},"gemini-1.5-pro":{input:3.5,output:10.5},"gemini-1.5-pro-latest":{input:3.5,output:10.5},"gemini-1.5-flash":{input:.075,output:.3},"gemini-1.5-flash-latest":{input:.075,output:.3},"gemini-2.0-flash-exp":{input:.075,output:.3},"gemini-ultra":{input:7,output:21},"gemini-1.0-ultra":{input:7,output:21},default:{input:1,output:3}},ae=class{type="gemini";name="Google Gemini";config;requestId=0;cachedModels=null;constructor(t={}){this.config={...Tt,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){let t=this.getApiKey();if(!t)return{healthy:!1,error:"API key not configured. Set GOOGLE_AI_API_KEY, GEMINI_API_KEY, or GOOGLE_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/models?key=${t}`,{method:"GET",headers:{"Content-Type":"application/json"}},5e3),o=Date.now()-e;if(!r.ok){let i=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${i}`}}let n=(await r.json()).models?.filter(i=>i.supportedGenerationMethods?.includes("generateContent")).map(i=>i.name.replace("models/",""))||[];return this.cachedModels=n,{healthy:!0,latencyMs:o,models:n.slice(0,20),details:{totalModels:n.length,defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){let r=this.getApiKey();if(!r)throw a("Gemini API key not configured","API_KEY_MISSING",{provider:"gemini",retryable:!1});let o=this.formatContents(t),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??8192,i=e?.temperature??this.config.temperature??.7,l=`gemini-${++this.requestId}-${Date.now()}`,d=Date.now(),h={contents:o,generationConfig:{maxOutputTokens:n,temperature:i,topP:this.config.topP}};e?.systemPrompt&&(h.systemInstruction={parts:[{text:e.systemPrompt}]}),e?.stopSequences&&e.stopSequences.length>0&&(h.generationConfig.stopSequences=e.stopSequences);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/models/${s}:generateContent?key=${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let v=await c.json().catch(()=>({error:{message:"Unknown error",code:0,status:"UNKNOWN"}}));throw this.handleApiError(c.status,v,s)}let m=await c.json(),u={promptTokens:m.usageMetadata?.promptTokenCount??0,completionTokens:m.usageMetadata?.candidatesTokenCount??0,totalTokens:m.usageMetadata?.totalTokenCount??0},f=this.calculateCost(s,u);E.recordTokenUsage(l,"gemini-provider","llm","generate",{inputTokens:u.promptTokens,outputTokens:u.completionTokens,totalTokens:u.totalTokens,estimatedCostUsd:f.totalCost});let b=this.isPromptBlocked(m.promptFeedback),y=b?void 0:m.candidates[0];return{content:y?.content?.parts?.map(v=>v.text??"").join("")??"",model:m.modelVersion??s,provider:"gemini",usage:u,cost:f,latencyMs:p,finishReason:b?"content_filter":this.mapFinishReason(y?.finishReason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"gemini",model:s,retryable:!0,cause:c})}}async*generateStream(t,e){let r=this.getApiKey();if(!r)throw a("Gemini API key not configured","API_KEY_MISSING",{provider:"gemini",retryable:!1});let o=this.formatContents(t),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??8192,i=e?.temperature??this.config.temperature??.7,l=`gemini-stream-${++this.requestId}-${Date.now()}`,d=Date.now(),h={contents:o,generationConfig:{maxOutputTokens:n,temperature:i}};e?.systemPrompt&&(h.systemInstruction={parts:[{text:e.systemPrompt}]});let c=await this.fetchWithTimeout(`${this.getBaseUrl()}/models/${s}:streamGenerateContent?key=${r}&alt=sse`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,"idle");if(!c.ok){let w=await c.json().catch(()=>({error:{message:"Unknown error",code:0,status:"UNKNOWN"}}));throw this.handleApiError(c.status,w,s)}if(!c.body)throw a("No response body for streaming","NETWORK_ERROR",{provider:"gemini",model:s,retryable:!0});let p="",m="stop",u={promptTokens:0,completionTokens:0,totalTokens:0},f=c.body.getReader(),b=new TextDecoder,y="";try{for(;;){let{done:w,value:S}=await f.read();if(w)break;y+=b.decode(S,{stream:!0});let T=y.split(`
43
+ `]});return{completion:r.content,model:r.model,provider:"openrouter",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return this.cachedModels?this.cachedModels:["anthropic/claude-sonnet-5","anthropic/claude-opus-5.5","anthropic/claude-opus-5","anthropic/claude-haiku-4.5","openai/gpt-6-sol","openai/gpt-6-luna","openai/gpt-6-astra","google/gemini-3.8-flash","google/gemini-3.1-pro-preview","google/gemini-2.5-flash","meta-llama/llama-4-maverick","deepseek/deepseek-v4-pro","qwen/qwen3-coder","mistralai/mistral-large-2512","openai/gpt-oss-120b"]}getCostPerToken(){let t=Fe(this.config.model);return{input:t.input/1e6,output:t.output/1e6}}async dispose(){this.cachedModels=null}calculateCost(t,e){let r=Fe(t),o=e.promptTokens/1e6*r.input,s=e.completionTokens/1e6*r.output;return{inputCost:o,outputCost:s,totalCost:o+s,currency:"USD"}}getApiKey(){return this.config.apiKey??process.env.OPENROUTER_API_KEY}getBaseUrl(){return(this.config.baseUrl??"https://openrouter.ai/api/v1").replace(/\/$/,"")}getHeaders(){let t={"Content-Type":"application/json",Authorization:`Bearer ${this.getApiKey()}`};return this.config.siteUrl&&(t["HTTP-Referer"]=this.config.siteUrl),this.config.siteName&&(t["X-Title"]=this.config.siteName),t}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content_filter";case"tool_calls":return"stop";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error",s=e.error?.type??"",n=e.error?.code;switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"openrouter",model:r,retryable:!1});case 402:throw a(o,"COST_LIMIT_EXCEEDED",{provider:"openrouter",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"openrouter",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw n==="context_length_exceeded"||s==="invalid_request_error"?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"openrouter",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"openrouter",model:r,retryable:!1});case 404:throw a(o,"MODEL_NOT_FOUND",{provider:"openrouter",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"openrouter",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"openrouter",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r,o="absolute"){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"openrouter",retryable:!0}),o)}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};I();x();Ee();var Et={model:"gemini-2.5-flash",maxTokens:8192,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0,baseUrl:"https://generativelanguage.googleapis.com/v1beta",safetyThreshold:"BLOCK_MEDIUM_AND_ABOVE"},ae={"gemini-3.8-flash":{input:.75,output:3.75},"gemini-3.5-flash":{input:1.5,output:9},"gemini-3.5-flash-lite":{input:.3,output:2.5},"gemini-3.1-pro-preview":{input:2,output:12},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:.3,output:2.5},"gemini-flash-latest":{input:.3,output:2.5},"gemini-pro":{input:.5,output:1.5},"gemini-1.0-pro":{input:.5,output:1.5},"gemini-1.5-pro":{input:3.5,output:10.5},"gemini-1.5-pro-latest":{input:3.5,output:10.5},"gemini-1.5-flash":{input:.075,output:.3},"gemini-1.5-flash-latest":{input:.075,output:.3},"gemini-2.0-flash-exp":{input:.075,output:.3},"gemini-ultra":{input:7,output:21},"gemini-1.0-ultra":{input:7,output:21},default:{input:1,output:3}},ce=class{type="gemini";name="Google Gemini";config;requestId=0;cachedModels=null;constructor(t={}){this.config={...Et,...t}}async isAvailable(){if(!this.getApiKey())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){let t=this.getApiKey();if(!t)return{healthy:!1,error:"API key not configured. Set GOOGLE_AI_API_KEY, GEMINI_API_KEY, or GOOGLE_API_KEY environment variable."};let e=Date.now();try{let r=await this.fetchWithTimeout(`${this.getBaseUrl()}/models?key=${t}`,{method:"GET",headers:{"Content-Type":"application/json"}},5e3),o=Date.now()-e;if(!r.ok){let i=await r.text();return{healthy:!1,latencyMs:o,error:`API error: ${r.status} - ${i}`}}let n=(await r.json()).models?.filter(i=>i.supportedGenerationMethods?.includes("generateContent")).map(i=>i.name.replace("models/",""))||[];return this.cachedModels=n,{healthy:!0,latencyMs:o,models:n.slice(0,20),details:{totalModels:n.length,defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){let r=this.getApiKey();if(!r)throw a("Gemini API key not configured","API_KEY_MISSING",{provider:"gemini",retryable:!1});let o=this.formatContents(t),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??8192,i=e?.temperature??this.config.temperature??.7,l=`gemini-${++this.requestId}-${Date.now()}`,d=Date.now(),h={contents:o,generationConfig:{maxOutputTokens:n,temperature:i,topP:this.config.topP}};e?.systemPrompt&&(h.systemInstruction={parts:[{text:e.systemPrompt}]}),e?.stopSequences&&e.stopSequences.length>0&&(h.generationConfig.stopSequences=e.stopSequences);try{let c=await this.fetchWithRetry(`${this.getBaseUrl()}/models/${s}:generateContent?key=${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),p=Date.now()-d;if(!c.ok){let v=await c.json().catch(()=>({error:{message:"Unknown error",code:0,status:"UNKNOWN"}}));throw this.handleApiError(c.status,v,s)}let m=await c.json(),u={promptTokens:m.usageMetadata?.promptTokenCount??0,completionTokens:m.usageMetadata?.candidatesTokenCount??0,totalTokens:m.usageMetadata?.totalTokenCount??0},f=this.calculateCost(s,u);E.recordTokenUsage(l,"gemini-provider","llm","generate",{inputTokens:u.promptTokens,outputTokens:u.completionTokens,totalTokens:u.totalTokens,estimatedCostUsd:f.totalCost});let b=this.isPromptBlocked(m.promptFeedback),y=b?void 0:m.candidates[0];return{content:y?.content?.parts?.map(v=>v.text??"").join("")??"",model:m.modelVersion??s,provider:"gemini",usage:u,cost:f,latencyMs:p,finishReason:b?"content_filter":this.mapFinishReason(y?.finishReason),cached:!1,requestId:l}}catch(c){throw c instanceof Error&&"code"in c?c:a(c instanceof Error?c.message:"Request failed","NETWORK_ERROR",{provider:"gemini",model:s,retryable:!0,cause:c})}}async*generateStream(t,e){let r=this.getApiKey();if(!r)throw a("Gemini API key not configured","API_KEY_MISSING",{provider:"gemini",retryable:!1});let o=this.formatContents(t),s=e?.model??this.config.model,n=e?.maxTokens??this.config.maxTokens??8192,i=e?.temperature??this.config.temperature??.7,l=`gemini-stream-${++this.requestId}-${Date.now()}`,d=Date.now(),h={contents:o,generationConfig:{maxOutputTokens:n,temperature:i}};e?.systemPrompt&&(h.systemInstruction={parts:[{text:e.systemPrompt}]});let c=await this.fetchWithTimeout(`${this.getBaseUrl()}/models/${s}:streamGenerateContent?key=${r}&alt=sse`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)},e?.timeoutMs??this.config.timeoutMs??6e4,"idle");if(!c.ok){let w=await c.json().catch(()=>({error:{message:"Unknown error",code:0,status:"UNKNOWN"}}));throw this.handleApiError(c.status,w,s)}if(!c.body)throw a("No response body for streaming","NETWORK_ERROR",{provider:"gemini",model:s,retryable:!0});let p="",m="stop",u={promptTokens:0,completionTokens:0,totalTokens:0},f=c.body.getReader(),b=new TextDecoder,y="";try{for(;;){let{done:w,value:S}=await f.read();if(w)break;y+=b.decode(S,{stream:!0});let T=y.split(`
44
44
  `);y=T.pop()||"";for(let M of T){let D=M.trim();if(!(!D||!D.startsWith("data:")))try{let O=z(D.slice(5).trimStart()),N=O.candidates?.[0]?.content?.parts?.map($=>$.text??"").join("")??"";N&&(p+=N,yield N),this.isPromptBlocked(O.promptFeedback)?m="content_filter":O.candidates?.[0]?.finishReason&&(m=this.mapFinishReason(O.candidates[0].finishReason)),O.usageMetadata&&(u={promptTokens:O.usageMetadata.promptTokenCount,completionTokens:O.usageMetadata.candidatesTokenCount,totalTokens:O.usageMetadata.totalTokenCount})}catch{}}}}finally{await f.cancel().catch(()=>{}),f.releaseLock()}let k=Date.now()-d,v=u.totalTokens>0?u:{promptTokens:Math.ceil(JSON.stringify(o).length/4),completionTokens:Math.ceil(p.length/4),totalTokens:0};v.totalTokens=v.promptTokens+v.completionTokens;let P=this.calculateCost(s,v);return E.recordTokenUsage(l,"gemini-provider","llm","generate-stream",{inputTokens:v.promptTokens,outputTokens:v.completionTokens,totalTokens:v.totalTokens,estimatedCostUsd:P.totalCost}),{content:p,model:s,provider:"gemini",usage:v,cost:P,latencyMs:k,finishReason:m,cached:!1,requestId:l}}async embed(t,e){let r=this.getApiKey();if(!r)throw a("Gemini API key not configured","API_KEY_MISSING",{provider:"gemini",retryable:!1});let o=e?.model??"text-embedding-004",s=Date.now();try{let n=await this.fetchWithTimeout(`${this.getBaseUrl()}/models/${o}:embedContent?key=${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:{parts:[{text:t}]}})},e?.timeoutMs??this.config.timeoutMs??3e4),i=Date.now()-s;if(!n.ok){let d=await n.json().catch(()=>({error:{message:"Unknown error",code:0,status:"UNKNOWN"}}));throw this.handleApiError(n.status,d,o)}return{embedding:(await n.json()).embedding.values,model:o,provider:"gemini",tokenCount:Math.ceil(t.length/4),latencyMs:i,cached:!1}}catch(n){throw n instanceof Error&&"code"in n?n:a(n instanceof Error?n.message:"Embedding request failed","NETWORK_ERROR",{provider:"gemini",model:o,retryable:!0,cause:n})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
45
45
 
46
- `]});return{completion:r.content,model:r.model,provider:"gemini",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return this.cachedModels?this.cachedModels:["gemini-flash-latest","gemini-pro-latest","gemini-flash-lite-latest","gemini-3.8-flash","gemini-3.5-flash","gemini-3.5-flash-lite","gemini-3.1-pro-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash","gemini-2.0-flash-lite"]}getCostPerToken(){let t=ie[this.config.model]||ie.default;return{input:t.input/1e6,output:t.output/1e6}}async dispose(){this.cachedModels=null}calculateCost(t,e){let r=ie[t]||ie.default,o=e.promptTokens/1e6*r.input,s=e.completionTokens/1e6*r.output;return{inputCost:o,outputCost:s,totalCost:o+s,currency:"USD"}}getApiKey(){return this.config.apiKey??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??process.env.GOOGLE_API_KEY}getBaseUrl(){return(this.config.baseUrl??"https://generativelanguage.googleapis.com/v1beta").replace(/\/$/,"")}formatContents(t){return typeof t=="string"?[{role:"user",parts:[{text:t}]}]:t.filter(e=>e.role!=="system").map(e=>({role:e.role==="assistant"?"model":"user",parts:[{text:e.content}]}))}isPromptBlocked(t){return!!t?.blockReason&&t.blockReason!=="BLOCK_REASON_UNSPECIFIED"}mapFinishReason(t){switch(t){case"STOP":return"stop";case"MAX_TOKENS":return"length";case"SAFETY":return"content_filter";case"RECITATION":return"content_filter";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error";switch(t){case 400:throw o.includes("token")||o.includes("length")||o.includes("exceeds")?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"gemini",model:r,retryable:!1}):o.includes("API key")?a(o,"API_KEY_INVALID",{provider:"gemini",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"gemini",model:r,retryable:!1});case 401:case 403:throw a(o,"API_KEY_INVALID",{provider:"gemini",model:r,retryable:!1});case 404:throw a(o,"MODEL_NOT_FOUND",{provider:"gemini",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"gemini",model:r,retryable:!0,retryAfterMs:6e4});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"gemini",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"gemini",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r,o="absolute"){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"gemini",retryable:!0}),o)}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};U();ve();I();x();var kt={model:"gpt-4o",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0,apiVersion:"2024-02-15-preview"},ce=class{type="azure-openai";name="Azure OpenAI";config;requestId=0;explicitModel;constructor(t){this.config={...kt,...t},this.explicitModel=t.model}paramPolicyModel(t){return t??this.explicitModel??this.config.deploymentId}async isAvailable(){let t=this.getEndpoint(),e=this.getApiKey()||this.getAzureAdToken();if(!t||!e||!this.config.deploymentId)return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){let t=this.getEndpoint(),e=this.getApiKey()||this.getAzureAdToken();if(!t)return{healthy:!1,error:"Azure endpoint not configured. Set AZURE_OPENAI_ENDPOINT environment variable."};if(!e)return{healthy:!1,error:"Azure authentication not configured. Set AZURE_OPENAI_API_KEY or provide azureAdToken."};if(!this.config.deploymentId)return{healthy:!1,error:"Deployment ID not configured. Set AZURE_OPENAI_DEPLOYMENT or provide deploymentId."};let r=Date.now();try{let o=await this.fetchWithTimeout(this.buildUrl("chat/completions"),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(K({messages:[{role:"user",content:"Hi"}]},this.paramPolicyModel(),{maxTokens:1}))},5e3),s=Date.now()-r;if(!o.ok){let n=await o.text();return{healthy:!1,latencyMs:s,error:`API error: ${o.status} - ${n}`}}return{healthy:!0,latencyMs:s,models:this.getSupportedModels(),details:{endpoint:this.getEndpoint(),deploymentId:this.config.deploymentId,apiVersion:this.config.apiVersion,authType:this.getAzureAdToken()?"Azure AD":"API Key"}}}catch(o){return{healthy:!1,error:o instanceof Error?o.message:"Unknown error"}}}async generate(t,e){let r=this.getEndpoint(),o=this.getApiKey()||this.getAzureAdToken();if(!r||!o)throw a("Azure OpenAI not configured","API_KEY_MISSING",{provider:"azure-openai",retryable:!1});let s=this.formatMessages(t,e?.systemPrompt),n=e?.model??this.config.model??"gpt-4o",i=e?.maxTokens??this.config.maxTokens??4096,l=e?.temperature??this.config.temperature??.7,d=`azure-openai-${++this.requestId}-${Date.now()}`,h=Date.now(),c=K({messages:s},this.paramPolicyModel(e?.model),{maxTokens:i,temperature:l});e?.stopSequences&&e.stopSequences.length>0&&(c.stop=e.stopSequences),this.config.presencePenalty!==void 0&&(c.presence_penalty=this.config.presencePenalty),this.config.frequencyPenalty!==void 0&&(c.frequency_penalty=this.config.frequencyPenalty);try{let p=await this.fetchWithRetry(this.buildUrl("chat/completions"),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(c)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),m=Date.now()-h;if(!p.ok){let k=await p.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(p.status,k,n)}let u=await p.json(),f={promptTokens:u.usage.prompt_tokens,completionTokens:u.usage.completion_tokens,totalTokens:u.usage.total_tokens},b=_.calculateCost(n,f);return E.recordTokenUsage(d,"azure-openai-provider","llm","generate",{inputTokens:u.usage.prompt_tokens,outputTokens:u.usage.completion_tokens,totalTokens:u.usage.total_tokens,estimatedCostUsd:b.totalCost}),{content:u.choices[0]?.message?.content??"",model:u.model,provider:"azure-openai",usage:f,cost:b,latencyMs:m,finishReason:this.mapFinishReason(u.choices[0]?.finish_reason),cached:!1,requestId:d}}catch(p){throw p instanceof Error&&"code"in p?p:a(p instanceof Error?p.message:"Request failed","NETWORK_ERROR",{provider:"azure-openai",model:n,retryable:!0,cause:p})}}async embed(t,e){let r=this.getEndpoint(),o=this.getApiKey()||this.getAzureAdToken();if(!r||!o)throw a("Azure OpenAI not configured","API_KEY_MISSING",{provider:"azure-openai",retryable:!1});let s=e?.model??this.config.deploymentId,n=Date.now();try{let i=await this.fetchWithTimeout(this.buildUrl("embeddings",s),{method:"POST",headers:this.getHeaders(),body:JSON.stringify({input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),l=Date.now()-n;if(!i.ok){let h=await i.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(i.status,h,s)}let d=await i.json();return{embedding:d.data[0].embedding,model:d.model,provider:"azure-openai",tokenCount:d.usage.total_tokens,latencyMs:l,cached:!1}}catch(i){throw i instanceof Error&&"code"in i?i:a(i instanceof Error?i.message:"Embedding request failed","NETWORK_ERROR",{provider:"azure-openai",model:s,retryable:!0,cause:i})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
46
+ `]});return{completion:r.content,model:r.model,provider:"gemini",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return this.cachedModels?this.cachedModels:["gemini-flash-latest","gemini-pro-latest","gemini-flash-lite-latest","gemini-3.8-flash","gemini-3.5-flash","gemini-3.5-flash-lite","gemini-3.1-pro-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash","gemini-2.0-flash-lite"]}getCostPerToken(){let t=ae[this.config.model]||ae.default;return{input:t.input/1e6,output:t.output/1e6}}async dispose(){this.cachedModels=null}calculateCost(t,e){let r=ae[t]||ae.default,o=e.promptTokens/1e6*r.input,s=e.completionTokens/1e6*r.output;return{inputCost:o,outputCost:s,totalCost:o+s,currency:"USD"}}getApiKey(){return this.config.apiKey??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??process.env.GOOGLE_API_KEY}getBaseUrl(){return(this.config.baseUrl??"https://generativelanguage.googleapis.com/v1beta").replace(/\/$/,"")}formatContents(t){return typeof t=="string"?[{role:"user",parts:[{text:t}]}]:t.filter(e=>e.role!=="system").map(e=>({role:e.role==="assistant"?"model":"user",parts:[{text:e.content}]}))}isPromptBlocked(t){return!!t?.blockReason&&t.blockReason!=="BLOCK_REASON_UNSPECIFIED"}mapFinishReason(t){switch(t){case"STOP":return"stop";case"MAX_TOKENS":return"length";case"SAFETY":return"content_filter";case"RECITATION":return"content_filter";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error";switch(t){case 400:throw o.includes("token")||o.includes("length")||o.includes("exceeds")?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"gemini",model:r,retryable:!1}):o.includes("API key")?a(o,"API_KEY_INVALID",{provider:"gemini",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"gemini",model:r,retryable:!1});case 401:case 403:throw a(o,"API_KEY_INVALID",{provider:"gemini",model:r,retryable:!1});case 404:throw a(o,"MODEL_NOT_FOUND",{provider:"gemini",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"gemini",model:r,retryable:!0,retryAfterMs:6e4});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"gemini",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"gemini",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r,o="absolute"){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"gemini",retryable:!0}),o)}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};U();ve();I();x();var Ct={model:"gpt-4o",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0,apiVersion:"2024-02-15-preview"},le=class{type="azure-openai";name="Azure OpenAI";config;requestId=0;explicitModel;constructor(t){this.config={...Ct,...t},this.explicitModel=t.model}paramPolicyModel(t){return t??this.explicitModel??this.config.deploymentId}async isAvailable(){let t=this.getEndpoint(),e=this.getApiKey()||this.getAzureAdToken();if(!t||!e||!this.config.deploymentId)return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){let t=this.getEndpoint(),e=this.getApiKey()||this.getAzureAdToken();if(!t)return{healthy:!1,error:"Azure endpoint not configured. Set AZURE_OPENAI_ENDPOINT environment variable."};if(!e)return{healthy:!1,error:"Azure authentication not configured. Set AZURE_OPENAI_API_KEY or provide azureAdToken."};if(!this.config.deploymentId)return{healthy:!1,error:"Deployment ID not configured. Set AZURE_OPENAI_DEPLOYMENT or provide deploymentId."};let r=Date.now();try{let o=await this.fetchWithTimeout(this.buildUrl("chat/completions"),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(K({messages:[{role:"user",content:"Hi"}]},this.paramPolicyModel(),{maxTokens:1}))},5e3),s=Date.now()-r;if(!o.ok){let n=await o.text();return{healthy:!1,latencyMs:s,error:`API error: ${o.status} - ${n}`}}return{healthy:!0,latencyMs:s,models:this.getSupportedModels(),details:{endpoint:this.getEndpoint(),deploymentId:this.config.deploymentId,apiVersion:this.config.apiVersion,authType:this.getAzureAdToken()?"Azure AD":"API Key"}}}catch(o){return{healthy:!1,error:o instanceof Error?o.message:"Unknown error"}}}async generate(t,e){let r=this.getEndpoint(),o=this.getApiKey()||this.getAzureAdToken();if(!r||!o)throw a("Azure OpenAI not configured","API_KEY_MISSING",{provider:"azure-openai",retryable:!1});let s=this.formatMessages(t,e?.systemPrompt),n=e?.model??this.config.model??"gpt-4o",i=e?.maxTokens??this.config.maxTokens??4096,l=e?.temperature??this.config.temperature??.7,d=`azure-openai-${++this.requestId}-${Date.now()}`,h=Date.now(),c=K({messages:s},this.paramPolicyModel(e?.model),{maxTokens:i,temperature:l});e?.stopSequences&&e.stopSequences.length>0&&(c.stop=e.stopSequences),this.config.presencePenalty!==void 0&&(c.presence_penalty=this.config.presencePenalty),this.config.frequencyPenalty!==void 0&&(c.frequency_penalty=this.config.frequencyPenalty);try{let p=await this.fetchWithRetry(this.buildUrl("chat/completions"),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(c)},e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),m=Date.now()-h;if(!p.ok){let k=await p.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(p.status,k,n)}let u=await p.json(),f={promptTokens:u.usage.prompt_tokens,completionTokens:u.usage.completion_tokens,totalTokens:u.usage.total_tokens},b=_.calculateCost(n,f);return E.recordTokenUsage(d,"azure-openai-provider","llm","generate",{inputTokens:u.usage.prompt_tokens,outputTokens:u.usage.completion_tokens,totalTokens:u.usage.total_tokens,estimatedCostUsd:b.totalCost}),{content:u.choices[0]?.message?.content??"",model:u.model,provider:"azure-openai",usage:f,cost:b,latencyMs:m,finishReason:this.mapFinishReason(u.choices[0]?.finish_reason),cached:!1,requestId:d}}catch(p){throw p instanceof Error&&"code"in p?p:a(p instanceof Error?p.message:"Request failed","NETWORK_ERROR",{provider:"azure-openai",model:n,retryable:!0,cause:p})}}async embed(t,e){let r=this.getEndpoint(),o=this.getApiKey()||this.getAzureAdToken();if(!r||!o)throw a("Azure OpenAI not configured","API_KEY_MISSING",{provider:"azure-openai",retryable:!1});let s=e?.model??this.config.deploymentId,n=Date.now();try{let i=await this.fetchWithTimeout(this.buildUrl("embeddings",s),{method:"POST",headers:this.getHeaders(),body:JSON.stringify({input:t})},e?.timeoutMs??this.config.timeoutMs??3e4),l=Date.now()-n;if(!i.ok){let h=await i.json().catch(()=>({error:{message:"Unknown error",type:"unknown",code:null}}));throw this.handleApiError(i.status,h,s)}let d=await i.json();return{embedding:d.data[0].embedding,model:d.model,provider:"azure-openai",tokenCount:d.usage.total_tokens,latencyMs:l,cached:!1}}catch(i){throw i instanceof Error&&"code"in i?i:a(i instanceof Error?i.message:"Embedding request failed","NETWORK_ERROR",{provider:"azure-openai",model:s,retryable:!0,cause:i})}}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
47
47
 
48
- `]});return{completion:r.content,model:r.model,provider:"azure-openai",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["gpt-6-sol","gpt-6-luna","gpt-6-astra","gpt-5.4-mini","text-embedding-ada-002","text-embedding-3-small","text-embedding-3-large"]}getCostPerToken(){return _.getCostPerToken(this.config.model??"gpt-4o")}async dispose(){}getApiKey(){return this.config.apiKey??process.env.AZURE_OPENAI_API_KEY}getAzureAdToken(){return this.config.azureAdToken}getEndpoint(){return(this.config.endpoint??process.env.AZURE_OPENAI_ENDPOINT)?.replace(/\/$/,"")}getApiVersion(){return this.config.apiVersion??process.env.AZURE_OPENAI_API_VERSION??"2024-02-15-preview"}buildUrl(t,e){let r=this.getEndpoint(),o=e??this.config.deploymentId,s=this.getApiVersion();return`${r}/openai/deployments/${o}/${t}?api-version=${s}`}getHeaders(){let t={"Content-Type":"application/json"},e=this.getAzureAdToken();if(e)t.Authorization=`Bearer ${e}`;else{let r=this.getApiKey();r&&(t["api-key"]=r)}return t}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content_filter";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error",s=e.error?.code??"",n=e.error?.innererror?.code??"";switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"azure-openai",model:r,retryable:!1});case 403:throw a(o,"API_KEY_INVALID",{provider:"azure-openai",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"azure-openai",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw s==="context_length_exceeded"||n==="context_length_exceeded"?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"azure-openai",model:r,retryable:!1}):n==="content_filter"?a(o,"CONTENT_FILTERED",{provider:"azure-openai",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"azure-openai",model:r,retryable:!1});case 404:throw a(`Deployment not found: ${r}`,"MODEL_NOT_FOUND",{provider:"azure-openai",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"azure-openai",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"azure-openai",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"azure-openai",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};U();I();x();be();var Et={model:"anthropic.claude-sonnet-4-6-v1:0",region:"us-east-1",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0},Te={"claude-opus-4-7":"anthropic.claude-opus-4-7-v1:0","claude-sonnet-4-6":"anthropic.claude-sonnet-4-6-v1:0","claude-haiku-4-5-20251001":"anthropic.claude-haiku-4-5-v1:0","claude-haiku-4-5":"anthropic.claude-haiku-4-5-v1:0","claude-opus-4-5-20251101":"anthropic.claude-opus-4-5-v1:0","claude-opus-4-5":"anthropic.claude-opus-4-5-v1:0","claude-sonnet-4-5-20250929":"anthropic.claude-sonnet-4-5-v2:0","claude-sonnet-4-5":"anthropic.claude-sonnet-4-5-v2:0"},Un=Object.fromEntries(Object.entries(Te).map(([g,t])=>[t,g])),le=class{type="bedrock";name="AWS Bedrock";config;requestId=0;constructor(t={}){this.config={...Et,...t}}async isAvailable(){if(!this.getCredentials())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getCredentials())return{healthy:!1,error:"AWS credentials not configured. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables, or use IAM role."};let e=Date.now();try{let r=this.mapToBedrockModel(this.config.model),o=await this.invokeModel(r,{anthropic_version:"bedrock-2023-05-31",max_tokens:1,messages:[{role:"user",content:"Hi"}]},5e3),s=Date.now()-e;if(!o.ok){let n=await o.text();return{healthy:!1,latencyMs:s,error:`API error: ${o.status} - ${n}`}}return{healthy:!0,latencyMs:s,models:this.getSupportedModels(),details:{region:this.getRegion(),defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getCredentials())throw a("AWS credentials not configured","API_KEY_MISSING",{provider:"bedrock",retryable:!1});let o=this.formatMessages(t),s=e?.model??this.config.model,n=this.mapToBedrockModel(s),i=e?.maxTokens??this.config.maxTokens??4096,l=e?.temperature??this.config.temperature??.7,d=`bedrock-${++this.requestId}-${Date.now()}`,h=Date.now(),c={anthropic_version:"bedrock-2023-05-31",max_tokens:i,messages:o};Q(c,n,{temperature:l!==void 0?Math.min(Math.max(l,0),1):void 0}),e?.systemPrompt&&(c.system=e.systemPrompt),e?.stopSequences&&e.stopSequences.length>0&&(c.stop_sequences=e.stopSequences);try{let p=await this.invokeModelWithRetry(n,c,e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),m=Date.now()-h;if(!p.ok){let k=await p.json().catch(()=>({message:"Unknown error"}));throw this.handleApiError(p.status,k,s)}let u=await p.json(),f={promptTokens:u.usage.input_tokens,completionTokens:u.usage.output_tokens,totalTokens:u.usage.input_tokens+u.usage.output_tokens},b=_.calculateCost(n,f);return E.recordTokenUsage(d,"bedrock-provider","llm","generate",{inputTokens:u.usage.input_tokens,outputTokens:u.usage.output_tokens,totalTokens:u.usage.input_tokens+u.usage.output_tokens,estimatedCostUsd:b.totalCost}),{content:u.content.filter(k=>k.type==="text").map(k=>k.text).join(""),model:n,provider:"bedrock",usage:f,cost:b,latencyMs:m,finishReason:this.mapFinishReason(u.stop_reason),cached:!1,requestId:d}}catch(p){throw p instanceof Error&&"code"in p?p:a(p instanceof Error?p.message:"Request failed","NETWORK_ERROR",{provider:"bedrock",model:s,retryable:!0,cause:p})}}async embed(t,e){throw a("Bedrock Claude models do not support native embeddings. Use Bedrock Titan or Cohere for embeddings.","MODEL_NOT_FOUND",{provider:"bedrock",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
48
+ `]});return{completion:r.content,model:r.model,provider:"azure-openai",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return["gpt-6-sol","gpt-6-luna","gpt-6-astra","gpt-5.4-mini","text-embedding-ada-002","text-embedding-3-small","text-embedding-3-large"]}getCostPerToken(){return _.getCostPerToken(this.config.model??"gpt-4o")}async dispose(){}getApiKey(){return this.config.apiKey??process.env.AZURE_OPENAI_API_KEY}getAzureAdToken(){return this.config.azureAdToken}getEndpoint(){return(this.config.endpoint??process.env.AZURE_OPENAI_ENDPOINT)?.replace(/\/$/,"")}getApiVersion(){return this.config.apiVersion??process.env.AZURE_OPENAI_API_VERSION??"2024-02-15-preview"}buildUrl(t,e){let r=this.getEndpoint(),o=e??this.config.deploymentId,s=this.getApiVersion();return`${r}/openai/deployments/${o}/${t}?api-version=${s}`}getHeaders(){let t={"Content-Type":"application/json"},e=this.getAzureAdToken();if(e)t.Authorization=`Bearer ${e}`;else{let r=this.getApiKey();r&&(t["api-key"]=r)}return t}formatMessages(t,e){let r=[];if(typeof t=="string")e&&r.push({role:"system",content:e}),r.push({role:"user",content:t});else{let o=t.some(s=>s.role==="system");e&&!o&&r.push({role:"system",content:e});for(let s of t)r.push({role:s.role,content:s.content})}return r}mapFinishReason(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content_filter";default:return"stop"}}handleApiError(t,e,r){let o=e.error?.message??"Unknown API error",s=e.error?.code??"",n=e.error?.innererror?.code??"";switch(t){case 401:throw a(o,"API_KEY_INVALID",{provider:"azure-openai",model:r,retryable:!1});case 403:throw a(o,"API_KEY_INVALID",{provider:"azure-openai",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"azure-openai",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw s==="context_length_exceeded"||n==="context_length_exceeded"?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"azure-openai",model:r,retryable:!1}):n==="content_filter"?a(o,"CONTENT_FILTERED",{provider:"azure-openai",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"azure-openai",model:r,retryable:!1});case 404:throw a(`Deployment not found: ${r}`,"MODEL_NOT_FOUND",{provider:"azure-openai",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"azure-openai",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"azure-openai",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"azure-openai",retryable:!0}))}async fetchWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.fetchWithTimeout(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}sleep(t){return new Promise(e=>setTimeout(e,t))}};U();I();x();be();var Rt={model:"anthropic.claude-sonnet-4-6-v1:0",region:"us-east-1",maxTokens:4096,temperature:.7,timeoutMs:6e4,maxRetries:3,enableCache:!0,enableCircuitBreaker:!0},Te={"claude-opus-4-7":"anthropic.claude-opus-4-7-v1:0","claude-sonnet-4-6":"anthropic.claude-sonnet-4-6-v1:0","claude-haiku-4-5-20251001":"anthropic.claude-haiku-4-5-v1:0","claude-haiku-4-5":"anthropic.claude-haiku-4-5-v1:0","claude-opus-4-5-20251101":"anthropic.claude-opus-4-5-v1:0","claude-opus-4-5":"anthropic.claude-opus-4-5-v1:0","claude-sonnet-4-5-20250929":"anthropic.claude-sonnet-4-5-v2:0","claude-sonnet-4-5":"anthropic.claude-sonnet-4-5-v2:0"},qn=Object.fromEntries(Object.entries(Te).map(([g,t])=>[t,g])),ue=class{type="bedrock";name="AWS Bedrock";config;requestId=0;constructor(t={}){this.config={...Rt,...t}}async isAvailable(){if(!this.getCredentials())return!1;try{return(await this.healthCheck()).healthy}catch{return!1}}async healthCheck(){if(!this.getCredentials())return{healthy:!1,error:"AWS credentials not configured. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables, or use IAM role."};let e=Date.now();try{let r=this.mapToBedrockModel(this.config.model),o=await this.invokeModel(r,{anthropic_version:"bedrock-2023-05-31",max_tokens:1,messages:[{role:"user",content:"Hi"}]},5e3),s=Date.now()-e;if(!o.ok){let n=await o.text();return{healthy:!1,latencyMs:s,error:`API error: ${o.status} - ${n}`}}return{healthy:!0,latencyMs:s,models:this.getSupportedModels(),details:{region:this.getRegion(),defaultModel:this.config.model}}}catch(r){return{healthy:!1,error:r instanceof Error?r.message:"Unknown error"}}}async generate(t,e){if(!this.getCredentials())throw a("AWS credentials not configured","API_KEY_MISSING",{provider:"bedrock",retryable:!1});let o=this.formatMessages(t),s=e?.model??this.config.model,n=this.mapToBedrockModel(s),i=e?.maxTokens??this.config.maxTokens??4096,l=e?.temperature??this.config.temperature??.7,d=`bedrock-${++this.requestId}-${Date.now()}`,h=Date.now(),c={anthropic_version:"bedrock-2023-05-31",max_tokens:i,messages:o};Z(c,n,{temperature:l!==void 0?Math.min(Math.max(l,0),1):void 0}),e?.systemPrompt&&(c.system=e.systemPrompt),e?.stopSequences&&e.stopSequences.length>0&&(c.stop_sequences=e.stopSequences);try{let p=await this.invokeModelWithRetry(n,c,e?.timeoutMs??this.config.timeoutMs??6e4,this.config.maxRetries??3),m=Date.now()-h;if(!p.ok){let k=await p.json().catch(()=>({message:"Unknown error"}));throw this.handleApiError(p.status,k,s)}let u=await p.json(),f={promptTokens:u.usage.input_tokens,completionTokens:u.usage.output_tokens,totalTokens:u.usage.input_tokens+u.usage.output_tokens},b=_.calculateCost(n,f);return E.recordTokenUsage(d,"bedrock-provider","llm","generate",{inputTokens:u.usage.input_tokens,outputTokens:u.usage.output_tokens,totalTokens:u.usage.input_tokens+u.usage.output_tokens,estimatedCostUsd:b.totalCost}),{content:u.content.filter(k=>k.type==="text").map(k=>k.text).join(""),model:n,provider:"bedrock",usage:f,cost:b,latencyMs:m,finishReason:this.mapFinishReason(u.stop_reason),cached:!1,requestId:d}}catch(p){throw p instanceof Error&&"code"in p?p:a(p instanceof Error?p.message:"Request failed","NETWORK_ERROR",{provider:"bedrock",model:s,retryable:!0,cause:p})}}async embed(t,e){throw a("Bedrock Claude models do not support native embeddings. Use Bedrock Titan or Cohere for embeddings.","MODEL_NOT_FOUND",{provider:"bedrock",retryable:!1})}async complete(t,e){let r=await this.generate(t,{model:e?.model,temperature:e?.temperature??.2,maxTokens:e?.maxTokens??256,stopSequences:e?.stopSequences??[`
49
49
 
50
50
  `,"```"]});return{completion:r.content,model:r.model,provider:"bedrock",usage:r.usage,latencyMs:r.latencyMs,cached:r.cached}}getConfig(){return{...this.config}}getSupportedModels(){return Object.keys(Te)}getCostPerToken(){let t=this.mapToBedrockModel(this.config.model);return _.getCostPerToken(t)}async dispose(){}getCredentials(){let t=this.config.accessKeyId??process.env.AWS_ACCESS_KEY_ID,e=this.config.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY,r=this.config.sessionToken??process.env.AWS_SESSION_TOKEN;return!t||!e?null:{region:this.getRegion(),service:"bedrock",accessKeyId:t,secretAccessKey:e,sessionToken:r}}getRegion(){return this.config.region??process.env.AWS_REGION??process.env.AWS_DEFAULT_REGION??"us-east-1"}mapToBedrockModel(t){if(t.startsWith("anthropic."))return t;let e=Te[t];return e||t}getEndpointUrl(t){let e=this.getRegion();return`${this.config.baseUrl??`https://bedrock-runtime.${e}.amazonaws.com`}/model/${t}/invoke`}async invokeModel(t,e,r){let o=this.getCredentials();if(!o)throw a("AWS credentials not configured","API_KEY_MISSING",{provider:"bedrock",retryable:!1});let s=this.getEndpointUrl(t),n=JSON.stringify(e),i=await this.signRequest(s,n,o);return this.fetchWithTimeout(s,{method:"POST",headers:i,body:n},r)}async invokeModelWithRetry(t,e,r,o){let s;for(let n=0;n<o;n++)try{let i=await this.invokeModel(t,e,r);if(i.status>=400&&i.status<500&&i.status!==429)return i;if((i.status>=500||i.status===429)&&n<o-1){let l=C(n);await this.sleep(l);continue}return i}catch(i){if(s=R(i),n<o-1){let l=C(n);await this.sleep(l)}}throw s??new Error("Request failed after retries")}async signRequest(t,e,r){let o=new URL(t),n=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),i=n.substring(0,8),l={"Content-Type":"application/json",Host:o.host,"X-Amz-Date":n};r.sessionToken&&(l["X-Amz-Security-Token"]=r.sessionToken);let d="POST",h=o.pathname,c="",p=Object.keys(l).map(T=>T.toLowerCase()).sort().join(";"),m=Object.keys(l).map(T=>`${T.toLowerCase()}:${l[T].trim()}`).sort().join(`
51
51
  `)+`
52
52
  `,u=await this.sha256(e),f=[d,h,c,m,p,u].join(`
53
53
  `),b="AWS4-HMAC-SHA256",y=`${i}/${r.region}/${r.service}/aws4_request`,k=await this.sha256(f),v=[b,n,y,k].join(`
54
- `),P=await this.getSignatureKey(r.secretAccessKey,i,r.region,r.service),w=await this.hmacHex(P,v),S=`${b} Credential=${r.accessKeyId}/${y}, SignedHeaders=${p}, Signature=${w}`;return{...l,Authorization:S}}async sha256(t){let r=new TextEncoder().encode(t),o=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(o)).map(s=>s.toString(16).padStart(2,"0")).join("")}async hmac(t,e){let r=new TextEncoder,o=t instanceof Uint8Array?t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength):t,s=await crypto.subtle.importKey("raw",o,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return crypto.subtle.sign("HMAC",s,r.encode(e))}async hmacHex(t,e){let r=await this.hmac(t,e);return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}async getSignatureKey(t,e,r,o){let s=new TextEncoder,n=await this.hmac(s.encode(`AWS4${t}`),e),i=await this.hmac(n,r),l=await this.hmac(i,o);return this.hmac(l,"aws4_request")}formatMessages(t){return typeof t=="string"?[{role:"user",content:t}]:t.filter(e=>e.role!=="system").map(e=>({role:e.role,content:e.content}))}mapFinishReason(t){switch(t){case"end_turn":return"stop";case"max_tokens":return"length";case"stop_sequence":return"stop";default:return"stop"}}handleApiError(t,e,r){let o=e.message??"Unknown API error",s=e.__type??"";switch(t){case 401:case 403:throw a(o,"API_KEY_INVALID",{provider:"bedrock",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"bedrock",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw s.includes("ValidationException")&&o.includes("token")?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"bedrock",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"bedrock",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"bedrock",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"bedrock",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"bedrock",retryable:!0}))}sleep(t){return new Promise(e=>setTimeout(e,t))}};I();j();var Ct={primary:"claude",fallbacks:["openai","ollama"],loadBalancing:"round-robin",providers:{},global:{enableCostTracking:!0,enableMetrics:!0}},Fe=class{providers=new Map;circuitBreakers;cache;costTracker;config;metrics=new Map;roundRobinIndex=0;initialized=!1;spendLedger;injectedLedger;maxCostPerRun;billingNoticeShown=!1;constructor(t={},e){this.config={...Ct,...t},this.circuitBreakers=new V(e?.circuitBreakerConfig),this.cache=new Y(e?.cacheConfig),this.costTracker=e?.costTracker??Ae(),this.injectedLedger=e?.spendLedger;let r=Number.parseFloat(process.env.AQE_MAX_BUDGET_USD??"");this.maxCostPerRun=this.config.global?.maxCostPerRun??(Number.isFinite(r)&&r>0?r:void 0)}async initialize(){if(!this.initialized){await this.createProviders();for(let t of this.providers.keys())this.initializeMetrics(t);this.budgetConfigured()&&(this.spendLedger=this.injectedLedger??await Ie().catch(()=>new F)),this.emitBillingNotice(),this.initialized=!0}}budgetConfigured(){let t=this.config.global;return!!(this.maxCostPerRun||t?.maxCostPerHour&&t.maxCostPerHour>0||t?.maxCostPerDay&&t.maxCostPerDay>0)}emitBillingNotice(){if(this.billingNoticeShown||(process.env.AQE_LLM_NO_BILLING_NOTICE??"")==="1")return;let t=this.providers.get(this.config.primary);if(!t)return;let e=Me(t),r=Le(t.type,e);r&&console.error(r),this.billingNoticeShown=!0}enforceBudget(t,e){if(!this.budgetConfigured()||!this.spendLedger)return;let r=e?.model??this.providers.get(this.config.primary)?.getConfig().model??this.config.primary,o=typeof t=="string"?t:JSON.stringify(t),s=Math.ceil(o.length/4),n=e?.maxTokens??4096,i=this.costTracker.estimateCost(r,s,n).totalCost;if(i===0)return;let l=this.config.global,d=[{limit:this.maxCostPerRun,spent:this.costTracker.getCurrentCost("all"),label:"per-run"},{limit:l?.maxCostPerHour,spent:this.spendLedger.spentSince(36e5),label:"hourly"},{limit:l?.maxCostPerDay,spent:this.spendLedger.spentSince(864e5),label:"daily"}];for(let{limit:h,spent:c,label:p}of d)if(h&&h>0&&c+i>h)throw a(`LLM ${p} budget exceeded: $${c.toFixed(4)} spent + $${i.toFixed(4)} estimated > $${h.toFixed(2)} cap. Raise --max-budget-usd / maxCost* or switch to a local/subscription provider.`,"COST_LIMIT_EXCEEDED",{retryable:!1})}recordSpend(t,e){this.spendLedger&&this.spendLedger.record({provider:t.provider,model:t.model,costUsd:t.cost.totalCost,costSource:t.cost.source??"local-estimate",promptTokens:t.usage.promptTokens,completionTokens:t.usage.completionTokens,requestId:t.requestId,agent:e})}assertWithinBudget(t,e){this.enforceBudget(t,e)}recordResponseSpend(t,e){this.recordSpend(t,e)}async generate(t,e){if(await this.ensureInitialized(),!e?.skipCache){let o=typeof t=="string"?t:JSON.stringify(t),s=this.cache.getGeneration(o,e);if(s)return{...s,cached:!0}}this.enforceBudget(t,e);let r=await this.executeWithFailover("generate",async o=>o.generate(t,e),e?.preferredProvider);if(!e?.skipCache){let o=typeof t=="string"?t:JSON.stringify(t);this.cache.setGeneration(o,r,e)}return this.costTracker.recordUsage(r.provider,r.model,r.usage,r.requestId),this.recordSpend(r),r}async embed(t,e){if(await this.ensureInitialized(),!e?.skipCache){let s=this.cache.getEmbedding(t,{model:e?.model});if(s)return{...s,cached:!0}}let r=["openai","ollama","cognitum"],o=await this.executeWithFailover("embed",async s=>s.embed(t,e),r.find(s=>this.providers.has(s)));return e?.skipCache||this.cache.setEmbedding(t,o,{model:e?.model}),o}async complete(t,e){if(await this.ensureInitialized(),!e?.skipCache){let o=this.cache.getCompletion(t,e);if(o)return{...o,cached:!0}}this.enforceBudget(t,e);let r=await this.executeWithFailover("complete",async o=>o.complete(t,e));return e?.skipCache||this.cache.setCompletion(t,r,e),this.costTracker.recordUsage(r.provider,r.model,r.usage,`complete-${r.model}-${Date.now()}`),this.recordSpend({content:r.completion,model:r.model,provider:r.provider,usage:r.usage,cost:_.calculateCost(r.model,r.usage),latencyMs:r.latencyMs,finishReason:"stop",cached:r.cached,requestId:`complete-${r.model}-${Date.now()}`}),r}async healthCheck(){await this.ensureInitialized();let t={};for(let[e,r]of this.providers)t[e]=await r.healthCheck();return t}getProvider(t){return this.providers.get(t)}getAvailableProviders(){let t=[];for(let[e,r]of this.providers)this.circuitBreakers.getBreaker(e).canExecute()&&t.push(e);return t}getMetrics(){let t={};for(let[e,r]of this.metrics){let o=this.circuitBreakers.getBreaker(e),s=r.latencies.slice(-100);t[e]={provider:e,totalRequests:r.totalRequests,successCount:r.successCount,failureCount:r.failureCount,avgLatencyMs:this.calculateAverage(s),p95LatencyMs:this.calculatePercentile(s,95),p99LatencyMs:this.calculatePercentile(s,99),totalCost:r.totalCost,totalTokens:r.totalTokens,circuitState:o.getState()}}return t}getCacheStats(){return this.cache.getStats()}getCostSummary(t="day"){return this.costTracker.getSummary(t)}clearCache(){this.cache.clear()}resetCircuitBreakers(){this.circuitBreakers.resetAll()}async dispose(){for(let t of this.providers.values())await t.dispose();this.providers.clear(),this.metrics.clear(),this.cache.clear(),this.initialized=!1}async createProviders(){let t=new Set([this.config.primary,...this.config.fallbacks]);for(let e of t)try{let r=this.createProvider(e);this.providers.set(e,r)}catch(r){console.warn(`Failed to create ${e} provider: ${r instanceof Error?r.message:"Unknown"}`)}if(this.providers.size===0)throw a("No LLM providers could be initialized","PROVIDER_UNAVAILABLE",{retryable:!1})}createProvider(t){switch(t){case"claude":return new Z(this.config.providers.claude);case"claude-code":return new ee(this.config.providers["claude-code"]);case"codex":return new te(this.config.providers.codex);case"cognitum":return new re(this.config.providers.cognitum);case"openai":return new oe(this.config.providers.openai);case"ollama":return new se(this.config.providers.ollama);case"openrouter":return new ne(this.config.providers.openrouter);case"gemini":return new ae(this.config.providers.gemini);case"azure-openai":{let e=this.config.providers["azure-openai"];if(!e)throw new Error("Azure OpenAI provider requires configuration with deploymentId");return new ce(e)}case"bedrock":return new le(this.config.providers.bedrock);default:return we(t)}}initializeMetrics(t){this.metrics.set(t,{totalRequests:0,successCount:0,failureCount:0,latencies:[],totalCost:0,totalTokens:0})}async executeWithFailover(t,e,r){let o=this.selectProvider(r),s=new Set,n,i=[o.provider.type,...this.config.fallbacks.filter(l=>l!==o.provider.type)];for(let l of i){if(s.has(l))continue;s.add(l);let d=this.providers.get(l);if(!d)continue;let h=this.circuitBreakers.getBreaker(l);if(h.canExecute())try{let c=Date.now(),p=await h.execute(()=>e(d)),m=Date.now()-c;return this.recordSuccess(l,m,p),p}catch(c){if(n=R(c),this.recordFailure(l,n),"retryable"in n&&!n.retryable)throw n}}throw a(`All providers failed for ${t}: ${n?.message??"Unknown error"}`,"PROVIDER_UNAVAILABLE",{retryable:!1,cause:n})}selectProvider(t){if(t){let r=this.providers.get(t),o=this.circuitBreakers.getBreaker(t);if(r&&o.canExecute())return{provider:r,reason:"primary"}}let e=this.getAvailableProviders();if(e.length===0){let r=this.providers.get(this.config.primary);if(r)return{provider:r,reason:"fallback"};throw a("No providers available","PROVIDER_UNAVAILABLE",{retryable:!1})}switch(this.config.loadBalancing){case"round-robin":return this.selectRoundRobin(e);case"least-cost":return this.selectLeastCost(e);case"least-latency":return this.selectLeastLatency(e);case"random":return this.selectRandom(e);default:return this.selectRoundRobin(e)}}selectRoundRobin(t){this.roundRobinIndex=(this.roundRobinIndex+1)%t.length;let e=t[this.roundRobinIndex];return{provider:this.providers.get(e),reason:"load-balance"}}selectLeastCost(t){let e=1/0,r=t[0];for(let o of t){let s=this.providers.get(o),{input:n,output:i}=s.getCostPerToken(),l=n+i;l<e&&(e=l,r=o)}return{provider:this.providers.get(r),reason:"cost-optimization",metadata:{estimatedCost:e}}}selectLeastLatency(t){let e=1/0,r=t[0];for(let o of t){let s=this.metrics.get(o);if(s&&s.latencies.length>0){let n=this.calculateAverage(s.latencies);n<e&&(e=n,r=o)}}return{provider:this.providers.get(r),reason:"latency-optimization",metadata:{avgLatency:e}}}selectRandom(t){let e=Ce(0,t.length),r=t[e];return{provider:this.providers.get(r),reason:"load-balance"}}recordSuccess(t,e,r){let o=this.metrics.get(t);if(o&&(o.totalRequests++,o.successCount++,o.latencies.push(e),o.latencies.length>1e3&&(o.latencies=o.latencies.slice(-1e3)),r&&typeof r=="object")){let s=r;s.cost?.totalCost&&(o.totalCost+=s.cost.totalCost),s.usage?.totalTokens&&(o.totalTokens+=s.usage.totalTokens)}}recordFailure(t,e){let r=this.metrics.get(t);r&&(r.totalRequests++,r.failureCount++)}async ensureInitialized(){this.initialized||await this.initialize()}calculateAverage(t){return t.length===0?0:t.reduce((e,r)=>e+r,0)/t.length}calculatePercentile(t,e){if(t.length===0)return 0;let r=[...t].sort((s,n)=>s-n),o=Math.ceil(e/100*r.length)-1;return r[Math.max(0,o)]}};export{A as a,x as b,et as c,be as d,ee as e,K as f,ve as g,se as h,Fe as i};
54
+ `),P=await this.getSignatureKey(r.secretAccessKey,i,r.region,r.service),w=await this.hmacHex(P,v),S=`${b} Credential=${r.accessKeyId}/${y}, SignedHeaders=${p}, Signature=${w}`;return{...l,Authorization:S}}async sha256(t){let r=new TextEncoder().encode(t),o=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(o)).map(s=>s.toString(16).padStart(2,"0")).join("")}async hmac(t,e){let r=new TextEncoder,o=t instanceof Uint8Array?t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength):t,s=await crypto.subtle.importKey("raw",o,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return crypto.subtle.sign("HMAC",s,r.encode(e))}async hmacHex(t,e){let r=await this.hmac(t,e);return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}async getSignatureKey(t,e,r,o){let s=new TextEncoder,n=await this.hmac(s.encode(`AWS4${t}`),e),i=await this.hmac(n,r),l=await this.hmac(i,o);return this.hmac(l,"aws4_request")}formatMessages(t){return typeof t=="string"?[{role:"user",content:t}]:t.filter(e=>e.role!=="system").map(e=>({role:e.role,content:e.content}))}mapFinishReason(t){switch(t){case"end_turn":return"stop";case"max_tokens":return"length";case"stop_sequence":return"stop";default:return"stop"}}handleApiError(t,e,r){let o=e.message??"Unknown API error",s=e.__type??"";switch(t){case 401:case 403:throw a(o,"API_KEY_INVALID",{provider:"bedrock",model:r,retryable:!1});case 429:throw a(o,"RATE_LIMITED",{provider:"bedrock",model:r,retryable:!0,retryAfterMs:6e4});case 400:throw s.includes("ValidationException")&&o.includes("token")?a(o,"CONTEXT_LENGTH_EXCEEDED",{provider:"bedrock",model:r,retryable:!1}):a(o,"UNKNOWN",{provider:"bedrock",model:r,retryable:!1});case 500:case 502:case 503:throw a(o,"PROVIDER_UNAVAILABLE",{provider:"bedrock",model:r,retryable:!0,retryAfterMs:5e3});default:throw a(o,"UNKNOWN",{provider:"bedrock",model:r,retryable:!1})}}async fetchWithTimeout(t,e,r){return A(t,e,r,()=>a("Request timed out","TIMEOUT",{provider:"bedrock",retryable:!0}))}sleep(t){return new Promise(e=>setTimeout(e,t))}};I();j();var _t={primary:"claude",fallbacks:["openai","ollama"],loadBalancing:"round-robin",providers:{},global:{enableCostTracking:!0,enableMetrics:!0}},Ge=class{providers=new Map;circuitBreakers;cache;costTracker;config;metrics=new Map;roundRobinIndex=0;initialized=!1;spendLedger;injectedLedger;maxCostPerRun;billingNoticeShown=!1;constructor(t={},e){this.config={..._t,...t},this.circuitBreakers=new V(e?.circuitBreakerConfig),this.cache=new Y(e?.cacheConfig),this.costTracker=e?.costTracker??we(),this.injectedLedger=e?.spendLedger;let r=Number.parseFloat(process.env.AQE_MAX_BUDGET_USD??"");this.maxCostPerRun=this.config.global?.maxCostPerRun??(Number.isFinite(r)&&r>0?r:void 0)}async initialize(){if(!this.initialized){await this.createProviders();for(let t of this.providers.keys())this.initializeMetrics(t);this.budgetConfigured()&&(this.spendLedger=this.injectedLedger??await Se().catch(()=>new F)),this.emitBillingNotice(),this.initialized=!0}}budgetConfigured(){let t=this.config.global;return!!(this.maxCostPerRun||t?.maxCostPerHour&&t.maxCostPerHour>0||t?.maxCostPerDay&&t.maxCostPerDay>0)}emitBillingNotice(){if(this.billingNoticeShown||(process.env.AQE_LLM_NO_BILLING_NOTICE??"")==="1")return;let t=this.providers.get(this.config.primary);if(!t)return;let e=Le(t),r=Pe(t.type,e);r&&console.error(r),this.billingNoticeShown=!0}enforceBudget(t,e){if(!this.budgetConfigured()||!this.spendLedger)return;let r=e?.model??this.providers.get(this.config.primary)?.getConfig().model??this.config.primary,o=typeof t=="string"?t:JSON.stringify(t),s=Math.ceil(o.length/4),n=e?.maxTokens??4096,i=this.costTracker.estimateCost(r,s,n).totalCost;if(i===0)return;let l=this.config.global,d=[{limit:this.maxCostPerRun,spent:this.costTracker.getCurrentCost("all"),label:"per-run"},{limit:l?.maxCostPerHour,spent:this.spendLedger.spentSince(36e5),label:"hourly"},{limit:l?.maxCostPerDay,spent:this.spendLedger.spentSince(864e5),label:"daily"}];for(let{limit:h,spent:c,label:p}of d)if(h&&h>0&&c+i>h)throw a(`LLM ${p} budget exceeded: $${c.toFixed(4)} spent + $${i.toFixed(4)} estimated > $${h.toFixed(2)} cap. Raise --max-budget-usd / maxCost* or switch to a local/subscription provider.`,"COST_LIMIT_EXCEEDED",{retryable:!1})}recordSpend(t,e){this.spendLedger&&this.spendLedger.record({provider:t.provider,model:t.model,costUsd:t.cost.totalCost,costSource:t.cost.source??"local-estimate",promptTokens:t.usage.promptTokens,completionTokens:t.usage.completionTokens,requestId:t.requestId,agent:e})}assertWithinBudget(t,e){this.enforceBudget(t,e)}recordResponseSpend(t,e){this.recordSpend(t,e)}async generate(t,e){if(await this.ensureInitialized(),!e?.skipCache){let o=typeof t=="string"?t:JSON.stringify(t),s=this.cache.getGeneration(o,e);if(s)return{...s,cached:!0}}this.enforceBudget(t,e);let r=await this.executeWithFailover("generate",async o=>o.generate(t,e),e?.preferredProvider);if(!e?.skipCache){let o=typeof t=="string"?t:JSON.stringify(t);this.cache.setGeneration(o,r,e)}return this.costTracker.recordUsage(r.provider,r.model,r.usage,r.requestId),this.recordSpend(r),r}async embed(t,e){if(await this.ensureInitialized(),!e?.skipCache){let s=this.cache.getEmbedding(t,{model:e?.model});if(s)return{...s,cached:!0}}let r=["openai","ollama","cognitum"],o=await this.executeWithFailover("embed",async s=>s.embed(t,e),r.find(s=>this.providers.has(s)));return e?.skipCache||this.cache.setEmbedding(t,o,{model:e?.model}),o}async complete(t,e){if(await this.ensureInitialized(),!e?.skipCache){let o=this.cache.getCompletion(t,e);if(o)return{...o,cached:!0}}this.enforceBudget(t,e);let r=await this.executeWithFailover("complete",async o=>o.complete(t,e));return e?.skipCache||this.cache.setCompletion(t,r,e),this.costTracker.recordUsage(r.provider,r.model,r.usage,`complete-${r.model}-${Date.now()}`),this.recordSpend({content:r.completion,model:r.model,provider:r.provider,usage:r.usage,cost:_.calculateCost(r.model,r.usage),latencyMs:r.latencyMs,finishReason:"stop",cached:r.cached,requestId:`complete-${r.model}-${Date.now()}`}),r}async healthCheck(){await this.ensureInitialized();let t={};for(let[e,r]of this.providers)t[e]=await r.healthCheck();return t}getProvider(t){return this.providers.get(t)}getAvailableProviders(){let t=[];for(let[e,r]of this.providers)this.circuitBreakers.getBreaker(e).canExecute()&&t.push(e);return t}getMetrics(){let t={};for(let[e,r]of this.metrics){let o=this.circuitBreakers.getBreaker(e),s=r.latencies.slice(-100);t[e]={provider:e,totalRequests:r.totalRequests,successCount:r.successCount,failureCount:r.failureCount,avgLatencyMs:this.calculateAverage(s),p95LatencyMs:this.calculatePercentile(s,95),p99LatencyMs:this.calculatePercentile(s,99),totalCost:r.totalCost,totalTokens:r.totalTokens,circuitState:o.getState()}}return t}getCacheStats(){return this.cache.getStats()}getCostSummary(t="day"){return this.costTracker.getSummary(t)}clearCache(){this.cache.clear()}resetCircuitBreakers(){this.circuitBreakers.resetAll()}async dispose(){for(let t of this.providers.values())await t.dispose();this.providers.clear(),this.metrics.clear(),this.cache.clear(),this.initialized=!1}async createProviders(){let t=new Set([this.config.primary,...this.config.fallbacks]);for(let e of t)try{let r=this.createProvider(e);this.providers.set(e,r)}catch(r){console.warn(`Failed to create ${e} provider: ${r instanceof Error?r.message:"Unknown"}`)}if(this.providers.size===0)throw a("No LLM providers could be initialized","PROVIDER_UNAVAILABLE",{retryable:!1})}createProvider(t){switch(t){case"claude":return new ee(this.config.providers.claude);case"claude-code":return new te(this.config.providers["claude-code"]);case"codex":return new re(this.config.providers.codex);case"cognitum":return new oe(this.config.providers.cognitum);case"openai":return new se(this.config.providers.openai);case"ollama":return new ne(this.config.providers.ollama);case"openrouter":return new ie(this.config.providers.openrouter);case"gemini":return new ce(this.config.providers.gemini);case"azure-openai":{let e=this.config.providers["azure-openai"];if(!e)throw new Error("Azure OpenAI provider requires configuration with deploymentId");return new le(e)}case"bedrock":return new ue(this.config.providers.bedrock);default:return Me(t)}}initializeMetrics(t){this.metrics.set(t,{totalRequests:0,successCount:0,failureCount:0,latencies:[],totalCost:0,totalTokens:0})}async executeWithFailover(t,e,r){let o=this.selectProvider(r),s=new Set,n,i=[o.provider.type,...this.config.fallbacks.filter(l=>l!==o.provider.type)];for(let l of i){if(s.has(l))continue;s.add(l);let d=this.providers.get(l);if(!d)continue;let h=this.circuitBreakers.getBreaker(l);if(h.canExecute())try{let c=Date.now(),p=await h.execute(()=>e(d)),m=Date.now()-c;return this.recordSuccess(l,m,p),p}catch(c){if(n=R(c),this.recordFailure(l,n),"retryable"in n&&!n.retryable)throw n}}throw a(`All providers failed for ${t}: ${n?.message??"Unknown error"}`,"PROVIDER_UNAVAILABLE",{retryable:!1,cause:n})}selectProvider(t){if(t){let r=this.providers.get(t),o=this.circuitBreakers.getBreaker(t);if(r&&o.canExecute())return{provider:r,reason:"primary"}}let e=this.getAvailableProviders();if(e.length===0){let r=this.providers.get(this.config.primary);if(r)return{provider:r,reason:"fallback"};throw a("No providers available","PROVIDER_UNAVAILABLE",{retryable:!1})}switch(this.config.loadBalancing){case"round-robin":return this.selectRoundRobin(e);case"least-cost":return this.selectLeastCost(e);case"least-latency":return this.selectLeastLatency(e);case"random":return this.selectRandom(e);default:return this.selectRoundRobin(e)}}selectRoundRobin(t){this.roundRobinIndex=(this.roundRobinIndex+1)%t.length;let e=t[this.roundRobinIndex];return{provider:this.providers.get(e),reason:"load-balance"}}selectLeastCost(t){let e=1/0,r=t[0];for(let o of t){let s=this.providers.get(o),{input:n,output:i}=s.getCostPerToken(),l=n+i;l<e&&(e=l,r=o)}return{provider:this.providers.get(r),reason:"cost-optimization",metadata:{estimatedCost:e}}}selectLeastLatency(t){let e=1/0,r=t[0];for(let o of t){let s=this.metrics.get(o);if(s&&s.latencies.length>0){let n=this.calculateAverage(s.latencies);n<e&&(e=n,r=o)}}return{provider:this.providers.get(r),reason:"latency-optimization",metadata:{avgLatency:e}}}selectRandom(t){let e=Re(0,t.length),r=t[e];return{provider:this.providers.get(r),reason:"load-balance"}}recordSuccess(t,e,r){let o=this.metrics.get(t);if(o&&(o.totalRequests++,o.successCount++,o.latencies.push(e),o.latencies.length>1e3&&(o.latencies=o.latencies.slice(-1e3)),r&&typeof r=="object")){let s=r;s.cost?.totalCost&&(o.totalCost+=s.cost.totalCost),s.usage?.totalTokens&&(o.totalTokens+=s.usage.totalTokens)}}recordFailure(t,e){let r=this.metrics.get(t);r&&(r.totalRequests++,r.failureCount++)}async ensureInitialized(){this.initialized||await this.initialize()}calculateAverage(t){return t.length===0?0:t.reduce((e,r)=>e+r,0)/t.length}calculatePercentile(t,e){if(t.length===0)return 0;let r=[...t].sort((s,n)=>s-n),o=Math.ceil(e/100*r.length)-1;return r[Math.max(0,o)]}};export{A as a,x as b,rt as c,be as d,te as e,K as f,ve as g,ne as h,Ge as i};
@@ -1,2 +1,2 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.14");process.exit(0)}
2
- import{a as l}from"./chunk-TWOV3I3A.js";import{i as a}from"./chunk-QP6GL3O5.js";import{a as m}from"./chunk-RE6JTSDM.js";var u=class{constructor(t,e){this.eventBus=t;this.maxHistorySize=e?.maxHistorySize??1e4,this.eventHistory=new l(this.maxHistorySize),this.correlationTimeout=e?.correlationTimeout??6e4,this.maxEventsPerCorrelation=e?.maxEventsPerCorrelation??100}eventBus;subscriptions=new Map;correlations=new Map;eventHistory;routes=[];domainSubscriptions=new Map;maxHistorySize;correlationTimeout;maxEventsPerCorrelation;initialized=!1;async initialize(){if(!this.initialized){for(let t of m){let e=this.eventBus.subscribeToChannel(t,async i=>{await this.handleIncomingEvent(i)});this.domainSubscriptions.set(t,e)}this.eventBus.subscribe("*",async t=>{m.includes(t.source)||await this.handleIncomingEvent(t)}),this.initialized=!0}}subscribeToDoamin(t,e){let i=`sub_domain_${a()}`;return this.subscriptions.set(i,{id:i,type:"domain",filter:t,handler:e,active:!0}),i}subscribeToEventType(t,e){let i=`sub_type_${a()}`;return this.subscriptions.set(i,{id:i,type:"eventType",filter:t,handler:e,active:!0}),i}unsubscribe(t){let e=this.subscriptions.get(t);return e?(e.active=!1,this.subscriptions.delete(t),!0):!1}async route(t){this.addToHistory(t),t.correlationId&&this.trackCorrelation(t);let i=this.findMatchingSubscriptions(t).map(async o=>{try{await o.handler(t)}catch(n){console.error(`Error in subscription handler ${o.id}:`,n instanceof Error?n.message:n)}}),r=await this.applyRoutes(t);await Promise.allSettled([...i,...r])}getCorrelation(t){let e=this.correlations.get(t);if(e)return{correlationId:e.correlationId,events:[...e.events],domains:new Set(e.domains),startedAt:e.startedAt,lastEventAt:e.lastEventAt,complete:e.complete}}trackCorrelation(t){if(!t.correlationId)return;let e=this.correlations.get(t.correlationId);e||(e={correlationId:t.correlationId,events:[],domains:new Set,startedAt:t.timestamp,lastEventAt:t.timestamp,complete:!1,timeout:null},this.correlations.set(t.correlationId,e)),e.events.length<this.maxEventsPerCorrelation&&(e.events.push(t),e.domains.add(t.source),e.lastEventAt=t.timestamp),e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(()=>{e.complete=!0,e.timeout=null},this.correlationTimeout)}aggregate(t,e){let i=this.eventHistory.toArray().filter(s=>s.timestamp>=t&&s.timestamp<=e),r=new Map,o=new Map;for(let s of i)r.set(s.type,(r.get(s.type)??0)+1),o.set(s.source,(o.get(s.source)??0)+1);let n={totalEvents:i.length,uniqueEventTypes:r.size,uniqueDomains:o.size,eventsPerSecond:i.length>0?i.length/((e.getTime()-t.getTime())/1e3):0};return{id:a(),windowStart:t,windowEnd:e,events:i,countByType:r,countByDomain:o,metrics:n}}getHistory(t){let e=this.eventHistory.toArray();return t&&(t.eventTypes?.length&&(e=e.filter(i=>t.eventTypes.includes(i.type))),t.domains?.length&&(e=e.filter(i=>t.domains.includes(i.source))),t.fromTimestamp&&(e=e.filter(i=>i.timestamp>=t.fromTimestamp)),t.toTimestamp&&(e=e.filter(i=>i.timestamp<=t.toTimestamp)),t.limit&&(e=e.slice(-t.limit))),e}addRoute(t){let e=t.priority??0,i=this.routes.findIndex(r=>(r.priority??0)<e);i===-1?this.routes.push(t):this.routes.splice(i,0,t)}removeRoute(t,e){let i=this.routes.findIndex(r=>r.eventPattern===t&&(e===void 0||r.source===e));return i!==-1?(this.routes.splice(i,1),!0):!1}async dispose(){this.subscriptions.clear();for(let t of this.domainSubscriptions.values())t.unsubscribe();this.domainSubscriptions.clear();for(let t of this.correlations.values())t.timeout&&clearTimeout(t.timeout);this.correlations.clear(),this.eventHistory.clear(),this.initialized=!1}async handleIncomingEvent(t){await this.route(t)}findMatchingSubscriptions(t){let e=[];for(let i of this.subscriptions.values())i.active&&(i.type==="domain"&&i.filter===t.source||i.type==="eventType"&&this.matchEventType(t.type,i.filter))&&e.push(i);return e}matchEventType(t,e){if(e==="*")return!0;let i=e.replace(/\\/g,"\\\\").replace(/\./g,"\\.").replace(/\*/g,".*");return new RegExp(`^${i}$`).test(t)}async applyRoutes(t){let e=[];for(let i of this.routes){if(!(i.source==="*"||i.source===t.source||Array.isArray(i.source)&&i.source.includes(t.source))||!this.matchEventType(t.type,i.eventPattern)||i.filter&&!i.filter(t))continue;let o=i.transform?i.transform(t):t;for(let n of i.targets)n!==t.source&&e.push(this.eventBus.publish({...o,id:a(),correlationId:t.correlationId??t.id}))}return e}addToHistory(t){this.eventHistory.push(t)}};function y(c,t){return new u(c,t)}export{u as a,y as b};
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.16");process.exit(0)}
2
+ import{a as l}from"./chunk-63GMRQ25.js";import{i as a}from"./chunk-HGWXF45W.js";import{a as m}from"./chunk-LE4QJREF.js";var u=class{constructor(t,e){this.eventBus=t;this.maxHistorySize=e?.maxHistorySize??1e4,this.eventHistory=new l(this.maxHistorySize),this.correlationTimeout=e?.correlationTimeout??6e4,this.maxEventsPerCorrelation=e?.maxEventsPerCorrelation??100}eventBus;subscriptions=new Map;correlations=new Map;eventHistory;routes=[];domainSubscriptions=new Map;maxHistorySize;correlationTimeout;maxEventsPerCorrelation;initialized=!1;async initialize(){if(!this.initialized){for(let t of m){let e=this.eventBus.subscribeToChannel(t,async i=>{await this.handleIncomingEvent(i)});this.domainSubscriptions.set(t,e)}this.eventBus.subscribe("*",async t=>{m.includes(t.source)||await this.handleIncomingEvent(t)}),this.initialized=!0}}subscribeToDoamin(t,e){let i=`sub_domain_${a()}`;return this.subscriptions.set(i,{id:i,type:"domain",filter:t,handler:e,active:!0}),i}subscribeToEventType(t,e){let i=`sub_type_${a()}`;return this.subscriptions.set(i,{id:i,type:"eventType",filter:t,handler:e,active:!0}),i}unsubscribe(t){let e=this.subscriptions.get(t);return e?(e.active=!1,this.subscriptions.delete(t),!0):!1}async route(t){this.addToHistory(t),t.correlationId&&this.trackCorrelation(t);let i=this.findMatchingSubscriptions(t).map(async o=>{try{await o.handler(t)}catch(n){console.error(`Error in subscription handler ${o.id}:`,n instanceof Error?n.message:n)}}),r=await this.applyRoutes(t);await Promise.allSettled([...i,...r])}getCorrelation(t){let e=this.correlations.get(t);if(e)return{correlationId:e.correlationId,events:[...e.events],domains:new Set(e.domains),startedAt:e.startedAt,lastEventAt:e.lastEventAt,complete:e.complete}}trackCorrelation(t){if(!t.correlationId)return;let e=this.correlations.get(t.correlationId);e||(e={correlationId:t.correlationId,events:[],domains:new Set,startedAt:t.timestamp,lastEventAt:t.timestamp,complete:!1,timeout:null},this.correlations.set(t.correlationId,e)),e.events.length<this.maxEventsPerCorrelation&&(e.events.push(t),e.domains.add(t.source),e.lastEventAt=t.timestamp),e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(()=>{e.complete=!0,e.timeout=null},this.correlationTimeout)}aggregate(t,e){let i=this.eventHistory.toArray().filter(s=>s.timestamp>=t&&s.timestamp<=e),r=new Map,o=new Map;for(let s of i)r.set(s.type,(r.get(s.type)??0)+1),o.set(s.source,(o.get(s.source)??0)+1);let n={totalEvents:i.length,uniqueEventTypes:r.size,uniqueDomains:o.size,eventsPerSecond:i.length>0?i.length/((e.getTime()-t.getTime())/1e3):0};return{id:a(),windowStart:t,windowEnd:e,events:i,countByType:r,countByDomain:o,metrics:n}}getHistory(t){let e=this.eventHistory.toArray();return t&&(t.eventTypes?.length&&(e=e.filter(i=>t.eventTypes.includes(i.type))),t.domains?.length&&(e=e.filter(i=>t.domains.includes(i.source))),t.fromTimestamp&&(e=e.filter(i=>i.timestamp>=t.fromTimestamp)),t.toTimestamp&&(e=e.filter(i=>i.timestamp<=t.toTimestamp)),t.limit&&(e=e.slice(-t.limit))),e}addRoute(t){let e=t.priority??0,i=this.routes.findIndex(r=>(r.priority??0)<e);i===-1?this.routes.push(t):this.routes.splice(i,0,t)}removeRoute(t,e){let i=this.routes.findIndex(r=>r.eventPattern===t&&(e===void 0||r.source===e));return i!==-1?(this.routes.splice(i,1),!0):!1}async dispose(){this.subscriptions.clear();for(let t of this.domainSubscriptions.values())t.unsubscribe();this.domainSubscriptions.clear();for(let t of this.correlations.values())t.timeout&&clearTimeout(t.timeout);this.correlations.clear(),this.eventHistory.clear(),this.initialized=!1}async handleIncomingEvent(t){await this.route(t)}findMatchingSubscriptions(t){let e=[];for(let i of this.subscriptions.values())i.active&&(i.type==="domain"&&i.filter===t.source||i.type==="eventType"&&this.matchEventType(t.type,i.filter))&&e.push(i);return e}matchEventType(t,e){if(e==="*")return!0;let i=e.replace(/\\/g,"\\\\").replace(/\./g,"\\.").replace(/\*/g,".*");return new RegExp(`^${i}$`).test(t)}async applyRoutes(t){let e=[];for(let i of this.routes){if(!(i.source==="*"||i.source===t.source||Array.isArray(i.source)&&i.source.includes(t.source))||!this.matchEventType(t.type,i.eventPattern)||i.filter&&!i.filter(t))continue;let o=i.transform?i.transform(t):t;for(let n of i.targets)n!==t.source&&e.push(this.eventBus.publish({...o,id:a(),correlationId:t.correlationId??t.id}))}return e}addToHistory(t){this.eventHistory.push(t)}};function y(c,t){return new u(c,t)}export{u as a,y as b};
@@ -1,2 +1,2 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.14");process.exit(0)}
2
- import{a as l,d as b}from"./chunk-AJVLVF7V.js";import{a as d,b as g}from"./chunk-57DRT6UA.js";import{a as f}from"./chunk-YKQWIXUY.js";import{c as p}from"./chunk-C3OIBFAA.js";f();g();b();var v={dimensions:384,M:16,efConstruction:200,efSearch:100,metric:"cosine",namespace:"coverage-hnsw",maxElements:1e5},S=p.create("coverage-analysis/hnsw-index"),u=class{constructor(e,t={}){this.memory=e;this.config={...v,...t},this.stats={vectorCount:0,searchOperations:0,insertOperations:0}}memory;config;stats;searchLatencies=[];backendType="ruvector-gnn";adapter=null;initialized=!1;metadataStore=new Map;async initialize(){if(this.initialized)return;let e=this.config.metric==="cosine"?"cosine":"euclidean",t=`coverage-${this.config.namespace}`;d.close(t),this.adapter=d.create(t,{dimensions:this.config.dimensions,M:this.config.M,efConstruction:this.config.efConstruction,efSearch:this.config.efSearch,metric:e}),S.info(`HnswAdapter initialized: dimension=${this.config.dimensions}, metric=${this.config.metric}, M=${this.config.M} (unified backend via ADR-071)`),this.initialized=!0}isNativeAvailable(){return this.initialized&&this.adapter!==null}getBackendType(){return this.backendType}isRuvectorAvailable(){return this.initialized&&this.adapter!==null&&this.adapter.isRuvectorAvailable()}async insert(e,t,a){this.initialized||await this.initialize(),t=this.validateVector(t),this.adapter.addByStringId(e,t),a&&this.metadataStore.set(e,a),this.stats.insertOperations++,this.stats.vectorCount=this.adapter.size()}async search(e,t){this.initialized||await this.initialize(),e=this.validateVector(e);let a=performance.now(),n=[];this.adapter.size()>0&&(n=this.adapter.searchByArray(e,t).map(({id:i,score:o})=>({key:i,score:o,distance:1-o,metadata:this.metadataStore.get(i)})));let s=performance.now()-a;return this.recordSearchLatency(s),this.stats.searchOperations++,n}async batchInsert(e){this.initialized||await this.initialize();let t=100;for(let a=0;a<e.length;a+=t){let n=e.slice(a,a+t);await Promise.all(n.map(r=>this.insert(r.key,r.vector,r.metadata)))}}async delete(e){if(!this.adapter)return!1;let t=this.adapter.removeByStringId(e);if(t){this.metadataStore.delete(e);let a=this.buildKey(e);await this.memory.delete(a),this.stats.vectorCount=this.adapter.size()}return t}async getStats(){return{nativeHNSW:this.initialized&&this.adapter!==null,backendType:this.backendType,vectorCount:this.stats.vectorCount,indexSizeBytes:this.stats.vectorCount*this.config.dimensions*4,avgSearchLatencyMs:this.calculateAvgLatency(),p95SearchLatencyMs:this.calculatePercentileLatency(95),p99SearchLatencyMs:this.calculatePercentileLatency(99),searchOperations:this.stats.searchOperations,insertOperations:this.stats.insertOperations}}async clear(){this.metadataStore.clear(),this.adapter&&this.adapter.clear(),this.stats.vectorCount=0,this.searchLatencies=[]}validateVector(e){if(e.length!==this.config.dimensions)return this.resizeVector(e,this.config.dimensions);for(let t=0;t<e.length;t++)if(!Number.isFinite(e[t]))throw new Error(`Invalid vector value at index ${t}: ${e[t]}`);return e}resizeVector(e,t){if(e.length===t)return e;if(e.length>t){let n=new Array(t).fill(0),r=e.length/t;for(let s=0;s<t;s++){let h=Math.floor(s*r),i=Math.floor((s+1)*r),o=0;for(let m=h;m<i;m++)o+=e[m];n[s]=o/(i-h)}return n}let a=new Array(t).fill(0);for(let n=0;n<e.length;n++)a[n]=e[n];return a}buildKey(e){return`${this.config.namespace}:${e}`}recordSearchLatency(e){this.searchLatencies.push(e);let t=1e3;this.searchLatencies.length>t&&(this.searchLatencies=this.searchLatencies.slice(-t))}calculateAvgLatency(){return this.searchLatencies.length===0?0:this.searchLatencies.reduce((t,a)=>t+a,0)/this.searchLatencies.length}calculatePercentileLatency(e){if(this.searchLatencies.length===0)return 0;let t=[...this.searchLatencies].sort((n,r)=>n-r),a=Math.ceil(e/100*t.length)-1;return t[Math.max(0,a)]}setEfSearch(e){this.config.efSearch=e}};function C(c,e){return new u(c,e)}async function H(c,e=1e4,t=1e3){let n=performance.now();for(let i=0;i<e;i++){let o=Array.from({length:384},()=>l());await c.insert(`bench-${i}`,o)}let r=performance.now()-n,s=performance.now();for(let i=0;i<t;i++){let o=Array.from({length:384},()=>l());await c.search(o,10)}let h=performance.now()-s;return{insertTimeMs:r,searchTimeMs:h,avgSearchLatencyMs:h/t,isNative:c.isNativeAvailable(),backendType:c.getBackendType()}}export{v as a,u as b,C as c,H as d};
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.16");process.exit(0)}
2
+ import{a as l,d as b}from"./chunk-3HD7E6HN.js";import{a as d,b as g}from"./chunk-F742SZAX.js";import{a as f}from"./chunk-YAPLJR7K.js";import{c as p}from"./chunk-G5RHFBAY.js";f();g();b();var v={dimensions:384,M:16,efConstruction:200,efSearch:100,metric:"cosine",namespace:"coverage-hnsw",maxElements:1e5},S=p.create("coverage-analysis/hnsw-index"),u=class{constructor(e,t={}){this.memory=e;this.config={...v,...t},this.stats={vectorCount:0,searchOperations:0,insertOperations:0}}memory;config;stats;searchLatencies=[];backendType="ruvector-gnn";adapter=null;initialized=!1;metadataStore=new Map;async initialize(){if(this.initialized)return;let e=this.config.metric==="cosine"?"cosine":"euclidean",t=`coverage-${this.config.namespace}`;d.close(t),this.adapter=d.create(t,{dimensions:this.config.dimensions,M:this.config.M,efConstruction:this.config.efConstruction,efSearch:this.config.efSearch,metric:e}),S.info(`HnswAdapter initialized: dimension=${this.config.dimensions}, metric=${this.config.metric}, M=${this.config.M} (unified backend via ADR-071)`),this.initialized=!0}isNativeAvailable(){return this.initialized&&this.adapter!==null}getBackendType(){return this.backendType}isRuvectorAvailable(){return this.initialized&&this.adapter!==null&&this.adapter.isRuvectorAvailable()}async insert(e,t,a){this.initialized||await this.initialize(),t=this.validateVector(t),this.adapter.addByStringId(e,t),a&&this.metadataStore.set(e,a),this.stats.insertOperations++,this.stats.vectorCount=this.adapter.size()}async search(e,t){this.initialized||await this.initialize(),e=this.validateVector(e);let a=performance.now(),n=[];this.adapter.size()>0&&(n=this.adapter.searchByArray(e,t).map(({id:i,score:o})=>({key:i,score:o,distance:1-o,metadata:this.metadataStore.get(i)})));let s=performance.now()-a;return this.recordSearchLatency(s),this.stats.searchOperations++,n}async batchInsert(e){this.initialized||await this.initialize();let t=100;for(let a=0;a<e.length;a+=t){let n=e.slice(a,a+t);await Promise.all(n.map(r=>this.insert(r.key,r.vector,r.metadata)))}}async delete(e){if(!this.adapter)return!1;let t=this.adapter.removeByStringId(e);if(t){this.metadataStore.delete(e);let a=this.buildKey(e);await this.memory.delete(a),this.stats.vectorCount=this.adapter.size()}return t}async getStats(){return{nativeHNSW:this.initialized&&this.adapter!==null,backendType:this.backendType,vectorCount:this.stats.vectorCount,indexSizeBytes:this.stats.vectorCount*this.config.dimensions*4,avgSearchLatencyMs:this.calculateAvgLatency(),p95SearchLatencyMs:this.calculatePercentileLatency(95),p99SearchLatencyMs:this.calculatePercentileLatency(99),searchOperations:this.stats.searchOperations,insertOperations:this.stats.insertOperations}}async clear(){this.metadataStore.clear(),this.adapter&&this.adapter.clear(),this.stats.vectorCount=0,this.searchLatencies=[]}validateVector(e){if(e.length!==this.config.dimensions)return this.resizeVector(e,this.config.dimensions);for(let t=0;t<e.length;t++)if(!Number.isFinite(e[t]))throw new Error(`Invalid vector value at index ${t}: ${e[t]}`);return e}resizeVector(e,t){if(e.length===t)return e;if(e.length>t){let n=new Array(t).fill(0),r=e.length/t;for(let s=0;s<t;s++){let h=Math.floor(s*r),i=Math.floor((s+1)*r),o=0;for(let m=h;m<i;m++)o+=e[m];n[s]=o/(i-h)}return n}let a=new Array(t).fill(0);for(let n=0;n<e.length;n++)a[n]=e[n];return a}buildKey(e){return`${this.config.namespace}:${e}`}recordSearchLatency(e){this.searchLatencies.push(e);let t=1e3;this.searchLatencies.length>t&&(this.searchLatencies=this.searchLatencies.slice(-t))}calculateAvgLatency(){return this.searchLatencies.length===0?0:this.searchLatencies.reduce((t,a)=>t+a,0)/this.searchLatencies.length}calculatePercentileLatency(e){if(this.searchLatencies.length===0)return 0;let t=[...this.searchLatencies].sort((n,r)=>n-r),a=Math.ceil(e/100*t.length)-1;return t[Math.max(0,a)]}setEfSearch(e){this.config.efSearch=e}};function C(c,e){return new u(c,e)}async function H(c,e=1e4,t=1e3){let n=performance.now();for(let i=0;i<e;i++){let o=Array.from({length:384},()=>l());await c.insert(`bench-${i}`,o)}let r=performance.now()-n,s=performance.now();for(let i=0;i<t;i++){let o=Array.from({length:384},()=>l());await c.search(o,10)}let h=performance.now()-s;return{insertTimeMs:r,searchTimeMs:h,avgSearchLatencyMs:h/t,isNative:c.isNativeAvailable(),backendType:c.getBackendType()}}export{v as a,u as b,C as c,H as d};