@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,1408 @@
1
+ import {
2
+ LlmJudgeExecutor
3
+ } from "./chunk-CFCVYHSW.js";
4
+ import {
5
+ getUserBuildHome
6
+ } from "./chunk-VCGSWN5M.js";
7
+ import {
8
+ MANIFEST,
9
+ discoverAgentInstructionSources,
10
+ findPendingImport,
11
+ getImportsDir,
12
+ readInstructionsImportState,
13
+ recordImportOptimization,
14
+ recordInstructionsImportState
15
+ } from "./chunk-IYY3HQAD.js";
16
+ import {
17
+ markdownFenceLines
18
+ } from "./chunk-UDNNAQN5.js";
19
+ import {
20
+ CORE_DOCTRINE,
21
+ STEERING_PROVIDERS,
22
+ assessSteeringCap,
23
+ resolveSteeringChannelCaps
24
+ } from "./chunk-HKO45NLZ.js";
25
+ import {
26
+ ConfigManager,
27
+ writeJsoncEdits
28
+ } from "./chunk-W4BAIQ6L.js";
29
+ import {
30
+ readInstructionText,
31
+ userHomeDir
32
+ } from "./chunk-S6I4KISU.js";
33
+ import {
34
+ resolveJudgeConfig
35
+ } from "./chunk-C3DH3NCY.js";
36
+ import {
37
+ isYesAnswer
38
+ } from "./chunk-O5X6BKAO.js";
39
+ import {
40
+ safeRmDir
41
+ } from "./chunk-ALDTFNZ3.js";
42
+ import {
43
+ selectedBuildConfigCandidate
44
+ } from "./chunk-FKCG7K6H.js";
45
+ import {
46
+ isProviderCliResolvable
47
+ } from "./chunk-KKQKWAMF.js";
48
+ import {
49
+ byteLength,
50
+ getUserInstructionsPath,
51
+ getUserInstructionsTargetPath,
52
+ sha256Text
53
+ } from "./chunk-RIMARPCF.js";
54
+ import {
55
+ getUserConfigFile
56
+ } from "./chunk-56WPYDJH.js";
57
+
58
+ // src/core/instructions-import/plan.ts
59
+ import { createHash as createHash2 } from "crypto";
60
+ import { existsSync, readFileSync } from "fs";
61
+ import { dirname, join } from "path";
62
+
63
+ // src/core/instructions-import/secrets.ts
64
+ var TOKEN_SHAPES = [
65
+ ["api key (sk-)", /\bsk-[A-Za-z0-9_-]{20,}/],
66
+ ["github token", /\b(?:gh[pousr]_[A-Za-z0-9]{30,}|github_pat_[A-Za-z0-9_]{30,})/],
67
+ ["gitlab token", /\bglpat-[A-Za-z0-9_-]{20,}/],
68
+ ["slack token", /\bxox[abeprs]-[A-Za-z0-9-]{10,}/],
69
+ ["aws access key id", /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/],
70
+ ["google api key", /\bAIza[0-9A-Za-z_-]{35}/],
71
+ ["xai api key", /\bxai-[A-Za-z0-9]{20,}/],
72
+ ["npm token", /\bnpm_[A-Za-z0-9]{36}/],
73
+ ["stripe key", /\b[rs]k_live_[A-Za-z0-9]{20,}/],
74
+ ["jwt", /\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/]
75
+ ];
76
+ var KEY_VALUE = /(?:^|[^A-Za-z0-9])(password|passwd|pwd|secret|client[_-]?secret|token|access[_-]?token|auth[_-]?token|api[_-]?key|apikey|access[_-]?key|private[_-]?key)["']?\s*[:=]\s*["']?([^\s"',;]+)/i;
77
+ var CONNECTION_STRING = /\b[a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:[^\s@/]+@[^\s]+/i;
78
+ var PRIVATE_KEY_BEGIN = /-----BEGIN [A-Z0-9 ]*PRIVATE KEY( BLOCK)?-----/;
79
+ var PRIVATE_KEY_END = /-----END [A-Z0-9 ]*PRIVATE KEY( BLOCK)?-----/;
80
+ function isPlaceholder(value) {
81
+ return /^<.*>$/.test(value) || /^\$\{?[A-Za-z_][A-Za-z0-9_]*\}?$/.test(value) || /^[*xX.]+$/.test(value) || /^(?:none|null|redacted|changeme|example)$/i.test(value);
82
+ }
83
+ function linePattern(line) {
84
+ for (const [name, shape] of TOKEN_SHAPES) {
85
+ if (shape.test(line)) return name;
86
+ }
87
+ const keyValue = KEY_VALUE.exec(line);
88
+ if (keyValue?.[1] && keyValue[2] && !isPlaceholder(keyValue[2])) {
89
+ return `${keyValue[1].toLowerCase()} value`;
90
+ }
91
+ if (CONNECTION_STRING.test(line)) return "connection string with password";
92
+ return void 0;
93
+ }
94
+ function withholdSecrets(text, source, dropLines = []) {
95
+ const drop = new Set(dropLines);
96
+ const kept = [];
97
+ const withheld = [];
98
+ let inKeyBlock = false;
99
+ text.split(/\r?\n/).forEach((line, index) => {
100
+ const lineNumber = index + 1;
101
+ if (inKeyBlock) {
102
+ if (PRIVATE_KEY_END.test(line)) inKeyBlock = false;
103
+ return;
104
+ }
105
+ if (PRIVATE_KEY_BEGIN.test(line)) {
106
+ withheld.push({ ...source, line: lineNumber, pattern: "private key" });
107
+ inKeyBlock = !PRIVATE_KEY_END.test(line);
108
+ return;
109
+ }
110
+ const pattern = linePattern(line);
111
+ if (pattern) {
112
+ withheld.push({ ...source, line: lineNumber, pattern });
113
+ return;
114
+ }
115
+ if (!drop.has(lineNumber)) kept.push(line);
116
+ });
117
+ return { text: kept.join("\n"), withheld };
118
+ }
119
+
120
+ // src/core/instructions-import/sections.ts
121
+ import { createHash } from "crypto";
122
+ var HEADING = /^ {0,3}#{1,6}(?:\s|$)/;
123
+ function parseBlockMarker(line) {
124
+ const trimmed = line.trim();
125
+ const isComment = trimmed.startsWith("<!--") && trimmed.endsWith("-->");
126
+ const body = trimmed.replace(/^<!--|-->$/g, "").replace(/^[\s#=<>*/-]+|[\s#=<>*/-]+$/g, "");
127
+ if (!body) return void 0;
128
+ const colon = /^(\S+?):(start|begin|end)$/i.exec(body);
129
+ if (colon?.[1] && colon[2]) {
130
+ return { edge: colon[2].toLowerCase() === "end" ? "end" : "start", name: colon[1] };
131
+ }
132
+ const word = /^(BEGIN|START|END)\s+(.+)$/i.exec(body);
133
+ if (word?.[1] && word[2] && (isComment || word[1] === word[1].toUpperCase())) {
134
+ return { edge: word[1].toUpperCase() === "END" ? "end" : "start", name: word[2].trim() };
135
+ }
136
+ return void 0;
137
+ }
138
+ function normalizeName(name) {
139
+ return name.toLowerCase().replace(/\s+/g, " ");
140
+ }
141
+ function splitManagedRegions(lines, sourceId) {
142
+ const markers = lines.map((line) => parseBlockMarker(line));
143
+ const regions = [];
144
+ const blocks = [];
145
+ let current = { lines: [] };
146
+ for (let i = 0; i < lines.length; i++) {
147
+ const marker = markers[i];
148
+ if (marker?.edge === "start" && current.managedBy === void 0) {
149
+ const name = normalizeName(marker.name);
150
+ const end = markers.findIndex(
151
+ (m, j) => j > i && m?.edge === "end" && normalizeName(m.name) === name
152
+ );
153
+ if (end !== -1) {
154
+ regions.push(current);
155
+ blocks.push({ sourceId, name: marker.name, line: i + 1 });
156
+ regions.push({ lines: lines.slice(i + 1, end), managedBy: marker.name });
157
+ current = { lines: [] };
158
+ i = end;
159
+ continue;
160
+ }
161
+ }
162
+ current.lines.push(lines[i] ?? "");
163
+ }
164
+ regions.push(current);
165
+ return { regions: regions.filter((region) => region.lines.length > 0), blocks };
166
+ }
167
+ function splitSections(lines) {
168
+ const sections = [];
169
+ let current = { lines: [] };
170
+ const fenced = markdownFenceLines(lines);
171
+ lines.forEach((line, index) => {
172
+ if (!fenced[index] && HEADING.test(line)) {
173
+ sections.push(current);
174
+ current = { heading: line.trim(), lines: [] };
175
+ }
176
+ current.lines.push(line);
177
+ });
178
+ sections.push(current);
179
+ return sections.map((section) => ({
180
+ ...section.heading ? { heading: section.heading } : {},
181
+ text: section.lines.join("\n").trim()
182
+ })).filter((section) => section.text !== "");
183
+ }
184
+ function normalizeSectionText(text) {
185
+ return text.split("\n").map((line) => line.trimEnd()).join("\n").replace(/\n{3,}/g, "\n\n").trim();
186
+ }
187
+ function sectionKey(text) {
188
+ return createHash("sha256").update(normalizeSectionText(text)).digest("hex").slice(0, 16);
189
+ }
190
+ function dedupeSections(sources) {
191
+ const sections = [];
192
+ const managedBlocks = [];
193
+ const byKey = /* @__PURE__ */ new Map();
194
+ for (const source of sources) {
195
+ const { regions, blocks } = splitManagedRegions(source.text.split(/\r?\n/), source.sourceId);
196
+ managedBlocks.push(...blocks);
197
+ for (const region of regions) {
198
+ for (const { heading, text } of splitSections(region.lines)) {
199
+ const key = sectionKey(text);
200
+ const origin = { sourceId: source.sourceId, reaches: [...source.reaches] };
201
+ const existing = byKey.get(key);
202
+ if (existing) {
203
+ existing.origins.push(origin);
204
+ for (const agent of source.reaches) {
205
+ if (!existing.reaches.includes(agent)) existing.reaches.push(agent);
206
+ }
207
+ continue;
208
+ }
209
+ const section = {
210
+ key,
211
+ ...heading ? { heading } : {},
212
+ text,
213
+ origins: [origin],
214
+ reaches: [...source.reaches],
215
+ ...region.managedBy ? { managedBy: region.managedBy } : {}
216
+ };
217
+ byKey.set(key, section);
218
+ sections.push(section);
219
+ }
220
+ }
221
+ }
222
+ return { sections, managedBlocks };
223
+ }
224
+
225
+ // src/core/instructions-import/plan.ts
226
+ var BUILD_AGENT = "build";
227
+ function displayPath(path, env = process.env) {
228
+ const home = userHomeDir(env);
229
+ return path === home || path.startsWith(`${home}/`) ? `~${path.slice(home.length)}` : path;
230
+ }
231
+ function describeSource(source, env) {
232
+ const key = source.id.startsWith(`${source.path}#`) ? source.id.slice(source.path.length + 1) : "";
233
+ return key ? `${displayPath(source.path, env)} (${key})` : displayPath(source.path, env);
234
+ }
235
+ function legacyBuildSource() {
236
+ const inUse = getUserInstructionsPath();
237
+ if (inUse === getUserInstructionsTargetPath()) return void 0;
238
+ const read = readInstructionText(inUse);
239
+ if (!read.ok) return void 0;
240
+ return {
241
+ id: inUse,
242
+ path: inUse,
243
+ kind: "instructions",
244
+ reaches: [BUILD_AGENT],
245
+ text: read.text,
246
+ identity: read.identity
247
+ };
248
+ }
249
+ function itemName(raw, taken) {
250
+ const base = raw.replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "rule";
251
+ let name = base;
252
+ for (let n = 2; taken.has(name); n++) name = `${base}-${n}`;
253
+ taken.add(name);
254
+ return name;
255
+ }
256
+ function readBuildFile(path) {
257
+ try {
258
+ return readFileSync(path, "utf8");
259
+ } catch {
260
+ return void 0;
261
+ }
262
+ }
263
+ function itemStatus(target, sha256) {
264
+ if (!existsSync(target)) return "new";
265
+ const existing = readBuildFile(target);
266
+ return existing !== void 0 && sha256Text(existing) === sha256 ? "same" : "conflict";
267
+ }
268
+ function renderInstructions(sections, sources, env) {
269
+ const blocks = [];
270
+ for (const source of sources) {
271
+ const own = sections.filter((section) => section.origins[0]?.sourceId === source.id);
272
+ if (own.length === 0) continue;
273
+ blocks.push(`<!-- From ${describeSource(source, env)} (${source.reaches.join(", ")}) -->`);
274
+ let managed;
275
+ for (const section of own) {
276
+ if (section.managedBy && section.managedBy !== managed) {
277
+ blocks.push(
278
+ `<!-- Maintained by ${section.managedBy}; later changes there won't follow. -->`
279
+ );
280
+ }
281
+ managed = section.managedBy;
282
+ blocks.push(section.text);
283
+ }
284
+ }
285
+ return blocks.length > 0 ? `${blocks.join("\n\n")}
286
+ ` : "";
287
+ }
288
+ function planInstructions(text) {
289
+ const target = getUserInstructionsTargetPath();
290
+ const current = readBuildFile(target);
291
+ const existing = current !== void 0 ? { sha256: sha256Text(current), bytes: byteLength(current), empty: current.trim() === "" } : void 0;
292
+ const sha256 = sha256Text(text);
293
+ const status = text === "" ? "none" : existing?.sha256 === sha256 ? "same" : existing && !existing.empty ? "replace" : "new";
294
+ return {
295
+ target,
296
+ text,
297
+ sha256,
298
+ bytes: byteLength(text),
299
+ ...existing ? { existing } : {},
300
+ status
301
+ };
302
+ }
303
+ function runtimeSteeringBytes(bytes) {
304
+ return byteLength(CORE_DOCTRINE.map((entry) => entry.text).join("\n\n")) + 2 + bytes;
305
+ }
306
+ function steeringLimits(bytes) {
307
+ if (bytes === 0) return [];
308
+ return STEERING_PROVIDERS.map((provider) => ({
309
+ provider,
310
+ ...assessSteeringCap(provider, runtimeSteeringBytes(bytes))
311
+ })).filter((status) => status.status !== "ok");
312
+ }
313
+ function hashPlan(instructions, items) {
314
+ return createHash2("sha256").update(
315
+ JSON.stringify({
316
+ instructions: [instructions.target, instructions.sha256, instructions.existing?.sha256],
317
+ items: items.map((item) => [item.kind, item.name, item.sha256, item.status])
318
+ })
319
+ ).digest("hex");
320
+ }
321
+ function planInstructionsImport(options = {}) {
322
+ const env = options.env ?? process.env;
323
+ const discovered = discoverAgentInstructionSources(env);
324
+ const sources = [...discovered.sources];
325
+ const agents = discovered.agents.map((agent) => ({ ...agent }));
326
+ const legacy = legacyBuildSource();
327
+ if (legacy) {
328
+ const shared = sources.find((source) => source.identity === legacy.identity);
329
+ if (shared) shared.reaches.push(BUILD_AGENT);
330
+ else sources.unshift(legacy);
331
+ agents.unshift({ agent: BUILD_AGENT, home: dirname(legacy.path), homeFound: true });
332
+ }
333
+ const secretsWithheld = [];
334
+ const sectioned = [];
335
+ const items = [];
336
+ const takenNames = /* @__PURE__ */ new Set();
337
+ for (const source of sources) {
338
+ const cleaned = withholdSecrets(
339
+ source.text,
340
+ { sourceId: source.id, path: source.path },
341
+ source.includeLines
342
+ );
343
+ secretsWithheld.push(...cleaned.withheld);
344
+ if (source.pathScoped && source.ruleName) {
345
+ const name = itemName(source.ruleName, takenNames);
346
+ const target = join(getUserBuildHome(), "steering", `${name}.md`);
347
+ const text = `${cleaned.text.trim()}
348
+ `;
349
+ const sha256 = sha256Text(text);
350
+ items.push({
351
+ kind: "steering",
352
+ name,
353
+ target,
354
+ sourceId: source.id,
355
+ text,
356
+ sha256,
357
+ status: itemStatus(target, sha256)
358
+ });
359
+ continue;
360
+ }
361
+ sectioned.push({ sourceId: source.id, reaches: source.reaches, text: cleaned.text });
362
+ }
363
+ const { sections, managedBlocks } = dedupeSections(sectioned);
364
+ const instructions = planInstructions(renderInstructions(sections, sources, env));
365
+ const byId = new Map(sources.map((source) => [source.id, source]));
366
+ const coverage = agents.map((agent) => ({
367
+ ...agent,
368
+ sources: sources.filter((source) => source.reaches.includes(agent.agent)).length,
369
+ sections: sections.filter((section) => section.reaches.includes(agent.agent)).length
370
+ }));
371
+ const fingerprints = Object.fromEntries(
372
+ sources.map((source) => [source.id, sha256Text(source.text)])
373
+ );
374
+ return {
375
+ version: "verbatim",
376
+ agents: coverage,
377
+ sources: sources.map((source) => ({
378
+ id: source.id,
379
+ path: source.path,
380
+ kind: source.kind,
381
+ reaches: [...source.reaches],
382
+ sha256: fingerprints[source.id] ?? "",
383
+ bytes: byteLength(source.text),
384
+ ...source.includedFrom ? { includedFrom: source.includedFrom } : {},
385
+ ...source.pathScoped ? { pathScoped: true } : {}
386
+ })),
387
+ issues: discovered.issues,
388
+ sections,
389
+ managedBlocks: managedBlocks.map((block) => ({
390
+ ...block,
391
+ path: byId.get(block.sourceId)?.path ?? block.sourceId
392
+ })),
393
+ secretsWithheld,
394
+ instructions,
395
+ items,
396
+ steeringLimits: steeringLimits(instructions.bytes),
397
+ fingerprints,
398
+ ...legacy ? { legacyInstructions: legacy.path } : {},
399
+ planHash: hashPlan(instructions, items)
400
+ };
401
+ }
402
+ function withOptimizedInstructions(plan, text) {
403
+ const instructions = planInstructions(text);
404
+ return {
405
+ ...plan,
406
+ version: "optimized",
407
+ instructions,
408
+ steeringLimits: steeringLimits(instructions.bytes),
409
+ planHash: hashPlan(instructions, plan.items),
410
+ basePlanHash: plan.basePlanHash ?? plan.planHash
411
+ };
412
+ }
413
+ function isImportUpToDate(plan) {
414
+ return (plan.instructions.status === "same" || plan.instructions.status === "none") && plan.items.every((item) => item.status !== "new");
415
+ }
416
+ function sameFingerprints(a, b) {
417
+ const keys = Object.keys(a);
418
+ return keys.length === Object.keys(b).length && keys.every((key) => a[key] === b[key]);
419
+ }
420
+ function isImportCurrent(plan, state) {
421
+ if (isImportUpToDate(plan)) return true;
422
+ return state?.status === "imported" && state.version === "optimized" && plan.instructions.existing?.empty === false && sameFingerprints(state.fingerprints, plan.fingerprints) && plan.items.every((item) => item.status !== "new");
423
+ }
424
+ function describeImportPlan(plan) {
425
+ const { text: _text, ...instructions } = plan.instructions;
426
+ return {
427
+ version: plan.version,
428
+ agents: plan.agents,
429
+ sources: plan.sources,
430
+ issues: plan.issues,
431
+ sections: plan.sections.map((section) => ({
432
+ heading: section.heading ?? null,
433
+ origins: section.origins.map((origin) => origin.sourceId),
434
+ reaches: section.reaches,
435
+ ...section.managedBy ? { managedBy: section.managedBy } : {}
436
+ })),
437
+ managedBlocks: plan.managedBlocks.map((block) => ({
438
+ path: block.path,
439
+ line: block.line,
440
+ name: block.name,
441
+ note: "later changes won't follow"
442
+ })),
443
+ // `source` is the file, or `<file>#<key>` for a settings value; `line` counts within it.
444
+ secretsWithheld: plan.secretsWithheld.map(({ sourceId, line, pattern }) => ({
445
+ source: sourceId,
446
+ line,
447
+ pattern
448
+ })),
449
+ instructions,
450
+ items: plan.items.map(({ text: _itemText, ...item }) => item),
451
+ conflicts: plan.items.filter((item) => item.status === "conflict").map(({ kind, name, target }) => ({ kind, name, target })),
452
+ steeringLimits: plan.steeringLimits,
453
+ ...plan.legacyInstructions ? { legacyInstructions: plan.legacyInstructions } : {}
454
+ };
455
+ }
456
+
457
+ // src/core/instructions-import/staging.ts
458
+ import { randomBytes } from "crypto";
459
+ import {
460
+ chmodSync,
461
+ closeSync,
462
+ existsSync as existsSync2,
463
+ mkdirSync,
464
+ openSync,
465
+ readFileSync as readFileSync2,
466
+ renameSync,
467
+ rmdirSync,
468
+ statSync,
469
+ unlinkSync,
470
+ writeFileSync
471
+ } from "fs";
472
+ import { basename, dirname as dirname2, join as join2 } from "path";
473
+ import lockfile from "proper-lockfile";
474
+ var ImportActivationError = class extends Error {
475
+ constructor(message, reason) {
476
+ super(message);
477
+ this.reason = reason;
478
+ this.name = "ImportActivationError";
479
+ }
480
+ reason;
481
+ };
482
+ var STAGED_INSTRUCTIONS = "instructions.md";
483
+ var PREVIOUS_INSTRUCTIONS = "previous-instructions.md";
484
+ var ACTIVATE_LOCK = ".activate.lock";
485
+ var LOCK_STALE_MS = 6e4;
486
+ function ensurePrivateDir(dir) {
487
+ mkdirSync(dir, { recursive: true, mode: 448 });
488
+ chmodSync(dir, 448);
489
+ }
490
+ function writePrivateFile(path, text) {
491
+ mkdirSync(dirname2(path), { recursive: true, mode: 448 });
492
+ writeFileSync(path, text, { encoding: "utf8", flag: "wx", mode: 384 });
493
+ }
494
+ function replaceFileAtomically(path, text) {
495
+ mkdirSync(dirname2(path), { recursive: true });
496
+ const temp = join2(
497
+ dirname2(path),
498
+ `.${basename(path)}.${process.pid}-${randomBytes(4).toString("hex")}.tmp`
499
+ );
500
+ let mode;
501
+ try {
502
+ mode = statSync(path).mode & 511;
503
+ } catch {
504
+ mode = void 0;
505
+ }
506
+ writeFileSync(temp, text, { encoding: "utf8", flag: "wx", ...mode ? { mode } : {} });
507
+ try {
508
+ renameSync(temp, path);
509
+ } catch (error) {
510
+ try {
511
+ unlinkSync(temp);
512
+ } catch {
513
+ }
514
+ throw error;
515
+ }
516
+ }
517
+ function writeManifest(staged) {
518
+ staged.manifest.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
519
+ const path = join2(staged.dir, MANIFEST);
520
+ const temp = `${path}.${process.pid}.tmp`;
521
+ writeFileSync(temp, `${JSON.stringify(staged.manifest, null, 2)}
522
+ `, { mode: 384 });
523
+ renameSync(temp, path);
524
+ }
525
+ function importId(now) {
526
+ return now.toISOString().replace(/[-:.]/g, "");
527
+ }
528
+ function stageInstructionsImport(plan, optimization = { status: "none" }) {
529
+ const root = getImportsDir();
530
+ ensurePrivateDir(root);
531
+ const base = importId(/* @__PURE__ */ new Date());
532
+ let id = base;
533
+ let dir = join2(root, id);
534
+ for (let n = 2; ; n++) {
535
+ try {
536
+ mkdirSync(dir, { mode: 448 });
537
+ break;
538
+ } catch (error) {
539
+ if (error.code !== "EEXIST") throw error;
540
+ id = `${base}-${n}`;
541
+ dir = join2(root, id);
542
+ }
543
+ }
544
+ chmodSync(dir, 448);
545
+ const writesInstructions = plan.instructions.status === "new" || plan.instructions.status === "replace";
546
+ if (writesInstructions) writePrivateFile(join2(dir, STAGED_INSTRUCTIONS), plan.instructions.text);
547
+ const items = plan.items.filter((item) => item.status === "new").map((item) => {
548
+ const file = join2(
549
+ item.kind,
550
+ item.kind === "skills" ? `${item.name}/SKILL.md` : `${item.name}.md`
551
+ );
552
+ writePrivateFile(join2(dir, file), item.text);
553
+ return { kind: item.kind, name: item.name, target: item.target, file, sha256: item.sha256 };
554
+ });
555
+ const now = (/* @__PURE__ */ new Date()).toISOString();
556
+ const staged = {
557
+ id,
558
+ dir,
559
+ manifest: {
560
+ schema: 1,
561
+ id,
562
+ status: "staged",
563
+ version: plan.version,
564
+ createdAt: now,
565
+ updatedAt: now,
566
+ planHash: plan.planHash,
567
+ ...plan.basePlanHash ? { basePlanHash: plan.basePlanHash } : {},
568
+ ...writesInstructions ? {
569
+ instructions: {
570
+ target: plan.instructions.target,
571
+ file: STAGED_INSTRUCTIONS,
572
+ sha256: plan.instructions.sha256,
573
+ expectedExistingSha256: plan.instructions.existing?.sha256 ?? null
574
+ }
575
+ } : {},
576
+ items,
577
+ fingerprints: plan.fingerprints,
578
+ secretsWithheld: plan.secretsWithheld,
579
+ optimization
580
+ }
581
+ };
582
+ writeManifest(staged);
583
+ return staged;
584
+ }
585
+ function readStagedInstructions(staged) {
586
+ const file = staged.manifest.instructions?.file;
587
+ return file ? readBuildFile(join2(staged.dir, file)) : void 0;
588
+ }
589
+ function canResumeImport(staged, plan) {
590
+ const { damaged, stale } = checkStagedImport(staged);
591
+ if (damaged.length > 0 || stale.length > 0) return false;
592
+ const instructions = staged.manifest.instructions;
593
+ return staged.manifest.planHash === plan.planHash || staged.manifest.basePlanHash === plan.planHash || instructions !== void 0 && currentSha(instructions.target) === instructions.sha256;
594
+ }
595
+ function markStagedImport(staged, status, error) {
596
+ staged.manifest.status = status;
597
+ if (error) staged.manifest.error = error;
598
+ writeManifest(staged);
599
+ }
600
+ function currentSha(path) {
601
+ const text = readBuildFile(path);
602
+ return text === void 0 ? null : sha256Text(text);
603
+ }
604
+ function checkStagedImport(staged) {
605
+ const damaged = [];
606
+ const stale = [];
607
+ if (staged.manifest.status !== "staged")
608
+ damaged.push(`import ${staged.id} is ${staged.manifest.status}`);
609
+ const files = [
610
+ ...staged.manifest.instructions ? [staged.manifest.instructions] : [],
611
+ ...staged.manifest.items
612
+ ];
613
+ for (const file of files) {
614
+ if (currentSha(join2(staged.dir, file.file)) !== file.sha256) {
615
+ damaged.push(`staged file ${file.file} is missing or changed`);
616
+ }
617
+ }
618
+ const instructions = staged.manifest.instructions;
619
+ const target = instructions ? currentSha(instructions.target) : null;
620
+ if (instructions && target !== instructions.expectedExistingSha256 && target !== instructions.sha256) {
621
+ stale.push(`${instructions.target} changed after this import was prepared`);
622
+ }
623
+ return { damaged, stale };
624
+ }
625
+ function acquireActivationLock() {
626
+ const target = join2(getImportsDir(), ACTIVATE_LOCK);
627
+ ensurePrivateDir(getImportsDir());
628
+ closeSync(openSync(target, "a", 384));
629
+ try {
630
+ return lockfile.lockSync(target, { stale: LOCK_STALE_MS, realpath: false });
631
+ } catch (error) {
632
+ if (error.code === "ELOCKED") {
633
+ throw new ImportActivationError("another import is being installed right now", "busy");
634
+ }
635
+ throw error;
636
+ }
637
+ }
638
+ var AUTOMATED_INHERITANCE = "inheritance.automated";
639
+ async function setAutomatedInheritance() {
640
+ const manager = new ConfigManager();
641
+ const before = await manager.getConfigValue(AUTOMATED_INHERITANCE, "user");
642
+ const result = await manager.setConfigValue(AUTOMATED_INHERITANCE, "build", "user");
643
+ if (!result.success) {
644
+ throw new Error(`could not set ${AUTOMATED_INHERITANCE}: ${result.error ?? "unknown error"}`);
645
+ }
646
+ const undo = () => {
647
+ if (before === "build") return;
648
+ const file = selectedBuildConfigCandidate(getUserConfigFile());
649
+ const edit = { path: AUTOMATED_INHERITANCE.split("."), value: before };
650
+ const restored = writeJsoncEdits(file, [edit], process.cwd());
651
+ if (!restored.success) {
652
+ throw new Error(`could not restore ${AUTOMATED_INHERITANCE}: ${restored.error ?? "unknown"}`);
653
+ }
654
+ };
655
+ return {
656
+ inheritance: { path: getUserConfigFile(), setting: AUTOMATED_INHERITANCE, value: "build" },
657
+ undo
658
+ };
659
+ }
660
+ function createdFolders(dir, firstCreated) {
661
+ if (!firstCreated) return [];
662
+ const folders = [];
663
+ for (let current = dir; ; current = dirname2(current)) {
664
+ folders.push(current);
665
+ if (current === firstCreated || dirname2(current) === current) return folders;
666
+ }
667
+ }
668
+ async function activateStagedImport(staged) {
669
+ const { damaged, stale } = checkStagedImport(staged);
670
+ if (damaged.length > 0) throw new ImportActivationError(damaged.join("; "), "damaged");
671
+ if (stale.length > 0) throw new ImportActivationError(stale.join("; "), "stale");
672
+ const release = acquireActivationLock();
673
+ const changes = { created: [], folders: [] };
674
+ const created = changes.created;
675
+ const skipped = [];
676
+ try {
677
+ try {
678
+ for (const item of staged.manifest.items) {
679
+ const text = readFileSync2(join2(staged.dir, item.file), "utf8");
680
+ if (existsSync2(item.target)) {
681
+ const reason = currentSha(item.target) === item.sha256 ? "same" : "conflict";
682
+ skipped.push({ kind: item.kind, name: item.name, path: item.target, reason });
683
+ continue;
684
+ }
685
+ const folder = dirname2(item.target);
686
+ changes.folders.push(...createdFolders(folder, mkdirSync(folder, { recursive: true })));
687
+ writeFileSync(item.target, text, { encoding: "utf8", flag: "wx" });
688
+ created.push({ kind: item.kind, name: item.name, path: item.target });
689
+ }
690
+ let instructions;
691
+ const staging = staged.manifest.instructions;
692
+ if (staging) {
693
+ const previousCopy = join2(staged.dir, PREVIOUS_INSTRUCTIONS);
694
+ const before = staging.expectedExistingSha256 === null ? null : readBuildFile(previousCopy) ?? readBuildFile(staging.target) ?? null;
695
+ if (before !== null && !existsSync2(previousCopy)) writePrivateFile(previousCopy, before);
696
+ changes.previous = { target: staging.target, text: before };
697
+ replaceFileAtomically(staging.target, readFileSync2(join2(staged.dir, staging.file), "utf8"));
698
+ instructions = {
699
+ path: staging.target,
700
+ replaced: before !== null,
701
+ ...before !== null ? { previousCopy } : {}
702
+ };
703
+ }
704
+ const { inheritance, undo } = await setAutomatedInheritance();
705
+ changes.undoInheritance = undo;
706
+ const state = recordInstructionsImportState({
707
+ status: "imported",
708
+ version: staged.manifest.version,
709
+ importId: staged.id,
710
+ fingerprints: staged.manifest.fingerprints,
711
+ optimization: staged.manifest.optimization ?? { status: "none" }
712
+ });
713
+ staged.manifest.status = "activated";
714
+ writeManifest(staged);
715
+ return {
716
+ id: staged.id,
717
+ ...instructions ? { instructions } : {},
718
+ created,
719
+ skipped,
720
+ inheritance,
721
+ state
722
+ };
723
+ } catch (error) {
724
+ let message = errorText(error);
725
+ const failures = rollBack(changes, staged.dir);
726
+ if (failures.length > 0) message += `; ${failures.join("; ")}`;
727
+ const reason = failures.length > 0 ? "unrestored" : "failed";
728
+ try {
729
+ markStagedImport(staged, "failed", message);
730
+ } catch {
731
+ }
732
+ throw new ImportActivationError(message, reason);
733
+ }
734
+ } finally {
735
+ release();
736
+ }
737
+ }
738
+ function rollBack(changes, stagingDir) {
739
+ const failures = [];
740
+ for (const item of [...changes.created].reverse()) {
741
+ try {
742
+ unlinkSync(item.path);
743
+ } catch {
744
+ }
745
+ }
746
+ for (const folder of [...changes.folders].sort((a, b) => b.length - a.length)) {
747
+ try {
748
+ rmdirSync(folder);
749
+ } catch {
750
+ }
751
+ }
752
+ const previous = changes.previous;
753
+ try {
754
+ if (previous?.text === null) {
755
+ if (existsSync2(previous.target)) unlinkSync(previous.target);
756
+ } else if (previous) {
757
+ replaceFileAtomically(previous.target, previous.text);
758
+ }
759
+ } catch (error) {
760
+ failures.push(
761
+ `restoring the previous instructions failed (${errorText(error)}); a copy is in ${stagingDir}`
762
+ );
763
+ }
764
+ try {
765
+ changes.undoInheritance?.();
766
+ } catch (error) {
767
+ failures.push(errorText(error));
768
+ }
769
+ return failures;
770
+ }
771
+ function errorText(error) {
772
+ return error instanceof Error ? error.message : String(error);
773
+ }
774
+ function declineStagedImport(staged, fingerprints, version = "verbatim") {
775
+ if (staged) markStagedImport(staged, "declined");
776
+ if (readInstructionsImportState()?.status === "imported") return;
777
+ recordInstructionsImportState({ status: "declined", version, fingerprints });
778
+ }
779
+
780
+ // src/cli/commands/instructions-import.ts
781
+ import chalk from "chalk";
782
+ import { Command } from "commander";
783
+
784
+ // src/core/instructions-import/optimize.ts
785
+ import { mkdtempSync } from "fs";
786
+ import { tmpdir } from "os";
787
+ import { join as join3 } from "path";
788
+ var OPTIMIZED_INSTRUCTIONS_BUDGET_BYTES = Math.min(
789
+ ...STEERING_PROVIDERS.map((provider) => resolveSteeringChannelCaps(provider).hardRefuseBytes)
790
+ ) - runtimeSteeringBytes(0);
791
+ var OPTIMIZE_TIMEOUT_SECONDS = 600;
792
+ var OPTIMIZE_AGENT_ROLE = "instructions-import";
793
+ var OPEN_TAG = "<instructions>";
794
+ var CLOSE_TAG = "</instructions>";
795
+ var MAX_REASON_CHARS = 240;
796
+ function shortReason(error) {
797
+ const text = (error instanceof Error ? error.message : String(error)).trim();
798
+ const line = text.split("\n")[0] ?? "";
799
+ return line.length > MAX_REASON_CHARS ? `${line.slice(0, MAX_REASON_CHARS - 3)}...` : line;
800
+ }
801
+ function resolveImportOptimizer(cwd = process.cwd()) {
802
+ let resolved;
803
+ try {
804
+ resolved = resolveJudgeConfig(void 0, cwd);
805
+ } catch (error) {
806
+ return { ready: false, reason: shortReason(error) };
807
+ }
808
+ const provider = resolved.provider.value;
809
+ if (!isProviderCliResolvable(provider)) {
810
+ return { ready: false, reason: `the ${provider} CLI was not found` };
811
+ }
812
+ return {
813
+ ready: true,
814
+ provider,
815
+ model: resolved.model.value,
816
+ ...resolved.reasoningEffort ? { reasoningEffort: resolved.reasoningEffort.value } : {}
817
+ };
818
+ }
819
+ function buildOptimizePrompt(plan, env = process.env) {
820
+ const budget = OPTIMIZED_INSTRUCTIONS_BUDGET_BYTES;
821
+ const sections = plan.sections.map((section) => {
822
+ const from = section.origins.map((origin) => displayPath(origin.sourceId, env)).join(", ");
823
+ return `<section from="${from}" agents="${section.reaches.join(", ")}">
824
+ ${section.text}
825
+ </section>`;
826
+ });
827
+ return [
828
+ "Rewrite a person's global instructions for AI coding agents as one short instructions file.",
829
+ "",
830
+ "Build gives this file to every agent it launches, in place of the global instructions each agent loads on its own. The sections below are what those agents load today, already cleaned: exact duplicates removed and possible secrets left out. Each section names the files it came from and the agents that load it today.",
831
+ "",
832
+ "Write the file so that it:",
833
+ "- Keeps the meaning of every rule. Do not drop, weaken, or add a rule.",
834
+ "- Merges rules that say the same thing, and cuts repetition, filler, and examples that only restate a rule.",
835
+ '- Keeps a short scope note, such as "(Codex only)", on a rule that applies to only one agent: its text is about that agent, or only that agent loads it today.',
836
+ "- Uses plain markdown: short headings and bullet points.",
837
+ `- Fits in ${budget} bytes of UTF-8 text (about ${Math.floor(budget / 7)} words).`,
838
+ "- Contains no secrets, tokens, passwords, or keys.",
839
+ "",
840
+ `Reply with only the file, between a line ${OPEN_TAG} and a line ${CLOSE_TAG}.`,
841
+ "",
842
+ ...sections,
843
+ ""
844
+ ].join("\n");
845
+ }
846
+ function isPlainText(text) {
847
+ for (let i = 0; i < text.length; i++) {
848
+ const code = text.charCodeAt(i);
849
+ if (code < 32 && code !== 9 && code !== 10 && code !== 13 || code === 127) {
850
+ return false;
851
+ }
852
+ }
853
+ return true;
854
+ }
855
+ function isMarkdownText(text) {
856
+ if (!isPlainText(text) || !new RegExp("\\p{L}", "u").test(text)) return false;
857
+ if (/^[{[]/.test(text)) {
858
+ try {
859
+ JSON.parse(text);
860
+ return false;
861
+ } catch {
862
+ }
863
+ }
864
+ return true;
865
+ }
866
+ function checkOptimizedReply(reply) {
867
+ const start = reply.indexOf(OPEN_TAG);
868
+ const end = reply.lastIndexOf(CLOSE_TAG);
869
+ if (start === -1 || end <= start) {
870
+ return { ok: false, reason: `the reply had no ${OPEN_TAG} block` };
871
+ }
872
+ let body = reply.slice(start + OPEN_TAG.length, end).trim();
873
+ const fenced = /^(```|~~~)[\w-]*\n([\s\S]*)\n\1$/.exec(body);
874
+ if (fenced?.[2] !== void 0) body = fenced[2].trim();
875
+ if (body === "") return { ok: false, reason: "the reply was empty" };
876
+ if (!isMarkdownText(body)) return { ok: false, reason: "the reply was not markdown text" };
877
+ const secret = withholdSecrets(body, { sourceId: "reply", path: "reply" }).withheld[0];
878
+ if (secret) {
879
+ return {
880
+ ok: false,
881
+ reason: `the reply had a possible secret (${secret.pattern}, line ${secret.line})`
882
+ };
883
+ }
884
+ const text = `${body}
885
+ `;
886
+ const bytes = byteLength(text);
887
+ if (bytes > OPTIMIZED_INSTRUCTIONS_BUDGET_BYTES) {
888
+ return {
889
+ ok: false,
890
+ reason: `the reply was ${bytes} bytes, over the ${OPTIMIZED_INSTRUCTIONS_BUDGET_BYTES}-byte budget`
891
+ };
892
+ }
893
+ return { ok: true, text };
894
+ }
895
+ async function optimizeInstructionsImport(plan, options = {}) {
896
+ if (plan.instructions.text === "") {
897
+ return { ok: false, reason: "there are no instructions to optimize" };
898
+ }
899
+ const optimizer = options.optimizer ?? resolveImportOptimizer();
900
+ if (!optimizer.ready) return { ok: false, reason: `no ready provider (${optimizer.reason})` };
901
+ const scratchRoot = tmpdir();
902
+ const scratch = mkdtempSync(join3(scratchRoot, "build-instructions-optimize-"));
903
+ let reply;
904
+ try {
905
+ const result = await new LlmJudgeExecutor().evaluate(buildOptimizePrompt(plan, options.env), {
906
+ provider: optimizer.provider,
907
+ model: optimizer.model,
908
+ ...optimizer.reasoningEffort ? { reasoningEffort: optimizer.reasoningEffort } : {},
909
+ workingDir: scratch,
910
+ timeoutSeconds: OPTIMIZE_TIMEOUT_SECONDS,
911
+ // One call: a failure falls back to the verbatim version instead of retrying.
912
+ maxAttempts: 1,
913
+ requireThinking: false,
914
+ showProgress: false,
915
+ env: { BUILD_AGENT_ROLE: OPTIMIZE_AGENT_ROLE }
916
+ });
917
+ reply = result.output;
918
+ } catch (error) {
919
+ return { ok: false, reason: `the ${optimizer.provider} call failed: ${shortReason(error)}` };
920
+ } finally {
921
+ await safeRmDir(scratch, { protectedPaths: [scratchRoot], managedRoots: [scratchRoot] }).catch(
922
+ () => void 0
923
+ );
924
+ }
925
+ const checked = checkOptimizedReply(reply);
926
+ if (!checked.ok) return checked;
927
+ return {
928
+ ok: true,
929
+ plan: withOptimizedInstructions(plan, checked.text),
930
+ provider: optimizer.provider
931
+ };
932
+ }
933
+ async function prepareOptimizedImport(plan, options = {}) {
934
+ const result = await optimizeInstructionsImport(plan, options);
935
+ return result.ok ? { plan: result.plan, optimization: { status: "done", provider: result.provider } } : { plan, optimization: { status: "pending", reason: result.reason } };
936
+ }
937
+
938
+ // src/cli/utils/line-diff.ts
939
+ function splitLinesForDiff(text) {
940
+ const normalized = text.replace(/\r\n/g, "\n");
941
+ const lines = normalized.split("\n");
942
+ if (lines.length > 0 && lines[lines.length - 1] === "") {
943
+ lines.pop();
944
+ }
945
+ return lines;
946
+ }
947
+ function formatLineDiff(before, after, labels) {
948
+ const a = splitLinesForDiff(before);
949
+ const b = splitLinesForDiff(after);
950
+ const dp = Array.from(
951
+ { length: a.length + 1 },
952
+ () => Array.from({ length: b.length + 1 }, () => 0)
953
+ );
954
+ const score = (i2, j2) => dp[i2]?.[j2] ?? 0;
955
+ for (let i2 = a.length - 1; i2 >= 0; i2--) {
956
+ for (let j2 = b.length - 1; j2 >= 0; j2--) {
957
+ const beforeLine = a[i2] ?? "";
958
+ const afterLine = b[j2] ?? "";
959
+ const row = dp[i2];
960
+ if (!row) continue;
961
+ row[j2] = beforeLine === afterLine ? score(i2 + 1, j2 + 1) + 1 : Math.max(score(i2 + 1, j2), score(i2, j2 + 1));
962
+ }
963
+ }
964
+ const lines = [`--- ${labels.before}`, `+++ ${labels.after}`, "@@"];
965
+ let i = 0;
966
+ let j = 0;
967
+ while (i < a.length || j < b.length) {
968
+ if (i < a.length && j < b.length && a[i] === b[j]) {
969
+ lines.push(` ${a[i]}`);
970
+ i++;
971
+ j++;
972
+ } else if (j < b.length && (i === a.length || score(i, j + 1) >= score(i + 1, j))) {
973
+ lines.push(`+${b[j]}`);
974
+ j++;
975
+ } else if (i < a.length) {
976
+ lines.push(`-${a[i]}`);
977
+ i++;
978
+ }
979
+ }
980
+ return lines;
981
+ }
982
+
983
+ // src/cli/commands/instructions-import.ts
984
+ var IMPORT_VERSIONS = ["optimized", "verbatim"];
985
+ var OPTIMIZE_COMMAND = "build config instructions import --optimize";
986
+ function hasNothingToImport(plan) {
987
+ return plan.instructions.status === "none" && plan.items.length === 0;
988
+ }
989
+ function planStatus(plan, state) {
990
+ if (hasNothingToImport(plan)) return "nothing-to-import";
991
+ return isImportCurrent(plan, state) ? "up-to-date" : "ready";
992
+ }
993
+ function steeringLimitLines(plan) {
994
+ const version = `With the ${plan.version} version`;
995
+ return plan.steeringLimits.map(
996
+ (limit) => limit.status === "hard-refuse" ? `Warning: ${version}, ${limit.provider} runtime steering would be ${limit.bytes} bytes, over its ${limit.hardRefuseBytes}-byte limit, so its runs would start with a size warning (see build config instructions lint).` : `Info: ${version}, ${limit.provider} runtime steering would be ${limit.bytes} bytes, over its ${limit.softWarnBytes}-byte soft limit.`
997
+ );
998
+ }
999
+ function renderPlan(plan) {
1000
+ const show = (path) => displayPath(path);
1001
+ console.log("Instructions import");
1002
+ console.log("Sources:");
1003
+ for (const source of plan.sources) {
1004
+ const key = source.kind === "setting" ? ` ${source.id.slice(source.path.length + 1)}` : "";
1005
+ const from = source.includedFrom ? `, included from ${show(source.includedFrom)}` : "";
1006
+ console.log(` ${show(source.path)}${key} (loaded by ${source.reaches.join(", ")}${from})`);
1007
+ }
1008
+ const duplicates = plan.sections.reduce((sum, section) => sum + section.origins.length - 1, 0);
1009
+ console.log(`Sections: ${plan.sections.length} (${duplicates} duplicates removed)`);
1010
+ console.log("Reaches today:");
1011
+ for (const agent of plan.agents) {
1012
+ const detail = agent.homeFound ? `${agent.sections} of ${plan.sections.length} sections` : `not set up (${show(agent.home)})`;
1013
+ console.log(` ${agent.agent}: ${detail}`);
1014
+ }
1015
+ if (plan.managedBlocks.length > 0) {
1016
+ console.log("Maintained by another tool (later changes won't follow):");
1017
+ for (const block of plan.managedBlocks) {
1018
+ console.log(` ${show(block.path)}:${block.line} ${block.name}`);
1019
+ }
1020
+ }
1021
+ if (plan.secretsWithheld.length > 0) {
1022
+ console.log("Left out as possible secrets:");
1023
+ for (const secret of plan.secretsWithheld) {
1024
+ console.log(` ${show(secret.sourceId)}:${secret.line} ${secret.pattern}`);
1025
+ }
1026
+ }
1027
+ if (plan.issues.length > 0) {
1028
+ console.log("Not read:");
1029
+ for (const issue of plan.issues) {
1030
+ const from = issue.includedFrom ? ` (named in ${show(issue.includedFrom)})` : "";
1031
+ console.log(` ${show(issue.path)}: ${issue.problem}${from}`);
1032
+ }
1033
+ }
1034
+ for (const item of plan.items) {
1035
+ const note = item.status === "conflict" ? "conflict, left unchanged" : item.status;
1036
+ console.log(`Adds ${item.kind} "${item.name}": ${show(item.target)} (${note})`);
1037
+ }
1038
+ if (plan.instructions.status !== "none") {
1039
+ console.log(
1040
+ `Writes: ${show(plan.instructions.target)} (${plan.instructions.status}; verbatim version ${plan.instructions.bytes} bytes)`
1041
+ );
1042
+ }
1043
+ if (plan.legacyInstructions) {
1044
+ console.log(
1045
+ `Info: ${show(plan.legacyInstructions)} is included and stops being read once instructions.md exists.`
1046
+ );
1047
+ }
1048
+ for (const line of steeringLimitLines(plan)) console.log(line);
1049
+ }
1050
+ function renderDifference(plan) {
1051
+ const before = readBuildFile(plan.instructions.target) ?? "";
1052
+ for (const line of formatLineDiff(before, plan.instructions.text, {
1053
+ before: `${displayPath(plan.instructions.target)} (now)`,
1054
+ after: `${displayPath(plan.instructions.target)} (after import)`
1055
+ })) {
1056
+ if (line.startsWith("+") && !line.startsWith("+++")) console.log(chalk.green(line));
1057
+ else if (line.startsWith("-") && !line.startsWith("---")) console.log(chalk.red(line));
1058
+ else console.log(line);
1059
+ }
1060
+ }
1061
+ function resultLines(result, plan) {
1062
+ const lines = [];
1063
+ if (result.instructions) {
1064
+ const verb = result.instructions.replaced ? "Replaced" : "Installed";
1065
+ const copy = result.instructions.previousCopy ? ` (previous copy: ${displayPath(result.instructions.previousCopy)})` : "";
1066
+ lines.push(
1067
+ `OK: ${verb} ${displayPath(result.instructions.path)} with the ${result.state.version} version${copy}`
1068
+ );
1069
+ }
1070
+ for (const item of result.created) {
1071
+ lines.push(`OK: Added ${item.kind} "${item.name}": ${displayPath(item.path)}`);
1072
+ }
1073
+ for (const item of result.skipped.filter((skip) => skip.reason === "conflict")) {
1074
+ lines.push(
1075
+ `Warning: ${item.kind} "${item.name}" already exists at ${displayPath(item.path)}; left it unchanged.`
1076
+ );
1077
+ }
1078
+ lines.push(
1079
+ `Info: Set ${result.inheritance.setting} = ${result.inheritance.value} in ${displayPath(result.inheritance.path)}, so each agent Build launches gets these rules once, from Build.`
1080
+ );
1081
+ if (plan.legacyInstructions) {
1082
+ lines.push(`Info: ${displayPath(plan.legacyInstructions)} is no longer read.`);
1083
+ }
1084
+ lines.push(...optimizationLines(result.state.optimization));
1085
+ return lines;
1086
+ }
1087
+ function optimizationLines(optimization) {
1088
+ if (optimization.status === "pending") {
1089
+ return [
1090
+ `Info: The optimized version is pending (${optimization.reason}). Run "${OPTIMIZE_COMMAND}" in a terminal to finish it.`
1091
+ ];
1092
+ }
1093
+ if (optimization.status === "failed") {
1094
+ return [
1095
+ `Info: The last optimization failed (${optimization.reason}). Run "${OPTIMIZE_COMMAND}" in a terminal to try again.`
1096
+ ];
1097
+ }
1098
+ return [];
1099
+ }
1100
+ async function askLine(question) {
1101
+ const readline = await import("readline");
1102
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
1103
+ try {
1104
+ return await new Promise((resolve) => rl.question(question, resolve));
1105
+ } finally {
1106
+ rl.close();
1107
+ }
1108
+ }
1109
+ async function askYesNo(question) {
1110
+ return isYesAnswer(await askLine(question));
1111
+ }
1112
+ async function askVersion(provider) {
1113
+ const answer = (await askLine(
1114
+ `Install which version? [O]ptimized (one ${provider} call, no tools) / [v]erbatim (no model call) / [n]either: `
1115
+ )).trim().toLowerCase();
1116
+ if (answer === "" || answer === "o" || answer === "optimized") return "optimized";
1117
+ if (answer === "v" || answer === "verbatim") return "verbatim";
1118
+ return void 0;
1119
+ }
1120
+ function planForStagedImport(staged, plan) {
1121
+ const text = staged.manifest.version === "optimized" ? readStagedInstructions(staged) : void 0;
1122
+ return text === void 0 ? plan : withOptimizedInstructions(plan, text);
1123
+ }
1124
+ function isInteractive() {
1125
+ return Boolean(process.stdin.isTTY && process.stdout.isTTY);
1126
+ }
1127
+ function refuseScriptedReplace(plan) {
1128
+ const existing = plan.instructions.existing;
1129
+ if (!existing || existing.empty) return false;
1130
+ console.error(
1131
+ `Error: ${displayPath(plan.instructions.target)} already has content, so the optimized version needs a shown difference and your confirmation. Run "build config instructions import" in a terminal.`
1132
+ );
1133
+ process.exitCode = 1;
1134
+ return true;
1135
+ }
1136
+ function reportOptimized(optimized, verbatim) {
1137
+ console.log(
1138
+ `Info: Optimized version: ${optimized.instructions.bytes} bytes (verbatim version: ${verbatim.instructions.bytes} bytes).`
1139
+ );
1140
+ }
1141
+ function runCheck(plan, state, json) {
1142
+ const pending = findPendingImport();
1143
+ const report = {
1144
+ status: planStatus(plan, state),
1145
+ ...describeImportPlan(plan),
1146
+ pending: pending ? {
1147
+ id: pending.id,
1148
+ version: pending.manifest.version,
1149
+ createdAt: pending.manifest.createdAt,
1150
+ current: pending.manifest.planHash === plan.planHash || pending.manifest.basePlanHash === plan.planHash,
1151
+ ...pending.manifest.optimization ? { optimization: pending.manifest.optimization } : {}
1152
+ } : null,
1153
+ state: state ?? null
1154
+ };
1155
+ if (json) {
1156
+ console.log(JSON.stringify(report, null, 2));
1157
+ return;
1158
+ }
1159
+ renderPlan(plan);
1160
+ if (report.pending) {
1161
+ console.log(`Info: an unfinished import from ${report.pending.createdAt} is waiting.`);
1162
+ }
1163
+ for (const line of state ? optimizationLines(state.optimization) : []) console.log(line);
1164
+ console.log(`Status: ${report.status}`);
1165
+ }
1166
+ async function reviewAndActivate(input) {
1167
+ const { plan, staged, yes } = input;
1168
+ const replacing = plan.instructions.status === "replace";
1169
+ if (replacing || !yes && plan.version === "optimized") renderDifference(plan);
1170
+ if (replacing && yes) {
1171
+ console.error(
1172
+ `Error: ${displayPath(plan.instructions.target)} already has content. Review the difference above, then run "build config instructions import" in a terminal to confirm. The prepared import is kept.`
1173
+ );
1174
+ process.exitCode = 1;
1175
+ return;
1176
+ }
1177
+ if (!yes && (replacing || plan.version === "optimized" || !input.agreed)) {
1178
+ const instead = input.instead ? " instead" : "";
1179
+ const question = replacing ? `Replace ${displayPath(plan.instructions.target)} with the ${plan.version} import${instead}? [y/N] ` : `Install the ${plan.version} import${instead}? [y/N] `;
1180
+ if (!await askYesNo(question)) {
1181
+ declineStagedImport(staged, input.verbatim.fingerprints, plan.version);
1182
+ console.log("No changes made.");
1183
+ return;
1184
+ }
1185
+ }
1186
+ try {
1187
+ for (const line of resultLines(await activateStagedImport(staged), plan)) console.log(line);
1188
+ } catch (error) {
1189
+ const message = error instanceof Error ? error.message : String(error);
1190
+ console.error(`Error: import not installed: ${message}`);
1191
+ if (error instanceof ImportActivationError && error.reason === "failed") {
1192
+ console.error("Your previous instructions are unchanged.");
1193
+ }
1194
+ process.exitCode = 1;
1195
+ }
1196
+ }
1197
+ async function runOptimize(plan, state, yes) {
1198
+ if (state?.status !== "imported") {
1199
+ console.log('Info: Nothing is imported yet; run "build config instructions import".');
1200
+ return;
1201
+ }
1202
+ if (state.version === "optimized") {
1203
+ console.log("OK: The optimized version is already installed.");
1204
+ return;
1205
+ }
1206
+ if (plan.instructions.text === "") {
1207
+ console.log("No agent instruction files found; nothing to optimize.");
1208
+ return;
1209
+ }
1210
+ if (!yes && !isInteractive()) {
1211
+ console.error(`Error: confirmation needed. Run "${OPTIMIZE_COMMAND}" in a terminal.`);
1212
+ process.exitCode = 1;
1213
+ return;
1214
+ }
1215
+ if (yes && refuseScriptedReplace(plan)) return;
1216
+ const pending = findPendingImport();
1217
+ if (pending?.manifest.version === "optimized" && canResumeImport(pending, plan)) {
1218
+ console.log(
1219
+ `Info: finishing the import prepared ${pending.manifest.createdAt} (optimized version).`
1220
+ );
1221
+ const optimized = planForStagedImport(pending, plan);
1222
+ await reviewAndActivate({
1223
+ verbatim: plan,
1224
+ plan: optimized,
1225
+ staged: pending,
1226
+ yes,
1227
+ agreed: true
1228
+ });
1229
+ return;
1230
+ }
1231
+ const optimizer = resolveImportOptimizer();
1232
+ if (optimizer.ready) {
1233
+ console.log(
1234
+ `Info: Making the optimized version with ${optimizer.provider} (one model call, no tools).`
1235
+ );
1236
+ }
1237
+ const result = await optimizeInstructionsImport(plan, { optimizer });
1238
+ if (!result.ok) {
1239
+ recordImportOptimization({
1240
+ status: "failed",
1241
+ reason: result.reason,
1242
+ date: (/* @__PURE__ */ new Date()).toISOString()
1243
+ });
1244
+ console.error(
1245
+ `Error: no optimized version: ${result.reason}. Your installed instructions are unchanged.`
1246
+ );
1247
+ process.exitCode = 1;
1248
+ return;
1249
+ }
1250
+ reportOptimized(result.plan, plan);
1251
+ if (pending) markStagedImport(pending, "superseded");
1252
+ const staged = stageInstructionsImport(result.plan, {
1253
+ status: "done",
1254
+ provider: result.provider
1255
+ });
1256
+ await reviewAndActivate({ verbatim: plan, plan: result.plan, staged, yes, agreed: true });
1257
+ }
1258
+ function readUseOption(options) {
1259
+ if (options.use === void 0) return void 0;
1260
+ const use = IMPORT_VERSIONS.find((version) => version === options.use);
1261
+ if (!use) {
1262
+ console.error(`Error: --use takes ${IMPORT_VERSIONS.join(" or ")}.`);
1263
+ process.exitCode = 1;
1264
+ return null;
1265
+ }
1266
+ return use;
1267
+ }
1268
+ async function runInstructionsImport(options) {
1269
+ if (options.json && !options.check) {
1270
+ console.error("Error: --json needs --check.");
1271
+ process.exitCode = 1;
1272
+ return;
1273
+ }
1274
+ if (options.check && options.yes) {
1275
+ console.error("Error: --check writes nothing; drop --yes.");
1276
+ process.exitCode = 1;
1277
+ return;
1278
+ }
1279
+ if (options.check && (options.use !== void 0 || options.optimize)) {
1280
+ console.error("Error: --check calls no model; drop --use and --optimize.");
1281
+ process.exitCode = 1;
1282
+ return;
1283
+ }
1284
+ const use = readUseOption(options);
1285
+ if (use === null) return;
1286
+ if (options.optimize && use === "verbatim") {
1287
+ console.error("Error: --optimize installs the optimized version; drop --use verbatim.");
1288
+ process.exitCode = 1;
1289
+ return;
1290
+ }
1291
+ const plan = planInstructionsImport();
1292
+ const state = readInstructionsImportState();
1293
+ if (options.check) {
1294
+ runCheck(plan, state, options.json === true);
1295
+ return;
1296
+ }
1297
+ const yes = options.yes === true;
1298
+ if (options.optimize) {
1299
+ await runOptimize(plan, state, yes);
1300
+ return;
1301
+ }
1302
+ const wanted = use ?? (yes ? "verbatim" : void 0);
1303
+ const pending = findPendingImport();
1304
+ const resumable = pending !== void 0 && (wanted === void 0 || pending.manifest.version === wanted) && canResumeImport(pending, plan);
1305
+ if (!resumable && hasNothingToImport(plan)) {
1306
+ console.log("No agent instruction files found; nothing to import.");
1307
+ return;
1308
+ }
1309
+ if (!resumable && isImportCurrent(plan, state)) {
1310
+ console.log("OK: Build already has these instructions.");
1311
+ const owed = state ? optimizationLines(state.optimization) : [];
1312
+ if (owed.length === 0 && wanted === "optimized" && state?.version === "verbatim") {
1313
+ owed.push(`Info: Run "${OPTIMIZE_COMMAND}" to replace the verbatim version.`);
1314
+ }
1315
+ for (const line of owed) console.log(line);
1316
+ return;
1317
+ }
1318
+ if (!yes && !isInteractive()) {
1319
+ renderPlan(plan);
1320
+ console.error(
1321
+ "Error: confirmation needed. Run in a terminal, or add --yes to install the verbatim version."
1322
+ );
1323
+ process.exitCode = 1;
1324
+ return;
1325
+ }
1326
+ renderPlan(plan);
1327
+ if (resumable && pending) {
1328
+ console.log(
1329
+ `Info: finishing the import prepared ${pending.manifest.createdAt} (${pending.manifest.version} version).`
1330
+ );
1331
+ const resumed = planForStagedImport(pending, plan);
1332
+ await reviewAndActivate({ verbatim: plan, plan: resumed, staged: pending, yes, agreed: false });
1333
+ return;
1334
+ }
1335
+ let version = wanted;
1336
+ let agreed = false;
1337
+ const optimizer = version === "verbatim" ? void 0 : resolveImportOptimizer();
1338
+ if (version === void 0 && optimizer?.ready) {
1339
+ version = await askVersion(optimizer.provider);
1340
+ if (version === void 0) {
1341
+ declineStagedImport(void 0, plan.fingerprints);
1342
+ console.log("No changes made.");
1343
+ return;
1344
+ }
1345
+ agreed = true;
1346
+ }
1347
+ let install = plan;
1348
+ let optimization = { status: "none" };
1349
+ if (version !== "verbatim") {
1350
+ if (yes && refuseScriptedReplace(plan)) return;
1351
+ if (optimizer?.ready) {
1352
+ console.log(
1353
+ `Info: Making the optimized version with ${optimizer.provider} (one model call, no tools).`
1354
+ );
1355
+ }
1356
+ ({ plan: install, optimization } = await prepareOptimizedImport(plan, { optimizer }));
1357
+ if (optimization.status === "pending") {
1358
+ console.error(
1359
+ `Warning: no optimized version: ${optimization.reason}. ${yes ? "Installing" : "Offering"} the verbatim version instead.`
1360
+ );
1361
+ agreed = false;
1362
+ } else {
1363
+ reportOptimized(install, plan);
1364
+ }
1365
+ }
1366
+ if (pending) markStagedImport(pending, "superseded");
1367
+ const staged = stageInstructionsImport(install, optimization);
1368
+ await reviewAndActivate({
1369
+ verbatim: plan,
1370
+ plan: install,
1371
+ staged,
1372
+ yes,
1373
+ agreed,
1374
+ instead: optimization.status === "pending"
1375
+ });
1376
+ }
1377
+ function createInstructionsImportCommand() {
1378
+ return new Command("import").description("Bring your agents' global instructions into Build").option(
1379
+ "--yes",
1380
+ "Install without prompting: the verbatim version, or the optimized one with --use optimized",
1381
+ false
1382
+ ).option("--use <version>", "Version to install: optimized or verbatim").option("--optimize", "Replace an installed verbatim version with the optimized one", false).option("--check", "Report what an import would do; writes nothing, calls no model", false).option("--json", "With --check, print the report as JSON", false).action(async (options) => {
1383
+ await runInstructionsImport(options);
1384
+ });
1385
+ }
1386
+
1387
+ export {
1388
+ displayPath,
1389
+ planInstructionsImport,
1390
+ isImportCurrent,
1391
+ ImportActivationError,
1392
+ stageInstructionsImport,
1393
+ canResumeImport,
1394
+ markStagedImport,
1395
+ activateStagedImport,
1396
+ declineStagedImport,
1397
+ resolveImportOptimizer,
1398
+ prepareOptimizedImport,
1399
+ formatLineDiff,
1400
+ hasNothingToImport,
1401
+ steeringLimitLines,
1402
+ renderDifference,
1403
+ resultLines,
1404
+ askYesNo,
1405
+ planForStagedImport,
1406
+ createInstructionsImportCommand
1407
+ };
1408
+ //# sourceMappingURL=chunk-NHNPEZS4.js.map