@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.
- package/.build-project/providers/catalog.json +13951 -0
- package/.build-project/providers/pricing.json +1978 -0
- package/.build-project/providers/registry.json +4103 -0
- package/.github/SECURITY.md +75 -0
- package/.nvmrc +1 -0
- package/CHANGELOG.md +661 -0
- package/CODE_OF_CONDUCT.md +44 -0
- package/CONTRIBUTING.md +24 -0
- package/INSTALL.md +623 -0
- package/LICENSE +21 -0
- package/README.md +118 -2
- package/THIRD_PARTY_NOTICES.txt +26 -0
- package/dist/ai-judge-UE5UOYOO.js +191 -0
- package/dist/allowlist-grounding-KPLN6NC5.js +16 -0
- package/dist/allowlist-utils-MZZKKXRD.js +31 -0
- package/dist/apply-completion-mode-EM37UZHB.js +110 -0
- package/dist/artifact-migrator-WPACNSEP.js +276 -0
- package/dist/ask-2OZ4JFQR.js +176 -0
- package/dist/auth-6UKBTJUQ.js +185 -0
- package/dist/auth-H5KJL6HL.js +165 -0
- package/dist/auth-LVJRJDMU.js +12 -0
- package/dist/auth-NHZOCNRR.js +94 -0
- package/dist/auth-PBXHWXGW.js +95 -0
- package/dist/auth-T7Y5DCAH.js +91 -0
- package/dist/auth-TVVKCHQW.js +13 -0
- package/dist/auth-UHB2UCSS.js +97 -0
- package/dist/auth-VACA3VUL.js +98 -0
- package/dist/auth-VVLC77S3.js +44 -0
- package/dist/auth-liveness-XO4AGDDD.js +53 -0
- package/dist/autoloop-cleanup-SI3VGAAR.js +106 -0
- package/dist/autoloop-evidence-gates-J5GG5YQB.js +39 -0
- package/dist/autoloop-gate-policy-SUNAEP6Q.js +169 -0
- package/dist/autoloop-helpers-VQGQNTT6.js +52 -0
- package/dist/autoloop-ledger-P6TIDP7C.js +96 -0
- package/dist/autoloop-ledger-subscriber-HFAGOZXH.js +161 -0
- package/dist/autoloop-run-defaults-GWGZBNT7.js +27 -0
- package/dist/autoloop-run-lock-GBWRM5A2.js +197 -0
- package/dist/autoloop-success-C32QVWOP.js +93 -0
- package/dist/autoloop-termination-summary-GI6IBQWD.js +58 -0
- package/dist/autoloop-trajectory-AMKSQISD.js +70 -0
- package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
- package/dist/automatic-branch-cleanup-R62X2C5O.js +49 -0
- package/dist/autonomous-loop-controller-2WL363LW.js +4386 -0
- package/dist/backend-YUTFDZXZ.js +30 -0
- package/dist/background-executor-Z3ODTMD7.js +260 -0
- package/dist/backlog-75QPEAMW.js +403 -0
- package/dist/backlog-execution-intent-GWUV5TUK.js +19 -0
- package/dist/backup-active-store-XHWLN34M.js +16 -0
- package/dist/backup-machine-stores-UI4LTJOY.js +251 -0
- package/dist/backup-telemetry-db-Z4ICYCNW.js +26 -0
- package/dist/branch-archive-manager-FMSQ7YJF.js +18 -0
- package/dist/branch-cleanup-manager-ST6FJGND.js +35 -0
- package/dist/build-gate-7NKWPY62.js +68 -0
- package/dist/build-root-S7DINODY.js +18 -0
- package/dist/change-summary-R6CB6VXJ.js +50 -0
- package/dist/chunk-24MNKKOM.js +173 -0
- package/dist/chunk-2H6VZFIO.js +235 -0
- package/dist/chunk-2JIX3EKV.js +39 -0
- package/dist/chunk-2KO7HVZM.js +106 -0
- package/dist/chunk-2L36U25O.js +100 -0
- package/dist/chunk-2NMNFUQA.js +475 -0
- package/dist/chunk-2OUAEH67.js +83 -0
- package/dist/chunk-2VLJUXJU.js +115 -0
- package/dist/chunk-2VUEDIUM.js +77 -0
- package/dist/chunk-2Y2IIHPI.js +430 -0
- package/dist/chunk-2YRG3LHZ.js +220 -0
- package/dist/chunk-2Z5Q3SUY.js +65 -0
- package/dist/chunk-32IYXIE5.js +873 -0
- package/dist/chunk-33IGPPUI.js +292 -0
- package/dist/chunk-352PCJLK.js +283 -0
- package/dist/chunk-35J4NE6S.js +226 -0
- package/dist/chunk-3C7WBIVK.js +1016 -0
- package/dist/chunk-3H3EY6U7.js +1225 -0
- package/dist/chunk-3H4MWYIC.js +198 -0
- package/dist/chunk-3HHWQR3N.js +2479 -0
- package/dist/chunk-3JKNRYEE.js +14 -0
- package/dist/chunk-3LECCYZY.js +128 -0
- package/dist/chunk-3LOY6YZI.js +852 -0
- package/dist/chunk-3M57DADF.js +44 -0
- package/dist/chunk-3NOTLVLG.js +3803 -0
- package/dist/chunk-3OPP2OZB.js +1480 -0
- package/dist/chunk-3P5IN5E7.js +9 -0
- package/dist/chunk-3PL22IYZ.js +20 -0
- package/dist/chunk-3REDAJUJ.js +14 -0
- package/dist/chunk-3S2R4XJI.js +203 -0
- package/dist/chunk-3UBZI5DW.js +61 -0
- package/dist/chunk-3VV5OBGG.js +308 -0
- package/dist/chunk-3WY5TU2O.js +823 -0
- package/dist/chunk-43OKHTW4.js +82 -0
- package/dist/chunk-45KUJBDI.js +112 -0
- package/dist/chunk-47X5LM7B.js +224 -0
- package/dist/chunk-4B6FQJ77.js +268 -0
- package/dist/chunk-4BTDUT2S.js +42 -0
- package/dist/chunk-4DJL2VXA.js +24 -0
- package/dist/chunk-4EBSXZ73.js +48 -0
- package/dist/chunk-4QKP6I4C.js +294 -0
- package/dist/chunk-4U6XK2DG.js +300 -0
- package/dist/chunk-4UMRUFBD.js +132 -0
- package/dist/chunk-4US4SYJ4.js +569 -0
- package/dist/chunk-4ZPLWEZO.js +154 -0
- package/dist/chunk-56WPYDJH.js +624 -0
- package/dist/chunk-57WRCJJW.js +50 -0
- package/dist/chunk-5AW4RMNG.js +24 -0
- package/dist/chunk-5EQN56OZ.js +155 -0
- package/dist/chunk-5F43TUIN.js +38 -0
- package/dist/chunk-5FKHIKTS.js +115 -0
- package/dist/chunk-5HDP7XZG.js +91 -0
- package/dist/chunk-5KQETTNS.js +152 -0
- package/dist/chunk-5PDVN2KO.js +498 -0
- package/dist/chunk-5UBIFVRD.js +509 -0
- package/dist/chunk-5YDE3Q62.js +46 -0
- package/dist/chunk-626AJVMU.js +302 -0
- package/dist/chunk-633XZ7UF.js +3583 -0
- package/dist/chunk-63DHNHGA.js +236 -0
- package/dist/chunk-666656AR.js +568 -0
- package/dist/chunk-67YRJPJO.js +19 -0
- package/dist/chunk-6CAU7VBA.js +20 -0
- package/dist/chunk-6CB3KJRY.js +21 -0
- package/dist/chunk-6DBMALXL.js +29 -0
- package/dist/chunk-6E25C4IA.js +269 -0
- package/dist/chunk-6FIBNIQU.js +73 -0
- package/dist/chunk-6G57FYBV.js +189 -0
- package/dist/chunk-6KZKRTG3.js +4885 -0
- package/dist/chunk-6LAH2UV2.js +525 -0
- package/dist/chunk-6PZY2TTU.js +921 -0
- package/dist/chunk-6T6NHXK4.js +230 -0
- package/dist/chunk-6TBEX4R4.js +432 -0
- package/dist/chunk-6TRD7TEE.js +911 -0
- package/dist/chunk-6XCP2RAI.js +47 -0
- package/dist/chunk-726G6WDL.js +351 -0
- package/dist/chunk-75EMT7BF.js +616 -0
- package/dist/chunk-762ACDZJ.js +4696 -0
- package/dist/chunk-77I6G4CO.js +1 -0
- package/dist/chunk-7DJ6SQH3.js +510 -0
- package/dist/chunk-7HPCIOMA.js +1383 -0
- package/dist/chunk-7HYBSRPZ.js +17503 -0
- package/dist/chunk-7KBEOPVB.js +73 -0
- package/dist/chunk-7LHJDJB3.js +2222 -0
- package/dist/chunk-7NVJMH52.js +306 -0
- package/dist/chunk-7RMARDVH.js +33 -0
- package/dist/chunk-7SEWU4QG.js +36 -0
- package/dist/chunk-7TUTZTI2.js +911 -0
- package/dist/chunk-7VBDFPUM.js +340 -0
- package/dist/chunk-7VRJHTGZ.js +6406 -0
- package/dist/chunk-7YAOUUKK.js +493 -0
- package/dist/chunk-AAAODV76.js +860 -0
- package/dist/chunk-AB4HUJVQ.js +339 -0
- package/dist/chunk-AEQWV746.js +611 -0
- package/dist/chunk-AHU3FKPA.js +11639 -0
- package/dist/chunk-AISTV5XU.js +226 -0
- package/dist/chunk-AJBTKGJZ.js +48 -0
- package/dist/chunk-AJJNW7XT.js +248 -0
- package/dist/chunk-AJN5Y5YZ.js +160 -0
- package/dist/chunk-ALDTFNZ3.js +150 -0
- package/dist/chunk-ARARVIZK.js +281 -0
- package/dist/chunk-ATBM6AW5.js +53 -0
- package/dist/chunk-ATKEKM3E.js +206 -0
- package/dist/chunk-AUJLW6JZ.js +92 -0
- package/dist/chunk-AY3MHEFM.js +24 -0
- package/dist/chunk-B7PYTV72.js +236 -0
- package/dist/chunk-B7YRSULE.js +1423 -0
- package/dist/chunk-BAWJNMWF.js +339 -0
- package/dist/chunk-BBPIILO2.js +88 -0
- package/dist/chunk-BD3PGW6A.js +957 -0
- package/dist/chunk-BDPYFAB4.js +44 -0
- package/dist/chunk-BIUV23HH.js +729 -0
- package/dist/chunk-BQ3VAGXH.js +243 -0
- package/dist/chunk-BQJOGAWT.js +31 -0
- package/dist/chunk-BT7EG7CO.js +68 -0
- package/dist/chunk-BV3XQQLU.js +27 -0
- package/dist/chunk-BY6ODHNZ.js +78 -0
- package/dist/chunk-BZRLSZNV.js +79 -0
- package/dist/chunk-C3DH3NCY.js +2773 -0
- package/dist/chunk-C3KCMAJP.js +756 -0
- package/dist/chunk-C7AGUJ5K.js +267 -0
- package/dist/chunk-CBSWKQCX.js +342 -0
- package/dist/chunk-CE5OZBYY.js +21 -0
- package/dist/chunk-CFCVYHSW.js +373 -0
- package/dist/chunk-CHA2HDE5.js +126 -0
- package/dist/chunk-CIHWPGS5.js +146 -0
- package/dist/chunk-CJBSZX3F.js +127 -0
- package/dist/chunk-CLA6QIJM.js +43 -0
- package/dist/chunk-CPSVQR2I.js +365 -0
- package/dist/chunk-CRPRVNQ4.js +254 -0
- package/dist/chunk-CSIE4Y7C.js +1093 -0
- package/dist/chunk-CSOPSYDY.js +142 -0
- package/dist/chunk-CSXLLEGB.js +205 -0
- package/dist/chunk-CTDLERWU.js +293 -0
- package/dist/chunk-CULBXMSK.js +110 -0
- package/dist/chunk-D2M2Y5ID.js +21 -0
- package/dist/chunk-D37WY7SH.js +1060 -0
- package/dist/chunk-D4VJFCGZ.js +89 -0
- package/dist/chunk-D6WTZMZB.js +48 -0
- package/dist/chunk-DBHOWDUH.js +976 -0
- package/dist/chunk-DCACX7BV.js +19364 -0
- package/dist/chunk-DFHX4XYA.js +128 -0
- package/dist/chunk-DIKBRRKE.js +176 -0
- package/dist/chunk-DJG5RIOR.js +9 -0
- package/dist/chunk-DNIOIISW.js +616 -0
- package/dist/chunk-DOA5G7IA.js +315 -0
- package/dist/chunk-DP7FKP6W.js +855 -0
- package/dist/chunk-DS2JZ677.js +79 -0
- package/dist/chunk-DSRLVYBS.js +82 -0
- package/dist/chunk-EAEVKNJA.js +209 -0
- package/dist/chunk-EEUESN3T.js +575 -0
- package/dist/chunk-EJ4LUU5Y.js +73 -0
- package/dist/chunk-EJIWTPSZ.js +1063 -0
- package/dist/chunk-EJVCDTAN.js +116 -0
- package/dist/chunk-EKLUBDBQ.js +627 -0
- package/dist/chunk-EN62WLFD.js +849 -0
- package/dist/chunk-ENYRCL43.js +26 -0
- package/dist/chunk-EP22ZMFO.js +273 -0
- package/dist/chunk-EP4SVAVI.js +87 -0
- package/dist/chunk-EPAMVGI3.js +1562 -0
- package/dist/chunk-EPRMH6HO.js +24 -0
- package/dist/chunk-ES6NWJ36.js +4057 -0
- package/dist/chunk-ETA2K4KI.js +30 -0
- package/dist/chunk-ETAD4NKD.js +31 -0
- package/dist/chunk-EUWIIDQ7.js +93 -0
- package/dist/chunk-EVE3OD2W.js +141 -0
- package/dist/chunk-EXA26FFC.js +459 -0
- package/dist/chunk-EXSPAA35.js +244 -0
- package/dist/chunk-F55YABKV.js +258 -0
- package/dist/chunk-F5DNGU5W.js +27 -0
- package/dist/chunk-F622MJYV.js +103 -0
- package/dist/chunk-F6NIQD74.js +5111 -0
- package/dist/chunk-FAWJTC34.js +43 -0
- package/dist/chunk-FAZBRHGG.js +47 -0
- package/dist/chunk-FIEUSGNJ.js +39 -0
- package/dist/chunk-FKCG7K6H.js +1146 -0
- package/dist/chunk-FOVVXV45.js +229 -0
- package/dist/chunk-FRBPKBFE.js +30 -0
- package/dist/chunk-FSA5BPFI.js +268 -0
- package/dist/chunk-FSJ5TTZ3.js +29 -0
- package/dist/chunk-FT7SGLXT.js +193 -0
- package/dist/chunk-FUUVZZUB.js +62 -0
- package/dist/chunk-FYMRVUNZ.js +1697 -0
- package/dist/chunk-FYTAA5FG.js +162 -0
- package/dist/chunk-G3VB2UCZ.js +3892 -0
- package/dist/chunk-G6OIMVXH.js +405 -0
- package/dist/chunk-G7PQCXVH.js +228 -0
- package/dist/chunk-GAB6UW52.js +1087 -0
- package/dist/chunk-GAFJEYLK.js +29 -0
- package/dist/chunk-GC4CRMTS.js +642 -0
- package/dist/chunk-GFHSIWHL.js +5297 -0
- package/dist/chunk-GI5M67YA.js +735 -0
- package/dist/chunk-GIJWHUWF.js +191 -0
- package/dist/chunk-GO6DRECI.js +1 -0
- package/dist/chunk-GOFVBTMN.js +314 -0
- package/dist/chunk-GQIP72ZJ.js +13 -0
- package/dist/chunk-GQXLXRFA.js +28 -0
- package/dist/chunk-GT6HFKJB.js +48 -0
- package/dist/chunk-GVJGSSKM.js +174 -0
- package/dist/chunk-GWHGTG37.js +36 -0
- package/dist/chunk-GZAJHLKO.js +18 -0
- package/dist/chunk-GZK62I3N.js +314 -0
- package/dist/chunk-H3HGMISG.js +483 -0
- package/dist/chunk-H3ISZJMJ.js +403 -0
- package/dist/chunk-H4HXVWEC.js +9 -0
- package/dist/chunk-H6MJGKAW.js +120 -0
- package/dist/chunk-HBTTGVR5.js +353 -0
- package/dist/chunk-HBZ322WZ.js +35 -0
- package/dist/chunk-HEP3ILP4.js +34 -0
- package/dist/chunk-HGFXODKO.js +106 -0
- package/dist/chunk-HHWDTB6S.js +59 -0
- package/dist/chunk-HKO45NLZ.js +286 -0
- package/dist/chunk-HLVTEA6A.js +89 -0
- package/dist/chunk-HS3SY6HN.js +160 -0
- package/dist/chunk-HT5OCGKN.js +899 -0
- package/dist/chunk-HXIIEMGF.js +78 -0
- package/dist/chunk-I56TH7VM.js +46 -0
- package/dist/chunk-I6FN3R5D.js +352 -0
- package/dist/chunk-I7SCBHJN.js +655 -0
- package/dist/chunk-IJM4GKAT.js +529 -0
- package/dist/chunk-IMEYU36R.js +344 -0
- package/dist/chunk-INJ3SS6A.js +936 -0
- package/dist/chunk-IUKOPCCE.js +441 -0
- package/dist/chunk-IVEPZQJO.js +33 -0
- package/dist/chunk-IVZEONFC.js +43 -0
- package/dist/chunk-IWBHRSG7.js +936 -0
- package/dist/chunk-IYY3HQAD.js +484 -0
- package/dist/chunk-J2ICMYDA.js +48 -0
- package/dist/chunk-J2QCFLUN.js +505 -0
- package/dist/chunk-J5HM6V5P.js +1039 -0
- package/dist/chunk-J6NZX6QH.js +398 -0
- package/dist/chunk-JBBB2Y47.js +432 -0
- package/dist/chunk-JDCZQZU7.js +42 -0
- package/dist/chunk-JEDNXGSS.js +169 -0
- package/dist/chunk-JHP7OT6K.js +89 -0
- package/dist/chunk-JLS65NUQ.js +14 -0
- package/dist/chunk-JNMWYMC6.js +38 -0
- package/dist/chunk-JNSTWNNW.js +25 -0
- package/dist/chunk-JOSK6GEU.js +9564 -0
- package/dist/chunk-JQUMSIGC.js +100 -0
- package/dist/chunk-JVHGMURQ.js +1106 -0
- package/dist/chunk-JYXS47FQ.js +951 -0
- package/dist/chunk-K2ZMW2Z5.js +2147 -0
- package/dist/chunk-K7FAFORM.js +14 -0
- package/dist/chunk-KBJXX3ON.js +333 -0
- package/dist/chunk-KHFKVQWY.js +486 -0
- package/dist/chunk-KHMEI3DQ.js +173 -0
- package/dist/chunk-KHW3UD7B.js +69 -0
- package/dist/chunk-KKQKWAMF.js +365 -0
- package/dist/chunk-KOKXJV2U.js +455 -0
- package/dist/chunk-KQ4NGOJI.js +14 -0
- package/dist/chunk-KQYQOXMS.js +342 -0
- package/dist/chunk-KTMW65UX.js +14 -0
- package/dist/chunk-KUEWV2JH.js +593 -0
- package/dist/chunk-KXYDV3HP.js +1523 -0
- package/dist/chunk-KZ4JMGZ5.js +96 -0
- package/dist/chunk-KZWGBUIO.js +2659 -0
- package/dist/chunk-L2CBG5IX.js +1892 -0
- package/dist/chunk-L2S235CU.js +314 -0
- package/dist/chunk-L32WD57F.js +98 -0
- package/dist/chunk-LDJCKAJP.js +123 -0
- package/dist/chunk-LDWNBEN7.js +541 -0
- package/dist/chunk-LJVH57G2.js +241 -0
- package/dist/chunk-LPQ7NZEN.js +209 -0
- package/dist/chunk-LRGH3CCV.js +148 -0
- package/dist/chunk-LULOGMMM.js +1133 -0
- package/dist/chunk-LWGKN2GY.js +8284 -0
- package/dist/chunk-LX4F24ZH.js +157 -0
- package/dist/chunk-M4BUEXXF.js +839 -0
- package/dist/chunk-M6UHOC4I.js +553 -0
- package/dist/chunk-MCBNWZNO.js +657 -0
- package/dist/chunk-MEMSY6VY.js +223 -0
- package/dist/chunk-MHLEZQQI.js +145 -0
- package/dist/chunk-MJ6WNSIX.js +192 -0
- package/dist/chunk-MKASIKWZ.js +442 -0
- package/dist/chunk-MNOVBYFU.js +60 -0
- package/dist/chunk-MO2BYAAF.js +2896 -0
- package/dist/chunk-MP6P7Y2A.js +180 -0
- package/dist/chunk-MQ4TFJAG.js +3365 -0
- package/dist/chunk-MT2WAIR3.js +131 -0
- package/dist/chunk-MTU7VTNN.js +1122 -0
- package/dist/chunk-MULMXX4V.js +150 -0
- package/dist/chunk-MW2DWWVA.js +147 -0
- package/dist/chunk-MY3ZPUN4.js +151 -0
- package/dist/chunk-MYLH2S4G.js +64 -0
- package/dist/chunk-MZ5WYKNA.js +28 -0
- package/dist/chunk-N3Q2JNPV.js +249 -0
- package/dist/chunk-N5DX4JAK.js +12 -0
- package/dist/chunk-NAINGKHF.js +35 -0
- package/dist/chunk-NEQUQHOX.js +223 -0
- package/dist/chunk-NHNPEZS4.js +1408 -0
- package/dist/chunk-NHTIXJCR.js +17 -0
- package/dist/chunk-NKLPMBNV.js +1154 -0
- package/dist/chunk-NMVZ5YES.js +199 -0
- package/dist/chunk-NRFRY3GE.js +256 -0
- package/dist/chunk-NTD6CSI6.js +1266 -0
- package/dist/chunk-NUO7B3SH.js +318 -0
- package/dist/chunk-NVOHIJKG.js +1319 -0
- package/dist/chunk-NXH3RX7O.js +523 -0
- package/dist/chunk-NXZ3DURF.js +257 -0
- package/dist/chunk-O26L6F7F.js +209 -0
- package/dist/chunk-O5RRIUEP.js +124 -0
- package/dist/chunk-O5X6BKAO.js +10 -0
- package/dist/chunk-O6ZQUVTR.js +31 -0
- package/dist/chunk-O7FE75QZ.js +306 -0
- package/dist/chunk-OC7Z6AJQ.js +81 -0
- package/dist/chunk-OH7IEZ63.js +307 -0
- package/dist/chunk-OI734GRS.js +115 -0
- package/dist/chunk-OJBH62DK.js +684 -0
- package/dist/chunk-OKJLVSTJ.js +247 -0
- package/dist/chunk-OMX5VL43.js +79 -0
- package/dist/chunk-ONHAMBN6.js +12 -0
- package/dist/chunk-ONYPLIVE.js +753 -0
- package/dist/chunk-OSK7QWPD.js +637 -0
- package/dist/chunk-OTXLMJKP.js +438 -0
- package/dist/chunk-OV5PKQMA.js +213 -0
- package/dist/chunk-OXK5HA4B.js +31 -0
- package/dist/chunk-OYDWFQA4.js +272 -0
- package/dist/chunk-OZAUKWHB.js +22 -0
- package/dist/chunk-P5P2EKGH.js +94 -0
- package/dist/chunk-P6SSWAKY.js +29 -0
- package/dist/chunk-P7CQGPLS.js +30 -0
- package/dist/chunk-P7RVCHQV.js +197 -0
- package/dist/chunk-PEBWDYIW.js +726 -0
- package/dist/chunk-PFCXFO7A.js +9193 -0
- package/dist/chunk-PFLDWMX6.js +168 -0
- package/dist/chunk-PHZGLQSK.js +15883 -0
- package/dist/chunk-PNFTPNSR.js +20 -0
- package/dist/chunk-PPHXX4W7.js +175 -0
- package/dist/chunk-PPZESPJT.js +262 -0
- package/dist/chunk-PRDHI2L5.js +296 -0
- package/dist/chunk-PSTKWHHN.js +32 -0
- package/dist/chunk-PV53ODOT.js +555 -0
- package/dist/chunk-PVJBTI7P.js +24 -0
- package/dist/chunk-PXKERBKX.js +100 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-Q3DHEZA5.js +85 -0
- package/dist/chunk-Q5RZDVQK.js +204 -0
- package/dist/chunk-Q64IR2Z2.js +4933 -0
- package/dist/chunk-Q6Z5UGPL.js +398 -0
- package/dist/chunk-QAMAV4DT.js +627 -0
- package/dist/chunk-QBWF4444.js +112 -0
- package/dist/chunk-QDKYT4CI.js +22805 -0
- package/dist/chunk-QFLBRWCJ.js +126 -0
- package/dist/chunk-QILAQACE.js +107 -0
- package/dist/chunk-QJ6OEH4K.js +3683 -0
- package/dist/chunk-QK3NLYTV.js +320 -0
- package/dist/chunk-QOFLUS24.js +535 -0
- package/dist/chunk-QOIASNEJ.js +98 -0
- package/dist/chunk-QP4UTSOV.js +3587 -0
- package/dist/chunk-QP5ST7RI.js +904 -0
- package/dist/chunk-QS5AGRZN.js +167 -0
- package/dist/chunk-QTAOU53N.js +107 -0
- package/dist/chunk-QTCLJHLZ.js +351 -0
- package/dist/chunk-QTOLTG4L.js +119 -0
- package/dist/chunk-QWDV4OSL.js +142 -0
- package/dist/chunk-QWMQ74KD.js +508 -0
- package/dist/chunk-QX6LOMMH.js +158 -0
- package/dist/chunk-QXBKIHY7.js +238 -0
- package/dist/chunk-QXBKTJT6.js +270 -0
- package/dist/chunk-QYQOVOLR.js +196 -0
- package/dist/chunk-R2CKS6WT.js +73 -0
- package/dist/chunk-R2TIYG7U.js +68 -0
- package/dist/chunk-R2W3LESH.js +465 -0
- package/dist/chunk-R5EXHMUN.js +100 -0
- package/dist/chunk-RBBTBCHX.js +289 -0
- package/dist/chunk-RBKLOUXA.js +121 -0
- package/dist/chunk-RCP2Y6DQ.js +86 -0
- package/dist/chunk-RCYEJSD5.js +260 -0
- package/dist/chunk-RFDVSI4N.js +134 -0
- package/dist/chunk-RGJU63FV.js +1717 -0
- package/dist/chunk-RI4EX2QE.js +18 -0
- package/dist/chunk-RIMARPCF.js +152 -0
- package/dist/chunk-RJ6RSNT6.js +42 -0
- package/dist/chunk-RNI2GUIF.js +131 -0
- package/dist/chunk-RPHUWJ3K.js +264 -0
- package/dist/chunk-RPIMAMV7.js +361 -0
- package/dist/chunk-RQFX6YRN.js +49 -0
- package/dist/chunk-RRC5BL7B.js +285 -0
- package/dist/chunk-RSYTSBOO.js +79 -0
- package/dist/chunk-RWQQIKIC.js +35 -0
- package/dist/chunk-RZUBOZH2.js +373 -0
- package/dist/chunk-S2E632FQ.js +380 -0
- package/dist/chunk-S2VQCZO4.js +22 -0
- package/dist/chunk-S2XIMQJQ.js +681 -0
- package/dist/chunk-S47ISY27.js +183 -0
- package/dist/chunk-S6I4KISU.js +142 -0
- package/dist/chunk-S6TAFQI5.js +2403 -0
- package/dist/chunk-SBBNT5ZJ.js +27 -0
- package/dist/chunk-SDJV2DTQ.js +491 -0
- package/dist/chunk-SDPIFNLD.js +33 -0
- package/dist/chunk-SF6YK3JI.js +835 -0
- package/dist/chunk-SK3ZFONO.js +976 -0
- package/dist/chunk-SKTFRFQ7.js +1775 -0
- package/dist/chunk-SNGM452K.js +2002 -0
- package/dist/chunk-STW7OFOA.js +581 -0
- package/dist/chunk-SU6UFUQY.js +1351 -0
- package/dist/chunk-SVJM3LJA.js +27 -0
- package/dist/chunk-SVUNZOPG.js +129 -0
- package/dist/chunk-T5XLUYV3.js +34 -0
- package/dist/chunk-T7E5JS6N.js +57 -0
- package/dist/chunk-TA3N5MMO.js +450 -0
- package/dist/chunk-TAJPCXSB.js +13 -0
- package/dist/chunk-TDEMDRN2.js +1639 -0
- package/dist/chunk-TDSEX5CF.js +24 -0
- package/dist/chunk-TGCVL74Y.js +28 -0
- package/dist/chunk-TGXXYDL4.js +1012 -0
- package/dist/chunk-TIKTYUJO.js +296 -0
- package/dist/chunk-TIZAJD4M.js +6029 -0
- package/dist/chunk-TLSEZZCG.js +5549 -0
- package/dist/chunk-TMBDRHAX.js +19 -0
- package/dist/chunk-TRURQUBP.js +1217 -0
- package/dist/chunk-TSQ256N5.js +152 -0
- package/dist/chunk-TUQMMFEQ.js +2244 -0
- package/dist/chunk-U424MJLC.js +81 -0
- package/dist/chunk-U4DRS6ZW.js +11 -0
- package/dist/chunk-U5KS22IN.js +204 -0
- package/dist/chunk-UAPHFJPN.js +673 -0
- package/dist/chunk-UB7LQITD.js +1040 -0
- package/dist/chunk-UBVRHGAZ.js +237 -0
- package/dist/chunk-UDNNAQN5.js +98 -0
- package/dist/chunk-UJP3XM54.js +342 -0
- package/dist/chunk-UJYDH2MW.js +305 -0
- package/dist/chunk-UKMPASIC.js +399 -0
- package/dist/chunk-UKUL3EHK.js +763 -0
- package/dist/chunk-UPHU64NB.js +1327 -0
- package/dist/chunk-URMSZXAD.js +43 -0
- package/dist/chunk-US3RT6CY.js +525 -0
- package/dist/chunk-UTDEOPKV.js +30 -0
- package/dist/chunk-UUUDKV7N.js +13 -0
- package/dist/chunk-UVKWU3SM.js +39 -0
- package/dist/chunk-V2TVPO3X.js +521 -0
- package/dist/chunk-V3KLVK7B.js +398 -0
- package/dist/chunk-V3YFFHDR.js +17 -0
- package/dist/chunk-VAG6GUBR.js +1162 -0
- package/dist/chunk-VBENAHDA.js +1814 -0
- package/dist/chunk-VBNCKCCI.js +16 -0
- package/dist/chunk-VCGSWN5M.js +1300 -0
- package/dist/chunk-VE2O2I7M.js +115 -0
- package/dist/chunk-VIFHYTI5.js +31 -0
- package/dist/chunk-VJER3FUS.js +5080 -0
- package/dist/chunk-VLMDM56Q.js +268 -0
- package/dist/chunk-VMFZEVVX.js +99 -0
- package/dist/chunk-VNDPQVUZ.js +1853 -0
- package/dist/chunk-VSPJRLGA.js +4783 -0
- package/dist/chunk-VSWC5ZXI.js +103 -0
- package/dist/chunk-VYI4DSZP.js +2017 -0
- package/dist/chunk-W4BAIQ6L.js +1212 -0
- package/dist/chunk-W7VQAL2K.js +2203 -0
- package/dist/chunk-WEI3ZDZH.js +33 -0
- package/dist/chunk-WEIUS5NT.js +26 -0
- package/dist/chunk-WEW7UFWE.js +546 -0
- package/dist/chunk-WGQAXLNA.js +384 -0
- package/dist/chunk-WJAL4JL3.js +206 -0
- package/dist/chunk-WKFOJ5ZG.js +141 -0
- package/dist/chunk-WMWQEFLN.js +2177 -0
- package/dist/chunk-WNECKKO2.js +154 -0
- package/dist/chunk-WPKLYOAM.js +195 -0
- package/dist/chunk-WSH37YQN.js +243 -0
- package/dist/chunk-WV3KQDPE.js +84 -0
- package/dist/chunk-WZFC4V4U.js +389 -0
- package/dist/chunk-XCOIBNET.js +13 -0
- package/dist/chunk-XDM65LBX.js +53 -0
- package/dist/chunk-XGU6PBO5.js +645 -0
- package/dist/chunk-XHOI4V62.js +43 -0
- package/dist/chunk-XIBVFMLQ.js +6858 -0
- package/dist/chunk-XJ2E7YEJ.js +117 -0
- package/dist/chunk-XON4ZCYX.js +69 -0
- package/dist/chunk-XQPEWJPI.js +127 -0
- package/dist/chunk-XSJTIFUY.js +31 -0
- package/dist/chunk-XT7OVWM3.js +64 -0
- package/dist/chunk-XTXYIISX.js +1104 -0
- package/dist/chunk-XV7NZL4B.js +57 -0
- package/dist/chunk-XWIZ6B5S.js +109 -0
- package/dist/chunk-XWLIKOBX.js +240 -0
- package/dist/chunk-XZOXEIN4.js +156 -0
- package/dist/chunk-XZRS7I7W.js +3673 -0
- package/dist/chunk-Y4ZDDHB6.js +44 -0
- package/dist/chunk-Y733RB7T.js +194 -0
- package/dist/chunk-YBHUB4XR.js +14931 -0
- package/dist/chunk-YKC75XK4.js +147 -0
- package/dist/chunk-YKMXFVK7.js +27 -0
- package/dist/chunk-YO5BAJ55.js +225 -0
- package/dist/chunk-YPDCLXNZ.js +568 -0
- package/dist/chunk-YSQPGVFK.js +116 -0
- package/dist/chunk-YTVVTIWJ.js +716 -0
- package/dist/chunk-YVCMDVBB.js +698 -0
- package/dist/chunk-YYTOA6DP.js +114 -0
- package/dist/chunk-Z5WGNULV.js +88 -0
- package/dist/chunk-Z6NGVVXG.js +66 -0
- package/dist/chunk-Z7CDQNH3.js +20 -0
- package/dist/chunk-ZH4G3FU5.js +187 -0
- package/dist/chunk-ZJB6SQPA.js +257 -0
- package/dist/chunk-ZL6E4HMY.js +42 -0
- package/dist/chunk-ZMLOC3DW.js +62 -0
- package/dist/chunk-ZORW64QH.js +101 -0
- package/dist/chunk-ZVVD2XGV.js +1369 -0
- package/dist/cli-utils-ER33ODC5.js +31 -0
- package/dist/cli-validation-6CHPTANV.js +146 -0
- package/dist/commit-utils-3STAY7C7.js +49 -0
- package/dist/compatibility-notice-IHNXR2JR.js +21 -0
- package/dist/compete-config-resolver-V3GDNJMM.js +125 -0
- package/dist/compete-results-XUM3PJHS.js +318 -0
- package/dist/competition-outcome-tracker-NWSMVUPG.js +62 -0
- package/dist/config-4HHE4OIK.js +238 -0
- package/dist/config-D6YAZASH.js +10 -0
- package/dist/config-MIPRDYYV.js +46 -0
- package/dist/config-audit-GA5DCUAI.js +371 -0
- package/dist/config-explain-4LMO556H.js +71 -0
- package/dist/config-loader-RGP634PC.js +51 -0
- package/dist/config-manager-J2UTO635.js +114 -0
- package/dist/config-merger-TVUJBZTS.js +14 -0
- package/dist/config-validator-H4ZVIE56.js +122 -0
- package/dist/cost-HSIV5U2Y.js +85 -0
- package/dist/data-migration-state-OAUL2WPQ.js +35 -0
- package/dist/db-migrator-NUOW5NKR.js +34 -0
- package/dist/default-paths-UILB62BN.js +49 -0
- package/dist/discovery-V6GYUJUC.js +53 -0
- package/dist/doctor-BBSMCDWE.js +271 -0
- package/dist/doctor-context-blocks-LPY75VZA.js +231 -0
- package/dist/doctor-instructions-import-JXHDDOE5.js +70 -0
- package/dist/doctor-purpose-6YJOXPBE.js +30 -0
- package/dist/domain-analyzer-S35ABUNA.js +48 -0
- package/dist/ensure-initialized-Q6PEU55O.js +78 -0
- package/dist/entry.js +922 -0
- package/dist/error-parser-core-MZFMFANN.js +70 -0
- package/dist/evaluation-context-GQBYDAEV.js +63 -0
- package/dist/evidence-plan-resolver-5FUAP3SA.js +111 -0
- package/dist/execution-data-writer-YCG5UH37.js +72 -0
- package/dist/execution-policy-applier-PWZM5LNA.js +63 -0
- package/dist/execution-preflight-DASJWWQF.js +223 -0
- package/dist/execution-roles-KNSNNB2D.js +112 -0
- package/dist/exit-code-error-QIY5DOKF.js +18 -0
- package/dist/external-temp-cleanup-CAW7LQ6R.js +360 -0
- package/dist/factory-YCYCB7AE.js +209 -0
- package/dist/file-utils-ZQYNBQBW.js +45 -0
- package/dist/flywheel-allowlist-revert-H22HA6JE.js +21 -0
- package/dist/flywheel-autoloop-executor-PDOASJEZ.js +316 -0
- package/dist/flywheel-autoloop-unverified-TOKYFCDC.js +36 -0
- package/dist/flywheel-competition-executor-YJUMMEJO.js +320 -0
- package/dist/flywheel-executor-JWU43KAY.js +437 -0
- package/dist/flywheel-git-isolation-FQ2TRWMB.js +56 -0
- package/dist/flywheel-manifest-HDPNMWWF.js +114 -0
- package/dist/flywheel-model-defaults-UHAKTZT3.js +110 -0
- package/dist/flywheel-preflight-III2C7TH.js +163 -0
- package/dist/flywheel-resume-2O45MS7Y.js +31 -0
- package/dist/flywheel-resume-execution-lease-P2BK257J.js +59 -0
- package/dist/flywheel-safety-AVAVFXIJ.js +19 -0
- package/dist/flywheel-scope-decision-ALJUUNGG.js +14 -0
- package/dist/get-telemetry-logger-MPDVO2JA.js +155 -0
- package/dist/git-message-style-KCXGMTDT.js +104 -0
- package/dist/guidance-profile-config-G3K5YQOO.js +113 -0
- package/dist/guidance-profile-renderer-TX4TNDFL.js +23 -0
- package/dist/identity-XLQJ4YJF.js +25 -0
- package/dist/index-query-6NUY4FKX.js +37 -0
- package/dist/index.js +85588 -0
- package/dist/indexer-DL54CM3K.js +44 -0
- package/dist/init-OUZ72344.js +245 -0
- package/dist/instructions-import-offer-NSYXSITC.js +363 -0
- package/dist/instructions-run-NBII7W36.js +114 -0
- package/dist/interrupted-work-E4TLKJLE.js +43 -0
- package/dist/invoke-provider-auth-NEWEIHCI.js +38 -0
- package/dist/judge-scoring.json +64 -0
- package/dist/lab-mode-YXQ2Y3NG.js +44 -0
- package/dist/lab-utils-5QAMDJR5.js +29 -0
- package/dist/linux-host-class-YDWQX65O.js +31 -0
- package/dist/llm-judge-executor-OJSNCTFJ.js +179 -0
- package/dist/local-ci-config-VZ4WWDT5.js +48 -0
- package/dist/local-executor-DCMDDRX2.js +280 -0
- package/dist/logger-5KNKS3O4.js +154 -0
- package/dist/matrix-prompt-builder-4ZBOGZSB.js +527 -0
- package/dist/matrix-result-parser-EZJM4YXP.js +14 -0
- package/dist/merge-batch-RTEEMVDB.js +313 -0
- package/dist/merge-batch-members-VIWGVRHP.js +24 -0
- package/dist/merge-queue-TIIUSOY6.js +126 -0
- package/dist/merge-queue-trust-DUNZ4J65.js +21 -0
- package/dist/metadata-UKSMWM6J.js +29 -0
- package/dist/model-catalog-readiness-R5KJBP5M.js +202 -0
- package/dist/model-invocations-db-XTUPPQ34.js +70 -0
- package/dist/model-resolver-JFZ2MHOJ.js +39 -0
- package/dist/model-resolver-SCQ57KAQ.js +217 -0
- package/dist/model-roles-D3OR4NAH.js +110 -0
- package/dist/monitor-F4SIU5G2.js +96 -0
- package/dist/nested-worktrees-2WUWQ75N.js +23 -0
- package/dist/next-S3IRLVER.js +96 -0
- package/dist/next-UKPFRXOO.js +148 -0
- package/dist/opportunistic-TL4S26VX.js +86 -0
- package/dist/optimization-config-resolver-NAEIYU6A.js +148 -0
- package/dist/package-HJR4QJT4.js +10 -0
- package/dist/parse-git-status-7PIYFPS2.js +21 -0
- package/dist/path-security-5WJSY56G.js +41 -0
- package/dist/paths-JUI7C4KU.js +45 -0
- package/dist/plan-backlog-list-fast-SSTQL5XP.js +89 -0
- package/dist/plan-backlog-show-fast-PFRAQ3JB.js +114 -0
- package/dist/plan-sprint-list-fast-HD2KBZSY.js +110 -0
- package/dist/plan-sprint-status-fast-YFYH7WQF.js +116 -0
- package/dist/plan-task-status-fast-JU5PNLUU.js +114 -0
- package/dist/plan-to-flywheel-PY5MSY2H.js +529 -0
- package/dist/preflight-PJHGTJNZ.js +12 -0
- package/dist/process-registry-B4ZUCN7T.js +28 -0
- package/dist/process-scanner-TU3QHWVB.js +23 -0
- package/dist/processes-6FHVGT72.js +28 -0
- package/dist/processes-json-fast-YWTMUWXB.js +72 -0
- package/dist/profile-HWTC56SG.js +209 -0
- package/dist/project-runtime-paths-2UQNG5Y4.js +41 -0
- package/dist/protected-branches-N36LDBFY.js +71 -0
- package/dist/provider-aware-resource-manager-YTFAHNGJ.js +40 -0
- package/dist/provider-matrix-2KO2V5OM.js +214 -0
- package/dist/provider-matrix-renderer-MEC3PER7.js +139 -0
- package/dist/provider-output-forwarding-2AHL7YMA.js +26 -0
- package/dist/provider-registry-WCZ65QHC.js +136 -0
- package/dist/provider-temp-cleanup-IUNPJCZF.js +14 -0
- package/dist/prune-engine-EOQVWEP6.js +448 -0
- package/dist/publication-turn-S42RZTQF.js +44 -0
- package/dist/quality-gate-JQMVCKOO.js +72 -0
- package/dist/quickstart-3O6FRCFB.js +105 -0
- package/dist/readiness-GW6ABRHB.js +139 -0
- package/dist/readiness-KFZCXDTT.js +215 -0
- package/dist/registry-7XG376SY.js +217 -0
- package/dist/repair-helpers-TTV5FEF4.js +117 -0
- package/dist/repo-root-YG6MQZDW.js +28 -0
- package/dist/resolution-engine-FFEK7HQ2.js +187 -0
- package/dist/resolve-provider-cli-ZEXVZKET.js +44 -0
- package/dist/restore-telemetry-db-E7BR5PO7.js +459 -0
- package/dist/routing-events-AW6SRZ6G.js +13 -0
- package/dist/routing-history-store-FMDDQL6W.js +39 -0
- package/dist/routing-planner-C6OHO3EY.js +221 -0
- package/dist/runner-KHDNQ5KU.js +1194 -0
- package/dist/runner-PIS2BW7Y.js +1801 -0
- package/dist/safety-E3JJVSFL.js +67 -0
- package/dist/safety-stanza-HE6GXP4G.js +49 -0
- package/dist/sandbox-7LBZC5PE.js +72 -0
- package/dist/sandbox-ASWCDYZL.js +80 -0
- package/dist/schema-extensions.sql +234 -0
- package/dist/security-JI22TBEB.js +17 -0
- package/dist/setup-bb-plugin-FQXLA76Y.js +531 -0
- package/dist/setup-claude-code-NF4ZSHVE.js +197 -0
- package/dist/setup-temp-cleanup-2APZ4HMA.js +29 -0
- package/dist/shared-utils-34HJZ6JX.js +40 -0
- package/dist/simple-artifact-goal-MQLDDMMX.js +29 -0
- package/dist/sprint-N7JFTEGL.js +403 -0
- package/dist/sprint-bridge-KJXIBNRJ.js +117 -0
- package/dist/sprint-completion-dependents-34SR7JVL.js +43 -0
- package/dist/sprint-execution-service-A6JPUBWY.js +376 -0
- package/dist/sprint-manager-MU2ZUWN2.js +140 -0
- package/dist/sqlite-timeout-config-U2CT4LKU.js +13 -0
- package/dist/sqlite-wrapper-FSGJ2QEW.js +19 -0
- package/dist/stale-cleanup-orchestrator-4X6324VF.js +71 -0
- package/dist/storage-access-I3V5LER7.js +31 -0
- package/dist/store-XVG64ZR2.js +25 -0
- package/dist/task-classifier-MN2DYE5R.js +558 -0
- package/dist/task-list-fast-7AT6LTTA.js +112 -0
- package/dist/task-manager-LHPBBRRE.js +136 -0
- package/dist/task-report-OLPAWBTK.js +64 -0
- package/dist/task-type-detector-6RG3YNZF.js +27 -0
- package/dist/task-type-resolver-EQHOUIHT.js +64 -0
- package/dist/telemetry-5VYSK772.js +212 -0
- package/dist/telemetry-health-tracker-4GFW2EMP.js +12 -0
- package/dist/telemetry-path-resolver-H3NFHHQY.js +34 -0
- package/dist/telemetry-reliability-URJDTNPZ.js +76 -0
- package/dist/transports-NREZQTJK.js +106 -0
- package/dist/unified-cost-tracker-5MTBJ2CL.js +59 -0
- package/dist/unified-state-cleanup-GGAXLHXF.js +292 -0
- package/dist/universal-cost-calculator-JTFEJVWK.js +70 -0
- package/dist/user-agents-QLIGPLP2.js +30 -0
- package/dist/variant-execution-I4ZZUAWY.js +319 -0
- package/dist/variant-opt-parser-JHCXKY2K.js +251 -0
- package/dist/variant-request-input-PL37N3AN.js +11 -0
- package/dist/variant-state-cleanup-KHMXRBZN.js +287 -0
- package/dist/variant-worker-COB5YTJX.js +4517 -0
- package/dist/variant-worker.js +26 -0
- package/dist/variants-XGDSXYG3.js +267 -0
- package/dist/verification-command-YSPU4VBH.js +66 -0
- package/dist/verify-command-timeout-DQUYH33Z.js +11 -0
- package/dist/verify-commands-LOHMOFKC.js +65 -0
- package/dist/warning-JSKSFKBT.js +13 -0
- package/dist/work-edge-K65NHVWY.js +50 -0
- package/dist/work-item-writer-KY5ZWZWW.js +30 -0
- package/dist/worker-JNXXEIT6.js +1504 -0
- package/dist/worker.js +21 -0
- package/dist/workspace-tree-identity-JO5PSKTW.js +52 -0
- package/dist/worktree-environment-WTVABAQW.js +64 -0
- package/dist/worktree-metrics-VZRQI26T.js +66 -0
- package/dist/writeback-TQFQBJNU.js +50 -0
- package/docs/CLI_REFERENCE.md +8287 -0
- package/docs/PROVIDER_SETUP.md +1737 -0
- package/docs/README.md +96 -0
- package/docs/TROUBLESHOOTING.md +2209 -0
- package/docs/getting-started/QUICK_START.md +260 -0
- package/docs/getting-started/README.md +198 -0
- package/docs/getting-started/SETUP.md +25 -0
- package/docs/reference/AGENT_CONTEXT.md +84 -0
- package/docs/reference/DELIVERY_ONBOARDING.md +198 -0
- package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
- package/docs/reference/SECURITY.md +291 -0
- package/docs/reference/TELEMETRY_PRIVACY.md +259 -0
- package/integrations/bb-plugin-build/README.md +391 -0
- package/integrations/bb-plugin-build/app.css +431 -0
- package/integrations/bb-plugin-build/app.tsx +6210 -0
- package/integrations/bb-plugin-build/package.json +45 -0
- package/integrations/bb-plugin-build/server.ts +488 -0
- package/integrations/bb-plugin-build/src/adapter.ts +3672 -0
- package/integrations/bb-plugin-build/src/backlog-authoring-model.ts +150 -0
- package/integrations/bb-plugin-build/src/backlog-authoring-schema.ts +458 -0
- package/integrations/bb-plugin-build/src/backlog-authoring-service.ts +467 -0
- package/integrations/bb-plugin-build/src/backlog-authoring-view.ts +1025 -0
- package/integrations/bb-plugin-build/src/command-evidence-schema.ts +13 -0
- package/integrations/bb-plugin-build/src/competition-defaults-schema.ts +122 -0
- package/integrations/bb-plugin-build/src/competition-defaults-service.ts +105 -0
- package/integrations/bb-plugin-build/src/competition-defaults-view.ts +138 -0
- package/integrations/bb-plugin-build/src/contract.ts +718 -0
- package/integrations/bb-plugin-build/src/execution-activity-view.ts +98 -0
- package/integrations/bb-plugin-build/src/finalize-model.ts +205 -0
- package/integrations/bb-plugin-build/src/finalize-schema.ts +150 -0
- package/integrations/bb-plugin-build/src/finalize-service.ts +330 -0
- package/integrations/bb-plugin-build/src/finalize-view.ts +159 -0
- package/integrations/bb-plugin-build/src/judge-operations-readback.ts +303 -0
- package/integrations/bb-plugin-build/src/judge-operations-schema.ts +33 -0
- package/integrations/bb-plugin-build/src/judge-operations-view.ts +459 -0
- package/integrations/bb-plugin-build/src/model.ts +1318 -0
- package/integrations/bb-plugin-build/src/monitor-service.ts +233 -0
- package/integrations/bb-plugin-build/src/panel-read-ux.ts +97 -0
- package/integrations/bb-plugin-build/src/patch-preview-schema.ts +166 -0
- package/integrations/bb-plugin-build/src/patch-preview-service.ts +480 -0
- package/integrations/bb-plugin-build/src/patch-preview-view.ts +109 -0
- package/integrations/bb-plugin-build/src/planning-readback.ts +228 -0
- package/integrations/bb-plugin-build/src/planning-service.ts +647 -0
- package/integrations/bb-plugin-build/src/planning-sync-evidence.ts +37 -0
- package/integrations/bb-plugin-build/src/planning-workspace-readback.ts +33 -0
- package/integrations/bb-plugin-build/src/planning-workspace-schema.ts +131 -0
- package/integrations/bb-plugin-build/src/planning-workspace.ts +333 -0
- package/integrations/bb-plugin-build/src/poll-handoff.ts +136 -0
- package/integrations/bb-plugin-build/src/project-target-server.ts +21 -0
- package/integrations/bb-plugin-build/src/project-target.ts +45 -0
- package/integrations/bb-plugin-build/src/reference-index.ts +218 -0
- package/integrations/bb-plugin-build/src/repository-identity.ts +17 -0
- package/integrations/bb-plugin-build/src/repository-schema.ts +30 -0
- package/integrations/bb-plugin-build/src/result-explorer-view.ts +597 -0
- package/integrations/bb-plugin-build/src/result-readback-model.ts +163 -0
- package/integrations/bb-plugin-build/src/result-readback-schema.ts +319 -0
- package/integrations/bb-plugin-build/src/result-readback-service.ts +333 -0
- package/integrations/bb-plugin-build/src/run-page-view.ts +332 -0
- package/integrations/bb-plugin-build/src/setup-config-schema.ts +293 -0
- package/integrations/bb-plugin-build/src/setup-config-service.ts +620 -0
- package/integrations/bb-plugin-build/src/setup-config-view.ts +388 -0
- package/integrations/bb-plugin-build/src/sprint-close-model.ts +150 -0
- package/integrations/bb-plugin-build/src/sprint-close-schema.ts +128 -0
- package/integrations/bb-plugin-build/src/sprint-close-service.ts +293 -0
- package/integrations/bb-plugin-build/src/sprint-close-view.ts +116 -0
- package/integrations/bb-plugin-build/src/sprint-composition-model.ts +709 -0
- package/integrations/bb-plugin-build/src/sprint-composition-readback.ts +231 -0
- package/integrations/bb-plugin-build/src/sprint-composition-schema.ts +597 -0
- package/integrations/bb-plugin-build/src/sprint-composition-service.ts +773 -0
- package/integrations/bb-plugin-build/src/sprint-composition-view.ts +1221 -0
- package/integrations/bb-plugin-build/src/sprint-execution-schema.ts +188 -0
- package/integrations/bb-plugin-build/src/sprint-execution-service.ts +289 -0
- package/integrations/bb-plugin-build/src/sprint-execution-view.ts +54 -0
- package/integrations/bb-plugin-build/src/task-authoring-model.ts +563 -0
- package/integrations/bb-plugin-build/src/task-authoring-schema.ts +629 -0
- package/integrations/bb-plugin-build/src/task-authoring-service.ts +842 -0
- package/integrations/bb-plugin-build/src/task-authoring-view.ts +1227 -0
- package/integrations/bb-plugin-build/src/task-catalog-schema.ts +46 -0
- package/integrations/bb-plugin-build/src/task-catalog-service.ts +44 -0
- package/integrations/bb-plugin-build/src/task-detail-readback.ts +56 -0
- package/integrations/bb-plugin-build/src/task-detail-schema.ts +171 -0
- package/integrations/bb-plugin-build/src/task-navigation.ts +446 -0
- package/integrations/bb-plugin-build/src/workbench-route.ts +74 -0
- package/package.json +306 -4
- package/schemas/README.md +80 -0
- package/schemas/build.config.schema.json +2110 -0
- package/schemas/config-v1.schema.json +136 -0
- package/schemas/execution-config.schema.json +47 -0
- package/schemas/judge-scoring.schema.json +257 -0
- package/schemas/provider-config.schema.json +179 -0
- package/schemas/telemetry-config.schema.json +79 -0
- package/schemas/user-preferences.schema.json +141 -0
- package/scripts/assert-node-runtime.mjs +146 -0
- package/scripts/preflight-native.mjs +49 -0
- package/scripts/setup-git-hooks.mjs +39 -0
- package/scripts/sync.sh +2871 -0
- package/scripts/write-node-launcher.sh +138 -0
- package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
- package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
- package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
- package/templates/.build-project/README.md +41 -0
- package/templates/.build-project/agents/README.md +50 -0
- package/templates/.build-project/agents/architect.md +10 -0
- package/templates/.build-project/agents/code-reviewer.md +10 -0
- package/templates/.build-project/agents/debugger.md +10 -0
- package/templates/.build-project/agents/documenter.md +10 -0
- package/templates/.build-project/agents/test-automator.md +10 -0
- package/templates/.build-project/config/build.config.jsonc +64 -0
- package/templates/.build-project/config/project-context.template.json +6 -0
- package/templates/.build-project/config/task-type-aliases.presets/kanban.yaml +14 -0
- package/templates/.build-project/config/task-type-aliases.presets/scrum.yaml +17 -0
- package/templates/.build-project/config/task-type-aliases.presets/xp.yaml +12 -0
- package/templates/.build-project/config/task-type-aliases.yaml +29 -0
- package/templates/.build-project/gitignore.template +70 -0
- package/templates/.build-project/task-types/analysis.yaml +38 -0
- package/templates/.build-project/task-types/architecture.yaml +35 -0
- package/templates/.build-project/task-types/doc.yaml +34 -0
- package/templates/.build-project/task-types/feature.yaml +22 -0
- package/templates/.build-project/task-types/general.yaml +4 -0
- package/templates/.build-project/task-types/security.yaml +38 -0
- package/templates/AGENTS.template.md +85 -0
- package/templates/CLAUDE.template.md +1 -0
- package/templates/GEMINI.template.md +1 -0
- package/templates/builtin-workflows/code-review.yaml +73 -0
- package/templates/builtin-workflows/skills/code-review/SKILL.md +61 -0
- package/templates/builtin-workflows/skills/execution-contract-analysis/SKILL.md +24 -0
- package/templates/builtin-workflows/skills/execution-contract-code/SKILL.md +19 -0
- package/templates/builtin-workflows/skills/execution-contract-structured/SKILL.md +17 -0
- package/templates/ci/incident-intake.mjs +787 -0
- package/templates/ci/incidents.yml.template +103 -0
- package/templates/ci/node.yml.template +17 -0
- package/templates/ci/python.yml.template +17 -0
- package/templates/guard-kit/GUARD_SETUP.md.template +258 -0
- package/templates/guard-kit/build-guard.yml.template +189 -0
- package/templates/guard-kit/check.mjs.template +932 -0
- package/templates/guard-kit/config.json.template +7 -0
- package/templates/guard-kit/policy.json.template +1 -0
- package/templates/profiles/README.md +57 -0
- package/templates/profiles/frontier-claude.json +23 -0
- package/templates/profiles/frontier-codex.json +23 -0
|
@@ -0,0 +1,1040 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hasMigratableRepoLocalData,
|
|
3
|
+
isDataMigrationComplete
|
|
4
|
+
} from "./chunk-7TUTZTI2.js";
|
|
5
|
+
import {
|
|
6
|
+
SCHEMA_VERSION,
|
|
7
|
+
TelemetryDatabase,
|
|
8
|
+
checkSchemaVersion
|
|
9
|
+
} from "./chunk-XIBVFMLQ.js";
|
|
10
|
+
import {
|
|
11
|
+
signalCoordinator
|
|
12
|
+
} from "./chunk-GC4CRMTS.js";
|
|
13
|
+
import {
|
|
14
|
+
ensureWorktreeGitExclude,
|
|
15
|
+
parseSingleAbsoluteGitPath
|
|
16
|
+
} from "./chunk-AHU3FKPA.js";
|
|
17
|
+
import {
|
|
18
|
+
isKernelSandboxActive
|
|
19
|
+
} from "./chunk-MJ6WNSIX.js";
|
|
20
|
+
import {
|
|
21
|
+
TelemetryPathResolver
|
|
22
|
+
} from "./chunk-C3KCMAJP.js";
|
|
23
|
+
import {
|
|
24
|
+
execGit,
|
|
25
|
+
execGitSync
|
|
26
|
+
} from "./chunk-MHLEZQQI.js";
|
|
27
|
+
import {
|
|
28
|
+
getGlobalTelemetryDir,
|
|
29
|
+
getProjectDataDir
|
|
30
|
+
} from "./chunk-56WPYDJH.js";
|
|
31
|
+
import {
|
|
32
|
+
findTemplatePackageRoot
|
|
33
|
+
} from "./chunk-STW7OFOA.js";
|
|
34
|
+
import {
|
|
35
|
+
getRuntimeEnv,
|
|
36
|
+
hasExplicitBuildRoot,
|
|
37
|
+
resolveBuildRepoStartDir,
|
|
38
|
+
resolveRepoRootOverride
|
|
39
|
+
} from "./chunk-7VRJHTGZ.js";
|
|
40
|
+
|
|
41
|
+
// src/bootstrap/ensure-initialized.ts
|
|
42
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
43
|
+
import * as fs2 from "fs";
|
|
44
|
+
import * as path2 from "path";
|
|
45
|
+
import { fileURLToPath } from "url";
|
|
46
|
+
import Database from "better-sqlite3";
|
|
47
|
+
import * as lockfile2 from "proper-lockfile";
|
|
48
|
+
|
|
49
|
+
// src/core/sandbox/host-sandbox-hint.ts
|
|
50
|
+
var NESTED_AGENT_ROLE_ENV_KEY = "BUILD_AGENT_ROLE";
|
|
51
|
+
var HOST_SANDBOX_EPERM_HINT = "Build was denied write access (EPERM) to its own state while running inside another agent's sandbox. Run `build` outside the host sandbox; see docs/reference/SECURITY.md, \"Running Build from another agent's sandbox\".";
|
|
52
|
+
function isBuildOwnedEperm(failure) {
|
|
53
|
+
const cause = failure.cause;
|
|
54
|
+
const isEperm = cause?.code === "EPERM" || /\bEPERM\b|operation not permitted/i.test(failure.message);
|
|
55
|
+
if (!isEperm) return false;
|
|
56
|
+
const path3 = typeof cause?.path === "string" ? cause.path : failure.message;
|
|
57
|
+
return /[\\/]\.build(?:-project)?(?![\w.-])/.test(path3);
|
|
58
|
+
}
|
|
59
|
+
function hostSandboxEpermHint(failures) {
|
|
60
|
+
if (!failures.some(isBuildOwnedEperm)) return void 0;
|
|
61
|
+
if (getRuntimeEnv(NESTED_AGENT_ROLE_ENV_KEY)) return void 0;
|
|
62
|
+
return isKernelSandboxActive() ? HOST_SANDBOX_EPERM_HINT : void 0;
|
|
63
|
+
}
|
|
64
|
+
function hostSandboxHintForError(error) {
|
|
65
|
+
if (!(error instanceof Error)) return void 0;
|
|
66
|
+
return hostSandboxEpermHint([{ message: error.message, cause: error }]);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// src/bootstrap/build-git-ignore.ts
|
|
70
|
+
import * as fs from "fs";
|
|
71
|
+
import * as path from "path";
|
|
72
|
+
var GITIGNORE_REL_PATH = ".build-project/.gitignore";
|
|
73
|
+
function normalizeGitignoreEntry(entry) {
|
|
74
|
+
return entry.trim().replace(/^\/+/, "").replace(/\/+$/, "");
|
|
75
|
+
}
|
|
76
|
+
function entrySet(content) {
|
|
77
|
+
return new Set(
|
|
78
|
+
content.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#")).map(normalizeGitignoreEntry).filter(Boolean)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function missingRuntimeEntries(content, templateEntries) {
|
|
82
|
+
const present = entrySet(content);
|
|
83
|
+
return templateEntries.filter((entry) => !present.has(normalizeGitignoreEntry(entry)));
|
|
84
|
+
}
|
|
85
|
+
function toExcludeLine(entry) {
|
|
86
|
+
const trimmed = entry.trim();
|
|
87
|
+
if (trimmed.startsWith("!")) return void 0;
|
|
88
|
+
const anchored = trimmed.startsWith("/");
|
|
89
|
+
const bare = trimmed.replace(/^\/+/, "");
|
|
90
|
+
const hasSlash = bare.replace(/\/+$/, "").includes("/");
|
|
91
|
+
return anchored || hasSlash ? `/.build-project/${bare}` : `/.build-project/**/${bare}`;
|
|
92
|
+
}
|
|
93
|
+
async function inspectBuildIgnore(repoRoot) {
|
|
94
|
+
try {
|
|
95
|
+
const indexed = await execGit(["ls-files", "--", GITIGNORE_REL_PATH], { cwd: repoRoot });
|
|
96
|
+
const inHead = await execGit(["cat-file", "-e", `HEAD:${GITIGNORE_REL_PATH}`], {
|
|
97
|
+
cwd: repoRoot
|
|
98
|
+
});
|
|
99
|
+
const gitignoreTracked = indexed.exitCode === 0 && indexed.stdout.trim().length > 0 || inHead.exitCode === 0;
|
|
100
|
+
const exclude = await execGit(
|
|
101
|
+
["rev-parse", "--path-format=absolute", "--git-path", "info/exclude"],
|
|
102
|
+
{ cwd: repoRoot }
|
|
103
|
+
);
|
|
104
|
+
const excludePath = exclude.exitCode === 0 ? parseSingleAbsoluteGitPath(exclude.stdout) : void 0;
|
|
105
|
+
return excludePath ? { gitignoreTracked, excludePath } : { gitignoreTracked };
|
|
106
|
+
} catch {
|
|
107
|
+
return { gitignoreTracked: false };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function hasBuildGitignoreRuntimeEntries(buildDir, templateEntries, state) {
|
|
111
|
+
if (state.gitignoreTracked) return true;
|
|
112
|
+
try {
|
|
113
|
+
const content = fs.readFileSync(path.join(buildDir, ".gitignore"), "utf-8");
|
|
114
|
+
return missingRuntimeEntries(content, templateEntries).length === 0;
|
|
115
|
+
} catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function ensureBuildGitignoreRuntimeEntries(buildDir, templateEntries, result, log) {
|
|
120
|
+
const gitignorePath = path.join(buildDir, ".gitignore");
|
|
121
|
+
let existing = "";
|
|
122
|
+
try {
|
|
123
|
+
existing = fs.readFileSync(gitignorePath, "utf-8");
|
|
124
|
+
} catch {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const missing = missingRuntimeEntries(existing, templateEntries);
|
|
128
|
+
if (missing.length === 0) return;
|
|
129
|
+
const prefix = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
130
|
+
fs.appendFileSync(gitignorePath, `${prefix}${missing.join("\n")}
|
|
131
|
+
`);
|
|
132
|
+
result.actions.repaired.push(gitignorePath);
|
|
133
|
+
log(`Updated runtime ignore entries: ${gitignorePath}`);
|
|
134
|
+
}
|
|
135
|
+
function removeRuntimeStubExclude(excludePath, result, log) {
|
|
136
|
+
const stubLine = `/${GITIGNORE_REL_PATH}`;
|
|
137
|
+
try {
|
|
138
|
+
if (!fs.existsSync(excludePath)) return;
|
|
139
|
+
const lines = fs.readFileSync(excludePath, "utf-8").split("\n");
|
|
140
|
+
const kept = lines.filter((line) => line.replace(/\r$/, "").trim() !== stubLine);
|
|
141
|
+
if (kept.length === lines.length) return;
|
|
142
|
+
fs.writeFileSync(excludePath, kept.join("\n"));
|
|
143
|
+
result.gitExcludeNotices = [
|
|
144
|
+
...result.gitExcludeNotices ?? [],
|
|
145
|
+
`Removed the runtime-only ${stubLine} entry from ${excludePath}`
|
|
146
|
+
];
|
|
147
|
+
log(`Updated git info exclude: ${excludePath}`);
|
|
148
|
+
} catch (error) {
|
|
149
|
+
result.gitExcludeNotices = [
|
|
150
|
+
...result.gitExcludeNotices ?? [],
|
|
151
|
+
`Warning: could not update ${excludePath}: ${error instanceof Error ? error.message : String(error)}`
|
|
152
|
+
];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async function reconcileBuildGitExclude(options) {
|
|
156
|
+
const { repoRoot, buildDir, tier, templateEntries, state, result, log } = options;
|
|
157
|
+
const requestedTier = options.requestedTier ?? tier;
|
|
158
|
+
const runtimeCreatedStub = requestedTier === "runtime" && options.stubCreatedHere === true;
|
|
159
|
+
if (!state.excludePath) return;
|
|
160
|
+
const wanted = [];
|
|
161
|
+
if (state.gitignoreTracked) {
|
|
162
|
+
let content = "";
|
|
163
|
+
try {
|
|
164
|
+
content = fs.readFileSync(path.join(buildDir, ".gitignore"), "utf-8");
|
|
165
|
+
} catch {
|
|
166
|
+
}
|
|
167
|
+
for (const entry of missingRuntimeEntries(content, templateEntries)) {
|
|
168
|
+
const line = toExcludeLine(entry);
|
|
169
|
+
if (line) wanted.push(line);
|
|
170
|
+
else {
|
|
171
|
+
result.gitExcludeNotices = [
|
|
172
|
+
...result.gitExcludeNotices ?? [],
|
|
173
|
+
`Warning: skipped negated Build runtime entry "${entry}"; it cannot be written to info/exclude`
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
} else if ((tier === "runtime" || runtimeCreatedStub) && fs.existsSync(path.join(buildDir, ".gitignore"))) {
|
|
178
|
+
wanted.push(`/${GITIGNORE_REL_PATH}`);
|
|
179
|
+
}
|
|
180
|
+
if (requestedTier === "full") removeRuntimeStubExclude(state.excludePath, result, log);
|
|
181
|
+
if (wanted.length === 0) return;
|
|
182
|
+
try {
|
|
183
|
+
const existing = fs.existsSync(state.excludePath) ? fs.readFileSync(state.excludePath, "utf-8") : "";
|
|
184
|
+
const present = new Set(existing.split(/\r?\n/).map((line) => line.trim()));
|
|
185
|
+
const missing = wanted.filter((line) => !present.has(line));
|
|
186
|
+
if (missing.length === 0) return;
|
|
187
|
+
await ensureWorktreeGitExclude(repoRoot, missing);
|
|
188
|
+
const after = fs.readFileSync(state.excludePath, "utf-8");
|
|
189
|
+
const written = new Set(after.split(/\r?\n/).map((line) => line.trim()));
|
|
190
|
+
if (!missing.every((line) => written.has(line))) {
|
|
191
|
+
throw new Error("exclude file did not accept the new lines");
|
|
192
|
+
}
|
|
193
|
+
result.gitExcludeNotices = [
|
|
194
|
+
...result.gitExcludeNotices ?? [],
|
|
195
|
+
`Added ${missing.length} Build runtime ${missing.length === 1 ? "entry" : "entries"} to ${state.excludePath}`
|
|
196
|
+
];
|
|
197
|
+
log(`Updated git info exclude: ${state.excludePath}`);
|
|
198
|
+
} catch (error) {
|
|
199
|
+
result.gitExcludeNotices = [
|
|
200
|
+
...result.gitExcludeNotices ?? [],
|
|
201
|
+
`Warning: could not update ${state.excludePath}: ${error instanceof Error ? error.message : String(error)}`
|
|
202
|
+
];
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// src/bootstrap/init-lock-signals.ts
|
|
207
|
+
import * as lockfile from "proper-lockfile";
|
|
208
|
+
var RELEASE_SIGNALS = ["SIGINT", "SIGTERM"];
|
|
209
|
+
var externalShutdownOwner = false;
|
|
210
|
+
function declareExternalShutdownOwner() {
|
|
211
|
+
externalShutdownOwner = true;
|
|
212
|
+
}
|
|
213
|
+
function hasShutdownOwner() {
|
|
214
|
+
return externalShutdownOwner || signalCoordinator.isShuttingDown;
|
|
215
|
+
}
|
|
216
|
+
function registerInitLockSignalRelease(lockPath, raise = (signal) => process.kill(process.pid, signal)) {
|
|
217
|
+
const handlers = /* @__PURE__ */ new Map();
|
|
218
|
+
const dispose = () => {
|
|
219
|
+
for (const [signal, handler] of handlers) {
|
|
220
|
+
process.removeListener(signal, handler);
|
|
221
|
+
}
|
|
222
|
+
handlers.clear();
|
|
223
|
+
};
|
|
224
|
+
for (const signal of RELEASE_SIGNALS) {
|
|
225
|
+
const handler = () => {
|
|
226
|
+
try {
|
|
227
|
+
lockfile.unlockSync(lockPath);
|
|
228
|
+
} catch {
|
|
229
|
+
}
|
|
230
|
+
dispose();
|
|
231
|
+
if (!hasShutdownOwner()) {
|
|
232
|
+
raise(signal);
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
handlers.set(signal, handler);
|
|
236
|
+
process.on(signal, handler);
|
|
237
|
+
}
|
|
238
|
+
return dispose;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// src/bootstrap/initialization-types.ts
|
|
242
|
+
var RuntimeRequirements = {
|
|
243
|
+
/**
|
|
244
|
+
* Required directories, all relative to the `.build-project/` directory.
|
|
245
|
+
*
|
|
246
|
+
* `telemetry/` is deliberately absent: telemetry databases, JSONL logs and run
|
|
247
|
+
* state (`telemetry/state`) all resolve under the Build data root, and
|
|
248
|
+
* pre-creating repo-local copies here is what gave a fresh checkout an empty
|
|
249
|
+
* `.build-project/telemetry/db/validations.db` before its first competition. Writers
|
|
250
|
+
* create their own directories on first use.
|
|
251
|
+
*/
|
|
252
|
+
directories: ["artifacts", "config", "cache", "worktrees", "state"],
|
|
253
|
+
/**
|
|
254
|
+
* Required database file names.
|
|
255
|
+
*
|
|
256
|
+
* File names only, not paths: the containing directory comes from
|
|
257
|
+
* `TelemetryPathResolver.resolveDbDir`, so bootstrap creates and health-checks
|
|
258
|
+
* the same files the writers use.
|
|
259
|
+
*/
|
|
260
|
+
databases: ["variants.db", "validations.db"],
|
|
261
|
+
/** Required configuration files (created from embedded templates if missing) */
|
|
262
|
+
configFiles: [".gitignore"],
|
|
263
|
+
/** State marker file */
|
|
264
|
+
stateFile: "state/init.json",
|
|
265
|
+
/** Initialization lock file path (for cross-process safety) */
|
|
266
|
+
lockFile: "state/.init.lock"
|
|
267
|
+
};
|
|
268
|
+
var FullRequirements = {
|
|
269
|
+
/** Additional directories for full tier */
|
|
270
|
+
directories: [
|
|
271
|
+
// Note: all paths are relative to the `.build-project/` directory.
|
|
272
|
+
"templates",
|
|
273
|
+
"planning",
|
|
274
|
+
"reasoning"
|
|
275
|
+
],
|
|
276
|
+
/** Optional configuration files for full setup */
|
|
277
|
+
optionalConfig: ["config/user.yaml"]
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
// src/bootstrap/template-personas.ts
|
|
281
|
+
function isAgentPersonaTemplate(relPath) {
|
|
282
|
+
const normalized = relPath.split("\\").join("/");
|
|
283
|
+
return normalized.startsWith("agents/") && normalized !== "agents/README.md";
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// src/bootstrap/ensure-initialized.ts
|
|
287
|
+
var __filename = fileURLToPath(import.meta.url);
|
|
288
|
+
var __dirname = path2.dirname(__filename);
|
|
289
|
+
function resolveRepoRootForBuildDir(cwd, options = {}) {
|
|
290
|
+
const { honorBuildRepo = true } = options;
|
|
291
|
+
if (honorBuildRepo && hasExplicitBuildRoot()) {
|
|
292
|
+
const explicitRoot = resolveRepoRootOverride();
|
|
293
|
+
if (explicitRoot) {
|
|
294
|
+
return explicitRoot;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const startDir = honorBuildRepo ? resolveBuildRepoStartDir(cwd) : cwd;
|
|
298
|
+
try {
|
|
299
|
+
const result = execGitSync(["rev-parse", "--show-toplevel"], { cwd: startDir });
|
|
300
|
+
const stdout = result.exitCode === 0 ? result.stdout.trim() : "";
|
|
301
|
+
if (stdout) return stdout;
|
|
302
|
+
} catch {
|
|
303
|
+
}
|
|
304
|
+
let currentDir = path2.resolve(startDir);
|
|
305
|
+
while (true) {
|
|
306
|
+
const gitDir = path2.join(currentDir, ".git");
|
|
307
|
+
if (fs2.existsSync(gitDir)) return currentDir;
|
|
308
|
+
const parentDir = path2.dirname(currentDir);
|
|
309
|
+
if (parentDir === currentDir) break;
|
|
310
|
+
currentDir = parentDir;
|
|
311
|
+
}
|
|
312
|
+
return path2.resolve(startDir);
|
|
313
|
+
}
|
|
314
|
+
var PACKAGE_ROOT = findTemplatePackageRoot(__dirname) ?? path2.resolve(__dirname, "..");
|
|
315
|
+
var TEMPLATE_BUILD_DIR = path2.join(PACKAGE_ROOT, "templates", ".build-project");
|
|
316
|
+
var PACK_SAFE_TEMPLATE_SOURCES = {
|
|
317
|
+
".gitignore": "gitignore.template"
|
|
318
|
+
};
|
|
319
|
+
var BUILD_GITIGNORE_RUNTIME_ENTRY_FALLBACK = [
|
|
320
|
+
"runs/",
|
|
321
|
+
"blocker-answers/",
|
|
322
|
+
"merge-apply/",
|
|
323
|
+
"config/project-context.json",
|
|
324
|
+
"provider-history/",
|
|
325
|
+
"prompts/",
|
|
326
|
+
"planning/indexes/",
|
|
327
|
+
"/plans/",
|
|
328
|
+
// Transient intent context-injection telemetry (see gitignore.template).
|
|
329
|
+
"logs/injection/"
|
|
330
|
+
];
|
|
331
|
+
function readBuildGitignoreTemplateEntries() {
|
|
332
|
+
const templatePath = path2.join(TEMPLATE_BUILD_DIR, templateSourceRelPath(".gitignore"));
|
|
333
|
+
try {
|
|
334
|
+
return fs2.readFileSync(templatePath, "utf-8").split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
335
|
+
} catch {
|
|
336
|
+
return [...BUILD_GITIGNORE_RUNTIME_ENTRY_FALLBACK];
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function toPosixRelPath(relPath) {
|
|
340
|
+
return relPath.split(path2.sep).join("/");
|
|
341
|
+
}
|
|
342
|
+
function templateSourceRelPath(destRelPath) {
|
|
343
|
+
return PACK_SAFE_TEMPLATE_SOURCES[toPosixRelPath(destRelPath)] ?? destRelPath;
|
|
344
|
+
}
|
|
345
|
+
function templateDestRelPath(sourceRelPath) {
|
|
346
|
+
const normalized = toPosixRelPath(sourceRelPath);
|
|
347
|
+
for (const [dest, source] of Object.entries(PACK_SAFE_TEMPLATE_SOURCES)) {
|
|
348
|
+
if (source === normalized) return dest;
|
|
349
|
+
}
|
|
350
|
+
return sourceRelPath;
|
|
351
|
+
}
|
|
352
|
+
var LOCK_TIMEOUT_MS = 1e4;
|
|
353
|
+
var LOCK_OPTIONS = {
|
|
354
|
+
stale: 3e4,
|
|
355
|
+
// Consider lock stale after 30 seconds
|
|
356
|
+
retries: {
|
|
357
|
+
retries: 50,
|
|
358
|
+
minTimeout: 100,
|
|
359
|
+
maxTimeout: 1e3,
|
|
360
|
+
maxRetryTime: LOCK_TIMEOUT_MS
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
function getProjectInitializationLockPath(repoRoot) {
|
|
364
|
+
return path2.join(getProjectDataDir(path2.resolve(repoRoot)), "initialization.lock");
|
|
365
|
+
}
|
|
366
|
+
var heldProjectInitializationLocks = new AsyncLocalStorage();
|
|
367
|
+
async function withProjectInitializationLock(repoRoot, fn) {
|
|
368
|
+
const lockPath = getProjectInitializationLockPath(repoRoot);
|
|
369
|
+
const heldLocks = heldProjectInitializationLocks.getStore();
|
|
370
|
+
if (heldLocks?.has(lockPath)) return fn();
|
|
371
|
+
return withInitLock(
|
|
372
|
+
lockPath,
|
|
373
|
+
() => heldProjectInitializationLocks.run(/* @__PURE__ */ new Set([...heldLocks ?? [], lockPath]), fn)
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
async function ensureBuildInitialized(options = {}) {
|
|
377
|
+
const repoRoot = resolveRepoRootForBuildDir(options.cwd ?? process.cwd());
|
|
378
|
+
return withProjectInitializationLock(
|
|
379
|
+
repoRoot,
|
|
380
|
+
() => ensureBuildInitializedLocked({ ...options, cwd: repoRoot })
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
async function ensureBuildInitializedLocked(options) {
|
|
384
|
+
const startTime = Date.now();
|
|
385
|
+
const {
|
|
386
|
+
cwd = process.cwd(),
|
|
387
|
+
tier = "runtime",
|
|
388
|
+
verbose = false,
|
|
389
|
+
repair = false,
|
|
390
|
+
allowDegraded = true,
|
|
391
|
+
fullTemplateExcludes = [],
|
|
392
|
+
agentPersonas = false
|
|
393
|
+
} = options;
|
|
394
|
+
const repoRoot = resolveRepoRootForBuildDir(cwd);
|
|
395
|
+
const buildDir = path2.join(repoRoot, ".build-project");
|
|
396
|
+
const stateFilePath = path2.join(buildDir, RuntimeRequirements.stateFile);
|
|
397
|
+
const result = {
|
|
398
|
+
status: "ok",
|
|
399
|
+
tier,
|
|
400
|
+
actions: { created: [], repaired: [], skipped: [] },
|
|
401
|
+
warnings: [],
|
|
402
|
+
errors: [],
|
|
403
|
+
nextSteps: [],
|
|
404
|
+
telemetryMode: "database",
|
|
405
|
+
initDurationMs: 0
|
|
406
|
+
};
|
|
407
|
+
const log = (message) => {
|
|
408
|
+
if (verbose) {
|
|
409
|
+
console.log(`[Init] ${message}`);
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
if (!repair) {
|
|
413
|
+
const fastState = readInitializationState(stateFilePath);
|
|
414
|
+
const dbDir = resolveTelemetryDbDir(buildDir);
|
|
415
|
+
const databasesOpenable = areDatabasesOpenable(dbDir);
|
|
416
|
+
const ignoreState = await inspectBuildIgnore(repoRoot);
|
|
417
|
+
const hasGitignoreStub = ignoreState.gitignoreTracked || fs2.existsSync(path2.join(buildDir, ".gitignore"));
|
|
418
|
+
const hasRuntimeGitignoreEntries = hasBuildGitignoreRuntimeEntries(
|
|
419
|
+
buildDir,
|
|
420
|
+
readBuildGitignoreTemplateEntries(),
|
|
421
|
+
ignoreState
|
|
422
|
+
);
|
|
423
|
+
if (tier === "runtime" && fastState && fastState.schemaVersion === SCHEMA_VERSION && databasesOpenable && hasGitignoreStub && hasRuntimeGitignoreEntries && isTierSufficient(fastState.tier, tier)) {
|
|
424
|
+
await reconcileBuildGitExclude({
|
|
425
|
+
repoRoot,
|
|
426
|
+
buildDir,
|
|
427
|
+
tier: maxTier(fastState.tier, tier),
|
|
428
|
+
requestedTier: tier,
|
|
429
|
+
templateEntries: readBuildGitignoreTemplateEntries(),
|
|
430
|
+
state: ignoreState,
|
|
431
|
+
result,
|
|
432
|
+
log
|
|
433
|
+
});
|
|
434
|
+
if (result.status === "ok" || allowDegraded && result.status === "degraded") {
|
|
435
|
+
await warnIfDataMigrationPending(buildDir, result);
|
|
436
|
+
if (result.actions.created.length > 0 || result.actions.repaired.length > 0) {
|
|
437
|
+
try {
|
|
438
|
+
await writeStateMarker(buildDir, tier, result, log, true, {
|
|
439
|
+
materialChanges: true,
|
|
440
|
+
schemaNeedsHealing: false
|
|
441
|
+
});
|
|
442
|
+
} catch {
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
result.schemaVersion = fastState.schemaVersion;
|
|
446
|
+
result.nextSteps = generateNextSteps(result);
|
|
447
|
+
result.initDurationMs = Date.now() - startTime;
|
|
448
|
+
return finalizeInitializationResult(result, allowDegraded);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
try {
|
|
453
|
+
log("Ensuring base directory exists");
|
|
454
|
+
await ensureBaseDirectory(buildDir, result, log);
|
|
455
|
+
const lockResult = await (async () => {
|
|
456
|
+
log("Checking required directories");
|
|
457
|
+
await ensureDirectories(buildDir, tier, result, log, allowDegraded);
|
|
458
|
+
await ensureExternalDataDirectories(repoRoot, buildDir, result, log);
|
|
459
|
+
log("Initializing databases");
|
|
460
|
+
await initializeDatabases(buildDir, result, log, allowDegraded);
|
|
461
|
+
log("Checking configuration stubs");
|
|
462
|
+
const ignoreState = await inspectBuildIgnore(repoRoot);
|
|
463
|
+
await ensureConfigStubs(
|
|
464
|
+
buildDir,
|
|
465
|
+
tier,
|
|
466
|
+
result,
|
|
467
|
+
log,
|
|
468
|
+
fullTemplateExcludes,
|
|
469
|
+
agentPersonas,
|
|
470
|
+
ignoreState
|
|
471
|
+
);
|
|
472
|
+
const existingState = readInitializationState(stateFilePath);
|
|
473
|
+
const effectiveTier = maxTier(existingState?.tier ?? tier, tier);
|
|
474
|
+
await reconcileBuildGitExclude({
|
|
475
|
+
repoRoot,
|
|
476
|
+
buildDir,
|
|
477
|
+
tier: effectiveTier,
|
|
478
|
+
requestedTier: tier,
|
|
479
|
+
stubCreatedHere: result.actions.created.includes(path2.join(buildDir, ".gitignore")),
|
|
480
|
+
templateEntries: readBuildGitignoreTemplateEntries(),
|
|
481
|
+
state: ignoreState,
|
|
482
|
+
result,
|
|
483
|
+
log
|
|
484
|
+
});
|
|
485
|
+
log("Writing state marker");
|
|
486
|
+
const schemaNeedsHealing = typeof existingState?.schemaVersion === "number" && typeof result.schemaVersion === "number" && existingState.schemaVersion < result.schemaVersion;
|
|
487
|
+
const materialChangesBeforeState = result.actions.created.length > 0 || result.actions.repaired.length > 0;
|
|
488
|
+
const shouldUpdateState = repair || schemaNeedsHealing || materialChangesBeforeState;
|
|
489
|
+
await writeStateMarker(buildDir, tier, result, log, shouldUpdateState, {
|
|
490
|
+
materialChanges: materialChangesBeforeState,
|
|
491
|
+
schemaNeedsHealing
|
|
492
|
+
});
|
|
493
|
+
return result;
|
|
494
|
+
})();
|
|
495
|
+
Object.assign(result, lockResult);
|
|
496
|
+
} catch (error) {
|
|
497
|
+
const errorCode = determineErrorCode(error);
|
|
498
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
499
|
+
result.status = "failed";
|
|
500
|
+
result.errors.push({
|
|
501
|
+
code: errorCode,
|
|
502
|
+
message: errorMessage,
|
|
503
|
+
cause: error
|
|
504
|
+
});
|
|
505
|
+
if (errorCode === "DB_LOCKED" /* DB_LOCKED */) {
|
|
506
|
+
result.nextSteps.push(
|
|
507
|
+
"Wait for other Build processes to complete",
|
|
508
|
+
"Check for a stale project initialization lock in the Build data directory",
|
|
509
|
+
`If issue persists, inspect ${getProjectInitializationLockPath(repoRoot)}`
|
|
510
|
+
);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
result.initDurationMs = Date.now() - startTime;
|
|
514
|
+
if (result.nextSteps.length === 0) {
|
|
515
|
+
result.nextSteps = generateNextSteps(result);
|
|
516
|
+
}
|
|
517
|
+
log(`Initialization complete: ${result.status} (${result.initDurationMs}ms)`);
|
|
518
|
+
return finalizeInitializationResult(result, allowDegraded);
|
|
519
|
+
}
|
|
520
|
+
async function withInitLock(lockPath, fn, lockOptions = LOCK_OPTIONS) {
|
|
521
|
+
const lockDir = path2.dirname(lockPath);
|
|
522
|
+
if (!fs2.existsSync(lockDir)) {
|
|
523
|
+
fs2.mkdirSync(lockDir, { recursive: true });
|
|
524
|
+
}
|
|
525
|
+
if (!fs2.existsSync(lockPath)) {
|
|
526
|
+
fs2.writeFileSync(lockPath, "");
|
|
527
|
+
}
|
|
528
|
+
let release;
|
|
529
|
+
let disposeSignalRelease;
|
|
530
|
+
try {
|
|
531
|
+
try {
|
|
532
|
+
release = await lockfile2.lock(lockPath, lockOptions);
|
|
533
|
+
} catch (error) {
|
|
534
|
+
if (error.code === "ELOCKED") {
|
|
535
|
+
throw new Error(
|
|
536
|
+
`Lock acquisition timeout after ${LOCK_TIMEOUT_MS}ms. Another Build process may be initializing. If none is running, remove ${lockPath}.lock; a lock older than ${LOCK_OPTIONS.stale / 1e3} seconds is reclaimed automatically.`,
|
|
537
|
+
{ cause: error }
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
throw error;
|
|
541
|
+
}
|
|
542
|
+
disposeSignalRelease = registerInitLockSignalRelease(lockPath);
|
|
543
|
+
return await fn();
|
|
544
|
+
} finally {
|
|
545
|
+
disposeSignalRelease?.();
|
|
546
|
+
if (release) {
|
|
547
|
+
try {
|
|
548
|
+
await release();
|
|
549
|
+
} catch (error) {
|
|
550
|
+
console.warn(
|
|
551
|
+
"[Init] Failed to release lock:",
|
|
552
|
+
error instanceof Error ? error.message : String(error)
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
async function ensureBaseDirectory(buildDir, result, log) {
|
|
559
|
+
try {
|
|
560
|
+
if (!fs2.existsSync(buildDir)) {
|
|
561
|
+
fs2.mkdirSync(buildDir, { recursive: true });
|
|
562
|
+
result.actions.created.push(buildDir);
|
|
563
|
+
log(`Created: ${buildDir}`);
|
|
564
|
+
} else {
|
|
565
|
+
result.actions.skipped.push(buildDir);
|
|
566
|
+
}
|
|
567
|
+
} catch (error) {
|
|
568
|
+
const errorCode = determineErrorCode(error);
|
|
569
|
+
result.status = "failed";
|
|
570
|
+
result.errors.push({
|
|
571
|
+
code: errorCode,
|
|
572
|
+
message: `Failed to create base directory: ${error instanceof Error ? error.message : String(error)}`,
|
|
573
|
+
cause: error,
|
|
574
|
+
path: buildDir
|
|
575
|
+
});
|
|
576
|
+
throw error;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
async function ensureDirectories(buildDir, tier, result, log, allowDegraded = true) {
|
|
580
|
+
const directories = [...RuntimeRequirements.directories];
|
|
581
|
+
if (tier === "full") {
|
|
582
|
+
directories.push(...FullRequirements.directories);
|
|
583
|
+
}
|
|
584
|
+
for (const dir of directories) {
|
|
585
|
+
const fullPath = path2.join(buildDir, dir);
|
|
586
|
+
try {
|
|
587
|
+
if (!fs2.existsSync(fullPath)) {
|
|
588
|
+
fs2.mkdirSync(fullPath, { recursive: true });
|
|
589
|
+
result.actions.created.push(fullPath);
|
|
590
|
+
log(`Created: ${fullPath}`);
|
|
591
|
+
} else {
|
|
592
|
+
result.actions.skipped.push(fullPath);
|
|
593
|
+
}
|
|
594
|
+
} catch (error) {
|
|
595
|
+
const errorCode = determineErrorCode(error);
|
|
596
|
+
result.warnings.push(
|
|
597
|
+
`Failed to create directory ${fullPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
598
|
+
);
|
|
599
|
+
if (dir.includes("telemetry") || dir.includes("config") || dir.includes("cache") || dir.includes("state") || dir.includes("worktrees")) {
|
|
600
|
+
result.errors.push({
|
|
601
|
+
code: errorCode,
|
|
602
|
+
message: `Failed to create critical directory: ${fullPath}`,
|
|
603
|
+
cause: error,
|
|
604
|
+
path: fullPath
|
|
605
|
+
});
|
|
606
|
+
if (allowDegraded) {
|
|
607
|
+
result.status = "degraded";
|
|
608
|
+
} else {
|
|
609
|
+
result.status = "failed";
|
|
610
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
async function ensureExternalDataDirectories(repoRoot, buildDir, result, log) {
|
|
617
|
+
const globalTelemetryDir = getGlobalTelemetryDir();
|
|
618
|
+
const projectDataDir = getProjectDataDir(repoRoot);
|
|
619
|
+
const externalDirs = [
|
|
620
|
+
globalTelemetryDir,
|
|
621
|
+
path2.join(globalTelemetryDir, "db"),
|
|
622
|
+
path2.join(globalTelemetryDir, "logs"),
|
|
623
|
+
projectDataDir,
|
|
624
|
+
path2.join(projectDataDir, "state"),
|
|
625
|
+
path2.join(projectDataDir, "provider-history"),
|
|
626
|
+
path2.join(projectDataDir, "labs"),
|
|
627
|
+
path2.join(projectDataDir, "backups"),
|
|
628
|
+
path2.join(projectDataDir, "lifecycle"),
|
|
629
|
+
path2.join(projectDataDir, "cache")
|
|
630
|
+
];
|
|
631
|
+
for (const dir of externalDirs) {
|
|
632
|
+
try {
|
|
633
|
+
if (!fs2.existsSync(dir)) {
|
|
634
|
+
fs2.mkdirSync(dir, { recursive: true, mode: 448 });
|
|
635
|
+
result.actions.created.push(dir);
|
|
636
|
+
log(`Created external data dir: ${dir}`);
|
|
637
|
+
}
|
|
638
|
+
} catch (error) {
|
|
639
|
+
result.warnings.push(
|
|
640
|
+
`Failed to create external data directory ${dir}: ${error instanceof Error ? error.message : String(error)}`
|
|
641
|
+
);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
await warnIfDataMigrationPending(buildDir, result);
|
|
645
|
+
}
|
|
646
|
+
async function warnIfDataMigrationPending(buildDir, result) {
|
|
647
|
+
if (isDataMigrationComplete(buildDir)) {
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
try {
|
|
651
|
+
if (!await hasMigratableRepoLocalData(buildDir)) {
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
} catch {
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
result.warnings.push(
|
|
658
|
+
"Legacy telemetry data detected in .build-project/. Run `build data migrate preview` then `build data migrate execute` to externalize non-reproducible data."
|
|
659
|
+
);
|
|
660
|
+
}
|
|
661
|
+
async function initializeDatabases(buildDir, result, log, allowDegraded) {
|
|
662
|
+
const dbDir = resolveTelemetryDbDir(buildDir);
|
|
663
|
+
try {
|
|
664
|
+
if (!fs2.existsSync(dbDir)) {
|
|
665
|
+
fs2.mkdirSync(dbDir, { recursive: true });
|
|
666
|
+
result.actions.created.push(dbDir);
|
|
667
|
+
}
|
|
668
|
+
const progressReporter = (message) => log(message);
|
|
669
|
+
const db = new TelemetryDatabase(dbDir, progressReporter);
|
|
670
|
+
log("Initializing database schema");
|
|
671
|
+
db.init();
|
|
672
|
+
const health = db.getHealth();
|
|
673
|
+
log(`Database health: ${JSON.stringify(health)}`);
|
|
674
|
+
if (!health.available) {
|
|
675
|
+
throw new Error(health.lastInitError || "Database initialization failed");
|
|
676
|
+
}
|
|
677
|
+
const variantsDb = db.getVariantsDb();
|
|
678
|
+
if (variantsDb) {
|
|
679
|
+
const currentVersion = checkSchemaVersion(variantsDb);
|
|
680
|
+
result.schemaVersion = currentVersion;
|
|
681
|
+
if (currentVersion !== SCHEMA_VERSION) {
|
|
682
|
+
result.warnings.push(
|
|
683
|
+
`Schema version mismatch: expected ${SCHEMA_VERSION}, got ${currentVersion}`
|
|
684
|
+
);
|
|
685
|
+
} else {
|
|
686
|
+
log(`Schema version: ${currentVersion}`);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
db.close();
|
|
690
|
+
result.telemetryMode = "database";
|
|
691
|
+
} catch (error) {
|
|
692
|
+
const errorCode = determineErrorCode(error);
|
|
693
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
694
|
+
log(`Database initialization failed: ${errorMessage}`);
|
|
695
|
+
result.errors.push({
|
|
696
|
+
code: errorCode,
|
|
697
|
+
message: `Database initialization failed: ${errorMessage}`,
|
|
698
|
+
cause: error,
|
|
699
|
+
path: dbDir
|
|
700
|
+
});
|
|
701
|
+
if (allowDegraded) {
|
|
702
|
+
result.status = "degraded";
|
|
703
|
+
result.telemetryMode = "jsonl-only";
|
|
704
|
+
result.warnings.push("Operating in JSONL-only mode (database unavailable)");
|
|
705
|
+
log("Entering degraded mode (JSONL-only)");
|
|
706
|
+
} else {
|
|
707
|
+
result.status = "failed";
|
|
708
|
+
throw error;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
async function ensureConfigStubs(buildDir, tier, result, log, fullTemplateExcludes = [], agentPersonas = false, ignoreState = { gitignoreTracked: false }) {
|
|
713
|
+
for (const relPath of RuntimeRequirements.configFiles) {
|
|
714
|
+
const destPath = path2.join(buildDir, relPath);
|
|
715
|
+
if (relPath === ".gitignore" && ignoreState.gitignoreTracked) {
|
|
716
|
+
result.actions.skipped.push(destPath);
|
|
717
|
+
continue;
|
|
718
|
+
}
|
|
719
|
+
if (fs2.existsSync(destPath)) {
|
|
720
|
+
result.actions.skipped.push(destPath);
|
|
721
|
+
if (relPath === ".gitignore") {
|
|
722
|
+
ensureBuildGitignoreRuntimeEntries(
|
|
723
|
+
buildDir,
|
|
724
|
+
readBuildGitignoreTemplateEntries(),
|
|
725
|
+
result,
|
|
726
|
+
log
|
|
727
|
+
);
|
|
728
|
+
}
|
|
729
|
+
continue;
|
|
730
|
+
}
|
|
731
|
+
const sourcePath = path2.join(TEMPLATE_BUILD_DIR, templateSourceRelPath(relPath));
|
|
732
|
+
if (!fs2.existsSync(sourcePath)) {
|
|
733
|
+
const message = `Missing embedded template: ${sourcePath}`;
|
|
734
|
+
result.warnings.push(message);
|
|
735
|
+
continue;
|
|
736
|
+
}
|
|
737
|
+
try {
|
|
738
|
+
fs2.mkdirSync(path2.dirname(destPath), { recursive: true });
|
|
739
|
+
fs2.copyFileSync(sourcePath, destPath);
|
|
740
|
+
if (relPath === ".gitignore") {
|
|
741
|
+
ensureBuildGitignoreRuntimeEntries(
|
|
742
|
+
buildDir,
|
|
743
|
+
readBuildGitignoreTemplateEntries(),
|
|
744
|
+
result,
|
|
745
|
+
log
|
|
746
|
+
);
|
|
747
|
+
}
|
|
748
|
+
result.actions.created.push(destPath);
|
|
749
|
+
log(`Created: ${destPath}`);
|
|
750
|
+
} catch (error) {
|
|
751
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
752
|
+
result.warnings.push(`Failed to copy template ${relPath}: ${errorMessage}`);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
if (tier === "full") {
|
|
756
|
+
const excludes = [.../* @__PURE__ */ new Set([...fullTemplateExcludes, "config/providers.yaml", "task-types"])];
|
|
757
|
+
excludes.push("config/build.config.jsonc");
|
|
758
|
+
await ensureTemplateTree(buildDir, result, log, excludes, agentPersonas, ignoreState);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
async function ensureTemplateTree(buildDir, result, log, fullTemplateExcludes = [], agentPersonas = false, ignoreState = { gitignoreTracked: false }) {
|
|
762
|
+
if (!fs2.existsSync(TEMPLATE_BUILD_DIR)) {
|
|
763
|
+
const message = `Templates directory not found: ${TEMPLATE_BUILD_DIR}`;
|
|
764
|
+
result.status = "failed";
|
|
765
|
+
result.errors.push({
|
|
766
|
+
code: "TEMPLATE_COPY_FAILED" /* TEMPLATE_COPY_FAILED */,
|
|
767
|
+
message,
|
|
768
|
+
path: TEMPLATE_BUILD_DIR
|
|
769
|
+
});
|
|
770
|
+
throw new Error(message);
|
|
771
|
+
}
|
|
772
|
+
const copyMissing = (sourcePath, relPath) => {
|
|
773
|
+
if (isExcludedTemplatePath(relPath, fullTemplateExcludes)) {
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
776
|
+
const destPath = path2.join(buildDir, relPath);
|
|
777
|
+
if (fs2.existsSync(destPath) || relPath === ".gitignore" && ignoreState.gitignoreTracked) {
|
|
778
|
+
result.actions.skipped.push(destPath);
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
fs2.mkdirSync(path2.dirname(destPath), { recursive: true });
|
|
782
|
+
fs2.copyFileSync(sourcePath, destPath);
|
|
783
|
+
result.actions.created.push(destPath);
|
|
784
|
+
log(`Created: ${destPath}`);
|
|
785
|
+
};
|
|
786
|
+
const walk = (dir, relBase) => {
|
|
787
|
+
for (const entry of fs2.readdirSync(dir, { withFileTypes: true })) {
|
|
788
|
+
const entrySourcePath = path2.join(dir, entry.name);
|
|
789
|
+
const entryRelPath = relBase ? path2.join(relBase, entry.name) : entry.name;
|
|
790
|
+
if (isExcludedTemplatePath(entryRelPath, fullTemplateExcludes)) {
|
|
791
|
+
continue;
|
|
792
|
+
}
|
|
793
|
+
if (entry.isDirectory()) {
|
|
794
|
+
const destDir = path2.join(buildDir, entryRelPath);
|
|
795
|
+
if (!fs2.existsSync(destDir)) {
|
|
796
|
+
fs2.mkdirSync(destDir, { recursive: true });
|
|
797
|
+
result.actions.created.push(destDir);
|
|
798
|
+
log(`Created: ${destDir}`);
|
|
799
|
+
} else {
|
|
800
|
+
result.actions.skipped.push(destDir);
|
|
801
|
+
}
|
|
802
|
+
walk(entrySourcePath, entryRelPath);
|
|
803
|
+
continue;
|
|
804
|
+
}
|
|
805
|
+
if (entry.isFile() && (agentPersonas || !isAgentPersonaTemplate(entryRelPath))) {
|
|
806
|
+
copyMissing(entrySourcePath, templateDestRelPath(entryRelPath));
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
};
|
|
810
|
+
try {
|
|
811
|
+
walk(TEMPLATE_BUILD_DIR, "");
|
|
812
|
+
} catch (error) {
|
|
813
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
814
|
+
result.status = "failed";
|
|
815
|
+
result.errors.push({
|
|
816
|
+
code: "TEMPLATE_COPY_FAILED" /* TEMPLATE_COPY_FAILED */,
|
|
817
|
+
message: `Failed to copy templates: ${errorMessage}`,
|
|
818
|
+
cause: error,
|
|
819
|
+
path: TEMPLATE_BUILD_DIR
|
|
820
|
+
});
|
|
821
|
+
throw error;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
function isExcludedTemplatePath(relPath, excludedPrefixes) {
|
|
825
|
+
if (excludedPrefixes.length === 0) return false;
|
|
826
|
+
const normalizedRelPath = path2.normalize(relPath);
|
|
827
|
+
return excludedPrefixes.some((prefix) => {
|
|
828
|
+
const normalizedPrefix = path2.normalize(prefix);
|
|
829
|
+
return normalizedRelPath === normalizedPrefix || normalizedRelPath.startsWith(normalizedPrefix + path2.sep);
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
async function writeStateMarker(buildDir, tier, result, log, shouldUpdate, context = { materialChanges: false, schemaNeedsHealing: false }) {
|
|
833
|
+
const stateFile = path2.join(buildDir, RuntimeRequirements.stateFile);
|
|
834
|
+
try {
|
|
835
|
+
const existingState = readInitializationState(stateFile);
|
|
836
|
+
const stateFileExists = fs2.existsSync(stateFile);
|
|
837
|
+
if (stateFileExists && !shouldUpdate) {
|
|
838
|
+
result.actions.skipped.push(stateFile);
|
|
839
|
+
return;
|
|
840
|
+
}
|
|
841
|
+
const version = readPackageVersion();
|
|
842
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
843
|
+
const effectiveTier = maxTier(existingState?.tier ?? tier, tier);
|
|
844
|
+
const state = {
|
|
845
|
+
version,
|
|
846
|
+
tier: effectiveTier,
|
|
847
|
+
initializedAt: existingState?.initializedAt ?? now,
|
|
848
|
+
lastCheckedAt: now,
|
|
849
|
+
schemaVersion: result.schemaVersion ?? existingState?.schemaVersion ?? SCHEMA_VERSION,
|
|
850
|
+
repairHistory: result.actions.repaired.length > 0 ? [
|
|
851
|
+
...existingState?.repairHistory ?? [],
|
|
852
|
+
{
|
|
853
|
+
timestamp: now,
|
|
854
|
+
repairs: result.actions.repaired
|
|
855
|
+
}
|
|
856
|
+
] : existingState?.repairHistory
|
|
857
|
+
};
|
|
858
|
+
fs2.mkdirSync(path2.dirname(stateFile), { recursive: true });
|
|
859
|
+
fs2.writeFileSync(stateFile, `${JSON.stringify(state, null, 2)}
|
|
860
|
+
`);
|
|
861
|
+
if (!stateFileExists) {
|
|
862
|
+
result.actions.created.push(stateFile);
|
|
863
|
+
} else if (context.materialChanges || context.schemaNeedsHealing) {
|
|
864
|
+
result.actions.repaired.push(stateFile);
|
|
865
|
+
}
|
|
866
|
+
log(`Updated state marker: ${stateFile}`);
|
|
867
|
+
} catch (error) {
|
|
868
|
+
result.warnings.push(
|
|
869
|
+
`Failed to write state marker: ${error instanceof Error ? error.message : String(error)}`
|
|
870
|
+
);
|
|
871
|
+
log(
|
|
872
|
+
`Warning: Could not write state marker: ${error instanceof Error ? error.message : String(error)}`
|
|
873
|
+
);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
function readPackageVersion() {
|
|
877
|
+
try {
|
|
878
|
+
const pkgPath = path2.join(PACKAGE_ROOT, "package.json");
|
|
879
|
+
if (!fs2.existsSync(pkgPath)) return "0.0.0";
|
|
880
|
+
const pkg = JSON.parse(fs2.readFileSync(pkgPath, "utf-8"));
|
|
881
|
+
return typeof pkg.version === "string" && pkg.version.trim() ? pkg.version.trim() : "0.0.0";
|
|
882
|
+
} catch {
|
|
883
|
+
return "0.0.0";
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
function readInitializationTier(cwd) {
|
|
887
|
+
const tier = readInitializationState(
|
|
888
|
+
path2.join(cwd, ".build-project", "state", "init.json")
|
|
889
|
+
)?.tier;
|
|
890
|
+
return tier === "runtime" || tier === "full" ? tier : void 0;
|
|
891
|
+
}
|
|
892
|
+
function readInitializationState(stateFilePath) {
|
|
893
|
+
try {
|
|
894
|
+
if (!fs2.existsSync(stateFilePath)) return null;
|
|
895
|
+
const raw = fs2.readFileSync(stateFilePath, "utf-8");
|
|
896
|
+
return JSON.parse(raw);
|
|
897
|
+
} catch {
|
|
898
|
+
return null;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
function tierRank(tier) {
|
|
902
|
+
return tier === "full" ? 2 : 1;
|
|
903
|
+
}
|
|
904
|
+
function isTierSufficient(actual, required) {
|
|
905
|
+
return tierRank(actual) >= tierRank(required);
|
|
906
|
+
}
|
|
907
|
+
function maxTier(a, b) {
|
|
908
|
+
return tierRank(a) >= tierRank(b) ? a : b;
|
|
909
|
+
}
|
|
910
|
+
function resolveTelemetryDbDir(buildDir) {
|
|
911
|
+
try {
|
|
912
|
+
return TelemetryPathResolver.getInstance().resolveDbDir(buildDir);
|
|
913
|
+
} catch {
|
|
914
|
+
return path2.join(buildDir, "telemetry", "db");
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
function areDatabasesOpenable(dbDir) {
|
|
918
|
+
for (const fileName of RuntimeRequirements.databases) {
|
|
919
|
+
const dbPath = path2.join(dbDir, fileName);
|
|
920
|
+
if (!fs2.existsSync(dbPath)) return false;
|
|
921
|
+
let db;
|
|
922
|
+
try {
|
|
923
|
+
db = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
924
|
+
db.prepare("SELECT 1").get();
|
|
925
|
+
} catch {
|
|
926
|
+
return false;
|
|
927
|
+
} finally {
|
|
928
|
+
try {
|
|
929
|
+
db?.close();
|
|
930
|
+
} catch {
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
return true;
|
|
935
|
+
}
|
|
936
|
+
function finalizeInitializationResult(result, allowDegraded) {
|
|
937
|
+
if (!allowDegraded && result.status === "degraded") {
|
|
938
|
+
result.status = "failed";
|
|
939
|
+
if (result.errors.length === 0) {
|
|
940
|
+
result.errors.push({
|
|
941
|
+
code: "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
|
|
942
|
+
message: "Initialization completed in degraded mode but allowDegraded=false"
|
|
943
|
+
});
|
|
944
|
+
}
|
|
945
|
+
if (result.nextSteps.length === 0 || result.nextSteps[0]?.includes("degraded")) {
|
|
946
|
+
result.nextSteps = generateNextSteps(result);
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
return result;
|
|
950
|
+
}
|
|
951
|
+
function determineErrorCode(error) {
|
|
952
|
+
const message = error instanceof Error ? error.message.toLowerCase() : String(error);
|
|
953
|
+
if (message.includes("locked") || message.includes("busy")) {
|
|
954
|
+
return "DB_LOCKED" /* DB_LOCKED */;
|
|
955
|
+
}
|
|
956
|
+
if (message.includes("corrupt") || message.includes("malformed") || message.includes("integrity")) {
|
|
957
|
+
return "DB_CORRUPT" /* DB_CORRUPT */;
|
|
958
|
+
}
|
|
959
|
+
if (message.includes("permission") || message.includes("eacces") || message.includes("eperm")) {
|
|
960
|
+
return "PERMISSION_DENIED" /* PERMISSION_DENIED */;
|
|
961
|
+
}
|
|
962
|
+
if (message.includes("migration")) {
|
|
963
|
+
return "MIGRATION_FAILED" /* MIGRATION_FAILED */;
|
|
964
|
+
}
|
|
965
|
+
if (message.includes("enospc") || message.includes("disk space")) {
|
|
966
|
+
return "UNKNOWN_ERROR" /* UNKNOWN_ERROR */;
|
|
967
|
+
}
|
|
968
|
+
if (message.includes("timeout") || message.includes("lock acquisition")) {
|
|
969
|
+
return "DB_LOCKED" /* DB_LOCKED */;
|
|
970
|
+
}
|
|
971
|
+
return "UNKNOWN_ERROR" /* UNKNOWN_ERROR */;
|
|
972
|
+
}
|
|
973
|
+
function generateNextSteps(result) {
|
|
974
|
+
const steps = [];
|
|
975
|
+
if (result.status === "ok") {
|
|
976
|
+
steps.push("Build is ready to use");
|
|
977
|
+
return steps;
|
|
978
|
+
}
|
|
979
|
+
if (result.status === "degraded") {
|
|
980
|
+
steps.push(
|
|
981
|
+
"Build is running in degraded mode (JSONL-only telemetry)",
|
|
982
|
+
"Check database errors above for details"
|
|
983
|
+
);
|
|
984
|
+
const hasDbError = result.errors.some(
|
|
985
|
+
(e) => e.code === "DB_CORRUPT" /* DB_CORRUPT */ || e.code === "DB_LOCKED" /* DB_LOCKED */
|
|
986
|
+
);
|
|
987
|
+
if (hasDbError) {
|
|
988
|
+
steps.push(
|
|
989
|
+
'Run "build doctor" to print the resolved telemetry database directory, then remove it and restart',
|
|
990
|
+
"If issue persists, check file permissions and disk space"
|
|
991
|
+
);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
if (result.status === "failed") {
|
|
995
|
+
steps.push("Initialization failed - Build cannot run");
|
|
996
|
+
const hasPermissionError = result.errors.some(
|
|
997
|
+
(e) => e.code === "PERMISSION_DENIED" /* PERMISSION_DENIED */
|
|
998
|
+
);
|
|
999
|
+
if (hasPermissionError) {
|
|
1000
|
+
const hostSandboxHint = hostSandboxEpermHint(result.errors);
|
|
1001
|
+
steps.push(
|
|
1002
|
+
...hostSandboxHint ? [hostSandboxHint] : [
|
|
1003
|
+
"Check file permissions for .build-project directory",
|
|
1004
|
+
"Ensure you have write access to the project directory"
|
|
1005
|
+
]
|
|
1006
|
+
);
|
|
1007
|
+
}
|
|
1008
|
+
const hasCorruptError = result.errors.some((e) => e.code === "DB_CORRUPT" /* DB_CORRUPT */);
|
|
1009
|
+
if (hasCorruptError) {
|
|
1010
|
+
steps.push(
|
|
1011
|
+
"Database appears corrupted",
|
|
1012
|
+
'Run "build doctor" to print the resolved telemetry database directory, then remove it and restart',
|
|
1013
|
+
'If you need to preserve data, run "build backup" first'
|
|
1014
|
+
);
|
|
1015
|
+
}
|
|
1016
|
+
const hasMigrationError = result.errors.some((e) => e.code === "MIGRATION_FAILED" /* MIGRATION_FAILED */);
|
|
1017
|
+
if (hasMigrationError) {
|
|
1018
|
+
steps.push(
|
|
1019
|
+
"Schema migration failed",
|
|
1020
|
+
"Check that Node.js version is 24.x",
|
|
1021
|
+
'Run "build doctor" to print the resolved telemetry database directory, then remove it to reset schema'
|
|
1022
|
+
);
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
return steps;
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
export {
|
|
1029
|
+
hostSandboxEpermHint,
|
|
1030
|
+
hostSandboxHintForError,
|
|
1031
|
+
inspectBuildIgnore,
|
|
1032
|
+
declareExternalShutdownOwner,
|
|
1033
|
+
RuntimeRequirements,
|
|
1034
|
+
resolveRepoRootForBuildDir,
|
|
1035
|
+
withProjectInitializationLock,
|
|
1036
|
+
ensureBuildInitialized,
|
|
1037
|
+
withInitLock,
|
|
1038
|
+
readInitializationTier
|
|
1039
|
+
};
|
|
1040
|
+
//# sourceMappingURL=chunk-UB7LQITD.js.map
|