@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,1717 @@
1
+ import {
2
+ AGENT_DEFAULT,
3
+ buildExecutionPreview,
4
+ buildJudgeRow,
5
+ describeInstructionsImport,
6
+ fastFallbackLabel,
7
+ formatEffort,
8
+ formatShown,
9
+ formatSummaryJudge,
10
+ summarizeJudgeRow
11
+ } from "./chunk-7NVJMH52.js";
12
+ import {
13
+ resolveReviewerEligibility
14
+ } from "./chunk-JDCZQZU7.js";
15
+ import {
16
+ renderJsonError,
17
+ renderJsonResult
18
+ } from "./chunk-5YDE3Q62.js";
19
+ import {
20
+ resolveRepoRootForBuildDir
21
+ } from "./chunk-UB7LQITD.js";
22
+ import {
23
+ readJudgeTypeEnv,
24
+ resolveCompeteConfig
25
+ } from "./chunk-EN62WLFD.js";
26
+ import {
27
+ registry
28
+ } from "./chunk-7HYBSRPZ.js";
29
+ import {
30
+ ExitCodeError
31
+ } from "./chunk-Y4ZDDHB6.js";
32
+ import {
33
+ ConfigManager
34
+ } from "./chunk-W4BAIQ6L.js";
35
+ import {
36
+ isSensitiveConfigPath,
37
+ redactSensitiveConfig
38
+ } from "./chunk-3M57DADF.js";
39
+ import {
40
+ autoFixConfig,
41
+ generateValidationReport,
42
+ validateBuildConfig
43
+ } from "./chunk-HT5OCGKN.js";
44
+ import {
45
+ resolveExecutionRoles,
46
+ resolveExecutorRoleTarget
47
+ } from "./chunk-32IYXIE5.js";
48
+ import {
49
+ mergeConfigSources
50
+ } from "./chunk-U5KS22IN.js";
51
+ import {
52
+ enterReadOnlyProviderOrderView,
53
+ formatResolvedValue,
54
+ resolveConfig,
55
+ resolveDefaultProvider
56
+ } from "./chunk-C3DH3NCY.js";
57
+ import {
58
+ BooleanFlagSchema,
59
+ ExistingFilePathSchema,
60
+ FilePathSchema,
61
+ formatValidationErrors,
62
+ validateCommandOptions
63
+ } from "./chunk-I7SCBHJN.js";
64
+ import {
65
+ getConfigDiagnostics,
66
+ loadActiveProfile,
67
+ loadAllConfigSources,
68
+ profileToBuildConfig
69
+ } from "./chunk-M4BUEXXF.js";
70
+ import {
71
+ parseJsonWithContext
72
+ } from "./chunk-P6SSWAKY.js";
73
+ import {
74
+ isBuildConfigReadError
75
+ } from "./chunk-FKCG7K6H.js";
76
+ import {
77
+ normalizeEngineId
78
+ } from "./chunk-KKQKWAMF.js";
79
+ import {
80
+ InvalidConfigContentError,
81
+ ProviderRegistry
82
+ } from "./chunk-QJ6OEH4K.js";
83
+ import {
84
+ findProjectRoot,
85
+ getConfigPaths
86
+ } from "./chunk-35J4NE6S.js";
87
+ import {
88
+ ValidationError
89
+ } from "./chunk-RRC5BL7B.js";
90
+ import {
91
+ getUserConfigDir,
92
+ getUserConfigFile
93
+ } from "./chunk-56WPYDJH.js";
94
+ import {
95
+ BUILD_MATRIX_BORDERLINE_MARGIN,
96
+ BUILD_MATRIX_CLOSE_CALL_MARGIN,
97
+ BUILD_MATRIX_CONFIDENCE_THRESHOLD,
98
+ readEnv
99
+ } from "./chunk-7VRJHTGZ.js";
100
+ import {
101
+ sanitizeString,
102
+ sanitizeValue
103
+ } from "./chunk-CPSVQR2I.js";
104
+
105
+ // src/cli/commands/config.ts
106
+ import { existsSync, readFileSync, writeFileSync } from "fs";
107
+ import { join } from "path";
108
+ import chalk3 from "chalk";
109
+ import { Command } from "commander";
110
+ import { z } from "zod";
111
+
112
+ // src/core/config/project-config-repair.ts
113
+ var UNRESOLVED_REASON = {
114
+ "default-provider": "No default provider is set, and the project config declares no enabled provider to name as the default",
115
+ "enable-provider": "No provider is enabled, and the project config declares no provider to enable"
116
+ };
117
+ function resolveProjectConfigRepair(mergedEdits, projectConfig) {
118
+ const projectEdits = autoFixConfig(projectConfig ?? {}).edits;
119
+ const repair = { edits: [], applied: [], unresolved: [] };
120
+ for (const mergedEdit of mergedEdits) {
121
+ const projectEdit = projectEdits.find((edit) => edit.code === mergedEdit.code);
122
+ if (projectEdit === void 0) {
123
+ repair.unresolved.push(UNRESOLVED_REASON[mergedEdit.code]);
124
+ continue;
125
+ }
126
+ repair.edits.push(projectEdit);
127
+ repair.applied.push(projectEdit.description);
128
+ }
129
+ return repair;
130
+ }
131
+ async function loadUnvalidatedConfig(cwd = process.cwd()) {
132
+ const sources = await loadAllConfigSources(cwd);
133
+ return { config: mergeConfigSources(sources).mergedConfig, sources };
134
+ }
135
+
136
+ // src/cli/commands/config-precedence-sources.ts
137
+ function listSourceProviderModels(source, resolved) {
138
+ const entries = /* @__PURE__ */ new Map();
139
+ const data = source.data;
140
+ for (const [provider, providerDefaults] of Object.entries(data?.defaults?.providers ?? {})) {
141
+ if (providerDefaults?.model) entries.set(provider, providerDefaults.model);
142
+ }
143
+ for (const [provider, providerConfig] of Object.entries(data?.providers ?? {})) {
144
+ if (!entries.has(provider) && providerConfig && "model" in providerConfig && providerConfig.model) {
145
+ entries.set(provider, String(providerConfig.model));
146
+ }
147
+ }
148
+ if (source.type === "env") {
149
+ for (const [provider, model] of Object.entries(resolved.providerModels)) {
150
+ if ((model.source === "env" || model.source === "env-legacy") && !entries.has(provider)) {
151
+ entries.set(provider, model.value);
152
+ }
153
+ }
154
+ }
155
+ return [...entries];
156
+ }
157
+ function sourcesForPrecedence(sources, resolved) {
158
+ const envSource = { type: "env", priority: 90, data: {}, exists: true };
159
+ const needsEnvSource = !sources.some((source) => source.type === "env") && listSourceProviderModels(envSource, resolved).length > 0;
160
+ return [...sources, ...needsEnvSource ? [envSource] : []].sort(
161
+ (a, b) => b.priority - a.priority
162
+ );
163
+ }
164
+
165
+ // src/cli/commands/config-resolved-render.ts
166
+ import chalk from "chalk";
167
+ function jobLines(label, job) {
168
+ return [
169
+ ` ${label} Provider: ${formatShown(job.provider)}`,
170
+ ` ${label} Model: ${formatShown(job.model)}`,
171
+ ` ${label} Reasoning: ${formatEffort(job.reasoningEffort)}`,
172
+ ...job.error ? [` ${label} Error: ${job.error}`] : []
173
+ ];
174
+ }
175
+ function formatResolvedSummary(resolved, view) {
176
+ const lines = [
177
+ "Build Configuration:",
178
+ ` Default Provider: ${formatResolvedValue(resolved.defaultProvider)}`,
179
+ ` Default Model: ${formatResolvedValue(resolved.defaultModel)}`,
180
+ ` Default Reasoning Effort: ${view.run.reasoningEffort}`,
181
+ ` planExecute.blockerMode: ${formatResolvedValue(resolved.planExecute.blockerMode)}`,
182
+ ...jobLines("Synthesis", view.synthesis),
183
+ ...jobLines("Splitter", view.splitter),
184
+ "",
185
+ "Judges:"
186
+ ];
187
+ for (const judge of view.judges) {
188
+ lines.push(` ${judge.type}${judge.isDefault ? " (default type)" : ""}:`);
189
+ lines.push(` provider: ${formatShown(judge.provider)}`);
190
+ lines.push(` model: ${formatShown(judge.model)}`);
191
+ lines.push(` reasoning: ${formatEffort(judge.reasoningEffort)}`);
192
+ if (judge.error) lines.push(` error: ${judge.error}`);
193
+ }
194
+ lines.push("", "Provider Models:");
195
+ for (const provider of view.providers) {
196
+ lines.push(` ${provider.id}${provider.installed ? "" : " (CLI not installed)"}:`);
197
+ lines.push(` model: ${formatShown(provider.model)}`);
198
+ lines.push(` reasoningEffort: ${formatEffort(provider.reasoningEffort)}`);
199
+ if (provider.nativeDefaults) {
200
+ lines.push(" Native configured preferences (no execution observed):");
201
+ for (const field of ["model", "reasoningEffort", "serviceTier"]) {
202
+ const value = provider.nativeDefaults[field];
203
+ lines.push(` ${field}: ${value ? formatShown(value) : "unset (native CLI default)"}`);
204
+ }
205
+ for (const limitation of provider.nativeDefaults.limitations ?? [])
206
+ lines.push(` scope: ${limitation}`);
207
+ if (provider.nativeDefaults.unavailablePaths?.length) {
208
+ lines.push(
209
+ ` unavailable settings: ${provider.nativeDefaults.unavailablePaths.join(", ")}`
210
+ );
211
+ }
212
+ }
213
+ lines.push(
214
+ ` fast: ${provider.fastModel ? formatShown(provider.fastModel) : fastFallbackLabel(provider.model.value)}`
215
+ );
216
+ if (provider.judge) {
217
+ lines.push(` judge: ${formatShown(provider.judge.model)}`);
218
+ lines.push(` judge reasoning: ${formatEffort(provider.judge.reasoningEffort)}`);
219
+ }
220
+ if (provider.error) lines.push(` error: ${provider.error}`);
221
+ }
222
+ lines.push(`Registry sources: ${view.registrySources.join(", ") || "none"}`);
223
+ lines.push("", "Ask:", ` build ask: ${view.ask.summary}`);
224
+ const presets = view.ask.presets.map((preset) => `${preset.name} (${preset.source})`);
225
+ lines.push(` presets: ${presets.join(", ") || "none"}`);
226
+ if (view.ask.error) lines.push(` error: ${view.ask.error}`);
227
+ lines.push("");
228
+ return lines.join("\n");
229
+ }
230
+ function printExecutionPreview(resolved, view, write) {
231
+ write(chalk.bold.blue("Execution Preview\n"));
232
+ write(` run.provider: ${chalk.cyan(view.run.provider)}`);
233
+ write(` run.model: ${chalk.cyan(view.run.model)}`);
234
+ write(` run.reasoning: ${chalk.cyan(view.run.reasoningEffort)}`);
235
+ write(` run.transport: ${chalk.cyan(view.run.transport)}`);
236
+ const inherit = view.inheritance;
237
+ write(
238
+ ` instructions.inheritance: ${chalk.cyan(`automated ${inherit.automated}; ask ${inherit.ask}`)}`
239
+ );
240
+ if ("error" in view.compete) {
241
+ write(` compete: ${chalk.yellow(view.compete.error)}`);
242
+ } else {
243
+ const compete = view.compete;
244
+ write(
245
+ ` compete.variants: ${chalk.cyan(compete.variants.join(", "))} ${chalk.gray(`[${compete.sources.variants}]`)}`
246
+ );
247
+ write(
248
+ ` compete.judge: ${chalk.cyan(compete.judge)} ${chalk.gray(`[${compete.sources.judge}]`)}`
249
+ );
250
+ if (compete.judgeRun) {
251
+ write(
252
+ ` compete.judgeRun: ${chalk.cyan(compete.judgeRun)} ${chalk.gray(`[${compete.sources.judgeRun ?? compete.sources.judge}]`)}`
253
+ );
254
+ }
255
+ }
256
+ write(
257
+ ` env.overrides: ${chalk.cyan(view.envOverrides.length > 0 ? view.envOverrides.join(", ") : "none")}`
258
+ );
259
+ write(` git.attribution: ${chalk.cyan(formatResolvedValue(resolved.gitAttribution))}`);
260
+ }
261
+ function src(value) {
262
+ return chalk.gray(`[${value.sourcePath ?? value.source}]`);
263
+ }
264
+ function roleLine(label, value, unset) {
265
+ return value ? ` ${label} ${chalk.cyan(String(value.value))} ${src(value)}` : ` ${label} ${chalk.cyan(unset)}`;
266
+ }
267
+ function printResolvedRoles(roles, write) {
268
+ const { orchestrator, executor, reviewer } = roles;
269
+ write(chalk.bold.blue("\nExecution Roles\n"));
270
+ write(roleLine("roles.orchestrator.provider:", orchestrator.provider, "not set (run provider)"));
271
+ write(roleLine("roles.orchestrator.model: ", orchestrator.model, "not set (run model)"));
272
+ if (orchestrator.fallbackModel) {
273
+ write(roleLine("roles.orchestrator.fallback:", orchestrator.fallbackModel, ""));
274
+ }
275
+ write(roleLine("roles.orchestrator.reasoning:", orchestrator.reasoningEffort, AGENT_DEFAULT));
276
+ write(roleLine("roles.executor.provider: ", executor.provider, ""));
277
+ write(roleLine("roles.executor.model: ", executor.model, ""));
278
+ write(roleLine("roles.executor.subagents:", executor.subagents, ""));
279
+ write(roleLine("roles.executor.transport:", executor.transport, ""));
280
+ write(roleLine("roles.executor.reasoning:", executor.reasoningEffort, AGENT_DEFAULT));
281
+ write(roleLine("roles.reviewer.provider: ", reviewer.provider, ""));
282
+ write(roleLine("roles.reviewer.model: ", reviewer.model, ""));
283
+ write(roleLine("roles.reviewer.reasoning:", reviewer.reasoningEffort, AGENT_DEFAULT));
284
+ write(roleLine("roles.reviewer.policy: ", reviewer.policy, ""));
285
+ write(roleLine("roles.reviewer.gate: ", reviewer.gate, ""));
286
+ write(roleLine("roles.reviewer.threshold:", reviewer.threshold, ""));
287
+ if (reviewer.policyNotice) {
288
+ write(` ${chalk.yellow("Warning:")} ${reviewer.policyNotice}`);
289
+ }
290
+ if (roles.sameVendorReview) {
291
+ write(
292
+ ` ${chalk.yellow("Note:")} reviewer matches an executor provider; executor separation is unavailable`
293
+ );
294
+ }
295
+ }
296
+
297
+ // src/cli/commands/config-set-shadow.ts
298
+ import chalk2 from "chalk";
299
+ var CANONICAL_CONFIG_PATHS = {
300
+ defaultProvider: "defaults.provider"
301
+ };
302
+ function canonicalConfigPath(path) {
303
+ return CANONICAL_CONFIG_PATHS[path] ?? path;
304
+ }
305
+ function readConfigPath(config, path) {
306
+ let current = config;
307
+ for (const segment of path.split(".").filter(Boolean)) {
308
+ if (current === null || typeof current !== "object") return void 0;
309
+ current = current[segment];
310
+ }
311
+ return current;
312
+ }
313
+ async function inspectConfigSetShadow(path, sources) {
314
+ const resolvedPath = canonicalConfigPath(path);
315
+ const effectiveValue = readConfigPath(await sources.loadEffectiveConfig(), resolvedPath);
316
+ const profile = sources.loadProfileLayer();
317
+ if (!profile || readConfigPath(profile.config, resolvedPath) === void 0) {
318
+ return { effectiveValue };
319
+ }
320
+ return { effectiveValue, shadowingProfile: profile.name };
321
+ }
322
+ function buildConfigSetShadowLines(path, shadow, formatValue) {
323
+ if (shadow.effectiveValue === void 0) return void 0;
324
+ const lines = {
325
+ effective: ` Effective: ${formatValue(path, shadow.effectiveValue)}`
326
+ };
327
+ if (shadow.shadowingProfile !== void 0) {
328
+ lines.warning = `Warning: active profile "${shadow.shadowingProfile}" also sets ${path}; profile scope takes precedence over project, so the effective value above is not the project value.`;
329
+ }
330
+ return lines;
331
+ }
332
+ function defaultConfigSetShadowSources(cwd = process.cwd()) {
333
+ return {
334
+ loadEffectiveConfig: async () => {
335
+ try {
336
+ const merged = await new ConfigManager({ cwd }).loadConfig({}, true);
337
+ return merged.config;
338
+ } catch {
339
+ return void 0;
340
+ }
341
+ },
342
+ loadProfileLayer: () => {
343
+ const profile = loadActiveProfile();
344
+ if (!profile) return void 0;
345
+ try {
346
+ return { name: profile.name, config: profileToBuildConfig(profile) };
347
+ } catch {
348
+ return void 0;
349
+ }
350
+ }
351
+ };
352
+ }
353
+ async function printConfigSetShadowNotice(path, formatValue, sources = defaultConfigSetShadowSources()) {
354
+ const shadow = await inspectConfigSetShadow(path, sources);
355
+ const lines = buildConfigSetShadowLines(path, shadow, formatValue);
356
+ if (!lines) return;
357
+ console.log(chalk2.gray(lines.effective));
358
+ if (lines.warning !== void 0) {
359
+ console.log(chalk2.yellow(lines.warning));
360
+ }
361
+ }
362
+
363
+ // src/cli/commands/model-alias-listing.ts
364
+ function projectModelAliases(providerConfig) {
365
+ const record = {};
366
+ if (!providerConfig || typeof providerConfig !== "object") return record;
367
+ const aliases = providerConfig.aliases;
368
+ const models = aliases && typeof aliases === "object" ? aliases.models : null;
369
+ if (!models || typeof models !== "object") return record;
370
+ for (const [key, value] of Object.entries(models)) {
371
+ if (typeof value === "string") record[key] = value;
372
+ }
373
+ return record;
374
+ }
375
+ function projectModelAliasListing(providers, providerFilter) {
376
+ const out = {};
377
+ for (const [providerId, providerConfig] of Object.entries(providers ?? {})) {
378
+ if (providerFilter && providerId.toLowerCase() !== String(providerFilter).toLowerCase()) {
379
+ continue;
380
+ }
381
+ const aliases = projectModelAliases(providerConfig);
382
+ if (Object.keys(aliases).length > 0) out[providerId] = aliases;
383
+ }
384
+ return out;
385
+ }
386
+ function sortedModelAliasListing(listing) {
387
+ return Object.keys(listing).sort().map((providerId) => ({
388
+ providerId,
389
+ models: Object.entries(listing[providerId] ?? {}).sort(([a], [b]) => a.localeCompare(b))
390
+ }));
391
+ }
392
+
393
+ // src/cli/commands/config.ts
394
+ var REDACTED_CONFIG_VALUE = "<redacted>";
395
+ function qualityGateStatus(enabled) {
396
+ return enabled ? chalk3.green("OK") : chalk3.gray("Disabled");
397
+ }
398
+ function isPlainRecord(value) {
399
+ return typeof value === "object" && value !== null && !Array.isArray(value);
400
+ }
401
+ function sanitizeConfigStrings(value) {
402
+ if (typeof value === "string") {
403
+ return sanitizeString(value);
404
+ }
405
+ if (Array.isArray(value)) {
406
+ return value.map((item) => sanitizeConfigStrings(item));
407
+ }
408
+ if (isPlainRecord(value)) {
409
+ const sanitized = {};
410
+ for (const [key, item] of Object.entries(value)) {
411
+ sanitized[key] = sanitizeConfigStrings(item);
412
+ }
413
+ return sanitized;
414
+ }
415
+ return value;
416
+ }
417
+ function redactConfigValueForDisplay(path, value) {
418
+ if (isSensitiveConfigPath(path)) {
419
+ return REDACTED_CONFIG_VALUE;
420
+ }
421
+ return sanitizeConfigStrings(redactSensitiveConfig(value, path.split(".").filter(Boolean)));
422
+ }
423
+ function formatConfigGetValueForDisplay(path, value) {
424
+ const displayValue = redactConfigValueForDisplay(path, value);
425
+ return typeof displayValue === "string" ? displayValue : JSON.stringify(displayValue, null, 2);
426
+ }
427
+ function formatConfigSetValueForDisplay(path, value) {
428
+ if (isSensitiveConfigPath(path)) {
429
+ return "<redacted>";
430
+ }
431
+ const displayValue = redactConfigValueForDisplay(path, value);
432
+ return typeof displayValue === "string" ? displayValue : JSON.stringify(displayValue);
433
+ }
434
+ function buildConfigGetJsonPayload(path, scope, value) {
435
+ const found = value !== void 0;
436
+ return {
437
+ path,
438
+ scope,
439
+ found,
440
+ value: found ? redactConfigValueForDisplay(path, value) : null
441
+ };
442
+ }
443
+ function buildConfigScopeMissLines(path, scope, alternateScopeValue) {
444
+ const lines = [`${path} is not set (scope: ${scope})`];
445
+ if (alternateScopeValue !== void 0) {
446
+ const alternateScope = scope === "project" ? "user" : "project";
447
+ const retryHint = alternateScope === "user" ? "build config get --scope user" : "build config get";
448
+ lines.push(
449
+ ` Tip: value is set in ${alternateScope} scope; retry with \`${retryHint} ${path}\` or use \`build config resolved\` for the effective value.`
450
+ );
451
+ }
452
+ return lines;
453
+ }
454
+ async function printConfigScopeMiss(path, scope, getConfigValue) {
455
+ const alternateScope = scope === "project" ? "user" : "project";
456
+ const alternateScopeValue = await getConfigValue(path, alternateScope);
457
+ for (const line of buildConfigScopeMissLines(path, scope, alternateScopeValue)) {
458
+ console.log(chalk3.yellow(line));
459
+ }
460
+ }
461
+ function formatResolvedConfigSummaryLine(summary) {
462
+ return ` ${chalk3.cyan(summary.provider)} \xB7 ${chalk3.cyan(summary.model)} \xB7 blockers:${chalk3.cyan(summary.blockerMode)} \xB7 transport:${chalk3.cyan(summary.transport)} \xB7 judge:${chalk3.cyan(summary.judge.type)}`;
463
+ }
464
+ function errorMessage(error) {
465
+ return sanitizeValue(error);
466
+ }
467
+ function configReadRepairHint(error) {
468
+ return `Fix or remove ${error.filePath}; Build will not ignore an existing invalid config file.`;
469
+ }
470
+ function renderConfigReadFailure(error, json = false) {
471
+ if (!isBuildConfigReadError(error)) return false;
472
+ const repairHint = configReadRepairHint(error);
473
+ if (json) {
474
+ renderJsonError(
475
+ new ValidationError(error.message, {
476
+ code: error.code,
477
+ filePath: error.filePath,
478
+ reason: error.reason,
479
+ diagnostics: error.diagnostics,
480
+ repairHint
481
+ })
482
+ );
483
+ return true;
484
+ }
485
+ writeConfigError(chalk3.red(`Error: ${error.message}`));
486
+ writeConfigError(chalk3.gray(repairHint));
487
+ return true;
488
+ }
489
+ function writeConfigLine(line = "") {
490
+ process.stdout.write(`${line}
491
+ `);
492
+ }
493
+ function writeConfigError(line) {
494
+ process.stderr.write(`${line}
495
+ `);
496
+ }
497
+ async function buildResolvedExecutorModelQuery(provider, cwd) {
498
+ const { prepareModelSelectionCatalog } = await import("./model-catalog-readiness-R5KJBP5M.js");
499
+ await prepareModelSelectionCatalog({ providerId: provider, projectRoot: cwd, coldStart: true });
500
+ const { triggerOpportunisticModelRefresh } = await import("./opportunistic-TL4S26VX.js");
501
+ triggerOpportunisticModelRefresh({
502
+ projectRoot: cwd,
503
+ entryPath: process.argv[1] ?? "",
504
+ command: "config",
505
+ args: process.argv.slice(2)
506
+ });
507
+ const executor = resolveExecutorRoleTarget({
508
+ cwd,
509
+ providerOverride: provider
510
+ });
511
+ const providerModule = registry.get(provider);
512
+ const bridge = providerModule?.resolveModelSelection;
513
+ const selection = bridge ? await bridge({ modelInput: executor.model.value }) : {
514
+ modelInput: executor.model.value,
515
+ effectiveModel: executor.model.value,
516
+ nativeDefault: null,
517
+ emitModelArg: null,
518
+ emittedModel: null,
519
+ cliVersion: null,
520
+ discoveryStatus: "unsupported",
521
+ availableModels: [],
522
+ selectedModelAvailable: null
523
+ };
524
+ return {
525
+ schemaVersion: 1,
526
+ role: "executor",
527
+ provider: executor.provider,
528
+ model: {
529
+ input: selection.modelInput,
530
+ effective: selection.effectiveModel,
531
+ source: executor.model.source,
532
+ ...executor.model.sourcePath ? { sourcePath: executor.model.sourcePath } : {},
533
+ ...executor.modelRole ? { modelRole: executor.modelRole } : {},
534
+ nativeDefault: selection.nativeDefault,
535
+ emitModelArg: selection.emitModelArg,
536
+ emittedModel: selection.emittedModel,
537
+ cliVersion: selection.cliVersion,
538
+ discoveryStatus: selection.discoveryStatus,
539
+ bridgeStatus: bridge ? "supported" : "unsupported",
540
+ availableModels: selection.availableModels,
541
+ selectedModelAvailable: selection.selectedModelAvailable
542
+ },
543
+ reasoningEffort: executor.reasoningEffort ?? null
544
+ };
545
+ }
546
+ function printExplainRow(result) {
547
+ const parts = [
548
+ chalk3.cyan(result.name),
549
+ result.type,
550
+ `default=${result.default !== void 0 ? String(result.default) : "(none)"}`,
551
+ `source=${result.source}`,
552
+ `category=${result.category}`
553
+ ];
554
+ if (result.status === "deprecated") {
555
+ parts.push(chalk3.yellow(`deprecated${result.replacement ? `->${result.replacement}` : ""}`));
556
+ }
557
+ if (result.error !== void 0) {
558
+ parts.push(chalk3.red(`error: ${result.error}`));
559
+ }
560
+ console.log(parts.join(" "));
561
+ }
562
+ function createConfigCommand() {
563
+ const configCommand = new Command("config").alias("settings").description("Manage Build configuration and preferences");
564
+ const ShowOptionsSchema = z.object({
565
+ verbose: BooleanFlagSchema.optional(),
566
+ json: BooleanFlagSchema.optional()
567
+ }).strict();
568
+ const ValidateOptionsSchema = z.object({
569
+ fix: BooleanFlagSchema.optional(),
570
+ verbose: BooleanFlagSchema.optional(),
571
+ json: BooleanFlagSchema.optional()
572
+ }).strict();
573
+ const DiagnoseOptionsSchema = z.object({
574
+ fix: BooleanFlagSchema.optional()
575
+ }).strict();
576
+ const ResetOptionsSchema = z.object({
577
+ level: z.enum(["user", "project", "all"]).optional().default("project"),
578
+ backup: BooleanFlagSchema.optional()
579
+ }).strict();
580
+ const ExportOptionsSchema = z.object({
581
+ output: FilePathSchema.optional().default("build-config-export.json"),
582
+ includePreferences: BooleanFlagSchema.optional()
583
+ }).strict();
584
+ const ImportOptionsSchema = z.object({
585
+ importPreferences: BooleanFlagSchema.optional()
586
+ }).strict();
587
+ configCommand.command("show").description("Display current configuration with source information").option("-v, --verbose", "Show detailed configuration with sources").option("-j, --json", "Output configuration as JSON").action(async (options) => {
588
+ try {
589
+ const validatedOptions = validateCommandOptions(ShowOptionsSchema, options);
590
+ options = validatedOptions;
591
+ } catch (error) {
592
+ if (error instanceof z.ZodError) {
593
+ console.error(chalk3.red("\nError: Invalid command options:"));
594
+ console.error(formatValidationErrors(error));
595
+ console.error(
596
+ chalk3.gray('\nTip: Use "build config <subcommand> --help" for valid options')
597
+ );
598
+ throw new ExitCodeError(1);
599
+ }
600
+ throw error;
601
+ }
602
+ const configManager = new ConfigManager();
603
+ try {
604
+ const config = await configManager.loadConfig();
605
+ const resolved = configManager.resolveExecutionConfig();
606
+ if (options.json) {
607
+ renderJsonResult(
608
+ redactConfigValueForDisplay("", {
609
+ config: config.config,
610
+ resolved,
611
+ sources: config.sources,
612
+ isFirstTimeUser: config.isFirstTimeUser,
613
+ loadTime: config.loadTime
614
+ })
615
+ );
616
+ return;
617
+ }
618
+ console.log(chalk3.bold.blue("\nBuild Configuration\n"));
619
+ console.log(chalk3.bold("Effective Settings:"));
620
+ console.log(` Default Provider: ${chalk3.cyan(resolved.defaultProvider.value)}`);
621
+ console.log(` Default Model: ${chalk3.cyan(resolved.defaultModel.value)}`);
622
+ console.log(` First-time User: ${chalk3.cyan(config.isFirstTimeUser ? "Yes" : "No")}`);
623
+ console.log(` Load Time: ${chalk3.gray(`${config.loadTime}ms`)}`);
624
+ console.log();
625
+ const enabledProviders = ProviderRegistry.getEnabledProviders();
626
+ if (enabledProviders.length > 0) {
627
+ console.log(chalk3.bold("Provider Configuration:"));
628
+ for (const provider of enabledProviders) {
629
+ const model = resolved.providerModels[provider.id]?.value ?? provider.models.default;
630
+ console.log(` ${provider.id}: ${chalk3.cyan(String(model))}`);
631
+ }
632
+ console.log();
633
+ }
634
+ if (options.verbose) {
635
+ console.log(chalk3.bold("Configuration Sources (by priority):"));
636
+ for (const source of config.sources.sort((a, b) => b.priority - a.priority)) {
637
+ const status = source.data ? chalk3.green("OK") : chalk3.red("Error");
638
+ console.log(` ${status} ${source.type} (priority: ${source.priority})`);
639
+ if (source.path) {
640
+ console.log(` Path: ${chalk3.gray(source.path)}`);
641
+ }
642
+ }
643
+ console.log();
644
+ }
645
+ if (config.config.quality) {
646
+ console.log(chalk3.bold("Quality Gates:"));
647
+ const quality = config.config.quality;
648
+ if (quality.coverage) {
649
+ console.log(
650
+ ` ${qualityGateStatus(quality.coverage.enabled)} Coverage: ${chalk3.cyan(
651
+ `${quality.coverage.threshold}%`
652
+ )}`
653
+ );
654
+ }
655
+ if (quality.lint) {
656
+ console.log(` ${qualityGateStatus(quality.lint.enabled)} Linting`);
657
+ }
658
+ if (quality.security) {
659
+ console.log(` ${qualityGateStatus(quality.security.enabled)} Security`);
660
+ }
661
+ console.log();
662
+ }
663
+ } catch (error) {
664
+ if (error instanceof ExitCodeError) throw error;
665
+ if (renderConfigReadFailure(error, Boolean(options.json))) throw new ExitCodeError(1);
666
+ console.error(chalk3.red("Error loading configuration:"), errorMessage(error));
667
+ throw new ExitCodeError(1);
668
+ }
669
+ });
670
+ configCommand.command("list").description("List all configuration values").option("-j, --json", "Output configuration as JSON").action(async (options) => {
671
+ try {
672
+ const configManager = new ConfigManager();
673
+ const config = await configManager.loadConfig();
674
+ const resolved = configManager.resolveExecutionConfig();
675
+ if (options.json) {
676
+ renderJsonResult(
677
+ redactConfigValueForDisplay("", {
678
+ config: config.config,
679
+ resolved,
680
+ sources: config.sources
681
+ })
682
+ );
683
+ return;
684
+ }
685
+ console.log(chalk3.bold.blue("\nConfiguration Values\n"));
686
+ const configData = config.config;
687
+ console.log(`Default Provider: ${chalk3.cyan(resolved.defaultProvider.value)}`);
688
+ console.log(`Effective Model: ${chalk3.cyan(resolved.defaultModel.value)}`);
689
+ const enabledProviders = ProviderRegistry.getEnabledProviders();
690
+ if (enabledProviders.length > 0) {
691
+ console.log("\nProviders:");
692
+ for (const provider of enabledProviders) {
693
+ const model = resolved.providerModels[provider.id]?.value ?? provider.models.default;
694
+ console.log(` ${provider.id}: ${chalk3.cyan(String(model))}`);
695
+ }
696
+ }
697
+ if (configData.quality) {
698
+ console.log("\nQuality Gates:");
699
+ const quality = configData.quality;
700
+ if (quality.coverage) {
701
+ console.log(
702
+ ` ${qualityGateStatus(quality.coverage.enabled)} Coverage: ${chalk3.cyan(
703
+ `${quality.coverage.threshold}%`
704
+ )}`
705
+ );
706
+ }
707
+ if (quality.lint) {
708
+ console.log(` ${qualityGateStatus(quality.lint.enabled)} Linting`);
709
+ }
710
+ if (quality.security) {
711
+ console.log(` ${qualityGateStatus(quality.security.enabled)} Security`);
712
+ }
713
+ }
714
+ console.log("\nConfiguration Sources:");
715
+ for (const source of config.sources.filter((s) => s.data).sort((a, b) => b.priority - a.priority)) {
716
+ const status = source.data ? chalk3.green("OK") : chalk3.red("Error");
717
+ console.log(` ${status} ${source.type} (priority: ${source.priority})`);
718
+ }
719
+ console.log();
720
+ } catch (error) {
721
+ if (error instanceof ExitCodeError) throw error;
722
+ if (renderConfigReadFailure(error, Boolean(options.json))) throw new ExitCodeError(1);
723
+ console.error(chalk3.red("Error listing configuration:"), errorMessage(error));
724
+ throw new ExitCodeError(1);
725
+ }
726
+ });
727
+ configCommand.command("validate").description("Validate configuration files and report issues").option("--fix", "Attempt to auto-fix fixable issues").option("-v, --verbose", "Show detailed validation information").option("-j, --json", "Output validation result as JSON").action(async (options) => {
728
+ const wantsJson = Boolean(options.json);
729
+ try {
730
+ const validatedOptions = validateCommandOptions(ValidateOptionsSchema, options);
731
+ options = validatedOptions;
732
+ } catch (error) {
733
+ if (error instanceof z.ZodError) {
734
+ if (wantsJson) {
735
+ renderJsonError(
736
+ new ValidationError("Invalid command options", {
737
+ details: formatValidationErrors(error)
738
+ })
739
+ );
740
+ throw new ExitCodeError(1);
741
+ }
742
+ console.error(chalk3.red("\nError: Invalid command options:"));
743
+ console.error(formatValidationErrors(error));
744
+ console.error(
745
+ chalk3.gray('\nTip: Use "build config <subcommand> --help" for valid options')
746
+ );
747
+ throw new ExitCodeError(1);
748
+ }
749
+ throw error;
750
+ }
751
+ const configManager = new ConfigManager();
752
+ try {
753
+ const config = await configManager.loadConfig().catch((error) => {
754
+ if (options.fix && error instanceof InvalidConfigContentError) {
755
+ return loadUnvalidatedConfig();
756
+ }
757
+ throw error;
758
+ });
759
+ const validation = validateBuildConfig(config.config, {
760
+ includeWarnings: true,
761
+ includeSuggestions: true,
762
+ cwd: process.cwd(),
763
+ // Raw layers: a configured model is only checkable against the provider
764
+ // its own layer declares, which the merged tree no longer shows.
765
+ layers: config.sources.map((source) => ({
766
+ label: source.path ?? source.type,
767
+ config: source.data
768
+ }))
769
+ });
770
+ let providerRegistryError;
771
+ try {
772
+ ProviderRegistry.reload();
773
+ ProviderRegistry.load();
774
+ providerRegistryError = ProviderRegistry.describeIgnoredUserModelEntries();
775
+ } catch (error) {
776
+ providerRegistryError = errorMessage(error);
777
+ }
778
+ const jsonPayload = {
779
+ isValid: validation.isValid && !providerRegistryError,
780
+ validation,
781
+ providerRegistryError: providerRegistryError ?? null
782
+ };
783
+ if (options.fix && !validation.isValid) {
784
+ const { autoFixConfig: autoFixConfig2 } = await import("./config-validator-H4ZVIE56.js");
785
+ const fixResult = autoFixConfig2(config.config);
786
+ const repair = resolveProjectConfigRepair(
787
+ fixResult.edits,
788
+ await configManager.loadProjectConfig()
789
+ );
790
+ const saveResult = repair.edits.length > 0 ? await configManager.applyProjectConfigFixes(repair.edits) : { success: true, error: void 0 };
791
+ jsonPayload.fix = {
792
+ changes: repair.applied,
793
+ unresolved: repair.unresolved,
794
+ remainingErrors: fixResult.remainingErrors,
795
+ saved: saveResult.success,
796
+ saveError: saveResult.success ? null : saveResult.error
797
+ };
798
+ if (!options.json) {
799
+ console.log(chalk3.bold.yellow("\nAttempting to auto-fix issues..."));
800
+ if (repair.applied.length > 0) {
801
+ console.log(chalk3.green("Fixed issues:"));
802
+ repair.applied.forEach((change) => {
803
+ console.log(` OK ${change}`);
804
+ });
805
+ if (saveResult.success) {
806
+ console.log(chalk3.green("\nOK: Configuration saved successfully."));
807
+ } else {
808
+ console.log(
809
+ chalk3.red(`
810
+ Error: Failed to save configuration: ${saveResult.error}`)
811
+ );
812
+ }
813
+ }
814
+ if (fixResult.remainingErrors.length > 0 || repair.unresolved.length > 0) {
815
+ console.log(chalk3.yellow("\nRemaining issues that require manual fix:"));
816
+ fixResult.remainingErrors.forEach((error) => {
817
+ console.log(
818
+ ` Warning: ${sanitizeString(error.path.join("."))}: ${sanitizeString(error.message)}`
819
+ );
820
+ });
821
+ repair.unresolved.forEach((issue) => {
822
+ console.log(` Warning: ${sanitizeString(issue)}`);
823
+ });
824
+ }
825
+ }
826
+ }
827
+ if (options.json) {
828
+ renderJsonResult(jsonPayload);
829
+ if (!validation.isValid || providerRegistryError) {
830
+ throw new ExitCodeError(1);
831
+ }
832
+ return;
833
+ }
834
+ console.log(chalk3.bold.blue("\nConfiguration Validation\n"));
835
+ const report = generateValidationReport(validation);
836
+ console.log(report);
837
+ if (providerRegistryError) {
838
+ console.log(chalk3.red("\nProvider registry: invalid"));
839
+ console.log(chalk3.red(` Error: ${providerRegistryError}`));
840
+ }
841
+ if (!validation.isValid || providerRegistryError) {
842
+ throw new ExitCodeError(1);
843
+ }
844
+ } catch (error) {
845
+ if (error instanceof ExitCodeError) throw error;
846
+ if (renderConfigReadFailure(error, Boolean(options.json))) throw new ExitCodeError(1);
847
+ if (options.json) {
848
+ renderJsonError(error);
849
+ throw new ExitCodeError(1);
850
+ }
851
+ console.error(chalk3.red("Error validating configuration:"), errorMessage(error));
852
+ throw new ExitCodeError(1);
853
+ }
854
+ });
855
+ configCommand.command("diagnose").description("Run comprehensive diagnostics on configuration system").option("--fix", "Attempt to fix detected issues").action(async (options) => {
856
+ try {
857
+ const validatedOptions = validateCommandOptions(DiagnoseOptionsSchema, options);
858
+ options = validatedOptions;
859
+ } catch (error) {
860
+ if (error instanceof z.ZodError) {
861
+ console.error(chalk3.red("\nError: Invalid command options:"));
862
+ console.error(formatValidationErrors(error));
863
+ console.error(
864
+ chalk3.gray('\nTip: Use "build config <subcommand> --help" for valid options')
865
+ );
866
+ throw new ExitCodeError(1);
867
+ }
868
+ throw error;
869
+ }
870
+ try {
871
+ console.log(chalk3.bold.blue("\nConfiguration Diagnostics\n"));
872
+ const configManager = new ConfigManager();
873
+ const diagnostics = await configManager.getDiagnostics();
874
+ console.log(chalk3.bold("Configuration Paths:"));
875
+ for (const [name, info] of Object.entries(diagnostics.paths)) {
876
+ const status = info.exists ? chalk3.green("OK") : chalk3.red("Error");
877
+ let writable = "";
878
+ if (info.writable !== void 0) {
879
+ writable = info.writable ? chalk3.green("(writable)") : chalk3.red("(read-only)");
880
+ }
881
+ console.log(
882
+ ` ${status} ${name}: ${chalk3.gray(info.exists ? "exists" : "missing")} ${writable}`
883
+ );
884
+ }
885
+ console.log();
886
+ console.log(chalk3.bold("Configuration Cache:"));
887
+ console.log(` Enabled: ${chalk3.cyan(diagnostics.cache.enabled ? "Yes" : "No")}`);
888
+ console.log(` Size: ${chalk3.cyan(diagnostics.cache.size)} entries`);
889
+ if (diagnostics.cache.entries.length > 0) {
890
+ console.log(" Recent entries:");
891
+ diagnostics.cache.entries.slice(0, 5).forEach((entry) => {
892
+ console.log(` ${chalk3.gray(entry.key)} (${chalk3.cyan(`${entry.age}ms ago`)})`);
893
+ });
894
+ }
895
+ console.log();
896
+ console.log(chalk3.bold("Configuration Validation:"));
897
+ if (diagnostics.validation.isValid) {
898
+ console.log(chalk3.green(" OK Configuration is valid"));
899
+ } else {
900
+ console.log(chalk3.red(" Error Configuration has issues"));
901
+ console.log(` Errors: ${chalk3.red(diagnostics.validation.errors.length)}`);
902
+ console.log(` Warnings: ${chalk3.yellow(diagnostics.validation.warnings.length)}`);
903
+ }
904
+ console.log();
905
+ console.log(chalk3.bold("Performance Metrics:"));
906
+ console.log(
907
+ ` Average Load Time: ${chalk3.cyan(`${diagnostics.performance.avgLoadTime}ms`)}`
908
+ );
909
+ console.log(` Cache Hit Rate: ${chalk3.cyan(`${diagnostics.performance.cacheHitRate}%`)}`);
910
+ console.log();
911
+ const systemDiagnostics = await getConfigDiagnostics();
912
+ console.log(chalk3.bold("Source Loading:"));
913
+ console.log(` Load Time: ${chalk3.cyan(`${systemDiagnostics.loadTime}ms`)}`);
914
+ console.log(` Sources Found: ${chalk3.cyan(systemDiagnostics.summary.loadedSources)}`);
915
+ console.log(` Valid Sources: ${chalk3.cyan(systemDiagnostics.summary.validSources)}`);
916
+ console.log();
917
+ if (options.fix) {
918
+ console.log(chalk3.bold.yellow("Attempting to auto-fix configuration issues..."));
919
+ const configManager2 = new ConfigManager();
920
+ const config = await configManager2.loadConfig();
921
+ const { autoFixConfig: autoFixConfig2 } = await import("./config-validator-H4ZVIE56.js");
922
+ const fixResult = autoFixConfig2(config.config);
923
+ const repair = resolveProjectConfigRepair(
924
+ fixResult.edits,
925
+ await configManager2.loadProjectConfig()
926
+ );
927
+ if (repair.applied.length > 0) {
928
+ console.log(chalk3.green("Fixed issues:"));
929
+ repair.applied.forEach((change) => {
930
+ console.log(` OK ${change}`);
931
+ });
932
+ const saveResult = await configManager2.applyProjectConfigFixes(repair.edits);
933
+ if (saveResult.success) {
934
+ console.log(chalk3.green("\nOK: Configuration saved successfully."));
935
+ } else {
936
+ console.log(chalk3.red(`
937
+ Error: Failed to save configuration: ${saveResult.error}`));
938
+ }
939
+ } else {
940
+ console.log(chalk3.gray("No auto-fixable issues detected."));
941
+ }
942
+ if (fixResult.remainingErrors.length > 0 || repair.unresolved.length > 0) {
943
+ console.log(chalk3.yellow("\nRemaining issues that require manual fix:"));
944
+ fixResult.remainingErrors.forEach((error) => {
945
+ console.log(
946
+ ` Warning: ${sanitizeString(error.path.join("."))}: ${sanitizeString(error.message)}`
947
+ );
948
+ });
949
+ repair.unresolved.forEach((issue) => {
950
+ console.log(` Warning: ${sanitizeString(issue)}`);
951
+ });
952
+ }
953
+ }
954
+ } catch (error) {
955
+ if (error instanceof ExitCodeError) throw error;
956
+ if (renderConfigReadFailure(error)) throw new ExitCodeError(1);
957
+ console.error(chalk3.red("Error running diagnostics:"), errorMessage(error));
958
+ throw new ExitCodeError(1);
959
+ }
960
+ });
961
+ configCommand.command("reset").description("Reset configuration to defaults").option("--level <level>", "Reset level: user, project, or all", "project").option("--backup", "Create backup before resetting").action(async (options) => {
962
+ try {
963
+ const validatedOptions = validateCommandOptions(ResetOptionsSchema, options);
964
+ options = validatedOptions;
965
+ } catch (error) {
966
+ if (error instanceof z.ZodError) {
967
+ console.error(chalk3.red("\nError: Invalid command options:"));
968
+ console.error(formatValidationErrors(error));
969
+ console.error(
970
+ chalk3.gray('\nTip: Use "build config <subcommand> --help" for valid options')
971
+ );
972
+ throw new ExitCodeError(1);
973
+ }
974
+ throw error;
975
+ }
976
+ const configManager = new ConfigManager();
977
+ try {
978
+ console.log(chalk3.bold.yellow(`
979
+ Resetting configuration (level: ${options.level})
980
+ `));
981
+ if (options.backup) {
982
+ const backup = redactConfigValueForDisplay("", await configManager.exportConfig(true));
983
+ const backupPath = `build-config-backup-${Date.now()}.json`;
984
+ writeFileSync(backupPath, JSON.stringify(backup, null, 2));
985
+ console.log(chalk3.green(`OK Backup created: ${backupPath}`));
986
+ }
987
+ const result = await configManager.resetToDefaults(
988
+ options.level
989
+ );
990
+ if (result.success) {
991
+ console.log(chalk3.green("OK: Configuration reset successfully."));
992
+ console.log(chalk3.gray('\nRun "build init" to reconfigure with optimal defaults.'));
993
+ } else {
994
+ console.log(chalk3.red(`Error: Failed to reset configuration: ${result.error}`));
995
+ throw new ExitCodeError(1);
996
+ }
997
+ } catch (error) {
998
+ if (error instanceof ExitCodeError) throw error;
999
+ console.error(chalk3.red("Error resetting configuration:"), errorMessage(error));
1000
+ throw new ExitCodeError(1);
1001
+ }
1002
+ });
1003
+ configCommand.command("export").description("Export configuration to file").option("-o, --output <file>", "Output file path", "build-config-export.json").option("--include-preferences", "Include user preferences in export").action(async (options) => {
1004
+ try {
1005
+ const validatedOptions = validateCommandOptions(ExportOptionsSchema, options);
1006
+ options = validatedOptions;
1007
+ } catch (error) {
1008
+ if (error instanceof z.ZodError) {
1009
+ console.error(chalk3.red("\nError: Invalid command options:"));
1010
+ console.error(formatValidationErrors(error));
1011
+ console.error(
1012
+ chalk3.gray('\nTip: Use "build config <subcommand> --help" for valid options')
1013
+ );
1014
+ throw new ExitCodeError(1);
1015
+ }
1016
+ throw error;
1017
+ }
1018
+ const configManager = new ConfigManager();
1019
+ try {
1020
+ const exportData = redactConfigValueForDisplay(
1021
+ "",
1022
+ await configManager.exportConfig(options.includePreferences)
1023
+ );
1024
+ writeFileSync(options.output, JSON.stringify(exportData, null, 2));
1025
+ console.log(chalk3.bold.green(`
1026
+ OK: Configuration exported to: ${options.output}`));
1027
+ console.log(chalk3.gray(` Exported at: ${exportData.metadata.exportedAt}`));
1028
+ console.log(chalk3.gray(` Version: ${exportData.metadata.version}`));
1029
+ if (options.includePreferences) {
1030
+ console.log(chalk3.gray(" User preferences: included"));
1031
+ }
1032
+ } catch (error) {
1033
+ if (error instanceof ExitCodeError) throw error;
1034
+ if (renderConfigReadFailure(error)) throw new ExitCodeError(1);
1035
+ console.error(chalk3.red("Error exporting configuration:"), errorMessage(error));
1036
+ throw new ExitCodeError(1);
1037
+ }
1038
+ });
1039
+ configCommand.command("import").description("Import configuration from file").argument("<file>", "Configuration file to import").option("--import-preferences", "Import user preferences from file").action(async (file, options) => {
1040
+ try {
1041
+ validateCommandOptions(ExistingFilePathSchema, file);
1042
+ const validatedOptions = validateCommandOptions(ImportOptionsSchema, options);
1043
+ options = validatedOptions;
1044
+ } catch (error) {
1045
+ if (error instanceof z.ZodError) {
1046
+ console.error(chalk3.red("\nError: Invalid command options:"));
1047
+ console.error(formatValidationErrors(error));
1048
+ console.error(
1049
+ chalk3.gray('\nTip: Use "build config <subcommand> --help" for valid options')
1050
+ );
1051
+ throw new ExitCodeError(1);
1052
+ }
1053
+ throw error;
1054
+ }
1055
+ const configManager = new ConfigManager();
1056
+ try {
1057
+ if (!existsSync(file)) {
1058
+ console.error(chalk3.red(`Configuration file not found: ${file}`));
1059
+ throw new ExitCodeError(1);
1060
+ }
1061
+ const importData = parseJsonWithContext(
1062
+ readFileSync(file, "utf8"),
1063
+ `Config import (${file})`
1064
+ );
1065
+ const result = await configManager.importConfig(
1066
+ importData,
1067
+ options.importPreferences
1068
+ );
1069
+ if (result.success) {
1070
+ console.log(chalk3.bold.green(`
1071
+ OK: Configuration imported from: ${file}`));
1072
+ console.log(chalk3.gray("Configuration has been successfully applied."));
1073
+ } else {
1074
+ console.log(chalk3.red(`Error: Failed to import configuration: ${result.error}`));
1075
+ throw new ExitCodeError(1);
1076
+ }
1077
+ } catch (error) {
1078
+ if (error instanceof ExitCodeError) throw error;
1079
+ console.error(chalk3.red("Error importing configuration:"), errorMessage(error));
1080
+ throw new ExitCodeError(1);
1081
+ }
1082
+ });
1083
+ configCommand.command("precedence").description("Display configuration precedence order and current values").action(async () => {
1084
+ const configManager = new ConfigManager();
1085
+ try {
1086
+ const config = await configManager.loadConfig();
1087
+ const resolved = configManager.resolveExecutionConfig();
1088
+ console.log(chalk3.bold.blue("\nConfiguration Precedence\n"));
1089
+ console.log(chalk3.gray("Priority (highest to lowest):"));
1090
+ console.log(chalk3.gray(" 1. CLI flags (--model, --provider, etc.)"));
1091
+ console.log(
1092
+ chalk3.gray(
1093
+ " 2. Environment variables (BUILD_DEFAULT_PROVIDER, BUILD_<PROVIDER>_DEFAULT_MODEL, etc.)"
1094
+ )
1095
+ );
1096
+ console.log(
1097
+ chalk3.gray(` 3. Active profile (${join(getUserConfigDir(), "profiles", "<name>.json")})`)
1098
+ );
1099
+ console.log(chalk3.gray(" 4. Project config (.build-project/config/build.config.jsonc)"));
1100
+ console.log(chalk3.gray(` 5. User config (${getUserConfigFile()})`));
1101
+ console.log(chalk3.gray(" 6. Registry defaults (.build-project/config/providers.yaml)"));
1102
+ console.log(chalk3.gray(" 7. Hardcoded fallback"));
1103
+ console.log();
1104
+ console.log(chalk3.bold("Current Source Values:"));
1105
+ for (const source of sourcesForPrecedence(config.sources, resolved)) {
1106
+ if (source.data && source.type !== "default") {
1107
+ console.log(chalk3.cyan(`${source.type.toUpperCase()} (priority: ${source.priority}):`));
1108
+ const configData = source.data;
1109
+ if (configData.defaults?.provider || configData.defaultProvider) {
1110
+ console.log(
1111
+ ` Default Provider: ${configData.defaults?.provider ?? configData.defaultProvider}`
1112
+ );
1113
+ }
1114
+ for (const [provider, model] of listSourceProviderModels(source, resolved)) {
1115
+ console.log(` ${provider} Model: ${model}`);
1116
+ }
1117
+ console.log();
1118
+ }
1119
+ }
1120
+ console.log(chalk3.bold("Final Resolved Configuration:"));
1121
+ console.log(` Default Provider: ${chalk3.cyan(resolved.defaultProvider.value)}`);
1122
+ console.log(` Effective Model: ${chalk3.cyan(resolved.defaultModel.value)}`);
1123
+ } catch (error) {
1124
+ if (error instanceof ExitCodeError) throw error;
1125
+ if (renderConfigReadFailure(error)) throw new ExitCodeError(1);
1126
+ console.error(chalk3.red("Error showing precedence:"), errorMessage(error));
1127
+ throw new ExitCodeError(1);
1128
+ }
1129
+ });
1130
+ const aliasesCommand = new Command("aliases").description(
1131
+ 'Manage user model aliases (stored in user config)\n\nExamples:\n build config aliases list\n build config aliases list --provider opencode\n build provider alias set opencode fast "openrouter/provider/model-name"'
1132
+ );
1133
+ aliasesCommand.command("list").description("List user model aliases (provider-scoped)").option("-p, --provider <provider>", "Filter to a single provider (e.g., opencode)").option("-j, --json", "Output as JSON").action(async (options) => {
1134
+ try {
1135
+ const configManager = new ConfigManager();
1136
+ const providers = await configManager.getConfigValue("providers", "user");
1137
+ const out = projectModelAliasListing(providers, options.provider);
1138
+ if (options.json) {
1139
+ console.log(JSON.stringify(out, null, 2));
1140
+ return;
1141
+ }
1142
+ const providersWithAliases = sortedModelAliasListing(out);
1143
+ if (providersWithAliases.length === 0) {
1144
+ console.log(chalk3.yellow("No user model aliases found."));
1145
+ console.log(
1146
+ chalk3.gray(
1147
+ 'Tip: Use "build provider alias set <provider> <alias> <model>" or "build config set --scope user providers.<provider>.aliases.models.<alias> <model>".'
1148
+ )
1149
+ );
1150
+ return;
1151
+ }
1152
+ for (const { providerId, models } of providersWithAliases) {
1153
+ console.log(chalk3.bold(`${providerId}:`));
1154
+ for (const [aliasKey, modelId] of models) {
1155
+ console.log(` ${chalk3.cyan(aliasKey)} -> ${chalk3.gray(modelId)}`);
1156
+ }
1157
+ }
1158
+ } catch (error) {
1159
+ if (error instanceof ExitCodeError) throw error;
1160
+ console.error(chalk3.red("Error listing aliases:"), errorMessage(error));
1161
+ throw new ExitCodeError(1);
1162
+ }
1163
+ });
1164
+ configCommand.addCommand(aliasesCommand);
1165
+ configCommand.command("resolved").description("Show resolved configuration with source attribution").option("-j, --json", "Output as JSON").option("-p, --provider <provider>", "Show resolved model for specific provider").option("--role <role>", "Show a role-scoped model decision (currently: executor)").option("--summary", "Output compact planning-critical fields only").option("--compete", "Show compete defaults with source attribution per tier").option("--optimization", "Show fast/best/cheap optimization recipes and provider availability").action(async (options) => {
1166
+ enterReadOnlyProviderOrderView();
1167
+ try {
1168
+ if (options.role && (options.summary || options.compete || options.optimization)) {
1169
+ writeConfigError(
1170
+ chalk3.red(
1171
+ "Error: --role cannot be combined with --summary, --compete, or --optimization"
1172
+ )
1173
+ );
1174
+ throw new ExitCodeError(1);
1175
+ }
1176
+ if (options.optimization) {
1177
+ const { resolveOptimizationConfig, summarizeOptimizationConfig } = await import("./optimization-config-resolver-NAEIYU6A.js");
1178
+ const resolved2 = await resolveOptimizationConfig(process.cwd());
1179
+ const summary = summarizeOptimizationConfig(resolved2, resolveDefaultProvider().value);
1180
+ if (options.json) {
1181
+ console.log(JSON.stringify(redactConfigValueForDisplay("", summary), null, 2));
1182
+ return;
1183
+ }
1184
+ console.log(chalk3.bold.blue("\nOptimization recipes (resolved):\n"));
1185
+ console.log(` Source: ${chalk3.cyan(summary.source)}`);
1186
+ console.log(
1187
+ ` Available: ${chalk3.cyan(summary.availableProviders.join(", ") || "(none)")}`
1188
+ );
1189
+ if (summary.unavailableProviders.length > 0) {
1190
+ console.log(` Unavailable: ${chalk3.gray(summary.unavailableProviders.join(", "))}`);
1191
+ }
1192
+ const formatOrder = ({ providers, source }) => {
1193
+ if (source === "provider that did the work") return `${source} (fast model)`;
1194
+ const list = providers.join(", ") || "(none available)";
1195
+ return source === "configured" ? list : `${list} (${source})`;
1196
+ };
1197
+ const { autoloop } = summary.providerOrder;
1198
+ const recipes = summary.recipes.optimization;
1199
+ if (recipes) {
1200
+ console.log();
1201
+ console.log(` cost: ${chalk3.cyan(formatOrder(summary.providerOrder.cost))}`);
1202
+ console.log(` autoloop: ${chalk3.cyan(formatOrder(autoloop))}`);
1203
+ }
1204
+ console.log();
1205
+ console.log(
1206
+ chalk3.gray(
1207
+ "Note: optimization.* applies to build run --optimize. Bare build run competition keeps its compete resolver defaults; build/flywheel/competition provider/model routing uses the canonical decision contract (automatic ranking remains opt-in)."
1208
+ )
1209
+ );
1210
+ console.log();
1211
+ return;
1212
+ }
1213
+ if (options.compete) {
1214
+ const projectRoot2 = resolveRepoRootForBuildDir(process.cwd());
1215
+ const competeResolved = await resolveCompeteConfig({}, { projectRoot: projectRoot2 });
1216
+ if (options.json) {
1217
+ console.log(JSON.stringify(redactConfigValueForDisplay("", competeResolved), null, 2));
1218
+ return;
1219
+ }
1220
+ console.log(chalk3.bold.blue("\nCompete defaults (resolved):\n"));
1221
+ const pad = (s, n) => s.padEnd(n);
1222
+ const w = 20;
1223
+ const fmtSrc = (src2) => chalk3.gray(`[${src2}]`);
1224
+ console.log(
1225
+ ` ${pad("variants:", w)} ${chalk3.cyan(competeResolved.variants.join(", ") || "(auto-discovered)")} ${fmtSrc(competeResolved.sources.variants)}`
1226
+ );
1227
+ console.log(
1228
+ ` ${pad("judge:", w)} ${chalk3.cyan(competeResolved.judge)} ${fmtSrc(competeResolved.sources.judge)}`
1229
+ );
1230
+ if (competeResolved.judgeRun) {
1231
+ console.log(
1232
+ ` ${pad("judgeRun:", w)} ${chalk3.cyan(competeResolved.judgeRun)} ${fmtSrc(competeResolved.sources.judgeRun ?? competeResolved.sources.judge)}`
1233
+ );
1234
+ }
1235
+ if (competeResolved.judgePrimary) {
1236
+ console.log(
1237
+ ` ${pad("judgePrimary:", w)} ${chalk3.cyan(competeResolved.judgePrimary)} ${fmtSrc(competeResolved.sources.judgePrimary ?? competeResolved.sources.judge)}`
1238
+ );
1239
+ }
1240
+ console.log(
1241
+ ` ${pad("completionMode:", w)} ${chalk3.cyan(competeResolved.completionMode)} ${fmtSrc(competeResolved.sources.completionMode)}`
1242
+ );
1243
+ console.log(
1244
+ ` ${pad("timeout:", w)} ${chalk3.cyan(`${competeResolved.timeout}m`)} ${fmtSrc(competeResolved.sources.timeout)}`
1245
+ );
1246
+ console.log(
1247
+ ` ${pad("requireMinVariants:", w)} ${chalk3.cyan(String(competeResolved.requireMinVariants))} ${fmtSrc(competeResolved.sources.requireMinVariants)}`
1248
+ );
1249
+ console.log(
1250
+ ` ${pad("matrixEscalation:", w)} ${chalk3.cyan(`close<=${competeResolved.matrixEscalation?.closeCallMargin ?? 5}, borderline<=${competeResolved.matrixEscalation?.borderlineMargin ?? 7}, confidence<${competeResolved.matrixEscalation?.confidenceThreshold ?? 0.75}`)} ${fmtSrc(competeResolved.sources.matrixEscalation ?? "built-in")}`
1251
+ );
1252
+ const envOverrides = [];
1253
+ if (process.env.BUILD_COMPLETION_MODE?.trim()) {
1254
+ envOverrides.push(
1255
+ ` BUILD_COMPLETION_MODE=${process.env.BUILD_COMPLETION_MODE} \u2192 completionMode: ${competeResolved.completionMode}`
1256
+ );
1257
+ }
1258
+ const activeJudgeEnv = readJudgeTypeEnv();
1259
+ if (activeJudgeEnv?.trim()) {
1260
+ const legacyActive = process.env.BUILD_JUDGE_TYPE === void 0 && process.env.BUILD_JUDGE !== void 0;
1261
+ const label = legacyActive ? "BUILD_JUDGE (deprecated alias for BUILD_JUDGE_TYPE)" : "BUILD_JUDGE_TYPE";
1262
+ envOverrides.push(` ${label}=${activeJudgeEnv} \u2192 judge: ${competeResolved.judge}`);
1263
+ }
1264
+ if (process.env.BUILD_TIMEOUT_MS?.trim()) {
1265
+ const ms = parseInt(process.env.BUILD_TIMEOUT_MS, 10);
1266
+ if (!Number.isNaN(ms)) {
1267
+ envOverrides.push(
1268
+ ` BUILD_TIMEOUT_MS=${process.env.BUILD_TIMEOUT_MS} \u2192 timeout: ${Math.ceil(ms / 6e4)}m`
1269
+ );
1270
+ }
1271
+ }
1272
+ if (process.env.BUILD_JUDGE_RUN?.trim() || process.env.BUILD_AI_JUDGE_RUN?.trim()) {
1273
+ const key = process.env.BUILD_JUDGE_RUN?.trim() ? "BUILD_JUDGE_RUN" : "BUILD_AI_JUDGE_RUN";
1274
+ envOverrides.push(
1275
+ ` ${key}=${process.env[key]} \u2192 judgeRun: ${competeResolved.judgeRun ?? "ai"}`
1276
+ );
1277
+ }
1278
+ if (process.env.BUILD_JUDGE_PRIMARY?.trim() || process.env.BUILD_AI_JUDGE_PRIMARY?.trim()) {
1279
+ const key = process.env.BUILD_JUDGE_PRIMARY?.trim() ? "BUILD_JUDGE_PRIMARY" : "BUILD_AI_JUDGE_PRIMARY";
1280
+ envOverrides.push(
1281
+ ` ${key}=${process.env[key]} \u2192 judgePrimary: ${competeResolved.judgePrimary ?? "ai"}`
1282
+ );
1283
+ }
1284
+ const hasMatrixEscalationEnvOverride = readEnv(BUILD_MATRIX_CLOSE_CALL_MARGIN).source === "env" || readEnv(BUILD_MATRIX_BORDERLINE_MARGIN).source === "env" || readEnv(BUILD_MATRIX_CONFIDENCE_THRESHOLD).source === "env";
1285
+ if (hasMatrixEscalationEnvOverride) {
1286
+ envOverrides.push(
1287
+ ` BUILD_MATRIX_* \u2192 matrixEscalation: close<=${competeResolved.matrixEscalation?.closeCallMargin ?? 5}, borderline<=${competeResolved.matrixEscalation?.borderlineMargin ?? 7}, confidence<${competeResolved.matrixEscalation?.confidenceThreshold ?? 0.75}`
1288
+ );
1289
+ }
1290
+ if (envOverrides.length > 0) {
1291
+ console.log("\nActive BUILD_* overrides:");
1292
+ for (const line of envOverrides) {
1293
+ console.log(chalk3.yellow(line));
1294
+ }
1295
+ }
1296
+ console.log();
1297
+ return;
1298
+ }
1299
+ const resolved = resolveConfig(void 0, process.cwd(), { strictSynthesisModel: false });
1300
+ if (options.summary && (options.provider || options.role)) {
1301
+ console.error(chalk3.red("Error: --summary cannot be combined with --provider or --role"));
1302
+ throw new ExitCodeError(1);
1303
+ }
1304
+ if (options.summary) {
1305
+ const enabledProviders = ProviderRegistry.getEnabledProviders().map((p) => p.id);
1306
+ const judgeType = resolved.judge.type.value;
1307
+ const judge = await buildJudgeRow(
1308
+ judgeType,
1309
+ resolveRepoRootForBuildDir(process.cwd()),
1310
+ judgeType
1311
+ );
1312
+ const summary = {
1313
+ provider: resolved.defaultProvider.value,
1314
+ model: resolved.defaultModel.value,
1315
+ blockerMode: resolved.planExecute.blockerMode.value,
1316
+ transport: resolved.providerExecutionTransport.current.value,
1317
+ judge: summarizeJudgeRow(judge, resolved),
1318
+ availableProviders: enabledProviders
1319
+ };
1320
+ if (options.json) {
1321
+ console.log(JSON.stringify(redactSensitiveConfig(summary), null, 2));
1322
+ } else {
1323
+ console.log(chalk3.bold.blue("\nResolved Config Summary\n"));
1324
+ console.log(formatResolvedConfigSummaryLine(summary));
1325
+ console.log();
1326
+ console.log(` Provider: ${chalk3.cyan(summary.provider)}`);
1327
+ console.log(` Model: ${chalk3.cyan(summary.model)}`);
1328
+ console.log(` Blockers: ${chalk3.cyan(summary.blockerMode)}`);
1329
+ console.log(` Transport: ${chalk3.cyan(summary.transport)}`);
1330
+ console.log(` Judge: ${chalk3.cyan(formatSummaryJudge(summary.judge))}`);
1331
+ console.log(` Available: ${chalk3.cyan(summary.availableProviders.join(", "))}`);
1332
+ console.log();
1333
+ }
1334
+ return;
1335
+ }
1336
+ if (options.role) {
1337
+ if (options.role !== "executor") {
1338
+ writeConfigError(chalk3.red(`Error: Unsupported role: ${options.role}`));
1339
+ throw new ExitCodeError(1);
1340
+ }
1341
+ if (!options.provider) {
1342
+ writeConfigError(chalk3.red("Error: --role requires --provider"));
1343
+ throw new ExitCodeError(1);
1344
+ }
1345
+ const normalizedProvider = normalizeEngineId(String(options.provider));
1346
+ if (!resolved.providerModels[normalizedProvider]) {
1347
+ if (options.json) {
1348
+ renderJsonError(
1349
+ new ValidationError(`Unknown provider: ${options.provider}`, {
1350
+ provider: options.provider
1351
+ })
1352
+ );
1353
+ throw new ExitCodeError(1);
1354
+ }
1355
+ writeConfigError(chalk3.red(`Unknown provider: ${options.provider}`));
1356
+ throw new ExitCodeError(1);
1357
+ }
1358
+ const query = await buildResolvedExecutorModelQuery(normalizedProvider, process.cwd());
1359
+ if (options.json) {
1360
+ renderJsonResult(redactConfigValueForDisplay("", query));
1361
+ } else {
1362
+ const model = query.model;
1363
+ writeConfigLine(`roles.executor.provider: ${normalizedProvider}`);
1364
+ writeConfigLine(`roles.executor.model.input: ${String(model.input)}`);
1365
+ writeConfigLine(`roles.executor.model.effective: ${String(model.effective)}`);
1366
+ writeConfigLine(`roles.executor.model.source: ${String(model.source)}`);
1367
+ writeConfigLine(`roles.executor.model.discovery: ${String(model.discoveryStatus)}`);
1368
+ writeConfigLine(`roles.executor.model.emitArg: ${String(model.emitModelArg)}`);
1369
+ const reasoning = query.reasoningEffort;
1370
+ writeConfigLine(
1371
+ `roles.executor.reasoningEffort: ${reasoning ? String(reasoning.value) : AGENT_DEFAULT}`
1372
+ );
1373
+ if (reasoning?.source) {
1374
+ writeConfigLine(`roles.executor.reasoningSource: ${String(reasoning.source)}`);
1375
+ }
1376
+ }
1377
+ return;
1378
+ }
1379
+ if (options.provider) {
1380
+ const normalizedProvider = normalizeEngineId(String(options.provider));
1381
+ const providerModel = resolved.providerModels[normalizedProvider];
1382
+ if (!providerModel) {
1383
+ if (options.json) {
1384
+ renderJsonError(
1385
+ new ValidationError(`Unknown provider: ${options.provider}`, {
1386
+ provider: options.provider
1387
+ })
1388
+ );
1389
+ throw new ExitCodeError(1);
1390
+ }
1391
+ console.error(chalk3.red(`Unknown provider: ${options.provider}`));
1392
+ throw new ExitCodeError(1);
1393
+ }
1394
+ if (options.json) {
1395
+ console.log(
1396
+ JSON.stringify(
1397
+ redactConfigValueForDisplay(normalizedProvider, providerModel),
1398
+ null,
1399
+ 2
1400
+ )
1401
+ );
1402
+ } else {
1403
+ console.log(formatResolvedValue(providerModel));
1404
+ }
1405
+ return;
1406
+ }
1407
+ const roles = resolveExecutionRoles({
1408
+ cwd: process.cwd(),
1409
+ ...resolveReviewerEligibility(process.cwd())
1410
+ });
1411
+ const projectRoot = resolveRepoRootForBuildDir(process.cwd());
1412
+ if (options.json) {
1413
+ const executionPreview2 = await buildExecutionPreview(resolved, projectRoot);
1414
+ const instructionsImport = describeInstructionsImport();
1415
+ const shown = { ...resolved, roles, executionPreview: executionPreview2, instructionsImport };
1416
+ console.log(JSON.stringify(redactConfigValueForDisplay("", shown), null, 2));
1417
+ return;
1418
+ }
1419
+ console.log(chalk3.bold.blue("\nResolved Configuration\n"));
1420
+ const executionPreview = await buildExecutionPreview(resolved, projectRoot);
1421
+ const log = (line = "") => console.log(line);
1422
+ log(formatResolvedSummary(resolved, executionPreview));
1423
+ printExecutionPreview(resolved, executionPreview, log);
1424
+ printResolvedRoles(roles, writeConfigLine);
1425
+ console.log();
1426
+ } catch (error) {
1427
+ if (error instanceof ExitCodeError) throw error;
1428
+ if (renderConfigReadFailure(error, Boolean(options.json))) throw new ExitCodeError(1);
1429
+ console.error(chalk3.red("Error resolving configuration:"), errorMessage(error));
1430
+ throw new ExitCodeError(1);
1431
+ }
1432
+ });
1433
+ configCommand.command("set").description("Set configuration value using dot-notation path").argument(
1434
+ "<path>",
1435
+ "Config path (e.g., defaults.provider, automation.flywheel.merge.biomeRepair)"
1436
+ ).argument("<value>", "Value to set").option("--scope <scope>", "Configuration scope: user or project", "project").action(async (path, value, options) => {
1437
+ try {
1438
+ const scope = options.scope;
1439
+ if (scope !== "user" && scope !== "project") {
1440
+ console.error(chalk3.red(`Invalid scope: ${scope}. Use 'user' or 'project'.`));
1441
+ throw new ExitCodeError(1);
1442
+ }
1443
+ const writeCwd = findProjectRoot(process.cwd()) ?? resolveRepoRootForBuildDir(process.cwd());
1444
+ const configManager = new ConfigManager({ cwd: writeCwd });
1445
+ const hadProjectConfig = existsSync(getConfigPaths(writeCwd).projectConfigFile);
1446
+ const result = await configManager.setConfigValue(path, value, scope);
1447
+ if (result.success) {
1448
+ console.log(
1449
+ chalk3.green(`OK: Set ${path} = ${formatConfigSetValueForDisplay(path, value)}`)
1450
+ );
1451
+ console.log(chalk3.gray(` Scope: ${scope}`));
1452
+ if (result.previousValue !== void 0) {
1453
+ console.log(
1454
+ chalk3.gray(
1455
+ ` Previous: ${formatConfigSetValueForDisplay(path, result.previousValue)}`
1456
+ )
1457
+ );
1458
+ }
1459
+ if (scope === "project") {
1460
+ await printConfigSetShadowNotice(path, formatConfigSetValueForDisplay);
1461
+ if (!hadProjectConfig) {
1462
+ console.log(
1463
+ "Info: created .build-project/config/build.config.jsonc only; run build init for the full project state."
1464
+ );
1465
+ }
1466
+ }
1467
+ } else {
1468
+ console.error(chalk3.red(`Error: Failed to set configuration: ${result.error}`));
1469
+ throw new ExitCodeError(1);
1470
+ }
1471
+ } catch (error) {
1472
+ if (error instanceof ExitCodeError) throw error;
1473
+ console.error(chalk3.red("Error setting configuration:"), errorMessage(error));
1474
+ throw new ExitCodeError(1);
1475
+ }
1476
+ });
1477
+ configCommand.command("get").description("Get configuration value using dot-notation path").argument("<path>", "Config path (e.g., defaults.provider, execution.defaultTimeout)").option("--scope <scope>", "Configuration scope: user or project", "project").option("-j, --json", "Output as JSON").action(async (path, options) => {
1478
+ try {
1479
+ const scope = options.scope;
1480
+ if (scope !== "user" && scope !== "project") {
1481
+ console.error(chalk3.red(`Invalid scope: ${scope}. Use 'user' or 'project'.`));
1482
+ throw new ExitCodeError(1);
1483
+ }
1484
+ const configManager = new ConfigManager();
1485
+ const value = await configManager.getConfigValue(path, scope);
1486
+ if (options.json) {
1487
+ console.log(JSON.stringify(buildConfigGetJsonPayload(path, scope, value), null, 2));
1488
+ } else if (value === void 0) {
1489
+ await printConfigScopeMiss(
1490
+ path,
1491
+ scope,
1492
+ (configPath, configScope) => configManager.getConfigValue(configPath, configScope)
1493
+ );
1494
+ } else {
1495
+ console.log(chalk3.cyan(`${path}`), "=", formatConfigGetValueForDisplay(path, value));
1496
+ }
1497
+ } catch (error) {
1498
+ if (error instanceof ExitCodeError) throw error;
1499
+ if (renderConfigReadFailure(error, Boolean(options.json))) throw new ExitCodeError(1);
1500
+ console.error(chalk3.red("Error getting configuration:"), errorMessage(error));
1501
+ throw new ExitCodeError(1);
1502
+ }
1503
+ });
1504
+ const userCommand = new Command("user").description("Manage user-scope configuration values");
1505
+ userCommand.command("set").description("Set a user-scope configuration value using dot-notation path").argument("<path>", "Config path (e.g., defaults.provider)").argument("<value>", "Value to set").action(async (path, value) => {
1506
+ try {
1507
+ const configManager = new ConfigManager();
1508
+ const result = await configManager.setConfigValue(path, value, "user");
1509
+ if (result.success) {
1510
+ console.log(
1511
+ chalk3.green(`OK: Set ${path} = ${formatConfigSetValueForDisplay(path, value)}`)
1512
+ );
1513
+ console.log(chalk3.gray(" Scope: user"));
1514
+ if (result.previousValue !== void 0) {
1515
+ console.log(
1516
+ chalk3.gray(
1517
+ ` Previous: ${formatConfigSetValueForDisplay(path, result.previousValue)}`
1518
+ )
1519
+ );
1520
+ }
1521
+ return;
1522
+ }
1523
+ console.error(chalk3.red(`Error: Failed to set configuration: ${result.error}`));
1524
+ throw new ExitCodeError(1);
1525
+ } catch (error) {
1526
+ if (error instanceof ExitCodeError) throw error;
1527
+ console.error(chalk3.red("Error setting configuration:"), errorMessage(error));
1528
+ throw new ExitCodeError(1);
1529
+ }
1530
+ });
1531
+ userCommand.command("get").description("Get a user-scope configuration value using dot-notation path").argument("<path>", "Config path (e.g., defaults.provider)").option("-j, --json", "Output as JSON").action(async (path, options) => {
1532
+ try {
1533
+ const configManager = new ConfigManager();
1534
+ const value = await configManager.getConfigValue(path, "user");
1535
+ if (options.json) {
1536
+ console.log(JSON.stringify(buildConfigGetJsonPayload(path, "user", value), null, 2));
1537
+ } else if (value === void 0) {
1538
+ await printConfigScopeMiss(
1539
+ path,
1540
+ "user",
1541
+ (configPath, configScope) => configManager.getConfigValue(configPath, configScope)
1542
+ );
1543
+ } else {
1544
+ console.log(chalk3.cyan(`${path}`), "=", formatConfigGetValueForDisplay(path, value));
1545
+ }
1546
+ } catch (error) {
1547
+ if (error instanceof ExitCodeError) throw error;
1548
+ console.error(chalk3.red("Error getting configuration:"), errorMessage(error));
1549
+ throw new ExitCodeError(1);
1550
+ }
1551
+ });
1552
+ configCommand.addCommand(userCommand);
1553
+ configCommand.command("cleanup").description("Clean up configuration artifacts").option("--backups", "Remove old backup files (keeps last 3)").option("--dry-run", "Show what would be deleted without actually deleting").action(async (options) => {
1554
+ try {
1555
+ const { existsSync: existsSync2, readdirSync, unlinkSync, statSync } = await import("fs");
1556
+ const { join: join2 } = await import("path");
1557
+ console.log(chalk3.bold.blue("\nConfiguration Cleanup\n"));
1558
+ if (options.backups) {
1559
+ const configDir = getConfigPaths(process.cwd()).projectConfigDir;
1560
+ if (!existsSync2(configDir)) {
1561
+ console.log(chalk3.yellow("No .build-project/config directory found."));
1562
+ return;
1563
+ }
1564
+ const files = readdirSync(configDir);
1565
+ const backupFiles = files.filter((f) => f.startsWith("build.config.backup.")).map((f) => ({
1566
+ name: f,
1567
+ path: join2(configDir, f),
1568
+ mtime: statSync(join2(configDir, f)).mtime.getTime()
1569
+ })).sort((a, b) => b.mtime - a.mtime);
1570
+ if (backupFiles.length === 0) {
1571
+ console.log(chalk3.green("No backup files found."));
1572
+ return;
1573
+ }
1574
+ const toDelete = backupFiles.slice(3);
1575
+ const toKeep = backupFiles.slice(0, 3);
1576
+ console.log(chalk3.gray(`Found ${backupFiles.length} backup files.`));
1577
+ console.log(chalk3.green(`Keeping ${toKeep.length} most recent:`));
1578
+ for (const f of toKeep) {
1579
+ console.log(chalk3.gray(` OK ${f.name}`));
1580
+ }
1581
+ if (toDelete.length === 0) {
1582
+ console.log(chalk3.green("\nNo files to delete."));
1583
+ return;
1584
+ }
1585
+ console.log(chalk3.yellow(`
1586
+ Deleting ${toDelete.length} old backups:`));
1587
+ for (const f of toDelete) {
1588
+ console.log(chalk3.gray(` Error ${f.name}`));
1589
+ if (!options.dryRun) {
1590
+ unlinkSync(f.path);
1591
+ }
1592
+ }
1593
+ if (options.dryRun) {
1594
+ console.log(chalk3.yellow("\n(Dry run - no files were actually deleted)"));
1595
+ } else {
1596
+ console.log(chalk3.green(`
1597
+ OK: Deleted ${toDelete.length} backup files.`));
1598
+ }
1599
+ } else {
1600
+ console.log(chalk3.gray("Use --backups to remove old backup files."));
1601
+ console.log(chalk3.gray("Example: build config cleanup --backups"));
1602
+ }
1603
+ } catch (error) {
1604
+ if (error instanceof ExitCodeError) throw error;
1605
+ console.error(chalk3.red("Error during cleanup:"), errorMessage(error));
1606
+ throw new ExitCodeError(1);
1607
+ }
1608
+ });
1609
+ configCommand.command("explain [key]").description("Show env-registry key details (type, default, current value, source)").option("-j, --json", "Output as JSON").option(
1610
+ "--category <name>",
1611
+ "Filter to one category (core/provider/judge/feature/orchestrator/telemetry/sandbox/autoloop/test/worktree/repair)"
1612
+ ).option("--show-deprecated", "Include deprecated keys (hidden by default)").option("--source <source>", "Filter by source: env | default | unset").action(
1613
+ async (key, options) => {
1614
+ try {
1615
+ const { explainEnvKey, explainAllEnvKeys } = await import("./config-explain-4LMO556H.js");
1616
+ if (key !== void 0) {
1617
+ const result = explainEnvKey(key);
1618
+ if (result === void 0) {
1619
+ if (options.json) {
1620
+ renderJsonError(
1621
+ new ValidationError(`Unknown env key: ${key}`, {
1622
+ key
1623
+ })
1624
+ );
1625
+ throw new ExitCodeError(1);
1626
+ }
1627
+ console.error(`Error: Unknown env key: ${key}`);
1628
+ throw new ExitCodeError(1);
1629
+ }
1630
+ if (options.json) {
1631
+ console.log(JSON.stringify(redactConfigValueForDisplay("", result), null, 2));
1632
+ return;
1633
+ }
1634
+ printExplainRow(result);
1635
+ return;
1636
+ }
1637
+ const results = explainAllEnvKeys({
1638
+ category: options.category,
1639
+ showDeprecated: options.showDeprecated ?? false,
1640
+ source: options.source
1641
+ });
1642
+ if (options.json) {
1643
+ console.log(JSON.stringify(redactConfigValueForDisplay("", results), null, 2));
1644
+ return;
1645
+ }
1646
+ for (const result of results) {
1647
+ printExplainRow(result);
1648
+ }
1649
+ } catch (error) {
1650
+ if (error instanceof ExitCodeError) throw error;
1651
+ console.error(chalk3.red("Error running config explain:"), errorMessage(error));
1652
+ throw new ExitCodeError(1);
1653
+ }
1654
+ }
1655
+ );
1656
+ configCommand.command("audit").description(
1657
+ "Audit configuration: report direct env reads, unregistered vars, deprecated aliases, and migration risks"
1658
+ ).option("--fix-plan", "Output a structured fix plan").option("-j, --json", "JSON output").option("--severity <level>", "Filter findings (error|warn|info)").action(async (options) => {
1659
+ try {
1660
+ const { runAudit, formatAuditPlain, formatAuditJson } = await import("./config-audit-GA5DCUAI.js");
1661
+ let findings = await runAudit({ cwd: process.cwd() });
1662
+ if (options.severity) {
1663
+ const level = options.severity;
1664
+ if (!["error", "warn", "info"].includes(level)) {
1665
+ console.error(`Error: Invalid severity filter "${level}". Use error, warn, or info.`);
1666
+ throw new ExitCodeError(1);
1667
+ }
1668
+ findings = findings.filter((f) => f.severity === level);
1669
+ }
1670
+ const errors = findings.filter((f) => f.severity === "error").length;
1671
+ if (options.json) {
1672
+ console.log(formatAuditJson(findings));
1673
+ if (errors > 0) {
1674
+ throw new ExitCodeError(1);
1675
+ }
1676
+ return;
1677
+ }
1678
+ if (options.fixPlan) {
1679
+ console.log("Config audit fix plan\n");
1680
+ console.log(formatAuditPlain(findings));
1681
+ return;
1682
+ }
1683
+ const warns = findings.filter((f) => f.severity === "warn").length;
1684
+ const infos = findings.filter((f) => f.severity === "info").length;
1685
+ if (findings.length === 0) {
1686
+ console.log("OK: No audit findings.");
1687
+ return;
1688
+ }
1689
+ console.log(`Audit: ${errors} error(s), ${warns} warn(s), ${infos} info(s)`);
1690
+ for (const f of findings) {
1691
+ const loc = f.location?.path ? ` [${f.location.line ? `${f.location.path}:${f.location.line}` : f.location.path}]` : "";
1692
+ console.log(`[${f.severity}] ${f.title}${loc}`);
1693
+ }
1694
+ if (errors > 0) {
1695
+ throw new ExitCodeError(1);
1696
+ }
1697
+ } catch (error) {
1698
+ if (error instanceof ExitCodeError) throw error;
1699
+ console.error("Error running config audit:", errorMessage(error));
1700
+ throw new ExitCodeError(1);
1701
+ }
1702
+ });
1703
+ return configCommand;
1704
+ }
1705
+
1706
+ export {
1707
+ projectModelAliases,
1708
+ projectModelAliasListing,
1709
+ sortedModelAliasListing,
1710
+ redactConfigValueForDisplay,
1711
+ formatConfigGetValueForDisplay,
1712
+ formatConfigSetValueForDisplay,
1713
+ buildConfigGetJsonPayload,
1714
+ buildConfigScopeMissLines,
1715
+ createConfigCommand
1716
+ };
1717
+ //# sourceMappingURL=chunk-RGJU63FV.js.map