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