@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,1737 @@
|
|
|
1
|
+
# Provider Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide walks you through setting up AI providers for Build. Build supports multiple execution providers out of the box: Claude, Codex CLI, Cursor CLI, Copilot CLI, Gemini CLI, Grok, Kiro, Google Antigravity CLI, Pi CLI, and OpenCode. GLM/Z.AI models are available through OpenCode; OpenRouter is a catalog/pricing source, not an execution provider.
|
|
4
|
+
|
|
5
|
+
> **Public-release validation status:** Claude and Codex are primary validated
|
|
6
|
+
> providers. Grok, Cursor, and OpenCode are supported validated providers.
|
|
7
|
+
> Antigravity and Pi are also supported validated; Gemini, Kiro, and Copilot
|
|
8
|
+
> are experimental (Gemini is no longer being extended; see below). This is
|
|
9
|
+
> separate from configured defaults:
|
|
10
|
+
> `build config resolved --summary --json` reports the active execution and
|
|
11
|
+
> judge defaults. Run `build provider list` and `build doctor --matrix` before
|
|
12
|
+
> relying on a local provider.
|
|
13
|
+
|
|
14
|
+
> **Execution modes:** All providers run locally through their CLI adapters. Variant mode `:cloud` and direct provider API transport are not executable product paths (see [ADR-023](https://github.com/ebrindley/build/blob/main/docs/adr/023-cli-only-provider-execution.md)). Historical telemetry may still contain Codex/Cursor cloud-shaped fields; those records stay readable but are not a signal to run cloud workflows.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Model Selection and Namespaces
|
|
19
|
+
|
|
20
|
+
Build enforces provider model purity: every provider only accepts its own canonical model identifiers; unknown or cross-provider names either omit the provider model override or raise a validation error, depending on the provider path. Use `build config resolved --summary --json` for active defaults, and keep the registry fresh with:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
build provider refresh <id> --models
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The release catalog is generated from Build's canonical provider YAML and is
|
|
27
|
+
shipped with the package. Refresh writes a narrow, digest-bound model/pricing
|
|
28
|
+
overlay; it does not rewrite release capabilities or executable configuration.
|
|
29
|
+
Existing project `providers.yaml` files remain supported as policy overlays
|
|
30
|
+
(for example enabled state, defaults, roles, mappings, and local limits), while
|
|
31
|
+
their copied catalog inventory is ignored. New projects do not receive a
|
|
32
|
+
provider-catalog snapshot.
|
|
33
|
+
|
|
34
|
+
| Provider | Default Source | Notes |
|
|
35
|
+
| ----------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
36
|
+
| Claude | Primary validated | Zero-flag model selection follows the installed Claude CLI; choose it explicitly during first-run setup or config |
|
|
37
|
+
| Codex | Primary validated | Zero-flag model selection follows the installed Codex CLI; reasoning effort remains separately configurable |
|
|
38
|
+
| Grok | Supported validated | Use `--variant grok` for an explicit Grok run; not implied as the global default |
|
|
39
|
+
| Cursor | Supported validated | `auto` is supported for Cursor-native routing; macOS Keychain access can block agent sandboxes |
|
|
40
|
+
| OpenCode | Supported validated | Router CLI; use exact upstream model IDs such as `z-ai/glm-4.7` |
|
|
41
|
+
| Antigravity | Supported validated | Google `agy` CLI provider; authenticate with Google OAuth or `ANTIGRAVITY_API_KEY` where supported |
|
|
42
|
+
| Pi | Supported validated | Backend-agnostic host CLI; cost and capability depend on the configured backend; local OpenAI-compatible path not yet validated |
|
|
43
|
+
| Gemini | Experimental | No longer extended; opt-in only. Check vendor CLI availability and entitlements. CLI must be installed separately |
|
|
44
|
+
| Copilot | Experimental | Copilot CLI exposes its own supported model set |
|
|
45
|
+
| Kiro | Experimental | Experimental native adapter; headless mode requires `KIRO_API_KEY` |
|
|
46
|
+
|
|
47
|
+
Use explicit provider IDs in configuration or CLI flags. Common provider IDs
|
|
48
|
+
`claude`, `codex`, `grok`, `cursor`, `opencode`, and `gemini` cover most public
|
|
49
|
+
release usage. Passing a generic GPT name to a provider that does not expose it
|
|
50
|
+
now omits the model override or returns a validation error so you can correct
|
|
51
|
+
the selection.
|
|
52
|
+
|
|
53
|
+
For the shared installation and first-use sequence, follow
|
|
54
|
+
[INSTALL.md: Set up a provider](../INSTALL.md#set-up-a-provider). First-run
|
|
55
|
+
setup saves a provider selection, and an active profile takes precedence over
|
|
56
|
+
project and user settings. Inspect `build config resolved --summary --json`
|
|
57
|
+
before relying on zero-flag routing; the installation guide shows how to select
|
|
58
|
+
a named profile explicitly. Deferred auth is a cold state, not proof of bad
|
|
59
|
+
credentials: a real invocation establishes whether the selected CLI can run.
|
|
60
|
+
|
|
61
|
+
For a read-only preview before installing or changing provider setup, the
|
|
62
|
+
internal-tier `explain` command reads embedded config without initializing
|
|
63
|
+
anything (it is intentionally absent from `build --help`):
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
build explain providers
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Fast model
|
|
70
|
+
|
|
71
|
+
Anything that wants a fast model (`--variant <provider>:fast`, speed and cost
|
|
72
|
+
optimization, flywheel verify stages, `roles.*.modelRole: fast`) uses one lookup, in this order: the active profile, then project,
|
|
73
|
+
then user `defaults.providers.<id>.fastModel`, then the provider's fast slot in
|
|
74
|
+
`providers.yaml`. Claude, Codex, Gemini and Cursor have a fast slot. A provider
|
|
75
|
+
without one uses its default model. An executor on its fast model does not
|
|
76
|
+
inherit `defaults.providers.<id>.reasoningEffort`; set `roles.executor.reasoningEffort`
|
|
77
|
+
to choose one.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
build config set defaults.providers.opencode.fastModel <model-id> --scope user
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
A `fastModel` the provider does not accept is rejected when you set it and
|
|
84
|
+
reported with its config path at run time; Build never swaps in another model.
|
|
85
|
+
|
|
86
|
+
### Claude model aliases (incl. Fable 5 and 5.1)
|
|
87
|
+
|
|
88
|
+
Claude accepts the short aliases `opus`, `sonnet`, `haiku`, and `fable` (each floats to the latest of that family), version-pinned shorthands (`opus-5-5`, `opus-4-8`, `sonnet-4-6`, `fable-5`, `fable-5-1`), and full `claude-*` ids (`claude-opus-5-5`, `claude-opus-4-8`, `claude-fable-5`, `claude-fable-5-1`). Direct backend ids (Bedrock `*.anthropic.claude-*`, Vertex `claude-*@YYYYMMDD`) also pass through. A **specific** Claude version pin (family + major.minor, e.g. `sonnet-4-99`, `opus-4.99`, `fable-5-9`) that doesn't resolve now fails fast with a clear error instead of silently running the CLI default. Bare families and major-only aliases (`opus`, `sonnet-4`, `opus-99`, `fable`) float and are not errored, a full `claude-*` id is passed through to the CLI unchanged (direct-string support; a misspelled `claude-*` id surfaces at the CLI rather than at this guard), and non-Claude tokens (`gpt-*`, arbitrary strings) omit `--model` under provider purity.
|
|
89
|
+
|
|
90
|
+
> **Fable 5 availability.** The `fable` / `fable-5` aliases and the full `claude-fable-5` id resolve on the Anthropic, Vertex, and AWS Bedrock backends (Bedrock → `global.anthropic.claude-fable-5`). Fable 5 may be **temporarily unavailable upstream** while external availability controls are in effect. During that state, a run targeting Fable surfaces a clear "temporarily unavailable" message; retry later or pick another model (`opus`, `sonnet`) in the meantime. **The Bedrock inference profile is wired ahead of availability but is unverified** and has not been invoked live while Fable is unavailable. When access returns, re-verify the profile live and add any regional profiles to the `claude-fable-5` entry in `.build-project/config/providers.yaml`. The `fable-5-1` shorthand and the full `claude-fable-5-1` id resolve the same way (Bedrock → `global.anthropic.claude-fable-5-1`); only the global profile is declared.
|
|
91
|
+
|
|
92
|
+
## Quick Start with Mock Mode
|
|
93
|
+
|
|
94
|
+
**For development and testing**, you can use mock mode to run Build without installing any providers.
|
|
95
|
+
|
|
96
|
+
Outside test runners (`NODE_ENV=test` or `VITEST=true|1`), both flags are required. If only `BUILD_MOCK_PROVIDERS=1` is set, CLI startup scrubs it with a warning and real providers remain the default.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Enable mock mode outside tests (both flags required)
|
|
100
|
+
export BUILD_MOCK_PROVIDERS=1
|
|
101
|
+
export BUILD_ALLOW_MOCK_PROVIDERS=1
|
|
102
|
+
|
|
103
|
+
# Run with mock providers
|
|
104
|
+
build run "test task" --variants=3
|
|
105
|
+
|
|
106
|
+
# Disable mock mode
|
|
107
|
+
unset BUILD_MOCK_PROVIDERS
|
|
108
|
+
unset BUILD_ALLOW_MOCK_PROVIDERS
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Mock mode simulates realistic execution times and occasional errors (10% failure rate) for testing variant competition logic. See [MOCK_ENV_VARS.md](https://github.com/ebrindley/build/blob/main/docs/MOCK_ENV_VARS.md).
|
|
112
|
+
|
|
113
|
+
## Verify Your Environment (Health / Doctor)
|
|
114
|
+
|
|
115
|
+
Build includes a built-in environment check:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Alias:
|
|
119
|
+
build doctor
|
|
120
|
+
|
|
121
|
+
# Check configured providers only (default behavior)
|
|
122
|
+
build doctor
|
|
123
|
+
|
|
124
|
+
# Check all known providers explicitly
|
|
125
|
+
build doctor --all
|
|
126
|
+
|
|
127
|
+
# Support matrix: tier + CLI/auth/runtime health
|
|
128
|
+
build doctor --matrix
|
|
129
|
+
|
|
130
|
+
# Check a single provider
|
|
131
|
+
build doctor --provider claude
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
`build provider list` is the first-user readiness check: it is read-only and
|
|
135
|
+
reports whether at least one configured provider appears ready. After
|
|
136
|
+
target-repo `build init`, run `build doctor` for the full checklist. The
|
|
137
|
+
readiness subset (`doctor`, `doctor --provider <id>`, and `doctor --all`) is
|
|
138
|
+
part of the dependable supported surface when used for setup verification.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Setup Command
|
|
143
|
+
|
|
144
|
+
Build provides a unified `build provider setup` command for managing providers.
|
|
145
|
+
|
|
146
|
+
### Interactive Wizard
|
|
147
|
+
|
|
148
|
+
Run the setup wizard to interactively select and install providers:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
build provider setup
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The wizard will:
|
|
155
|
+
|
|
156
|
+
1. Show available providers with descriptions
|
|
157
|
+
2. Let you select one or more providers
|
|
158
|
+
3. Install each provider
|
|
159
|
+
4. Configure provider options (when available)
|
|
160
|
+
|
|
161
|
+
### First-Run Wizard
|
|
162
|
+
|
|
163
|
+
`build provider setup --first-run` is re-runnable. When two or more providers are
|
|
164
|
+
already ready, it asks which one is your default, then asks whether to save it for
|
|
165
|
+
all repos, for this repo only, or just for this run. Pressing Enter at the provider
|
|
166
|
+
choice keeps the current default. With one ready provider there is no default
|
|
167
|
+
question. `--first-run --providers <id>[,<id>]` skips the wizard and saves the
|
|
168
|
+
first ready listed provider as your user default; add `--non-interactive` to
|
|
169
|
+
also skip the instructions-import question.
|
|
170
|
+
|
|
171
|
+
### Non-Interactive Setup
|
|
172
|
+
|
|
173
|
+
Install specific providers without interaction:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Install single provider
|
|
177
|
+
build provider setup --providers claude
|
|
178
|
+
|
|
179
|
+
# Install multiple providers
|
|
180
|
+
build provider setup --providers claude,gemini,opencode
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Check Mode
|
|
184
|
+
|
|
185
|
+
Report provider readiness without making changes:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
build provider list
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Output shows:
|
|
192
|
+
|
|
193
|
+
- `OK` — Installed, authenticated, and execute-ready
|
|
194
|
+
- `Sandbox blocked (execute)` — CLI/auth may be present, but sandbox or policy prevents provider state access
|
|
195
|
+
- `Warning:` — Installed but degraded or not authenticated
|
|
196
|
+
- `Error` — Not installed (with install command)
|
|
197
|
+
|
|
198
|
+
### First-Run Picker
|
|
199
|
+
|
|
200
|
+
When you run `build run` or `build run competition` without a configured provider:
|
|
201
|
+
|
|
202
|
+
**TTY Mode** (interactive terminal):
|
|
203
|
+
|
|
204
|
+
- Shows provider picker automatically
|
|
205
|
+
- Prompts to install selected provider
|
|
206
|
+
- Retries your original command after setup
|
|
207
|
+
|
|
208
|
+
**Non-Interactive Mode** (scripts, CI):
|
|
209
|
+
|
|
210
|
+
- Prints error message
|
|
211
|
+
- Shows deterministic setup commands
|
|
212
|
+
- Exits with error code
|
|
213
|
+
|
|
214
|
+
Example:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# First run without provider
|
|
218
|
+
$ build run "test task"
|
|
219
|
+
Warning: No runnable provider configured
|
|
220
|
+
|
|
221
|
+
Setup required. Run one of these commands:
|
|
222
|
+
build provider setup # Interactive wizard
|
|
223
|
+
build provider setup --providers claude # Install Claude
|
|
224
|
+
build provider setup --providers opencode # Install OpenCode
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Safety Boundary
|
|
228
|
+
|
|
229
|
+
Build categorizes installers by risk level:
|
|
230
|
+
|
|
231
|
+
**Safe** (auto-install allowed):
|
|
232
|
+
|
|
233
|
+
- npm global install
|
|
234
|
+
- brew install
|
|
235
|
+
- pipx install
|
|
236
|
+
|
|
237
|
+
**Needs Confirmation** (requires approval):
|
|
238
|
+
|
|
239
|
+
- curl | bash installers
|
|
240
|
+
- Manual installation steps
|
|
241
|
+
|
|
242
|
+
To allow risky installers (currently `cursor`, `grok`, `kiro`, `antigravity`, and `opencode`, which ship as
|
|
243
|
+
`curl | bash`), set this env var. The gate applies to **both interactive and
|
|
244
|
+
non-interactive** runs — without it, `build provider setup` will print the install
|
|
245
|
+
command and exit without executing it:
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
export BUILD_ALLOW_CURL_BASH=1
|
|
249
|
+
build provider setup --providers <provider>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Provider Installation
|
|
255
|
+
|
|
256
|
+
> **Node version note:** The per-provider "Prerequisite: Node.js" lines below are
|
|
257
|
+
> each external CLI's own minimum, not Build's. Build itself requires Node.js
|
|
258
|
+
> 24.x or 26.x (see [INSTALL.md](../INSTALL.md#prerequisites)); a provider CLI may run on
|
|
259
|
+
> an older Node, but Build still needs 24.x or 26.x to run.
|
|
260
|
+
|
|
261
|
+
### Claude CLI
|
|
262
|
+
|
|
263
|
+
**Status**: Supported local CLI provider
|
|
264
|
+
|
|
265
|
+
#### Installation
|
|
266
|
+
|
|
267
|
+
Prerequisite: Node.js 18+ (the Claude CLI's own minimum; Build itself requires Node 24.x or 26.x).
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Install Claude Code CLI
|
|
271
|
+
npm install -g @anthropic-ai/claude-code
|
|
272
|
+
|
|
273
|
+
# Verify installation
|
|
274
|
+
claude --version
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
#### Authentication
|
|
278
|
+
|
|
279
|
+
1. **CLI Login (preferred)**:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
claude auth login
|
|
283
|
+
# Browser/device flow; stores credentials in Claude CLI config
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
2. **Verify Setup**:
|
|
287
|
+
```bash
|
|
288
|
+
# Run a simple Claude command and rely on its error output
|
|
289
|
+
claude --version
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
#### Configuration
|
|
293
|
+
|
|
294
|
+
Build uses a dedicated config directory to avoid conflicts:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# Default location
|
|
298
|
+
~/.build/config/providers/claude
|
|
299
|
+
|
|
300
|
+
# Or set custom location
|
|
301
|
+
export CLAUDE_CONFIG_DIR=~/.build/config/providers/claude
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**Bedrock Configuration (AWS)**:
|
|
305
|
+
|
|
306
|
+
Build defaults Claude to Anthropic. Bedrock mode is enabled when
|
|
307
|
+
`BUILD_CLAUDE_BACKEND=bedrock` is set.
|
|
308
|
+
AWS environment variables (`AWS_REGION`, `AWS_PROFILE`) alone do **not**
|
|
309
|
+
activate Bedrock mode — explicit opt-in is still required.
|
|
310
|
+
|
|
311
|
+
> **Migration**: Prefer `BUILD_CLAUDE_BACKEND=bedrock` in shell profiles and CI.
|
|
312
|
+
> Build's backend resolver checks `BUILD_CLAUDE_BACKEND` first; `CLAUDE_CODE_USE_BEDROCK=1`
|
|
313
|
+
> is still honored as a legacy fallback when the canonical variable is unset.
|
|
314
|
+
|
|
315
|
+
When Bedrock is active, Build converts **explicit pins** to cross-region
|
|
316
|
+
inference profiles automatically. A **family alias** is not converted: `opus`,
|
|
317
|
+
`sonnet`, `haiku`, and `fable` reach the Claude CLI unchanged, and the CLI
|
|
318
|
+
resolves the family against your account's entitlement and builds the profile ID
|
|
319
|
+
itself. Build keeps no table of what a family currently means — one would go
|
|
320
|
+
stale silently and downgrade runs.
|
|
321
|
+
|
|
322
|
+
Redirect a family with the Claude CLI's own variables when you need a specific
|
|
323
|
+
deployment:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
export ANTHROPIC_DEFAULT_OPUS_MODEL=<model-or-deployment-id>
|
|
327
|
+
export ANTHROPIC_DEFAULT_SONNET_MODEL=<model-or-deployment-id>
|
|
328
|
+
export ANTHROPIC_DEFAULT_HAIKU_MODEL=<model-or-deployment-id>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Default prefix: `global`**. The `global` inference pool draws capacity from
|
|
332
|
+
all AWS regions, reducing single-region throttling. Use a regional prefix only
|
|
333
|
+
when you need explicit data residency, latency affinity, or compliance controls.
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
# Canonical Build setting:
|
|
337
|
+
export BUILD_CLAUDE_BACKEND=bedrock
|
|
338
|
+
|
|
339
|
+
# Override to pin a specific region prefix (global|us|eu|jp|apac):
|
|
340
|
+
export BUILD_BEDROCK_REGION_PREFIX=us
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Build applies that prefix itself when it builds a profile ID for an explicit
|
|
344
|
+
pin. For a family alias — where the CLI builds the ID — it passes the same value
|
|
345
|
+
through as `ANTHROPIC_BEDROCK_REGION_PREFIX`, which the Claude CLI honours from
|
|
346
|
+
2.1.224. On an older CLI the variable is ignored and the alias draws from the
|
|
347
|
+
CLI's own default pool, so the configured prefix is only a preference there;
|
|
348
|
+
`build doctor` reports this (see **Family-alias migration** below).
|
|
349
|
+
|
|
350
|
+
Not every model has a profile under every prefix. For an explicit pin whose
|
|
351
|
+
registry entry declares no profile under your prefix, Build uses that model's
|
|
352
|
+
`global` profile instead, and AWS may serve a global request from any region.
|
|
353
|
+
If you need data residency, check that the model's AWS Bedrock model card lists
|
|
354
|
+
a profile for your geography before relying on the prefix.
|
|
355
|
+
|
|
356
|
+
**Inference profile examples**:
|
|
357
|
+
|
|
358
|
+
| Input | What goes on the wire | Built by |
|
|
359
|
+
| ---------------------------- | ------------------------------------------------- | -------- |
|
|
360
|
+
| `--model sonnet` | `sonnet` (CLI resolves the family) | Claude CLI |
|
|
361
|
+
| `--model opus` | `opus` (CLI resolves the family) | Claude CLI |
|
|
362
|
+
| `--model sonnet-4-6` | `global.anthropic.claude-sonnet-4-6` | Build |
|
|
363
|
+
| `--model claude-opus-4-8` | `global.anthropic.claude-opus-4-8` | Build |
|
|
364
|
+
| `--model haiku-4-5` | `global.anthropic.claude-haiku-4-5-20251001-v1:0` | Build |
|
|
365
|
+
|
|
366
|
+
Bedrock model ID suffixes for explicit pins are maintained in
|
|
367
|
+
`CLAUDE_BEDROCK_MODELS` in `src/core/providers/claude/config.ts` — do not
|
|
368
|
+
construct inference profile strings manually.
|
|
369
|
+
|
|
370
|
+
**Family-alias migration**: Build's Claude registry roles (`judge_primary`,
|
|
371
|
+
`quality`, `reasoning`, `long_context`) point at the `opus` family rather than a
|
|
372
|
+
pinned version, so which Opus runs now follows the installed Claude CLI and your
|
|
373
|
+
account entitlement, not a Build table. Two consequences on an older CLI, both
|
|
374
|
+
reported by `build doctor`: before 2.1.219 a family alias resolves to the
|
|
375
|
+
previous flagship, and before 2.1.224 `ANTHROPIC_BEDROCK_REGION_PREFIX` is
|
|
376
|
+
unavailable. Context-window selection follows the CLI for aliases too: Build
|
|
377
|
+
appends a `[1m]` selector only to explicit pins, because it cannot know which
|
|
378
|
+
model the CLI will pick — ask for it explicitly (`--model opus[1m]`) and the
|
|
379
|
+
selector passes through. Pin a role to an explicit ID (or set
|
|
380
|
+
`ANTHROPIC_DEFAULT_*_MODEL`) when you need a fixed version.
|
|
381
|
+
|
|
382
|
+
Build also synthesizes `CLAUDE_CODE_USE_BEDROCK=1` for Claude subprocesses
|
|
383
|
+
when the canonical `BUILD_CLAUDE_BACKEND=bedrock` setting is used, so the
|
|
384
|
+
Claude CLI receives the backend signal it expects at the final subprocess
|
|
385
|
+
boundary only.
|
|
386
|
+
|
|
387
|
+
**Vertex Configuration (Google Cloud)**:
|
|
388
|
+
|
|
389
|
+
Vertex mode is enabled when `BUILD_CLAUDE_BACKEND=vertex` is set.
|
|
390
|
+
`CLAUDE_CODE_USE_VERTEX` is treated the same way as the Bedrock flag above:
|
|
391
|
+
Build ignores it for routing and only synthesizes Claude-native backend flags
|
|
392
|
+
when launching the final Claude subprocess.
|
|
393
|
+
|
|
394
|
+
Build does **not** rewrite Claude model IDs in Vertex mode. Pass Claude-native
|
|
395
|
+
model IDs through unchanged, including version-pinned IDs such as
|
|
396
|
+
`claude-haiku-4-5@20251001` when needed.
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
# Canonical Build setting:
|
|
400
|
+
export BUILD_CLAUDE_BACKEND=vertex
|
|
401
|
+
|
|
402
|
+
# Required Vertex/Claude Code settings:
|
|
403
|
+
export CLOUD_ML_REGION=us-central1
|
|
404
|
+
export ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id>
|
|
405
|
+
|
|
406
|
+
# Standard Google Cloud auth:
|
|
407
|
+
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
|
|
408
|
+
|
|
409
|
+
# Optional project aliases supported by Claude Code:
|
|
410
|
+
export GCLOUD_PROJECT=<your-project-id>
|
|
411
|
+
# or:
|
|
412
|
+
export GOOGLE_CLOUD_PROJECT=<your-project-id>
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
Vertex mode uses Google Cloud credentials, so Claude `/login` and `/logout`
|
|
416
|
+
are not part of the setup flow.
|
|
417
|
+
|
|
418
|
+
Build synthesizes `CLAUDE_CODE_USE_VERTEX=1` for Claude subprocesses when the
|
|
419
|
+
canonical `BUILD_CLAUDE_BACKEND=vertex` setting is used.
|
|
420
|
+
|
|
421
|
+
**Foundry Configuration (Microsoft Foundry)**:
|
|
422
|
+
|
|
423
|
+
Foundry mode is enabled when `BUILD_CLAUDE_BACKEND=foundry` is set.
|
|
424
|
+
`CLAUDE_CODE_USE_FOUNDRY` is treated the same way as the Bedrock and Vertex flags
|
|
425
|
+
above: Build honors it as a legacy fallback when the canonical variable is unset,
|
|
426
|
+
and synthesizes `CLAUDE_CODE_USE_FOUNDRY=1` for the final Claude subprocess.
|
|
427
|
+
|
|
428
|
+
Build does **not** rewrite Claude model IDs in Foundry mode. Model names pass
|
|
429
|
+
through unchanged and the Claude CLI resolves them against your deployments.
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
# Canonical Build setting:
|
|
433
|
+
export BUILD_CLAUDE_BACKEND=foundry
|
|
434
|
+
|
|
435
|
+
# Connection — set exactly one of these:
|
|
436
|
+
export ANTHROPIC_FOUNDRY_RESOURCE=<your-foundry-resource-name>
|
|
437
|
+
# or the full endpoint:
|
|
438
|
+
export ANTHROPIC_FOUNDRY_BASE_URL=https://<resource>.services.ai.azure.com
|
|
439
|
+
|
|
440
|
+
# Credential — the CLI takes the first available, in this order:
|
|
441
|
+
export ANTHROPIC_FOUNDRY_AUTH_TOKEN=<bearer-token>
|
|
442
|
+
export ANTHROPIC_FOUNDRY_API_KEY=<api-key>
|
|
443
|
+
# ...or set neither and use the Azure default credential chain (e.g. `az login`).
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
Build's preflight requires the resource or the base URL, because neither is
|
|
447
|
+
inferable from a credential. It does not check credentials or contact the
|
|
448
|
+
service: Foundry auth is established by execution, and the Azure default
|
|
449
|
+
credential chain sets no variable Build can observe.
|
|
450
|
+
|
|
451
|
+
**Alias lag caveat**: Foundry aliases resolve to the CLI's own built-in Foundry
|
|
452
|
+
defaults, which lag the Anthropic backend (`opus` currently means Opus 4.6
|
|
453
|
+
there), and the CLI performs no startup availability check. Pin your deployment
|
|
454
|
+
names explicitly:
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
export ANTHROPIC_DEFAULT_OPUS_MODEL=<your-opus-deployment-name>
|
|
458
|
+
export ANTHROPIC_DEFAULT_SONNET_MODEL=<your-sonnet-deployment-name>
|
|
459
|
+
export ANTHROPIC_DEFAULT_HAIKU_MODEL=<your-haiku-deployment-name>
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
**Manual checklist** (Build's Foundry support is verified at unit level only —
|
|
463
|
+
no live Foundry deployment was available):
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
export BUILD_CLAUDE_BACKEND=foundry
|
|
467
|
+
export ANTHROPIC_FOUNDRY_RESOURCE=<your-foundry-resource-name>
|
|
468
|
+
build doctor
|
|
469
|
+
build ask --to claude --model opus "reply OK"
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Confirm the reported model is your Foundry deployment, not an Anthropic model ID.
|
|
473
|
+
|
|
474
|
+
**Profile Setup**:
|
|
475
|
+
|
|
476
|
+
Build uses "profiles" to organize work. The default profile is `default`. You can create custom profiles for different projects:
|
|
477
|
+
|
|
478
|
+
```bash
|
|
479
|
+
# Create a profile
|
|
480
|
+
claude profile create my-project
|
|
481
|
+
|
|
482
|
+
# Set active profile
|
|
483
|
+
claude profile use my-project
|
|
484
|
+
|
|
485
|
+
# List profiles
|
|
486
|
+
claude profile list
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
#### Test Claude Provider
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
# Test execution
|
|
493
|
+
build run "Create a hello world test" --engine=claude
|
|
494
|
+
|
|
495
|
+
# Test variant competition
|
|
496
|
+
build run "Implement login feature" --engine=claude --variants=3
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
### Codex CLI
|
|
502
|
+
|
|
503
|
+
**Status**: Supported, enterprise-focused
|
|
504
|
+
|
|
505
|
+
#### Installation
|
|
506
|
+
|
|
507
|
+
Prerequisite: Node.js 16+ (the Codex CLI's own minimum; Build itself requires Node 24.x or 26.x).
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
# Install Codex CLI
|
|
511
|
+
npm install -g @openai/codex
|
|
512
|
+
|
|
513
|
+
# Verify installation
|
|
514
|
+
codex --version
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
#### Authentication
|
|
518
|
+
|
|
519
|
+
**Default:** Codex CLI OAuth (ChatGPT / browser login). Build does not preflight auth before
|
|
520
|
+
`run` or `run competition`; the CLI surfaces auth errors. `build doctor --provider codex` checks
|
|
521
|
+
`auth.json` under `CODEX_HOME` (and `~/.codex` when unset), plus API keys when set.
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
codex login
|
|
525
|
+
# or: build provider setup --providers codex
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
**API key mode (optional):** set `BUILD_CODEX_AUTH_MODE=api_key` and provide `CODEX_API_KEY`,
|
|
529
|
+
the variable `codex exec` reads its API key from. Build also forwards `OPENAI_API_KEY` and
|
|
530
|
+
`CODEX_TOKEN` and counts either as ready, but `codex exec` does not read them. In OAuth mode,
|
|
531
|
+
Build strips API keys from the Codex subprocess environment so the CLI does not prefer a shell
|
|
532
|
+
key over browser login.
|
|
533
|
+
|
|
534
|
+
#### Configuration
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
# Default location
|
|
538
|
+
~/.codex/
|
|
539
|
+
|
|
540
|
+
# Or set custom location
|
|
541
|
+
export CODEX_HOME=~/.codex
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
Codex execution is local only. `build run` and `build run competition` invoke `codex exec --json`
|
|
545
|
+
inside the selected workspace or worktree; Build does not submit, poll, or apply Codex cloud tasks.
|
|
546
|
+
|
|
547
|
+
#### Amazon Bedrock
|
|
548
|
+
|
|
549
|
+
Codex CLI 0.154.0 ships two built-in Bedrock providers, selected by `model_provider` in
|
|
550
|
+
`~/.codex/config.toml`: `amazon-bedrock` (the Mantle endpoint; ids `openai.<id>`) and
|
|
551
|
+
`amazon-bedrock-runtime` (the Bedrock Runtime endpoint, which for a model such as GPT-6 Astra
|
|
552
|
+
accepts only an inference profile, `global.openai.gpt-6-astra`). Build recognizes both, keeps the
|
|
553
|
+
one your config names in force, and emits the matching id for a canonical pin such as
|
|
554
|
+
`codex:gpt-6-astra`. Pin canonical ids only; `openai.*` and `global.openai.*` are rejected as pins.
|
|
555
|
+
Reading `~/.aws` follows the provider your config names and needs no attestation.
|
|
556
|
+
|
|
557
|
+
`BUILD_CODEX_BACKEND=bedrock` is an attestation, not a provider switch. It selects Bedrock routing
|
|
558
|
+
when your config names no recognized provider, asserts `model_provider="amazon-bedrock"` in that
|
|
559
|
+
case only, and lets readiness treat the run as a Bedrock run (no `auth.json` needed). It does not
|
|
560
|
+
override a configured `amazon-bedrock-runtime` provider or its region. AWS environment credentials
|
|
561
|
+
(`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`) are forwarded to the Codex
|
|
562
|
+
child whether or not it is set. Details and the measured evidence: `docs/reference/MODEL_ID_ROUTING.md` (not shipped in the npm package).
|
|
563
|
+
|
|
564
|
+
#### Test Codex Provider
|
|
565
|
+
|
|
566
|
+
```bash
|
|
567
|
+
build run "Create a test suite" --engine=codex --variants=2
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
---
|
|
571
|
+
|
|
572
|
+
### Cursor (CLI)
|
|
573
|
+
|
|
574
|
+
**Status**: Supported, CLI-first
|
|
575
|
+
|
|
576
|
+
#### Installation
|
|
577
|
+
|
|
578
|
+
```bash
|
|
579
|
+
# Install Cursor Agent
|
|
580
|
+
curl https://cursor.com/install -fsS | bash
|
|
581
|
+
|
|
582
|
+
# Verify installation
|
|
583
|
+
cursor-agent --version
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
#### Authentication
|
|
587
|
+
|
|
588
|
+
Build uses your Cursor account session. Authenticate via the Cursor Agent:
|
|
589
|
+
|
|
590
|
+
```bash
|
|
591
|
+
cursor-agent login
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
On a headless host (a CI runner, a container, a Cursor Cloud Agent VM), a
|
|
595
|
+
`CURSOR_API_KEY` in the environment authenticates `cursor-agent` without a login
|
|
596
|
+
session, and Build passes it to Cursor runs. `cursor-agent status` can still
|
|
597
|
+
report "Not logged in" in that setup. Readiness reports the key as present but
|
|
598
|
+
unverified until the first run, which is the real check.
|
|
599
|
+
|
|
600
|
+
#### Cursor Cloud (Historical Only)
|
|
601
|
+
|
|
602
|
+
Build does not run Cursor (or Codex) cloud agent workflows. Use local Cursor CLI execution via `cursor-agent login` and local variants such as `cursor:local`.
|
|
603
|
+
|
|
604
|
+
Historical note (compatibility and recovery only):
|
|
605
|
+
|
|
606
|
+
- Older runs may have used Cursor cloud transports (`api` REST agents or `github_pr` bot comments). Those shapes can still appear in telemetry, env dumps, or recovery notes.
|
|
607
|
+
- Env vars such as `BUILD_CURSOR_CLOUD_TRANSPORT` and `CURSOR_CLOUD_TRANSPORT` may exist in older operator setups; they do not enable a Build `:cloud` execution path. `CURSOR_API_KEY` is not a cloud setting: it authenticates the local CLI (see Authentication above).
|
|
608
|
+
- Use `cursor-agent login` or `CURSOR_API_KEY` for local CLI authentication. Do not treat cloud transport configuration as setup for new work.
|
|
609
|
+
- For PR publication after local `run competition apply`, use ordinary GitHub auth (`gh auth login`) as documented in the competition and CLI guides — that is not Cursor cloud execution.
|
|
610
|
+
|
|
611
|
+
#### Configuration
|
|
612
|
+
|
|
613
|
+
```bash
|
|
614
|
+
# Default: leave CURSOR_CONFIG_DIR unset. Build then finds the login that
|
|
615
|
+
# `cursor-agent login` stores in ~/.cursor (or ~/.build/config/providers/cursor).
|
|
616
|
+
# With XDG_CONFIG_HOME set, cursor-agent stores it in $XDG_CONFIG_HOME/cursor,
|
|
617
|
+
# which Build does not check; set CURSOR_CONFIG_DIR to that directory instead.
|
|
618
|
+
|
|
619
|
+
# Custom location: when set, Build checks only this directory for a login,
|
|
620
|
+
# so log in again with it set
|
|
621
|
+
export CURSOR_CONFIG_DIR=/path/to/cursor-config
|
|
622
|
+
cursor-agent login
|
|
623
|
+
|
|
624
|
+
# Override default model for Cursor
|
|
625
|
+
export BUILD_CURSOR_MODEL='auto'
|
|
626
|
+
|
|
627
|
+
# Make Cursor the default provider without flags
|
|
628
|
+
export BUILD_DEFAULT_PROVIDER='cursor'
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
The Cursor provider uses the `cursor` ID for local CLI execution. Use the environment variables above or Build's resolved provider configuration; `build.config.ts` is not a loaded configuration source.
|
|
632
|
+
|
|
633
|
+
#### Test Cursor Provider
|
|
634
|
+
|
|
635
|
+
```bash
|
|
636
|
+
build run "Write a hello world function" --engine=cursor
|
|
637
|
+
|
|
638
|
+
build run "Refactor this component" --engine=cursor --variants=2
|
|
639
|
+
|
|
640
|
+
# Test with file context (auto-detected in output)
|
|
641
|
+
build run "Review @src/auth.ts" --engine=cursor
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
**Important**: The Cursor CLI provider reuses Cursor's own session handling. Ensure `cursor-agent` works from your shell and that any enterprise policies allow CLI access. Use `BUILD_CURSOR_MODEL` or the Cursor preference store to pin defaults.
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
### Gemini CLI
|
|
649
|
+
|
|
650
|
+
**Status**: Experimental and no longer being extended; opt-in only. Check the vendor's current CLI availability and entitlements before relying on it. Prefer `antigravity`, the better-supported path.
|
|
651
|
+
|
|
652
|
+
#### Installation
|
|
653
|
+
|
|
654
|
+
Prerequisite: Node.js 20+ (the Gemini CLI's own minimum; Build itself requires Node 24.x or 26.x).
|
|
655
|
+
|
|
656
|
+
```bash
|
|
657
|
+
# Install Gemini CLI globally
|
|
658
|
+
npm install -g @google/gemini-cli
|
|
659
|
+
|
|
660
|
+
# Verify installation
|
|
661
|
+
gemini --version
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
#### Authentication
|
|
665
|
+
|
|
666
|
+
**The Gemini CLI provider does not handle authentication** - you must configure authentication yourself. The CLI supports both personal Google accounts and enterprise Vertex AI access.
|
|
667
|
+
|
|
668
|
+
**Option 1: Personal Google Account (Recommended for individuals)**
|
|
669
|
+
|
|
670
|
+
```bash
|
|
671
|
+
# Set your API key from Google AI Studio
|
|
672
|
+
export GOOGLE_API_KEY='your-api-key-here'
|
|
673
|
+
|
|
674
|
+
# Alternative: Set GEMINI_API_KEY (also supported)
|
|
675
|
+
export GEMINI_API_KEY='your-api-key-here'
|
|
676
|
+
|
|
677
|
+
# Get an API key at: https://aistudio.google.com/app/apikey
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
**Option 2: Vertex AI Enterprise (Recommended for organizations)**
|
|
681
|
+
|
|
682
|
+
```bash
|
|
683
|
+
# Authenticate with Google Cloud
|
|
684
|
+
gcloud auth application-default login
|
|
685
|
+
|
|
686
|
+
# Set your project and location
|
|
687
|
+
export GOOGLE_CLOUD_PROJECT='your-gcp-project-id'
|
|
688
|
+
export GOOGLE_CLOUD_LOCATION='us-central1' # or your preferred region
|
|
689
|
+
|
|
690
|
+
# Alternative: Use service account
|
|
691
|
+
export GOOGLE_APPLICATION_CREDENTIALS='/path/to/service-account-key.json'
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
#### Configuration
|
|
695
|
+
|
|
696
|
+
Build uses a dedicated config directory for Gemini:
|
|
697
|
+
|
|
698
|
+
```bash
|
|
699
|
+
# Default location
|
|
700
|
+
~/.build/gemini/
|
|
701
|
+
|
|
702
|
+
# Or set custom location
|
|
703
|
+
export GEMINI_CONFIG_DIR=~/.build/gemini
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
**Environment Variables**:
|
|
707
|
+
|
|
708
|
+
- `GOOGLE_API_KEY` - API key for personal Google account
|
|
709
|
+
- `GEMINI_API_KEY` - Alternative API key variable
|
|
710
|
+
- `GOOGLE_CLOUD_PROJECT` - GCP project ID for Vertex AI
|
|
711
|
+
- `GOOGLE_CLOUD_LOCATION` - GCP region for Vertex AI
|
|
712
|
+
- `GOOGLE_APPLICATION_CREDENTIALS` - Service account key path
|
|
713
|
+
|
|
714
|
+
#### Test Gemini Provider
|
|
715
|
+
|
|
716
|
+
```bash
|
|
717
|
+
# Test with personal account
|
|
718
|
+
build run "Create a hello world function" --engine=gemini
|
|
719
|
+
|
|
720
|
+
# Test with specific model
|
|
721
|
+
build run "Add error handling" --engine=gemini --model=gemini-2.5-pro
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
**Important**: This provider assumes `gemini` CLI is already installed and authenticated. Build simply executes the `gemini` command and lets the CLI handle all authentication and API communication. Choose the authentication method that matches your use case (personal vs enterprise).
|
|
725
|
+
|
|
726
|
+
---
|
|
727
|
+
|
|
728
|
+
### Copilot CLI
|
|
729
|
+
|
|
730
|
+
**Status**: Experimental — available for exploration, outside the primary validated public-release matrix.
|
|
731
|
+
|
|
732
|
+
#### Installation
|
|
733
|
+
|
|
734
|
+
Prerequisite: Node.js 22+ (the Copilot CLI's own minimum; Build itself requires Node 24.x or 26.x).
|
|
735
|
+
|
|
736
|
+
```bash
|
|
737
|
+
# Install GitHub Copilot CLI (Node.js package)
|
|
738
|
+
npm install -g @github/copilot
|
|
739
|
+
|
|
740
|
+
# Verify installation
|
|
741
|
+
copilot --help
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
If your npm config has `ignore-scripts=true`, use:
|
|
745
|
+
|
|
746
|
+
```bash
|
|
747
|
+
npm_config_ignore_scripts=false npm install -g @github/copilot
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
#### Authentication
|
|
751
|
+
|
|
752
|
+
Copilot CLI reuses your GitHub identity. Launch `copilot` once (interactive or `copilot -p "Hello" --allow-all-tools`) to complete device authentication if prompted. No additional Build configuration is required.
|
|
753
|
+
|
|
754
|
+
#### Configuration
|
|
755
|
+
|
|
756
|
+
Build invokes the standalone `copilot` application. Default execution is agentic direct editing: Copilot applies workspace edits and Build detects changes via git. Configure via environment variables:
|
|
757
|
+
|
|
758
|
+
| Variable | Purpose | Default |
|
|
759
|
+
| ---------------------------- | ----------------------------------------------- | --------------------------------------- |
|
|
760
|
+
| `BUILD_COPILOT_CLI_COMMAND` | Path to Copilot CLI binary | `copilot` |
|
|
761
|
+
| `BUILD_COPILOT_WORKFLOW` | Default workflow (`suggest`, `chat`, `explain`) | `suggest` |
|
|
762
|
+
| `BUILD_TIMEOUT_COPILOT_MS` | Provider timeout override in ms | `(unset; registry fallback 2700000)` |
|
|
763
|
+
|
|
764
|
+
Timeout resolution: explicit caller timeout, then `BUILD_TIMEOUT_COPILOT_MS` (when set), then global `BUILD_TIMEOUT_MS`, then registry/`providers.yaml` `timeout_ms` (registry provider timeout is `2700000` ms / 45 minutes). The env override itself is unset by default; do not treat `2700000` as the env var's default.
|
|
765
|
+
|
|
766
|
+
> **Note:** Default output mode is agentic direct edit with git-detected changes (`--allow-all-tools` and partial dangerous-command denies). Full shell denial requires `BUILD_COPILOT_SHELL_ENABLED=0`. Unified-diff/`diff_output` mode is opt-in (`BUILD_COPILOT_OUTPUT_MODE=diff_output`).
|
|
767
|
+
|
|
768
|
+
#### Usage Patterns
|
|
769
|
+
|
|
770
|
+
```bash
|
|
771
|
+
# Agentic direct edit (git-detected changes; experimental provider)
|
|
772
|
+
build run "Harden password validation in @src/auth/password.ts" --provider=copilot
|
|
773
|
+
|
|
774
|
+
# Ask Copilot to propose tests for a new feature
|
|
775
|
+
build run "Write vitest cases for the new billing limits" \
|
|
776
|
+
--provider=copilot \
|
|
777
|
+
--workflow=chat \
|
|
778
|
+
--prompt "Focus on branch coverage and edge cases around plan downgrades."
|
|
779
|
+
|
|
780
|
+
# Combine Copilot with other providers for orchestration
|
|
781
|
+
build run competition "Modernize feature flag utilities" \
|
|
782
|
+
--variant copilot:local \
|
|
783
|
+
--variant claude:local \
|
|
784
|
+
--variant gemini:local
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
**Recommended prompt structure**:
|
|
788
|
+
|
|
789
|
+
- Begin with the **goal** ("Improve caching invalidation").
|
|
790
|
+
- Specify **target files** (`FILES:` block or inline `@src/cache/index.ts`).
|
|
791
|
+
- Add **acceptance criteria** ("No new dependencies, keep existing API").
|
|
792
|
+
- End with **validation hints** for follow-up review after git-detected edits.
|
|
793
|
+
|
|
794
|
+
#### Environment Variables
|
|
795
|
+
|
|
796
|
+
| Variable | Purpose | Default |
|
|
797
|
+
| ---------------------------- | ----------------------------------------------- | ------------------------------------ |
|
|
798
|
+
| `BUILD_COPILOT_CLI_COMMAND` | Override Copilot CLI binary path | `copilot` |
|
|
799
|
+
| `BUILD_COPILOT_WORKFLOW` | Default workflow (`suggest`, `chat`, `explain`) | `suggest` |
|
|
800
|
+
| `BUILD_TIMEOUT_COPILOT_MS` | Provider timeout override in milliseconds | `(unset; registry fallback 2700000)` |
|
|
801
|
+
| `COPILOT_TELEMETRY_OPTOUT` | Disable GitHub Copilot telemetry (1=on) | `0` |
|
|
802
|
+
|
|
803
|
+
#### Troubleshooting
|
|
804
|
+
|
|
805
|
+
- **`Command not found: copilot`** — Ensure the CLI is installed and on your `PATH`, or set `BUILD_COPILOT_CLI_COMMAND`.
|
|
806
|
+
- **Authentication required** — Launch `copilot` once and follow the device-login flow, or ensure your GitHub CLI session includes Copilot scopes.
|
|
807
|
+
- **No git-detected changes / empty diff output** — Prefer the agentic default (workspace edits). For opt-in `diff_output`, provide FILE/FILES hints for multi-file edits.
|
|
808
|
+
- **`No changes detected (git status clean)` / `posix_spawnp failed`** — Under Build’s macOS sandbox wrapper, Copilot’s internal bash/shell tool can fail (`posix_spawnp failed`). Copilot can still perform direct file read/edit operations; prefer workflows that only create/edit files in existing directories. If you specifically need Copilot to run shell commands, opt out of Build’s sandbox for Copilot with `export BUILD_SANDBOX_COPILOT_ENABLED=0` (or `export BUILD_SANDBOX_GITHUB_COPILOT_ENABLED=0`).
|
|
809
|
+
|
|
810
|
+
---
|
|
811
|
+
|
|
812
|
+
### Grok CLI
|
|
813
|
+
|
|
814
|
+
**Status**: Supported via Grok Build CLI
|
|
815
|
+
|
|
816
|
+
For first-user delivery, prefer the validated selector
|
|
817
|
+
`--variant grok` and omit a Grok model pin. Build's registry
|
|
818
|
+
default is `auto`, which omits `-m/--model` and lets the installed Grok CLI use
|
|
819
|
+
its currently configured default. To choose a model explicitly for Build runs,
|
|
820
|
+
set the normal provider-scoped user option:
|
|
821
|
+
|
|
822
|
+
```bash
|
|
823
|
+
build config set defaults.providers.grok.model grok-4.6 --scope user
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
Inspect the resolved executor input, source, native default, discovery status,
|
|
827
|
+
and model-argument decision with:
|
|
828
|
+
|
|
829
|
+
```bash
|
|
830
|
+
build config resolved --role executor --provider grok --json
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
Set the value back to `auto` to follow the Grok CLI default again. Project-scoped
|
|
834
|
+
configuration and an explicit CLI model selection continue to take precedence
|
|
835
|
+
through Build's standard configuration resolution.
|
|
836
|
+
|
|
837
|
+
#### Installation
|
|
838
|
+
|
|
839
|
+
Install Grok Build with xAI's official installer:
|
|
840
|
+
|
|
841
|
+
```bash
|
|
842
|
+
curl -fsSL https://x.ai/cli/install.sh | bash
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
Because this runs a remote installer, Build will not execute it unless you explicitly opt in:
|
|
846
|
+
|
|
847
|
+
```bash
|
|
848
|
+
BUILD_ALLOW_CURL_BASH=1 build provider setup --providers grok
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
Then verify the CLI is on `PATH`:
|
|
852
|
+
|
|
853
|
+
```bash
|
|
854
|
+
grok --version
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
#### Authentication
|
|
858
|
+
|
|
859
|
+
Grok authentication is owned by the `grok` CLI. Build does not read or manage
|
|
860
|
+
Grok tokens.
|
|
861
|
+
|
|
862
|
+
**Primary (local / interactive):** use the Grok CLI's cached OAuth / device
|
|
863
|
+
login. Complete login once so the CLI stores auth under `~/.grok/`; later
|
|
864
|
+
Build runs reuse that cache without re-prompting:
|
|
865
|
+
|
|
866
|
+
```bash
|
|
867
|
+
# Preferred local path: device / CLI login (cached OAuth)
|
|
868
|
+
grok login --device-auth
|
|
869
|
+
# or, if your installed Grok CLI uses the shorter form:
|
|
870
|
+
grok login
|
|
871
|
+
# First interactive launch also completes auth when no cache exists:
|
|
872
|
+
grok
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
**Optional (CI / headless automation):** set the official xAI API key when you
|
|
876
|
+
need non-interactive runs without a local CLI auth cache:
|
|
877
|
+
|
|
878
|
+
```bash
|
|
879
|
+
export XAI_API_KEY=your-key
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
`GROK_CODE_XAI_API_KEY` is a **deprecated** Build compatibility alias. It is
|
|
883
|
+
still accepted for older Grok Build CLI / Build setups; prefer `XAI_API_KEY`
|
|
884
|
+
for new headless configuration. Do not treat the alias as the primary key.
|
|
885
|
+
|
|
886
|
+
#### Health and passive readiness
|
|
887
|
+
|
|
888
|
+
`build doctor --provider grok` uses passive checks only. A configured
|
|
889
|
+
`XAI_API_KEY`, the deprecated `GROK_CODE_XAI_API_KEY` alias, or an existing
|
|
890
|
+
`~/.grok/auth.json` reports authentication as **unknown** (legacy boolean auth
|
|
891
|
+
is `false`) until execution verifies the credential. Passive checks do not run
|
|
892
|
+
`grok` because that could start browser auth. That unverified state does not
|
|
893
|
+
block provider selection or `run`/`run competition`. Use
|
|
894
|
+
`build doctor --probe --provider grok` for an explicit active readiness check.
|
|
895
|
+
`run` and `run competition` establish auth on the requested execution.
|
|
896
|
+
|
|
897
|
+
For headless `run`/`run competition` without a usable CLI auth cache, set `XAI_API_KEY`
|
|
898
|
+
(optional path above). `BUILD_GROK_ALLOW_BROWSER_AUTH=1` is an **opt-in only**
|
|
899
|
+
escape hatch when you deliberately accept that the requested Grok execution
|
|
900
|
+
may open a browser; do not treat browser auth as automatically safe in
|
|
901
|
+
headless or CI environments.
|
|
902
|
+
|
|
903
|
+
`build run competition` and `build run` delegate authentication to the requested Grok
|
|
904
|
+
CLI execution. A cached CLI login, `XAI_API_KEY`, or the deprecated
|
|
905
|
+
`GROK_CODE_XAI_API_KEY` alias are common auth paths, but Build does not reject
|
|
906
|
+
the run based on a preflight inspection of those paths. Set
|
|
907
|
+
`BUILD_GROK_ALLOW_BROWSER_AUTH=1` only when an interactive browser flow is
|
|
908
|
+
acceptable.
|
|
909
|
+
|
|
910
|
+
#### Headless argv posture
|
|
911
|
+
|
|
912
|
+
Headless Grok runs use `grok --prompt-file` with structured JSON stdout (streaming by default),
|
|
913
|
+
validated against live headless preflight runs.
|
|
914
|
+
|
|
915
|
+
**Default posture** (`src/core/providers/grok/execution/commands.ts`):
|
|
916
|
+
|
|
917
|
+
| Flag | Value | Rationale |
|
|
918
|
+
|------|-------|-----------|
|
|
919
|
+
| `--prompt-file` | always | Avoid argv bloat; never use `-p`/`--single` for Build prompts |
|
|
920
|
+
| `--output-format` | `streaming-json` | Follows the provider-streaming gate (`BUILD_PROVIDER_STREAMING`, default on since 2026-06-04); set `BUILD_PROVIDER_STREAMING=0` for the `json` posture (deterministic success/error envelopes); `BUILD_GROK_OUTPUT_FORMAT` overrides both |
|
|
921
|
+
| `--no-alt-screen` | always | Headless determinism |
|
|
922
|
+
| `--no-memory` | default on | Disable Grok memory unless `BUILD_GROK_MEMORY=1` |
|
|
923
|
+
| `--rules` | `build` and `native+build` launches | Carries Build's instruction set for that run only, appended to Grok's system prompt. Judges, `native` mode, and asks with `inheritance.ask` unset get none. `--trust` is never passed: it adds the folder to `~/.grok/trusted_folders.toml` for good |
|
|
924
|
+
| `-m` / `--model` | omitted when the resolved model is `auto` | Lets the installed Grok CLI use its configured default. Explicit project/user/CLI model selections are passed through as `-m <model>`. |
|
|
925
|
+
| `--permission-mode` | *omitted for `default`* | Passing an approval-requiring mode (incl. the literal `default`, plus `acceptEdits`/`auto`) kills Grok's permission worker on the first tool call under headless OAuth (`Transport channel closed, when Auth(AuthorizationRequired)`; exit 0, empty `Cancelled` envelope) — validated on 0.2.16, `acceptEdits` reconfirmed dead on 0.2.73. Omitting uses the CLI's native default and survives. Explicit `bypassPermissions` also survives and is still emitted. `dontAsk` is version-gated for the locked native read-only posture on grok >= 0.2.93: `dontAsk` plus matching inspect/search allows is not sufficient on its own, because unmatched tools fall through to the user's own Grok configuration; the locked posture therefore also positively lists inspect tools (`Read`, `Grep`, `Bash`, `WebFetch`, `WebSearch`), disallows `Edit`/`Write`, and denies MCP tools. Official `--sandbox read-only` is omitted because it cannot nest under Build's outer seatbelt. Read-only runs (`readOnlyWorkingDir`/analysis intent, e.g. `build ask --to grok`) use that locked posture when the CLI is new enough; older/unknown CLIs fail before semantic read-only spawn rather than falling back to `--always-approve`. |
|
|
926
|
+
| `--allow` | read-only runs under `dontAsk` | Grants specific tools under `dontAsk` (`Read`, `Grep`, `Bash`, `WebFetch`, `WebSearch` for consults; necessary but not sufficient alone for the locked read-only posture). Callers pass `allowRules`; `BUILD_GROK_ALLOW_RULES` (csv) overrides. |
|
|
927
|
+
| `--always-approve` | default on (except `dontAsk`) | Required for headless edit-task execution; gated by an active policy boundary. Suppressed under `dontAsk` / locked read-only posture, which would otherwise defeat the allowlist. |
|
|
928
|
+
| `--max-turns` | *not set* | Empirically verified (0.2.82, 2026-07-02): no low default turn cap exists — 40+ sequential turns and 12-minute commands complete without the flag; its only observed real-world effect was killing healthy runs when set too low. Opt in with `BUILD_GROK_MAX_TURNS` (explicit doctor probes do, to stay cheap); invalid values omit the flag rather than falling back |
|
|
929
|
+
| `--no-auto-update` | always | xAI recommends this for scripts/CI/headless runs |
|
|
930
|
+
| `--sandbox` | omitted | Grok's official `read-only` profile is itself `sandbox-exec` and cannot nest under Build's outer seatbelt (EPERM). Read-only and edit/mixed both use Build's policy/sandbox boundary for FS confinement. |
|
|
931
|
+
| `--reasoning-effort` | set after capability validation | Emitted for explicit effort-capable models (for example `grok-4.6`) and when `auto` discovers such a model. `--effort` is never passed. Discovery failure does not invent capability. |
|
|
932
|
+
|
|
933
|
+
**Auth:** Primary local path is CLI OAuth / device login (`~/.grok` cache). Provider-scoped keys (`XAI_API_KEY`, deprecated `GROK_CODE_XAI_API_KEY`) are optional via provider policy for CI/headless without a cache — not mandatory. Passive tri-state readiness remains `unknown` and legacy boolean auth is `false` when either a key or a valid `~/.grok/auth.json` is present, until an explicit active probe or a successful requested execution verifies headless use; that unverified state does not block selection or execution. Compete/run do not run a pre-execution edit/auth probe; authentication is established by the requested `grok --prompt-file` invocation, and errors from that run keep their normal classification. Explicit `build doctor --probe --provider grok` still runs an active headless edit probe (`buildGrokArgv` + `executeProviderCommand`, `--max-turns 8`, `--always-approve`, `BUILD_GROK_AUTH_PROBE_TIMEOUT_MS` defaulting to 45 seconds). Session resume: `ProviderRunOptions.resumeSessionId` emits `--resume <id>`. Parsed token usage propagates through shared orchestration telemetry when present (USD may stay unknown without pricing).
|
|
934
|
+
|
|
935
|
+
**Overrides:** see the `BUILD_GROK_*` env vars in the Configuration subsection below.
|
|
936
|
+
|
|
937
|
+
#### Configuration
|
|
938
|
+
|
|
939
|
+
Build invokes `grok` in headless mode. Configure transport behavior via environment variables:
|
|
940
|
+
|
|
941
|
+
| Variable | Purpose | Default |
|
|
942
|
+
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------- |
|
|
943
|
+
| `BUILD_GROK_CLI_COMMAND` | Override Grok CLI binary path | `grok` |
|
|
944
|
+
| `BUILD_GROK_PERMISSION_MODE` | Optional explicit mode (`dontAsk`, `bypassPermissions`). Default **omits** `--permission-mode` (CLI native default). `acceptEdits`/`auto` are rejected as unsafe headless. `dontAsk` requires allow rules and is only used for the locked native read-only posture when the CLI is >= 0.2.93 | omit flag / `default` |
|
|
945
|
+
| `BUILD_GROK_ALLOW_RULES` | Comma-separated `--allow` rules when permission mode is `dontAsk` (required for `dontAsk`) | unset |
|
|
946
|
+
| `BUILD_GROK_AUTO_APPROVE` | Set to `0` to omit `--always-approve` (suppressed automatically under `dontAsk`) | enabled |
|
|
947
|
+
| `BUILD_GROK_ALWAYS_APPROVE` | Legacy alias for `BUILD_GROK_AUTO_APPROVE` | enabled |
|
|
948
|
+
| `BUILD_GROK_MAX_TURNS` | Opt-in `--max-turns` cap. **Unset by default** (flag omitted). Invalid values also omit the flag — there is no fallback default such as 400 | unset (omit flag) |
|
|
949
|
+
| `BUILD_GROK_OUTPUT_FORMAT` | `plain`, `json`, or `streaming-json`. When unset, follows `BUILD_PROVIDER_STREAMING` (default on → `streaming-json`; set `BUILD_PROVIDER_STREAMING=0` for buffered `json`) | `streaming-json` (when streaming on) |
|
|
950
|
+
| `BUILD_GROK_MEMORY` | Set to `1` to allow Grok memory | disabled (`--no-memory`) |
|
|
951
|
+
| `BUILD_GROK_ALLOW_BROWSER_AUTH` | Set to `1` to allow requested Grok execution (or an explicit doctor probe) to start browser auth | disabled |
|
|
952
|
+
| `BUILD_SKIP_GROK` | Skip Grok execution | unset |
|
|
953
|
+
|
|
954
|
+
**Headless permission notes:**
|
|
955
|
+
|
|
956
|
+
- Omitting `--permission-mode` is intentional and **not** the same as passing `--permission-mode default`. Approval-worker modes (`default`, `acceptEdits`, `auto`) die under headless OAuth on tool use.
|
|
957
|
+
- `acceptEdits` and `auto` are unsafe for headless automation; Build rejects them if set via `BUILD_GROK_PERMISSION_MODE`.
|
|
958
|
+
- Read-only consults (`build ask --to grok`, analysis intent / `readOnlyWorkingDir`) use the locked native posture when the CLI is >= 0.2.93: `dontAsk` + inspect/search allows (`Read`, `Grep`, `Bash`, `WebFetch`, `WebSearch`) plus write tools disallowed and MCP tools denied. Official `--sandbox read-only` is omitted (cannot nest under Build's seatbelt). `dontAsk` + allow rules alone are not globally fail-closed. Older/unknown CLIs fail before semantic read-only spawn rather than falling back to `--always-approve`. Elevating `BUILD_GROK_PERMISSION_MODE` (e.g. `bypassPermissions`) cannot YOLO past the locked posture.
|
|
959
|
+
- `--always-approve` (and explicit `bypassPermissions`) require an active Build policy/sandbox boundary. For edit intent, `BUILD_GROK_AUTO_APPROVE=0` fails closed before launch (no false success without a tool-approval path).
|
|
960
|
+
- Session resume: when `ProviderRunOptions.resumeSessionId` is set, Build emits Grok CLI `--resume <id>`. Legacy env names alone do not resume a session.
|
|
961
|
+
- Token usage: when Grok headless envelopes include parseable token counts, Build propagates them through orchestration telemetry. USD cost may remain unknown when pricing is unavailable.
|
|
962
|
+
|
|
963
|
+
#### Usage Patterns
|
|
964
|
+
|
|
965
|
+
Straightforward first run:
|
|
966
|
+
|
|
967
|
+
```bash
|
|
968
|
+
git checkout -b run/my-task
|
|
969
|
+
build run "Update the target file and add focused tests" --provider grok
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
When you want judge scores or feedback, use judged competition instead (AI
|
|
973
|
+
judging is the default), then apply the harvested result from a delivery branch:
|
|
974
|
+
|
|
975
|
+
```bash
|
|
976
|
+
git checkout -b run/my-graded-task
|
|
977
|
+
build run competition "Update the target file and add focused tests" \
|
|
978
|
+
--variant grok
|
|
979
|
+
git checkout -b fix/my-graded-task
|
|
980
|
+
build run competition apply <competition-id>
|
|
981
|
+
```
|
|
982
|
+
|
|
983
|
+
Multi-provider comparison after local validation:
|
|
984
|
+
|
|
985
|
+
```bash
|
|
986
|
+
build run competition "Update the target file and add focused tests" \
|
|
987
|
+
--variant grok \
|
|
988
|
+
--variant codex
|
|
989
|
+
```
|
|
990
|
+
|
|
991
|
+
**Important**: Build defers Grok authentication to the Grok CLI. For local use,
|
|
992
|
+
prefer cached CLI OAuth / device login (`grok login --device-auth`, `grok login`,
|
|
993
|
+
or an initial `grok`). `XAI_API_KEY` is optional for CI/headless automation.
|
|
994
|
+
`GROK_CODE_XAI_API_KEY` remains a deprecated compatibility alias (still accepted;
|
|
995
|
+
prefer `XAI_API_KEY`). Key presence is configured but unverified until an active
|
|
996
|
+
probe or requested execution succeeds. Build starts the requested `grok --prompt-file`
|
|
997
|
+
execution without inspecting those auth paths first; the CLI's actual result is
|
|
998
|
+
authoritative. Set `BUILD_GROK_ALLOW_BROWSER_AUTH=1` only when browser auth is
|
|
999
|
+
acceptable. Explicit `grok-4.6` reasoning effort
|
|
1000
|
+
(`low`/`medium`/`high`/`xhigh`) is passed as `--reasoning-effort`. The `auto`
|
|
1001
|
+
model honors an explicit effort request only when native model discovery
|
|
1002
|
+
resolves to an effort-capable model; discovery failure does not invent
|
|
1003
|
+
capability, and `auto` still omits `-m`.
|
|
1004
|
+
|
|
1005
|
+
---
|
|
1006
|
+
|
|
1007
|
+
### Kiro CLI
|
|
1008
|
+
|
|
1009
|
+
**Status**: Experimental native provider adapter
|
|
1010
|
+
|
|
1011
|
+
#### Installation
|
|
1012
|
+
|
|
1013
|
+
Install Kiro CLI with Kiro's official installer:
|
|
1014
|
+
|
|
1015
|
+
```bash
|
|
1016
|
+
curl -fsSL https://cli.kiro.dev/install | bash
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
Because this runs a remote installer, Build will not execute it unless you explicitly opt in:
|
|
1020
|
+
|
|
1021
|
+
```bash
|
|
1022
|
+
BUILD_ALLOW_CURL_BASH=1 build provider setup --providers kiro
|
|
1023
|
+
```
|
|
1024
|
+
|
|
1025
|
+
Then verify the CLI is on `PATH`:
|
|
1026
|
+
|
|
1027
|
+
```bash
|
|
1028
|
+
kiro-cli --version
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
#### Authentication
|
|
1032
|
+
|
|
1033
|
+
Kiro headless automation requires an API key:
|
|
1034
|
+
|
|
1035
|
+
```bash
|
|
1036
|
+
export KIRO_API_KEY=your-key
|
|
1037
|
+
kiro-cli whoami --format json
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
Interactive login is available with `kiro-cli login`, but automation should use `KIRO_API_KEY` so `kiro-cli chat --no-interactive` can run without browser prompts.
|
|
1041
|
+
|
|
1042
|
+
#### Health and passive readiness
|
|
1043
|
+
|
|
1044
|
+
`build doctor --provider kiro` checks that `kiro-cli` is installed and reports passive auth readiness from `KIRO_API_KEY`. Kiro's native auth probe uses `kiro-cli whoami --format json` for active provider auth checks without attempting browser login.
|
|
1045
|
+
|
|
1046
|
+
#### Configuration
|
|
1047
|
+
|
|
1048
|
+
Build invokes Kiro in headless mode with:
|
|
1049
|
+
|
|
1050
|
+
```bash
|
|
1051
|
+
printf '%s' "<prompt>" | kiro-cli chat --no-interactive --trust-all-tools
|
|
1052
|
+
```
|
|
1053
|
+
|
|
1054
|
+
The prompt is delivered on stdin. Passing it positionally makes Kiro interpret
|
|
1055
|
+
the text as a file path.
|
|
1056
|
+
|
|
1057
|
+
Kiro models come from the static list configured in
|
|
1058
|
+
`.build-project/config/providers.yaml`; Build does not query the Kiro CLI for a model
|
|
1059
|
+
list. Kiro is experimental: default readiness and interactive setup omit it.
|
|
1060
|
+
Select it explicitly with `build provider setup --providers kiro`, show
|
|
1061
|
+
experimental readiness with `build provider list --include-experimental`, or
|
|
1062
|
+
include it in interactive setup with
|
|
1063
|
+
`build provider setup --include-experimental`.
|
|
1064
|
+
|
|
1065
|
+
| Variable | Purpose | Default |
|
|
1066
|
+
| ------------------------- | ------------------------------------ | ---------- |
|
|
1067
|
+
| `KIRO_API_KEY` | Kiro API key for headless automation | (none) |
|
|
1068
|
+
| `BUILD_KIRO_CLI_COMMAND` | Override Kiro CLI binary path | `kiro-cli` |
|
|
1069
|
+
| `BUILD_SKIP_KIRO` | Skip Kiro execution | unset |
|
|
1070
|
+
|
|
1071
|
+
#### Usage Patterns
|
|
1072
|
+
|
|
1073
|
+
```bash
|
|
1074
|
+
build run "Review this change for correctness" --provider=kiro
|
|
1075
|
+
build run competition "Add focused tests" --variant kiro:local
|
|
1076
|
+
```
|
|
1077
|
+
|
|
1078
|
+
**Important**: Kiro support should be validated end-to-end in an authenticated environment before using it for critical work. Current support is based on Kiro's documented headless command surface plus unit-level Build coverage.
|
|
1079
|
+
|
|
1080
|
+
---
|
|
1081
|
+
|
|
1082
|
+
### Google Antigravity CLI
|
|
1083
|
+
|
|
1084
|
+
**Status**: Supported validated native CLI provider using Google's official `agy` CLI.
|
|
1085
|
+
|
|
1086
|
+
#### Installation
|
|
1087
|
+
|
|
1088
|
+
Install Antigravity CLI with Google's official installer:
|
|
1089
|
+
|
|
1090
|
+
```bash
|
|
1091
|
+
curl -fsSL https://antigravity.google/cli/install.sh | bash
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
Because this runs a remote installer, Build will not execute it unless you explicitly opt in:
|
|
1095
|
+
|
|
1096
|
+
```bash
|
|
1097
|
+
BUILD_ALLOW_CURL_BASH=1 build provider setup --providers antigravity
|
|
1098
|
+
```
|
|
1099
|
+
|
|
1100
|
+
Then verify the CLI is on `PATH`:
|
|
1101
|
+
|
|
1102
|
+
```bash
|
|
1103
|
+
agy --version
|
|
1104
|
+
```
|
|
1105
|
+
|
|
1106
|
+
#### Authentication
|
|
1107
|
+
|
|
1108
|
+
Antigravity CLI authenticates with Google OAuth on first run and stores credentials in the OS keyring. On local machines it may open a browser; on SSH/headless machines it should print a browser URL and code.
|
|
1109
|
+
|
|
1110
|
+
```bash
|
|
1111
|
+
agy
|
|
1112
|
+
```
|
|
1113
|
+
|
|
1114
|
+
Some headless environments may also support an API key:
|
|
1115
|
+
|
|
1116
|
+
```bash
|
|
1117
|
+
export ANTIGRAVITY_API_KEY=your-key
|
|
1118
|
+
```
|
|
1119
|
+
|
|
1120
|
+
`build doctor --provider antigravity` checks that `agy` is installed and reports passive auth readiness from `ANTIGRAVITY_API_KEY` when present. Native headless readiness currently requires `ANTIGRAVITY_API_KEY`; browser/OAuth state is CLI-owned and is not treated as a reliable non-interactive health signal.
|
|
1121
|
+
|
|
1122
|
+
#### Configuration
|
|
1123
|
+
|
|
1124
|
+
Build invokes Google's Antigravity CLI in print mode with:
|
|
1125
|
+
|
|
1126
|
+
```bash
|
|
1127
|
+
agy --print-timeout 45m0s \
|
|
1128
|
+
--output-format stream-json \
|
|
1129
|
+
[--model <model-id>] \
|
|
1130
|
+
--add-dir <working-dir> \
|
|
1131
|
+
--log-file <run-log> \
|
|
1132
|
+
--dangerously-skip-permissions \
|
|
1133
|
+
--print "<prompt>"
|
|
1134
|
+
```
|
|
1135
|
+
|
|
1136
|
+
`--print` is value-bearing: it consumes the next argv token as the prompt. Every
|
|
1137
|
+
other flag must precede it, with the prompt immediately after. Ordering
|
|
1138
|
+
`--print` before another flag makes `agy` treat that flag as the prompt text and
|
|
1139
|
+
answer a question about it instead of running the task -- it still exits 0, so
|
|
1140
|
+
the mistake reads as a successful run. `buildAntigravityArgv`
|
|
1141
|
+
(`src/core/providers/antigravity/execution/commands.ts`) enforces this ordering.
|
|
1142
|
+
|
|
1143
|
+
The prompt starts with a one-line provider context note. Under `inheritance.automated` (or
|
|
1144
|
+
`inheritance.ask`) set to `build` or `native+build`, Build's instruction set takes its place; see
|
|
1145
|
+
Inheritance modes in the repository's `docs/INSTRUCTION_ARCHITECTURE.md`.
|
|
1146
|
+
|
|
1147
|
+
This provider is `supported_validated` as the better-supported alternative to the
|
|
1148
|
+
experimental `gemini` provider. Validated 2026-08-27 against an authenticated `agy` 1.1.22: structured
|
|
1149
|
+
stream output reports the resolved model, input/output/thinking/cache-read tokens,
|
|
1150
|
+
duration, status, and conversation id. Single-file
|
|
1151
|
+
and multi-file edits land through the Build worktree path, a failing task exits
|
|
1152
|
+
non-zero with no changes, and a judged competition produced a correct diff.
|
|
1153
|
+
|
|
1154
|
+
`build provider list` reports Antigravity auth as `unknown` rather than `yes`.
|
|
1155
|
+
That is expected: `agy` exposes no non-interactive auth-status probe, so the
|
|
1156
|
+
absence of a signal does not prove you are unauthenticated. Execution defers auth
|
|
1157
|
+
to the CLI and surfaces any real auth error at runtime. Google's official docs
|
|
1158
|
+
still emphasize the interactive TUI, so re-check the headless `--print` path after
|
|
1159
|
+
an `agy` upgrade. Build does not route Antigravity through OpenCode. Concrete
|
|
1160
|
+
model ids are passed through `agy --model`; unpinned runs retain the CLI default
|
|
1161
|
+
and record the model when the stream reports one, otherwise `cli-default`.
|
|
1162
|
+
|
|
1163
|
+
| Variable | Purpose | Default |
|
|
1164
|
+
| -------------------------------- | ------------------------------------------------------------------------------------------ | ------- |
|
|
1165
|
+
| `ANTIGRAVITY_API_KEY` | Optional Antigravity API key for headless environments when supported by the installed CLI | (none) |
|
|
1166
|
+
| `BUILD_ANTIGRAVITY_CLI_COMMAND` | Override Antigravity CLI binary path | `agy` |
|
|
1167
|
+
| `BUILD_SKIP_ANTIGRAVITY` | Skip Antigravity execution | unset |
|
|
1168
|
+
|
|
1169
|
+
#### Usage Patterns
|
|
1170
|
+
|
|
1171
|
+
```bash
|
|
1172
|
+
build run "Review this change for correctness" --provider=antigravity
|
|
1173
|
+
build run competition "Add focused tests" --variant antigravity:local
|
|
1174
|
+
```
|
|
1175
|
+
|
|
1176
|
+
Aliases accepted by Build include `agy`, `anti-gravity`, and `antigravity-cli`.
|
|
1177
|
+
|
|
1178
|
+
---
|
|
1179
|
+
|
|
1180
|
+
### Upstream Models via OpenCode
|
|
1181
|
+
|
|
1182
|
+
**Status**: Available through the OpenCode provider, not as standalone Build execution providers.
|
|
1183
|
+
|
|
1184
|
+
Configure the upstream provider in OpenCode, then use the exact model ID reported by `opencode models`:
|
|
1185
|
+
|
|
1186
|
+
```bash
|
|
1187
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
1188
|
+
opencode auth login
|
|
1189
|
+
opencode models
|
|
1190
|
+
|
|
1191
|
+
build run "Analyze this code" --engine=opencode --model=<provider/model>
|
|
1192
|
+
build run competition "Implement feature" --variant opencode:<provider/model>
|
|
1193
|
+
```
|
|
1194
|
+
|
|
1195
|
+
Build passes the model selection to OpenCode. Provider endpoints, credentials, and model declarations belong in OpenCode configuration rather than Build configuration.
|
|
1196
|
+
|
|
1197
|
+
---
|
|
1198
|
+
|
|
1199
|
+
### OpenRouter (Pricing Source Only)
|
|
1200
|
+
|
|
1201
|
+
**Status**: Not available as an execution provider
|
|
1202
|
+
|
|
1203
|
+
**Note**: OpenRouter is used internally by Build as a pricing data source for model cost calculations. It is not available for task execution. Use a native execution provider (Claude, Cursor, Codex, Gemini, Copilot, Grok, or OpenCode) instead.
|
|
1204
|
+
|
|
1205
|
+
---
|
|
1206
|
+
|
|
1207
|
+
### OpenCode
|
|
1208
|
+
|
|
1209
|
+
**Status**: Supported (experimental)
|
|
1210
|
+
|
|
1211
|
+
**Overview**: OpenCode is an AI assistant by Anomaly that provides code generation and assistance capabilities.
|
|
1212
|
+
|
|
1213
|
+
#### Installation
|
|
1214
|
+
|
|
1215
|
+
```bash
|
|
1216
|
+
# Quick setup
|
|
1217
|
+
BUILD_ALLOW_CURL_BASH=1 build provider setup --providers opencode
|
|
1218
|
+
|
|
1219
|
+
# Or install manually on Linux/macOS/WSL
|
|
1220
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
1221
|
+
|
|
1222
|
+
# npm and Homebrew are also supported
|
|
1223
|
+
npm install -g opencode-ai
|
|
1224
|
+
brew install anomalyco/tap/opencode
|
|
1225
|
+
```
|
|
1226
|
+
|
|
1227
|
+
#### Authentication
|
|
1228
|
+
|
|
1229
|
+
OpenCode manages its provider configuration and credentials. Interactive setups can use:
|
|
1230
|
+
|
|
1231
|
+
```bash
|
|
1232
|
+
opencode auth login
|
|
1233
|
+
```
|
|
1234
|
+
|
|
1235
|
+
For headless setups, use the configuration and environment-variable mechanisms documented by OpenCode. Build does not interpret an upstream provider's credentials or treat their presence as proof that execution will authenticate.
|
|
1236
|
+
|
|
1237
|
+
#### Discovery (CLI-first)
|
|
1238
|
+
|
|
1239
|
+
Build obtains provider and model discovery observations from the OpenCode CLI; it does not parse credential files:
|
|
1240
|
+
|
|
1241
|
+
- **Credential-store entries**: `opencode auth list` — reports what OpenCode has recorded, not whether a future execution will authenticate.
|
|
1242
|
+
- **Model inventory**: `opencode models` — advisory model IDs for `opencode run --model <id>`. OpenCode 1.x also takes `opencode models <provider>` and `--refresh`; OpenCode 2 takes neither, so Build filters the full list by `provider/` prefix. A missing or empty inventory does not replace an execution attempt.
|
|
1243
|
+
|
|
1244
|
+
- **Health/diagnostics**: `build doctor --provider opencode` reports:
|
|
1245
|
+
- Whether the OpenCode CLI is installed
|
|
1246
|
+
- Credential-store entries reported by `opencode auth list`
|
|
1247
|
+
- Advisory models reported by `opencode models`
|
|
1248
|
+
- Optional metadata enrichment from models.dev (best-effort, cached 24h)
|
|
1249
|
+
|
|
1250
|
+
- **Offline behavior**: If the network is unavailable, Build still succeeds; models.dev enrichment is skipped and cached data is reused when present.
|
|
1251
|
+
- **Refresh**: On OpenCode 1.x, use `opencode models --refresh` only when explicitly requested; Build does not auto-refresh on every run.
|
|
1252
|
+
|
|
1253
|
+
Optional enrichment: Build may fetch the [models.dev](https://models.dev) catalog (pricing, context, capabilities) with a 24h TTL cache. Models.dev is metadata only and is never treated as authoritative for what you can run locally. Enrichment is best-effort and does not block startup or fail the command when offline.
|
|
1254
|
+
|
|
1255
|
+
**Health check:**
|
|
1256
|
+
|
|
1257
|
+
```bash
|
|
1258
|
+
build doctor --provider opencode
|
|
1259
|
+
```
|
|
1260
|
+
|
|
1261
|
+
Shows: CLI installed, entries from `opencode auth list`, and advisory models from `opencode models`. Authentication is established by a requested execution, not this diagnostic. No secrets are printed in logs or telemetry.
|
|
1262
|
+
|
|
1263
|
+
#### Plugins
|
|
1264
|
+
|
|
1265
|
+
OpenCode supports plugins for extended functionality. Plugins are optional for basic provider use.
|
|
1266
|
+
|
|
1267
|
+
Build does not use OpenCode plugins as the Antigravity integration path. Use the standalone Google Antigravity CLI provider (`--provider antigravity`) for Antigravity work.
|
|
1268
|
+
|
|
1269
|
+
#### Test OpenCode Provider
|
|
1270
|
+
|
|
1271
|
+
```bash
|
|
1272
|
+
# Test with default model
|
|
1273
|
+
build run "Create a hello world test" --variant opencode
|
|
1274
|
+
|
|
1275
|
+
# Test in competition
|
|
1276
|
+
build run competition "Implement feature" \
|
|
1277
|
+
--variant opencode \
|
|
1278
|
+
--variant claude
|
|
1279
|
+
```
|
|
1280
|
+
|
|
1281
|
+
#### Headless invocation posture
|
|
1282
|
+
|
|
1283
|
+
Headless OpenCode runs use `opencode run` with prompt-file delivery when the CLI supports `--file`. The invocation shape is `--file <prompt.md> -- "Read the attached prompt file and complete the task exactly as specified."`; older CLIs without `--file` fall back to a positional prompt.
|
|
1284
|
+
|
|
1285
|
+
On OpenCode 2, `run`, `models` and `auth list` get `--standalone`, so each call uses a private server instead of OpenCode's shared background service, which runs tools outside Build's sandbox. `run` also gets `--auto`, because OpenCode 2 ignores `OPENCODE_PERMISSION`, and reasoning effort goes as `--model <provider/model>#<variant>`. When `opencode --version` reports 2.x and a command's help cannot be read, Build still passes `--standalone`, and `--auto` for `run`; when `run --help` lists no `--standalone`, the run is refused before launch.
|
|
1286
|
+
|
|
1287
|
+
Known failure modes to preserve in tests and diagnostics:
|
|
1288
|
+
|
|
1289
|
+
- Positional prompt transport can be misread by OpenCode as file/path-like task text; prefer prompt-file delivery.
|
|
1290
|
+
- Headless runs can remain process-active while making no output or file progress; keep OpenCode idle defaults stricter than the hard timeout.
|
|
1291
|
+
- OpenCode may emit little or no useful stdout on timeout; preserve redacted argv plus stdout/stderr tails on provider results.
|
|
1292
|
+
- OpenCode config, data, state, and cache homes must stay isolated per run unless explicitly overridden.
|
|
1293
|
+
- The per-run config folder is seeded from the user's `opencode.json`, `opencode.jsonc` and `config.json`; the per-run data folder gets `auth.json` only, which OpenCode 1 reads. OpenCode 2 keeps credentials in its database (`opencode.db`), and a new database does not import `auth.json` (observed on 2.1.4). Sign-ins stored in the user's database, including OpenCode Console OAuth, therefore do not reach an OpenCode 2 run; it gets credentials from environment variables and the seeded configuration. For OpenCode Console and Go models, set `OPENCODE_API_KEY` to a Console API key with Go access.
|
|
1294
|
+
|
|
1295
|
+
#### Configuration
|
|
1296
|
+
|
|
1297
|
+
OpenCode reads project configuration from `opencode.json` or `opencode.jsonc`. Keep the schema declaration so editors and OpenCode validate against the upstream contract, and use OpenCode's `{env:VARIABLE_NAME}` substitution instead of committing credential values. OpenCode substitutes an unset variable with an empty string, so the resulting execution—not the placeholder's presence—establishes whether configuration is usable:
|
|
1298
|
+
|
|
1299
|
+
```json
|
|
1300
|
+
{
|
|
1301
|
+
"$schema": "https://opencode.ai/config.json",
|
|
1302
|
+
"model": "{env:OPENCODE_MODEL}"
|
|
1303
|
+
}
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
Provider declarations, endpoints, model IDs, and credential variable names are upstream-specific; follow [OpenCode's configuration documentation](https://opencode.ai/docs/config/) for those fields.
|
|
1307
|
+
|
|
1308
|
+
Build scopes the environment passed to provider children. When an OpenCode configuration references an otherwise unrecognized variable, add its name to the parent process's comma-separated allowlist, for example `BUILD_CHILD_ENV_ALLOWLIST=PROVIDER_API_KEY`. This only permits the variable to reach OpenCode. It does not configure the provider, validate the value, prove authentication, or make inventory output authoritative. Never put the credential value itself in `BUILD_CHILD_ENV_ALLOWLIST`.
|
|
1309
|
+
|
|
1310
|
+
#### CLI binary
|
|
1311
|
+
|
|
1312
|
+
Build runs the first `opencode` on `PATH`. To run a specific binary, set `BUILD_OPENCODE_CLI_COMMAND`, or set it for every project in your user registry overlay, `~/.build/config/providers.yaml`:
|
|
1313
|
+
|
|
1314
|
+
```yaml
|
|
1315
|
+
providers:
|
|
1316
|
+
opencode:
|
|
1317
|
+
cli:
|
|
1318
|
+
command: /opt/homebrew/bin/opencode
|
|
1319
|
+
```
|
|
1320
|
+
|
|
1321
|
+
Point Build at the real OpenCode binary when the `opencode` on `PATH` is a wrapper or launcher. Build runs OpenCode inside its sandbox, which allows writes only to the run's workspace, temporary folders, caches, and Build's runtime state, so a launcher that first writes elsewhere (its own log file, for example) exits before OpenCode starts. The run then fails with reason `sandbox_path_denied` and names the refused path. Readiness and `build doctor` do not run the CLI inside the sandbox, so they can report OpenCode ready in this case.
|
|
1322
|
+
|
|
1323
|
+
---
|
|
1324
|
+
|
|
1325
|
+
### Pi CLI
|
|
1326
|
+
|
|
1327
|
+
**Status**: Supported validated native provider adapter. Validated 2026-07-26 against `pi` 0.82.1 with a cloud Anthropic backend, exercised through `build run` and `build run competition` with incremental streaming. The local OpenAI-compatible (self-hosted) path is **not yet validated**.
|
|
1328
|
+
|
|
1329
|
+
Pi is unlike Build's other providers: it is a backend-agnostic **host**, not a vendor. One Pi install can front cloud APIs (Anthropic, OpenAI, Google, and ~30 others) or a local OpenAI-compatible endpoint such as Ollama. Cost, speed, and reasoning quality are therefore properties of whichever backend you configure, not of `pi` itself — which is why Build's capability ratings for Pi are deliberately conservative.
|
|
1330
|
+
|
|
1331
|
+
#### Installation
|
|
1332
|
+
|
|
1333
|
+
```bash
|
|
1334
|
+
npm install -g @earendil-works/pi-coding-agent
|
|
1335
|
+
pi --version
|
|
1336
|
+
```
|
|
1337
|
+
|
|
1338
|
+
#### Authentication
|
|
1339
|
+
|
|
1340
|
+
Pi owns its own credential store at `~/.pi/agent/auth.json` (written `0600`). Configure a backend either through Pi or through a backend environment variable:
|
|
1341
|
+
|
|
1342
|
+
```bash
|
|
1343
|
+
# Option A: a backend env var Build will pass through
|
|
1344
|
+
export ANTHROPIC_API_KEY=your-key
|
|
1345
|
+
|
|
1346
|
+
# Option B: a local OpenAI-compatible endpoint (no real credential needed)
|
|
1347
|
+
# declare it in ~/.pi/agent/models.json; Pi still wants a placeholder
|
|
1348
|
+
# apiKey value, e.g. "ollama"
|
|
1349
|
+
```
|
|
1350
|
+
|
|
1351
|
+
Build passes through `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, and `GOOGLE_API_KEY`. An operator-named key such as `MY_COMPANY_API_KEY` is **not** carried into the child environment in v1.
|
|
1352
|
+
|
|
1353
|
+
#### Health and passive readiness
|
|
1354
|
+
|
|
1355
|
+
`build doctor --provider pi` checks that `pi` is installed and reports passive auth readiness. Readiness reports `unknown` rather than `no` when no backend env var is set, because an absent env var does not prove you are unauthenticated: Pi may hold a stored credential, or your backend may be a local endpoint that needs none. `unknown` keeps Pi attempt-eligible; a real auth failure surfaces from the CLI at execution time.
|
|
1356
|
+
|
|
1357
|
+
#### Configuration
|
|
1358
|
+
|
|
1359
|
+
Build invokes Pi non-interactively with:
|
|
1360
|
+
|
|
1361
|
+
```bash
|
|
1362
|
+
pi --print --mode json --no-approve --no-session [--model <backend/model>] [--thinking <level>] [--tools <names>] "<prompt>"
|
|
1363
|
+
```
|
|
1364
|
+
|
|
1365
|
+
Three details are load-bearing:
|
|
1366
|
+
|
|
1367
|
+
- **`--provider` is never emitted.** Pi's `--provider` names its *inner* inference backend (its default is `google`), not the Build provider. Build passes a qualified `backend/model` id through `--model` instead, so Pi resolves the backend from the id and your configuration is never overridden. Bare model ids resolve against Pi's own default backend, so prefer qualified ids.
|
|
1368
|
+
- **`--no-approve`, never `--approve`.** Pi's `--approve` grants *project trust*, which loads project-local extensions — that is, executable code from the repository being worked on. Unattended runs must not opt in.
|
|
1369
|
+
- **Global Pi resources still load.** `--no-approve` does not disable user-level extensions or settings. The generated macOS profile keeps `extensions/`, `npm/`, `git/`, `settings.json`, `trust.json` and `models.json` readable but write-protected beneath the active agent directory, including `PI_CODING_AGENT_DIR`. Directory removal and rename are denied for that root and its ancestors; first-run directory creation, runtime data and sibling locks remain writable.
|
|
1370
|
+
- **Prepare global packages outside confined runs.** Install or update configured packages before starting Build; a missing or mismatched npm/git package cannot be installed into the protected store during startup. Settings/model maintenance and legacy settings migrations also belong outside the generated sandbox.
|
|
1371
|
+
- **Auth and helpers remain writable.** `auth.json` supports initialization and OAuth refresh, and `bin/` supports Pi's downloaded helpers. Auth values can contain executable credential commands, and helper binaries run through Pi's PATH. Those are residual persistence surfaces: the selected authority denies do not close them. A later direct Pi launch uses that later process's privileges.
|
|
1372
|
+
- **Tool names must be Pi's own.** The built-ins are `read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`. Pi silently *filters* unrecognized `--tools` names rather than erroring, so a Claude-style name like `read_file` would yield an agent with zero tools that still reports success. Build drops unknown names and warns instead of passing them on. Critically, omitting `--tools` is **not** the same as granting nothing: Pi falls back to `read,bash,edit,write`. So when a caller requests an allowlist and none of the names survive filtering, Build emits `--no-tools` to fail closed rather than silently widening the request into write and shell access. A read-only run is restricted to `read,grep,find,ls` (`bash` is excluded because it can write via shell redirection).
|
|
1373
|
+
|
|
1374
|
+
`--thinking` accepts `off|minimal|low|medium|high|xhigh|max`, a superset of Build's five effort levels, so every level maps natively and exactly. Whether the configured backend honors it is a backend property.
|
|
1375
|
+
|
|
1376
|
+
Pi is a supported provider: default readiness and interactive setup include it, and no `--include-experimental` opt-in is needed. Passive auth readiness reports `unknown` rather than `no`, because Pi keeps credentials in its own `~/.pi/agent/auth.json` and a local endpoint may need no credential at all — so an absent env var does not prove you are unauthenticated. Backend auth failures surface at execution time and are classified for retry.
|
|
1377
|
+
|
|
1378
|
+
| Variable | Purpose | Default |
|
|
1379
|
+
| ----------------------- | --------------------------------------------- | ------- |
|
|
1380
|
+
| `ANTHROPIC_API_KEY` | Backend credential (when using Anthropic) | (none) |
|
|
1381
|
+
| `OPENAI_API_KEY` | Backend credential (when using OpenAI) | (none) |
|
|
1382
|
+
| `BUILD_PI_CLI_COMMAND` | Override Pi CLI binary path | `pi` |
|
|
1383
|
+
| `BUILD_SKIP_PI` | Skip Pi execution | unset |
|
|
1384
|
+
|
|
1385
|
+
#### Usage Patterns
|
|
1386
|
+
|
|
1387
|
+
```bash
|
|
1388
|
+
build run "Add a focused test for the parser" --provider pi
|
|
1389
|
+
build run "Fix the failing case" --provider pi --model anthropic/claude-haiku-4-5
|
|
1390
|
+
```
|
|
1391
|
+
|
|
1392
|
+
#### Known behavior
|
|
1393
|
+
|
|
1394
|
+
- **Exit codes are not a success signal in JSON mode.** Pi maps a failed turn to a non-zero exit only under `--mode text`; under `--mode json` it exits `0` even on an auth failure or an unresolvable model. Build derives success from the event stream (`stopReason`, `errorMessage`, and whether any text or file change was produced), so a failed run is reported as a failure rather than as an empty success.
|
|
1395
|
+
- **Pi blocks on an open stdin pipe.** Even in `--print` mode with the prompt in argv, Pi waits for stdin EOF before emitting anything: an open pipe produces zero bytes and never exits, while the identical spawn with stdin closed completes in about a second. Build spawns Pi with stdin ignored. This is also what makes an interactive `pi ... > file` appear to write nothing.
|
|
1396
|
+
- **Session resume is unsupported.** `--session <id>` calls an interactive "Fork this session?" confirmation even in non-interactive mode, which deadlocks on stdin. Build passes `--no-session`.
|
|
1397
|
+
- **Usage is snapshotted per model call, not per event.** Within one call Pi repeats the same running total on every event, so summing all events would multiply the totals. But a tool-using turn makes several billed calls (a verified two-call run reported 1482/143 then 1705/136), so taking only the last snapshot would undercount. Build accrues at each assistant `message_end` and skips the duplicate `turn_end`.
|
|
1398
|
+
|
|
1399
|
+
---
|
|
1400
|
+
|
|
1401
|
+
## Authentication Semantics
|
|
1402
|
+
|
|
1403
|
+
Build has four distinct authentication contexts. Understanding which applies prevents confusion between "setup readiness" and "runtime guarantees."
|
|
1404
|
+
|
|
1405
|
+
### 1. Setup and Readiness Checks
|
|
1406
|
+
|
|
1407
|
+
`build provider list` reports provider installation and authentication status as a **one-time advisory check**. It does not gate execution. Output shows `OK` (installed + authenticated), `Warning:` (installed, not authenticated), or `Error` (not installed).
|
|
1408
|
+
|
|
1409
|
+
### 2. Routing and Selection Heuristics
|
|
1410
|
+
|
|
1411
|
+
When selecting providers, routing (`routing-planner.ts`) and auto-orchestration (`auto-orchestrator.ts`) call `isAuthenticated()` as a heuristic. If auth is not pre-verified, the provider is still eligible — the routing rationale notes "auth not pre-verified; runtime will defer to the provider CLI."
|
|
1412
|
+
|
|
1413
|
+
### 3. Explicit Preflight (Flywheel and Dry-Run)
|
|
1414
|
+
|
|
1415
|
+
Flywheel preflight (`flywheel-preflight.ts`) runs a dedicated `checkProviderAuth()` for workflow stages. Dry-run validation (`dry-run-validator.ts`) checks auth but explicitly labels it as advisory: "Authentication is advisory here; runtime will defer to the CLI."
|
|
1416
|
+
|
|
1417
|
+
### 4. Runtime Execution
|
|
1418
|
+
|
|
1419
|
+
Provider execution **defers authentication to the underlying provider CLI**. Provider modules do not check authentication before running. Auth errors surface at execution time from the provider CLI with actionable guidance. This is intentional — it avoids hanging auth probes in headless/subprocess environments.
|
|
1420
|
+
|
|
1421
|
+
**Judge preflight** follows the same pattern: `checkJudgeCliAvailability()` resolves the
|
|
1422
|
+
selected judge provider and verifies that provider's CLI installation only, deliberately
|
|
1423
|
+
skipping auth status checks. Auth errors from the judge provider surface at execution time.
|
|
1424
|
+
|
|
1425
|
+
---
|
|
1426
|
+
|
|
1427
|
+
## Dependency Matrix
|
|
1428
|
+
|
|
1429
|
+
Quick reference for what you need to install:
|
|
1430
|
+
|
|
1431
|
+
| Provider | Primary CLI | Secondary CLI | Status |
|
|
1432
|
+
| ------------------- | ----------------------- | ------------- | -------------------------------------------- |
|
|
1433
|
+
| **Claude** | `claude` (Anthropic) | - | Primary validated |
|
|
1434
|
+
| **Codex** | `codex` (OpenAI) | - | Primary validated |
|
|
1435
|
+
| **Grok** | `grok` (xAI) | - | Supported validated |
|
|
1436
|
+
| **Cursor** | `cursor-agent` (Cursor) | - | Supported validated |
|
|
1437
|
+
| **OpenCode** | `opencode` (Anomaly) | - | Supported validated |
|
|
1438
|
+
| **Gemini** | `gemini` (Google) | - | Experimental (no longer extended) |
|
|
1439
|
+
| **Copilot** | `copilot` | - | Experimental |
|
|
1440
|
+
| **Kiro** | `kiro-cli` | - | Experimental headless CLI provider |
|
|
1441
|
+
| **Pi** | `pi` | - | Supported validated; backend-agnostic host CLI |
|
|
1442
|
+
| **Antigravity** | `agy` (Google) | - | Supported validated Google Antigravity CLI provider |
|
|
1443
|
+
| **GLM/Z.AI models** | `opencode` (Anomaly) | - | Available through OpenCode model selection |
|
|
1444
|
+
|
|
1445
|
+
**Note**: GLM/Z.AI models use OpenCode CLI with built-in Z.ai authentication. Select them with `--engine=opencode --model=<glm model id>`.
|
|
1446
|
+
|
|
1447
|
+
---
|
|
1448
|
+
|
|
1449
|
+
## Environment Variables Reference
|
|
1450
|
+
|
|
1451
|
+
| Variable | Purpose | Default |
|
|
1452
|
+
| -------------------------------- | ------------------------------------------------------------------------------------------ | ----------------------------------- |
|
|
1453
|
+
| `BUILD_MOCK_PROVIDERS` | Request mock mode (1=on, 0=off); outside tests also requires `BUILD_ALLOW_MOCK_PROVIDERS=1` or startup scrubs it | `0` |
|
|
1454
|
+
| `BUILD_ALLOW_MOCK_PROVIDERS` | Explicit opt-in for mock mode outside test runners (`1` required with `BUILD_MOCK_PROVIDERS=1`) | `0` |
|
|
1455
|
+
| `CLAUDE_CONFIG_DIR` | Claude config directory | `~/.build/config/providers/claude` |
|
|
1456
|
+
| `BUILD_CLAUDE_BACKEND` | Claude backend selector (`anthropic`\|`bedrock`\|`vertex`) | `anthropic` |
|
|
1457
|
+
| `BUILD_BEDROCK_REGION_PREFIX` | Bedrock inference profile prefix (`global`\|`us`\|`eu`\|`jp`\|`apac`) | `global` |
|
|
1458
|
+
| `CODEX_HOME` | Codex config directory | `~/.codex` |
|
|
1459
|
+
| `BUILD_CODEX_AUTH_MODE` | `api_key` passes API keys to Codex CLI; otherwise OAuth (default) | OAuth |
|
|
1460
|
+
| `BUILD_CODEX_BACKEND` | Codex backend attestation (`openai` or `bedrock`); unset follows the Codex config. `bedrock` selects Bedrock routing when the config names no recognized provider (`amazon-bedrock` or `amazon-bedrock-runtime`), asserts `amazon-bedrock` in that case, and marks readiness as a Bedrock run. AWS environment credentials are forwarded to Codex regardless. | (auto) |
|
|
1461
|
+
| `BUILD_TIMEOUT_CODEX_MS` | Codex subprocess timeout in milliseconds | `2700000` |
|
|
1462
|
+
| `OPENAI_API_KEY` | Forwarded under `BUILD_CODEX_AUTH_MODE=api_key` and counts as ready, but `codex exec` does not read it | (none) |
|
|
1463
|
+
| `CODEX_API_KEY` | API key `codex exec` reads when `BUILD_CODEX_AUTH_MODE=api_key` | (none) |
|
|
1464
|
+
| `CODEX_TOKEN` | Legacy token; counts as ready under `api_key`, but `codex exec` does not read it | (none) |
|
|
1465
|
+
| `BUILD_CODEX_ISOLATE_HOME` | Isolate Codex session/history per worktree (`0` disables) | `1` |
|
|
1466
|
+
| `CURSOR_CONFIG_DIR` | Cursor config directory. When set, Build checks only this directory for a login, so run `cursor-agent login` with it set | (unset; `~/.cursor` when logged in there, else `~/.build/config/providers/cursor`; with `XDG_CONFIG_HOME` set, set it to `$XDG_CONFIG_HOME/cursor`) |
|
|
1467
|
+
| `CURSOR_API_KEY` | Authenticates the local Cursor CLI without a login session (headless hosts); also used for model discovery | (none) |
|
|
1468
|
+
| `BUILD_CURSOR_CLOUD_TRANSPORT` | Historical Cursor cloud transport selector (`api` or `github_pr`); not a product path | (none) |
|
|
1469
|
+
| `CURSOR_CLOUD_TRANSPORT` | Historical alternative for Cursor cloud transport selection | (none) |
|
|
1470
|
+
| `GEMINI_CONFIG_DIR` | Gemini config directory | `~/.build/gemini` |
|
|
1471
|
+
| `ANTHROPIC_API_KEY` | Optional legacy Claude API key (CLI login recommended; Build defaults to CLI auth) | (none) |
|
|
1472
|
+
| `GOOGLE_API_KEY` | Gemini API key (personal account) | (none) |
|
|
1473
|
+
| `GEMINI_API_KEY` | Alternative Gemini API key | (none) |
|
|
1474
|
+
| `OPENAI_API_KEY` | OpenAI API key (used by some providers/agents) | (none) |
|
|
1475
|
+
| `OPENROUTER_API_KEY` | OpenRouter API key (pricing + optional provider key) | (none) |
|
|
1476
|
+
| `BUILD_SKIP_OPENCODE` | Skip OpenCode execution (dry-run mode, 1=on) | `0` |
|
|
1477
|
+
| `BUILD_OPENCODE_CLI_COMMAND` | Path to OpenCode CLI binary | `opencode` |
|
|
1478
|
+
| `GOOGLE_CLOUD_PROJECT` | GCP project ID (Vertex AI) | (none) |
|
|
1479
|
+
| `GCLOUD_PROJECT` | Alternate GCP project ID (Vertex AI) | (none) |
|
|
1480
|
+
| `CLOUD_ML_REGION` | Vertex AI region for Claude Code | (none) |
|
|
1481
|
+
| `GOOGLE_APPLICATION_CREDENTIALS` | Service account key path (Vertex AI) | (none) |
|
|
1482
|
+
| `BUILD_CURSOR_CLI_COMMAND` | Path to Cursor Agent binary (preferred). Legacy `CURSOR_CLI_COMMAND` is still honored. | `cursor-agent` |
|
|
1483
|
+
| `CURSOR_CLI_TIMEOUT` | Cursor run timeout in milliseconds, clamped to 2-120 minutes; outranks `BUILD_TIMEOUT_MS`, while `BUILD_TIMEOUT_CURSOR_MS` outranks it | `(unset; registry fallback 2700000)` |
|
|
1484
|
+
| `BUILD_CURSOR_MODEL` | Default Cursor model for local CLI | `auto` |
|
|
1485
|
+
| `BUILD_DEFAULT_PROVIDER` | Global default provider without flags | (none) |
|
|
1486
|
+
| `BUILD_COPILOT_CLI_COMMAND` | Path to GitHub Copilot CLI binary | `copilot` |
|
|
1487
|
+
| `BUILD_COPILOT_WORKFLOW` | Default Copilot workflow (`suggest`, `chat`, `explain`) | `suggest` |
|
|
1488
|
+
| `BUILD_TIMEOUT_COPILOT_MS` | Copilot provider timeout override in milliseconds | `(unset; registry fallback 2700000)` |
|
|
1489
|
+
| `COPILOT_TELEMETRY_OPTOUT` | Disable GitHub Copilot telemetry (1=on) | `0` |
|
|
1490
|
+
| `KIRO_API_KEY` | Kiro API key for headless automation | (none) |
|
|
1491
|
+
| `BUILD_KIRO_CLI_COMMAND` | Path to Kiro CLI binary | `kiro-cli` |
|
|
1492
|
+
| `BUILD_SKIP_KIRO` | Skip Kiro execution | unset |
|
|
1493
|
+
| `BUILD_PI_CLI_COMMAND` | Path to Pi CLI binary | `pi` |
|
|
1494
|
+
| `BUILD_SKIP_PI` | Skip Pi execution | unset |
|
|
1495
|
+
| `ANTIGRAVITY_API_KEY` | Optional Antigravity API key for headless environments when supported by the installed CLI | (none) |
|
|
1496
|
+
| `BUILD_ANTIGRAVITY_CLI_COMMAND` | Path to Google Antigravity CLI binary | `agy` |
|
|
1497
|
+
| `BUILD_SKIP_ANTIGRAVITY` | Skip Antigravity execution | unset |
|
|
1498
|
+
| `BUILD_DEBUG` | Enable debug logging for all providers | `0` |
|
|
1499
|
+
| `BUILD_VERBOSE` | Enable verbose output for all providers | `0` |
|
|
1500
|
+
| `BUILD_PLAIN_LOGS` | Disable ANSI colors in logs | `0` |
|
|
1501
|
+
|
|
1502
|
+
---
|
|
1503
|
+
|
|
1504
|
+
## Troubleshooting
|
|
1505
|
+
|
|
1506
|
+
### Claude Issues
|
|
1507
|
+
|
|
1508
|
+
**Problem**: `'claude' is not available on this system`
|
|
1509
|
+
|
|
1510
|
+
**Solution**:
|
|
1511
|
+
|
|
1512
|
+
```bash
|
|
1513
|
+
# Verify Claude CLI is installed
|
|
1514
|
+
which claude
|
|
1515
|
+
|
|
1516
|
+
# If not found, install it
|
|
1517
|
+
npm install -g @anthropic-ai/claude-code
|
|
1518
|
+
|
|
1519
|
+
# Add to PATH if needed
|
|
1520
|
+
export PATH="$PATH:$(npm config get prefix)/bin"
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
**Problem**: `Authentication failed`
|
|
1524
|
+
|
|
1525
|
+
**Solution**:
|
|
1526
|
+
|
|
1527
|
+
```bash
|
|
1528
|
+
# Re-authenticate
|
|
1529
|
+
claude auth logout
|
|
1530
|
+
claude auth login
|
|
1531
|
+
```
|
|
1532
|
+
|
|
1533
|
+
**Problem**: `Rate limit exceeded`
|
|
1534
|
+
|
|
1535
|
+
**Solution**: Wait 60 seconds or upgrade your Anthropic plan for higher limits.
|
|
1536
|
+
|
|
1537
|
+
---
|
|
1538
|
+
|
|
1539
|
+
### Codex Issues
|
|
1540
|
+
|
|
1541
|
+
**Problem**: `Command not found: codex`
|
|
1542
|
+
|
|
1543
|
+
**Solution**:
|
|
1544
|
+
|
|
1545
|
+
```bash
|
|
1546
|
+
# Install Codex CLI
|
|
1547
|
+
npm install -g @openai/codex
|
|
1548
|
+
|
|
1549
|
+
# Verify installation
|
|
1550
|
+
codex --version
|
|
1551
|
+
```
|
|
1552
|
+
|
|
1553
|
+
**Problem**: `Authentication required`
|
|
1554
|
+
|
|
1555
|
+
**Solution**:
|
|
1556
|
+
|
|
1557
|
+
```bash
|
|
1558
|
+
# Re-authenticate
|
|
1559
|
+
codex login
|
|
1560
|
+
```
|
|
1561
|
+
|
|
1562
|
+
---
|
|
1563
|
+
|
|
1564
|
+
### Cursor Issues
|
|
1565
|
+
|
|
1566
|
+
**Problem**: `ConnectError: [invalid_argument]`
|
|
1567
|
+
|
|
1568
|
+
**Solution**: This often occurs in plan mode. Disable plan mode or try a different model (`--model auto` falls back to your Cursor preference).
|
|
1569
|
+
|
|
1570
|
+
**Problem**: `Command not found: cursor-agent`
|
|
1571
|
+
|
|
1572
|
+
**Solution**: Install Cursor Agent (see [Cursor (CLI)](#cursor-cli) → Installation), then verify with `cursor-agent --version`.
|
|
1573
|
+
|
|
1574
|
+
**Problem**: `Not authenticated`
|
|
1575
|
+
|
|
1576
|
+
**Solution**: Build reuses your Cursor login. Authenticate with `cursor-agent login` (see [Cursor (CLI)](#cursor-cli) → Authentication).
|
|
1577
|
+
|
|
1578
|
+
**Problem**: `Command timed out after 30000ms`
|
|
1579
|
+
|
|
1580
|
+
**Solution**: Increase timeout in config or environment:
|
|
1581
|
+
|
|
1582
|
+
```bash
|
|
1583
|
+
export CURSOR_CLI_TIMEOUT=3600000 # 60 minutes; clamped to 2-120 minutes
|
|
1584
|
+
```
|
|
1585
|
+
|
|
1586
|
+
**Problem**: `Invalid model: xyz`
|
|
1587
|
+
|
|
1588
|
+
**Solution**: Use supported models (`auto`, `gpt-4o`, `gpt-4o-mini`, etc.) or set `BUILD_CURSOR_MODEL` to a known value.
|
|
1589
|
+
|
|
1590
|
+
---
|
|
1591
|
+
|
|
1592
|
+
### Gemini Issues
|
|
1593
|
+
|
|
1594
|
+
**Problem**: `'gemini' is not available on this system`
|
|
1595
|
+
|
|
1596
|
+
**Solution**:
|
|
1597
|
+
|
|
1598
|
+
```bash
|
|
1599
|
+
# Verify Gemini CLI is installed
|
|
1600
|
+
which gemini
|
|
1601
|
+
|
|
1602
|
+
# If not found, install it
|
|
1603
|
+
npm install -g @google/gemini-cli
|
|
1604
|
+
|
|
1605
|
+
# Add to PATH if needed
|
|
1606
|
+
export PATH="$PATH:$(npm config get prefix)/bin"
|
|
1607
|
+
```
|
|
1608
|
+
|
|
1609
|
+
**Problem**: `Authentication failed` or `API key not found`
|
|
1610
|
+
|
|
1611
|
+
**Solution**: Set up proper authentication:
|
|
1612
|
+
|
|
1613
|
+
```bash
|
|
1614
|
+
# For personal Google account
|
|
1615
|
+
export GOOGLE_API_KEY='your-api-key-here'
|
|
1616
|
+
|
|
1617
|
+
# For Vertex AI enterprise
|
|
1618
|
+
gcloud auth application-default login
|
|
1619
|
+
export GOOGLE_CLOUD_PROJECT='your-project-id'
|
|
1620
|
+
export GOOGLE_CLOUD_LOCATION='us-central1'
|
|
1621
|
+
```
|
|
1622
|
+
|
|
1623
|
+
**Problem**: `Permission denied` or `Insufficient permissions`
|
|
1624
|
+
|
|
1625
|
+
**Solution**: Ensure proper permissions:
|
|
1626
|
+
|
|
1627
|
+
```bash
|
|
1628
|
+
# For Vertex AI, check service account has AI Platform User role
|
|
1629
|
+
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
|
|
1630
|
+
--member="serviceAccount:your-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
|
|
1631
|
+
--role="roles/aiplatform.user"
|
|
1632
|
+
```
|
|
1633
|
+
|
|
1634
|
+
**Problem**: `Rate limit exceeded`
|
|
1635
|
+
|
|
1636
|
+
**Solution**: Wait or upgrade quotas. Personal accounts have different limits than enterprise Vertex AI accounts.
|
|
1637
|
+
|
|
1638
|
+
---
|
|
1639
|
+
|
|
1640
|
+
### OpenCode Model Issues
|
|
1641
|
+
|
|
1642
|
+
**Problem**: `Command not found: opencode`
|
|
1643
|
+
|
|
1644
|
+
**Solution**:
|
|
1645
|
+
|
|
1646
|
+
```bash
|
|
1647
|
+
# Install OpenCode CLI
|
|
1648
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
1649
|
+
# or:
|
|
1650
|
+
npm install -g opencode-ai
|
|
1651
|
+
|
|
1652
|
+
# Verify installation
|
|
1653
|
+
opencode --version
|
|
1654
|
+
```
|
|
1655
|
+
|
|
1656
|
+
**Problem**: An OpenCode execution reports an authentication failure
|
|
1657
|
+
|
|
1658
|
+
**Solution**: Repair the affected upstream provider through OpenCode, then retry the execution:
|
|
1659
|
+
|
|
1660
|
+
```bash
|
|
1661
|
+
opencode auth login
|
|
1662
|
+
```
|
|
1663
|
+
|
|
1664
|
+
For a headless provider configured through environment substitution, confirm the referenced variable reaches OpenCode. If Build would otherwise filter that variable, name it in `BUILD_CHILD_ENV_ALLOWLIST`; this propagation setting does not validate the credential.
|
|
1665
|
+
|
|
1666
|
+
**Problem**: A model-family name passed as `--engine` is rejected
|
|
1667
|
+
|
|
1668
|
+
**Solution**: Use OpenCode as the execution provider and pass an exact model ID from `opencode models`:
|
|
1669
|
+
|
|
1670
|
+
```bash
|
|
1671
|
+
build run "Analyze this code" --engine=opencode --model=<provider/model>
|
|
1672
|
+
```
|
|
1673
|
+
|
|
1674
|
+
---
|
|
1675
|
+
|
|
1676
|
+
## Provider Comparison
|
|
1677
|
+
|
|
1678
|
+
Setup effort and context window only. Build does not rank providers on output
|
|
1679
|
+
quality, speed, price, or support tier: per-model prices live in the sourced
|
|
1680
|
+
pricing catalog, and the rest would be an unsourced claim about someone else's
|
|
1681
|
+
product.
|
|
1682
|
+
|
|
1683
|
+
| Feature | Claude | Codex | Cursor | Gemini | Copilot | OpenCode |
|
|
1684
|
+
| ---------------------- | ------------------- | -------------------- | ---------------- | --------------- | ------------------------- | --------------------- |
|
|
1685
|
+
| **Context Window** | 200K+ tokens | 128K+ tokens | Provider-routed | 1M tokens | Provider-routed | Upstream-dependent |
|
|
1686
|
+
| **Setup Complexity** | Medium | High | High | Low | Low | Medium |
|
|
1687
|
+
| **Dependencies** | Single CLI | Single CLI | Single CLI | Single CLI | Single CLI | Single CLI |
|
|
1688
|
+
|
|
1689
|
+
**Notes**:
|
|
1690
|
+
|
|
1691
|
+
- GLM/Z.AI models are selected through OpenCode, for example `--engine=opencode --model=z-ai/glm-4.7`.
|
|
1692
|
+
|
|
1693
|
+
---
|
|
1694
|
+
|
|
1695
|
+
## Next Steps
|
|
1696
|
+
|
|
1697
|
+
Once providers are set up:
|
|
1698
|
+
|
|
1699
|
+
1. **Test Execution**:
|
|
1700
|
+
|
|
1701
|
+
```bash
|
|
1702
|
+
build run "Create a hello world test" --engine=claude
|
|
1703
|
+
```
|
|
1704
|
+
|
|
1705
|
+
2. **Run Variant Competition**:
|
|
1706
|
+
|
|
1707
|
+
```bash
|
|
1708
|
+
build run "Implement feature X" --variants=3
|
|
1709
|
+
```
|
|
1710
|
+
|
|
1711
|
+
3. **View Telemetry**:
|
|
1712
|
+
|
|
1713
|
+
```bash
|
|
1714
|
+
build telemetry leaderboard
|
|
1715
|
+
build telemetry trends
|
|
1716
|
+
```
|
|
1717
|
+
|
|
1718
|
+
4. **Review Results**:
|
|
1719
|
+
- Check the resolved telemetry directory for SQLite databases (`db/variants.db`, `invocations.db`) and monthly JSONL under `logs/<YYYY-MM>/`. Default: `~/.build/data/telemetry/`. `build doctor --verbose` prints the resolved path. Per-run state is under `~/.build/data/projects/<project-id>/telemetry/state/`.
|
|
1720
|
+
|
|
1721
|
+
---
|
|
1722
|
+
|
|
1723
|
+
## Support
|
|
1724
|
+
|
|
1725
|
+
- **Documentation**: `docs/CLI_REFERENCE.md`, `docs/TROUBLESHOOTING.md`, [ARCHITECTURE.md](https://github.com/ebrindley/build/blob/main/ARCHITECTURE.md)
|
|
1726
|
+
- **Issues**: https://github.com/ebrindley/build/issues
|
|
1727
|
+
|
|
1728
|
+
---
|
|
1729
|
+
|
|
1730
|
+
**Last Updated**: 2026-07-25
|
|
1731
|
+
|
|
1732
|
+
**Major Changes:**
|
|
1733
|
+
|
|
1734
|
+
- Documented local-only execution for all providers (ADR-021)
|
|
1735
|
+
- Cursor/Codex cloud setup reframed as historical compatibility only
|
|
1736
|
+
- Legacy provider API transport selections are rejected with migration guidance; historical API configuration remains readable but does not enable execution
|
|
1737
|
+
- Ordinary PR publication and judge-winner semantics unchanged
|