@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,1212 @@
1
+ import {
2
+ atomicWrite
3
+ } from "./chunk-4UMRUFBD.js";
4
+ import {
5
+ redactSensitiveConfig
6
+ } from "./chunk-3M57DADF.js";
7
+ import {
8
+ autoFixConfig,
9
+ isFirstTimeDefaultsInitialized,
10
+ registryErrorAtPath,
11
+ validateBuildConfig
12
+ } from "./chunk-HT5OCGKN.js";
13
+ import {
14
+ mergeConfigSources
15
+ } from "./chunk-U5KS22IN.js";
16
+ import {
17
+ resolveConfig
18
+ } from "./chunk-C3DH3NCY.js";
19
+ import {
20
+ getActiveProfilePath,
21
+ loadAllConfigSources,
22
+ loadProjectConfig,
23
+ loadUserConfig
24
+ } from "./chunk-M4BUEXXF.js";
25
+ import {
26
+ mutateUserState,
27
+ readUserState
28
+ } from "./chunk-ZH4G3FU5.js";
29
+ import {
30
+ BuildConfigSchema,
31
+ DEFAULT_CONFIG,
32
+ DEFAULT_USER_PREFERENCES,
33
+ KNOWN_BUILD_CONFIG_ROOTS,
34
+ UserPreferencesSchema,
35
+ buildConfigCandidates,
36
+ isBuildConfigReadError,
37
+ selectedBuildConfigCandidate
38
+ } from "./chunk-FKCG7K6H.js";
39
+ import {
40
+ InvalidConfigContentError,
41
+ InvalidExplicitConfigError,
42
+ ProviderRegistry,
43
+ combineCacheFingerprints,
44
+ fingerprintEnvironment,
45
+ fingerprintFiles,
46
+ getConfiguredProviderRegistryPaths,
47
+ getProviderRegistryInputPaths
48
+ } from "./chunk-QJ6OEH4K.js";
49
+ import {
50
+ PROJECT_CONFIG_SCOPE_ERROR,
51
+ configDirWritable,
52
+ configExists,
53
+ ensureConfigDir,
54
+ findProjectRoot,
55
+ getConfigPaths,
56
+ projectConfigAliasesUserConfig
57
+ } from "./chunk-35J4NE6S.js";
58
+ import {
59
+ BUILD_CONFIG_ALLOW_DEFAULT_FALLBACK,
60
+ emitWarning,
61
+ readEnv
62
+ } from "./chunk-7VRJHTGZ.js";
63
+
64
+ // src/core/config/config-manager.ts
65
+ import { existsSync as existsSync2, readFileSync as readFileSync2, unlinkSync } from "fs";
66
+ import { z } from "zod";
67
+
68
+ // src/core/config/config-jsonc-edits.ts
69
+ import { existsSync, readFileSync } from "fs";
70
+ import { dirname } from "path";
71
+ import { applyEdits, modify } from "jsonc-parser";
72
+ import lockfile from "proper-lockfile";
73
+ var LOCK_OPTIONS = { stale: 1e4, realpath: false };
74
+ var LOCK_RETRIES = 50;
75
+ var LOCK_RETRY_MS = 50;
76
+ function lockConfigFileSync(filePath) {
77
+ for (let attempt = 0; ; attempt += 1) {
78
+ try {
79
+ return lockfile.lockSync(filePath, LOCK_OPTIONS);
80
+ } catch (error) {
81
+ if (error.code !== "ELOCKED" || attempt >= LOCK_RETRIES) {
82
+ throw error;
83
+ }
84
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, LOCK_RETRY_MS);
85
+ }
86
+ }
87
+ }
88
+ function writeJsoncEdits(filePath, edits, baseDir) {
89
+ let release;
90
+ try {
91
+ release = lockConfigFileSync(filePath);
92
+ return editJsoncFile(filePath, edits, baseDir);
93
+ } catch (error) {
94
+ return { success: false, error: error instanceof Error ? error.message : "Unknown error" };
95
+ } finally {
96
+ release?.();
97
+ }
98
+ }
99
+ async function editOrCreateJsoncConfig(filePath, edits, baseDir, create) {
100
+ let release;
101
+ try {
102
+ if (!existsSync(dirname(filePath))) return await create();
103
+ release = await lockfile.lock(filePath, {
104
+ ...LOCK_OPTIONS,
105
+ retries: { retries: LOCK_RETRIES, minTimeout: LOCK_RETRY_MS, maxTimeout: LOCK_RETRY_MS }
106
+ });
107
+ return existsSync(filePath) ? editJsoncFile(filePath, edits, baseDir) : await create();
108
+ } catch (error) {
109
+ return { success: false, error: error instanceof Error ? error.message : "Unknown error" };
110
+ } finally {
111
+ await release?.().catch(() => void 0);
112
+ }
113
+ }
114
+ function editJsoncFile(filePath, edits, baseDir) {
115
+ try {
116
+ let updated = readFileSync(filePath, "utf8");
117
+ for (const edit of edits) {
118
+ updated = applyEdits(
119
+ updated,
120
+ modify(updated, edit.path, edit.value, {
121
+ formattingOptions: {
122
+ insertSpaces: true,
123
+ tabSize: 2
124
+ }
125
+ })
126
+ );
127
+ }
128
+ const result = atomicWrite(filePath, updated.endsWith("\n") ? updated : `${updated}
129
+ `, {
130
+ baseDir
131
+ });
132
+ return result.success ? { success: true } : { success: false, error: result.error?.message };
133
+ } catch (error) {
134
+ return {
135
+ success: false,
136
+ error: error instanceof Error ? error.message : "Unknown error"
137
+ };
138
+ }
139
+ }
140
+
141
+ // src/core/config/user-preferences-state.ts
142
+ var USER_PREFERENCE_ROOT_KEYS = [
143
+ "version",
144
+ "userId",
145
+ "modelRouting",
146
+ "preferences",
147
+ "globalDefaults",
148
+ "migrations",
149
+ "firstTimeSetup"
150
+ ];
151
+ function clone(value) {
152
+ return structuredClone(value);
153
+ }
154
+ function isPlainObject(value) {
155
+ return value !== null && typeof value === "object" && !Array.isArray(value);
156
+ }
157
+ function mergePreferenceValues(existing, incoming) {
158
+ if (!isPlainObject(existing) || !isPlainObject(incoming)) return clone(incoming);
159
+ const merged = clone(existing);
160
+ for (const [key, value] of Object.entries(incoming)) {
161
+ merged[key] = mergePreferenceValues(merged[key], value);
162
+ }
163
+ return merged;
164
+ }
165
+ function topLevelSetupInitialized(value) {
166
+ return isPlainObject(value) && isFirstTimeDefaultsInitialized({ firstTimeSetup: value });
167
+ }
168
+ function preferencesFromUserState(state) {
169
+ const defaults = clone(DEFAULT_USER_PREFERENCES);
170
+ const stored = {};
171
+ for (const key of USER_PREFERENCE_ROOT_KEYS) {
172
+ if (key in state) stored[key] = state[key];
173
+ }
174
+ const candidate = mergePreferenceValues(defaults, stored);
175
+ UserPreferencesSchema.parse(candidate);
176
+ return candidate;
177
+ }
178
+ function replacePreferencesInUserState(state, preferences) {
179
+ const source = preferences;
180
+ for (const key of USER_PREFERENCE_ROOT_KEYS) {
181
+ if (key in source) {
182
+ state[key] = clone(source[key]);
183
+ } else {
184
+ delete state[key];
185
+ }
186
+ }
187
+ }
188
+ function recoverValidPreferenceRoots(state) {
189
+ const recovered = clone(state);
190
+ for (const key of USER_PREFERENCE_ROOT_KEYS) delete recovered[key];
191
+ let candidate = clone(DEFAULT_USER_PREFERENCES);
192
+ for (const key of USER_PREFERENCE_ROOT_KEYS) {
193
+ if (!(key in state)) continue;
194
+ const trial = { ...candidate, [key]: clone(state[key]) };
195
+ if (UserPreferencesSchema.safeParse(trial).success) {
196
+ candidate = trial;
197
+ recovered[key] = clone(state[key]);
198
+ }
199
+ }
200
+ return recovered;
201
+ }
202
+ function preferenceMutationOptions(filePath) {
203
+ return {
204
+ ...filePath ? { filePath } : {},
205
+ validateExisting: (state) => {
206
+ preferencesFromUserState(state);
207
+ },
208
+ recoverInvalidExisting: recoverValidPreferenceRoots
209
+ };
210
+ }
211
+ function readUserPreferencesState(filePath) {
212
+ const result = readUserState(filePath ? { filePath } : {});
213
+ return result.status === "valid" ? preferencesFromUserState(result.data) : null;
214
+ }
215
+ function snapshotUserPreferencesState(filePath) {
216
+ const result = readUserState(filePath ? { filePath } : {});
217
+ if (result.status !== "valid") return { status: result.status };
218
+ try {
219
+ return { status: "valid", preferences: preferencesFromUserState(result.data) };
220
+ } catch {
221
+ return { status: "corrupt" };
222
+ }
223
+ }
224
+ function restoreUserPreferencesState(snapshot, filePath) {
225
+ if (snapshot.status === "valid") {
226
+ return mutateUserState((state) => {
227
+ const replacement = clone(snapshot.preferences);
228
+ UserPreferencesSchema.parse(replacement);
229
+ replacePreferencesInUserState(state, replacement);
230
+ return replacement;
231
+ }, preferenceMutationOptions(filePath));
232
+ }
233
+ return mutateUserState(
234
+ (state) => {
235
+ for (const key of USER_PREFERENCE_ROOT_KEYS) delete state[key];
236
+ return null;
237
+ },
238
+ {
239
+ ...filePath ? { filePath } : {},
240
+ deleteIfEmpty: true
241
+ }
242
+ );
243
+ }
244
+ function resetFirstRunPreferencesState(filePath) {
245
+ return mutateUserPreferencesState((preferences) => {
246
+ delete preferences.firstTimeSetup;
247
+ preferences.preferences.cursor.firstTimeSetup = { completed: false };
248
+ delete preferences.globalDefaults.defaultProvider;
249
+ return void 0;
250
+ }, filePath);
251
+ }
252
+ function mutateUserPreferencesState(mutator, filePath) {
253
+ return mutateUserState((state) => {
254
+ const preferences = preferencesFromUserState(state);
255
+ const value = mutator(preferences);
256
+ UserPreferencesSchema.parse(preferences);
257
+ replacePreferencesInUserState(state, preferences);
258
+ return { preferences, value };
259
+ }, preferenceMutationOptions(filePath));
260
+ }
261
+ function writeUserPreferencesState(preferences, filePath) {
262
+ return mutateUserState((state) => {
263
+ const existing = preferencesFromUserState(state);
264
+ const merged = mergePreferenceValues(existing, preferences);
265
+ UserPreferencesSchema.parse(merged);
266
+ replacePreferencesInUserState(state, merged);
267
+ return merged;
268
+ }, preferenceMutationOptions(filePath));
269
+ }
270
+ function replaceUserPreferencesState(preferences, filePath) {
271
+ return mutateUserState((state) => {
272
+ UserPreferencesSchema.parse(preferences);
273
+ const replacement = clone(preferences);
274
+ const existing = preferencesFromUserState(state);
275
+ const replacementTopLevelInitialized = topLevelSetupInitialized(replacement.firstTimeSetup);
276
+ const replacementInitialized = isFirstTimeDefaultsInitialized(replacement);
277
+ if (topLevelSetupInitialized(existing.firstTimeSetup) && !replacementTopLevelInitialized) {
278
+ replacement.firstTimeSetup = clone(existing.firstTimeSetup);
279
+ }
280
+ if (isFirstTimeDefaultsInitialized(existing) && !replacementInitialized) {
281
+ replacement.preferences.cursor.firstTimeSetup = clone(
282
+ existing.preferences.cursor.firstTimeSetup
283
+ );
284
+ }
285
+ replacePreferencesInUserState(state, replacement);
286
+ return replacement;
287
+ }, preferenceMutationOptions(filePath));
288
+ }
289
+
290
+ // src/core/config/config-manager.ts
291
+ function hasExplicitConfigSource(sources) {
292
+ return sources.some((source) => source.exists && source.type !== "default");
293
+ }
294
+ function allowInvalidConfigFallback() {
295
+ try {
296
+ return readEnv(BUILD_CONFIG_ALLOW_DEFAULT_FALLBACK).value === true;
297
+ } catch (error) {
298
+ throw new InvalidExplicitConfigError(
299
+ `Invalid BUILD_CONFIG_ALLOW_DEFAULT_FALLBACK value: ${error instanceof Error ? error.message : String(error)}`,
300
+ error
301
+ );
302
+ }
303
+ }
304
+ function cloneConfigValue(value) {
305
+ return structuredClone(value);
306
+ }
307
+ function cloneMergedConfigResult(config) {
308
+ return cloneConfigValue(config);
309
+ }
310
+ function snapshotFile(filePath) {
311
+ return existsSync2(filePath) ? { status: "present", content: readFileSync2(filePath, "utf8") } : { status: "missing" };
312
+ }
313
+ function restoreFileSnapshot(filePath, snapshot, baseDir) {
314
+ if (snapshot.status === "present") {
315
+ const result = atomicWrite(filePath, snapshot.content, { baseDir });
316
+ if (!result.success) throw result.error ?? new Error(`Could not restore ${filePath}`);
317
+ return;
318
+ }
319
+ try {
320
+ unlinkSync(filePath);
321
+ } catch (error) {
322
+ if (error.code !== "ENOENT") throw error;
323
+ }
324
+ }
325
+ function isPlaceholderModelDefault(registryDefault) {
326
+ const unqualified = registryDefault.trim().toLowerCase().split("/").pop() ?? "";
327
+ return unqualified === "auto" || unqualified === "default";
328
+ }
329
+ var ConfigManager = class {
330
+ cache = /* @__PURE__ */ new Map();
331
+ cacheHits = 0;
332
+ cacheMisses = 0;
333
+ options;
334
+ updateCursorModelQueue = Promise.resolve();
335
+ constructor(options = {}) {
336
+ this.options = {
337
+ enableCache: options.enableCache ?? true,
338
+ cacheTTL: options.cacheTTL ?? 5 * 60 * 1e3,
339
+ // 5 minutes
340
+ autoFix: options.autoFix ?? false,
341
+ cwd: options.cwd ?? process.cwd()
342
+ };
343
+ }
344
+ get paths() {
345
+ return getConfigPaths(this.options.cwd);
346
+ }
347
+ buildLoadCacheKey(cliFlags) {
348
+ const paths = this.paths;
349
+ const filePaths = [
350
+ ...buildConfigCandidates(paths.projectConfigFile),
351
+ ...buildConfigCandidates(paths.userConfigFile),
352
+ paths.userPreferencesFile,
353
+ getActiveProfilePath(),
354
+ ...getProviderRegistryInputPaths(this.options.cwd)
355
+ ].filter((value) => value !== void 0);
356
+ return JSON.stringify({
357
+ cliFlags,
358
+ cwd: this.options.cwd,
359
+ fingerprint: combineCacheFingerprints(
360
+ fingerprintEnvironment(process.env, () => true),
361
+ fingerprintFiles(filePaths)
362
+ )
363
+ });
364
+ }
365
+ /**
366
+ * Load configuration from all sources with precedence
367
+ *
368
+ * @param cliFlags - CLI flag overrides
369
+ * @param forceReload - Skip cache and reload
370
+ * @returns Resolved configuration with metadata
371
+ */
372
+ async loadConfig(cliFlags = {}, forceReload = false) {
373
+ const startTime = Date.now();
374
+ const cacheKey = this.buildLoadCacheKey(cliFlags);
375
+ try {
376
+ if (!forceReload && this.options.enableCache) {
377
+ const cached = this.getFromCache(cacheKey);
378
+ if (cached) {
379
+ return cached;
380
+ }
381
+ }
382
+ const allowDefaultFallback = allowInvalidConfigFallback();
383
+ const explicitProviderRegistryPaths = getConfiguredProviderRegistryPaths(
384
+ this.options.cwd
385
+ ).filter((path) => existsSync2(path));
386
+ if (explicitProviderRegistryPaths.length > 0) {
387
+ try {
388
+ ProviderRegistry.load(void 0, this.options.cwd);
389
+ } catch (error) {
390
+ if (!allowDefaultFallback) {
391
+ throw new InvalidExplicitConfigError(
392
+ `Invalid explicit provider registry: ${error instanceof Error ? error.message : String(error)}`,
393
+ error
394
+ );
395
+ }
396
+ }
397
+ }
398
+ const sources = await loadAllConfigSources(this.options.cwd, cliFlags);
399
+ const mergeResult = mergeConfigSources(sources);
400
+ const validationResult = validateBuildConfig(mergeResult.mergedConfig, {
401
+ includeWarnings: true,
402
+ includeSuggestions: true,
403
+ cwd: this.options.cwd
404
+ });
405
+ let finalConfig = mergeResult.mergedConfig;
406
+ if (this.options.autoFix && !validationResult.isValid) {
407
+ const autoFixResult = autoFixConfig(mergeResult.mergedConfig);
408
+ if (autoFixResult.changes.length > 0) {
409
+ finalConfig = autoFixResult.fixedConfig;
410
+ emitWarning(
411
+ "CFG-002",
412
+ {
413
+ taskId: "config-manager",
414
+ subsystem: "config",
415
+ executionPhase: "setup"
416
+ },
417
+ {
418
+ severity: "INFO" /* INFO */,
419
+ metadata: {
420
+ changes: autoFixResult.changes,
421
+ operation: "loadConfig"
422
+ }
423
+ }
424
+ );
425
+ }
426
+ }
427
+ const finalValidationResult = finalConfig === mergeResult.mergedConfig ? validationResult : validateBuildConfig(finalConfig, {
428
+ includeWarnings: true,
429
+ includeSuggestions: true,
430
+ cwd: this.options.cwd
431
+ });
432
+ if (!finalValidationResult.isValid) {
433
+ const explicitConfigInvalid = hasExplicitConfigSource(sources) || getConfiguredProviderRegistryPaths(this.options.cwd).some((path) => existsSync2(path));
434
+ emitWarning(
435
+ "CFG-003",
436
+ {
437
+ taskId: "config-manager",
438
+ subsystem: "config",
439
+ executionPhase: "setup"
440
+ },
441
+ {
442
+ severity: "ERROR" /* ERROR */,
443
+ metadata: {
444
+ operation: "loadConfig",
445
+ errors: finalValidationResult.errors,
446
+ sourceTypes: sources.filter((source) => source.exists).map((source) => source.type),
447
+ fallback: explicitConfigInvalid && !allowDefaultFallback ? "blocked-invalid-explicit-config" : "default-config"
448
+ }
449
+ }
450
+ );
451
+ if (explicitConfigInvalid && !allowDefaultFallback) {
452
+ throw new InvalidConfigContentError(
453
+ `Invalid explicit Build configuration: ${finalValidationResult.errors.map((err) => err.message).join("; ")}`
454
+ );
455
+ }
456
+ finalConfig = cloneConfigValue(DEFAULT_CONFIG);
457
+ }
458
+ const isFirstTimeUser = await this.detectFirstTimeUser();
459
+ const resolvedConfig = {
460
+ config: finalConfig,
461
+ sources,
462
+ isFirstTimeUser,
463
+ loadTime: Date.now() - startTime
464
+ };
465
+ this.validateProviderDefaultsConsistency(resolvedConfig.config);
466
+ if (this.options.enableCache) {
467
+ this.setCache(cacheKey, resolvedConfig);
468
+ }
469
+ return cloneMergedConfigResult(resolvedConfig);
470
+ } catch (error) {
471
+ if (error instanceof InvalidExplicitConfigError) {
472
+ throw error;
473
+ }
474
+ if (isBuildConfigReadError(error)) {
475
+ throw error;
476
+ }
477
+ throw error;
478
+ }
479
+ }
480
+ /** Registry-first execution defaults with source attribution. */
481
+ resolveExecutionConfig(cli = {}) {
482
+ return resolveConfig(cli, this.options.cwd, { strictSynthesisModel: false });
483
+ }
484
+ /**
485
+ * Write user preferences atomically
486
+ *
487
+ * @param preferences - User preferences to write
488
+ * @returns Success status
489
+ */
490
+ async writeUserPreferences(preferences) {
491
+ try {
492
+ const result = writeUserPreferencesState(preferences, this.paths.userPreferencesFile);
493
+ this.emitUserStateWarnings(result.warnings);
494
+ this.invalidateCache();
495
+ return { success: true };
496
+ } catch (error) {
497
+ return {
498
+ success: false,
499
+ error: error instanceof Error ? error.message : "Unknown error"
500
+ };
501
+ }
502
+ }
503
+ /**
504
+ * Load user preferences
505
+ *
506
+ * @returns User preferences or null
507
+ */
508
+ async loadUserPreferences() {
509
+ try {
510
+ const preferences = readUserPreferencesState(this.paths.userPreferencesFile);
511
+ return preferences ? cloneConfigValue(preferences) : null;
512
+ } catch {
513
+ return null;
514
+ }
515
+ }
516
+ /** Write project config atomically, preserving user-scope ownership. */
517
+ async writeProjectConfig(config) {
518
+ if (projectConfigAliasesUserConfig(this.options.cwd)) {
519
+ return PROJECT_CONFIG_SCOPE_ERROR;
520
+ }
521
+ try {
522
+ await this.excludeProjectConfigBackups();
523
+ if (!ensureConfigDir(this.paths.projectConfigDir)) {
524
+ return {
525
+ success: false,
526
+ error: "Cannot create project config directory"
527
+ };
528
+ }
529
+ const configContent = this.generateConfigFileContent(config);
530
+ const result = atomicWrite(this.paths.projectConfigFile, configContent, {
531
+ baseDir: findProjectRoot(this.options.cwd) ?? this.options.cwd
532
+ });
533
+ if (!result.success) {
534
+ return { success: false, error: result.error?.message };
535
+ }
536
+ this.invalidateCache();
537
+ return { success: true };
538
+ } catch (error) {
539
+ return {
540
+ success: false,
541
+ error: error instanceof Error ? error.message : "Unknown error"
542
+ };
543
+ }
544
+ }
545
+ /** Apply only repaired JSONC paths in the existing project candidate, retaining comments. */
546
+ async applyProjectConfigFixes(edits) {
547
+ if (edits.length === 0) return { success: true };
548
+ if (projectConfigAliasesUserConfig(this.options.cwd)) {
549
+ return PROJECT_CONFIG_SCOPE_ERROR;
550
+ }
551
+ const projectConfigFile = selectedBuildConfigCandidate(this.paths.projectConfigFile);
552
+ const projectConfig = edits.reduce(
553
+ (config, edit) => this.setNestedValue(config, edit.path, edit.value),
554
+ {}
555
+ );
556
+ return this.applyJsoncEdits(
557
+ projectConfigFile,
558
+ edits,
559
+ () => this.writeProjectConfig(projectConfig)
560
+ );
561
+ }
562
+ /**
563
+ * Update user configuration atomically (~/.config/build/build.config.jsonc)
564
+ *
565
+ * @param config - User configuration to write
566
+ * @returns Success status
567
+ */
568
+ async writeUserConfig(config) {
569
+ try {
570
+ if (!ensureConfigDir(this.paths.userConfigDir)) {
571
+ return {
572
+ success: false,
573
+ error: "Cannot create user config directory"
574
+ };
575
+ }
576
+ const configContent = this.generateConfigFileContent(config);
577
+ const result = atomicWrite(this.paths.userConfigFile, configContent, {
578
+ baseDir: this.options.cwd
579
+ });
580
+ if (!result.success) {
581
+ return { success: false, error: result.error?.message };
582
+ }
583
+ this.invalidateCache();
584
+ return { success: true };
585
+ } catch (error) {
586
+ return {
587
+ success: false,
588
+ error: error instanceof Error ? error.message : "Unknown error"
589
+ };
590
+ }
591
+ }
592
+ /**
593
+ * Load project configuration
594
+ *
595
+ * @returns Project configuration or null
596
+ */
597
+ async loadProjectConfig() {
598
+ return loadProjectConfig(this.paths.projectConfigFile, this.options.cwd);
599
+ }
600
+ /**
601
+ * Update cursor model preference
602
+ *
603
+ * @param model - New cursor model
604
+ * @param context - Change context
605
+ * @returns Success status
606
+ */
607
+ async updateCursorModel(model, context) {
608
+ return this.runSerializedCursorModelUpdate(async () => {
609
+ try {
610
+ const result = mutateUserPreferencesState((preferences) => {
611
+ const cursor = preferences.preferences.cursor;
612
+ const previousModel = cursor.usageHistory.lastUsed;
613
+ cursor.userChosenDefault = model;
614
+ cursor.usageHistory.lastUsed = model;
615
+ cursor.usageHistory.usageCount += 1;
616
+ cursor.usageHistory.modelChanges ??= [];
617
+ cursor.usageHistory.modelChanges.push({
618
+ from: previousModel ?? "",
619
+ to: model,
620
+ timestamp: context.timestamp || (/* @__PURE__ */ new Date()).toISOString(),
621
+ context: context.type
622
+ });
623
+ }, this.paths.userPreferencesFile);
624
+ this.emitUserStateWarnings(result.warnings);
625
+ this.invalidateCache();
626
+ return { success: true };
627
+ } catch (error) {
628
+ return {
629
+ success: false,
630
+ error: error instanceof Error ? error.message : "Unknown error"
631
+ };
632
+ }
633
+ });
634
+ }
635
+ /**
636
+ * Detect if this is a first-time user
637
+ *
638
+ * @returns True if first-time user
639
+ */
640
+ async detectFirstTimeUser() {
641
+ try {
642
+ const userPrefs = await this.loadUserPreferences();
643
+ return !isFirstTimeDefaultsInitialized(userPrefs);
644
+ } catch {
645
+ return true;
646
+ }
647
+ }
648
+ /**
649
+ * Get configuration diagnostics
650
+ *
651
+ * @returns Diagnostic information
652
+ */
653
+ async getDiagnostics() {
654
+ const paths = {
655
+ projectConfigFile: {
656
+ exists: buildConfigCandidates(this.paths.projectConfigFile).some(configExists)
657
+ },
658
+ userConfigFile: {
659
+ exists: buildConfigCandidates(this.paths.userConfigFile).some(configExists)
660
+ },
661
+ userPreferencesFile: {
662
+ exists: configExists(this.paths.userPreferencesFile)
663
+ },
664
+ userConfigDir: {
665
+ exists: configExists(this.paths.userConfigDir),
666
+ writable: configDirWritable(this.paths.userConfigDir, { createIfMissing: false })
667
+ },
668
+ projectConfigDir: {
669
+ exists: configExists(this.paths.projectConfigDir),
670
+ writable: configDirWritable(this.paths.projectConfigDir, { createIfMissing: false })
671
+ }
672
+ };
673
+ const cache = {
674
+ enabled: this.options.enableCache,
675
+ size: this.cache.size,
676
+ entries: Array.from(this.cache.entries()).map(([key, entry]) => ({
677
+ key: `${key.substring(0, 50)}...`,
678
+ age: Date.now() - entry.timestamp
679
+ }))
680
+ };
681
+ const config = await this.loadConfig();
682
+ const validationResult = validateBuildConfig(config.config, { cwd: this.options.cwd });
683
+ const validation = {
684
+ isValid: validationResult.isValid,
685
+ errors: validationResult.errors.map((e) => e.message),
686
+ warnings: validationResult.warnings.map((w) => w.message),
687
+ autoFixed: validationResult.autoFixed
688
+ };
689
+ const performance = {
690
+ avgLoadTime: config.loadTime,
691
+ cacheHitRate: this.calculateCacheHitRate()
692
+ };
693
+ return { paths, cache, validation, performance };
694
+ }
695
+ /**
696
+ * Clear configuration cache
697
+ */
698
+ clearCache() {
699
+ this.cache.clear();
700
+ this.cacheHits = 0;
701
+ this.cacheMisses = 0;
702
+ }
703
+ /**
704
+ * Invalidate cache for current working directory
705
+ *
706
+ * CRITICAL FIX: Atomic cache invalidation to prevent race conditions.
707
+ * Collect all keys first, then delete them atomically to ensure
708
+ * consistent cache state during concurrent access.
709
+ */
710
+ invalidateCache() {
711
+ const keysToDelete = [];
712
+ for (const [key] of this.cache) {
713
+ if (key.includes(this.options.cwd)) {
714
+ keysToDelete.push(key);
715
+ }
716
+ }
717
+ for (const key of keysToDelete) {
718
+ this.cache.delete(key);
719
+ }
720
+ }
721
+ /**
722
+ * Get configuration from cache
723
+ *
724
+ * @param key - Cache key
725
+ * @returns Cached configuration or null
726
+ */
727
+ getFromCache(key) {
728
+ const entry = this.cache.get(key);
729
+ if (!entry) {
730
+ this.cacheMisses += 1;
731
+ return null;
732
+ }
733
+ if (Date.now() - entry.timestamp > this.options.cacheTTL) {
734
+ this.cache.delete(key);
735
+ this.cacheMisses += 1;
736
+ return null;
737
+ }
738
+ this.cacheHits += 1;
739
+ return cloneMergedConfigResult(entry.config);
740
+ }
741
+ /**
742
+ * Set configuration in cache
743
+ *
744
+ * @param key - Cache key
745
+ * @param config - Configuration to cache
746
+ */
747
+ setCache(key, config) {
748
+ this.cache.set(key, {
749
+ config: cloneMergedConfigResult(config),
750
+ timestamp: Date.now(),
751
+ sources: config.sources.map((s) => s.type)
752
+ });
753
+ }
754
+ async runSerializedCursorModelUpdate(operation) {
755
+ let release = () => {
756
+ };
757
+ const previous = this.updateCursorModelQueue;
758
+ this.updateCursorModelQueue = new Promise((resolve) => {
759
+ release = resolve;
760
+ });
761
+ await previous;
762
+ try {
763
+ return await operation();
764
+ } finally {
765
+ release?.();
766
+ }
767
+ }
768
+ /**
769
+ * Calculate cache hit rate
770
+ *
771
+ * @returns Cache hit rate as percentage
772
+ */
773
+ calculateCacheHitRate() {
774
+ const totalLookups = this.cacheHits + this.cacheMisses;
775
+ if (totalLookups === 0) {
776
+ return 0;
777
+ }
778
+ return Math.round(this.cacheHits / totalLookups * 1e3) / 10;
779
+ }
780
+ emitUserStateWarnings(warnings) {
781
+ for (const warning of warnings) {
782
+ emitWarning(
783
+ "CFG-001",
784
+ { taskId: "config-manager", subsystem: "config", executionPhase: "setup" },
785
+ {
786
+ severity: "WARN" /* WARN */,
787
+ metadata: { operation: "writeUserPreferences", ...warning }
788
+ }
789
+ );
790
+ }
791
+ }
792
+ /**
793
+ * Detect and warn about provider default drift (all providers with model defaults).
794
+ */
795
+ validateProviderDefaultsConsistency(config) {
796
+ try {
797
+ const registry = ProviderRegistry.load(void 0, this.options.cwd);
798
+ const providersWithModels = Object.values(registry.providers).filter(
799
+ (p) => p.models?.default
800
+ );
801
+ for (const providerConfig of providersWithModels) {
802
+ const providerId = providerConfig.id;
803
+ const registryDefault = providerConfig.models.default;
804
+ const providerEntry = config.providers?.[providerId];
805
+ const configured = providerEntry && typeof providerEntry === "object" && "model" in providerEntry && typeof providerEntry.model === "string" ? providerEntry.model : void 0;
806
+ if (configured && configured !== registryDefault && !isPlaceholderModelDefault(registryDefault)) {
807
+ emitWarning(
808
+ "CFG-007",
809
+ {
810
+ taskId: "config-manager",
811
+ subsystem: "config",
812
+ executionPhase: "setup"
813
+ },
814
+ {
815
+ severity: "WARN" /* WARN */,
816
+ metadata: {
817
+ provider: providerId,
818
+ configuredDefault: configured,
819
+ registryDefault,
820
+ recommendation: "Remove the model override or align it with providers.yaml"
821
+ }
822
+ }
823
+ );
824
+ }
825
+ }
826
+ } catch (error) {
827
+ emitWarning(
828
+ "CFG-002",
829
+ {
830
+ taskId: "config-manager",
831
+ subsystem: "config",
832
+ executionPhase: "setup"
833
+ },
834
+ {
835
+ severity: "INFO" /* INFO */,
836
+ metadata: {
837
+ error: error instanceof Error ? error.message : String(error),
838
+ recommendation: "Ensure provider registry is valid to compare defaults"
839
+ }
840
+ }
841
+ );
842
+ }
843
+ }
844
+ /**
845
+ * Set a configuration value using dot-notation path
846
+ *
847
+ * @param path - Dot-notation path (e.g., 'defaults.provider', 'automation.flywheel.merge.biomeRepair')
848
+ * @param value - Value to set
849
+ * @param scope - Configuration scope ('user' or 'project')
850
+ * @returns Success status with previous value
851
+ */
852
+ async setConfigValue(path, value, scope = "project") {
853
+ try {
854
+ const pathSegments = path.split(".").filter(Boolean);
855
+ if (pathSegments.length === 0) {
856
+ return { success: false, error: "Invalid configuration path" };
857
+ }
858
+ if (!this.isValidConfigPath(pathSegments)) {
859
+ return {
860
+ success: false,
861
+ error: `Unknown configuration path: ${path}. Use 'build config show' to see valid paths.`
862
+ };
863
+ }
864
+ const config = await this.loadScopedConfig(scope);
865
+ const previousValue = this.getNestedValue(config, pathSegments);
866
+ const parsedValue = this.parseConfigValue(value);
867
+ const updatedConfig = this.setNestedValue(config, pathSegments, parsedValue);
868
+ const validationResult = BuildConfigSchema.safeParse(updatedConfig);
869
+ if (!validationResult.success) {
870
+ return {
871
+ success: false,
872
+ error: `Invalid configuration: ${validationResult.error.issues.map((issue) => issue.message).join(", ")}`
873
+ };
874
+ }
875
+ if (!this.hasNestedPath(validationResult.data, pathSegments)) {
876
+ return {
877
+ success: false,
878
+ error: `Unknown configuration path: ${path}. Use 'build config show' to see valid paths.`
879
+ };
880
+ }
881
+ const keyError = registryErrorAtPath(validationResult.data, pathSegments, this.options.cwd);
882
+ if (keyError) {
883
+ return { success: false, error: keyError };
884
+ }
885
+ const writeResult = await this.writeConfigValuePreservingJsonc(
886
+ scope,
887
+ pathSegments,
888
+ parsedValue,
889
+ updatedConfig
890
+ // unparsed: never persist schema defaults
891
+ );
892
+ if (!writeResult.success) {
893
+ return writeResult;
894
+ }
895
+ return { success: true, previousValue };
896
+ } catch (error) {
897
+ return {
898
+ success: false,
899
+ error: error instanceof Error ? error.message : "Unknown error"
900
+ };
901
+ }
902
+ }
903
+ /**
904
+ * Get a configuration value using dot-notation path
905
+ *
906
+ * @param path - Dot-notation path
907
+ * @param scope - Configuration scope ('user' or 'project')
908
+ * @returns The value at the path or undefined
909
+ */
910
+ async getConfigValue(path, scope = "project") {
911
+ const config = await this.loadScopedConfig(scope);
912
+ return this.getNestedValue(config, path.split(".").filter(Boolean));
913
+ }
914
+ /**
915
+ * Read one raw config layer. The user layer is read from its own file rather
916
+ * than through loadConfig(), so a value that makes the merged tree invalid can
917
+ * still be read and replaced in place.
918
+ */
919
+ async loadScopedConfig(scope) {
920
+ return scope === "project" ? await this.loadProjectConfig() ?? {} : await loadUserConfig(this.paths.userConfigFile, this.options.cwd) ?? {};
921
+ }
922
+ /**
923
+ * Validate a configuration path against allowed paths
924
+ */
925
+ isValidConfigPath(pathSegments) {
926
+ const rootNamespace = pathSegments[0];
927
+ if (!rootNamespace || !KNOWN_BUILD_CONFIG_ROOTS.includes(rootNamespace)) {
928
+ return false;
929
+ }
930
+ return true;
931
+ }
932
+ /**
933
+ * Get nested value from object using path segments
934
+ */
935
+ getNestedValue(obj, path) {
936
+ let current = obj;
937
+ for (const segment of path) {
938
+ if (current == null || typeof current !== "object") {
939
+ return void 0;
940
+ }
941
+ current = current[segment];
942
+ }
943
+ return current;
944
+ }
945
+ hasNestedPath(obj, path) {
946
+ let current = obj;
947
+ for (const segment of path) {
948
+ if (current == null || typeof current !== "object" || !Object.hasOwn(current, segment)) {
949
+ return false;
950
+ }
951
+ current = current[segment];
952
+ }
953
+ return true;
954
+ }
955
+ /**
956
+ * Set nested value in object using path segments (immutable)
957
+ */
958
+ setNestedValue(obj, path, value) {
959
+ const result = structuredClone(obj);
960
+ let current = result;
961
+ for (let i = 0; i < path.length - 1; i++) {
962
+ const segment = path[i];
963
+ if (!segment) {
964
+ continue;
965
+ }
966
+ if (!(segment in current) || typeof current[segment] !== "object" || current[segment] === null) {
967
+ current[segment] = {};
968
+ }
969
+ current = current[segment];
970
+ }
971
+ const lastSegment = path[path.length - 1];
972
+ if (lastSegment) {
973
+ current[lastSegment] = value;
974
+ }
975
+ return result;
976
+ }
977
+ /**
978
+ * Parse config value from string to appropriate type
979
+ */
980
+ parseConfigValue(value) {
981
+ if (typeof value !== "string") {
982
+ return value;
983
+ }
984
+ const trimmed = value.trim();
985
+ if (trimmed.startsWith("[") && trimmed.endsWith("]") || trimmed.startsWith("{") && trimmed.endsWith("}")) {
986
+ try {
987
+ return JSON.parse(trimmed);
988
+ } catch {
989
+ return value;
990
+ }
991
+ }
992
+ if (value.toLowerCase() === "true") return true;
993
+ if (value.toLowerCase() === "false") return false;
994
+ const num = Number(value);
995
+ if (!Number.isNaN(num) && value.trim() !== "") {
996
+ return num;
997
+ }
998
+ if (value.toLowerCase() === "null") return null;
999
+ if (value.toLowerCase() === "undefined") return void 0;
1000
+ return value;
1001
+ }
1002
+ /**
1003
+ * Generate JSONC configuration file content
1004
+ *
1005
+ * @param config - Configuration object
1006
+ * @returns JSONC file content
1007
+ */
1008
+ generateConfigFileContent(config) {
1009
+ return `{
1010
+ // Build configuration.
1011
+ // JSONC is JSON with comments and trailing commas; use "build config set/get"
1012
+ // to edit this safely, or hand-edit it with a JSONC-aware editor.
1013
+ ${JSON.stringify(config, null, 2).split("\n").map((line, index) => index === 0 ? line.slice(1) : ` ${line}`).join("\n")}
1014
+ `;
1015
+ }
1016
+ async writeConfigValuePreservingJsonc(scope, pathSegments, value, validatedConfig) {
1017
+ if (scope === "project" && projectConfigAliasesUserConfig(this.options.cwd)) {
1018
+ return PROJECT_CONFIG_SCOPE_ERROR;
1019
+ }
1020
+ const filePath = selectedBuildConfigCandidate(
1021
+ scope === "project" ? this.paths.projectConfigFile : this.paths.userConfigFile
1022
+ );
1023
+ return this.applyJsoncEdits(
1024
+ filePath,
1025
+ [{ path: pathSegments, value }],
1026
+ () => scope === "project" ? this.writeProjectConfig(validatedConfig) : this.writeUserConfig(validatedConfig)
1027
+ );
1028
+ }
1029
+ /** Edit a config file in place, or create it when absent; invalidates the cache once written. */
1030
+ async applyJsoncEdits(filePath, edits, create) {
1031
+ const projectRoot = findProjectRoot(this.options.cwd) ?? this.options.cwd;
1032
+ const isUserFile = buildConfigCandidates(this.paths.userConfigFile).includes(filePath);
1033
+ const baseDir = isUserFile ? this.options.cwd : projectRoot;
1034
+ if (!isUserFile) await this.excludeProjectConfigBackups();
1035
+ const result = await editOrCreateJsoncConfig(filePath, edits, baseDir, create);
1036
+ if (result.success) {
1037
+ this.invalidateCache();
1038
+ }
1039
+ return result;
1040
+ }
1041
+ async excludeProjectConfigBackups() {
1042
+ const { ensureWorktreeGitExclude } = await import("./worktree-environment-WTVABAQW.js");
1043
+ await ensureWorktreeGitExclude(findProjectRoot(this.options.cwd) ?? this.options.cwd, [
1044
+ "/.build-project/config/*.backup.*"
1045
+ ]);
1046
+ }
1047
+ /** Reset the selected scopes; refuse aliased project scope before either write. */
1048
+ async resetToDefaults(level = "project") {
1049
+ if (level !== "user" && projectConfigAliasesUserConfig(this.options.cwd)) {
1050
+ return PROJECT_CONFIG_SCOPE_ERROR;
1051
+ }
1052
+ try {
1053
+ if (level === "user" || level === "all") {
1054
+ const userConfigSnapshot = snapshotFile(this.paths.userConfigFile);
1055
+ const userResult = await this.writeUserConfig({});
1056
+ if (!userResult.success) return userResult;
1057
+ if (level === "all") {
1058
+ const projectResult = await this.writeProjectConfig({});
1059
+ if (!projectResult.success) {
1060
+ const rollbackErrors = [];
1061
+ try {
1062
+ restoreFileSnapshot(this.paths.userConfigFile, userConfigSnapshot, this.options.cwd);
1063
+ } catch (error) {
1064
+ rollbackErrors.push(
1065
+ `user config rollback failed: ${error instanceof Error ? error.message : String(error)}`
1066
+ );
1067
+ }
1068
+ return rollbackErrors.length === 0 ? projectResult : {
1069
+ success: false,
1070
+ error: `${projectResult.error ?? "Project config write failed"}; ${rollbackErrors.join("; ")}`
1071
+ };
1072
+ }
1073
+ }
1074
+ } else if (level === "project") {
1075
+ const result = await this.writeProjectConfig({});
1076
+ if (!result.success) return result;
1077
+ }
1078
+ this.clearCache();
1079
+ return { success: true };
1080
+ } catch (error) {
1081
+ return {
1082
+ success: false,
1083
+ error: error instanceof Error ? error.message : "Unknown error"
1084
+ };
1085
+ }
1086
+ }
1087
+ /**
1088
+ * Export configuration for backup or sharing
1089
+ *
1090
+ * @param includeUserPreferences - Whether to include user preferences
1091
+ * @returns Export data
1092
+ */
1093
+ async exportConfig(includeUserPreferences = false) {
1094
+ const config = await this.loadConfig();
1095
+ const result = {
1096
+ config: redactSensitiveConfig(config.config),
1097
+ metadata: {
1098
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
1099
+ version: "1.0",
1100
+ cwd: this.options.cwd
1101
+ }
1102
+ };
1103
+ if (includeUserPreferences) {
1104
+ const prefs = await this.loadUserPreferences();
1105
+ if (prefs) {
1106
+ result.preferences = redactSensitiveConfig(prefs);
1107
+ }
1108
+ }
1109
+ return result;
1110
+ }
1111
+ /**
1112
+ * Import configuration from exported data
1113
+ *
1114
+ * @param exportData - Exported configuration data
1115
+ * @param importPreferences - Whether to import user preferences
1116
+ * @returns Success status
1117
+ */
1118
+ async importConfig(exportData, importPreferences = false) {
1119
+ try {
1120
+ if (!exportData || typeof exportData !== "object" || !("config" in exportData) || !("metadata" in exportData)) {
1121
+ return { success: false, error: "Invalid export data format" };
1122
+ }
1123
+ const metadataResult = z.object({
1124
+ exportedAt: z.string().min(1),
1125
+ version: z.string().min(1),
1126
+ cwd: z.string()
1127
+ }).strict().safeParse(exportData.metadata);
1128
+ if (!metadataResult.success) {
1129
+ return {
1130
+ success: false,
1131
+ error: `Invalid export data format: ${metadataResult.error.issues.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`).join("; ")}`
1132
+ };
1133
+ }
1134
+ const unknownConfigRoots = exportData.config && typeof exportData.config === "object" && !Array.isArray(exportData.config) ? Object.keys(exportData.config).filter((key) => !KNOWN_BUILD_CONFIG_ROOTS.includes(key)) : [];
1135
+ if (unknownConfigRoots.length > 0) {
1136
+ return {
1137
+ success: false,
1138
+ error: `Invalid imported configuration: Unknown top-level configuration key(s): ${unknownConfigRoots.join(", ")}`
1139
+ };
1140
+ }
1141
+ const configResult = BuildConfigSchema.safeParse(exportData.config);
1142
+ if (!configResult.success) {
1143
+ return {
1144
+ success: false,
1145
+ error: `Invalid imported configuration: ${configResult.error.issues.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`).join("; ")}`
1146
+ };
1147
+ }
1148
+ let validatedPreferences;
1149
+ let previousPreferences;
1150
+ if (importPreferences && exportData.preferences !== void 0) {
1151
+ const preferencesResult = UserPreferencesSchema.safeParse(exportData.preferences);
1152
+ if (!preferencesResult.success) {
1153
+ return {
1154
+ success: false,
1155
+ error: `Invalid imported preferences: ${preferencesResult.error.issues.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`).join("; ")}`
1156
+ };
1157
+ }
1158
+ validatedPreferences = preferencesResult.data;
1159
+ previousPreferences = snapshotUserPreferencesState(this.paths.userPreferencesFile);
1160
+ }
1161
+ if (validatedPreferences) {
1162
+ try {
1163
+ const prefResult = replaceUserPreferencesState(
1164
+ validatedPreferences,
1165
+ this.paths.userPreferencesFile
1166
+ );
1167
+ this.emitUserStateWarnings(prefResult.warnings);
1168
+ } catch (error) {
1169
+ return {
1170
+ success: false,
1171
+ error: error instanceof Error ? error.message : "Unknown error"
1172
+ };
1173
+ }
1174
+ }
1175
+ const result = await this.writeProjectConfig(configResult.data);
1176
+ if (!result.success) {
1177
+ if (previousPreferences) {
1178
+ try {
1179
+ restoreUserPreferencesState(previousPreferences, this.paths.userPreferencesFile);
1180
+ } catch (rollbackError) {
1181
+ return {
1182
+ success: false,
1183
+ error: `${result.error ?? "Project config write failed"}; preference rollback also failed: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`
1184
+ };
1185
+ }
1186
+ }
1187
+ return result;
1188
+ }
1189
+ this.clearCache();
1190
+ return { success: true };
1191
+ } catch (error) {
1192
+ return {
1193
+ success: false,
1194
+ error: error instanceof Error ? error.message : "Unknown error"
1195
+ };
1196
+ }
1197
+ }
1198
+ };
1199
+
1200
+ export {
1201
+ writeJsoncEdits,
1202
+ preferencesFromUserState,
1203
+ snapshotUserPreferencesState,
1204
+ restoreUserPreferencesState,
1205
+ resetFirstRunPreferencesState,
1206
+ mutateUserPreferencesState,
1207
+ writeUserPreferencesState,
1208
+ replaceUserPreferencesState,
1209
+ isPlaceholderModelDefault,
1210
+ ConfigManager
1211
+ };
1212
+ //# sourceMappingURL=chunk-W4BAIQ6L.js.map