@ebrindley/build 0.0.0-stage → 1.42.1-rc28

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 (878) hide show
  1. package/.build-project/providers/catalog.json +13951 -0
  2. package/.build-project/providers/pricing.json +1978 -0
  3. package/.build-project/providers/registry.json +4103 -0
  4. package/.github/SECURITY.md +75 -0
  5. package/.nvmrc +1 -0
  6. package/CHANGELOG.md +661 -0
  7. package/CODE_OF_CONDUCT.md +44 -0
  8. package/CONTRIBUTING.md +24 -0
  9. package/INSTALL.md +623 -0
  10. package/LICENSE +21 -0
  11. package/README.md +118 -2
  12. package/THIRD_PARTY_NOTICES.txt +26 -0
  13. package/dist/ai-judge-UE5UOYOO.js +191 -0
  14. package/dist/allowlist-grounding-KPLN6NC5.js +16 -0
  15. package/dist/allowlist-utils-MZZKKXRD.js +31 -0
  16. package/dist/apply-completion-mode-EM37UZHB.js +110 -0
  17. package/dist/artifact-migrator-WPACNSEP.js +276 -0
  18. package/dist/ask-2OZ4JFQR.js +176 -0
  19. package/dist/auth-6UKBTJUQ.js +185 -0
  20. package/dist/auth-H5KJL6HL.js +165 -0
  21. package/dist/auth-LVJRJDMU.js +12 -0
  22. package/dist/auth-NHZOCNRR.js +94 -0
  23. package/dist/auth-PBXHWXGW.js +95 -0
  24. package/dist/auth-T7Y5DCAH.js +91 -0
  25. package/dist/auth-TVVKCHQW.js +13 -0
  26. package/dist/auth-UHB2UCSS.js +97 -0
  27. package/dist/auth-VACA3VUL.js +98 -0
  28. package/dist/auth-VVLC77S3.js +44 -0
  29. package/dist/auth-liveness-XO4AGDDD.js +53 -0
  30. package/dist/autoloop-cleanup-SI3VGAAR.js +106 -0
  31. package/dist/autoloop-evidence-gates-J5GG5YQB.js +39 -0
  32. package/dist/autoloop-gate-policy-SUNAEP6Q.js +169 -0
  33. package/dist/autoloop-helpers-VQGQNTT6.js +52 -0
  34. package/dist/autoloop-ledger-P6TIDP7C.js +96 -0
  35. package/dist/autoloop-ledger-subscriber-HFAGOZXH.js +161 -0
  36. package/dist/autoloop-run-defaults-GWGZBNT7.js +27 -0
  37. package/dist/autoloop-run-lock-GBWRM5A2.js +197 -0
  38. package/dist/autoloop-success-C32QVWOP.js +93 -0
  39. package/dist/autoloop-termination-summary-GI6IBQWD.js +58 -0
  40. package/dist/autoloop-trajectory-AMKSQISD.js +70 -0
  41. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  42. package/dist/automatic-branch-cleanup-R62X2C5O.js +49 -0
  43. package/dist/autonomous-loop-controller-2WL363LW.js +4386 -0
  44. package/dist/backend-YUTFDZXZ.js +30 -0
  45. package/dist/background-executor-Z3ODTMD7.js +260 -0
  46. package/dist/backlog-75QPEAMW.js +403 -0
  47. package/dist/backlog-execution-intent-GWUV5TUK.js +19 -0
  48. package/dist/backup-active-store-XHWLN34M.js +16 -0
  49. package/dist/backup-machine-stores-UI4LTJOY.js +251 -0
  50. package/dist/backup-telemetry-db-Z4ICYCNW.js +26 -0
  51. package/dist/branch-archive-manager-FMSQ7YJF.js +18 -0
  52. package/dist/branch-cleanup-manager-ST6FJGND.js +35 -0
  53. package/dist/build-gate-7NKWPY62.js +68 -0
  54. package/dist/build-root-S7DINODY.js +18 -0
  55. package/dist/change-summary-R6CB6VXJ.js +50 -0
  56. package/dist/chunk-24MNKKOM.js +173 -0
  57. package/dist/chunk-2H6VZFIO.js +235 -0
  58. package/dist/chunk-2JIX3EKV.js +39 -0
  59. package/dist/chunk-2KO7HVZM.js +106 -0
  60. package/dist/chunk-2L36U25O.js +100 -0
  61. package/dist/chunk-2NMNFUQA.js +475 -0
  62. package/dist/chunk-2OUAEH67.js +83 -0
  63. package/dist/chunk-2VLJUXJU.js +115 -0
  64. package/dist/chunk-2VUEDIUM.js +77 -0
  65. package/dist/chunk-2Y2IIHPI.js +430 -0
  66. package/dist/chunk-2YRG3LHZ.js +220 -0
  67. package/dist/chunk-2Z5Q3SUY.js +65 -0
  68. package/dist/chunk-32IYXIE5.js +873 -0
  69. package/dist/chunk-33IGPPUI.js +292 -0
  70. package/dist/chunk-352PCJLK.js +283 -0
  71. package/dist/chunk-35J4NE6S.js +226 -0
  72. package/dist/chunk-3C7WBIVK.js +1016 -0
  73. package/dist/chunk-3H3EY6U7.js +1225 -0
  74. package/dist/chunk-3H4MWYIC.js +198 -0
  75. package/dist/chunk-3HHWQR3N.js +2479 -0
  76. package/dist/chunk-3JKNRYEE.js +14 -0
  77. package/dist/chunk-3LECCYZY.js +128 -0
  78. package/dist/chunk-3LOY6YZI.js +852 -0
  79. package/dist/chunk-3M57DADF.js +44 -0
  80. package/dist/chunk-3NOTLVLG.js +3803 -0
  81. package/dist/chunk-3OPP2OZB.js +1480 -0
  82. package/dist/chunk-3P5IN5E7.js +9 -0
  83. package/dist/chunk-3PL22IYZ.js +20 -0
  84. package/dist/chunk-3REDAJUJ.js +14 -0
  85. package/dist/chunk-3S2R4XJI.js +203 -0
  86. package/dist/chunk-3UBZI5DW.js +61 -0
  87. package/dist/chunk-3VV5OBGG.js +308 -0
  88. package/dist/chunk-3WY5TU2O.js +823 -0
  89. package/dist/chunk-43OKHTW4.js +82 -0
  90. package/dist/chunk-45KUJBDI.js +112 -0
  91. package/dist/chunk-47X5LM7B.js +224 -0
  92. package/dist/chunk-4B6FQJ77.js +268 -0
  93. package/dist/chunk-4BTDUT2S.js +42 -0
  94. package/dist/chunk-4DJL2VXA.js +24 -0
  95. package/dist/chunk-4EBSXZ73.js +48 -0
  96. package/dist/chunk-4QKP6I4C.js +294 -0
  97. package/dist/chunk-4U6XK2DG.js +300 -0
  98. package/dist/chunk-4UMRUFBD.js +132 -0
  99. package/dist/chunk-4US4SYJ4.js +569 -0
  100. package/dist/chunk-4ZPLWEZO.js +154 -0
  101. package/dist/chunk-56WPYDJH.js +624 -0
  102. package/dist/chunk-57WRCJJW.js +50 -0
  103. package/dist/chunk-5AW4RMNG.js +24 -0
  104. package/dist/chunk-5EQN56OZ.js +155 -0
  105. package/dist/chunk-5F43TUIN.js +38 -0
  106. package/dist/chunk-5FKHIKTS.js +115 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5KQETTNS.js +152 -0
  109. package/dist/chunk-5PDVN2KO.js +498 -0
  110. package/dist/chunk-5UBIFVRD.js +509 -0
  111. package/dist/chunk-5YDE3Q62.js +46 -0
  112. package/dist/chunk-626AJVMU.js +302 -0
  113. package/dist/chunk-633XZ7UF.js +3583 -0
  114. package/dist/chunk-63DHNHGA.js +236 -0
  115. package/dist/chunk-666656AR.js +568 -0
  116. package/dist/chunk-67YRJPJO.js +19 -0
  117. package/dist/chunk-6CAU7VBA.js +20 -0
  118. package/dist/chunk-6CB3KJRY.js +21 -0
  119. package/dist/chunk-6DBMALXL.js +29 -0
  120. package/dist/chunk-6E25C4IA.js +269 -0
  121. package/dist/chunk-6FIBNIQU.js +73 -0
  122. package/dist/chunk-6G57FYBV.js +189 -0
  123. package/dist/chunk-6KZKRTG3.js +4885 -0
  124. package/dist/chunk-6LAH2UV2.js +525 -0
  125. package/dist/chunk-6PZY2TTU.js +921 -0
  126. package/dist/chunk-6T6NHXK4.js +230 -0
  127. package/dist/chunk-6TBEX4R4.js +432 -0
  128. package/dist/chunk-6TRD7TEE.js +911 -0
  129. package/dist/chunk-6XCP2RAI.js +47 -0
  130. package/dist/chunk-726G6WDL.js +351 -0
  131. package/dist/chunk-75EMT7BF.js +616 -0
  132. package/dist/chunk-762ACDZJ.js +4696 -0
  133. package/dist/chunk-77I6G4CO.js +1 -0
  134. package/dist/chunk-7DJ6SQH3.js +510 -0
  135. package/dist/chunk-7HPCIOMA.js +1383 -0
  136. package/dist/chunk-7HYBSRPZ.js +17503 -0
  137. package/dist/chunk-7KBEOPVB.js +73 -0
  138. package/dist/chunk-7LHJDJB3.js +2222 -0
  139. package/dist/chunk-7NVJMH52.js +306 -0
  140. package/dist/chunk-7RMARDVH.js +33 -0
  141. package/dist/chunk-7SEWU4QG.js +36 -0
  142. package/dist/chunk-7TUTZTI2.js +911 -0
  143. package/dist/chunk-7VBDFPUM.js +340 -0
  144. package/dist/chunk-7VRJHTGZ.js +6406 -0
  145. package/dist/chunk-7YAOUUKK.js +493 -0
  146. package/dist/chunk-AAAODV76.js +860 -0
  147. package/dist/chunk-AB4HUJVQ.js +339 -0
  148. package/dist/chunk-AEQWV746.js +611 -0
  149. package/dist/chunk-AHU3FKPA.js +11639 -0
  150. package/dist/chunk-AISTV5XU.js +226 -0
  151. package/dist/chunk-AJBTKGJZ.js +48 -0
  152. package/dist/chunk-AJJNW7XT.js +248 -0
  153. package/dist/chunk-AJN5Y5YZ.js +160 -0
  154. package/dist/chunk-ALDTFNZ3.js +150 -0
  155. package/dist/chunk-ARARVIZK.js +281 -0
  156. package/dist/chunk-ATBM6AW5.js +53 -0
  157. package/dist/chunk-ATKEKM3E.js +206 -0
  158. package/dist/chunk-AUJLW6JZ.js +92 -0
  159. package/dist/chunk-AY3MHEFM.js +24 -0
  160. package/dist/chunk-B7PYTV72.js +236 -0
  161. package/dist/chunk-B7YRSULE.js +1423 -0
  162. package/dist/chunk-BAWJNMWF.js +339 -0
  163. package/dist/chunk-BBPIILO2.js +88 -0
  164. package/dist/chunk-BD3PGW6A.js +957 -0
  165. package/dist/chunk-BDPYFAB4.js +44 -0
  166. package/dist/chunk-BIUV23HH.js +729 -0
  167. package/dist/chunk-BQ3VAGXH.js +243 -0
  168. package/dist/chunk-BQJOGAWT.js +31 -0
  169. package/dist/chunk-BT7EG7CO.js +68 -0
  170. package/dist/chunk-BV3XQQLU.js +27 -0
  171. package/dist/chunk-BY6ODHNZ.js +78 -0
  172. package/dist/chunk-BZRLSZNV.js +79 -0
  173. package/dist/chunk-C3DH3NCY.js +2773 -0
  174. package/dist/chunk-C3KCMAJP.js +756 -0
  175. package/dist/chunk-C7AGUJ5K.js +267 -0
  176. package/dist/chunk-CBSWKQCX.js +342 -0
  177. package/dist/chunk-CE5OZBYY.js +21 -0
  178. package/dist/chunk-CFCVYHSW.js +373 -0
  179. package/dist/chunk-CHA2HDE5.js +126 -0
  180. package/dist/chunk-CIHWPGS5.js +146 -0
  181. package/dist/chunk-CJBSZX3F.js +127 -0
  182. package/dist/chunk-CLA6QIJM.js +43 -0
  183. package/dist/chunk-CPSVQR2I.js +365 -0
  184. package/dist/chunk-CRPRVNQ4.js +254 -0
  185. package/dist/chunk-CSIE4Y7C.js +1093 -0
  186. package/dist/chunk-CSOPSYDY.js +142 -0
  187. package/dist/chunk-CSXLLEGB.js +205 -0
  188. package/dist/chunk-CTDLERWU.js +293 -0
  189. package/dist/chunk-CULBXMSK.js +110 -0
  190. package/dist/chunk-D2M2Y5ID.js +21 -0
  191. package/dist/chunk-D37WY7SH.js +1060 -0
  192. package/dist/chunk-D4VJFCGZ.js +89 -0
  193. package/dist/chunk-D6WTZMZB.js +48 -0
  194. package/dist/chunk-DBHOWDUH.js +976 -0
  195. package/dist/chunk-DCACX7BV.js +19364 -0
  196. package/dist/chunk-DFHX4XYA.js +128 -0
  197. package/dist/chunk-DIKBRRKE.js +176 -0
  198. package/dist/chunk-DJG5RIOR.js +9 -0
  199. package/dist/chunk-DNIOIISW.js +616 -0
  200. package/dist/chunk-DOA5G7IA.js +315 -0
  201. package/dist/chunk-DP7FKP6W.js +855 -0
  202. package/dist/chunk-DS2JZ677.js +79 -0
  203. package/dist/chunk-DSRLVYBS.js +82 -0
  204. package/dist/chunk-EAEVKNJA.js +209 -0
  205. package/dist/chunk-EEUESN3T.js +575 -0
  206. package/dist/chunk-EJ4LUU5Y.js +73 -0
  207. package/dist/chunk-EJIWTPSZ.js +1063 -0
  208. package/dist/chunk-EJVCDTAN.js +116 -0
  209. package/dist/chunk-EKLUBDBQ.js +627 -0
  210. package/dist/chunk-EN62WLFD.js +849 -0
  211. package/dist/chunk-ENYRCL43.js +26 -0
  212. package/dist/chunk-EP22ZMFO.js +273 -0
  213. package/dist/chunk-EP4SVAVI.js +87 -0
  214. package/dist/chunk-EPAMVGI3.js +1562 -0
  215. package/dist/chunk-EPRMH6HO.js +24 -0
  216. package/dist/chunk-ES6NWJ36.js +4057 -0
  217. package/dist/chunk-ETA2K4KI.js +30 -0
  218. package/dist/chunk-ETAD4NKD.js +31 -0
  219. package/dist/chunk-EUWIIDQ7.js +93 -0
  220. package/dist/chunk-EVE3OD2W.js +141 -0
  221. package/dist/chunk-EXA26FFC.js +459 -0
  222. package/dist/chunk-EXSPAA35.js +244 -0
  223. package/dist/chunk-F55YABKV.js +258 -0
  224. package/dist/chunk-F5DNGU5W.js +27 -0
  225. package/dist/chunk-F622MJYV.js +103 -0
  226. package/dist/chunk-F6NIQD74.js +5111 -0
  227. package/dist/chunk-FAWJTC34.js +43 -0
  228. package/dist/chunk-FAZBRHGG.js +47 -0
  229. package/dist/chunk-FIEUSGNJ.js +39 -0
  230. package/dist/chunk-FKCG7K6H.js +1146 -0
  231. package/dist/chunk-FOVVXV45.js +229 -0
  232. package/dist/chunk-FRBPKBFE.js +30 -0
  233. package/dist/chunk-FSA5BPFI.js +268 -0
  234. package/dist/chunk-FSJ5TTZ3.js +29 -0
  235. package/dist/chunk-FT7SGLXT.js +193 -0
  236. package/dist/chunk-FUUVZZUB.js +62 -0
  237. package/dist/chunk-FYMRVUNZ.js +1697 -0
  238. package/dist/chunk-FYTAA5FG.js +162 -0
  239. package/dist/chunk-G3VB2UCZ.js +3892 -0
  240. package/dist/chunk-G6OIMVXH.js +405 -0
  241. package/dist/chunk-G7PQCXVH.js +228 -0
  242. package/dist/chunk-GAB6UW52.js +1087 -0
  243. package/dist/chunk-GAFJEYLK.js +29 -0
  244. package/dist/chunk-GC4CRMTS.js +642 -0
  245. package/dist/chunk-GFHSIWHL.js +5297 -0
  246. package/dist/chunk-GI5M67YA.js +735 -0
  247. package/dist/chunk-GIJWHUWF.js +191 -0
  248. package/dist/chunk-GO6DRECI.js +1 -0
  249. package/dist/chunk-GOFVBTMN.js +314 -0
  250. package/dist/chunk-GQIP72ZJ.js +13 -0
  251. package/dist/chunk-GQXLXRFA.js +28 -0
  252. package/dist/chunk-GT6HFKJB.js +48 -0
  253. package/dist/chunk-GVJGSSKM.js +174 -0
  254. package/dist/chunk-GWHGTG37.js +36 -0
  255. package/dist/chunk-GZAJHLKO.js +18 -0
  256. package/dist/chunk-GZK62I3N.js +314 -0
  257. package/dist/chunk-H3HGMISG.js +483 -0
  258. package/dist/chunk-H3ISZJMJ.js +403 -0
  259. package/dist/chunk-H4HXVWEC.js +9 -0
  260. package/dist/chunk-H6MJGKAW.js +120 -0
  261. package/dist/chunk-HBTTGVR5.js +353 -0
  262. package/dist/chunk-HBZ322WZ.js +35 -0
  263. package/dist/chunk-HEP3ILP4.js +34 -0
  264. package/dist/chunk-HGFXODKO.js +106 -0
  265. package/dist/chunk-HHWDTB6S.js +59 -0
  266. package/dist/chunk-HKO45NLZ.js +286 -0
  267. package/dist/chunk-HLVTEA6A.js +89 -0
  268. package/dist/chunk-HS3SY6HN.js +160 -0
  269. package/dist/chunk-HT5OCGKN.js +899 -0
  270. package/dist/chunk-HXIIEMGF.js +78 -0
  271. package/dist/chunk-I56TH7VM.js +46 -0
  272. package/dist/chunk-I6FN3R5D.js +352 -0
  273. package/dist/chunk-I7SCBHJN.js +655 -0
  274. package/dist/chunk-IJM4GKAT.js +529 -0
  275. package/dist/chunk-IMEYU36R.js +344 -0
  276. package/dist/chunk-INJ3SS6A.js +936 -0
  277. package/dist/chunk-IUKOPCCE.js +441 -0
  278. package/dist/chunk-IVEPZQJO.js +33 -0
  279. package/dist/chunk-IVZEONFC.js +43 -0
  280. package/dist/chunk-IWBHRSG7.js +936 -0
  281. package/dist/chunk-IYY3HQAD.js +484 -0
  282. package/dist/chunk-J2ICMYDA.js +48 -0
  283. package/dist/chunk-J2QCFLUN.js +505 -0
  284. package/dist/chunk-J5HM6V5P.js +1039 -0
  285. package/dist/chunk-J6NZX6QH.js +398 -0
  286. package/dist/chunk-JBBB2Y47.js +432 -0
  287. package/dist/chunk-JDCZQZU7.js +42 -0
  288. package/dist/chunk-JEDNXGSS.js +169 -0
  289. package/dist/chunk-JHP7OT6K.js +89 -0
  290. package/dist/chunk-JLS65NUQ.js +14 -0
  291. package/dist/chunk-JNMWYMC6.js +38 -0
  292. package/dist/chunk-JNSTWNNW.js +25 -0
  293. package/dist/chunk-JOSK6GEU.js +9564 -0
  294. package/dist/chunk-JQUMSIGC.js +100 -0
  295. package/dist/chunk-JVHGMURQ.js +1106 -0
  296. package/dist/chunk-JYXS47FQ.js +951 -0
  297. package/dist/chunk-K2ZMW2Z5.js +2147 -0
  298. package/dist/chunk-K7FAFORM.js +14 -0
  299. package/dist/chunk-KBJXX3ON.js +333 -0
  300. package/dist/chunk-KHFKVQWY.js +486 -0
  301. package/dist/chunk-KHMEI3DQ.js +173 -0
  302. package/dist/chunk-KHW3UD7B.js +69 -0
  303. package/dist/chunk-KKQKWAMF.js +365 -0
  304. package/dist/chunk-KOKXJV2U.js +455 -0
  305. package/dist/chunk-KQ4NGOJI.js +14 -0
  306. package/dist/chunk-KQYQOXMS.js +342 -0
  307. package/dist/chunk-KTMW65UX.js +14 -0
  308. package/dist/chunk-KUEWV2JH.js +593 -0
  309. package/dist/chunk-KXYDV3HP.js +1523 -0
  310. package/dist/chunk-KZ4JMGZ5.js +96 -0
  311. package/dist/chunk-KZWGBUIO.js +2659 -0
  312. package/dist/chunk-L2CBG5IX.js +1892 -0
  313. package/dist/chunk-L2S235CU.js +314 -0
  314. package/dist/chunk-L32WD57F.js +98 -0
  315. package/dist/chunk-LDJCKAJP.js +123 -0
  316. package/dist/chunk-LDWNBEN7.js +541 -0
  317. package/dist/chunk-LJVH57G2.js +241 -0
  318. package/dist/chunk-LPQ7NZEN.js +209 -0
  319. package/dist/chunk-LRGH3CCV.js +148 -0
  320. package/dist/chunk-LULOGMMM.js +1133 -0
  321. package/dist/chunk-LWGKN2GY.js +8284 -0
  322. package/dist/chunk-LX4F24ZH.js +157 -0
  323. package/dist/chunk-M4BUEXXF.js +839 -0
  324. package/dist/chunk-M6UHOC4I.js +553 -0
  325. package/dist/chunk-MCBNWZNO.js +657 -0
  326. package/dist/chunk-MEMSY6VY.js +223 -0
  327. package/dist/chunk-MHLEZQQI.js +145 -0
  328. package/dist/chunk-MJ6WNSIX.js +192 -0
  329. package/dist/chunk-MKASIKWZ.js +442 -0
  330. package/dist/chunk-MNOVBYFU.js +60 -0
  331. package/dist/chunk-MO2BYAAF.js +2896 -0
  332. package/dist/chunk-MP6P7Y2A.js +180 -0
  333. package/dist/chunk-MQ4TFJAG.js +3365 -0
  334. package/dist/chunk-MT2WAIR3.js +131 -0
  335. package/dist/chunk-MTU7VTNN.js +1122 -0
  336. package/dist/chunk-MULMXX4V.js +150 -0
  337. package/dist/chunk-MW2DWWVA.js +147 -0
  338. package/dist/chunk-MY3ZPUN4.js +151 -0
  339. package/dist/chunk-MYLH2S4G.js +64 -0
  340. package/dist/chunk-MZ5WYKNA.js +28 -0
  341. package/dist/chunk-N3Q2JNPV.js +249 -0
  342. package/dist/chunk-N5DX4JAK.js +12 -0
  343. package/dist/chunk-NAINGKHF.js +35 -0
  344. package/dist/chunk-NEQUQHOX.js +223 -0
  345. package/dist/chunk-NHNPEZS4.js +1408 -0
  346. package/dist/chunk-NHTIXJCR.js +17 -0
  347. package/dist/chunk-NKLPMBNV.js +1154 -0
  348. package/dist/chunk-NMVZ5YES.js +199 -0
  349. package/dist/chunk-NRFRY3GE.js +256 -0
  350. package/dist/chunk-NTD6CSI6.js +1266 -0
  351. package/dist/chunk-NUO7B3SH.js +318 -0
  352. package/dist/chunk-NVOHIJKG.js +1319 -0
  353. package/dist/chunk-NXH3RX7O.js +523 -0
  354. package/dist/chunk-NXZ3DURF.js +257 -0
  355. package/dist/chunk-O26L6F7F.js +209 -0
  356. package/dist/chunk-O5RRIUEP.js +124 -0
  357. package/dist/chunk-O5X6BKAO.js +10 -0
  358. package/dist/chunk-O6ZQUVTR.js +31 -0
  359. package/dist/chunk-O7FE75QZ.js +306 -0
  360. package/dist/chunk-OC7Z6AJQ.js +81 -0
  361. package/dist/chunk-OH7IEZ63.js +307 -0
  362. package/dist/chunk-OI734GRS.js +115 -0
  363. package/dist/chunk-OJBH62DK.js +684 -0
  364. package/dist/chunk-OKJLVSTJ.js +247 -0
  365. package/dist/chunk-OMX5VL43.js +79 -0
  366. package/dist/chunk-ONHAMBN6.js +12 -0
  367. package/dist/chunk-ONYPLIVE.js +753 -0
  368. package/dist/chunk-OSK7QWPD.js +637 -0
  369. package/dist/chunk-OTXLMJKP.js +438 -0
  370. package/dist/chunk-OV5PKQMA.js +213 -0
  371. package/dist/chunk-OXK5HA4B.js +31 -0
  372. package/dist/chunk-OYDWFQA4.js +272 -0
  373. package/dist/chunk-OZAUKWHB.js +22 -0
  374. package/dist/chunk-P5P2EKGH.js +94 -0
  375. package/dist/chunk-P6SSWAKY.js +29 -0
  376. package/dist/chunk-P7CQGPLS.js +30 -0
  377. package/dist/chunk-P7RVCHQV.js +197 -0
  378. package/dist/chunk-PEBWDYIW.js +726 -0
  379. package/dist/chunk-PFCXFO7A.js +9193 -0
  380. package/dist/chunk-PFLDWMX6.js +168 -0
  381. package/dist/chunk-PHZGLQSK.js +15883 -0
  382. package/dist/chunk-PNFTPNSR.js +20 -0
  383. package/dist/chunk-PPHXX4W7.js +175 -0
  384. package/dist/chunk-PPZESPJT.js +262 -0
  385. package/dist/chunk-PRDHI2L5.js +296 -0
  386. package/dist/chunk-PSTKWHHN.js +32 -0
  387. package/dist/chunk-PV53ODOT.js +555 -0
  388. package/dist/chunk-PVJBTI7P.js +24 -0
  389. package/dist/chunk-PXKERBKX.js +100 -0
  390. package/dist/chunk-PZ5AY32C.js +10 -0
  391. package/dist/chunk-Q3DHEZA5.js +85 -0
  392. package/dist/chunk-Q5RZDVQK.js +204 -0
  393. package/dist/chunk-Q64IR2Z2.js +4933 -0
  394. package/dist/chunk-Q6Z5UGPL.js +398 -0
  395. package/dist/chunk-QAMAV4DT.js +627 -0
  396. package/dist/chunk-QBWF4444.js +112 -0
  397. package/dist/chunk-QDKYT4CI.js +22805 -0
  398. package/dist/chunk-QFLBRWCJ.js +126 -0
  399. package/dist/chunk-QILAQACE.js +107 -0
  400. package/dist/chunk-QJ6OEH4K.js +3683 -0
  401. package/dist/chunk-QK3NLYTV.js +320 -0
  402. package/dist/chunk-QOFLUS24.js +535 -0
  403. package/dist/chunk-QOIASNEJ.js +98 -0
  404. package/dist/chunk-QP4UTSOV.js +3587 -0
  405. package/dist/chunk-QP5ST7RI.js +904 -0
  406. package/dist/chunk-QS5AGRZN.js +167 -0
  407. package/dist/chunk-QTAOU53N.js +107 -0
  408. package/dist/chunk-QTCLJHLZ.js +351 -0
  409. package/dist/chunk-QTOLTG4L.js +119 -0
  410. package/dist/chunk-QWDV4OSL.js +142 -0
  411. package/dist/chunk-QWMQ74KD.js +508 -0
  412. package/dist/chunk-QX6LOMMH.js +158 -0
  413. package/dist/chunk-QXBKIHY7.js +238 -0
  414. package/dist/chunk-QXBKTJT6.js +270 -0
  415. package/dist/chunk-QYQOVOLR.js +196 -0
  416. package/dist/chunk-R2CKS6WT.js +73 -0
  417. package/dist/chunk-R2TIYG7U.js +68 -0
  418. package/dist/chunk-R2W3LESH.js +465 -0
  419. package/dist/chunk-R5EXHMUN.js +100 -0
  420. package/dist/chunk-RBBTBCHX.js +289 -0
  421. package/dist/chunk-RBKLOUXA.js +121 -0
  422. package/dist/chunk-RCP2Y6DQ.js +86 -0
  423. package/dist/chunk-RCYEJSD5.js +260 -0
  424. package/dist/chunk-RFDVSI4N.js +134 -0
  425. package/dist/chunk-RGJU63FV.js +1717 -0
  426. package/dist/chunk-RI4EX2QE.js +18 -0
  427. package/dist/chunk-RIMARPCF.js +152 -0
  428. package/dist/chunk-RJ6RSNT6.js +42 -0
  429. package/dist/chunk-RNI2GUIF.js +131 -0
  430. package/dist/chunk-RPHUWJ3K.js +264 -0
  431. package/dist/chunk-RPIMAMV7.js +361 -0
  432. package/dist/chunk-RQFX6YRN.js +49 -0
  433. package/dist/chunk-RRC5BL7B.js +285 -0
  434. package/dist/chunk-RSYTSBOO.js +79 -0
  435. package/dist/chunk-RWQQIKIC.js +35 -0
  436. package/dist/chunk-RZUBOZH2.js +373 -0
  437. package/dist/chunk-S2E632FQ.js +380 -0
  438. package/dist/chunk-S2VQCZO4.js +22 -0
  439. package/dist/chunk-S2XIMQJQ.js +681 -0
  440. package/dist/chunk-S47ISY27.js +183 -0
  441. package/dist/chunk-S6I4KISU.js +142 -0
  442. package/dist/chunk-S6TAFQI5.js +2403 -0
  443. package/dist/chunk-SBBNT5ZJ.js +27 -0
  444. package/dist/chunk-SDJV2DTQ.js +491 -0
  445. package/dist/chunk-SDPIFNLD.js +33 -0
  446. package/dist/chunk-SF6YK3JI.js +835 -0
  447. package/dist/chunk-SK3ZFONO.js +976 -0
  448. package/dist/chunk-SKTFRFQ7.js +1775 -0
  449. package/dist/chunk-SNGM452K.js +2002 -0
  450. package/dist/chunk-STW7OFOA.js +581 -0
  451. package/dist/chunk-SU6UFUQY.js +1351 -0
  452. package/dist/chunk-SVJM3LJA.js +27 -0
  453. package/dist/chunk-SVUNZOPG.js +129 -0
  454. package/dist/chunk-T5XLUYV3.js +34 -0
  455. package/dist/chunk-T7E5JS6N.js +57 -0
  456. package/dist/chunk-TA3N5MMO.js +450 -0
  457. package/dist/chunk-TAJPCXSB.js +13 -0
  458. package/dist/chunk-TDEMDRN2.js +1639 -0
  459. package/dist/chunk-TDSEX5CF.js +24 -0
  460. package/dist/chunk-TGCVL74Y.js +28 -0
  461. package/dist/chunk-TGXXYDL4.js +1012 -0
  462. package/dist/chunk-TIKTYUJO.js +296 -0
  463. package/dist/chunk-TIZAJD4M.js +6029 -0
  464. package/dist/chunk-TLSEZZCG.js +5549 -0
  465. package/dist/chunk-TMBDRHAX.js +19 -0
  466. package/dist/chunk-TRURQUBP.js +1217 -0
  467. package/dist/chunk-TSQ256N5.js +152 -0
  468. package/dist/chunk-TUQMMFEQ.js +2244 -0
  469. package/dist/chunk-U424MJLC.js +81 -0
  470. package/dist/chunk-U4DRS6ZW.js +11 -0
  471. package/dist/chunk-U5KS22IN.js +204 -0
  472. package/dist/chunk-UAPHFJPN.js +673 -0
  473. package/dist/chunk-UB7LQITD.js +1040 -0
  474. package/dist/chunk-UBVRHGAZ.js +237 -0
  475. package/dist/chunk-UDNNAQN5.js +98 -0
  476. package/dist/chunk-UJP3XM54.js +342 -0
  477. package/dist/chunk-UJYDH2MW.js +305 -0
  478. package/dist/chunk-UKMPASIC.js +399 -0
  479. package/dist/chunk-UKUL3EHK.js +763 -0
  480. package/dist/chunk-UPHU64NB.js +1327 -0
  481. package/dist/chunk-URMSZXAD.js +43 -0
  482. package/dist/chunk-US3RT6CY.js +525 -0
  483. package/dist/chunk-UTDEOPKV.js +30 -0
  484. package/dist/chunk-UUUDKV7N.js +13 -0
  485. package/dist/chunk-UVKWU3SM.js +39 -0
  486. package/dist/chunk-V2TVPO3X.js +521 -0
  487. package/dist/chunk-V3KLVK7B.js +398 -0
  488. package/dist/chunk-V3YFFHDR.js +17 -0
  489. package/dist/chunk-VAG6GUBR.js +1162 -0
  490. package/dist/chunk-VBENAHDA.js +1814 -0
  491. package/dist/chunk-VBNCKCCI.js +16 -0
  492. package/dist/chunk-VCGSWN5M.js +1300 -0
  493. package/dist/chunk-VE2O2I7M.js +115 -0
  494. package/dist/chunk-VIFHYTI5.js +31 -0
  495. package/dist/chunk-VJER3FUS.js +5080 -0
  496. package/dist/chunk-VLMDM56Q.js +268 -0
  497. package/dist/chunk-VMFZEVVX.js +99 -0
  498. package/dist/chunk-VNDPQVUZ.js +1853 -0
  499. package/dist/chunk-VSPJRLGA.js +4783 -0
  500. package/dist/chunk-VSWC5ZXI.js +103 -0
  501. package/dist/chunk-VYI4DSZP.js +2017 -0
  502. package/dist/chunk-W4BAIQ6L.js +1212 -0
  503. package/dist/chunk-W7VQAL2K.js +2203 -0
  504. package/dist/chunk-WEI3ZDZH.js +33 -0
  505. package/dist/chunk-WEIUS5NT.js +26 -0
  506. package/dist/chunk-WEW7UFWE.js +546 -0
  507. package/dist/chunk-WGQAXLNA.js +384 -0
  508. package/dist/chunk-WJAL4JL3.js +206 -0
  509. package/dist/chunk-WKFOJ5ZG.js +141 -0
  510. package/dist/chunk-WMWQEFLN.js +2177 -0
  511. package/dist/chunk-WNECKKO2.js +154 -0
  512. package/dist/chunk-WPKLYOAM.js +195 -0
  513. package/dist/chunk-WSH37YQN.js +243 -0
  514. package/dist/chunk-WV3KQDPE.js +84 -0
  515. package/dist/chunk-WZFC4V4U.js +389 -0
  516. package/dist/chunk-XCOIBNET.js +13 -0
  517. package/dist/chunk-XDM65LBX.js +53 -0
  518. package/dist/chunk-XGU6PBO5.js +645 -0
  519. package/dist/chunk-XHOI4V62.js +43 -0
  520. package/dist/chunk-XIBVFMLQ.js +6858 -0
  521. package/dist/chunk-XJ2E7YEJ.js +117 -0
  522. package/dist/chunk-XON4ZCYX.js +69 -0
  523. package/dist/chunk-XQPEWJPI.js +127 -0
  524. package/dist/chunk-XSJTIFUY.js +31 -0
  525. package/dist/chunk-XT7OVWM3.js +64 -0
  526. package/dist/chunk-XTXYIISX.js +1104 -0
  527. package/dist/chunk-XV7NZL4B.js +57 -0
  528. package/dist/chunk-XWIZ6B5S.js +109 -0
  529. package/dist/chunk-XWLIKOBX.js +240 -0
  530. package/dist/chunk-XZOXEIN4.js +156 -0
  531. package/dist/chunk-XZRS7I7W.js +3673 -0
  532. package/dist/chunk-Y4ZDDHB6.js +44 -0
  533. package/dist/chunk-Y733RB7T.js +194 -0
  534. package/dist/chunk-YBHUB4XR.js +14931 -0
  535. package/dist/chunk-YKC75XK4.js +147 -0
  536. package/dist/chunk-YKMXFVK7.js +27 -0
  537. package/dist/chunk-YO5BAJ55.js +225 -0
  538. package/dist/chunk-YPDCLXNZ.js +568 -0
  539. package/dist/chunk-YSQPGVFK.js +116 -0
  540. package/dist/chunk-YTVVTIWJ.js +716 -0
  541. package/dist/chunk-YVCMDVBB.js +698 -0
  542. package/dist/chunk-YYTOA6DP.js +114 -0
  543. package/dist/chunk-Z5WGNULV.js +88 -0
  544. package/dist/chunk-Z6NGVVXG.js +66 -0
  545. package/dist/chunk-Z7CDQNH3.js +20 -0
  546. package/dist/chunk-ZH4G3FU5.js +187 -0
  547. package/dist/chunk-ZJB6SQPA.js +257 -0
  548. package/dist/chunk-ZL6E4HMY.js +42 -0
  549. package/dist/chunk-ZMLOC3DW.js +62 -0
  550. package/dist/chunk-ZORW64QH.js +101 -0
  551. package/dist/chunk-ZVVD2XGV.js +1369 -0
  552. package/dist/cli-utils-ER33ODC5.js +31 -0
  553. package/dist/cli-validation-6CHPTANV.js +146 -0
  554. package/dist/commit-utils-3STAY7C7.js +49 -0
  555. package/dist/compatibility-notice-IHNXR2JR.js +21 -0
  556. package/dist/compete-config-resolver-V3GDNJMM.js +125 -0
  557. package/dist/compete-results-XUM3PJHS.js +318 -0
  558. package/dist/competition-outcome-tracker-NWSMVUPG.js +62 -0
  559. package/dist/config-4HHE4OIK.js +238 -0
  560. package/dist/config-D6YAZASH.js +10 -0
  561. package/dist/config-MIPRDYYV.js +46 -0
  562. package/dist/config-audit-GA5DCUAI.js +371 -0
  563. package/dist/config-explain-4LMO556H.js +71 -0
  564. package/dist/config-loader-RGP634PC.js +51 -0
  565. package/dist/config-manager-J2UTO635.js +114 -0
  566. package/dist/config-merger-TVUJBZTS.js +14 -0
  567. package/dist/config-validator-H4ZVIE56.js +122 -0
  568. package/dist/cost-HSIV5U2Y.js +85 -0
  569. package/dist/data-migration-state-OAUL2WPQ.js +35 -0
  570. package/dist/db-migrator-NUOW5NKR.js +34 -0
  571. package/dist/default-paths-UILB62BN.js +49 -0
  572. package/dist/discovery-V6GYUJUC.js +53 -0
  573. package/dist/doctor-BBSMCDWE.js +271 -0
  574. package/dist/doctor-context-blocks-LPY75VZA.js +231 -0
  575. package/dist/doctor-instructions-import-JXHDDOE5.js +70 -0
  576. package/dist/doctor-purpose-6YJOXPBE.js +30 -0
  577. package/dist/domain-analyzer-S35ABUNA.js +48 -0
  578. package/dist/ensure-initialized-Q6PEU55O.js +78 -0
  579. package/dist/entry.js +922 -0
  580. package/dist/error-parser-core-MZFMFANN.js +70 -0
  581. package/dist/evaluation-context-GQBYDAEV.js +63 -0
  582. package/dist/evidence-plan-resolver-5FUAP3SA.js +111 -0
  583. package/dist/execution-data-writer-YCG5UH37.js +72 -0
  584. package/dist/execution-policy-applier-PWZM5LNA.js +63 -0
  585. package/dist/execution-preflight-DASJWWQF.js +223 -0
  586. package/dist/execution-roles-KNSNNB2D.js +112 -0
  587. package/dist/exit-code-error-QIY5DOKF.js +18 -0
  588. package/dist/external-temp-cleanup-CAW7LQ6R.js +360 -0
  589. package/dist/factory-YCYCB7AE.js +209 -0
  590. package/dist/file-utils-ZQYNBQBW.js +45 -0
  591. package/dist/flywheel-allowlist-revert-H22HA6JE.js +21 -0
  592. package/dist/flywheel-autoloop-executor-PDOASJEZ.js +316 -0
  593. package/dist/flywheel-autoloop-unverified-TOKYFCDC.js +36 -0
  594. package/dist/flywheel-competition-executor-YJUMMEJO.js +320 -0
  595. package/dist/flywheel-executor-JWU43KAY.js +437 -0
  596. package/dist/flywheel-git-isolation-FQ2TRWMB.js +56 -0
  597. package/dist/flywheel-manifest-HDPNMWWF.js +114 -0
  598. package/dist/flywheel-model-defaults-UHAKTZT3.js +110 -0
  599. package/dist/flywheel-preflight-III2C7TH.js +163 -0
  600. package/dist/flywheel-resume-2O45MS7Y.js +31 -0
  601. package/dist/flywheel-resume-execution-lease-P2BK257J.js +59 -0
  602. package/dist/flywheel-safety-AVAVFXIJ.js +19 -0
  603. package/dist/flywheel-scope-decision-ALJUUNGG.js +14 -0
  604. package/dist/get-telemetry-logger-MPDVO2JA.js +155 -0
  605. package/dist/git-message-style-KCXGMTDT.js +104 -0
  606. package/dist/guidance-profile-config-G3K5YQOO.js +113 -0
  607. package/dist/guidance-profile-renderer-TX4TNDFL.js +23 -0
  608. package/dist/identity-XLQJ4YJF.js +25 -0
  609. package/dist/index-query-6NUY4FKX.js +37 -0
  610. package/dist/index.js +85588 -0
  611. package/dist/indexer-DL54CM3K.js +44 -0
  612. package/dist/init-OUZ72344.js +245 -0
  613. package/dist/instructions-import-offer-NSYXSITC.js +363 -0
  614. package/dist/instructions-run-NBII7W36.js +114 -0
  615. package/dist/interrupted-work-E4TLKJLE.js +43 -0
  616. package/dist/invoke-provider-auth-NEWEIHCI.js +38 -0
  617. package/dist/judge-scoring.json +64 -0
  618. package/dist/lab-mode-YXQ2Y3NG.js +44 -0
  619. package/dist/lab-utils-5QAMDJR5.js +29 -0
  620. package/dist/linux-host-class-YDWQX65O.js +31 -0
  621. package/dist/llm-judge-executor-OJSNCTFJ.js +179 -0
  622. package/dist/local-ci-config-VZ4WWDT5.js +48 -0
  623. package/dist/local-executor-DCMDDRX2.js +280 -0
  624. package/dist/logger-5KNKS3O4.js +154 -0
  625. package/dist/matrix-prompt-builder-4ZBOGZSB.js +527 -0
  626. package/dist/matrix-result-parser-EZJM4YXP.js +14 -0
  627. package/dist/merge-batch-RTEEMVDB.js +313 -0
  628. package/dist/merge-batch-members-VIWGVRHP.js +24 -0
  629. package/dist/merge-queue-TIIUSOY6.js +126 -0
  630. package/dist/merge-queue-trust-DUNZ4J65.js +21 -0
  631. package/dist/metadata-UKSMWM6J.js +29 -0
  632. package/dist/model-catalog-readiness-R5KJBP5M.js +202 -0
  633. package/dist/model-invocations-db-XTUPPQ34.js +70 -0
  634. package/dist/model-resolver-JFZ2MHOJ.js +39 -0
  635. package/dist/model-resolver-SCQ57KAQ.js +217 -0
  636. package/dist/model-roles-D3OR4NAH.js +110 -0
  637. package/dist/monitor-F4SIU5G2.js +96 -0
  638. package/dist/nested-worktrees-2WUWQ75N.js +23 -0
  639. package/dist/next-S3IRLVER.js +96 -0
  640. package/dist/next-UKPFRXOO.js +148 -0
  641. package/dist/opportunistic-TL4S26VX.js +86 -0
  642. package/dist/optimization-config-resolver-NAEIYU6A.js +148 -0
  643. package/dist/package-HJR4QJT4.js +10 -0
  644. package/dist/parse-git-status-7PIYFPS2.js +21 -0
  645. package/dist/path-security-5WJSY56G.js +41 -0
  646. package/dist/paths-JUI7C4KU.js +45 -0
  647. package/dist/plan-backlog-list-fast-SSTQL5XP.js +89 -0
  648. package/dist/plan-backlog-show-fast-PFRAQ3JB.js +114 -0
  649. package/dist/plan-sprint-list-fast-HD2KBZSY.js +110 -0
  650. package/dist/plan-sprint-status-fast-YFYH7WQF.js +116 -0
  651. package/dist/plan-task-status-fast-JU5PNLUU.js +114 -0
  652. package/dist/plan-to-flywheel-PY5MSY2H.js +529 -0
  653. package/dist/preflight-PJHGTJNZ.js +12 -0
  654. package/dist/process-registry-B4ZUCN7T.js +28 -0
  655. package/dist/process-scanner-TU3QHWVB.js +23 -0
  656. package/dist/processes-6FHVGT72.js +28 -0
  657. package/dist/processes-json-fast-YWTMUWXB.js +72 -0
  658. package/dist/profile-HWTC56SG.js +209 -0
  659. package/dist/project-runtime-paths-2UQNG5Y4.js +41 -0
  660. package/dist/protected-branches-N36LDBFY.js +71 -0
  661. package/dist/provider-aware-resource-manager-YTFAHNGJ.js +40 -0
  662. package/dist/provider-matrix-2KO2V5OM.js +214 -0
  663. package/dist/provider-matrix-renderer-MEC3PER7.js +139 -0
  664. package/dist/provider-output-forwarding-2AHL7YMA.js +26 -0
  665. package/dist/provider-registry-WCZ65QHC.js +136 -0
  666. package/dist/provider-temp-cleanup-IUNPJCZF.js +14 -0
  667. package/dist/prune-engine-EOQVWEP6.js +448 -0
  668. package/dist/publication-turn-S42RZTQF.js +44 -0
  669. package/dist/quality-gate-JQMVCKOO.js +72 -0
  670. package/dist/quickstart-3O6FRCFB.js +105 -0
  671. package/dist/readiness-GW6ABRHB.js +139 -0
  672. package/dist/readiness-KFZCXDTT.js +215 -0
  673. package/dist/registry-7XG376SY.js +217 -0
  674. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  675. package/dist/repo-root-YG6MQZDW.js +28 -0
  676. package/dist/resolution-engine-FFEK7HQ2.js +187 -0
  677. package/dist/resolve-provider-cli-ZEXVZKET.js +44 -0
  678. package/dist/restore-telemetry-db-E7BR5PO7.js +459 -0
  679. package/dist/routing-events-AW6SRZ6G.js +13 -0
  680. package/dist/routing-history-store-FMDDQL6W.js +39 -0
  681. package/dist/routing-planner-C6OHO3EY.js +221 -0
  682. package/dist/runner-KHDNQ5KU.js +1194 -0
  683. package/dist/runner-PIS2BW7Y.js +1801 -0
  684. package/dist/safety-E3JJVSFL.js +67 -0
  685. package/dist/safety-stanza-HE6GXP4G.js +49 -0
  686. package/dist/sandbox-7LBZC5PE.js +72 -0
  687. package/dist/sandbox-ASWCDYZL.js +80 -0
  688. package/dist/schema-extensions.sql +234 -0
  689. package/dist/security-JI22TBEB.js +17 -0
  690. package/dist/setup-bb-plugin-FQXLA76Y.js +531 -0
  691. package/dist/setup-claude-code-NF4ZSHVE.js +197 -0
  692. package/dist/setup-temp-cleanup-2APZ4HMA.js +29 -0
  693. package/dist/shared-utils-34HJZ6JX.js +40 -0
  694. package/dist/simple-artifact-goal-MQLDDMMX.js +29 -0
  695. package/dist/sprint-N7JFTEGL.js +403 -0
  696. package/dist/sprint-bridge-KJXIBNRJ.js +117 -0
  697. package/dist/sprint-completion-dependents-34SR7JVL.js +43 -0
  698. package/dist/sprint-execution-service-A6JPUBWY.js +376 -0
  699. package/dist/sprint-manager-MU2ZUWN2.js +140 -0
  700. package/dist/sqlite-timeout-config-U2CT4LKU.js +13 -0
  701. package/dist/sqlite-wrapper-FSGJ2QEW.js +19 -0
  702. package/dist/stale-cleanup-orchestrator-4X6324VF.js +71 -0
  703. package/dist/storage-access-I3V5LER7.js +31 -0
  704. package/dist/store-XVG64ZR2.js +25 -0
  705. package/dist/task-classifier-MN2DYE5R.js +558 -0
  706. package/dist/task-list-fast-7AT6LTTA.js +112 -0
  707. package/dist/task-manager-LHPBBRRE.js +136 -0
  708. package/dist/task-report-OLPAWBTK.js +64 -0
  709. package/dist/task-type-detector-6RG3YNZF.js +27 -0
  710. package/dist/task-type-resolver-EQHOUIHT.js +64 -0
  711. package/dist/telemetry-5VYSK772.js +212 -0
  712. package/dist/telemetry-health-tracker-4GFW2EMP.js +12 -0
  713. package/dist/telemetry-path-resolver-H3NFHHQY.js +34 -0
  714. package/dist/telemetry-reliability-URJDTNPZ.js +76 -0
  715. package/dist/transports-NREZQTJK.js +106 -0
  716. package/dist/unified-cost-tracker-5MTBJ2CL.js +59 -0
  717. package/dist/unified-state-cleanup-GGAXLHXF.js +292 -0
  718. package/dist/universal-cost-calculator-JTFEJVWK.js +70 -0
  719. package/dist/user-agents-QLIGPLP2.js +30 -0
  720. package/dist/variant-execution-I4ZZUAWY.js +319 -0
  721. package/dist/variant-opt-parser-JHCXKY2K.js +251 -0
  722. package/dist/variant-request-input-PL37N3AN.js +11 -0
  723. package/dist/variant-state-cleanup-KHMXRBZN.js +287 -0
  724. package/dist/variant-worker-COB5YTJX.js +4517 -0
  725. package/dist/variant-worker.js +26 -0
  726. package/dist/variants-XGDSXYG3.js +267 -0
  727. package/dist/verification-command-YSPU4VBH.js +66 -0
  728. package/dist/verify-command-timeout-DQUYH33Z.js +11 -0
  729. package/dist/verify-commands-LOHMOFKC.js +65 -0
  730. package/dist/warning-JSKSFKBT.js +13 -0
  731. package/dist/work-edge-K65NHVWY.js +50 -0
  732. package/dist/work-item-writer-KY5ZWZWW.js +30 -0
  733. package/dist/worker-JNXXEIT6.js +1504 -0
  734. package/dist/worker.js +21 -0
  735. package/dist/workspace-tree-identity-JO5PSKTW.js +52 -0
  736. package/dist/worktree-environment-WTVABAQW.js +64 -0
  737. package/dist/worktree-metrics-VZRQI26T.js +66 -0
  738. package/dist/writeback-TQFQBJNU.js +50 -0
  739. package/docs/CLI_REFERENCE.md +8287 -0
  740. package/docs/PROVIDER_SETUP.md +1737 -0
  741. package/docs/README.md +96 -0
  742. package/docs/TROUBLESHOOTING.md +2209 -0
  743. package/docs/getting-started/QUICK_START.md +260 -0
  744. package/docs/getting-started/README.md +198 -0
  745. package/docs/getting-started/SETUP.md +25 -0
  746. package/docs/reference/AGENT_CONTEXT.md +84 -0
  747. package/docs/reference/DELIVERY_ONBOARDING.md +198 -0
  748. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  749. package/docs/reference/SECURITY.md +291 -0
  750. package/docs/reference/TELEMETRY_PRIVACY.md +259 -0
  751. package/integrations/bb-plugin-build/README.md +391 -0
  752. package/integrations/bb-plugin-build/app.css +431 -0
  753. package/integrations/bb-plugin-build/app.tsx +6210 -0
  754. package/integrations/bb-plugin-build/package.json +45 -0
  755. package/integrations/bb-plugin-build/server.ts +488 -0
  756. package/integrations/bb-plugin-build/src/adapter.ts +3672 -0
  757. package/integrations/bb-plugin-build/src/backlog-authoring-model.ts +150 -0
  758. package/integrations/bb-plugin-build/src/backlog-authoring-schema.ts +458 -0
  759. package/integrations/bb-plugin-build/src/backlog-authoring-service.ts +467 -0
  760. package/integrations/bb-plugin-build/src/backlog-authoring-view.ts +1025 -0
  761. package/integrations/bb-plugin-build/src/command-evidence-schema.ts +13 -0
  762. package/integrations/bb-plugin-build/src/competition-defaults-schema.ts +122 -0
  763. package/integrations/bb-plugin-build/src/competition-defaults-service.ts +105 -0
  764. package/integrations/bb-plugin-build/src/competition-defaults-view.ts +138 -0
  765. package/integrations/bb-plugin-build/src/contract.ts +718 -0
  766. package/integrations/bb-plugin-build/src/execution-activity-view.ts +98 -0
  767. package/integrations/bb-plugin-build/src/finalize-model.ts +205 -0
  768. package/integrations/bb-plugin-build/src/finalize-schema.ts +150 -0
  769. package/integrations/bb-plugin-build/src/finalize-service.ts +330 -0
  770. package/integrations/bb-plugin-build/src/finalize-view.ts +159 -0
  771. package/integrations/bb-plugin-build/src/judge-operations-readback.ts +303 -0
  772. package/integrations/bb-plugin-build/src/judge-operations-schema.ts +33 -0
  773. package/integrations/bb-plugin-build/src/judge-operations-view.ts +459 -0
  774. package/integrations/bb-plugin-build/src/model.ts +1318 -0
  775. package/integrations/bb-plugin-build/src/monitor-service.ts +233 -0
  776. package/integrations/bb-plugin-build/src/panel-read-ux.ts +97 -0
  777. package/integrations/bb-plugin-build/src/patch-preview-schema.ts +166 -0
  778. package/integrations/bb-plugin-build/src/patch-preview-service.ts +480 -0
  779. package/integrations/bb-plugin-build/src/patch-preview-view.ts +109 -0
  780. package/integrations/bb-plugin-build/src/planning-readback.ts +228 -0
  781. package/integrations/bb-plugin-build/src/planning-service.ts +647 -0
  782. package/integrations/bb-plugin-build/src/planning-sync-evidence.ts +37 -0
  783. package/integrations/bb-plugin-build/src/planning-workspace-readback.ts +33 -0
  784. package/integrations/bb-plugin-build/src/planning-workspace-schema.ts +131 -0
  785. package/integrations/bb-plugin-build/src/planning-workspace.ts +333 -0
  786. package/integrations/bb-plugin-build/src/poll-handoff.ts +136 -0
  787. package/integrations/bb-plugin-build/src/project-target-server.ts +21 -0
  788. package/integrations/bb-plugin-build/src/project-target.ts +45 -0
  789. package/integrations/bb-plugin-build/src/reference-index.ts +218 -0
  790. package/integrations/bb-plugin-build/src/repository-identity.ts +17 -0
  791. package/integrations/bb-plugin-build/src/repository-schema.ts +30 -0
  792. package/integrations/bb-plugin-build/src/result-explorer-view.ts +597 -0
  793. package/integrations/bb-plugin-build/src/result-readback-model.ts +163 -0
  794. package/integrations/bb-plugin-build/src/result-readback-schema.ts +319 -0
  795. package/integrations/bb-plugin-build/src/result-readback-service.ts +333 -0
  796. package/integrations/bb-plugin-build/src/run-page-view.ts +332 -0
  797. package/integrations/bb-plugin-build/src/setup-config-schema.ts +293 -0
  798. package/integrations/bb-plugin-build/src/setup-config-service.ts +620 -0
  799. package/integrations/bb-plugin-build/src/setup-config-view.ts +388 -0
  800. package/integrations/bb-plugin-build/src/sprint-close-model.ts +150 -0
  801. package/integrations/bb-plugin-build/src/sprint-close-schema.ts +128 -0
  802. package/integrations/bb-plugin-build/src/sprint-close-service.ts +293 -0
  803. package/integrations/bb-plugin-build/src/sprint-close-view.ts +116 -0
  804. package/integrations/bb-plugin-build/src/sprint-composition-model.ts +709 -0
  805. package/integrations/bb-plugin-build/src/sprint-composition-readback.ts +231 -0
  806. package/integrations/bb-plugin-build/src/sprint-composition-schema.ts +597 -0
  807. package/integrations/bb-plugin-build/src/sprint-composition-service.ts +773 -0
  808. package/integrations/bb-plugin-build/src/sprint-composition-view.ts +1221 -0
  809. package/integrations/bb-plugin-build/src/sprint-execution-schema.ts +188 -0
  810. package/integrations/bb-plugin-build/src/sprint-execution-service.ts +289 -0
  811. package/integrations/bb-plugin-build/src/sprint-execution-view.ts +54 -0
  812. package/integrations/bb-plugin-build/src/task-authoring-model.ts +563 -0
  813. package/integrations/bb-plugin-build/src/task-authoring-schema.ts +629 -0
  814. package/integrations/bb-plugin-build/src/task-authoring-service.ts +842 -0
  815. package/integrations/bb-plugin-build/src/task-authoring-view.ts +1227 -0
  816. package/integrations/bb-plugin-build/src/task-catalog-schema.ts +46 -0
  817. package/integrations/bb-plugin-build/src/task-catalog-service.ts +44 -0
  818. package/integrations/bb-plugin-build/src/task-detail-readback.ts +56 -0
  819. package/integrations/bb-plugin-build/src/task-detail-schema.ts +171 -0
  820. package/integrations/bb-plugin-build/src/task-navigation.ts +446 -0
  821. package/integrations/bb-plugin-build/src/workbench-route.ts +74 -0
  822. package/package.json +306 -4
  823. package/schemas/README.md +80 -0
  824. package/schemas/build.config.schema.json +2110 -0
  825. package/schemas/config-v1.schema.json +136 -0
  826. package/schemas/execution-config.schema.json +47 -0
  827. package/schemas/judge-scoring.schema.json +257 -0
  828. package/schemas/provider-config.schema.json +179 -0
  829. package/schemas/telemetry-config.schema.json +79 -0
  830. package/schemas/user-preferences.schema.json +141 -0
  831. package/scripts/assert-node-runtime.mjs +146 -0
  832. package/scripts/preflight-native.mjs +49 -0
  833. package/scripts/setup-git-hooks.mjs +39 -0
  834. package/scripts/sync.sh +2871 -0
  835. package/scripts/write-node-launcher.sh +138 -0
  836. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  837. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  838. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  839. package/templates/.build-project/README.md +41 -0
  840. package/templates/.build-project/agents/README.md +50 -0
  841. package/templates/.build-project/agents/architect.md +10 -0
  842. package/templates/.build-project/agents/code-reviewer.md +10 -0
  843. package/templates/.build-project/agents/debugger.md +10 -0
  844. package/templates/.build-project/agents/documenter.md +10 -0
  845. package/templates/.build-project/agents/test-automator.md +10 -0
  846. package/templates/.build-project/config/build.config.jsonc +64 -0
  847. package/templates/.build-project/config/project-context.template.json +6 -0
  848. package/templates/.build-project/config/task-type-aliases.presets/kanban.yaml +14 -0
  849. package/templates/.build-project/config/task-type-aliases.presets/scrum.yaml +17 -0
  850. package/templates/.build-project/config/task-type-aliases.presets/xp.yaml +12 -0
  851. package/templates/.build-project/config/task-type-aliases.yaml +29 -0
  852. package/templates/.build-project/gitignore.template +70 -0
  853. package/templates/.build-project/task-types/analysis.yaml +38 -0
  854. package/templates/.build-project/task-types/architecture.yaml +35 -0
  855. package/templates/.build-project/task-types/doc.yaml +34 -0
  856. package/templates/.build-project/task-types/feature.yaml +22 -0
  857. package/templates/.build-project/task-types/general.yaml +4 -0
  858. package/templates/.build-project/task-types/security.yaml +38 -0
  859. package/templates/AGENTS.template.md +85 -0
  860. package/templates/CLAUDE.template.md +1 -0
  861. package/templates/GEMINI.template.md +1 -0
  862. package/templates/builtin-workflows/code-review.yaml +73 -0
  863. package/templates/builtin-workflows/skills/code-review/SKILL.md +61 -0
  864. package/templates/builtin-workflows/skills/execution-contract-analysis/SKILL.md +24 -0
  865. package/templates/builtin-workflows/skills/execution-contract-code/SKILL.md +19 -0
  866. package/templates/builtin-workflows/skills/execution-contract-structured/SKILL.md +17 -0
  867. package/templates/ci/incident-intake.mjs +787 -0
  868. package/templates/ci/incidents.yml.template +103 -0
  869. package/templates/ci/node.yml.template +17 -0
  870. package/templates/ci/python.yml.template +17 -0
  871. package/templates/guard-kit/GUARD_SETUP.md.template +258 -0
  872. package/templates/guard-kit/build-guard.yml.template +189 -0
  873. package/templates/guard-kit/check.mjs.template +932 -0
  874. package/templates/guard-kit/config.json.template +7 -0
  875. package/templates/guard-kit/policy.json.template +1 -0
  876. package/templates/profiles/README.md +57 -0
  877. package/templates/profiles/frontier-claude.json +23 -0
  878. package/templates/profiles/frontier-codex.json +23 -0
