@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,1063 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isProviderStderrOnlyRecoverableNoise,
|
|
3
|
+
stripAnsiControlSequences
|
|
4
|
+
} from "./chunk-MYLH2S4G.js";
|
|
5
|
+
import {
|
|
6
|
+
isUnknownErrorRetryable
|
|
7
|
+
} from "./chunk-3P5IN5E7.js";
|
|
8
|
+
import {
|
|
9
|
+
buildGrokArgv,
|
|
10
|
+
createGrokCliChildEnv,
|
|
11
|
+
metadata
|
|
12
|
+
} from "./chunk-2Y2IIHPI.js";
|
|
13
|
+
import {
|
|
14
|
+
resolveProviderReportedCostUsd
|
|
15
|
+
} from "./chunk-WEI3ZDZH.js";
|
|
16
|
+
import {
|
|
17
|
+
normalizeTokenUsage
|
|
18
|
+
} from "./chunk-H6MJGKAW.js";
|
|
19
|
+
import {
|
|
20
|
+
createLineDelimitedTmuxCompletionSignal,
|
|
21
|
+
executeProviderCommand
|
|
22
|
+
} from "./chunk-633XZ7UF.js";
|
|
23
|
+
import {
|
|
24
|
+
isSkipAuthEnvActive
|
|
25
|
+
} from "./chunk-33IGPPUI.js";
|
|
26
|
+
import {
|
|
27
|
+
requireActivePolicyBoundary
|
|
28
|
+
} from "./chunk-B7YRSULE.js";
|
|
29
|
+
import {
|
|
30
|
+
mkBuildTempDir
|
|
31
|
+
} from "./chunk-D6WTZMZB.js";
|
|
32
|
+
import {
|
|
33
|
+
resolveProviderCliCommand
|
|
34
|
+
} from "./chunk-KKQKWAMF.js";
|
|
35
|
+
import {
|
|
36
|
+
ProviderExecutionError
|
|
37
|
+
} from "./chunk-RRC5BL7B.js";
|
|
38
|
+
import {
|
|
39
|
+
isCapacityError,
|
|
40
|
+
isRateLimitError
|
|
41
|
+
} from "./chunk-M6UHOC4I.js";
|
|
42
|
+
import {
|
|
43
|
+
BUILD_GROK_ALLOW_BROWSER_AUTH,
|
|
44
|
+
BUILD_GROK_AUTH_PROBE_TIMEOUT_MS,
|
|
45
|
+
BUILD_SKIP_AUTH,
|
|
46
|
+
isDebugMode,
|
|
47
|
+
readRawEnv
|
|
48
|
+
} from "./chunk-7VRJHTGZ.js";
|
|
49
|
+
import {
|
|
50
|
+
sanitizeString
|
|
51
|
+
} from "./chunk-CPSVQR2I.js";
|
|
52
|
+
|
|
53
|
+
// src/core/providers/grok/auth.ts
|
|
54
|
+
import { readFile, rm, writeFile } from "fs/promises";
|
|
55
|
+
import path2 from "path";
|
|
56
|
+
|
|
57
|
+
// src/core/providers/grok/auth-file.ts
|
|
58
|
+
import { stat } from "fs/promises";
|
|
59
|
+
import { homedir } from "os";
|
|
60
|
+
import path from "path";
|
|
61
|
+
var GROK_AUTH_FILE_MIN_SIZE = 100;
|
|
62
|
+
var GROK_AUTH_FILE_MODE = 384;
|
|
63
|
+
function grokAuthFilePath(env) {
|
|
64
|
+
return path.join(env?.HOME?.trim() || homedir(), ".grok", "auth.json");
|
|
65
|
+
}
|
|
66
|
+
async function probeGrokAuthFile(env) {
|
|
67
|
+
try {
|
|
68
|
+
const info = await stat(grokAuthFilePath(env));
|
|
69
|
+
if (!info.isFile()) {
|
|
70
|
+
return "no";
|
|
71
|
+
}
|
|
72
|
+
if (info.size < GROK_AUTH_FILE_MIN_SIZE) {
|
|
73
|
+
return "no";
|
|
74
|
+
}
|
|
75
|
+
if (process.platform !== "win32") {
|
|
76
|
+
const permissionBits = info.mode & 511;
|
|
77
|
+
if (permissionBits !== GROK_AUTH_FILE_MODE) {
|
|
78
|
+
return "no";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return "yes";
|
|
82
|
+
} catch (error) {
|
|
83
|
+
const code = error?.code;
|
|
84
|
+
if (code === "ENOENT") {
|
|
85
|
+
return "unknown";
|
|
86
|
+
}
|
|
87
|
+
if (code === "EACCES" || code === "EPERM") {
|
|
88
|
+
return "no";
|
|
89
|
+
}
|
|
90
|
+
return "unknown";
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// src/core/providers/grok/error-category.ts
|
|
95
|
+
var GROK_UNKNOWN_ERROR_POLICY = "fail";
|
|
96
|
+
function hasProviderTransportDeathEvidence(haystack) {
|
|
97
|
+
return /Transport channel closed.*Auth\(AuthorizationRequired\)/i.test(haystack) || /Auth\(AuthorizationRequired\).*Transport channel closed/i.test(haystack) || /worker quit with fatal/i.test(haystack) || /Transport channel closed/i.test(haystack);
|
|
98
|
+
}
|
|
99
|
+
function isMaxTurnsExceededMessage(haystack) {
|
|
100
|
+
return /max[_\s-]?turns(?:[_\s-]?(?:exceeded|reached))?/i.test(haystack) || /max_turns_reached/i.test(haystack) || /turn limit/i.test(haystack);
|
|
101
|
+
}
|
|
102
|
+
function categorizeError(message, inner) {
|
|
103
|
+
const haystack = `${message}
|
|
104
|
+
${inner?.code ?? ""}
|
|
105
|
+
${inner?.detail ?? ""}
|
|
106
|
+
${inner?.message ?? ""}`;
|
|
107
|
+
if (/FS_PERMISSION_DENIED/i.test(haystack)) return "fs_permission_denied";
|
|
108
|
+
if (hasProviderTransportDeathEvidence(haystack)) {
|
|
109
|
+
return "provider_transport_failure";
|
|
110
|
+
}
|
|
111
|
+
if (/AuthorizationRequired|Authentication|not authenticated/i.test(haystack)) return "auth";
|
|
112
|
+
if (isMaxTurnsExceededMessage(haystack)) return "max_turns_exceeded";
|
|
113
|
+
const statusContext = inner?.httpStatus !== void 0 ? `
|
|
114
|
+
status: ${inner.httpStatus}` : "";
|
|
115
|
+
const statusHaystack = `${haystack}${statusContext}`;
|
|
116
|
+
if (isRateLimitError(statusHaystack) || /rate[_\s-]?limit/i.test(haystack) || /\b429\b/.test(haystack)) {
|
|
117
|
+
return "rate_limit";
|
|
118
|
+
}
|
|
119
|
+
if (isCapacityError(statusHaystack)) {
|
|
120
|
+
return "capacity";
|
|
121
|
+
}
|
|
122
|
+
if (/\bECONNRESET\b/i.test(haystack) || /\bETIMEDOUT\b/i.test(haystack) || /\bENOTFOUND\b/i.test(haystack) || /\bECONNREFUSED\b/i.test(haystack) || /socket hang up/i.test(haystack) || /connection refused/i.test(haystack) || /network (?:error|failure|unreachable)/i.test(haystack) || /fetch failed/i.test(haystack)) {
|
|
123
|
+
return "network";
|
|
124
|
+
}
|
|
125
|
+
if (/does not support parameter/i.test(haystack) || inner?.httpStatus === 400) {
|
|
126
|
+
return "model_rejection";
|
|
127
|
+
}
|
|
128
|
+
if (/Internal error|API error/i.test(haystack)) return "runtime";
|
|
129
|
+
return "unknown";
|
|
130
|
+
}
|
|
131
|
+
function grokCategoryToRetryable(category) {
|
|
132
|
+
if (category === "unknown") return isUnknownErrorRetryable(GROK_UNKNOWN_ERROR_POLICY);
|
|
133
|
+
return category === "rate_limit" || category === "capacity" || category === "network" || category === "cancelled_incomplete";
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// src/core/providers/grok/reported-cost.ts
|
|
137
|
+
function readGrokTotalCostUsd(obj) {
|
|
138
|
+
const data = obj.data && typeof obj.data === "object" && !Array.isArray(obj.data) ? obj.data : void 0;
|
|
139
|
+
for (const source of [obj, data]) {
|
|
140
|
+
const value = source?.total_cost_usd ?? source?.totalCostUsd;
|
|
141
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) return value;
|
|
142
|
+
}
|
|
143
|
+
return void 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// src/core/providers/grok/stream-message-join.ts
|
|
147
|
+
var STREAM_TEXT_EVENT_TYPES = /* @__PURE__ */ new Set([
|
|
148
|
+
"answer",
|
|
149
|
+
"assistant",
|
|
150
|
+
"completion",
|
|
151
|
+
"content",
|
|
152
|
+
"delta",
|
|
153
|
+
"final",
|
|
154
|
+
"message",
|
|
155
|
+
"output",
|
|
156
|
+
"response",
|
|
157
|
+
"result",
|
|
158
|
+
"success",
|
|
159
|
+
"text"
|
|
160
|
+
]);
|
|
161
|
+
var MESSAGE_BOUNDARY_TYPE = /tool|step|thought/i;
|
|
162
|
+
function isStreamMessageBoundary(type) {
|
|
163
|
+
return typeof type === "string" && MESSAGE_BOUNDARY_TYPE.test(type);
|
|
164
|
+
}
|
|
165
|
+
function prefixMessageSeparator(previousChunks, chunk, boundary) {
|
|
166
|
+
if (!boundary || previousChunks.length === 0 || chunk.length === 0) return chunk;
|
|
167
|
+
const previous = previousChunks.join("");
|
|
168
|
+
if (previous.length === 0 || /\s$/.test(previous) || /^\s/.test(chunk)) return chunk;
|
|
169
|
+
return `
|
|
170
|
+
|
|
171
|
+
${chunk}`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// src/core/providers/grok/error-parser.ts
|
|
175
|
+
function reportedModelUsageKey(obj) {
|
|
176
|
+
const modelUsage = obj.modelUsage;
|
|
177
|
+
if (!modelUsage || typeof modelUsage !== "object" || Array.isArray(modelUsage)) {
|
|
178
|
+
return void 0;
|
|
179
|
+
}
|
|
180
|
+
const ids = Object.keys(modelUsage).filter((id) => id.trim().length > 0);
|
|
181
|
+
return ids.length === 1 ? ids[0] : void 0;
|
|
182
|
+
}
|
|
183
|
+
function catalogModelId(reported) {
|
|
184
|
+
return reported.replace(/-build$/, "");
|
|
185
|
+
}
|
|
186
|
+
var TERMINAL_SUCCESS_STOP_REASONS = /* @__PURE__ */ new Set(["endturn"]);
|
|
187
|
+
var ABORTED_STOP_REASONS = /* @__PURE__ */ new Set(["cancelled", "abort", "aborted"]);
|
|
188
|
+
function normalizeStopReason(stopReason) {
|
|
189
|
+
if (typeof stopReason !== "string") return void 0;
|
|
190
|
+
const normalized = stopReason.trim().toLowerCase().replace(/[\s._-]+/g, "");
|
|
191
|
+
return normalized.length > 0 ? normalized : void 0;
|
|
192
|
+
}
|
|
193
|
+
function isTerminalSuccessStopReason(stopReason) {
|
|
194
|
+
const normalized = normalizeStopReason(stopReason);
|
|
195
|
+
return normalized !== void 0 && TERMINAL_SUCCESS_STOP_REASONS.has(normalized);
|
|
196
|
+
}
|
|
197
|
+
function isAbortedStopReason(stopReason) {
|
|
198
|
+
const normalized = normalizeStopReason(stopReason);
|
|
199
|
+
return normalized !== void 0 && ABORTED_STOP_REASONS.has(normalized);
|
|
200
|
+
}
|
|
201
|
+
function isAbortedSuccessEnvelope(stopReason) {
|
|
202
|
+
return isAbortedStopReason(stopReason);
|
|
203
|
+
}
|
|
204
|
+
function isConcludingStopReason(stopReason) {
|
|
205
|
+
return isTerminalSuccessStopReason(stopReason) || isAbortedStopReason(stopReason);
|
|
206
|
+
}
|
|
207
|
+
function isGrokTerminalEnvelope(obj) {
|
|
208
|
+
const record = asRecord(obj);
|
|
209
|
+
if (!record) return false;
|
|
210
|
+
const type = typeof record.type === "string" ? record.type.toLowerCase() : void 0;
|
|
211
|
+
if (type === "error") return true;
|
|
212
|
+
const isSuccessShaped = typeof record.text === "string" || type === void 0 || type !== void 0 && TERMINAL_SUCCESS_EVENT_TYPES.has(type) || type === "end";
|
|
213
|
+
if (!isSuccessShaped) return false;
|
|
214
|
+
const data = asRecord(record.data);
|
|
215
|
+
const stopReason = readStringField(record, "stopReason", "stop_reason") ?? (data ? readStringField(data, "stopReason", "stop_reason") : void 0);
|
|
216
|
+
return isConcludingStopReason(stopReason);
|
|
217
|
+
}
|
|
218
|
+
function isGrokTerminalSuccessEnvelope(obj) {
|
|
219
|
+
const record = asRecord(obj);
|
|
220
|
+
if (!record) return false;
|
|
221
|
+
const type = typeof record.type === "string" ? record.type.toLowerCase() : void 0;
|
|
222
|
+
if (type === "error") return false;
|
|
223
|
+
const isSuccessShaped = typeof record.text === "string" || type === void 0 || type !== void 0 && TERMINAL_SUCCESS_EVENT_TYPES.has(type) || type === "end";
|
|
224
|
+
if (!isSuccessShaped) return false;
|
|
225
|
+
const data = asRecord(record.data);
|
|
226
|
+
const stopReason = readStringField(record, "stopReason", "stop_reason") ?? (data ? readStringField(data, "stopReason", "stop_reason") : void 0);
|
|
227
|
+
return isTerminalSuccessStopReason(stopReason);
|
|
228
|
+
}
|
|
229
|
+
function capturedStdoutHasTerminalEnvelope(stdout) {
|
|
230
|
+
if (!stdout || !stdout.trim()) return false;
|
|
231
|
+
for (const obj of findJsonObjects(stdout)) {
|
|
232
|
+
const record = asRecord(obj);
|
|
233
|
+
if (!record) continue;
|
|
234
|
+
const type = typeof record.type === "string" ? record.type.toLowerCase() : void 0;
|
|
235
|
+
if (type === "error") return true;
|
|
236
|
+
if (isGrokTerminalSuccessEnvelope(obj)) return true;
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
function grokLineConcludes(line) {
|
|
241
|
+
const trimmed = line.trim();
|
|
242
|
+
if (trimmed[0] !== "{") return false;
|
|
243
|
+
const parsed = tryParseJson(trimmed);
|
|
244
|
+
return isGrokTerminalEnvelope(parsed);
|
|
245
|
+
}
|
|
246
|
+
function createGrokTmuxCompletionSignal() {
|
|
247
|
+
const lineSignal = createLineDelimitedTmuxCompletionSignal(grokLineConcludes);
|
|
248
|
+
let accumulated = "";
|
|
249
|
+
let concluded = false;
|
|
250
|
+
const MAX_ACCUMULATED_BYTES = 8 * 1024 * 1024;
|
|
251
|
+
return (chunk, stream) => {
|
|
252
|
+
if (concluded) return true;
|
|
253
|
+
if (lineSignal(chunk, stream)) {
|
|
254
|
+
concluded = true;
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
if (stream !== "stdout" || !chunk) return false;
|
|
258
|
+
if (accumulated.length <= MAX_ACCUMULATED_BYTES) {
|
|
259
|
+
accumulated += chunk;
|
|
260
|
+
if (accumulated.trimEnd().endsWith("}")) {
|
|
261
|
+
for (const obj of findJsonObjects(accumulated)) {
|
|
262
|
+
if (isGrokTerminalEnvelope(obj)) {
|
|
263
|
+
concluded = true;
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function isStderrOnlyNoise(stderr) {
|
|
273
|
+
return isProviderStderrOnlyRecoverableNoise("grok", stderr);
|
|
274
|
+
}
|
|
275
|
+
function tryParseJson(text) {
|
|
276
|
+
try {
|
|
277
|
+
return JSON.parse(text);
|
|
278
|
+
} catch {
|
|
279
|
+
return void 0;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function findBalancedJsonTexts(text) {
|
|
283
|
+
const results = [];
|
|
284
|
+
let start = -1;
|
|
285
|
+
let depth = 0;
|
|
286
|
+
let inString = false;
|
|
287
|
+
let escaped = false;
|
|
288
|
+
const stack = [];
|
|
289
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
290
|
+
const char = text[i];
|
|
291
|
+
if (start < 0) {
|
|
292
|
+
if (char === "{" || char === "[") {
|
|
293
|
+
start = i;
|
|
294
|
+
depth = 1;
|
|
295
|
+
stack.push(char === "{" ? "}" : "]");
|
|
296
|
+
}
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
if (inString) {
|
|
300
|
+
if (escaped) {
|
|
301
|
+
escaped = false;
|
|
302
|
+
} else if (char === "\\") {
|
|
303
|
+
escaped = true;
|
|
304
|
+
} else if (char === '"') {
|
|
305
|
+
inString = false;
|
|
306
|
+
}
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
if (char === '"') {
|
|
310
|
+
inString = true;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (char === "{" || char === "[") {
|
|
314
|
+
depth += 1;
|
|
315
|
+
stack.push(char === "{" ? "}" : "]");
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
if (char === "}" || char === "]") {
|
|
319
|
+
const expected = stack.pop();
|
|
320
|
+
if (char !== expected) {
|
|
321
|
+
start = -1;
|
|
322
|
+
depth = 0;
|
|
323
|
+
inString = false;
|
|
324
|
+
escaped = false;
|
|
325
|
+
stack.length = 0;
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
depth -= 1;
|
|
329
|
+
if (depth === 0) {
|
|
330
|
+
results.push(text.slice(start, i + 1));
|
|
331
|
+
start = -1;
|
|
332
|
+
inString = false;
|
|
333
|
+
escaped = false;
|
|
334
|
+
stack.length = 0;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return results;
|
|
339
|
+
}
|
|
340
|
+
function appendJsonObject(value, values) {
|
|
341
|
+
if (Array.isArray(value)) {
|
|
342
|
+
for (const item of value) {
|
|
343
|
+
if (item && typeof item === "object") values.push(item);
|
|
344
|
+
}
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (value && typeof value === "object") values.push(value);
|
|
348
|
+
}
|
|
349
|
+
function findJsonObjects(stdout) {
|
|
350
|
+
if (!stdout) return [];
|
|
351
|
+
const trimmed = stdout.trim();
|
|
352
|
+
if (!trimmed) return [];
|
|
353
|
+
const whole = tryParseJson(trimmed);
|
|
354
|
+
if (whole && typeof whole === "object") {
|
|
355
|
+
const values2 = [];
|
|
356
|
+
appendJsonObject(whole, values2);
|
|
357
|
+
return values2;
|
|
358
|
+
}
|
|
359
|
+
const values = [];
|
|
360
|
+
for (const balanced of findBalancedJsonTexts(trimmed)) {
|
|
361
|
+
const parsed = tryParseJson(balanced);
|
|
362
|
+
appendJsonObject(parsed, values);
|
|
363
|
+
}
|
|
364
|
+
if (values.length > 0) return values;
|
|
365
|
+
for (const line of trimmed.split(/\r?\n/)) {
|
|
366
|
+
const t = line.trim();
|
|
367
|
+
if (!t || t[0] !== "{" && t[0] !== "[") continue;
|
|
368
|
+
const parsed = tryParseJson(t);
|
|
369
|
+
appendJsonObject(parsed, values);
|
|
370
|
+
}
|
|
371
|
+
return values;
|
|
372
|
+
}
|
|
373
|
+
function readStringField(obj, camelKey, snakeKey) {
|
|
374
|
+
const camel = obj[camelKey];
|
|
375
|
+
if (typeof camel === "string") return camel;
|
|
376
|
+
if (snakeKey) {
|
|
377
|
+
const snake = obj[snakeKey];
|
|
378
|
+
if (typeof snake === "string") return snake;
|
|
379
|
+
}
|
|
380
|
+
return void 0;
|
|
381
|
+
}
|
|
382
|
+
function asRecord(value) {
|
|
383
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
384
|
+
}
|
|
385
|
+
var TERMINAL_SUCCESS_EVENT_TYPES = /* @__PURE__ */ new Set(["final", "result", "success"]);
|
|
386
|
+
function buildSuccessEnvelope(obj, text, accumulatedThought) {
|
|
387
|
+
const data = asRecord(obj.data);
|
|
388
|
+
const success = {
|
|
389
|
+
type: "success",
|
|
390
|
+
text
|
|
391
|
+
};
|
|
392
|
+
const stopReason = readStringField(obj, "stopReason", "stop_reason") ?? (data ? readStringField(data, "stopReason", "stop_reason") : void 0);
|
|
393
|
+
const sessionId = readStringField(obj, "sessionId", "session_id") ?? (data ? readStringField(data, "sessionId", "session_id") : void 0);
|
|
394
|
+
const requestId = readStringField(obj, "requestId", "request_id") ?? (data ? readStringField(data, "requestId", "request_id") : void 0);
|
|
395
|
+
const thought = readStringField(obj, "thought") ?? (data ? readStringField(data, "thought") : void 0) ?? accumulatedThought;
|
|
396
|
+
if (stopReason) success.stopReason = stopReason;
|
|
397
|
+
if (sessionId) success.sessionId = sessionId;
|
|
398
|
+
if (requestId) success.requestId = requestId;
|
|
399
|
+
if (thought) success.thought = thought;
|
|
400
|
+
const usage = obj.usage ?? data?.usage;
|
|
401
|
+
if (usage && typeof usage === "object" && !Array.isArray(usage)) {
|
|
402
|
+
success.tokenUsage = normalizeTokenUsage(usage, "grok");
|
|
403
|
+
}
|
|
404
|
+
return success;
|
|
405
|
+
}
|
|
406
|
+
function extractTokenUsageFromObject(obj) {
|
|
407
|
+
const data = asRecord(obj.data);
|
|
408
|
+
const usageCandidates = [obj.usage, data?.usage];
|
|
409
|
+
const type = typeof obj.type === "string" ? obj.type.toLowerCase() : void 0;
|
|
410
|
+
if (type === "usage") {
|
|
411
|
+
usageCandidates.push(data);
|
|
412
|
+
}
|
|
413
|
+
for (const candidate of usageCandidates) {
|
|
414
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) continue;
|
|
415
|
+
const usage = normalizeTokenUsage(candidate, "grok");
|
|
416
|
+
if (usage) return usage;
|
|
417
|
+
}
|
|
418
|
+
return void 0;
|
|
419
|
+
}
|
|
420
|
+
function isStepUsageEventType(type) {
|
|
421
|
+
if (typeof type !== "string") return false;
|
|
422
|
+
return /^step[-_.]?finish$/i.test(type);
|
|
423
|
+
}
|
|
424
|
+
function sumTokenUsages(usages) {
|
|
425
|
+
if (usages.length === 0) return void 0;
|
|
426
|
+
if (usages.length === 1) return usages[0];
|
|
427
|
+
const usage = usages.reduce(
|
|
428
|
+
(sum, current) => ({
|
|
429
|
+
inputTokens: sum.inputTokens + current.inputTokens,
|
|
430
|
+
outputTokens: sum.outputTokens + current.outputTokens,
|
|
431
|
+
cachedInputTokens: (sum.cachedInputTokens ?? 0) + (current.cachedInputTokens ?? 0),
|
|
432
|
+
cacheCreationInputTokens: (sum.cacheCreationInputTokens ?? 0) + (current.cacheCreationInputTokens ?? 0)
|
|
433
|
+
}),
|
|
434
|
+
{
|
|
435
|
+
inputTokens: 0,
|
|
436
|
+
outputTokens: 0,
|
|
437
|
+
cachedInputTokens: 0,
|
|
438
|
+
cacheCreationInputTokens: 0
|
|
439
|
+
}
|
|
440
|
+
);
|
|
441
|
+
return {
|
|
442
|
+
inputTokens: usage.inputTokens,
|
|
443
|
+
outputTokens: usage.outputTokens,
|
|
444
|
+
...usage.cachedInputTokens > 0 ? { cachedInputTokens: usage.cachedInputTokens } : {},
|
|
445
|
+
...usage.cacheCreationInputTokens > 0 ? { cacheCreationInputTokens: usage.cacheCreationInputTokens } : {},
|
|
446
|
+
totalTokens: usage.inputTokens + usage.outputTokens
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
function extractSuccessEnvelope(obj, accumulatedThought) {
|
|
450
|
+
if (typeof obj.text === "string") {
|
|
451
|
+
return buildSuccessEnvelope(obj, obj.text, accumulatedThought);
|
|
452
|
+
}
|
|
453
|
+
const type = typeof obj.type === "string" ? obj.type.toLowerCase() : void 0;
|
|
454
|
+
if (!type || !TERMINAL_SUCCESS_EVENT_TYPES.has(type)) return void 0;
|
|
455
|
+
if (typeof obj.data === "string") {
|
|
456
|
+
return buildSuccessEnvelope(obj, obj.data, accumulatedThought);
|
|
457
|
+
}
|
|
458
|
+
const data = asRecord(obj.data);
|
|
459
|
+
const dataText = data ? readStringField(data, "text") : void 0;
|
|
460
|
+
if (dataText !== void 0) {
|
|
461
|
+
return buildSuccessEnvelope(obj, dataText, accumulatedThought);
|
|
462
|
+
}
|
|
463
|
+
const message = asRecord(obj.message);
|
|
464
|
+
const messageText = message ? readStringField(message, "text") : void 0;
|
|
465
|
+
if (messageText !== void 0) {
|
|
466
|
+
return buildSuccessEnvelope(obj, messageText, accumulatedThought);
|
|
467
|
+
}
|
|
468
|
+
return void 0;
|
|
469
|
+
}
|
|
470
|
+
function extractStreamTextChunk(obj) {
|
|
471
|
+
const type = typeof obj.type === "string" ? obj.type.toLowerCase() : void 0;
|
|
472
|
+
if (!type || !STREAM_TEXT_EVENT_TYPES.has(type) || type === "success" || type === "result") {
|
|
473
|
+
return void 0;
|
|
474
|
+
}
|
|
475
|
+
if (typeof obj.data === "string") return obj.data;
|
|
476
|
+
const data = asRecord(obj.data);
|
|
477
|
+
return data ? readStringField(data, "text") : void 0;
|
|
478
|
+
}
|
|
479
|
+
function extractInnerFromMessage(message) {
|
|
480
|
+
if (!message) return void 0;
|
|
481
|
+
const firstBrace = message.indexOf("{");
|
|
482
|
+
if (firstBrace < 0) return void 0;
|
|
483
|
+
const candidate = message.slice(firstBrace).trim();
|
|
484
|
+
const parsed = tryParseJson(candidate);
|
|
485
|
+
if (!parsed || typeof parsed !== "object") return void 0;
|
|
486
|
+
const inner = {};
|
|
487
|
+
if (typeof parsed.code === "string") inner.code = parsed.code;
|
|
488
|
+
if (typeof parsed.detail === "string") inner.detail = parsed.detail;
|
|
489
|
+
if (typeof parsed.http_status === "number") inner.httpStatus = parsed.http_status;
|
|
490
|
+
if (typeof parsed.message === "string") inner.message = parsed.message;
|
|
491
|
+
return Object.keys(inner).length > 0 ? inner : void 0;
|
|
492
|
+
}
|
|
493
|
+
function readStopReason(obj) {
|
|
494
|
+
const data = asRecord(obj.data);
|
|
495
|
+
return readStringField(obj, "stopReason", "stop_reason") ?? (data ? readStringField(data, "stopReason", "stop_reason") : void 0);
|
|
496
|
+
}
|
|
497
|
+
function hasTerminalSuccessSemantics(obj, stopReason) {
|
|
498
|
+
if (isAbortedStopReason(stopReason)) return false;
|
|
499
|
+
if (isTerminalSuccessStopReason(stopReason)) return true;
|
|
500
|
+
const type = typeof obj.type === "string" ? obj.type.toLowerCase() : void 0;
|
|
501
|
+
return type !== void 0 && TERMINAL_SUCCESS_EVENT_TYPES.has(type);
|
|
502
|
+
}
|
|
503
|
+
function buildAbortedRunError(stopReason, text, stderr, stdout = "") {
|
|
504
|
+
const stderrClean = stripAnsiControlSequences(stderr).trim();
|
|
505
|
+
const textNote = text.trim().length > 0 ? "non-empty partial output" : "empty output";
|
|
506
|
+
const message = `grok run aborted before completion (stopReason=${stopReason ?? "unknown"}, ${textNote})`;
|
|
507
|
+
const transportDeathHaystack = `${stdout}
|
|
508
|
+
${stderrClean}
|
|
509
|
+
${text}`;
|
|
510
|
+
if (hasProviderTransportDeathEvidence(transportDeathHaystack) || stderrClean.length > 0 && isStderrOnlyNoise(stderr)) {
|
|
511
|
+
return { type: "error", message, category: "provider_transport_failure" };
|
|
512
|
+
}
|
|
513
|
+
const category = categorizeError(`${stopReason ?? ""}
|
|
514
|
+
${stderrClean}`);
|
|
515
|
+
return {
|
|
516
|
+
type: "error",
|
|
517
|
+
message,
|
|
518
|
+
category: category === "unknown" ? "cancelled_incomplete" : category
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
function parseGrokOutput(stdout, stderr, exitCode) {
|
|
522
|
+
const objects = findJsonObjects(stdout);
|
|
523
|
+
if (objects.length === 0) {
|
|
524
|
+
const stderrClean = stripAnsiControlSequences(stderr).trim();
|
|
525
|
+
const stdoutClean = stripAnsiControlSequences(stdout).trim();
|
|
526
|
+
const message = [stdoutClean, stderrClean].filter(Boolean).join("\n") || `grok exited with code ${exitCode} and no parseable JSON on stdout`;
|
|
527
|
+
const category = categorizeError(message);
|
|
528
|
+
return {
|
|
529
|
+
type: "error",
|
|
530
|
+
message,
|
|
531
|
+
category: category === "unknown" ? "runtime" : category
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
const thoughtChunks = [];
|
|
535
|
+
const textChunks = [];
|
|
536
|
+
let success;
|
|
537
|
+
let abortedStopReason;
|
|
538
|
+
let abortedText = "";
|
|
539
|
+
let sawTerminalSuccessStop = false;
|
|
540
|
+
let atMessageBoundary = false;
|
|
541
|
+
let terminalEndMeta;
|
|
542
|
+
let latestFinalTokenUsage;
|
|
543
|
+
let reportedModel;
|
|
544
|
+
let reportedCostUsd;
|
|
545
|
+
const stepTokenUsages = [];
|
|
546
|
+
for (const obj of objects) {
|
|
547
|
+
reportedModel ??= reportedModelUsageKey(obj);
|
|
548
|
+
if (isStreamMessageBoundary(obj.type)) atMessageBoundary = true;
|
|
549
|
+
if (obj.type === "error") {
|
|
550
|
+
const message = typeof obj.message === "string" ? obj.message : JSON.stringify(obj.message);
|
|
551
|
+
const inner = extractInnerFromMessage(message);
|
|
552
|
+
const category = categorizeError(
|
|
553
|
+
`${message}
|
|
554
|
+
${stripAnsiControlSequences(stderr).trim()}`,
|
|
555
|
+
inner
|
|
556
|
+
);
|
|
557
|
+
return {
|
|
558
|
+
type: "error",
|
|
559
|
+
message,
|
|
560
|
+
inner,
|
|
561
|
+
category
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
reportedCostUsd = readGrokTotalCostUsd(obj) ?? reportedCostUsd;
|
|
565
|
+
const tokenUsage = extractTokenUsageFromObject(obj);
|
|
566
|
+
if (tokenUsage) {
|
|
567
|
+
if (isStepUsageEventType(obj.type)) {
|
|
568
|
+
stepTokenUsages.push(tokenUsage);
|
|
569
|
+
} else {
|
|
570
|
+
latestFinalTokenUsage = tokenUsage;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
if (obj.type === "thought" && typeof obj.data === "string") {
|
|
574
|
+
thoughtChunks.push(obj.data);
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
const stopReason = readStopReason(obj);
|
|
578
|
+
const type = typeof obj.type === "string" ? obj.type.toLowerCase() : void 0;
|
|
579
|
+
if (type === "end") {
|
|
580
|
+
if (isAbortedStopReason(stopReason)) {
|
|
581
|
+
abortedStopReason = stopReason;
|
|
582
|
+
continue;
|
|
583
|
+
}
|
|
584
|
+
if (isTerminalSuccessStopReason(stopReason)) {
|
|
585
|
+
sawTerminalSuccessStop = true;
|
|
586
|
+
terminalEndMeta = obj;
|
|
587
|
+
continue;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
const accumulatedThought = thoughtChunks.length > 0 ? thoughtChunks.join("") : void 0;
|
|
591
|
+
const parsedSuccess = extractSuccessEnvelope(obj, accumulatedThought);
|
|
592
|
+
if (parsedSuccess) {
|
|
593
|
+
if (isAbortedSuccessEnvelope(parsedSuccess.stopReason)) {
|
|
594
|
+
abortedStopReason = parsedSuccess.stopReason;
|
|
595
|
+
abortedText = parsedSuccess.text;
|
|
596
|
+
continue;
|
|
597
|
+
}
|
|
598
|
+
if (hasTerminalSuccessSemantics(obj, parsedSuccess.stopReason)) {
|
|
599
|
+
success = parsedSuccess;
|
|
600
|
+
if (isTerminalSuccessStopReason(parsedSuccess.stopReason)) {
|
|
601
|
+
sawTerminalSuccessStop = true;
|
|
602
|
+
}
|
|
603
|
+
continue;
|
|
604
|
+
}
|
|
605
|
+
if (parsedSuccess.text.length > 0) {
|
|
606
|
+
textChunks.push(prefixMessageSeparator(textChunks, parsedSuccess.text, atMessageBoundary));
|
|
607
|
+
atMessageBoundary = false;
|
|
608
|
+
}
|
|
609
|
+
continue;
|
|
610
|
+
}
|
|
611
|
+
const chunk = extractStreamTextChunk(obj);
|
|
612
|
+
if (chunk !== void 0) {
|
|
613
|
+
textChunks.push(prefixMessageSeparator(textChunks, chunk, atMessageBoundary));
|
|
614
|
+
if (chunk.length > 0) atMessageBoundary = false;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
if (abortedStopReason !== void 0) {
|
|
618
|
+
return buildAbortedRunError(
|
|
619
|
+
abortedStopReason,
|
|
620
|
+
abortedText || textChunks.join(""),
|
|
621
|
+
stderr,
|
|
622
|
+
stdout
|
|
623
|
+
);
|
|
624
|
+
}
|
|
625
|
+
if (!success && sawTerminalSuccessStop) {
|
|
626
|
+
const accumulatedThought = thoughtChunks.length > 0 ? thoughtChunks.join("") : void 0;
|
|
627
|
+
success = buildSuccessEnvelope(
|
|
628
|
+
terminalEndMeta ?? { stopReason: "EndTurn" },
|
|
629
|
+
textChunks.join(""),
|
|
630
|
+
accumulatedThought
|
|
631
|
+
);
|
|
632
|
+
} else if (success && success.text.length === 0 && textChunks.length > 0) {
|
|
633
|
+
success = { ...success, text: textChunks.join("") };
|
|
634
|
+
}
|
|
635
|
+
if (success) {
|
|
636
|
+
if (reportedModel) {
|
|
637
|
+
success.reportedModel = reportedModel;
|
|
638
|
+
success.resolvedModel = catalogModelId(reportedModel);
|
|
639
|
+
}
|
|
640
|
+
const tokenUsage = latestFinalTokenUsage ?? sumTokenUsages(stepTokenUsages);
|
|
641
|
+
if (tokenUsage) {
|
|
642
|
+
success.tokenUsage = tokenUsage;
|
|
643
|
+
}
|
|
644
|
+
const providerReportedCostUsd = resolveProviderReportedCostUsd(
|
|
645
|
+
reportedCostUsd,
|
|
646
|
+
success.tokenUsage
|
|
647
|
+
);
|
|
648
|
+
if (providerReportedCostUsd !== void 0) {
|
|
649
|
+
success.providerReportedCostUsd = providerReportedCostUsd;
|
|
650
|
+
}
|
|
651
|
+
if (exitCode !== 0 && !isStderrOnlyNoise(stderr)) {
|
|
652
|
+
return {
|
|
653
|
+
type: "error",
|
|
654
|
+
message: `grok exited with code ${exitCode} despite success-shaped stdout`,
|
|
655
|
+
category: "runtime"
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
return success;
|
|
659
|
+
}
|
|
660
|
+
const hasOnlyNonterminalStreamEvents = objects.every((obj) => {
|
|
661
|
+
const type = typeof obj.type === "string" ? obj.type.toLowerCase() : void 0;
|
|
662
|
+
return type === "thought" || type === "status" || type === "progress" || type === "usage" || type !== void 0 && STREAM_TEXT_EVENT_TYPES.has(type) && type !== "success" && type !== "result";
|
|
663
|
+
});
|
|
664
|
+
if (hasOnlyNonterminalStreamEvents || textChunks.length > 0) {
|
|
665
|
+
return {
|
|
666
|
+
type: "error",
|
|
667
|
+
message: `Grok stdout stream ended without a terminal success/error envelope (${objects.length} event${objects.length === 1 ? "" : "s"})`,
|
|
668
|
+
category: exitCode === 0 ? "runtime" : "unknown"
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
return {
|
|
672
|
+
type: "error",
|
|
673
|
+
message: `Unrecognized Grok stdout envelope: ${JSON.stringify(objects[0]).slice(0, 200)}`,
|
|
674
|
+
category: "unknown"
|
|
675
|
+
};
|
|
676
|
+
}
|
|
677
|
+
var GROK_NONTERMINAL_STREAM_TYPES = /* @__PURE__ */ new Set(["thought", "status", "progress", "usage"]);
|
|
678
|
+
function formatGrokStreamLineForDisplay(line, options = {}) {
|
|
679
|
+
const trimmed = line.trim();
|
|
680
|
+
if (!trimmed) {
|
|
681
|
+
return null;
|
|
682
|
+
}
|
|
683
|
+
let parsed;
|
|
684
|
+
try {
|
|
685
|
+
parsed = JSON.parse(trimmed);
|
|
686
|
+
} catch {
|
|
687
|
+
return trimmed;
|
|
688
|
+
}
|
|
689
|
+
const type = typeof parsed.type === "string" ? parsed.type.toLowerCase() : void 0;
|
|
690
|
+
const includePartials = options.includePartials ?? isDebugMode();
|
|
691
|
+
if (!includePartials && type && GROK_NONTERMINAL_STREAM_TYPES.has(type)) {
|
|
692
|
+
return null;
|
|
693
|
+
}
|
|
694
|
+
if (type === "success" && typeof parsed.text === "string" && parsed.text.length > 0) {
|
|
695
|
+
return parsed.text;
|
|
696
|
+
}
|
|
697
|
+
if (type === "error" && typeof parsed.message === "string") {
|
|
698
|
+
return `Error: ${parsed.message}`;
|
|
699
|
+
}
|
|
700
|
+
if (includePartials) {
|
|
701
|
+
if (type === "thought" && typeof parsed.data === "string") {
|
|
702
|
+
return parsed.data;
|
|
703
|
+
}
|
|
704
|
+
const chunk = extractStreamTextChunk(parsed);
|
|
705
|
+
if (chunk !== void 0 && chunk.length > 0) {
|
|
706
|
+
return chunk;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
return null;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// src/core/providers/grok/auth.ts
|
|
713
|
+
var AUTH_PROBE_ENV = {
|
|
714
|
+
BUILD_GROK_MAX_TURNS: "2",
|
|
715
|
+
BUILD_GROK_AUTO_APPROVE: "0"
|
|
716
|
+
};
|
|
717
|
+
var EDIT_PROBE_ENV = {
|
|
718
|
+
BUILD_GROK_MAX_TURNS: "8",
|
|
719
|
+
BUILD_GROK_AUTO_APPROVE: "1"
|
|
720
|
+
};
|
|
721
|
+
var DEFAULT_AUTH_PROBE_TIMEOUT_MS = 45e3;
|
|
722
|
+
var API_KEY_REQUIRES_ACTIVE_VERIFICATION_REASON = "Grok API key is configured, but authentication is not verified by passive checks. Requested execution or `build doctor --probe --provider grok` provides authoritative evidence.";
|
|
723
|
+
var AUTH_FILE_REQUIRES_ACTIVE_VERIFICATION_REASON = "Grok CLI auth file exists, but headless edit execution is not verified by passive checks. Run `build doctor --probe --provider grok` to verify headless execution.";
|
|
724
|
+
function authSkipRequested(env) {
|
|
725
|
+
return isSkipAuthEnvActive(BUILD_SKIP_AUTH.name, env);
|
|
726
|
+
}
|
|
727
|
+
function parsePositiveTimeoutMs(raw) {
|
|
728
|
+
if (!raw) return void 0;
|
|
729
|
+
const n = Number.parseInt(raw, 10);
|
|
730
|
+
if (!Number.isFinite(n) || n <= 0) return void 0;
|
|
731
|
+
return n;
|
|
732
|
+
}
|
|
733
|
+
function resolveAuthProbeTimeoutMs(env) {
|
|
734
|
+
const raw = env?.BUILD_GROK_AUTH_PROBE_TIMEOUT_MS ?? readRawEnv(BUILD_GROK_AUTH_PROBE_TIMEOUT_MS);
|
|
735
|
+
return parsePositiveTimeoutMs(raw) ?? DEFAULT_AUTH_PROBE_TIMEOUT_MS;
|
|
736
|
+
}
|
|
737
|
+
function hasGrokHeadlessApiKey(env = process.env) {
|
|
738
|
+
return Boolean(env?.GROK_CODE_XAI_API_KEY?.trim() || env?.XAI_API_KEY?.trim());
|
|
739
|
+
}
|
|
740
|
+
function allowsGrokBrowserAuth(env = process.env) {
|
|
741
|
+
const raw = env?.BUILD_GROK_ALLOW_BROWSER_AUTH ?? readRawEnv(BUILD_GROK_ALLOW_BROWSER_AUTH);
|
|
742
|
+
return raw === "1" || raw?.toLowerCase() === "true" || raw?.toLowerCase() === "yes";
|
|
743
|
+
}
|
|
744
|
+
function isTimeoutReason(reason) {
|
|
745
|
+
return reason === "hard_timeout" || reason === "idle_timeout" || reason === "timeout" || reason === "plm_timeout";
|
|
746
|
+
}
|
|
747
|
+
function requireActiveEditProbePolicyBoundary(env) {
|
|
748
|
+
try {
|
|
749
|
+
requireActivePolicyBoundary(
|
|
750
|
+
"Grok",
|
|
751
|
+
"Grok active edit auth probe (--always-approve)",
|
|
752
|
+
metadata.id,
|
|
753
|
+
{ env }
|
|
754
|
+
);
|
|
755
|
+
return void 0;
|
|
756
|
+
} catch (error) {
|
|
757
|
+
if (error instanceof ProviderExecutionError) {
|
|
758
|
+
return {
|
|
759
|
+
ok: false,
|
|
760
|
+
category: "runtime",
|
|
761
|
+
message: error.message,
|
|
762
|
+
exitCode: error.exitCode
|
|
763
|
+
};
|
|
764
|
+
}
|
|
765
|
+
throw error;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
function normalizeHeadlessProbeFailure(parsed, stdout, stderr) {
|
|
769
|
+
if (parsed.category === "auth" && !stdout.trim() && isStderrOnlyNoise(stderr)) {
|
|
770
|
+
return {
|
|
771
|
+
ok: false,
|
|
772
|
+
category: "runtime",
|
|
773
|
+
message: parsed.message
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
return {
|
|
777
|
+
ok: false,
|
|
778
|
+
category: parsed.category,
|
|
779
|
+
message: parsed.message
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
async function probeHeadlessSessionDetailed(options) {
|
|
783
|
+
const argvEnvOverrides = options?.argvEnvOverrides ?? AUTH_PROBE_ENV;
|
|
784
|
+
const childEnv = options?.env ? { ...options.env, ...argvEnvOverrides } : argvEnvOverrides;
|
|
785
|
+
const dir = await mkBuildTempDir("grok-auth");
|
|
786
|
+
const promptFile = path2.join(dir, "prompt.txt");
|
|
787
|
+
try {
|
|
788
|
+
await writeFile(promptFile, "Reply with exactly: OK", "utf8");
|
|
789
|
+
const { command, prefixArgs } = resolveProviderCliCommand(metadata.id);
|
|
790
|
+
const { args } = buildGrokArgv({
|
|
791
|
+
promptFile,
|
|
792
|
+
model: metadata.defaultModel ?? "auto",
|
|
793
|
+
env: argvEnvOverrides
|
|
794
|
+
});
|
|
795
|
+
const childResult = await executeProviderCommand({
|
|
796
|
+
command,
|
|
797
|
+
args: [...prefixArgs, ...args],
|
|
798
|
+
workingDir: process.cwd(),
|
|
799
|
+
env: createGrokCliChildEnv(childEnv),
|
|
800
|
+
timeout: resolveAuthProbeTimeoutMs(options?.env),
|
|
801
|
+
metadata: {
|
|
802
|
+
id: metadata.id,
|
|
803
|
+
name: metadata.name,
|
|
804
|
+
installCommand: metadata.installCommand,
|
|
805
|
+
authHint: metadata.authHint,
|
|
806
|
+
docsPath: metadata.docsPath,
|
|
807
|
+
docsAnchor: metadata.docsAnchor
|
|
808
|
+
}
|
|
809
|
+
});
|
|
810
|
+
const stdout = childResult.stdout ?? "";
|
|
811
|
+
const stderr = childResult.stderr ?? "";
|
|
812
|
+
const exitCode = typeof childResult.exitCode === "number" ? childResult.exitCode : 1;
|
|
813
|
+
const parsed = parseGrokOutput(stdout, stderr, exitCode);
|
|
814
|
+
if (parsed.type === "success") {
|
|
815
|
+
return { ok: true, exitCode };
|
|
816
|
+
}
|
|
817
|
+
return {
|
|
818
|
+
...normalizeHeadlessProbeFailure(parsed, stdout, stderr),
|
|
819
|
+
exitCode
|
|
820
|
+
};
|
|
821
|
+
} catch (error) {
|
|
822
|
+
if (error instanceof ProviderExecutionError) {
|
|
823
|
+
const stdout = error.stdout ?? "";
|
|
824
|
+
const stderr = error.stderr ?? "";
|
|
825
|
+
if (isTimeoutReason(error.reason)) {
|
|
826
|
+
return {
|
|
827
|
+
ok: false,
|
|
828
|
+
category: "runtime",
|
|
829
|
+
message: error.message,
|
|
830
|
+
exitCode: error.exitCode
|
|
831
|
+
};
|
|
832
|
+
}
|
|
833
|
+
if (stdout || stderr) {
|
|
834
|
+
const parsed = parseGrokOutput(stdout, stderr, error.exitCode ?? 1);
|
|
835
|
+
if (parsed.type === "success") {
|
|
836
|
+
return { ok: true, exitCode: error.exitCode };
|
|
837
|
+
}
|
|
838
|
+
return {
|
|
839
|
+
...normalizeHeadlessProbeFailure(parsed, stdout, stderr),
|
|
840
|
+
exitCode: error.exitCode
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
return {
|
|
844
|
+
ok: false,
|
|
845
|
+
category: "runtime",
|
|
846
|
+
message: error.message,
|
|
847
|
+
exitCode: error.exitCode
|
|
848
|
+
};
|
|
849
|
+
}
|
|
850
|
+
return {
|
|
851
|
+
ok: false,
|
|
852
|
+
category: "runtime",
|
|
853
|
+
message: error instanceof Error ? error.message : String(error)
|
|
854
|
+
};
|
|
855
|
+
} finally {
|
|
856
|
+
await rm(dir, { recursive: true, force: true }).catch(() => {
|
|
857
|
+
});
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
async function probeHeadlessEditSessionDetailed(options) {
|
|
861
|
+
const argvEnvOverrides = options?.argvEnvOverrides ?? EDIT_PROBE_ENV;
|
|
862
|
+
const childEnv = options?.env ? { ...options.env, ...argvEnvOverrides } : argvEnvOverrides;
|
|
863
|
+
const boundaryFailure = requireActiveEditProbePolicyBoundary(options?.env);
|
|
864
|
+
if (boundaryFailure) return boundaryFailure;
|
|
865
|
+
const dir = await mkBuildTempDir("grok-edit-auth");
|
|
866
|
+
const promptFile = path2.join(dir, "prompt.txt");
|
|
867
|
+
const targetFile = "build-grok-edit-probe.txt";
|
|
868
|
+
const targetPath = path2.join(dir, targetFile);
|
|
869
|
+
const expected = "BUILD_GROK_EDIT_PROBE_OK\n";
|
|
870
|
+
try {
|
|
871
|
+
await writeFile(
|
|
872
|
+
promptFile,
|
|
873
|
+
[
|
|
874
|
+
`Create a file named ${targetFile} in the current working directory.`,
|
|
875
|
+
`The file must contain exactly one line: ${expected.trim()}.`,
|
|
876
|
+
"Do not modify any other file."
|
|
877
|
+
].join(" "),
|
|
878
|
+
"utf8"
|
|
879
|
+
);
|
|
880
|
+
const { command, prefixArgs } = resolveProviderCliCommand(metadata.id);
|
|
881
|
+
const { args } = buildGrokArgv({
|
|
882
|
+
promptFile,
|
|
883
|
+
model: metadata.defaultModel ?? "auto",
|
|
884
|
+
env: argvEnvOverrides
|
|
885
|
+
});
|
|
886
|
+
const childResult = await executeProviderCommand({
|
|
887
|
+
command,
|
|
888
|
+
args: [...prefixArgs, ...args],
|
|
889
|
+
workingDir: dir,
|
|
890
|
+
env: createGrokCliChildEnv(childEnv),
|
|
891
|
+
timeout: resolveAuthProbeTimeoutMs(options?.env),
|
|
892
|
+
metadata: {
|
|
893
|
+
id: metadata.id,
|
|
894
|
+
name: metadata.name,
|
|
895
|
+
installCommand: metadata.installCommand,
|
|
896
|
+
authHint: metadata.authHint,
|
|
897
|
+
docsPath: metadata.docsPath,
|
|
898
|
+
docsAnchor: metadata.docsAnchor
|
|
899
|
+
}
|
|
900
|
+
});
|
|
901
|
+
const stdout = childResult.stdout ?? "";
|
|
902
|
+
const stderr = childResult.stderr ?? "";
|
|
903
|
+
const exitCode = typeof childResult.exitCode === "number" ? childResult.exitCode : 1;
|
|
904
|
+
const parsed = parseGrokOutput(stdout, stderr, exitCode);
|
|
905
|
+
if (parsed.type !== "success") {
|
|
906
|
+
return {
|
|
907
|
+
...normalizeHeadlessProbeFailure(parsed, stdout, stderr),
|
|
908
|
+
exitCode
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
try {
|
|
912
|
+
const actual = await readFile(targetPath, "utf8");
|
|
913
|
+
if (actual === expected) {
|
|
914
|
+
return { ok: true, exitCode };
|
|
915
|
+
}
|
|
916
|
+
return {
|
|
917
|
+
ok: false,
|
|
918
|
+
category: "runtime",
|
|
919
|
+
message: `${metadata.name} active edit probe created ${targetFile}, but its contents did not match the expected sentinel.`,
|
|
920
|
+
exitCode
|
|
921
|
+
};
|
|
922
|
+
} catch {
|
|
923
|
+
return {
|
|
924
|
+
ok: false,
|
|
925
|
+
category: "runtime",
|
|
926
|
+
message: `${metadata.name} active edit probe completed but did not create ${targetFile}; headless text generation works, but edit/tool execution was not verified.`,
|
|
927
|
+
exitCode
|
|
928
|
+
};
|
|
929
|
+
}
|
|
930
|
+
} catch (error) {
|
|
931
|
+
if (error instanceof ProviderExecutionError) {
|
|
932
|
+
const stdout = error.stdout ?? "";
|
|
933
|
+
const stderr = error.stderr ?? "";
|
|
934
|
+
if (isTimeoutReason(error.reason)) {
|
|
935
|
+
return {
|
|
936
|
+
ok: false,
|
|
937
|
+
category: "runtime",
|
|
938
|
+
message: error.message,
|
|
939
|
+
exitCode: error.exitCode
|
|
940
|
+
};
|
|
941
|
+
}
|
|
942
|
+
if (stdout || stderr) {
|
|
943
|
+
const parsed = parseGrokOutput(stdout, stderr, error.exitCode ?? 1);
|
|
944
|
+
if (parsed.type === "success") {
|
|
945
|
+
try {
|
|
946
|
+
const actual = await readFile(targetPath, "utf8");
|
|
947
|
+
if (actual === expected) {
|
|
948
|
+
return { ok: true, exitCode: error.exitCode };
|
|
949
|
+
}
|
|
950
|
+
} catch {
|
|
951
|
+
}
|
|
952
|
+
return {
|
|
953
|
+
ok: false,
|
|
954
|
+
category: "runtime",
|
|
955
|
+
message: `${metadata.name} active edit probe completed but did not create ${targetFile}; headless text generation works, but edit/tool execution was not verified.`,
|
|
956
|
+
exitCode: error.exitCode
|
|
957
|
+
};
|
|
958
|
+
}
|
|
959
|
+
return {
|
|
960
|
+
...normalizeHeadlessProbeFailure(parsed, stdout, stderr),
|
|
961
|
+
exitCode: error.exitCode
|
|
962
|
+
};
|
|
963
|
+
}
|
|
964
|
+
return {
|
|
965
|
+
ok: false,
|
|
966
|
+
category: "runtime",
|
|
967
|
+
message: error.message,
|
|
968
|
+
exitCode: error.exitCode
|
|
969
|
+
};
|
|
970
|
+
}
|
|
971
|
+
return {
|
|
972
|
+
ok: false,
|
|
973
|
+
category: "runtime",
|
|
974
|
+
message: error instanceof Error ? error.message : String(error)
|
|
975
|
+
};
|
|
976
|
+
} finally {
|
|
977
|
+
await rm(dir, { recursive: true, force: true }).catch(() => {
|
|
978
|
+
});
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
async function probeHeadlessSession(options) {
|
|
982
|
+
return (await probeHeadlessSessionDetailed(options)).ok;
|
|
983
|
+
}
|
|
984
|
+
function shouldSoftFailGrokCliAuthProbe(hasCliAuthFile, probe) {
|
|
985
|
+
if (!hasCliAuthFile || probe.ok) return false;
|
|
986
|
+
return probe.category === "runtime";
|
|
987
|
+
}
|
|
988
|
+
async function probeActiveGrokAuth(options) {
|
|
989
|
+
if (authSkipRequested(options?.env)) return { ok: true };
|
|
990
|
+
if (hasGrokHeadlessApiKey(options?.env)) {
|
|
991
|
+
return probeHeadlessEditSessionDetailed({ env: options?.env });
|
|
992
|
+
}
|
|
993
|
+
if (await probeGrokAuthFile(options?.env) === "yes") {
|
|
994
|
+
return probeHeadlessEditSessionDetailed({ env: options?.env });
|
|
995
|
+
}
|
|
996
|
+
if (!allowsGrokBrowserAuth(options?.env)) {
|
|
997
|
+
return {
|
|
998
|
+
ok: false,
|
|
999
|
+
category: "auth",
|
|
1000
|
+
message: "No Grok headless API key, CLI auth file, or browser-auth probe opt-in is available."
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
return probeHeadlessEditSessionDetailed({ env: options?.env });
|
|
1004
|
+
}
|
|
1005
|
+
async function isAuthenticated(options) {
|
|
1006
|
+
return await isAuthenticatedTriState(options) === "yes";
|
|
1007
|
+
}
|
|
1008
|
+
async function isAuthenticatedTriState(options) {
|
|
1009
|
+
return (await getAuthReadiness(options)).state;
|
|
1010
|
+
}
|
|
1011
|
+
async function getAuthReadiness(options) {
|
|
1012
|
+
const mode = options?.mode ?? "passive";
|
|
1013
|
+
if (authSkipRequested(options?.env)) return { state: "yes" };
|
|
1014
|
+
if (mode === "passive") {
|
|
1015
|
+
if (hasGrokHeadlessApiKey(options?.env)) {
|
|
1016
|
+
return {
|
|
1017
|
+
state: "unknown",
|
|
1018
|
+
reason: API_KEY_REQUIRES_ACTIVE_VERIFICATION_REASON
|
|
1019
|
+
};
|
|
1020
|
+
}
|
|
1021
|
+
const authFileState = await probeGrokAuthFile(options?.env);
|
|
1022
|
+
if (authFileState === "yes") {
|
|
1023
|
+
return {
|
|
1024
|
+
state: "unknown",
|
|
1025
|
+
reason: AUTH_FILE_REQUIRES_ACTIVE_VERIFICATION_REASON
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
1028
|
+
return { state: authFileState };
|
|
1029
|
+
}
|
|
1030
|
+
const result = await probeActiveGrokAuth(options);
|
|
1031
|
+
if (result.ok) return { state: "yes", evidence: "execution" };
|
|
1032
|
+
return {
|
|
1033
|
+
state: result.category === "auth" ? "no" : "unknown",
|
|
1034
|
+
// Sanitize before surfacing to readiness/health UIs: the message is
|
|
1035
|
+
// provider-derived and may carry diagnostic text from the CLI.
|
|
1036
|
+
...result.message ? { reason: sanitizeString(result.message) } : {},
|
|
1037
|
+
...result.category ? { category: result.category } : {}
|
|
1038
|
+
};
|
|
1039
|
+
}
|
|
1040
|
+
var auth = {
|
|
1041
|
+
isAuthenticated,
|
|
1042
|
+
isAuthenticatedTriState
|
|
1043
|
+
};
|
|
1044
|
+
|
|
1045
|
+
export {
|
|
1046
|
+
grokCategoryToRetryable,
|
|
1047
|
+
capturedStdoutHasTerminalEnvelope,
|
|
1048
|
+
createGrokTmuxCompletionSignal,
|
|
1049
|
+
isStderrOnlyNoise,
|
|
1050
|
+
parseGrokOutput,
|
|
1051
|
+
formatGrokStreamLineForDisplay,
|
|
1052
|
+
hasGrokHeadlessApiKey,
|
|
1053
|
+
allowsGrokBrowserAuth,
|
|
1054
|
+
probeHeadlessSessionDetailed,
|
|
1055
|
+
probeHeadlessEditSessionDetailed,
|
|
1056
|
+
probeHeadlessSession,
|
|
1057
|
+
shouldSoftFailGrokCliAuthProbe,
|
|
1058
|
+
isAuthenticated,
|
|
1059
|
+
isAuthenticatedTriState,
|
|
1060
|
+
getAuthReadiness,
|
|
1061
|
+
auth
|
|
1062
|
+
};
|
|
1063
|
+
//# sourceMappingURL=chunk-EJIWTPSZ.js.map
|