@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,1060 @@
1
+ import {
2
+ contextWindowAvailability
3
+ } from "./chunk-Z7CDQNH3.js";
4
+ import {
5
+ classifyFailure
6
+ } from "./chunk-PRDHI2L5.js";
7
+ import {
8
+ CircuitBreakerError,
9
+ createCircuitBreakerOptions,
10
+ executeWithCircuitBreaker
11
+ } from "./chunk-JVHGMURQ.js";
12
+ import {
13
+ createRetryOptions,
14
+ withRetry
15
+ } from "./chunk-4QKP6I4C.js";
16
+ import {
17
+ isTelemetryPersistenceEnabled
18
+ } from "./chunk-SDPIFNLD.js";
19
+ import {
20
+ ModelInvocationsDB,
21
+ captureInvocationRegistryVersion,
22
+ ensurePendingInvocationCostEnrichment,
23
+ generateInvocationId,
24
+ modelEvidenceAvailability,
25
+ observedSpeedAvailability,
26
+ requestEvidenceAvailability,
27
+ requestedServiceTierAvailability,
28
+ resolveInvocationsDbPath
29
+ } from "./chunk-Q64IR2Z2.js";
30
+ import {
31
+ ModelMetadataResolver
32
+ } from "./chunk-YVCMDVBB.js";
33
+ import {
34
+ JsonParseError,
35
+ safeJsonParse
36
+ } from "./chunk-XJ2E7YEJ.js";
37
+ import {
38
+ readTrackedToolOutputRoots,
39
+ shouldExcludeFile,
40
+ shouldExcludePorcelainEntry,
41
+ shouldExcludeStatusPath
42
+ } from "./chunk-5EQN56OZ.js";
43
+ import {
44
+ parseGitStatus
45
+ } from "./chunk-5KQETTNS.js";
46
+ import {
47
+ execGit
48
+ } from "./chunk-MHLEZQQI.js";
49
+ import {
50
+ ProviderExecutionError,
51
+ providerExecutionErrorStreamOptions
52
+ } from "./chunk-RRC5BL7B.js";
53
+ import {
54
+ resolveBuildRoot
55
+ } from "./chunk-CHA2HDE5.js";
56
+ import {
57
+ BUILD_ACTIVE_TASK_ID,
58
+ BUILD_LAB_ID,
59
+ BUILD_LAB_RUN_ID,
60
+ BUILD_MOCK_PROVIDERS,
61
+ BUILD_PROJECT_ID,
62
+ BUILD_RUN_ID,
63
+ BUILD_TELEMETRY_DIR,
64
+ BUILD_WORKER_VARIANT,
65
+ debugLog,
66
+ emitWarning,
67
+ getExecutionContext,
68
+ getRuntimeEnv,
69
+ hasExecutionContext,
70
+ isDebugMode,
71
+ readEnv
72
+ } from "./chunk-7VRJHTGZ.js";
73
+
74
+ // src/core/providers/shared/invocation-telemetry.ts
75
+ import { createHash } from "crypto";
76
+ import path from "path";
77
+
78
+ // src/core/providers/shared/invocation-context-window.ts
79
+ var REPORTED_CONTEXT_WINDOW_KEY = /^modelUsage\/[^/]+\/contextWindow$/;
80
+ function resolveInvocationContextWindow(input) {
81
+ const reported = new Set(
82
+ Object.entries(input.reportedDimensions ?? {}).filter(([key, value]) => REPORTED_CONTEXT_WINDOW_KEY.test(key) && value > 0).map(([, value]) => value)
83
+ );
84
+ if (reported.size === 1) return [...reported][0];
85
+ if (reported.size > 1 || input.contextSelector || !input.providerId) return void 0;
86
+ for (const modelId of input.modelIds) {
87
+ const model = modelId?.trim();
88
+ if (!model) continue;
89
+ try {
90
+ const window = ModelMetadataResolver.getContextWindow(input.providerId, model, {
91
+ env: input.env
92
+ });
93
+ if (window !== void 0) return window;
94
+ } catch {
95
+ }
96
+ }
97
+ return void 0;
98
+ }
99
+
100
+ // src/core/providers/shared/invocation-telemetry.ts
101
+ var AGENT_ROLE_ENV_KEY = "BUILD_AGENT_ROLE";
102
+ function invocationErrorCategory(record) {
103
+ if (record.failure instanceof ProviderExecutionError && record.failure.category) {
104
+ return record.failure.category;
105
+ }
106
+ if (record.failure !== void 0 && record.failure !== null) {
107
+ return classifyFailure(record.failure);
108
+ }
109
+ const code = record.errorCode?.trim();
110
+ if (!code) return record.status === "error" ? "unknown" : null;
111
+ const exit = /^exit_(\d+)$/i.exec(code);
112
+ return classifyFailure(exit ? { providerExitCode: Number(exit[1]) } : { reason: code });
113
+ }
114
+ function effectiveInvocationEnv(env) {
115
+ return env ? { ...process.env, ...env } : process.env;
116
+ }
117
+ function normalizeRequestSizeBytes(value) {
118
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : null;
119
+ }
120
+ async function recordInvocationTiming(record) {
121
+ try {
122
+ const requestSentMs = Number(record.timeRequestSentMs);
123
+ if (!Number.isFinite(requestSentMs) || requestSentMs <= 0) {
124
+ return;
125
+ }
126
+ const executionSource = resolveInvocationExecutionSource(record);
127
+ const providerId = normalizeTelemetryId(record.providerId);
128
+ const modelId = normalizeTelemetryId(record.canonicalModelId) ?? normalizeTelemetryId(record.modelId);
129
+ if (executionSource === "live" && (!providerId || !modelId)) {
130
+ debugLog("[Telemetry] Skipped live invocation timing without provider/model identity");
131
+ return;
132
+ }
133
+ const firstTokenMs = typeof record.timeFirstTokenMs === "number" && Number.isFinite(record.timeFirstTokenMs) ? record.timeFirstTokenMs : null;
134
+ const lastTokenMs = typeof record.timeLastTokenMs === "number" && Number.isFinite(record.timeLastTokenMs) ? record.timeLastTokenMs : null;
135
+ const timeToFirstTokenMs = firstTokenMs !== null ? Math.max(0, Math.floor(firstTokenMs - requestSentMs)) : null;
136
+ const totalTimeMs = lastTokenMs !== null ? Math.max(0, Math.floor(lastTokenMs - requestSentMs)) : null;
137
+ const threadedBuildDir = record.env ? normalizeTelemetryId(record.env[BUILD_TELEMETRY_DIR.name]) : normalizeTelemetryId(getRuntimeEnv(BUILD_TELEMETRY_DIR.name));
138
+ const buildDir = record.buildDir ?? threadedBuildDir ?? (hasExecutionContext() ? getExecutionContext().buildDir : path.join(resolveBuildRoot(process.cwd()), ".build-project"));
139
+ if (!isTelemetryPersistenceEnabled(buildDir)) {
140
+ return;
141
+ }
142
+ const invocationsDbPath = resolveInvocationsDbPath(buildDir);
143
+ const db = new ModelInvocationsDB(invocationsDbPath);
144
+ try {
145
+ const registryVersion = captureInvocationRegistryVersion(db, record.registrySnapshot) ?? "unavailable";
146
+ const invocationId = generateInvocationId();
147
+ const runId = normalizeTelemetryId(record.runId) ?? resolveEnvAttributionId(record, BUILD_RUN_ID.name) ?? normalizeTelemetryId(record.parentWorkflowId) ?? normalizeTelemetryId(record.competitionId) ?? normalizeTelemetryId(record.taskId);
148
+ const attemptId = normalizeTelemetryId(record.attemptId) ?? invocationId;
149
+ const labId = record.env ? normalizeTelemetryId(record.env[BUILD_LAB_ID.name]) : normalizeTelemetryId(readEnv(BUILD_LAB_ID).value);
150
+ const labRunId = record.env ? normalizeTelemetryId(record.env[BUILD_LAB_RUN_ID.name]) : normalizeTelemetryId(readEnv(BUILD_LAB_RUN_ID).value);
151
+ db.insertInvocation({
152
+ id: invocationId,
153
+ timestamp: requestSentMs,
154
+ providerId: providerId ?? "unknown",
155
+ modelId: modelId ?? "auto",
156
+ registryVersion,
157
+ tokensIn: record.tokensIn ?? null,
158
+ tokensOut: record.tokensOut ?? null,
159
+ timeRequestSentMs: requestSentMs,
160
+ timeFirstTokenMs: firstTokenMs,
161
+ timeLastTokenMs: lastTokenMs,
162
+ timeToFirstTokenMs,
163
+ totalTimeMs,
164
+ status: record.status,
165
+ errorCode: invocationErrorCategory(record),
166
+ requestSizeBytes: normalizeRequestSizeBytes(record.requestSizeBytes),
167
+ agentRole: record.agentRole ?? resolveEnvAttributionId(record, AGENT_ROLE_ENV_KEY),
168
+ copilotSubcommand: record.copilotSubcommand ?? null,
169
+ parentWorkflowId: record.parentWorkflowId ?? null,
170
+ executionSource,
171
+ // ModelIdentity fields (canonicalModelId already mapped into modelId above)
172
+ requestedModelId: normalizeTelemetryId(record.requestedModelId),
173
+ executionModelId: normalizeTelemetryId(record.executionModelId),
174
+ reportedModelId: normalizeTelemetryId(record.reportedModelId),
175
+ backend: formatServedRoute(record.backend, record.servedPrecision),
176
+ scope: normalizeTelemetryId(record.scope),
177
+ contextSelector: normalizeTelemetryId(record.contextSelector),
178
+ resolutionSource: normalizeTelemetryId(record.resolutionSource),
179
+ runId,
180
+ attemptId,
181
+ attemptOrdinal: record.attemptOrdinal ?? 1,
182
+ projectId: normalizeTelemetryId(record.projectId) ?? resolveEnvAttributionId(record, BUILD_PROJECT_ID.name),
183
+ labId,
184
+ labRunId,
185
+ providerReportedCostUsd: finiteOrNull(record.providerReportedCostUsd),
186
+ buildCalculatedCostUsd: finiteOrNull(record.buildCalculatedCostUsd),
187
+ ...resolveInvocationCostAttribution(record)
188
+ });
189
+ const usage = {
190
+ ...record.tokenUsage ?? {
191
+ inputTokens: record.tokensIn ?? void 0,
192
+ outputTokens: record.tokensOut ?? void 0
193
+ },
194
+ extraDimensions: mergeExtraDimensions(
195
+ record.tokenUsage?.extraDimensions,
196
+ record.reportedModelUsageDimensions
197
+ )
198
+ };
199
+ const hasUsage = Object.values(usage).some((value) => typeof value === "number") || Object.keys(usage.extraDimensions ?? {}).length > 0;
200
+ let evidenceId;
201
+ if (hasUsage) {
202
+ const evidenceRunId = runId ?? invocationId;
203
+ const evidencePayload = {
204
+ invocationId,
205
+ runId: evidenceRunId,
206
+ attemptId,
207
+ usage,
208
+ provenance: record.usageProvenance ?? "provider_reported"
209
+ };
210
+ evidenceId = createHash("sha256").update(JSON.stringify(evidencePayload)).digest("hex");
211
+ db.insertUsageEvidence({
212
+ evidenceId,
213
+ invocationId,
214
+ runId: evidenceRunId,
215
+ attemptId,
216
+ eventSemantics: usage.eventSemantics ?? "logical_run_aggregate",
217
+ provenance: record.usageProvenance ?? "provider_reported",
218
+ inputTokens: finiteOrNull(usage.inputTokens),
219
+ outputTokens: finiteOrNull(usage.outputTokens),
220
+ cacheReadTokens: finiteOrNull(usage.cachedInputTokens),
221
+ cacheWriteTokens: finiteOrNull(usage.cacheCreationInputTokens),
222
+ reasoningTokens: finiteOrNull(usage.reasoningTokens),
223
+ toolTokens: finiteOrNull(usage.toolTokens),
224
+ cacheReadIncludedInInput: usage.cacheReadTokensIncludedInInput,
225
+ cacheWriteIncludedInInput: usage.cacheCreationTokensIncludedInInput,
226
+ extraDimensionsJson: usage.extraDimensions ? JSON.stringify(usage.extraDimensions) : null,
227
+ availabilityJson: JSON.stringify({
228
+ input: usage.inputTokens === void 0 ? "not_emitted" : "available",
229
+ output: usage.outputTokens === void 0 ? "not_emitted" : "available",
230
+ cacheRead: usage.cachedInputTokens === void 0 ? "not_emitted" : "available",
231
+ cacheWrite: usage.cacheCreationInputTokens === void 0 ? "not_emitted" : "available",
232
+ reasoning: usage.reasoningTokens === void 0 ? "not_emitted" : "available",
233
+ tool: usage.toolTokens === void 0 ? "not_emitted" : "available",
234
+ ...requestedServiceTierAvailability(record.requestedServiceTier),
235
+ ...observedSpeedAvailability(record.observedSpeed),
236
+ ...modelEvidenceAvailability(record.modelEvidence),
237
+ ...requestEvidenceAvailability(record.requestEvidence),
238
+ ...contextWindowAvailability(
239
+ resolveInvocationContextWindow({
240
+ providerId,
241
+ modelIds: [record.reportedModelId, record.executionModelId, modelId],
242
+ contextSelector: record.contextSelector,
243
+ reportedDimensions: record.reportedModelUsageDimensions,
244
+ env: effectiveInvocationEnv(record.env)
245
+ })
246
+ )
247
+ }),
248
+ parserVersion: "usage-evidence-v1",
249
+ createdAt: Date.now()
250
+ });
251
+ }
252
+ try {
253
+ await ensurePendingInvocationCostEnrichment(db, {
254
+ aggregate: false,
255
+ refreshRegistrySnapshot: false
256
+ });
257
+ } catch (error) {
258
+ debugLog(
259
+ `[Telemetry] Failed to enrich invocation cost: ${error instanceof Error ? error.message : String(error)}`
260
+ );
261
+ }
262
+ } finally {
263
+ db.close();
264
+ }
265
+ } catch (error) {
266
+ debugLog(
267
+ `[Telemetry] Failed to record invocation timing: ${error instanceof Error ? error.message : String(error)}`
268
+ );
269
+ }
270
+ }
271
+ function mergeExtraDimensions(own, reported) {
272
+ return own || reported ? { ...own, ...reported } : void 0;
273
+ }
274
+ function finiteOrNull(value) {
275
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
276
+ }
277
+ function resolveInvocationExecutionSource(record = {}) {
278
+ if (record.executionSource) return record.executionSource;
279
+ const env = record.env;
280
+ if (env?.BUILD_MOCK_PROVIDERS === "1") {
281
+ return "mock";
282
+ }
283
+ if (process.env.NODE_ENV === "test" || process.env.VITEST === "true") return "test";
284
+ if (readEnv(BUILD_MOCK_PROVIDERS).value === "1") return "mock";
285
+ return "live";
286
+ }
287
+ function formatServedRoute(route, precision) {
288
+ const normalizedRoute = normalizeTelemetryId(route);
289
+ const normalizedPrecision = normalizeTelemetryId(precision);
290
+ return normalizedRoute && normalizedPrecision ? `${normalizedRoute}@${normalizedPrecision}` : normalizedRoute;
291
+ }
292
+ function normalizeTelemetryId(value) {
293
+ if (typeof value !== "string") return null;
294
+ const trimmed = value.trim();
295
+ return trimmed.length > 0 ? trimmed : null;
296
+ }
297
+ function firstTelemetryId(...values) {
298
+ for (const value of values) {
299
+ const normalized = normalizeTelemetryId(value);
300
+ if (normalized) return normalized;
301
+ }
302
+ return null;
303
+ }
304
+ function resolveEnvAttributionId(record, key) {
305
+ return normalizeTelemetryId(record.env?.[key]) ?? normalizeTelemetryId(getRuntimeEnv(key));
306
+ }
307
+ function resolveInvocationCostAttribution(record) {
308
+ const taskId = firstTelemetryId(
309
+ record.taskId,
310
+ resolveEnvAttributionId(record, BUILD_ACTIVE_TASK_ID.name)
311
+ );
312
+ const variantId = firstTelemetryId(
313
+ record.variantId,
314
+ resolveEnvAttributionId(record, BUILD_WORKER_VARIANT.name)
315
+ );
316
+ const competitionId = firstTelemetryId(record.competitionId, taskId);
317
+ return { taskId, competitionId, variantId };
318
+ }
319
+
320
+ // src/core/providers/shared/prompt-request-bytes.ts
321
+ function measurePromptRequestBytes(...channels) {
322
+ let total = 0;
323
+ let measured = false;
324
+ for (const channel of channels) {
325
+ if (typeof channel !== "string") continue;
326
+ total += Buffer.byteLength(channel, "utf8");
327
+ measured = true;
328
+ }
329
+ return measured ? total : null;
330
+ }
331
+
332
+ // src/core/providers/shared/pure-cli-runner.ts
333
+ async function getGitHead(workingDir) {
334
+ try {
335
+ const { execa } = await import("execa");
336
+ const result = await execa("git", ["rev-parse", "HEAD"], { cwd: workingDir });
337
+ const head = result.stdout.trim();
338
+ return head.length > 0 ? head : void 0;
339
+ } catch (err) {
340
+ if (isDebugMode()) {
341
+ console.warn(`[PureCliRunner] Unable to resolve HEAD in ${workingDir}:`, err);
342
+ }
343
+ return void 0;
344
+ }
345
+ }
346
+ async function getGitBranch(workingDir) {
347
+ try {
348
+ const { execa } = await import("execa");
349
+ const result = await execa("git", ["branch", "--show-current"], { cwd: workingDir });
350
+ const branch = result.stdout.trim();
351
+ return branch.length > 0 ? branch : void 0;
352
+ } catch (err) {
353
+ if (isDebugMode()) {
354
+ console.warn(`[PureCliRunner] Unable to resolve branch in ${workingDir}:`, err);
355
+ }
356
+ return void 0;
357
+ }
358
+ }
359
+ function parseNameOnlyLines(output) {
360
+ return output.split("\0").filter((line) => line.length > 0);
361
+ }
362
+ function changedPathsFromPorcelain(porcelain, trackedRoots) {
363
+ return parseGitStatus(porcelain).filter((entry) => entry.path.length > 0 && !shouldExcludePorcelainEntry(entry, trackedRoots)).map((entry) => entry.path);
364
+ }
365
+ async function readPorcelainPaths(workingDir, porcelain) {
366
+ return changedPathsFromPorcelain(porcelain, await readTrackedToolOutputRoots(workingDir));
367
+ }
368
+ function isOnlyMetaChanges(files) {
369
+ return files.length > 0 && files.every((file) => shouldExcludeFile(file));
370
+ }
371
+ function isChangedFile(file, trackedRoots) {
372
+ return file.length > 0 && !shouldExcludeStatusPath(file, false, trackedRoots);
373
+ }
374
+ async function getGitStatusPaths(workingDir) {
375
+ try {
376
+ const { execa } = await import("execa");
377
+ const status = await execa("git", ["status", "--porcelain", "--untracked-files=all"], {
378
+ cwd: workingDir,
379
+ reject: false
380
+ });
381
+ if (status.exitCode !== 0) {
382
+ throw new Error(status.stderr.trim() || `git status exited ${status.exitCode}`);
383
+ }
384
+ return new Set(await readPorcelainPaths(workingDir, status.stdout));
385
+ } catch (error) {
386
+ const message = error instanceof Error ? error.message : String(error);
387
+ throw new Error(`Unable to read git status in ${workingDir}: ${message}`);
388
+ }
389
+ }
390
+ async function captureGitBaseline(workingDir, knownPaths) {
391
+ const trackedRoots = await readTrackedToolOutputRoots(workingDir);
392
+ const paths = knownPaths === void 0 ? await getGitStatusPaths(workingDir) : new Set([...knownPaths].filter((file) => isChangedFile(file, trackedRoots)));
393
+ const fileStates = /* @__PURE__ */ new Map();
394
+ if (paths.size > 0) {
395
+ const { fingerprintPathState } = await import("./workspace-tree-identity-JO5PSKTW.js");
396
+ for (const file of paths) fileStates.set(file, await fingerprintPathState(workingDir, file));
397
+ }
398
+ return { paths, fileStates };
399
+ }
400
+ async function detectGitChangedFiles(workingDir, baseline) {
401
+ const { execa } = await import("execa");
402
+ const files = /* @__PURE__ */ new Set();
403
+ const baselineHead = typeof baseline === "string" ? baseline : baseline?.baselineHead;
404
+ const snapshot = typeof baseline === "string" ? void 0 : baseline?.baselineSnapshot;
405
+ if (snapshot === null) throw new Error("Git change detection baseline is unavailable");
406
+ const baselineStatusPaths = typeof baseline === "string" ? /* @__PURE__ */ new Set() : new Set(snapshot?.paths ?? baseline?.baselineStatusPaths ?? []);
407
+ const currentHead = await getGitHead(workingDir);
408
+ if (baselineHead && currentHead && baselineHead !== currentHead) {
409
+ try {
410
+ const diff = await execa("git", ["diff", "--name-only", "-z", baselineHead, currentHead], {
411
+ cwd: workingDir,
412
+ reject: false
413
+ });
414
+ const trackedRoots = await readTrackedToolOutputRoots(workingDir, baselineHead);
415
+ for (const file of parseNameOnlyLines(diff.stdout)) {
416
+ if (isChangedFile(file, trackedRoots)) {
417
+ files.add(file);
418
+ }
419
+ }
420
+ } catch {
421
+ }
422
+ }
423
+ const statusPaths = await getGitStatusPaths(workingDir);
424
+ statusPaths.forEach((file) => {
425
+ if (!baselineStatusPaths.has(file)) {
426
+ files.add(file);
427
+ }
428
+ });
429
+ if (snapshot?.fileStates.size) {
430
+ const { fingerprintPathState } = await import("./workspace-tree-identity-JO5PSKTW.js");
431
+ for (const [file, before] of snapshot.fileStates) {
432
+ if (await fingerprintPathState(workingDir, file) !== before) files.add(file);
433
+ }
434
+ }
435
+ return Array.from(files);
436
+ }
437
+
438
+ // src/core/providers/shared/retry-budget.ts
439
+ var RetryBudget = class {
440
+ maxTotalAttempts;
441
+ usedAttempts;
442
+ constructor(options) {
443
+ this.maxTotalAttempts = options?.maxTotalAttempts ?? 5;
444
+ this.usedAttempts = 0;
445
+ }
446
+ /**
447
+ * Returns true if there are remaining attempts in the budget.
448
+ */
449
+ hasRemaining() {
450
+ return this.usedAttempts < this.maxTotalAttempts;
451
+ }
452
+ /**
453
+ * Number of remaining attempts.
454
+ */
455
+ get remaining() {
456
+ return Math.max(0, this.maxTotalAttempts - this.usedAttempts);
457
+ }
458
+ /**
459
+ * Number of attempts consumed so far.
460
+ */
461
+ get used() {
462
+ return this.usedAttempts;
463
+ }
464
+ /**
465
+ * Consume one attempt from the budget.
466
+ * @returns true if the attempt was allowed, false if the budget is exhausted.
467
+ */
468
+ consume() {
469
+ if (this.usedAttempts >= this.maxTotalAttempts) {
470
+ return false;
471
+ }
472
+ this.usedAttempts += 1;
473
+ return true;
474
+ }
475
+ /**
476
+ * Reset the budget to its initial state.
477
+ */
478
+ reset() {
479
+ this.usedAttempts = 0;
480
+ }
481
+ };
482
+
483
+ // src/core/providers/shared/workspace-retry-safety.ts
484
+ import { createHash as createHash2 } from "crypto";
485
+ import { promises as fs } from "fs";
486
+ import * as path2 from "path";
487
+ function isEnoentError(error) {
488
+ return Boolean(
489
+ error && typeof error === "object" && "code" in error && error.code === "ENOENT"
490
+ );
491
+ }
492
+ function errorMessage(error) {
493
+ return error instanceof Error ? error.message : String(error);
494
+ }
495
+ async function captureWorkspaceFingerprintOnce(workingDir) {
496
+ const [head, status, staged, unstaged, untracked] = await Promise.all([
497
+ execGit(["rev-parse", "HEAD"], { cwd: workingDir }),
498
+ execGit(["status", "--porcelain=v1", "--untracked-files=all", "-z"], {
499
+ cwd: workingDir
500
+ }),
501
+ execGit(["diff", "--cached", "--binary", "--full-index", "--no-ext-diff"], {
502
+ cwd: workingDir
503
+ }),
504
+ execGit(["diff", "--binary", "--full-index", "--no-ext-diff"], { cwd: workingDir }),
505
+ execGit(["ls-files", "--others", "--exclude-standard", "-z"], { cwd: workingDir })
506
+ ]);
507
+ const failed = [status, staged, unstaged, untracked].find((result) => result.exitCode !== 0);
508
+ if (failed) {
509
+ return {
510
+ kind: "unavailable",
511
+ error: failed.stderr.trim() || "git state query failed"
512
+ };
513
+ }
514
+ const hash = createHash2("sha256");
515
+ for (const [label, value] of [
516
+ ["head", head.exitCode === 0 ? head.stdout : "<unborn>"],
517
+ ["status", status.stdout],
518
+ ["staged", staged.stdout],
519
+ ["unstaged", unstaged.stdout]
520
+ ]) {
521
+ hash.update(label).update("\0").update(value).update("\0");
522
+ }
523
+ const untrackedPaths = untracked.stdout.split("\0").filter(Boolean).sort();
524
+ for (const relativePath of untrackedPaths) {
525
+ const absolutePath = path2.join(workingDir, relativePath);
526
+ let stats;
527
+ try {
528
+ stats = await fs.lstat(absolutePath);
529
+ } catch (error) {
530
+ if (isEnoentError(error)) {
531
+ return { kind: "unstable", error: errorMessage(error) };
532
+ }
533
+ throw error;
534
+ }
535
+ hash.update("untracked\0").update(relativePath).update("\0");
536
+ try {
537
+ if (stats.isSymbolicLink()) {
538
+ hash.update("symlink\0").update(await fs.readlink(absolutePath));
539
+ } else if (stats.isFile()) {
540
+ hash.update("file\0").update(await fs.readFile(absolutePath));
541
+ } else {
542
+ hash.update(`other:${stats.mode}:${stats.size}\0`);
543
+ }
544
+ } catch (error) {
545
+ if (isEnoentError(error)) {
546
+ return { kind: "unstable", error: errorMessage(error) };
547
+ }
548
+ throw error;
549
+ }
550
+ hash.update("\0");
551
+ }
552
+ return { kind: "ready", fingerprint: hash.digest("hex") };
553
+ }
554
+ async function captureWorkspaceRetryState(workingDir) {
555
+ try {
556
+ const insideWorkTree = await execGit(["rev-parse", "--is-inside-work-tree"], {
557
+ cwd: workingDir
558
+ });
559
+ if (insideWorkTree.exitCode !== 0 || insideWorkTree.stdout.trim() !== "true") {
560
+ return {
561
+ available: false,
562
+ error: insideWorkTree.stderr.trim() || "working directory is not inside a Git worktree"
563
+ };
564
+ }
565
+ const first = await captureWorkspaceFingerprintOnce(workingDir);
566
+ if (first.kind === "ready") {
567
+ return { available: true, fingerprint: first.fingerprint };
568
+ }
569
+ if (first.kind === "unavailable") {
570
+ return { available: false, error: first.error };
571
+ }
572
+ const second = await captureWorkspaceFingerprintOnce(workingDir);
573
+ if (second.kind === "ready") {
574
+ return { available: true, fingerprint: second.fingerprint };
575
+ }
576
+ return {
577
+ available: false,
578
+ error: second.error
579
+ };
580
+ } catch (error) {
581
+ return {
582
+ available: false,
583
+ error: errorMessage(error)
584
+ };
585
+ }
586
+ }
587
+ async function assertWorkspaceRetryIsSafe(options) {
588
+ if (!options.retryable) {
589
+ return;
590
+ }
591
+ const attemptEndState = await captureWorkspaceRetryState(options.workingDir);
592
+ const unavailable = !options.attemptStartState.available || !attemptEndState.available;
593
+ const changed = !unavailable && options.attemptStartState.fingerprint !== attemptEndState.fingerprint;
594
+ if (!unavailable && !changed) {
595
+ return;
596
+ }
597
+ const detail = options.attemptStartState.error ?? attemptEndState.error ?? "workspace fingerprint could not be captured";
598
+ const explanation = changed ? "the failed attempt changed HEAD, the index, the working tree, or untracked files" : `Build could not verify that the worktree stayed unchanged: ${detail}`;
599
+ throw new ProviderExecutionError(
600
+ `${options.providerName} retry suppressed because ${explanation}. Inspect the worktree and preserve or revert the attempt changes before retrying.`,
601
+ {
602
+ retryable: false,
603
+ reason: changed ? "workspace_changed_during_attempt" : "workspace_state_unknown",
604
+ providerName: options.providerId,
605
+ cause: options.originalError instanceof Error ? options.originalError : void 0
606
+ }
607
+ );
608
+ }
609
+
610
+ // src/core/providers/shared/retry-worktree-state.ts
611
+ async function captureRetryWorktreeState(workingDir) {
612
+ return captureWorkspaceRetryState(workingDir);
613
+ }
614
+ function suppressUnsafeRetryAfterMutatedWorktree(providerName, reason, originalError, detail) {
615
+ const explanation = reason === "changed" ? "the failed attempt changed HEAD, the index, the working tree, or untracked files" : `Build could not verify that the worktree stayed unchanged${detail ? `: ${detail}` : ""}`;
616
+ return new ProviderExecutionError(
617
+ `${providerName} retry suppressed because ${explanation}. Inspect the worktree and preserve or revert the attempt's changes before running ${providerName} again.`,
618
+ {
619
+ retryable: false,
620
+ reason: reason === "changed" ? "workspace_changed_during_attempt" : "workspace_state_unknown",
621
+ providerName,
622
+ cause: originalError
623
+ }
624
+ );
625
+ }
626
+ function isRetryableProviderError(error) {
627
+ return error instanceof ProviderExecutionError && error.retryable === true;
628
+ }
629
+ async function rejectUnsafeFullPromptRetry(options) {
630
+ if (!options.requireCleanState && !isRetryableProviderError(options.error) || options.isResumeSafe === true) {
631
+ return;
632
+ }
633
+ const attemptEndState = await captureRetryWorktreeState(options.workingDir);
634
+ if (!options.attemptStartState.available || !attemptEndState.available) {
635
+ throw suppressUnsafeRetryAfterMutatedWorktree(
636
+ options.providerName,
637
+ "unavailable",
638
+ options.error,
639
+ options.attemptStartState.error ?? attemptEndState.error
640
+ );
641
+ }
642
+ if (options.attemptStartState.fingerprint !== attemptEndState.fingerprint) {
643
+ throw suppressUnsafeRetryAfterMutatedWorktree(options.providerName, "changed", options.error);
644
+ }
645
+ }
646
+
647
+ // src/core/providers/shared/workspace-edits-parser.ts
648
+ import * as path3 from "path";
649
+ function isUnsafePath(candidate, options = {}) {
650
+ if (!candidate) return true;
651
+ const { rootDir = process.cwd(), allowAbsolute = false, allowHomeExpansion = false } = options;
652
+ const normalized = candidate.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\\/g, "/");
653
+ if (normalized.includes("\0")) return true;
654
+ if (!allowAbsolute && path3.isAbsolute(candidate)) return true;
655
+ if (!allowHomeExpansion && normalized.startsWith("~")) return true;
656
+ if (normalized.startsWith("../")) return true;
657
+ if (normalized.includes("/../")) return true;
658
+ if (/^[a-zA-Z]:[\\/]/.test(candidate)) return true;
659
+ try {
660
+ const resolved = path3.resolve(rootDir, normalized);
661
+ const resolvedRoot = path3.resolve(rootDir);
662
+ const relative2 = path3.relative(resolvedRoot, resolved);
663
+ const escapesRoot = relative2.startsWith("..") || path3.isAbsolute(relative2);
664
+ return escapesRoot;
665
+ } catch {
666
+ return true;
667
+ }
668
+ }
669
+ function parseWorkspaceEditsFromJsonl(rawOutput, options = {}) {
670
+ if (!rawOutput) {
671
+ return { cleanedOutput: rawOutput, edits: [], errors: [] };
672
+ }
673
+ const edits = [];
674
+ const errors = [];
675
+ const kept = [];
676
+ const pathSafetyOptions = options.workspaceRoot ? { rootDir: options.workspaceRoot } : {};
677
+ for (const line of rawOutput.split("\n")) {
678
+ const trimmed = line.trim();
679
+ if (!trimmed.startsWith("{")) {
680
+ kept.push(line);
681
+ continue;
682
+ }
683
+ let parsed = null;
684
+ try {
685
+ parsed = safeJsonParse(trimmed, {
686
+ debug: false,
687
+ context: "workspace edit JSON"
688
+ });
689
+ } catch (error) {
690
+ const baseMessage = error instanceof JsonParseError ? error.message : `Failed to parse workspace edit JSON: ${error instanceof Error ? error.message : String(error)}`;
691
+ const message = `Malformed workspace edit (${baseMessage})`;
692
+ errors.push(message);
693
+ options.onError?.(message);
694
+ kept.push(line);
695
+ continue;
696
+ }
697
+ if (parsed.type && parsed.type !== "build_edit") {
698
+ kept.push(line);
699
+ continue;
700
+ }
701
+ if (!parsed.op || !parsed.path) {
702
+ const message = `Incomplete workspace edit payload (missing op/path): ${trimmed}`;
703
+ errors.push(message);
704
+ options.onError?.(message);
705
+ kept.push(line);
706
+ continue;
707
+ }
708
+ const validOps = ["writeFile", "appendFile", "deleteFile", "renameFile"];
709
+ if (!validOps.includes(parsed.op)) {
710
+ const message = `Invalid workspace edit operation "${parsed.op}" (expected: ${validOps.join(", ")})`;
711
+ errors.push(message);
712
+ options.onError?.(message);
713
+ kept.push(line);
714
+ continue;
715
+ }
716
+ if (isUnsafePath(parsed.path, pathSafetyOptions) || parsed.fromPath && isUnsafePath(parsed.fromPath, pathSafetyOptions)) {
717
+ const message = `Rejected unsafe workspace edit path: ${parsed.path}${parsed.fromPath ? ` (from: ${parsed.fromPath})` : ""}`;
718
+ errors.push(message);
719
+ options.onError?.(message);
720
+ kept.push(line);
721
+ continue;
722
+ }
723
+ edits.push({
724
+ op: parsed.op,
725
+ path: parsed.path.replace(/\\/g, "/"),
726
+ contents: parsed.contents,
727
+ fromPath: parsed.fromPath?.replace(/\\/g, "/")
728
+ });
729
+ }
730
+ return {
731
+ cleanedOutput: kept.join("\n"),
732
+ edits,
733
+ errors
734
+ };
735
+ }
736
+
737
+ // src/core/providers/shared/retry-notice.ts
738
+ import { AsyncLocalStorage } from "async_hooks";
739
+ var scope = new AsyncLocalStorage();
740
+ var GENERIC_REASONS = /* @__PURE__ */ new Set(["non_zero_exit", "provider_cli_error"]);
741
+ function withProviderRetryNotices(listener, fn) {
742
+ return scope.run(listener, fn);
743
+ }
744
+ function describeRetryReason(error) {
745
+ if (error instanceof ProviderExecutionError) {
746
+ if (typeof error.reason === "string" && error.reason.length > 0 && !GENERIC_REASONS.has(error.reason)) {
747
+ return error.reason;
748
+ }
749
+ if (error.category !== void 0) return error.category;
750
+ }
751
+ return classifyFailure(error);
752
+ }
753
+ function formatProviderRetryNotice(notice) {
754
+ return `${notice.provider} attempt ${notice.attempt} of ${notice.maxAttempts} failed (${notice.reason}); retrying.`;
755
+ }
756
+ function notifyProviderRetry(notice) {
757
+ const listener = scope.getStore();
758
+ if (!listener) return;
759
+ try {
760
+ listener(notice);
761
+ } catch {
762
+ }
763
+ }
764
+
765
+ // src/core/providers/shared/write-workspace-edits.ts
766
+ import * as fs2 from "fs/promises";
767
+ import * as path4 from "path";
768
+ var MAX_WRITE_RETRIES = 3;
769
+ var RETRY_BASE_DELAY_MS = 10;
770
+ async function appendWithRetry(editsFile, payload) {
771
+ let attempt = 0;
772
+ while (true) {
773
+ try {
774
+ await fs2.appendFile(editsFile, payload, "utf8");
775
+ return;
776
+ } catch (error) {
777
+ attempt += 1;
778
+ if (attempt >= MAX_WRITE_RETRIES) {
779
+ throw error;
780
+ }
781
+ const delayMs = RETRY_BASE_DELAY_MS * 2 ** (attempt - 1);
782
+ await new Promise((resolve2) => setTimeout(resolve2, delayMs));
783
+ }
784
+ }
785
+ }
786
+ async function writeWorkspaceEditsToFile(worktreePath, edits) {
787
+ if (!edits || edits.length === 0) {
788
+ return { success: true, written: 0, failed: 0, skipped: 0 };
789
+ }
790
+ const editsDir = path4.join(worktreePath, ".build-project");
791
+ const editsFile = path4.join(editsDir, "edits.jsonl");
792
+ let written = 0;
793
+ let skipped = 0;
794
+ try {
795
+ await fs2.mkdir(editsDir, { recursive: true });
796
+ const payloads = [];
797
+ for (const edit of edits) {
798
+ if (isUnsafePath(edit.path, { rootDir: worktreePath }) || shouldExcludeFile(edit.path) || edit.fromPath && (isUnsafePath(edit.fromPath, { rootDir: worktreePath }) || shouldExcludeFile(edit.fromPath))) {
799
+ emitWarning(
800
+ "WS-003",
801
+ {
802
+ subsystem: "workspace-edits",
803
+ executionPhase: "execution"
804
+ },
805
+ {
806
+ severity: "WARN" /* WARN */,
807
+ metadata: {
808
+ error: "Unsafe workspace edit path",
809
+ path: edit.path,
810
+ fromPath: edit.fromPath,
811
+ operation: "writeWorkspaceEdits"
812
+ }
813
+ }
814
+ );
815
+ skipped += 1;
816
+ continue;
817
+ }
818
+ const payload = {
819
+ type: "build_edit",
820
+ op: edit.op,
821
+ path: edit.path,
822
+ ...edit.contents !== void 0 ? { contents: edit.contents } : {},
823
+ ...edit.fromPath !== void 0 ? { fromPath: edit.fromPath } : {}
824
+ };
825
+ payloads.push(`${JSON.stringify(payload)}
826
+ `);
827
+ }
828
+ if (payloads.length > 0) {
829
+ await appendWithRetry(editsFile, payloads.join(""));
830
+ written = payloads.length;
831
+ }
832
+ return {
833
+ success: written > 0 || skipped === 0,
834
+ written,
835
+ failed: written === 0 && skipped > 0 ? skipped : 0,
836
+ skipped,
837
+ ...written === 0 && skipped > 0 ? { error: "All workspace edits were skipped by safety filters" } : {}
838
+ };
839
+ } catch (error) {
840
+ const errorMessage2 = error instanceof Error ? error.message : String(error);
841
+ emitWarning(
842
+ "WS-003",
843
+ {
844
+ subsystem: "workspace-edits",
845
+ executionPhase: "execution"
846
+ },
847
+ {
848
+ severity: "ERROR" /* ERROR */,
849
+ metadata: {
850
+ error: errorMessage2,
851
+ operation: "writeWorkspaceEdits",
852
+ editsFile
853
+ }
854
+ }
855
+ );
856
+ return {
857
+ success: false,
858
+ written,
859
+ failed: edits.length - written - skipped,
860
+ skipped,
861
+ error: errorMessage2
862
+ };
863
+ }
864
+ }
865
+
866
+ // src/core/providers/shared/runner-lifecycle.ts
867
+ var DEFAULT_PROVIDER_CIRCUIT_BREAKER_OPTIONS = createCircuitBreakerOptions({
868
+ failureThreshold: 5,
869
+ recoveryTimeout: 6e4
870
+ });
871
+ async function executeWithResilience(fn, options) {
872
+ const {
873
+ providerName,
874
+ operation = "execute_prompt",
875
+ maxAttempts = 3,
876
+ retryBudget,
877
+ onRetry,
878
+ abortSignal,
879
+ circuitBreakerOptions = DEFAULT_PROVIDER_CIRCUIT_BREAKER_OPTIONS,
880
+ errorParser,
881
+ providerId,
882
+ fastRetryMode = false,
883
+ initialDelayMs,
884
+ maxDelayMs,
885
+ backoffMultiplier,
886
+ deadlineMs,
887
+ minimumAttemptTimeMs,
888
+ circuitBreakerScope,
889
+ retryWorktreeDir,
890
+ isRetryResumeSafe
891
+ } = options;
892
+ const retryOptions = createRetryOptions({
893
+ providerName,
894
+ operation,
895
+ maxAttempts,
896
+ initialDelayMs: fastRetryMode ? 0 : initialDelayMs,
897
+ maxDelayMs: fastRetryMode ? 0 : maxDelayMs,
898
+ backoffMultiplier,
899
+ retryBudget,
900
+ onRetry: (attempt, error) => {
901
+ onRetry?.(attempt, error);
902
+ notifyProviderRetry({
903
+ provider: providerId ?? providerName,
904
+ attempt,
905
+ maxAttempts,
906
+ reason: describeRetryReason(error)
907
+ });
908
+ },
909
+ abortSignal,
910
+ suppressDelayFloors: fastRetryMode,
911
+ deadlineMs,
912
+ minimumAttemptTimeMs
913
+ });
914
+ const wrappedFn = async () => {
915
+ const attemptStartState = retryWorktreeDir ? await captureRetryWorktreeState(retryWorktreeDir) : void 0;
916
+ try {
917
+ return await executeWithCircuitBreaker(
918
+ providerName,
919
+ errorParser ? async () => {
920
+ try {
921
+ return await fn();
922
+ } catch (error) {
923
+ throw wrapProviderError(error, errorParser, providerId ?? providerName);
924
+ }
925
+ } : fn,
926
+ { isFailure: countsTowardProviderBreaker, ...circuitBreakerOptions },
927
+ circuitBreakerScope
928
+ );
929
+ } catch (error) {
930
+ const thrown = errorParser && error instanceof CircuitBreakerError ? wrapProviderError(error, errorParser, providerId ?? providerName) : error;
931
+ if (retryWorktreeDir && attemptStartState) {
932
+ await rejectUnsafeFullPromptRetry({
933
+ workingDir: retryWorktreeDir,
934
+ attemptStartState,
935
+ error: thrown,
936
+ providerName: providerId ?? providerName,
937
+ isResumeSafe: isRetryResumeSafe?.() === true
938
+ });
939
+ }
940
+ throw thrown;
941
+ }
942
+ };
943
+ return withRetry(wrappedFn, retryOptions);
944
+ }
945
+ var PROVIDER_BREAKER_CATEGORIES = /* @__PURE__ */ new Set([
946
+ "transport_error",
947
+ "rate_limited"
948
+ ]);
949
+ function countsTowardProviderBreaker(error) {
950
+ const category = error instanceof ProviderExecutionError && error.category !== void 0 ? error.category : classifyFailure(error);
951
+ return PROVIDER_BREAKER_CATEGORIES.has(category);
952
+ }
953
+ function stampFailureCategory(error) {
954
+ const category = classifyFailure(error);
955
+ error.category = category;
956
+ if (error.context) error.context.category = category;
957
+ return error;
958
+ }
959
+ function wrapProviderError(error, errorParser, providerId) {
960
+ if (error instanceof CircuitBreakerError) {
961
+ return stampFailureCategory(
962
+ new ProviderExecutionError(error.message, {
963
+ retryable: false,
964
+ reason: "circuit_open",
965
+ providerName: providerId,
966
+ cause: error
967
+ })
968
+ );
969
+ }
970
+ if (error instanceof ProviderExecutionError && (error.category !== void 0 || isReplaySuppressed(error.parsedError))) {
971
+ return error.category === void 0 ? stampFailureCategory(error) : error;
972
+ }
973
+ const parsed = errorParser(error);
974
+ if (error instanceof ProviderExecutionError) {
975
+ const GENERIC_FALLBACK_REASONS = /* @__PURE__ */ new Set(["non_zero_exit", "provider_cli_error"]);
976
+ const hasExplicitTerminalReason = typeof error.reason === "string" && error.reason.length > 0 && !GENERIC_FALLBACK_REASONS.has(error.reason);
977
+ const retryable = error.retryable === false && hasExplicitTerminalReason ? false : parsed.retryable;
978
+ return stampFailureCategory(
979
+ new ProviderExecutionError(error.message, {
980
+ retryable,
981
+ exitCode: error.exitCode,
982
+ statusCode: error.statusCode,
983
+ reason: error.reason,
984
+ signal: error.signal,
985
+ terminationSource: error.terminationSource,
986
+ // Preserve truncated public fields and non-enumerable full raw carriers.
987
+ ...providerExecutionErrorStreamOptions(error),
988
+ providerName: providerId,
989
+ cause: error.cause,
990
+ parsedError: parsed,
991
+ prelaunch: error.prelaunch
992
+ })
993
+ );
994
+ }
995
+ const originalMessage = error instanceof Error ? error.message : String(error);
996
+ return stampFailureCategory(
997
+ new ProviderExecutionError(originalMessage, {
998
+ retryable: parsed.retryable,
999
+ providerName: providerId,
1000
+ cause: error,
1001
+ parsedError: parsed
1002
+ })
1003
+ );
1004
+ }
1005
+ var TOOL_ACTIVITY_REPLAY_SUPPRESSED = "tool_activity_without_resume";
1006
+ function isReplaySuppressed(parsed) {
1007
+ const debugInfo = parsed?.debugInfo;
1008
+ return debugInfo?.retrySuppressed === TOOL_ACTIVITY_REPLAY_SUPPRESSED;
1009
+ }
1010
+ function suppressReplayAfterToolActivity(error, errorParser, providerId) {
1011
+ const wrapped = wrapProviderError(error, errorParser, providerId);
1012
+ if (!wrapped.retryable) return error;
1013
+ const target = error instanceof ProviderExecutionError ? error : wrapped;
1014
+ const parsed = wrapped.parsedError;
1015
+ target.retryable = false;
1016
+ target.parsedError = {
1017
+ ...parsed,
1018
+ retryable: false,
1019
+ debugInfo: { ...parsed.debugInfo ?? {}, retrySuppressed: TOOL_ACTIVITY_REPLAY_SUPPRESSED }
1020
+ };
1021
+ return target;
1022
+ }
1023
+ async function persistWorkspaceEdits(workingDir, edits) {
1024
+ if (edits.length === 0) return;
1025
+ try {
1026
+ await writeWorkspaceEditsToFile(workingDir, edits);
1027
+ } catch (error) {
1028
+ if (process.env.NODE_ENV !== "test") {
1029
+ console.warn(
1030
+ `[runner-lifecycle] Failed to persist workspace edits for ${workingDir}: ${error instanceof Error ? error.message : String(error)}`
1031
+ );
1032
+ }
1033
+ }
1034
+ }
1035
+
1036
+ export {
1037
+ recordInvocationTiming,
1038
+ measurePromptRequestBytes,
1039
+ getGitHead,
1040
+ getGitBranch,
1041
+ readPorcelainPaths,
1042
+ isOnlyMetaChanges,
1043
+ captureGitBaseline,
1044
+ detectGitChangedFiles,
1045
+ RetryBudget,
1046
+ withProviderRetryNotices,
1047
+ formatProviderRetryNotice,
1048
+ captureWorkspaceRetryState,
1049
+ assertWorkspaceRetryIsSafe,
1050
+ captureRetryWorktreeState,
1051
+ rejectUnsafeFullPromptRetry,
1052
+ parseWorkspaceEditsFromJsonl,
1053
+ DEFAULT_PROVIDER_CIRCUIT_BREAKER_OPTIONS,
1054
+ executeWithResilience,
1055
+ wrapProviderError,
1056
+ isReplaySuppressed,
1057
+ suppressReplayAfterToolActivity,
1058
+ persistWorkspaceEdits
1059
+ };
1060
+ //# sourceMappingURL=chunk-D37WY7SH.js.map