@@ -0,0 +1,1039 @@
1
+ import {
2
+ globalScope
3
+ } from "./chunk-GAFJEYLK.js";
4
+ import {
5
+ canonicalizeVariantIdentifier
6
+ } from "./chunk-TGXXYDL4.js";
7
+ import {
8
+ parseJsonWithContext
9
+ } from "./chunk-P6SSWAKY.js";
10
+ import {
11
+ emitWarning
12
+ } from "./chunk-7VRJHTGZ.js";
13
+
14
+ // src/telemetry/unified-telemetry.ts
15
+ import { createReadStream } from "fs";
16
+ import { createInterface } from "readline/promises";
17
+
18
+ // src/telemetry/cost-dimensions.ts
19
+ var COST_TOLERANCE_ABSOLUTE = 1e-4;
20
+ var COST_TOLERANCE_RELATIVE = 1e-3;
21
+ function validateCostDimensions(cost) {
22
+ const errors = [];
23
+ if (!cost.provider || typeof cost.provider !== "string") {
24
+ errors.push("provider must be a non-empty string");
25
+ }
26
+ if (!cost.model || typeof cost.model !== "string") {
27
+ errors.push("model must be a non-empty string");
28
+ }
29
+ if (!cost.currency || typeof cost.currency !== "string") {
30
+ errors.push("currency must be a non-empty string");
31
+ }
32
+ if (typeof cost.inputTokens !== "number" || cost.inputTokens < 0) {
33
+ errors.push("inputTokens must be a non-negative number");
34
+ }
35
+ if (typeof cost.outputTokens !== "number" || cost.outputTokens < 0) {
36
+ errors.push("outputTokens must be a non-negative number");
37
+ }
38
+ if (typeof cost.totalCost !== "number" || cost.totalCost < 0) {
39
+ errors.push("totalCost must be a non-negative number");
40
+ }
41
+ if (typeof cost.timestamp !== "number" || cost.timestamp <= 0) {
42
+ errors.push("timestamp must be a positive number");
43
+ }
44
+ if (cost.cacheReadTokens !== void 0) {
45
+ if (typeof cost.cacheReadTokens !== "number" || cost.cacheReadTokens < 0) {
46
+ errors.push("cacheReadTokens must be a non-negative number");
47
+ }
48
+ }
49
+ if (cost.cacheReadTokensIncludedInInput !== void 0 && typeof cost.cacheReadTokensIncludedInInput !== "boolean") {
50
+ errors.push("cacheReadTokensIncludedInInput must be a boolean");
51
+ }
52
+ if (cost.cacheWriteTokens !== void 0) {
53
+ if (typeof cost.cacheWriteTokens !== "number" || cost.cacheWriteTokens < 0) {
54
+ errors.push("cacheWriteTokens must be a non-negative number");
55
+ }
56
+ }
57
+ if (cost.cacheCost !== void 0) {
58
+ if (typeof cost.cacheCost !== "number" || cost.cacheCost < 0) {
59
+ errors.push("cacheCost must be a non-negative number");
60
+ }
61
+ }
62
+ if (cost.toolCosts !== void 0) {
63
+ if (typeof cost.toolCosts !== "number" || cost.toolCosts < 0) {
64
+ errors.push("toolCosts must be a non-negative number");
65
+ }
66
+ }
67
+ if (cost.infrastructureCost !== void 0) {
68
+ if (typeof cost.infrastructureCost !== "number" || cost.infrastructureCost < 0) {
69
+ errors.push("infrastructureCost must be a non-negative number");
70
+ }
71
+ }
72
+ if (cost.costBreakdown) {
73
+ const breakdown = cost.costBreakdown;
74
+ const breakdownComponents = [
75
+ ["inputCost", breakdown.inputCost],
76
+ ["outputCost", breakdown.outputCost],
77
+ ["cacheCost", breakdown.cacheCost],
78
+ ["toolCosts", breakdown.toolCosts],
79
+ ["infrastructureCost", breakdown.infrastructureCost]
80
+ ];
81
+ for (const [name, value] of breakdownComponents) {
82
+ if (value !== void 0 && (typeof value !== "number" || value < 0)) {
83
+ errors.push(`costBreakdown.${name} must be a non-negative number`);
84
+ }
85
+ }
86
+ const calculatedTotal = breakdown.inputCost + breakdown.outputCost + (breakdown.cacheCost || 0) + (breakdown.toolCosts || 0) + (breakdown.infrastructureCost || 0);
87
+ if (Number.isFinite(calculatedTotal) && Number.isFinite(cost.totalCost)) {
88
+ const difference = Math.abs(calculatedTotal - cost.totalCost);
89
+ const magnitude = Math.max(1, Math.abs(calculatedTotal), Math.abs(cost.totalCost));
90
+ const tolerance = Math.max(COST_TOLERANCE_ABSOLUTE, magnitude * COST_TOLERANCE_RELATIVE);
91
+ if (difference > tolerance) {
92
+ errors.push(
93
+ `costBreakdown sum (${calculatedTotal.toFixed(4)}) does not match totalCost (${cost.totalCost.toFixed(4)})`
94
+ );
95
+ }
96
+ }
97
+ }
98
+ return {
99
+ valid: errors.length === 0,
100
+ errors
101
+ };
102
+ }
103
+
104
+ // src/telemetry/variant-normalization.ts
105
+ function normalizeVariant(variant) {
106
+ if (typeof variant !== "string") {
107
+ return "unknown";
108
+ }
109
+ const trimmed = variant.trim();
110
+ return trimmed || "unknown";
111
+ }
112
+ function normalizeVariantForEventId(variant) {
113
+ const normalized = normalizeVariant(variant);
114
+ return normalized.replace(/[^A-Za-z0-9_-]+/g, "-").replace(/-+/g, "-");
115
+ }
116
+
117
+ // src/telemetry/model-invocation-event-id.ts
118
+ function buildModelInvocationEventId(taskId, variant, provider, model) {
119
+ const normalizedVariant = normalizeVariant(variant);
120
+ const canonicalVariant = canonicalizeVariantIdentifier({
121
+ variant: normalizedVariant,
122
+ provider,
123
+ model,
124
+ executionMode: "local"
125
+ });
126
+ return `${taskId}-${normalizeVariantForEventId(canonicalVariant)}`;
127
+ }
128
+
129
+ // src/telemetry/unified-telemetry.ts
130
+ var ENV_NEW = "BUILD_UNIFIED_TELEMETRY";
131
+ var ENV_LEGACY = "ENABLE_UNIFIED_TELEMETRY";
132
+ var UNIFIED_TELEMETRY_FLAG = ENV_NEW;
133
+ var legacyWarningEmitted = false;
134
+ function readUnifiedTelemetryFlag() {
135
+ const newVal = process.env[ENV_NEW];
136
+ const legacyVal = process.env[ENV_LEGACY];
137
+ if (newVal === void 0 && legacyVal !== void 0 && !legacyWarningEmitted) {
138
+ console.warn(`Warning: ${ENV_LEGACY} is deprecated; use ${ENV_NEW}.`);
139
+ legacyWarningEmitted = true;
140
+ }
141
+ return newVal ?? legacyVal;
142
+ }
143
+ var UnifiedTelemetryLogger = class _UnifiedTelemetryLogger {
144
+ telemetry;
145
+ costTracker;
146
+ telemetryDb;
147
+ // SQLite database connection (optional)
148
+ /** Track total dual-write operations for metrics */
149
+ dualWriteCount = 0;
150
+ /** Track dual-write errors for monitoring */
151
+ dualWriteErrors = 0;
152
+ /** Cache feature flag value (check once per instance) */
153
+ unifiedMode;
154
+ options;
155
+ /**
156
+ * Create a unified telemetry logger
157
+ *
158
+ * @param telemetry - Telemetry logger instance
159
+ * @param costTracker - Cost tracking instance
160
+ * @param telemetryDb - Optional SQLite database connection for data retrieval
161
+ */
162
+ constructor(telemetry, costTracker, telemetryDb, options = {}) {
163
+ this.telemetry = telemetry;
164
+ this.costTracker = costTracker;
165
+ this.telemetryDb = telemetryDb;
166
+ this.options = options;
167
+ this.unifiedMode = this.getFeatureFlag();
168
+ this.logInitialization();
169
+ }
170
+ /**
171
+ * Validates and converts a string to VariantLifecycleEvent
172
+ * @throws {Error} If event string is not a valid VariantLifecycleEvent
173
+ */
174
+ validateEventType(event) {
175
+ const validEvents = [
176
+ "started",
177
+ "first_commit",
178
+ "completed",
179
+ "failed",
180
+ "evaluated"
181
+ ];
182
+ if (!validEvents.includes(event)) {
183
+ throw new Error(
184
+ `Invalid variant event type: "${event}". Must be one of: ${validEvents.join(", ")}`
185
+ );
186
+ }
187
+ return event;
188
+ }
189
+ static formatUtcLogDate(date) {
190
+ const year = date.getUTCFullYear();
191
+ const month = String(date.getUTCMonth() + 1).padStart(2, "0");
192
+ const day = String(date.getUTCDate()).padStart(2, "0");
193
+ return {
194
+ yearMonth: `${year}-${month}`,
195
+ day: `${year}-${month}-${day}`
196
+ };
197
+ }
198
+ /**
199
+ * Log a model invocation with cost data
200
+ *
201
+ * Core method for logging AI model invocations with associated cost information.
202
+ * Uses dual-write mode when unified telemetry is enabled.
203
+ *
204
+ * @param event - Event data with cost dimensions
205
+ * @returns Promise that resolves when logging is complete
206
+ *
207
+ * @throws {Error} If cost validation fails or logging errors occur
208
+ */
209
+ async logModelInvocation(event) {
210
+ if (event.cost) {
211
+ const validation = validateCostDimensions(event.cost);
212
+ if (!validation.valid) {
213
+ throw new Error(`Invalid cost dimensions: ${validation.errors.join(", ")}`);
214
+ }
215
+ }
216
+ const normalizedEvent = this.normalizeModelInvocationEvent(event);
217
+ if (this.unifiedMode) {
218
+ return this.dualWrite(normalizedEvent);
219
+ }
220
+ return this.legacyWrite(normalizedEvent);
221
+ }
222
+ /**
223
+ * Log a variant execution event with optional cost data
224
+ *
225
+ * Simplified method for logging variant-specific events. Cost data
226
+ * is optional and can be attached later.
227
+ *
228
+ * @param taskId - Task identifier
229
+ * @param variant - Variant name
230
+ * @param event - Event type
231
+ * @param data - Event data (may include cost)
232
+ */
233
+ async logVariantEvent(taskId, variant, event, data) {
234
+ const eventData = {
235
+ taskId,
236
+ variant: normalizeVariant(variant),
237
+ event,
238
+ provider: data?.provider || "unknown",
239
+ model: "unknown",
240
+ cost: data?.cost,
241
+ metadata: data
242
+ };
243
+ return this.logModelInvocation(eventData);
244
+ }
245
+ /**
246
+ * Validate consistency between telemetry and cost tracker
247
+ *
248
+ * Compares cost data between the two systems to ensure dual-write
249
+ * is working correctly. Should show 100% match when properly configured.
250
+ *
251
+ * @param options - Validation options
252
+ * @param options.startDate - Start of date range (ISO string)
253
+ * @param options.endDate - End of date range (ISO string)
254
+ * @param options.sampleSize - Maximum events to check (default: 1000)
255
+ * @returns Consistency report with match statistics
256
+ */
257
+ async validateConsistency(options) {
258
+ const sampleSize = options.sampleSize || 1e3;
259
+ await this.telemetry.flushAsync();
260
+ const telemetryEvents = await this.getTelemetryEventsWithCost(
261
+ options.startDate,
262
+ options.endDate,
263
+ sampleSize
264
+ );
265
+ const costTrackerEvents = await this.getCostTrackerEvents(
266
+ options.startDate,
267
+ options.endDate,
268
+ sampleSize
269
+ );
270
+ return this.compareEvents(telemetryEvents, costTrackerEvents);
271
+ }
272
+ /**
273
+ * Get dual-write statistics
274
+ *
275
+ * Returns metrics about dual-write operations for monitoring and debugging.
276
+ *
277
+ * @returns Statistics object
278
+ */
279
+ getDualWriteStats() {
280
+ const successRate = this.dualWriteCount > 0 ? 1 - this.dualWriteErrors / this.dualWriteCount : 1;
281
+ return {
282
+ enabled: this.unifiedMode,
283
+ totalWrites: this.dualWriteCount,
284
+ errors: this.dualWriteErrors,
285
+ successRate
286
+ };
287
+ }
288
+ /**
289
+ * Update feature flag at runtime (for testing)
290
+ *
291
+ * @param enabled - Whether to enable unified mode
292
+ */
293
+ setUnifiedMode(enabled) {
294
+ this.unifiedMode = enabled;
295
+ this.logModeChange();
296
+ }
297
+ // ============================================================================
298
+ // PRIVATE METHODS
299
+ // ============================================================================
300
+ normalizeModelInvocationEvent(event) {
301
+ return {
302
+ ...event,
303
+ variant: normalizeVariant(event.variant)
304
+ };
305
+ }
306
+ /**
307
+ * Dual-write to both telemetry and cost tracker
308
+ */
309
+ async dualWrite(event) {
310
+ this.dualWriteCount++;
311
+ const telemetryPromise = Promise.resolve().then(
312
+ () => this.telemetry.logVariantEvent(
313
+ event.taskId,
314
+ event.variant,
315
+ this.validateEventType(event.event),
316
+ {
317
+ provider: event.provider,
318
+ model: event.model,
319
+ executionMode: "local",
320
+ cost: event.cost,
321
+ cloudMetadata: {
322
+ costEstimate: event.cost?.totalCost,
323
+ ...event.metadata?.cloudMetadata
324
+ },
325
+ ...event.metadata
326
+ }
327
+ )
328
+ );
329
+ const costPromise = event.cost ? this.writeToCostTrackerWithRetry(event) : Promise.resolve();
330
+ const [telemetryResult, costResult] = await Promise.allSettled([telemetryPromise, costPromise]);
331
+ const telemetryOk = telemetryResult.status === "fulfilled";
332
+ const costTrackerOk = costResult.status === "fulfilled";
333
+ if (!telemetryOk) {
334
+ this.dualWriteErrors++;
335
+ this.logError("telemetry_write_failed", telemetryResult.reason);
336
+ }
337
+ if (!costTrackerOk && event.cost) {
338
+ this.dualWriteErrors++;
339
+ this.logError("cost_tracker_write_failed", costResult.reason);
340
+ }
341
+ if (!telemetryOk || !costTrackerOk && event.cost) {
342
+ try {
343
+ this.costTracker.logCostEvent("unified_telemetry_partial_failure", {
344
+ telemetryOk,
345
+ costTrackerOk,
346
+ event: event.event,
347
+ taskId: event.taskId,
348
+ timestamp: Date.now()
349
+ });
350
+ } catch (error) {
351
+ this.logError("partial_failure_logging_failed", error);
352
+ }
353
+ }
354
+ if (!telemetryOk && !costTrackerOk && event.cost) {
355
+ throw new Error(`Dual-write failed: telemetry=${telemetryOk}, costTracker=${costTrackerOk}`);
356
+ }
357
+ return { telemetry: telemetryOk, costTracker: event.cost ? costTrackerOk : false };
358
+ }
359
+ async writeToCostTrackerWithRetry(event) {
360
+ try {
361
+ await this.writeToCostTracker(event);
362
+ } catch (error) {
363
+ await new Promise((resolve) => setTimeout(resolve, 50));
364
+ await this.writeToCostTracker(event);
365
+ this.logError("cost_tracker_write_recovered_after_retry", error);
366
+ }
367
+ }
368
+ /**
369
+ * Legacy separate write mode
370
+ */
371
+ async legacyWrite(event) {
372
+ await this.telemetry.logVariantEvent(
373
+ event.taskId,
374
+ event.variant,
375
+ this.validateEventType(event.event),
376
+ {
377
+ provider: event.provider,
378
+ ...event.metadata
379
+ }
380
+ );
381
+ if (event.cost) {
382
+ await this.writeToCostTracker(event);
383
+ }
384
+ return { telemetry: true, costTracker: Boolean(event.cost) };
385
+ }
386
+ /**
387
+ * Write cost data to cost tracker
388
+ */
389
+ async writeToCostTracker(event) {
390
+ if (!event.cost) {
391
+ return;
392
+ }
393
+ this.costTracker.logCostEvent("model_invocation", {
394
+ taskId: event.taskId,
395
+ variant: event.variant,
396
+ provider: event.provider,
397
+ model: event.model,
398
+ inputTokens: event.cost.inputTokens ?? 0,
399
+ outputTokens: event.cost.outputTokens ?? 0,
400
+ totalCost: event.cost.totalCost,
401
+ currency: event.cost.currency,
402
+ timestamp: event.cost.timestamp,
403
+ cacheReadTokens: event.cost.cacheReadTokens ?? 0,
404
+ cacheWriteTokens: event.cost.cacheWriteTokens ?? 0,
405
+ cacheReadTokensIncludedInInput: event.cost.cacheReadTokensIncludedInInput,
406
+ cacheCost: event.cost.cacheCost ?? 0,
407
+ toolCosts: event.cost.toolCosts ?? 0,
408
+ infrastructureCost: event.cost.infrastructureCost ?? 0
409
+ });
410
+ }
411
+ /**
412
+ * Get telemetry events with cost data
413
+ *
414
+ * Queries the telemetry database (variant_executions) for events that have cost
415
+ * data embedded in their metadata. Cost is extracted from JSON-serialized cost
416
+ * dimensions in variant execution records.
417
+ *
418
+ * @param startDate - ISO date string for range start
419
+ * @param endDate - ISO date string for range end
420
+ * @param limit - Maximum number of events to return
421
+ * @returns Array of events with extracted cost data
422
+ */
423
+ async getTelemetryEventsWithCost(startDate, endDate, limit) {
424
+ if (!this.telemetryDb) {
425
+ return [];
426
+ }
427
+ try {
428
+ const startTimestamp = new Date(startDate).getTime();
429
+ const endTimestamp = new Date(endDate).getTime();
430
+ const startIso = new Date(startDate).toISOString();
431
+ const endIso = new Date(endDate).toISOString();
432
+ const scope = globalScope();
433
+ const query = `
434
+ SELECT
435
+ id,
436
+ task_id,
437
+ variant,
438
+ cloud_metadata,
439
+ created_at
440
+ FROM variant_executions
441
+ WHERE ${scope.where}
442
+ AND (
443
+ (typeof(created_at) = 'integer' AND created_at >= ? AND created_at <= ?)
444
+ OR (typeof(created_at) = 'text' AND created_at >= ? AND created_at <= ?)
445
+ )
446
+ AND cloud_metadata IS NOT NULL
447
+ ORDER BY created_at DESC
448
+ LIMIT ?
449
+ `;
450
+ const rows = this.telemetryDb.prepare(query).all(...scope.params, startTimestamp, endTimestamp, startIso, endIso, limit);
451
+ const events = [];
452
+ for (const row of rows) {
453
+ try {
454
+ const metadata = parseJsonWithContext(
455
+ row.cloud_metadata,
456
+ `[Unified Telemetry] cloud metadata for task ${row.task_id}`
457
+ );
458
+ if (typeof metadata.costEstimate === "number") {
459
+ events.push({
460
+ eventId: buildModelInvocationEventId(row.task_id, row.variant),
461
+ taskId: row.task_id,
462
+ cost: metadata.costEstimate
463
+ });
464
+ }
465
+ } catch (error) {
466
+ this.logError("metadata_parse_failed", error);
467
+ emitWarning(
468
+ "WS-003",
469
+ {
470
+ taskId: row.task_id,
471
+ subsystem: "telemetry",
472
+ variant: row.variant,
473
+ executionPhase: "validation"
474
+ },
475
+ {
476
+ severity: "WARN" /* WARN */,
477
+ metadata: {
478
+ operation: "metadata_parse",
479
+ error: error instanceof Error ? error.message : String(error),
480
+ eventId: `${row.task_id}-${row.variant}`
481
+ }
482
+ }
483
+ );
484
+ }
485
+ }
486
+ return events;
487
+ } catch (error) {
488
+ this.logError("telemetry_query_failed", error);
489
+ return [];
490
+ }
491
+ }
492
+ /**
493
+ * Get cost tracker events
494
+ *
495
+ * Reads cost events from the JSONL log files written by TelemetryCost.
496
+ * Scans log files within the date range and extracts model_invocation events
497
+ * with cost data.
498
+ *
499
+ * @param startDate - ISO date string for range start
500
+ * @param endDate - ISO date string for range end
501
+ * @param limit - Maximum number of events to return
502
+ * @returns Array of cost events from JSONL logs
503
+ */
504
+ async getCostTrackerEvents(startDate, endDate, limit) {
505
+ try {
506
+ const events = [];
507
+ const startDate_ = new Date(startDate);
508
+ const endDate_ = new Date(endDate);
509
+ const fs = await import("fs/promises");
510
+ const path = await import("path");
511
+ const logsDir = this.telemetry.getLogsDir();
512
+ try {
513
+ await fs.access(logsDir);
514
+ } catch {
515
+ return [];
516
+ }
517
+ const datesToScan = [];
518
+ const currentDate = new Date(startDate_);
519
+ while (currentDate <= endDate_) {
520
+ const { yearMonth, day } = _UnifiedTelemetryLogger.formatUtcLogDate(currentDate);
521
+ datesToScan.push(`${yearMonth}/${day}.jsonl`);
522
+ currentDate.setUTCDate(currentDate.getUTCDate() + 1);
523
+ }
524
+ for (const relPath of datesToScan) {
525
+ if (events.length >= limit) break;
526
+ const logPath = path.join(logsDir, relPath);
527
+ try {
528
+ const lineReader = createInterface({
529
+ input: createReadStream(logPath, { encoding: "utf8" }),
530
+ crlfDelay: Infinity
531
+ });
532
+ try {
533
+ for await (const line of lineReader) {
534
+ if (events.length >= limit) break;
535
+ if (!line.trim()) continue;
536
+ try {
537
+ const entry = parseJsonWithContext(
538
+ line,
539
+ `[Unified Telemetry] log entry from ${logPath}`
540
+ );
541
+ const totalCost = typeof entry.totalCost === "number" ? entry.totalCost : Number(entry.totalCost);
542
+ if (entry.event === "model_invocation" && entry.taskId && Number.isFinite(totalCost)) {
543
+ const taskId = typeof entry.taskId === "string" ? entry.taskId : String(entry.taskId);
544
+ const eventId = buildModelInvocationEventId(
545
+ taskId,
546
+ typeof entry.variant === "string" ? entry.variant : null,
547
+ typeof entry.provider === "string" ? entry.provider : void 0,
548
+ typeof entry.model === "string" ? entry.model : void 0
549
+ );
550
+ events.push({
551
+ eventId,
552
+ taskId,
553
+ cost: totalCost
554
+ });
555
+ }
556
+ } catch (error) {
557
+ this.logError("jsonl_line_parse_failed", error);
558
+ emitWarning(
559
+ "WS-003",
560
+ {
561
+ taskId: "unknown",
562
+ subsystem: "telemetry",
563
+ executionPhase: "validation"
564
+ },
565
+ {
566
+ severity: "WARN" /* WARN */,
567
+ metadata: {
568
+ operation: "jsonl_parse_line",
569
+ error: error instanceof Error ? error.message : String(error),
570
+ file: relPath,
571
+ linePreview: line.substring(0, 100)
572
+ }
573
+ }
574
+ );
575
+ }
576
+ }
577
+ } finally {
578
+ lineReader.close();
579
+ }
580
+ } catch (error) {
581
+ this.logError("jsonl_file_read_failed", error);
582
+ emitWarning(
583
+ "WS-003",
584
+ {
585
+ taskId: "unknown",
586
+ subsystem: "telemetry",
587
+ executionPhase: "validation"
588
+ },
589
+ {
590
+ severity: "WARN" /* WARN */,
591
+ metadata: {
592
+ operation: "jsonl_file_read",
593
+ error: error instanceof Error ? error.message : String(error),
594
+ file: relPath
595
+ }
596
+ }
597
+ );
598
+ }
599
+ }
600
+ return events;
601
+ } catch (error) {
602
+ this.logError("cost_tracker_query_failed", error);
603
+ return [];
604
+ }
605
+ }
606
+ /**
607
+ * Compare events from both systems
608
+ */
609
+ compareEvents(telemetryEvents, costTrackerEvents) {
610
+ const groupCosts = (events) => {
611
+ const grouped = /* @__PURE__ */ new Map();
612
+ for (const event of events) {
613
+ const bucket = grouped.get(event.eventId) ?? [];
614
+ bucket.push(event.cost);
615
+ grouped.set(event.eventId, bucket);
616
+ }
617
+ return grouped;
618
+ };
619
+ const telemetryMap = groupCosts(telemetryEvents);
620
+ const costTrackerMap = groupCosts(costTrackerEvents);
621
+ const discrepancyDetails = [];
622
+ let matchingEvents = 0;
623
+ for (const [eventId, telemetryCosts] of telemetryMap) {
624
+ const costTrackerCosts = costTrackerMap.get(eventId) ?? [];
625
+ const comparisons = Math.max(telemetryCosts.length, costTrackerCosts.length);
626
+ for (let index = 0; index < comparisons; index += 1) {
627
+ const telemetryCost = telemetryCosts[index];
628
+ const costTrackerCost = costTrackerCosts[index];
629
+ if (telemetryCost === void 0) {
630
+ discrepancyDetails.push({
631
+ eventId,
632
+ telemetryCost: 0,
633
+ costTrackerCost: costTrackerCost ?? 0,
634
+ difference: costTrackerCost ?? 0
635
+ });
636
+ } else if (costTrackerCost === void 0) {
637
+ discrepancyDetails.push({
638
+ eventId,
639
+ telemetryCost,
640
+ costTrackerCost: 0,
641
+ difference: telemetryCost
642
+ });
643
+ } else if (Math.abs(telemetryCost - costTrackerCost) > 1e-4) {
644
+ discrepancyDetails.push({
645
+ eventId,
646
+ telemetryCost,
647
+ costTrackerCost,
648
+ difference: Math.abs(telemetryCost - costTrackerCost)
649
+ });
650
+ } else {
651
+ matchingEvents++;
652
+ }
653
+ }
654
+ }
655
+ for (const [eventId, costTrackerCosts] of costTrackerMap) {
656
+ if (telemetryMap.has(eventId)) {
657
+ continue;
658
+ }
659
+ for (const costTrackerCost of costTrackerCosts) {
660
+ discrepancyDetails.push({
661
+ eventId,
662
+ telemetryCost: 0,
663
+ costTrackerCost,
664
+ difference: costTrackerCost
665
+ });
666
+ }
667
+ }
668
+ const totalEvents = Math.max(telemetryEvents.length, costTrackerEvents.length);
669
+ const matchPercentage = totalEvents > 0 ? matchingEvents / totalEvents * 100 : 100;
670
+ return {
671
+ totalEvents,
672
+ matchingEvents,
673
+ discrepancies: discrepancyDetails.length,
674
+ matchPercentage,
675
+ discrepancyDetails,
676
+ timestamp: Date.now()
677
+ };
678
+ }
679
+ /**
680
+ * Get feature flag value using the centralized env reader.
681
+ */
682
+ getFeatureFlag() {
683
+ const value = readUnifiedTelemetryFlag();
684
+ if (value === void 0) {
685
+ return this.options.defaultUnifiedMode ?? false;
686
+ }
687
+ switch (value.trim().toLowerCase()) {
688
+ case "1":
689
+ case "true":
690
+ case "yes":
691
+ case "on":
692
+ return true;
693
+ default:
694
+ return false;
695
+ }
696
+ }
697
+ /**
698
+ * Log initialization
699
+ */
700
+ logInitialization() {
701
+ this.costTracker.logCostEvent("unified_telemetry_initialized", {
702
+ mode: this.unifiedMode ? "dual-write" : "legacy",
703
+ flag: UNIFIED_TELEMETRY_FLAG,
704
+ timestamp: Date.now()
705
+ });
706
+ }
707
+ /**
708
+ * Log mode change
709
+ */
710
+ logModeChange() {
711
+ this.costTracker.logCostEvent("unified_telemetry_mode_changed", {
712
+ mode: this.unifiedMode ? "dual-write" : "legacy",
713
+ timestamp: Date.now()
714
+ });
715
+ }
716
+ /**
717
+ * Log error
718
+ */
719
+ logError(errorType, error) {
720
+ this.costTracker.logCostEvent("unified_telemetry_error", {
721
+ errorType,
722
+ error: error instanceof Error ? error.message : String(error),
723
+ timestamp: Date.now()
724
+ });
725
+ }
726
+ /**
727
+ * Reconcile inconsistencies between telemetry and cost tracker.
728
+ *
729
+ */
730
+ async reconcileInconsistencies(options) {
731
+ const report = await this.validateConsistency(options);
732
+ if (report.matchPercentage < 95) {
733
+ this.costTracker.logCostEvent("unified_telemetry_consistency_alert", {
734
+ matchPercentage: report.matchPercentage,
735
+ discrepancies: report.discrepancies,
736
+ threshold: 95,
737
+ timestamp: Date.now()
738
+ });
739
+ }
740
+ const fixed = 0;
741
+ const errors = 0;
742
+ if (options.autoFix) {
743
+ }
744
+ return {
745
+ inconsistencies: report.discrepancies,
746
+ fixed,
747
+ errors
748
+ };
749
+ }
750
+ };
751
+ function createUnifiedTelemetryLogger(telemetry, costTracker, telemetryDb, options) {
752
+ return new UnifiedTelemetryLogger(telemetry, costTracker, telemetryDb, options);
753
+ }
754
+
755
+ // src/telemetry/unified-cost-tracker.ts
756
+ var COST_BUCKET_MS = 60 * 60 * 1e3;
757
+ var UNIFIED_COST_METRIC_SOURCE_SAMPLES = /* @__PURE__ */ Symbol(
758
+ "build.unifiedCostMetricSourceSamples"
759
+ );
760
+ var UnifiedCostTracker = class {
761
+ config;
762
+ costCalculator;
763
+ telemetry;
764
+ unifiedLogger;
765
+ sessionStart = Date.now();
766
+ samples = [];
767
+ pricingReady = false;
768
+ droppedSamplesCost = 0;
769
+ droppedCostBuckets = /* @__PURE__ */ new Map();
770
+ constructor(costCalculator, telemetry, config) {
771
+ this.costCalculator = costCalculator;
772
+ this.telemetry = telemetry;
773
+ this.config = {
774
+ enabled: config?.enabled ?? true,
775
+ budgetThresholds: {
776
+ warning: 10,
777
+ critical: 50,
778
+ daily: 100,
779
+ monthly: 1e3,
780
+ ...config?.budgetThresholds
781
+ },
782
+ ...config?.optimization !== void 0 ? { optimization: config.optimization } : {},
783
+ ...config?.updateIntervalMs !== void 0 ? { updateIntervalMs: config.updateIntervalMs } : {}
784
+ };
785
+ this.unifiedLogger = (() => {
786
+ try {
787
+ return createUnifiedTelemetryLogger(telemetry, telemetry.costModule, void 0, {
788
+ defaultUnifiedMode: true
789
+ });
790
+ } catch {
791
+ return null;
792
+ }
793
+ })();
794
+ this.ensurePricingLoaded();
795
+ }
796
+ ensurePricingLoaded() {
797
+ if (this.pricingReady) return;
798
+ try {
799
+ this.costCalculator.ensurePricingLoadedSync();
800
+ this.pricingReady = true;
801
+ } catch (error) {
802
+ this.telemetry.logCostEvent("pricing_load_error", {
803
+ error: error instanceof Error ? error.message : String(error)
804
+ });
805
+ }
806
+ }
807
+ trackCost(provider, model, usage, executionId, taskId, competitionId, variantId) {
808
+ this.ensurePricingLoaded();
809
+ if (!this.pricingReady) {
810
+ throw new Error("Pricing data not loaded. Call loadPricingData() first.");
811
+ }
812
+ const breakdown = this.costCalculator.calculateCost(provider, model, usage);
813
+ if (!this.config.enabled) {
814
+ return breakdown;
815
+ }
816
+ if (breakdown.pricingStatus === "unavailable" || breakdown.totalCostAmount.status !== "available") {
817
+ this.telemetry.logCostEvent("cost_pricing_unavailable", {
818
+ provider,
819
+ model,
820
+ executionId,
821
+ taskId,
822
+ competitionId,
823
+ variantId,
824
+ originalModelId: breakdown.originalModelId,
825
+ canonicalModelId: breakdown.canonicalModelId,
826
+ pricingSource: breakdown.pricingSource,
827
+ pricingConfidence: breakdown.pricingConfidence,
828
+ pricingError: breakdown.pricingError ?? (breakdown.totalCostAmount.status !== "available" ? breakdown.totalCostAmount.detail : void 0),
829
+ costStatus: breakdown.totalCostAmount.status
830
+ });
831
+ return breakdown;
832
+ }
833
+ const availableTotal = breakdown.totalCostAmount.amount;
834
+ const timestamp = Date.now();
835
+ this.samples.push({
836
+ timestamp,
837
+ provider,
838
+ model,
839
+ totalCost: availableTotal,
840
+ ...executionId ? { executionId } : {}
841
+ });
842
+ if (this.samples.length > 200) {
843
+ const dropped = this.samples.splice(0, this.samples.length - 200);
844
+ this.droppedSamplesCost += dropped.reduce((s, x) => s + x.totalCost, 0);
845
+ for (const sample of dropped) {
846
+ const bucket = Math.floor(sample.timestamp / COST_BUCKET_MS) * COST_BUCKET_MS;
847
+ this.droppedCostBuckets.set(
848
+ bucket,
849
+ (this.droppedCostBuckets.get(bucket) ?? 0) + sample.totalCost
850
+ );
851
+ }
852
+ }
853
+ this.telemetry.logCostEvent("cost_tracked", {
854
+ provider,
855
+ model,
856
+ totalCost: availableTotal,
857
+ executionId,
858
+ taskId,
859
+ competitionId,
860
+ variantId,
861
+ billingMode: breakdown.billingMode,
862
+ billingSource: breakdown.billingSource,
863
+ originalModelId: breakdown.originalModelId,
864
+ canonicalModelId: breakdown.canonicalModelId,
865
+ pricingSource: breakdown.pricingSource,
866
+ pricingConfidence: breakdown.pricingConfidence,
867
+ pricingStatus: breakdown.pricingStatus ?? "ok",
868
+ pricingVersion: breakdown.pricingVersion
869
+ });
870
+ if (this.unifiedLogger) {
871
+ void this.unifiedLogger.logModelInvocation({
872
+ taskId: taskId || executionId || competitionId || "unknown",
873
+ provider,
874
+ model,
875
+ variant: variantId,
876
+ event: "completed",
877
+ cost: {
878
+ provider,
879
+ model,
880
+ inputTokens: usage.inputTokens ?? 0,
881
+ outputTokens: usage.outputTokens ?? 0,
882
+ cacheReadTokens: usage.cacheReadTokens ?? 0,
883
+ cacheWriteTokens: usage.cacheWriteTokens ?? 0,
884
+ cacheReadTokensIncludedInInput: usage.cacheReadTokensIncludedInInput,
885
+ totalCost: availableTotal,
886
+ currency: breakdown.currency,
887
+ timestamp,
888
+ billingMode: breakdown.billingMode === "metered" ? "metered" : "subscription",
889
+ pricingVersion: breakdown.pricingVersion,
890
+ costBreakdown: {
891
+ inputCost: breakdown.inputCost,
892
+ outputCost: breakdown.outputCost,
893
+ cacheCost: breakdown.cacheCost,
894
+ toolCosts: breakdown.toolCosts,
895
+ infrastructureCost: breakdown.infrastructureCost
896
+ }
897
+ }
898
+ }).catch((error) => {
899
+ const message = error instanceof Error ? error.message : String(error);
900
+ console.warn(
901
+ `[UnifiedCostTracker] Failed to mirror cost event to unified telemetry: ${message}`
902
+ );
903
+ });
904
+ }
905
+ return breakdown;
906
+ }
907
+ getCurrentMetrics() {
908
+ const now = Date.now();
909
+ const dayWindow = now - 24 * 60 * 60 * 1e3;
910
+ const monthWindow = now - 30 * 24 * 60 * 60 * 1e3;
911
+ this.pruneDroppedCostBuckets(monthWindow);
912
+ const sessionCost = this.droppedSamplesCost + this.samples.reduce((sum, item) => sum + item.totalCost, 0);
913
+ const dailyCost = this.getDroppedCostSince(dayWindow) + this.samples.filter((item) => item.timestamp >= dayWindow).reduce((sum, item) => sum + item.totalCost, 0);
914
+ const monthlyCost = this.getDroppedCostSince(monthWindow) + this.samples.filter((item) => item.timestamp >= monthWindow).reduce((sum, item) => sum + item.totalCost, 0);
915
+ const minutesElapsed = Math.max((now - this.sessionStart) / 6e4, 1 / 60);
916
+ const costPerMinute = sessionCost / minutesElapsed;
917
+ const byProviderModel = /* @__PURE__ */ new Map();
918
+ for (const sample of this.samples) {
919
+ const key = `${sample.provider}::${sample.model}`;
920
+ const current = byProviderModel.get(key);
921
+ if (current) {
922
+ current.total += sample.totalCost;
923
+ } else {
924
+ byProviderModel.set(key, {
925
+ provider: sample.provider,
926
+ model: sample.model,
927
+ total: sample.totalCost
928
+ });
929
+ }
930
+ }
931
+ let top = {
932
+ provider: "none",
933
+ model: "none",
934
+ total: 0
935
+ };
936
+ for (const entry of byProviderModel.values()) {
937
+ if (entry.total > top.total) {
938
+ top = entry;
939
+ }
940
+ }
941
+ const activeAlerts = [];
942
+ if (dailyCost >= this.config.budgetThresholds.critical) {
943
+ activeAlerts.push({
944
+ id: "daily-critical",
945
+ type: "budget_critical",
946
+ severity: "critical",
947
+ message: `Daily cost exceeded critical threshold (${this.config.budgetThresholds.critical.toFixed(2)} USD)`,
948
+ currentCost: dailyCost,
949
+ threshold: this.config.budgetThresholds.critical,
950
+ timestamp: now,
951
+ metadata: { period: "daily" }
952
+ });
953
+ } else if (dailyCost >= this.config.budgetThresholds.warning) {
954
+ activeAlerts.push({
955
+ id: "daily-warning",
956
+ type: "budget_warning",
957
+ severity: "high",
958
+ message: `Daily cost exceeded warning threshold (${this.config.budgetThresholds.warning.toFixed(2)} USD)`,
959
+ currentCost: dailyCost,
960
+ threshold: this.config.budgetThresholds.warning,
961
+ timestamp: now,
962
+ metadata: { period: "daily" }
963
+ });
964
+ }
965
+ if (monthlyCost >= this.config.budgetThresholds.monthly) {
966
+ activeAlerts.push({
967
+ id: "monthly-critical",
968
+ type: "budget_critical",
969
+ severity: "critical",
970
+ message: `Monthly cost exceeded threshold (${this.config.budgetThresholds.monthly.toFixed(2)} USD)`,
971
+ currentCost: monthlyCost,
972
+ threshold: this.config.budgetThresholds.monthly,
973
+ timestamp: now,
974
+ metadata: { period: "monthly" }
975
+ });
976
+ }
977
+ const trend = this.samples.slice(-10).map((item) => item.totalCost);
978
+ const metrics = {
979
+ sessionCost,
980
+ dailyCost,
981
+ monthlyCost,
982
+ costPerMinute,
983
+ topCostProvider: {
984
+ provider: top.provider,
985
+ model: top.model,
986
+ cost: top.total,
987
+ percentage: sessionCost > 0 ? top.total / sessionCost * 100 : 0
988
+ },
989
+ costTrend: trend,
990
+ activeAlerts,
991
+ availableOptimizations: []
992
+ };
993
+ Object.defineProperty(metrics, UNIFIED_COST_METRIC_SOURCE_SAMPLES, {
994
+ value: this.samples.slice(),
995
+ enumerable: false,
996
+ configurable: false,
997
+ writable: false
998
+ });
999
+ return metrics;
1000
+ }
1001
+ getDroppedCostSince(cutoffMs) {
1002
+ let total = 0;
1003
+ for (const [bucket, cost] of this.droppedCostBuckets.entries()) {
1004
+ if (bucket + COST_BUCKET_MS > cutoffMs) {
1005
+ total += cost;
1006
+ }
1007
+ }
1008
+ return total;
1009
+ }
1010
+ pruneDroppedCostBuckets(cutoffMs) {
1011
+ for (const bucket of this.droppedCostBuckets.keys()) {
1012
+ if (bucket + COST_BUCKET_MS <= cutoffMs) {
1013
+ this.droppedCostBuckets.delete(bucket);
1014
+ }
1015
+ }
1016
+ }
1017
+ };
1018
+ var globalCostTracker = null;
1019
+ function getUnifiedCostTracker(costCalculator, logger, config) {
1020
+ if (!globalCostTracker) {
1021
+ if (!costCalculator || !logger) {
1022
+ throw new Error(
1023
+ "UnifiedCostTracker not initialized. Provide costCalculator and logger on first call."
1024
+ );
1025
+ }
1026
+ globalCostTracker = new UnifiedCostTracker(costCalculator, logger, config);
1027
+ }
1028
+ return globalCostTracker;
1029
+ }
1030
+
1031
+ export {
1032
+ normalizeVariant,
1033
+ normalizeVariantForEventId,
1034
+ buildModelInvocationEventId,
1035
+ UNIFIED_COST_METRIC_SOURCE_SAMPLES,
1036
+ UnifiedCostTracker,
1037
+ getUnifiedCostTracker
1038
+ };
1039
+ //# sourceMappingURL=chunk-J5HM6V5P.js.map