@seanhogg/builderforce-agents 2026.10.9 → 2026.10.11
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/dist/{acp-cli-DcKpPsJa.js → acp-cli-C23mmrQt.js} +1 -1
- package/dist/{acp-cli-BxH-eUDl.js → acp-cli-D6F-D5JB.js} +1 -1
- package/dist/{agent-cXF-aL0g.js → agent-B-2r1Lr_.js} +1 -1
- package/dist/{agent-wJmvciTM.js → agent-BI9qSnSp.js} +1 -1
- package/dist/{agentbot-cli-Cub3Abbt.js → agentbot-cli-Cyrhr5jX.js} +1 -1
- package/dist/{agentbot-cli-CTRvEfBp.js → agentbot-cli-sC55m-XS.js} +1 -1
- package/dist/{agents-Cr7WO73I.js → agents-CMThT_Bj.js} +1 -1
- package/dist/agents-Chz9nfm2.js +1 -0
- package/dist/{api-key-rotation-CHBjUwUJ.js → api-key-rotation-CyCi-UqR.js} +1 -1
- package/dist/{audio-preflight-CWFuqbao.js → audio-preflight-B411b2-y.js} +1 -1
- package/dist/{audio-preflight-F2e3Y4CW.js → audio-preflight-Cs4eUjQk.js} +1 -1
- package/dist/{audit-DGnEhZYe.js → audit-B-USV03V.js} +1 -1
- package/dist/{audit-DBjjjW93.js → audit-SKNPS-K2.js} +1 -1
- package/dist/auth-choice-CChsMy-F.js +1 -0
- package/dist/{auth-choice-9gZuOvPS.js → auth-choice-CCib_yVL.js} +1 -1
- package/dist/auth-choice-DSnpkrMc.js +1 -0
- package/dist/{auth-choice-BoZFVmEa.js → auth-choice-DzBqqq7i.js} +1 -1
- package/dist/auth-choice.apply-6f3Jb_lS.js +1 -0
- package/dist/{auth-choice.apply-CcatXiNo.js → auth-choice.apply-BgOXoS8X.js} +1 -1
- package/dist/{auth-choice.apply-BHLQeym9.js → auth-choice.apply-DBuvopiF.js} +1 -1
- package/dist/auth-choice.apply-DeXnLwVS.js +1 -0
- package/dist/auth-choice.apply.transformers-CZDuBaOr.js +1 -0
- package/dist/{auth-choice.apply.transformers-CIn3fs7K.js → auth-choice.apply.transformers-Df9l_jRz.js} +2 -2
- package/dist/{auth-choice.apply.transformers-1plI0MUg.js → auth-choice.apply.transformers-DmdxpHGz.js} +2 -2
- package/dist/{auth-choice.apply.transformers-D5OrjEHo.js → auth-choice.apply.transformers-dn7l6XyJ.js} +1 -1
- package/dist/{auth-json-D1ite-pW.js → auth-json-BB-VBn5E.js} +1 -1
- package/dist/{auth-json-CN3MWw57.js → auth-json-BVyos95N.js} +1 -1
- package/dist/{auth-json-HGu227VM.js → auth-json-CoOe4tEg.js} +1 -1
- package/dist/{auth-json-DZ7E50Y1.js → auth-json-wrKixZxh.js} +1 -1
- package/dist/{auth-profiles-C1VbcUOm.js → auth-profiles-pt7Tr4HA.js} +1 -1
- package/dist/{auth-token-CyVfNEQb.js → auth-token-BE67qxLw.js} +1 -1
- package/dist/{auth-token-CoQ5ePPl.js → auth-token-BPHeoBAW.js} +1 -1
- package/dist/{banner-DY-L7_eI.js → banner-ErBINvbk.js} +1 -1
- package/dist/{browser-cli-D2O94twn.js → browser-cli-BZc64-Xx.js} +1 -1
- package/dist/{browser-cli-CoRx_4iM.js → browser-cli-CoxVKdon.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/{builderforce-BmrsVdFw.js → builderforce-B9187Tm9.js} +4 -4
- package/dist/{builderforce-Bwyw0GJ6.js → builderforce-BLqHwgeu.js} +4 -4
- package/dist/builderforce-api-DKgXl8BH.js +1 -0
- package/dist/builderforce-api-DcPAGsla.js +1 -0
- package/dist/builderforce-onboarding-CaPJZSvw.js +24 -0
- package/dist/builderforce-onboarding-RXFb0gct.js +24 -0
- package/dist/{builderforcellm-syscheck-CprBhARf.js → builderforcellm-syscheck-9ksvqHYX.js} +1 -1
- package/dist/{builderforcellm-syscheck-DrFJ638L.js → builderforcellm-syscheck-F5JMAr3p.js} +1 -1
- package/dist/{call-DxPWzV-k.js → call-BnAs_SER.js} +1 -1
- package/dist/{call-DFjBq0H2.js → call-D1Opj5ev.js} +1 -1
- package/dist/{call-DmAU4cRX.js → call-Du2LiaX6.js} +1 -1
- package/dist/{call-BbRf8gFM.js → call-T8ciwMTA.js} +1 -1
- package/dist/{channel-options-d4EwVQD0.js → channel-options-B7sRMp2v.js} +1 -1
- package/dist/{channel-options-CDixz6dT.js → channel-options-rhDBCtlp.js} +1 -1
- package/dist/{channel-web-DJa8JC9W.js → channel-web-CcCqUQrJ.js} +1 -1
- package/dist/{channels-cli-BgKy0MbE.js → channels-cli-BjnLW14T.js} +1 -1
- package/dist/{channels-cli-nNW0ezPM.js → channels-cli-DVWUBsmc.js} +1 -1
- package/dist/{chrome-BnEbJV3D.js → chrome-CFmcixaE.js} +1 -1
- package/dist/{chrome-a3X9_-nf.js → chrome-DXt86tmV.js} +1 -1
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-DkWt7p2x.js → cli-BUqtALJK.js} +1 -1
- package/dist/{cli-C5MbcECQ.js → cli-K4reS6IS.js} +1 -1
- package/dist/{coding-tools.policy-NEPm7Mz1.js → coding-tools.policy-D9Ba8eDh.js} +1 -1
- package/dist/{coding-tools.policy-6qh9acJy.js → coding-tools.policy-ZhOdlcEI.js} +1 -1
- package/dist/{command-registry-COUcUWby.js → command-registry-B7uAoROP.js} +1 -1
- package/dist/{command-registry-4_K-lfW5.js → command-registry-CW16Mk2Y.js} +1 -1
- package/dist/{completion-cli-DlvHqL86.js → completion-cli-ZvXrCQqk.js} +1 -1
- package/dist/{completion-cli-B2qcVd6q.js → completion-cli-gyvx5ZXu.js} +1 -1
- package/dist/{completion-cli-DpFvU4Qn.js → completion-cli-n8UsdT91.js} +1 -1
- package/dist/{completion-cli-SdcQ-kQj.js → completion-cli-sKReGv3d.js} +1 -1
- package/dist/{config-_1Ca6jGb.js → config-BgV_FYSq.js} +1 -1
- package/dist/{config-toczWD3q.js → config-BpChMIJ6.js} +1 -1
- package/dist/{config-BTWlKwtB.js → config-D01EgOky.js} +1 -1
- package/dist/{config-27_FNba3.js → config-Dsnbi-a3.js} +1 -1
- package/dist/{config-cli-DeiQz5sY.js → config-cli-Bpo74mE5.js} +1 -1
- package/dist/{config-cli-CfczShaZ.js → config-cli-CF31O_5s.js} +1 -1
- package/dist/{config-guard-CD-Wq8kk.js → config-guard-BRUOk5YL.js} +1 -1
- package/dist/{config-guard-ClVl2FvD.js → config-guard-BUpQiSTW.js} +1 -1
- package/dist/{config-guard-B4in8l8I.js → config-guard-USCN-dq0.js} +1 -1
- package/dist/{config-validation-jpeXzoU3.js → config-validation-BGpSeNbh.js} +1 -1
- package/dist/{config-validation-C6u-z9bJ.js → config-validation-CdBJ-tZq.js} +1 -1
- package/dist/{configure-3W9C5LiT.js → configure-CWr61Ph2.js} +1 -1
- package/dist/configure-DhazB2qh.js +1 -0
- package/dist/{configure-BtXQW7ue.js → configure-DlcO1tWx.js} +1 -1
- package/dist/configure-MXheujvX.js +1 -0
- package/dist/{control-service-CJuuqNOE.js → control-service-2PkCt256.js} +1 -1
- package/dist/{control-service-qKfWP7VD.js → control-service-CcsbseZS.js} +1 -1
- package/dist/{control-service-izGyCWQs.js → control-service-qK1oboMo.js} +1 -1
- package/dist/{control-service-BbsswoMy.js → control-service-y3GYvIBg.js} +1 -1
- package/dist/{cron-cli-BrOM4s6N.js → cron-cli-BYu_lA8i.js} +1 -1
- package/dist/{cron-cli-CwtTX6pg.js → cron-cli-D_Og20iB.js} +1 -1
- package/dist/{daemon-cli-DyVsMf8p.js → daemon-cli-BNzthScZ.js} +1 -1
- package/dist/{daemon-cli-DlwOVDbt.js → daemon-cli-Bh3p0hui.js} +1 -1
- package/dist/{daemon-cli-Br0wu9xQ.js → daemon-cli-DxxKiKVN.js} +1 -1
- package/dist/{daemon-cli-DmicpZED.js → daemon-cli-emNxLkIw.js} +1 -1
- package/dist/{daemon-runtime-CtOr1ncS.js → daemon-runtime-9XitJmIL.js} +1 -1
- package/dist/{daemon-runtime-B4UjqdyJ.js → daemon-runtime-Dx800VUt.js} +1 -1
- package/dist/{deliver-BpLm3ktn.js → deliver--6OBF3LL.js} +1 -1
- package/dist/{deliver-9o_SE4ZK.js → deliver-ADpnRGRf.js} +1 -1
- package/dist/{deliver-D2VAVelb.js → deliver-BM6-damm.js} +1 -1
- package/dist/{deliver-BuZu68tp.js → deliver-CsG0cHbZ.js} +1 -1
- package/dist/{deps-CkJiJ6wc.js → deps-Dg_9rfXK.js} +1 -1
- package/dist/{devices-cli-BfXeDnbx.js → devices-cli-B8DXzcRP.js} +1 -1
- package/dist/{devices-cli-B9G6YOsS.js → devices-cli-BZkdWSx-.js} +1 -1
- package/dist/{directory-cli-BRCaiGOn.js → directory-cli-B78pAVI_.js} +1 -1
- package/dist/{directory-cli-D5ciZ5fY.js → directory-cli-CSaRkkL8.js} +1 -1
- package/dist/{dm-policy-shared-CRZpjRv0.js → dm-policy-shared-B9lW-AsK.js} +1 -1
- package/dist/{dm-policy-shared-Dhw9_6mi.js → dm-policy-shared-DYZ_T-az.js} +1 -1
- package/dist/{dns-cli-CgZ7oMcT.js → dns-cli-CLPGOFA1.js} +1 -1
- package/dist/{dns-cli-C4f4Tyij.js → dns-cli-dr5dHzfI.js} +1 -1
- package/dist/{doctor-completion-BSotFS6p.js → doctor-completion-94zme499.js} +1 -1
- package/dist/{doctor-completion-DVxbs-74.js → doctor-completion-CbF34DIH.js} +1 -1
- package/dist/{embedded-helpers-CEsr3aQ0.js → embedded-helpers-C9jpiwlw.js} +1 -1
- package/dist/{embedded-helpers-DK8_apW0.js → embedded-helpers-DdU30lmt.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-YuOu7mVg.js → exec-approvals-cli-CS_uabo7.js} +1 -1
- package/dist/{exec-approvals-cli-BPFi82B0.js → exec-approvals-cli-ktB7M7WE.js} +1 -1
- package/dist/{gateway-cli-D2Bg1Um6.js → gateway-cli-CKcoLVMA.js} +5 -5
- package/dist/{gateway-cli-DFEo8C0z.js → gateway-cli-CuXBDBWe.js} +5 -5
- package/dist/{gateway-rpc-BXR_lVIx.js → gateway-rpc-B02y0PnE.js} +1 -1
- package/dist/{gateway-rpc-ByUcnQ7W.js → gateway-rpc-ff1RVb0_.js} +1 -1
- package/dist/{gemini-auth-CkD5jCPh.js → gemini-auth-DDR12zst.js} +1 -1
- package/dist/health-D0DZmCmh.js +1 -0
- package/dist/{health-yS3NRKvY.js → health-FO8MG5Ur.js} +1 -1
- package/dist/{health-DVo8a9yg.js → health-zrsgFZmR.js} +1 -1
- package/dist/{hooks-cli-B0lVee-j.js → hooks-cli-5Y4hnSX9.js} +1 -1
- package/dist/{hooks-cli-DsVmrQAG.js → hooks-cli-DpHZzRo2.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/{ink-session-BitZ1wcY.js → ink-session-Dt9Q4iH-.js} +2 -2
- package/dist/{ink-session-CyAqXDla.js → ink-session-N8wCBzwk.js} +2 -2
- package/dist/{installs-CWd54ARy.js → installs-B_t2YXgq.js} +1 -1
- package/dist/{installs-C9A8QFiF.js → installs-DFiF4lGy.js} +1 -1
- package/dist/{io-3R_ZyUxB.js → io-BLBq4T2o.js} +1 -1
- package/dist/{io-DSIGyPrT.js → io-CXN4uLS2.js} +1 -1
- package/dist/{io-6jLoKffb.js → io-Ckd4NlvH.js} +1 -1
- package/dist/{io-CohJffHG.js → io-D9hC2aG0.js} +1 -1
- package/dist/{lifecycle-core-BpMvDXy1.js → lifecycle-core-D9Dg5Qps.js} +1 -1
- package/dist/{lifecycle-core-Dwb4gHjZ.js → lifecycle-core-uxjxTzFv.js} +1 -1
- package/dist/login-B3sDAgHb.js +1 -0
- package/dist/{login-C_ZdMOvv.js → login-CwwuaXtb.js} +1 -1
- package/dist/{login-DtDUyFO3.js → login-D1bVUPlv.js} +1 -1
- package/dist/{login-CEnjUo5c.js → login-GLDax56V.js} +1 -1
- package/dist/{login-qr-B9lyIZVD.js → login-qr-CbiUcBLy.js} +1 -1
- package/dist/{login-qr-BCBsxwhT.js → login-qr-Cp0YqK4e.js} +1 -1
- package/dist/{logs-cli-CdM5W3HE.js → logs-cli-Cy11HfSG.js} +1 -1
- package/dist/{logs-cli-jh5Xn3TD.js → logs-cli-nD36c-Y1.js} +1 -1
- package/dist/{manager-CRba8roB.js → manager-BeohB4-8.js} +1 -1
- package/dist/{manager-B3IJ_IKf.js → manager-CTTXDBt3.js} +1 -1
- package/dist/{manager-TGVy_fAb.js → manager-CoQMlcrf.js} +1 -1
- package/dist/{manager-DwywI_5-.js → manager-DSz61dXv.js} +1 -1
- package/dist/{memory-cli-BlayFTAM.js → memory-cli-BpAiRntI.js} +1 -1
- package/dist/{memory-cli-DRz4wtHk.js → memory-cli-CbkWGjRn.js} +1 -1
- package/dist/{memory-cli-PdyTQ84w.js → memory-cli-CrBMLM2P.js} +1 -1
- package/dist/{memory-cli-ivAs7q7v.js → memory-cli-CveeVOWH.js} +1 -1
- package/dist/{model-catalog-CQOdhMUY.js → model-catalog-B29yeBYS.js} +1 -1
- package/dist/{model-catalog-CiiFJX77.js → model-catalog-BeBXvbFm.js} +1 -1
- package/dist/model-catalog-CMKHKuBL.js +1 -0
- package/dist/{model-catalog-C6UrZ0uG.js → model-catalog-DjNiebr7.js} +1 -1
- package/dist/{model-discovery-C9Xm95uL.js → model-discovery-D0i1JpiL.js} +1 -1
- package/dist/{model-picker-swoSwauV.js → model-picker-CGDNPRPc.js} +1 -1
- package/dist/model-picker-CGEF8yhc.js +1 -0
- package/dist/model-picker-DeUNOC78.js +1 -0
- package/dist/{model-picker-BUePD7Zg.js → model-picker-EIhpfOZa.js} +1 -1
- package/dist/{model-selection-9bRFKBI_.js → model-selection-DG9J_VTz.js} +1 -1
- package/dist/{models-BNivsd2o.js → models-BjIzVQYX.js} +2 -2
- package/dist/{models-DQeSIY6M.js → models-JoqOgEF5.js} +1 -1
- package/dist/{models-cli-KokGgWeP.js → models-cli-B2zbchgs.js} +1 -1
- package/dist/{models-cli-BcNxU4P_.js → models-cli-CkFdc8NN.js} +2 -2
- package/dist/{node-cli-DIMh3X2F.js → node-cli-CXnuxiBq.js} +1 -1
- package/dist/{node-cli-EmTU-Gh0.js → node-cli-oVyjVnb7.js} +1 -1
- package/dist/{nodes-cli-BX8TznFK.js → nodes-cli-BBVotxNt.js} +1 -1
- package/dist/{nodes-cli-DyHovdAc.js → nodes-cli-DVMBSUhK.js} +1 -1
- package/dist/{onboard-DfMVh1bM.js → onboard-BItclJp0.js} +1 -1
- package/dist/{onboard-BVmZ4jMw.js → onboard-CqvHIvKj.js} +1 -1
- package/dist/{onboard-auth.credentials-yagR-VMG.js → onboard-auth.credentials-DneFSdYg.js} +1 -1
- package/dist/{onboard-auth.credentials-BuT-etnE.js → onboard-auth.credentials-DpitLlzw.js} +1 -1
- package/dist/onboard-channels-B91m5S3w.js +1 -0
- package/dist/onboard-channels-BOoPtYbF.js +1 -0
- package/dist/{onboard-channels-B6QDFkkK.js → onboard-channels-Dn0u5C-C.js} +1 -1
- package/dist/{onboard-channels-C8FCFn29.js → onboard-channels-vhtccaIV.js} +1 -1
- package/dist/onboard-custom-BN0uzSq_.js +1 -0
- package/dist/{onboard-custom-D1nd8Hlu.js → onboard-custom-BYIza2e7.js} +1 -1
- package/dist/onboard-custom-CCFthqto.js +1 -0
- package/dist/{onboard-custom-C_BI0ZXn.js → onboard-custom-Ckf0xKXY.js} +1 -1
- package/dist/{onboard-helpers-CGlLpagb.js → onboard-helpers-B8I5AVyb.js} +1 -1
- package/dist/{onboard-helpers-CckrS8_K.js → onboard-helpers-Ce_c4Raj.js} +1 -1
- package/dist/{onboard-helpers-Cf5dNq7-.js → onboard-helpers-CiHzTaFX.js} +1 -1
- package/dist/{onboard-helpers-BvIZ4-R5.js → onboard-helpers-DC-nMl-V.js} +1 -1
- package/dist/{onboard-interactive-DYJttZ2w.js → onboard-interactive-Cl2K3EYn.js} +1 -1
- package/dist/{onboard-interactive-zgjmwJz-.js → onboard-interactive-JNux9zfA.js} +1 -1
- package/dist/{onboard-interactive-B3-KBZbZ.js → onboard-interactive-J_ObFzeW.js} +1 -1
- package/dist/{onboard-interactive-Dc_7URYb.js → onboard-interactive-OUNsvlh0.js} +1 -1
- package/dist/{onboard-remote-D5lR2lVm.js → onboard-remote-0-q7MG9t.js} +1 -1
- package/dist/{onboard-remote-BmSyHww1.js → onboard-remote-CgAAEZpq.js} +1 -1
- package/dist/{onboard-remote-CzzQMZ3X.js → onboard-remote-DKXHDdBD.js} +1 -1
- package/dist/{onboard-remote-DcuX8b2g.js → onboard-remote-cB8j9RG-.js} +1 -1
- package/dist/{onboard-skills-ILHIeg1R.js → onboard-skills-47upVdA2.js} +1 -1
- package/dist/{onboard-skills-BPlNN_-T.js → onboard-skills-9Um4TL2x.js} +1 -1
- package/dist/{onboard-skills-DIhjDMom.js → onboard-skills-DhCmvhJY.js} +1 -1
- package/dist/{onboard-skills-CI1OtWsE.js → onboard-skills-mI2kfvdT.js} +1 -1
- package/dist/{onboarding-D4-HDbmU.js → onboarding-BSENgR9C.js} +5 -5
- package/dist/{onboarding-CP9rrz8y.js → onboarding-CIaZLNc1.js} +5 -5
- package/dist/{onboarding.finalize-C2kZi7F0.js → onboarding.finalize-BwOpvoPE.js} +1 -1
- package/dist/{onboarding.finalize-BfWXPgX7.js → onboarding.finalize-yMK-g7Uy.js} +1 -1
- package/dist/{onboarding.gateway-config-Cd7_bXVs.js → onboarding.gateway-config-Kn1O-QFl.js} +1 -1
- package/dist/{onboarding.gateway-config-Bd8HJkso.js → onboarding.gateway-config-huOjFf8D.js} +1 -1
- package/dist/{openai-model-default-Cp3nf21W.js → openai-model-default-CH2-2Hvk.js} +1 -1
- package/dist/{openai-model-default-BMRrqTmH.js → openai-model-default-pfoEzWYJ.js} +1 -1
- package/dist/{outbound-BRInCJD9.js → outbound-BdeHcMAo.js} +1 -1
- package/dist/{outbound-CAtBpFoD.js → outbound-BylJYD7n.js} +1 -1
- package/dist/{outbound-OI-t5zZ0.js → outbound-CAirtWr1.js} +1 -1
- package/dist/{outbound-CnIvOJlU.js → outbound-VNcvF2MG.js} +1 -1
- package/dist/{outbound-send-deps-m6DqOma_.js → outbound-send-deps-B3Lg-uqF.js} +1 -1
- package/dist/{pairing-cli-CEr0yEsc.js → pairing-cli-5RtPvz2i.js} +1 -1
- package/dist/{pairing-cli-Dxfoni-F.js → pairing-cli-C_Mj6Dy4.js} +1 -1
- package/dist/{pairing-labels-3j_iRYOO.js → pairing-labels-BJPrScRl.js} +1 -1
- package/dist/{pairing-labels-BW5jQZlr.js → pairing-labels-oA-nKTaW.js} +1 -1
- package/dist/{pairing-store-QDb6lhIU.js → pairing-store-YRy7EBgI.js} +1 -1
- package/dist/{pairing-store-CbvMJhD3.js → pairing-store-ti3FEkmr.js} +1 -1
- package/dist/{plugin-auto-enable-BV9K9Vhr.js → plugin-auto-enable-Cupr4wbt.js} +1 -1
- package/dist/{plugin-auto-enable-DDry2fA6.js → plugin-auto-enable-D8gKiE3F.js} +1 -1
- package/dist/plugin-registry-BEfyc2f_.js +1 -0
- package/dist/{plugin-registry-C-_GA65s.js → plugin-registry-BoPaef5I.js} +1 -1
- package/dist/{plugin-registry-SAdxNUwm.js → plugin-registry-CxnuHO_n.js} +1 -1
- package/dist/plugin-registry-D0tIqo8L.js +1 -0
- package/dist/plugin-sdk/{accounts-Cy3WCbWg.js → accounts-BwreSNAR.js} +1 -1
- package/dist/plugin-sdk/{active-listener-DVWVNlT9.js → active-listener-DpQ7aGYd.js} +1 -1
- package/dist/plugin-sdk/agent-runtime/src/infra/workflow-telemetry.d.ts +12 -1
- package/dist/plugin-sdk/{agent-scope-DgKN27hJ.js → agent-scope-BQByW0cD.js} +1 -1
- package/dist/plugin-sdk/{api-key-rotation-ftXf7mBZ.js → api-key-rotation-7YdImWrh.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CfTmmeS-.js → audio-preflight-EbkaATDO.js} +1 -1
- package/dist/plugin-sdk/{auth-json-BrNBg87n.js → auth-json-DK6qod1_.js} +1 -1
- package/dist/plugin-sdk/{bindings-CH-YLOLC.js → bindings-CDEzl4kl.js} +1 -1
- package/dist/plugin-sdk/{channel-web-B6rg0Rbf.js → channel-web-D2KuONp0.js} +1 -1
- package/dist/plugin-sdk/{chrome-CuXP-hes.js → chrome-SOXFIkUM.js} +1 -1
- package/dist/plugin-sdk/{chunk-C94IAOuf.js → chunk-cW0POl22.js} +1 -1
- package/dist/plugin-sdk/{command-format-B3XMq_73.js → command-format-CAX9XFjI.js} +1 -1
- package/dist/plugin-sdk/{common-n0l_XN-S.js → common-BxEWhN2X.js} +1 -1
- package/dist/plugin-sdk/{config-DsXZsCkJ.js → config-v1EU9Ll8.js} +2 -2
- package/dist/plugin-sdk/{fetch-B-GxSYRO.js → fetch-DH0Y8iyO.js} +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/{login-_my8QwPP.js → login-d1zBgykF.js} +1 -1
- package/dist/plugin-sdk/{login-qr-BaePtXuG.js → login-qr-B6exvQnN.js} +1 -1
- package/dist/plugin-sdk/{manager-BsC-4ymy.js → manager-BH_bmGds.js} +1 -1
- package/dist/plugin-sdk/{markdown-tables-BUfhHgfs.js → markdown-tables-Epim9b-0.js} +1 -1
- package/dist/plugin-sdk/{message-channel-CuZ2xOAM.js → message-channel-sBPQc_-T.js} +1 -1
- package/dist/plugin-sdk/{model-catalog-yuiXVcmw.js → model-catalog-cXsza5GU.js} +1 -1
- package/dist/plugin-sdk/{model-selection-BtgvnqB5.js → model-selection-K82MAGlL.js} +1 -1
- package/dist/plugin-sdk/{outbound-D_attiyO.js → outbound-Chn_H1O7.js} +1 -1
- package/dist/plugin-sdk/{plugins-BdkC9v5E.js → plugins-CaUOZBVb.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-A7Rathx6.js → pw-ai-BIiJF7ZD.js} +1 -1
- package/dist/plugin-sdk/{qmd-manager-Dxn0jCpE.js → qmd-manager-BRe5fGZw.js} +1 -1
- package/dist/plugin-sdk/{registry-CZHRcH-q.js → registry-DJq2Cvo9.js} +1 -1
- package/dist/plugin-sdk/{render-CuA_WRX5.js → render-BUCRXPIk.js} +1 -1
- package/dist/plugin-sdk/{replies-DmLfO-pg.js → replies-Cz5OD3qN.js} +1 -1
- package/dist/plugin-sdk/{reply-3-ne-N_7.js → reply-D5Uk7pUv.js} +9 -9
- package/dist/plugin-sdk/{reply-prefix-w7kAvH11.js → reply-prefix-CCymsmsP.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-0sbvl4ZN.js → resolve-route-DN1J7Wyc.js} +1 -1
- package/dist/plugin-sdk/{runner-4UfrAQnx.js → runner-CYkuO7Fh.js} +4 -4
- package/dist/plugin-sdk/{session-BB-yfDWx.js → session-D5jHDo78.js} +1 -1
- package/dist/plugin-sdk/{sqlite-JjFgDV-H.js → sqlite-BlMLqMl8.js} +1 -1
- package/dist/plugin-sdk/{subsystem-D0Ril4rt.js → subsystem-COTa5Ly_.js} +1 -1
- package/dist/plugin-sdk/{tool-images-WRTP95FT.js → tool-images-DSpchb4x.js} +1 -1
- package/dist/plugin-sdk/{tool-loop-detection-sC_rhJfb.js → tool-loop-detection-BP6u-mbh.js} +1 -1
- package/dist/plugin-sdk/web-BbganhKi.js +1 -0
- package/dist/plugin-sdk/{whatsapp-actions-ThxQ5niy.js → whatsapp-actions-CZUqxmP1.js} +1 -1
- package/dist/{plugins-BIG8NDB9.js → plugins-Cx29kkDj.js} +1 -1
- package/dist/{plugins-iAq-Gr8l.js → plugins-DJqou2hi.js} +1 -1
- package/dist/{plugins-cli-CpaVUv_r.js → plugins-cli-Bu-A8aGy.js} +1 -1
- package/dist/{plugins-cli-CPkSgvdL.js → plugins-cli-CGFsQDVW.js} +1 -1
- package/dist/{program-context-BCwL3wlM.js → program-context-ClBa4lUj.js} +1 -1
- package/dist/{program-2w7Ue902.js → program-vVCzU0cH.js} +2 -2
- package/dist/{prompt-select-styled-hB_nLOn1.js → prompt-select-styled-BJPGccTJ.js} +1 -1
- package/dist/{prompt-select-styled-Dd5swW2b.js → prompt-select-styled-BK74z6FF.js} +1 -1
- package/dist/{provider-auth-helpers-BpTnp2Yr.js → provider-auth-helpers-B84m5VMc.js} +1 -1
- package/dist/{provider-auth-helpers-CJTG_tVx.js → provider-auth-helpers-hNwpK_hl.js} +1 -1
- package/dist/{provider-dispatcher-TWwBT2aH.js → provider-dispatcher-BjR5DE3O.js} +1 -1
- package/dist/provider-dispatcher-DgOeVjcL.js +1 -0
- package/dist/{provider-usage-BdrU4cIE.js → provider-usage-B-wPVN_j.js} +1 -1
- package/dist/{provider-usage-Bn4ZrnU7.js → provider-usage-B8lFHp0K.js} +1 -1
- package/dist/{push-apns-C4sJnHbO.js → push-apns-BTPPvY81.js} +1 -1
- package/dist/{push-apns-CiD3rrVv.js → push-apns-CscYUS0D.js} +1 -1
- package/dist/{pw-ai-DSEj1QrV.js → pw-ai-CLS_VZ8p.js} +1 -1
- package/dist/{pw-ai-dNZY-qBs.js → pw-ai-D5og_rIf.js} +1 -1
- package/dist/{qr-cli-qr-SFLZW.js → qr-cli-CAquM1Zk.js} +1 -1
- package/dist/{qr-cli-B45dCV0o.js → qr-cli-GsR8n1cm.js} +1 -1
- package/dist/{qr-cli-CMlAIzrD.js → qr-cli-kAKgaL-T.js} +1 -1
- package/dist/{qr-cli-CySNSEFj.js → qr-cli-uyxNf-cQ.js} +1 -1
- package/dist/{register.agent-BA6LIJSb.js → register.agent-BwTCfyeJ.js} +1 -1
- package/dist/{register.agent-D2uCH8jZ.js → register.agent-Dhdo3_7k.js} +1 -1
- package/dist/register.configure-B0m0G3ot.js +1 -0
- package/dist/register.configure-D3cbjmTz.js +1 -0
- package/dist/{register.maintenance-BELfCO_C.js → register.maintenance-C6ocMld2.js} +1 -1
- package/dist/{register.maintenance-DukWFS_D.js → register.maintenance-CbE2zSyc.js} +1 -1
- package/dist/{register.message-DiZRRAE5.js → register.message-Jn4u533_.js} +1 -1
- package/dist/{register.message-8iGDhO8h.js → register.message-Tu1hlM0m.js} +1 -1
- package/dist/{register.onboard-B9DMNfHE.js → register.onboard-B34211N6.js} +1 -1
- package/dist/{register.onboard-Dt7rzAq-.js → register.onboard-S1d2WAE4.js} +1 -1
- package/dist/{register.setup-CSF-2ImP.js → register.setup-CJPyAwCQ.js} +1 -1
- package/dist/{register.setup-BRRVPrx7.js → register.setup-Sg8f3nsH.js} +1 -1
- package/dist/{register.status-health-sessions-D6wdwPwV.js → register.status-health-sessions-BlgVxoZ4.js} +1 -1
- package/dist/{register.status-health-sessions-ZSufYw5j.js → register.status-health-sessions-DwADQJ74.js} +1 -1
- package/dist/{register.subclis-4eDV9jKH.js → register.subclis-C9V_M-Lk.js} +1 -1
- package/dist/{register.subclis-Cr9DoYcv.js → register.subclis-pWn9XObB.js} +1 -1
- package/dist/{replies-DbkT_5BV.js → replies-BOGMDhSN.js} +1 -1
- package/dist/{replies-CzV-RFUG.js → replies-BXbV02ik.js} +1 -1
- package/dist/{replies-DIBQzxGp.js → replies-CUv671JF.js} +1 -1
- package/dist/{replies-Bd2RPZwQ.js → replies-DokbEfJD.js} +1 -1
- package/dist/{reply-Cd3vVnD7.js → reply-GY1C8tcv.js} +10 -10
- package/dist/{routes-BzfLvF8W.js → routes-DZntyPY6.js} +1 -1
- package/dist/{routes-lclJHOYY.js → routes-_iZdG1Fo.js} +1 -1
- package/dist/{rpc-BLqXRn5R.js → rpc-CbUnwStf.js} +1 -1
- package/dist/{rpc-DcQNGQlj.js → rpc-Cwm4gchc.js} +1 -1
- package/dist/{run-main-DLcDEJgv.js → run-main-DQMbgbcF.js} +1 -1
- package/dist/{runner-DwWmciCt.js → runner-Cu9NJouV.js} +1 -1
- package/dist/{runner-SxCr9kXD.js → runner-eTTUbLAK.js} +1 -1
- package/dist/{sandbox-BZibn6PX.js → sandbox-C4AKi2EX.js} +1 -1
- package/dist/{sandbox-z9t_PRf9.js → sandbox-DvKMuAXL.js} +1 -1
- package/dist/{sandbox-cli-BtGs0dBR.js → sandbox-cli-C0LhzYq_.js} +1 -1
- package/dist/{sandbox-cli-B8FpLgyY.js → sandbox-cli-De0iaoHB.js} +1 -1
- package/dist/{security-cli-D8Q8I7fn.js → security-cli-BvEfiO8m.js} +1 -1
- package/dist/{security-cli-IIMR7Pb4.js → security-cli-BzsQ0XQh.js} +1 -1
- package/dist/{send-DnMzjS7L.js → send-2dRKMWtl.js} +1 -1
- package/dist/{send-DerUBvXW.js → send-Aw8wK3vK.js} +1 -1
- package/dist/{send-BvroeIQ6.js → send-B7H8Ae5j.js} +1 -1
- package/dist/{send-4d9NswaD.js → send-BP5osGBo.js} +1 -1
- package/dist/{send-BU_-BGmf.js → send-BVal50Bi.js} +1 -1
- package/dist/{send-CxG2suVM.js → send-Bbo7TXLx.js} +1 -1
- package/dist/{send-CBBziNqM.js → send-BxoVLIy1.js} +1 -1
- package/dist/{send-dDpSBSBo.js → send-COKUbcqs.js} +1 -1
- package/dist/{send--12DIueA.js → send-CTw3PqN4.js} +1 -1
- package/dist/{send-UFtylOiq.js → send-CYGOPcKq.js} +1 -1
- package/dist/{send-DyF1Xy9K.js → send-ChGpVO3O.js} +1 -1
- package/dist/{send-Q-uTkSFE.js → send-Cqea2UFo.js} +1 -1
- package/dist/{send-j15662lv.js → send-CrFWgJKx.js} +1 -1
- package/dist/{send-gDb60Hk-.js → send-CwK8QBR3.js} +1 -1
- package/dist/{send-CceNWtYE.js → send-DqR7Rxzm.js} +1 -1
- package/dist/{send-CJHXQvVl.js → send-DxwfUIN-.js} +1 -1
- package/dist/{send-ByCVQQVz.js → send-KgN1P41U.js} +1 -1
- package/dist/{send-B1rJLLpr.js → send-bNp87SIq.js} +1 -1
- package/dist/{send-B_1BtyfA.js → send-kkm_zrHQ.js} +1 -1
- package/dist/{send-BJDzwYJN.js → send-l3ge4wkC.js} +1 -1
- package/dist/{server-context-DJZT7Upf.js → server-context-CQ2v4BAx.js} +1 -1
- package/dist/{server-context-owOmmyUM.js → server-context-CttALzrW.js} +1 -1
- package/dist/{server-node-events-54d8Rmjl.js → server-node-events-CIMO6Vae.js} +1 -1
- package/dist/{server-node-events-CSFVqgxX.js → server-node-events-iCF2ngcN.js} +1 -1
- package/dist/{session-BzQdcCqN.js → session-BJHsjD3z.js} +1 -1
- package/dist/{session-4FpEJvkE.js → session-C_b1ttHJ.js} +1 -1
- package/dist/{session-dirs-OxQuIvJW.js → session-dirs-Bvbgw0GC.js} +1 -1
- package/dist/{session-dirs-D_ARkyw0.js → session-dirs-DHaoq7zc.js} +1 -1
- package/dist/{session-utils-GMvum00v.js → session-utils-Dxou8SbO.js} +1 -1
- package/dist/{sessions-Bl1wwotX.js → sessions-BA8Se_bT.js} +1 -1
- package/dist/{sessions-CdanN_ZI.js → sessions-BuZVmOWt.js} +1 -1
- package/dist/{sessions-B5dwRhUC.js → sessions-DvbW0FNJ.js} +1 -1
- package/dist/{sessions-B1t7qeEn.js → sessions-DvqsIg0M.js} +1 -1
- package/dist/{shared-xj-xaKFi.js → shared-BBOiNdjf.js} +1 -1
- package/dist/{shared-BPN3qd7G.js → shared-C2orjbTD.js} +1 -1
- package/dist/{skill-scanner-U3AJgjqc.js → skill-scanner-BEvov9QH.js} +1 -1
- package/dist/{skill-scanner-DEmbPsRh.js → skill-scanner-OTLeRZ_p.js} +1 -1
- package/dist/{skills-cli-CIdnXa3B.js → skills-cli-C1BOgB3y.js} +1 -1
- package/dist/{skills-cli-BXbGr7vl.js → skills-cli-CFT2Aq5R.js} +1 -1
- package/dist/{skills-install-Btw_GHbI.js → skills-install-LlKntDHa.js} +1 -1
- package/dist/{skills-install-DMHQRpIl.js → skills-install-tx5Mahav.js} +1 -1
- package/dist/{status-DXaDS_0w.js → status-Bh8V7kjv.js} +1 -1
- package/dist/{status-BxeKmkVr.js → status-BtBHmhQh.js} +1 -1
- package/dist/{status-BkcmeZg6.js → status-CpwD4y9B.js} +1 -1
- package/dist/status-CqaTmyih.js +1 -0
- package/dist/{status-DouJcFzf.js → status-yXz8PUbL.js} +1 -1
- package/dist/{status.update-C9iy31xr.js → status.update-CdgsLBPg.js} +1 -1
- package/dist/{status.update-KYyRSDZY.js → status.update-hzMro-BT.js} +1 -1
- package/dist/{subagent-registry-Dr20nzwk.js → subagent-registry-CaRUNwCj.js} +1 -1
- package/dist/{subagent-registry-CyGxu3kP.js → subagent-registry-DDEN4oJi.js} +10 -10
- package/dist/{subagent-registry-BiXkIDeh.js → subagent-registry-DYYfeIc3.js} +1 -1
- package/dist/{system-cli-b4YgXPHv.js → system-cli-4aii1JYf.js} +1 -1
- package/dist/{system-cli-C7YzJeP4.js → system-cli-CfkDD3FV.js} +1 -1
- package/dist/{tui-DylWbrDx.js → tui-DnVRxfI8.js} +2 -2
- package/dist/{tui-BwWMByVp.js → tui-JfWoLGIV.js} +2 -2
- package/dist/{tui-cli-C_TTgabr.js → tui-cli-CGjg2Eb5.js} +1 -1
- package/dist/{tui-cli-Bh1V8-w9.js → tui-cli-cd7Efw5u.js} +1 -1
- package/dist/{tui-setup-check-DJZCJokQ.js → tui-setup-check-BEHm9wwo.js} +1 -1
- package/dist/{tui-setup-check-BABAyl-e.js → tui-setup-check-DK8vdhLI.js} +1 -1
- package/dist/{tui-stream-assembler-ign_cPkv.js → tui-stream-assembler-8ud9oyMK.js} +1 -1
- package/dist/{tui-stream-assembler-q9GANTDr.js → tui-stream-assembler-Br15rhRH.js} +1 -1
- package/dist/{update-BUzcmoDf.js → update-B5yKFeGO.js} +1 -1
- package/dist/{update-D6U-V8Au.js → update-DodoQDCk.js} +1 -1
- package/dist/{update-cli-DUrUIrYQ.js → update-cli-CfJJcSUS.js} +1 -1
- package/dist/{update-cli-CA3LuuJ7.js → update-cli-x8Ocbf-0.js} +1 -1
- package/dist/{usage-cli-CfEg1_NZ.js → usage-cli-CN7L1YRG.js} +1 -1
- package/dist/{usage-cli-CpbYMXxS.js → usage-cli-CQmokGkG.js} +1 -1
- package/dist/{web-D-NSyF6b.js → web-BXLk9UT2.js} +1 -1
- package/dist/web-Btgs8oWv.js +1 -0
- package/dist/{webhooks-cli-B_f61rq7.js → webhooks-cli-DIo8p3lk.js} +1 -1
- package/dist/{webhooks-cli-Bi0t3w6P.js → webhooks-cli-DhxEtiFt.js} +1 -1
- package/dist/{whatsapp-actions-JbF2MrTV.js → whatsapp-actions-B7r9AyZN.js} +1 -1
- package/dist/{whatsapp-actions-BkCMhD9X.js → whatsapp-actions-DX2QU6Gs.js} +1 -1
- package/dist/{with-timeout-T07SJo4N.js → with-timeout-B_p5pWDv.js} +1 -1
- package/dist/{with-timeout-Bwq-GyUQ.js → with-timeout-GDLpcjW7.js} +1 -1
- package/dist/workflow-telemetry-BMTg5lPd.js +1 -0
- package/dist/workflow-telemetry-Bg8MVUr_.js +2 -0
- package/dist/workflow-telemetry-Do1UsYwM.js +1 -0
- package/dist/workflow-telemetry-DqBPhVL4.js +2 -0
- package/package.json +1 -1
- package/dist/agents-DsZ5vLKE.js +0 -1
- package/dist/auth-choice-Btd2Rxxd.js +0 -1
- package/dist/auth-choice-CVV9wRFN.js +0 -1
- package/dist/auth-choice.apply-BOK9XRCQ.js +0 -1
- package/dist/auth-choice.apply-Cv-BiV5Q.js +0 -1
- package/dist/auth-choice.apply.transformers-CXywS3GZ.js +0 -1
- package/dist/builderforce-onboarding-Dq6VUSKZ.js +0 -24
- package/dist/builderforce-onboarding-DuUfZ6oL.js +0 -24
- package/dist/configure-CWBBFk3F.js +0 -1
- package/dist/configure-fHVOAucW.js +0 -1
- package/dist/health-GLcAfqDz.js +0 -1
- package/dist/login-CPyEf5h6.js +0 -1
- package/dist/model-catalog-J7R-tJDu.js +0 -1
- package/dist/model-picker-D2bcWrtu.js +0 -1
- package/dist/model-picker-DO1HtEEm.js +0 -1
- package/dist/onboard-channels-CmqKsAoW.js +0 -1
- package/dist/onboard-channels-Db0P4iWl.js +0 -1
- package/dist/onboard-custom-BABqIYa4.js +0 -1
- package/dist/onboard-custom-VpW3UC8u.js +0 -1
- package/dist/plugin-registry-B-UOeWqM.js +0 -1
- package/dist/plugin-registry-BjMr3yXM.js +0 -1
- package/dist/plugin-sdk/web-CThgoHQp.js +0 -1
- package/dist/provider-dispatcher-C4nHaNqn.js +0 -1
- package/dist/register.configure-DAL38e7r.js +0 -1
- package/dist/register.configure-DZG7-WVi.js +0 -1
- package/dist/status-BTYqHVha.js +0 -1
- package/dist/web-P6QsgmSD.js +0 -1
- package/dist/workflow-telemetry-B8Im0mPk.js +0 -1
- package/dist/workflow-telemetry-DLEnm5TI.js +0 -2
- package/dist/workflow-telemetry-Dc_oseV7.js +0 -2
- package/dist/workflow-telemetry-Dkm3mofI.js +0 -1
- /package/dist/{devtools-CI7JyCXv.js → devtools-Cg4F-l9O.js} +0 -0
- /package/dist/{devtools-eMFaIsAT.js → devtools-Dl2DACSO.js} +0 -0
- /package/dist/{github-copilot-token-D3gHtNUu.js → github-copilot-token-BlyiXyTy.js} +0 -0
- /package/dist/{github-copilot-token-DHP2kAiN.js → github-copilot-token-D5sB2AUI.js} +0 -0
- /package/dist/{onboard-hooks-Cenav0eW.js → onboard-hooks-BaOSgxs9.js} +0 -0
- /package/dist/{onboard-hooks-Ce20rwpW.js → onboard-hooks-fO5eeDe_.js} +0 -0
- /package/dist/{qmd-manager-DVd_aWEV.js → qmd-manager-BgplOjHN.js} +0 -0
- /package/dist/{qmd-manager-keHvLmvP.js → qmd-manager-COUi_Fqb.js} +0 -0
|
@@ -55,4 +55,4 @@ Use this EXACT format:
|
|
|
55
55
|
Keep each section concise. Preserve exact file paths, function names, and error messages.`;customInstructions&&(basePrompt=`${basePrompt}\n\nAdditional focus: ${customInstructions}`);let promptText=`<conversation>\n${serializeConversation(defaultConvertToLlm(currentMessages))}\n</conversation>\n\n`;return previousSummary&&(promptText+=`<previous-summary>\n${previousSummary}\n</previous-summary>\n\n`),promptText+=basePrompt,(await nativeComplete({baseUrl:model.baseUrl,apiKey,defaultModel:model.id},{model:model.id,messages:[{role:`system`,content:`You are a context summarization assistant. Your task is to read a conversation between a user and an AI coding assistant, then produce a structured summary following the exact format specified.
|
|
56
56
|
|
|
57
57
|
Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`},{role:`user`,content:promptText}],extra:{max_tokens:maxTokens}},signal)).content}function isPersistable(role){return role===`user`||role===`assistant`||role===`toolResult`}var AgentSession=class{constructor(opts){this._isCompacting=!1,this.sessionManager=opts.sessionManager??SessionManager.create(opts.cwd??process.cwd()),this.settingsManager=opts.settingsManager??SettingsManager.create(opts.cwd);let tools=[...opts.tools??[],...opts.customTools??[]];this.agent=new Agent({model:opts.model,tools,systemPrompt:opts.systemPrompt,thinkingLevel:opts.thinkingLevel,convertToLlm:opts.convertToLlm,transformContext:opts.transformContext,getApiKey:opts.getApiKey,...opts.pickFallbackModel?{pickFallbackModel:opts.pickFallbackModel}:{},...opts.onModelFallback?{onModelFallback:opts.onModelFallback}:{}}),this.agent.sessionId=this.sessionManager.getSessionId(),opts.streamFn&&(this.agent.streamFn=opts.streamFn);let restored=this.sessionManager.buildSessionContext();restored.messages.length>0&&this.agent.replaceMessages(restored.messages),this.unsubscribe=this.agent.subscribe(event=>{event.type===`message_end`&&isPersistable(event.message.role)&&this.sessionManager.appendMessage(event.message)})}get sessionId(){return this.sessionManager.getSessionId()}get messages(){return this.agent.state.messages}get isStreaming(){return this.agent.isStreaming}get isCompacting(){return this._isCompacting}setCompacting(v){this._isCompacting=v}replaceMessages(ms){this.agent.replaceMessages(ms)}subscribe(fn){return this.agent.subscribe(fn)}async prompt(content,opts){let userContent=opts?.images?.length?[{type:`text`,text:content},...opts.images]:content;await this.agent.prompt([{role:`user`,content:userContent,timestamp:Date.now()}])}async steer(text){this.agent.steer({role:`user`,content:text,timestamp:Date.now()})}abort(){this.agent.abort()}abortCompaction(){this._compactionAbort?.abort()}async compact(customInstructions){this.setCompacting(!0),this._compactionAbort=new AbortController;try{let model=this.agent.state.model,apiKey=await this.agent.getApiKey?.(model.provider)??``,branch=this.sessionManager.getBranch();if(branch[branch.length-1]?.type===`compaction`)throw Error(`Already compacted`);let messageEntries=branch.filter(e=>e.type===`message`);if(messageEntries.length<2)throw Error(`Nothing to compact (session too small)`);let keepRecent=this.settingsManager.getCompactionKeepRecentTokens(),reserve=this.settingsManager.getCompactionReserveTokens(),tokensBefore=messageEntries.reduce((s,e)=>s+estimateTokens(e.message),0),acc=0,firstKeptIdx=messageEntries.length-1;for(let i=messageEntries.length-1;i>=0&&(acc+=estimateTokens(messageEntries[i].message),firstKeptIdx=i,!(acc>=keepRecent));i--);firstKeptIdx<=0&&(firstKeptIdx=Math.max(1,Math.floor(messageEntries.length/2)));let firstKeptEntryId=messageEntries[firstKeptIdx].id,summary=await generateSummary(messageEntries.slice(0,firstKeptIdx).map(e=>e.message),model,reserve,apiKey,this._compactionAbort.signal,customInstructions);return this.sessionManager.appendCompaction(summary,firstKeptEntryId,tokensBefore),this.agent.replaceMessages(this.sessionManager.buildSessionContext().messages),{summary,firstKeptEntryId,tokensBefore}}finally{this.setCompacting(!1)}}dispose(){this.unsubscribe()}};async function createAgentSession(options){return{session:new AgentSession(options)}}function toAgentToolResult(result){let content=[{type:`text`,text:JSON.stringify(result.data)}];for(let block of result.content??[])block.type===`text`?content.push({type:`text`,text:block.text}):block.type===`media`&&block.mediaType===`image`&&content.push({type:`image`,data:block.base64??block.uri??block.path??``,mimeType:block.mimeType??`image/png`});return{content,details:result}}function toAgentTool(def,provider,workspaceRoot,exposedName){let name=exposedName??def.name,parameters=def.schema.function.parameters;return{name,label:name,description:def.schema.function.description,parameters,execute:async(_toolCallId,params,signal,onUpdate)=>{let ctx={caps:provider,signal,workspaceRoot,...onUpdate?{onUpdate:partial=>onUpdate(toAgentToolResult(partial))}:{}};return toAgentToolResult(await def.execute(params??{},ctx))}}}function registryToAgentTools(registry,provider,workspaceRoot,aliases){return registry.toolsFor(provider).map(def=>toAgentTool(def,provider,workspaceRoot,aliases?.[def.name]))}const OLLAMA_NATIVE_BASE_URL=`http://127.0.0.1:11434`;function extractTextContent(content){return typeof content==`string`?content:Array.isArray(content)?content.filter(part=>part.type===`text`).map(part=>part.text).join(``):``}function extractOllamaImages(content){return Array.isArray(content)?content.filter(part=>part.type===`image`).map(part=>part.data):[]}function extractToolCalls(content){if(!Array.isArray(content))return[];let parts=content,result=[];for(let part of parts)part.type===`toolCall`?result.push({function:{name:part.name,arguments:part.arguments}}):part.type===`tool_use`&&result.push({function:{name:part.name,arguments:part.input}});return result}function convertToOllamaMessages(messages,system){let result=[];system&&result.push({role:`system`,content:system});for(let msg of messages){let{role}=msg;if(role===`user`){let text=extractTextContent(msg.content),images=extractOllamaImages(msg.content);result.push({role:`user`,content:text,...images.length>0?{images}:{}})}else if(role===`assistant`){let text=extractTextContent(msg.content),toolCalls=extractToolCalls(msg.content);result.push({role:`assistant`,content:text,...toolCalls.length>0?{tool_calls:toolCalls}:{}})}else if(role===`tool`||role===`toolResult`){let text=extractTextContent(msg.content),toolName=typeof msg.toolName==`string`?msg.toolName:void 0;result.push({role:`tool`,content:text,...toolName?{tool_name:toolName}:{}})}}return result}function extractOllamaTools(tools){if(!tools||!Array.isArray(tools))return[];let result=[];for(let tool of tools)typeof tool.name!=`string`||!tool.name||result.push({type:`function`,function:{name:tool.name,description:typeof tool.description==`string`?tool.description:``,parameters:tool.parameters??{}}});return result}function buildAssistantMessage(response,modelInfo){let content=[],text=response.message.content||response.message.reasoning||``;text&&content.push({type:`text`,text});let toolCalls=response.message.tool_calls;if(toolCalls&&toolCalls.length>0)for(let tc of toolCalls)content.push({type:`toolCall`,id:`ollama_call_${randomUUID()}`,name:tc.function.name,arguments:tc.function.arguments});let stopReason=toolCalls&&toolCalls.length>0?`toolUse`:`stop`,usage={input:response.prompt_eval_count??0,output:response.eval_count??0,cacheRead:0,cacheWrite:0,totalTokens:(response.prompt_eval_count??0)+(response.eval_count??0),cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};return{role:`assistant`,content,stopReason,api:modelInfo.api,provider:modelInfo.provider,model:modelInfo.id,usage,timestamp:Date.now()}}async function*parseNdjsonStream(reader){let decoder=new TextDecoder,buffer=``;for(;;){let{done,value}=await reader.read();if(done)break;buffer+=decoder.decode(value,{stream:!0});let lines=buffer.split(`
|
|
58
|
-
`);buffer=lines.pop()??``;for(let line of lines){let trimmed=line.trim();if(trimmed)try{yield JSON.parse(trimmed)}catch{console.warn(`[ollama-stream] Skipping malformed NDJSON line:`,trimmed.slice(0,120))}}}if(buffer.trim())try{yield JSON.parse(buffer.trim())}catch{console.warn(`[ollama-stream] Skipping malformed trailing data:`,buffer.trim().slice(0,120))}}function resolveOllamaChatUrl(baseUrl){return`${normalizeBaseUrl(baseUrl.trim()).replace(/\/v1$/i,``)||OLLAMA_NATIVE_BASE_URL}/api/chat`}function createOllamaStreamFn(baseUrl){let chatUrl=resolveOllamaChatUrl(baseUrl);return(model,context,options)=>{let stream=createAssistantMessageEventStream(),run=async()=>{try{let ollamaMessages=convertToOllamaMessages(context.messages??[],context.systemPrompt),ollamaTools=extractOllamaTools(context.tools),ollamaOptions={num_ctx:model.contextWindow??65536};typeof options?.temperature==`number`&&(ollamaOptions.temperature=options.temperature),typeof options?.maxTokens==`number`&&(ollamaOptions.num_predict=options.maxTokens);let body={model:model.id,messages:ollamaMessages,stream:!0,...ollamaTools.length>0?{tools:ollamaTools}:{},options:ollamaOptions},headers={"Content-Type":`application/json`,...options?.headers};options?.apiKey&&(headers.Authorization=`Bearer ${options.apiKey}`);let response=await fetch(chatUrl,{method:`POST`,headers,body:JSON.stringify(body),signal:options?.signal});if(!response.ok){let errorText=await response.text().catch(()=>`unknown error`);throw Error(`Ollama API error ${response.status}: ${errorText}`)}if(!response.body)throw Error(`Ollama API returned empty response body`);let reader=response.body.getReader(),accumulatedContent=``,accumulatedToolCalls=[],finalResponse;for await(let chunk of parseNdjsonStream(reader))if(chunk.message?.content?accumulatedContent+=chunk.message.content:chunk.message?.reasoning&&(accumulatedContent+=chunk.message.reasoning),chunk.message?.tool_calls&&accumulatedToolCalls.push(...chunk.message.tool_calls),chunk.done){finalResponse=chunk;break}if(!finalResponse)throw Error(`Ollama API stream ended without a final response`);finalResponse.message.content=accumulatedContent,accumulatedToolCalls.length>0&&(finalResponse.message.tool_calls=accumulatedToolCalls);let assistantMessage=buildAssistantMessage(finalResponse,{api:model.api,provider:model.provider,id:model.id}),reason=assistantMessage.stopReason===`toolUse`?`toolUse`:`stop`;stream.push({type:`done`,reason,message:assistantMessage})}catch(err){let errorMessage=err instanceof Error?err.message:String(err);stream.push({type:`error`,reason:`error`,error:{role:`assistant`,content:[],stopReason:`error`,errorMessage,api:model.api,provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},timestamp:Date.now()}})}finally{stream.end()}};return queueMicrotask(()=>void run()),stream}}const SYNTHETIC_BASE_URL=`https://api.synthetic.new/anthropic`,SYNTHETIC_DEFAULT_MODEL_ID=`hf:MiniMaxAI/MiniMax-M2.1`,SYNTHETIC_DEFAULT_MODEL_REF=`synthetic/${SYNTHETIC_DEFAULT_MODEL_ID}`,SYNTHETIC_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},SYNTHETIC_MODEL_CATALOG=[{id:SYNTHETIC_DEFAULT_MODEL_ID,name:`MiniMax M2.1`,reasoning:!1,input:[`text`],contextWindow:192e3,maxTokens:65536},{id:`hf:moonshotai/Kimi-K2-Thinking`,name:`Kimi K2 Thinking`,reasoning:!0,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:zai-org/GLM-4.7`,name:`GLM-4.7`,reasoning:!1,input:[`text`],contextWindow:198e3,maxTokens:128e3},{id:`hf:deepseek-ai/DeepSeek-R1-0528`,name:`DeepSeek R1 0528`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3-0324`,name:`DeepSeek V3 0324`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3.1-Terminus`,name:`DeepSeek V3.1 Terminus`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:159e3,maxTokens:8192},{id:`hf:meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8`,name:`Llama 4 Maverick 17B 128E Instruct FP8`,reasoning:!1,input:[`text`],contextWindow:524e3,maxTokens:8192},{id:`hf:moonshotai/Kimi-K2-Instruct-0905`,name:`Kimi K2 Instruct 0905`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:openai/gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-235B-A22B-Instruct-2507`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen3 VL 235B A22B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:25e4,maxTokens:8192},{id:`hf:zai-org/GLM-4.5`,name:`GLM-4.5`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:128e3},{id:`hf:zai-org/GLM-4.6`,name:`GLM-4.6`,reasoning:!1,input:[`text`],contextWindow:198e3,maxTokens:128e3},{id:`hf:zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`hf:deepseek-ai/DeepSeek-V3`,name:`DeepSeek V3`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen3 235B A22B Thinking 2507`,reasoning:!0,input:[`text`],contextWindow:256e3,maxTokens:8192}];function buildSyntheticModelDefinition(entry){return{id:entry.id,name:entry.name,reasoning:entry.reasoning,input:[...entry.input],cost:SYNTHETIC_DEFAULT_COST,contextWindow:entry.contextWindow,maxTokens:entry.maxTokens}}const TOGETHER_BASE_URL=`https://api.together.xyz/v1`,TOGETHER_MODEL_CATALOG=[{id:`zai-org/GLM-4.7`,name:`GLM 4.7 Fp8`,reasoning:!1,input:[`text`],contextWindow:202752,maxTokens:8192,cost:{input:.45,output:2,cacheRead:.45,cacheWrite:2}},{id:`moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],cost:{input:.5,output:2.8,cacheRead:.5,cacheWrite:2.8},contextWindow:262144,maxTokens:32768},{id:`meta-llama/Llama-3.3-70B-Instruct-Turbo`,name:`Llama 3.3 70B Instruct Turbo`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.88,output:.88,cacheRead:.88,cacheWrite:.88}},{id:`meta-llama/Llama-4-Scout-17B-16E-Instruct`,name:`Llama 4 Scout 17B 16E Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:1e7,maxTokens:32768,cost:{input:.18,output:.59,cacheRead:.18,cacheWrite:.18}},{id:`meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8`,name:`Llama 4 Maverick 17B 128E Instruct FP8`,reasoning:!1,input:[`text`,`image`],contextWindow:2e7,maxTokens:32768,cost:{input:.27,output:.85,cacheRead:.27,cacheWrite:.27}},{id:`deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.6,output:1.25,cacheRead:.6,cacheWrite:.6}},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:3,output:7,cacheRead:3,cacheWrite:3}},{id:`moonshotai/Kimi-K2-Instruct-0905`,name:`Kimi K2-Instruct 0905`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:1,output:3,cacheRead:1,cacheWrite:3}}];function buildTogetherModelDefinition(model){return{id:model.id,name:model.name,api:`openai-completions`,reasoning:model.reasoning,input:model.input,cost:model.cost,contextWindow:model.contextWindow,maxTokens:model.maxTokens}}const VENICE_BASE_URL=`https://api.venice.ai/api/v1`,VENICE_DEFAULT_MODEL_REF=`venice/llama-3.3-70b`,VENICE_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},VENICE_MODEL_CATALOG=[{id:`llama-3.3-70b`,name:`Llama 3.3 70B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`llama-3.2-3b`,name:`Llama 3.2 3B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`hermes-3-llama-3.1-405b`,name:`Hermes 3 Llama 3.1 405B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`qwen3-235b-a22b-thinking-2507`,name:`Qwen3 235B Thinking`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`qwen3-235b-a22b-instruct-2507`,name:`Qwen3 235B Instruct`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`qwen3-coder-480b-a35b-instruct`,name:`Qwen3 Coder 480B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`private`},{id:`qwen3-next-80b`,name:`Qwen3 Next 80B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`private`},{id:`qwen3-vl-235b-a22b`,name:`Qwen3 VL 235B (Vision)`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`private`},{id:`qwen3-4b`,name:`Venice Small (Qwen3 4B)`,reasoning:!0,input:[`text`],contextWindow:32768,maxTokens:8192,privacy:`private`},{id:`deepseek-v3.2`,name:`DeepSeek V3.2`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:8192,privacy:`private`},{id:`venice-uncensored`,name:`Venice Uncensored (Dolphin-Mistral)`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:8192,privacy:`private`},{id:`mistral-31-24b`,name:`Venice Medium (Mistral)`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`google-gemma-3-27b-it`,name:`Google Gemma 3 27B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`private`},{id:`openai-gpt-oss-120b`,name:`OpenAI GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`zai-org-glm-4.7`,name:`GLM 4.7`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,privacy:`private`},{id:`claude-opus-45`,name:`Claude Opus 4.5 (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`},{id:`claude-sonnet-45`,name:`Claude Sonnet 4.5 (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`},{id:`openai-gpt-52`,name:`GPT-5.2 (via Venice)`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`openai-gpt-52-codex`,name:`GPT-5.2 Codex (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`gemini-3-pro-preview`,name:`Gemini 3 Pro (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`},{id:`gemini-3-flash-preview`,name:`Gemini 3 Flash (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`grok-41-fast`,name:`Grok 4.1 Fast (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`grok-code-fast-1`,name:`Grok Code Fast 1 (via Venice)`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`kimi-k2-thinking`,name:`Kimi K2 Thinking (via Venice)`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`minimax-m21`,name:`MiniMax M2.1 (via Venice)`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`}];function buildVeniceModelDefinition(entry){return{id:entry.id,name:entry.name,reasoning:entry.reasoning,input:[...entry.input],cost:VENICE_DEFAULT_COST,contextWindow:entry.contextWindow,maxTokens:entry.maxTokens,compat:{supportsUsageInStreaming:!1}}}async function discoverVeniceModels(){if(process.env.VITEST)return VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition);try{let response=await fetch(`${VENICE_BASE_URL}/models`,{signal:AbortSignal.timeout(5e3)});if(!response.ok)return console.warn(`[venice-models] Failed to discover models: HTTP ${response.status}, using static catalog`),VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition);let data=await response.json();if(!Array.isArray(data.data)||data.data.length===0)return console.warn(`[venice-models] No models found from API, using static catalog`),VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition);let catalogById=new Map(VENICE_MODEL_CATALOG.map(m=>[m.id,m])),models=[];for(let apiModel of data.data){let catalogEntry=catalogById.get(apiModel.id);if(catalogEntry)models.push(buildVeniceModelDefinition(catalogEntry));else{let isReasoning=apiModel.model_spec.capabilities.supportsReasoning||apiModel.id.toLowerCase().includes(`thinking`)||apiModel.id.toLowerCase().includes(`reason`)||apiModel.id.toLowerCase().includes(`r1`),hasVision=apiModel.model_spec.capabilities.supportsVision;models.push({id:apiModel.id,name:apiModel.model_spec.name||apiModel.id,reasoning:isReasoning,input:hasVision?[`text`,`image`]:[`text`],cost:VENICE_DEFAULT_COST,contextWindow:apiModel.model_spec.availableContextTokens||128e3,maxTokens:8192,compat:{supportsUsageInStreaming:!1}})}}return models.length>0?models:VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition)}catch(error){return console.warn(`[venice-models] Discovery failed: ${String(error)}, using static catalog`),VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition)}}const MINIMAX_PORTAL_BASE_URL=`https://api.minimax.io/anthropic`,MINIMAX_DEFAULT_MODEL_ID=`MiniMax-M2.1`,MINIMAX_API_COST={input:15,output:60,cacheRead:2,cacheWrite:10};function buildMinimaxModel(params){return{id:params.id,name:params.name,reasoning:params.reasoning,input:params.input,cost:MINIMAX_API_COST,contextWindow:2e5,maxTokens:8192}}function buildMinimaxTextModel(params){return buildMinimaxModel({...params,input:[`text`]})}const XIAOMI_DEFAULT_MODEL_ID=`mimo-v2-flash`,XIAOMI_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},MOONSHOT_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW=128e3,QWEN_PORTAL_DEFAULT_MAX_TOKENS=8192,QWEN_PORTAL_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},OLLAMA_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},VLLM_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},QIANFAN_BASE_URL=`https://qianfan.baidubce.com/v2`,QIANFAN_DEFAULT_MODEL_ID=`deepseek-v3.2`,QIANFAN_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},NVIDIA_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0};function resolveOllamaApiBase(configuredBaseUrl){return configuredBaseUrl?normalizeBaseUrl(configuredBaseUrl).replace(/\/v1$/i,``):`http://127.0.0.1:11434`}function resolveFreetokenApiBase(configuredBaseUrl){return configuredBaseUrl?normalizeBaseUrl(configuredBaseUrl).replace(/\/v1$/i,``):`http://127.0.0.1:1919`}async function discoverOllamaModels(baseUrl){if(process.env.VITEST)return[];try{let apiBase=resolveOllamaApiBase(baseUrl),response=await fetch(`${apiBase}/api/tags`,{signal:AbortSignal.timeout(5e3)});if(!response.ok)return console.warn(`Failed to discover Ollama models: ${response.status}`),[];let data=await response.json();return!data.models||data.models.length===0?(console.warn(`No Ollama models found on local instance`),[]):data.models.map(model=>{let modelId=model.name;return{id:modelId,name:modelId,reasoning:modelId.toLowerCase().includes(`r1`)||modelId.toLowerCase().includes(`reasoning`),input:[`text`],cost:OLLAMA_DEFAULT_COST,contextWindow:128e3,maxTokens:8192}})}catch(error){return console.warn(`Failed to discover Ollama models: ${String(error)}`),[]}}async function discoverVllmModels(baseUrl,apiKey){if(process.env.VITEST)return[];let url=`${normalizeBaseUrl(baseUrl.trim())}/models`;try{let trimmedApiKey=apiKey?.trim(),response=await fetch(url,{headers:trimmedApiKey?{Authorization:`Bearer ${trimmedApiKey}`}:void 0,signal:AbortSignal.timeout(5e3)});if(!response.ok)return console.warn(`Failed to discover vLLM models: ${response.status}`),[];let models=(await response.json()).data??[];return models.length===0?(console.warn(`No vLLM models found on local instance`),[]):models.map(m=>({id:typeof m.id==`string`?m.id.trim():``})).filter(m=>!!m.id).map(m=>{let modelId=m.id,lower=modelId.toLowerCase();return{id:modelId,name:modelId,reasoning:lower.includes(`r1`)||lower.includes(`reasoning`)||lower.includes(`think`),input:[`text`],cost:VLLM_DEFAULT_COST,contextWindow:128e3,maxTokens:8192}})}catch(error){return console.warn(`Failed to discover vLLM models: ${String(error)}`),[]}}function normalizeApiKeyConfig(value){let trimmed=value.trim();return/^\$\{([A-Z0-9_]+)\}$/.exec(trimmed)?.[1]??trimmed}function resolveEnvApiKeyVarName(provider){let resolved=resolveEnvApiKey(provider);if(!resolved)return;let match=/^(?:env: |shell env: )([A-Z0-9_]+)$/.exec(resolved.source);return match?match[1]:void 0}function resolveAwsSdkApiKeyVarName(){return resolveAwsSdkEnvVarName()??`AWS_PROFILE`}function resolveApiKeyFromProfiles(params){let ids=listProfilesForProvider(params.store,params.provider);for(let id of ids){let cred=params.store.profiles[id];if(cred){if(cred.type===`api_key`)return cred.key;if(cred.type===`token`)return cred.token}}}function normalizeGoogleModelId(id){return id===`gemini-3-pro`?`gemini-3-pro-preview`:id===`gemini-3-flash`?`gemini-3-flash-preview`:id}function normalizeGoogleProvider(provider){let mutated=!1,models=provider.models.map(model=>{let nextId=normalizeGoogleModelId(model.id);return nextId===model.id?model:(mutated=!0,{...model,id:nextId})});return mutated?{...provider,models}:provider}async function normalizeProviders(params){let{providers}=params;if(!providers)return providers;let authStore=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),mutated=!1,next={};for(let[key,provider]of Object.entries(providers)){let normalizedKey=key.trim(),normalizedProvider=provider;if(normalizedProvider.apiKey&&normalizeApiKeyConfig(normalizedProvider.apiKey)!==normalizedProvider.apiKey&&(mutated=!0,normalizedProvider={...normalizedProvider,apiKey:normalizeApiKeyConfig(normalizedProvider.apiKey)}),Array.isArray(normalizedProvider.models)&&normalizedProvider.models.length>0&&!normalizedProvider.apiKey?.trim())if((normalizedProvider.auth??(normalizedKey===`amazon-bedrock`?`aws-sdk`:void 0))===`aws-sdk`){let apiKey=resolveAwsSdkApiKeyVarName();mutated=!0,normalizedProvider={...normalizedProvider,apiKey}}else{let fromEnv=resolveEnvApiKeyVarName(normalizedKey),fromProfiles=resolveApiKeyFromProfiles({provider:normalizedKey,store:authStore}),apiKey=fromEnv??fromProfiles;apiKey?.trim()?(mutated=!0,normalizedProvider={...normalizedProvider,apiKey}):normalizedProvider.api===`transformers`&&(mutated=!0,normalizedProvider={...normalizedProvider,apiKey:`local`})}if(normalizedKey===`google`){let googleNormalized=normalizeGoogleProvider(normalizedProvider);googleNormalized!==normalizedProvider&&(mutated=!0),normalizedProvider=googleNormalized}next[key]=normalizedProvider}return mutated?next:providers}function buildMinimaxProvider(){return{baseUrl:MINIMAX_PORTAL_BASE_URL,api:`anthropic-messages`,models:[buildMinimaxTextModel({id:MINIMAX_DEFAULT_MODEL_ID,name:`MiniMax M2.1`,reasoning:!1}),buildMinimaxTextModel({id:`MiniMax-M2.1-lightning`,name:`MiniMax M2.1 Lightning`,reasoning:!1}),buildMinimaxModel({id:`MiniMax-VL-01`,name:`MiniMax VL 01`,reasoning:!1,input:[`text`,`image`]}),buildMinimaxTextModel({id:`MiniMax-M2.5`,name:`MiniMax M2.5`,reasoning:!0}),buildMinimaxTextModel({id:`MiniMax-M2.5-Lightning`,name:`MiniMax M2.5 Lightning`,reasoning:!0})]}}function buildMinimaxPortalProvider(){return{baseUrl:MINIMAX_PORTAL_BASE_URL,api:`anthropic-messages`,models:[buildMinimaxTextModel({id:MINIMAX_DEFAULT_MODEL_ID,name:`MiniMax M2.1`,reasoning:!1}),buildMinimaxTextModel({id:`MiniMax-M2.5`,name:`MiniMax M2.5`,reasoning:!0})]}}function buildMoonshotProvider(){return{baseUrl:`https://api.moonshot.ai/v1`,api:`openai-completions`,models:[{id:`kimi-k2.5`,name:`Kimi K2.5`,reasoning:!1,input:[`text`],cost:MOONSHOT_DEFAULT_COST,contextWindow:256e3,maxTokens:8192}]}}function buildQwenPortalProvider(){return{baseUrl:`https://portal.qwen.ai/v1`,api:`openai-completions`,models:[{id:`coder-model`,name:`Qwen Coder`,reasoning:!1,input:[`text`],cost:QWEN_PORTAL_DEFAULT_COST,contextWindow:QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW,maxTokens:QWEN_PORTAL_DEFAULT_MAX_TOKENS},{id:`vision-model`,name:`Qwen Vision`,reasoning:!1,input:[`text`,`image`],cost:QWEN_PORTAL_DEFAULT_COST,contextWindow:QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW,maxTokens:QWEN_PORTAL_DEFAULT_MAX_TOKENS}]}}function buildSyntheticProvider(){return{baseUrl:SYNTHETIC_BASE_URL,api:`anthropic-messages`,models:SYNTHETIC_MODEL_CATALOG.map(buildSyntheticModelDefinition)}}function buildXiaomiProvider(){return{baseUrl:`https://api.xiaomimimo.com/anthropic`,api:`anthropic-messages`,models:[{id:XIAOMI_DEFAULT_MODEL_ID,name:`Xiaomi MiMo V2 Flash`,reasoning:!1,input:[`text`],cost:XIAOMI_DEFAULT_COST,contextWindow:262144,maxTokens:8192}]}}async function buildVeniceProvider(){return{baseUrl:VENICE_BASE_URL,api:`openai-completions`,models:await discoverVeniceModels()}}function buildOllamaProviderSync(configuredBaseUrl){return{baseUrl:resolveOllamaApiBase(configuredBaseUrl),api:`ollama`,models:[]}}async function buildHuggingfaceProvider(apiKey){let resolvedSecret=apiKey?.trim()===``?``:/^[A-Z][A-Z0-9_]*$/.test(apiKey.trim())?(process.env[apiKey.trim()]??``).trim():apiKey.trim();return{baseUrl:HUGGINGFACE_BASE_URL,api:`openai-completions`,models:resolvedSecret===``?HUGGINGFACE_MODEL_CATALOG.map(buildHuggingfaceModelDefinition):await discoverHuggingfaceModels(resolvedSecret)}}function buildTogetherProvider(){return{baseUrl:TOGETHER_BASE_URL,api:`openai-completions`,models:TOGETHER_MODEL_CATALOG.map(buildTogetherModelDefinition)}}async function buildVllmProvider(params){let baseUrl=normalizeBaseUrl(params?.baseUrl?.trim()||`http://127.0.0.1:8000/v1`);return{baseUrl,api:`openai-completions`,models:await discoverVllmModels(baseUrl,params?.apiKey)}}function buildQianfanProvider(){return{baseUrl:QIANFAN_BASE_URL,api:`openai-completions`,models:[{id:QIANFAN_DEFAULT_MODEL_ID,name:`DEEPSEEK V3.2`,reasoning:!0,input:[`text`],cost:QIANFAN_DEFAULT_COST,contextWindow:98304,maxTokens:32768},{id:`ernie-5.0-thinking-preview`,name:`ERNIE-5.0-Thinking-Preview`,reasoning:!0,input:[`text`,`image`],cost:QIANFAN_DEFAULT_COST,contextWindow:119e3,maxTokens:64e3}]}}const BUILDERFORCE_AGENTSLLM_FREE_COST={input:0,output:0,cacheRead:0,cacheWrite:0};function buildBuilderForceAgentsllmProvider(){return{baseUrl:`https://api.builderforce.ai/llm/v1`,api:`openai-completions`,models:[{id:`auto`,name:`BuilderForceAgentsLLM Auto (free pool)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192},{id:`poolside/laguna-s-2.1:free`,name:`Laguna S 2.1 coder (262k ctx)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192},{id:`google/gemma-4-31b-it:free`,name:`Gemma 4 31B (262k ctx)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192},{id:`nvidia/nemotron-3-super-120b-a12b:free`,name:`Nemotron 3 Super 120B (262k ctx)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192}]}}function buildNvidiaProvider(){return{baseUrl:`https://integrate.api.nvidia.com/v1`,api:`openai-completions`,models:[{id:`nvidia/llama-3.1-nemotron-70b-instruct`,name:`NVIDIA Llama 3.1 Nemotron 70B Instruct`,reasoning:!1,input:[`text`],cost:NVIDIA_DEFAULT_COST,contextWindow:131072,maxTokens:4096},{id:`meta/llama-3.3-70b-instruct`,name:`Meta Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],cost:NVIDIA_DEFAULT_COST,contextWindow:131072,maxTokens:4096},{id:`nvidia/mistral-nemo-minitron-8b-8k-instruct`,name:`NVIDIA Mistral NeMo Minitron 8B Instruct`,reasoning:!1,input:[`text`],cost:NVIDIA_DEFAULT_COST,contextWindow:8192,maxTokens:2048}]}}const LLAMA_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0};function buildLlamaProvider(modelPath){let modelName=modelPath.split(/[/\\]/).pop()??modelPath;return{baseUrl:modelPath,api:`llama`,models:[{id:modelName,name:modelName,reasoning:!1,input:[`text`],cost:LLAMA_DEFAULT_COST,contextWindow:4096,maxTokens:2048}]}}async function resolveImplicitProviders(params){let providers={},authStore=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),minimaxKey=resolveEnvApiKeyVarName(`minimax`)??resolveApiKeyFromProfiles({provider:`minimax`,store:authStore});minimaxKey&&(providers.minimax={...buildMinimaxProvider(),apiKey:minimaxKey}),listProfilesForProvider(authStore,`minimax-portal`).length>0&&(providers[`minimax-portal`]={...buildMinimaxPortalProvider(),apiKey:`minimax-oauth`});let moonshotKey=resolveEnvApiKeyVarName(`moonshot`)??resolveApiKeyFromProfiles({provider:`moonshot`,store:authStore});moonshotKey&&(providers.moonshot={...buildMoonshotProvider(),apiKey:moonshotKey});let syntheticKey=resolveEnvApiKeyVarName(`synthetic`)??resolveApiKeyFromProfiles({provider:`synthetic`,store:authStore});syntheticKey&&(providers.synthetic={...buildSyntheticProvider(),apiKey:syntheticKey});let veniceKey=resolveEnvApiKeyVarName(`venice`)??resolveApiKeyFromProfiles({provider:`venice`,store:authStore});veniceKey&&(providers.venice={...await buildVeniceProvider(),apiKey:veniceKey}),listProfilesForProvider(authStore,`qwen-portal`).length>0&&(providers[`qwen-portal`]={...buildQwenPortalProvider(),apiKey:`qwen-oauth`});let xiaomiKey=resolveEnvApiKeyVarName(`xiaomi`)??resolveApiKeyFromProfiles({provider:`xiaomi`,store:authStore});xiaomiKey&&(providers.xiaomi={...buildXiaomiProvider(),apiKey:xiaomiKey});let cloudflareProfiles=listProfilesForProvider(authStore,`cloudflare-ai-gateway`);for(let profileId of cloudflareProfiles){let cred=authStore.profiles[profileId];if(cred?.type!==`api_key`)continue;let accountId=cred.metadata?.accountId?.trim(),gatewayId=cred.metadata?.gatewayId?.trim();if(!accountId||!gatewayId)continue;let baseUrl=resolveCloudflareAiGatewayBaseUrl({accountId,gatewayId});if(!baseUrl)continue;let apiKey=resolveEnvApiKeyVarName(`cloudflare-ai-gateway`)??cred.key?.trim()??``;if(apiKey){providers[`cloudflare-ai-gateway`]={baseUrl,api:`anthropic-messages`,apiKey,models:[buildCloudflareAiGatewayModelDefinition()]};break}}let ollamaKey=resolveEnvApiKeyVarName(`ollama`)??resolveApiKeyFromProfiles({provider:`ollama`,store:authStore});if(ollamaKey){let ollamaBaseUrl=params.explicitProviders?.ollama?.baseUrl;providers.ollama={...buildOllamaProviderSync(ollamaBaseUrl),apiKey:ollamaKey}}if(!params.explicitProviders?.vllm){let vllmEnvVar=resolveEnvApiKeyVarName(`vllm`),vllmProfileKey=resolveApiKeyFromProfiles({provider:`vllm`,store:authStore}),vllmKey=vllmEnvVar??vllmProfileKey;vllmKey&&(providers.vllm={...await buildVllmProvider({apiKey:(vllmEnvVar?process.env[vllmEnvVar]?.trim()??``:vllmProfileKey??``)||void 0}),apiKey:vllmKey})}let togetherKey=resolveEnvApiKeyVarName(`together`)??resolveApiKeyFromProfiles({provider:`together`,store:authStore});togetherKey&&(providers.together={...buildTogetherProvider(),apiKey:togetherKey});let huggingfaceKey=resolveEnvApiKeyVarName(`huggingface`)??resolveApiKeyFromProfiles({provider:`huggingface`,store:authStore});huggingfaceKey&&(providers.huggingface={...await buildHuggingfaceProvider(huggingfaceKey),apiKey:huggingfaceKey});let qianfanKey=resolveEnvApiKeyVarName(`qianfan`)??resolveApiKeyFromProfiles({provider:`qianfan`,store:authStore});qianfanKey&&(providers.qianfan={...buildQianfanProvider(),apiKey:qianfanKey});let nvidiaKey=resolveEnvApiKeyVarName(`nvidia`)??resolveApiKeyFromProfiles({provider:`nvidia`,store:authStore});if(nvidiaKey&&(providers.nvidia={...buildNvidiaProvider(),apiKey:nvidiaKey}),providers.builderforcellm={...buildBuilderForceAgentsllmProvider(),apiKey:`builderforcellm-proxy`},!params.explicitProviders?.llama){let llamaModelPath=(process.env.BUILDERFORCE_AGENTS_LLAMA_MODEL_PATH??``).trim();llamaModelPath&&(providers.llama=buildLlamaProvider(llamaModelPath))}return providers}async function resolveImplicitCopilotProvider(params){let env=params.env??process.env,authStore=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),hasProfile=listProfilesForProvider(authStore,`github-copilot`).length>0,githubToken=(env.COPILOT_GITHUB_TOKEN??env.GH_TOKEN??env.GITHUB_TOKEN??``).trim();if(!hasProfile&&!githubToken)return null;let selectedGithubToken=githubToken;if(!selectedGithubToken&&hasProfile){let profileId=listProfilesForProvider(authStore,`github-copilot`)[0],profile=profileId?authStore.profiles[profileId]:void 0;profile&&profile.type===`token`&&(selectedGithubToken=profile.token)}let{DEFAULT_COPILOT_API_BASE_URL,resolveCopilotApiToken}=await import(`./github-copilot-token-D3gHtNUu.js`),baseUrl=DEFAULT_COPILOT_API_BASE_URL;if(selectedGithubToken)try{baseUrl=(await resolveCopilotApiToken({githubToken:selectedGithubToken,env})).baseUrl}catch{baseUrl=DEFAULT_COPILOT_API_BASE_URL}return{baseUrl,api:`openai-responses`,models:getDefaultCopilotModelIds().map(buildCopilotModelDefinition)}}async function resolveImplicitBedrockProvider(params){let env=params.env??process.env,discoveryConfig=params.config?.models?.bedrockDiscovery,enabled=discoveryConfig?.enabled,hasAwsCreds=resolveAwsSdkEnvVarName(env)!==void 0;if(enabled===!1||enabled!==!0&&!hasAwsCreds)return null;let region=discoveryConfig?.region??env.AWS_REGION??env.AWS_DEFAULT_REGION??`us-east-1`,models=await discoverBedrockModels({region,config:discoveryConfig});return models.length===0?null:{baseUrl:`https://bedrock-runtime.${region}.amazonaws.com`,api:`bedrock-converse-stream`,auth:`aws-sdk`,models}}const OPENAI_CODEX_OAUTH_MODEL_PREFIXES=[`gpt-5.3-codex`];function normalizeAliasKey(value){return value.trim().toLowerCase()}function modelKey(provider,model){return`${provider}/${model}`}function normalizeProviderId(provider){let normalized=provider.trim().toLowerCase();return normalized===`z.ai`||normalized===`z-ai`?`zai`:normalized===`opencode-zen`?`opencode`:normalized===`qwen`?`qwen-portal`:normalized===`kimi-code`?`kimi-coding`:normalized}function findNormalizedProviderValue(entries,provider){if(!entries)return;let providerKey=normalizeProviderId(provider);for(let[key,value]of Object.entries(entries))if(normalizeProviderId(key)===providerKey)return value}function findNormalizedProviderKey(entries,provider){if(!entries)return;let providerKey=normalizeProviderId(provider);return Object.keys(entries).find(key=>normalizeProviderId(key)===providerKey)}function isCliProvider(provider,cfg){let normalized=normalizeProviderId(provider);if(normalized===`claude-cli`||normalized===`codex-cli`)return!0;let backends=cfg?.agents?.defaults?.cliBackends??{};return Object.keys(backends).some(key=>normalizeProviderId(key)===normalized)}function normalizeAnthropicModelId(model){let trimmed=model.trim();return trimmed&&(resolveAnthropicShortAlias(trimmed)??trimmed)}function normalizeProviderModelId(provider,model){return provider===`anthropic`?normalizeAnthropicModelId(model):provider===`google`?normalizeGoogleModelId(model):model}function shouldUseOpenAICodexProvider(provider,model){if(provider!==`openai`)return!1;let normalized=model.trim().toLowerCase();return normalized?OPENAI_CODEX_OAUTH_MODEL_PREFIXES.some(prefix=>normalized===prefix||normalized.startsWith(`${prefix}-`)):!1}function normalizeModelRef(provider,model){let normalizedProvider=normalizeProviderId(provider),normalizedModel=normalizeProviderModelId(normalizedProvider,model.trim());return shouldUseOpenAICodexProvider(normalizedProvider,normalizedModel)?{provider:`openai-codex`,model:normalizedModel}:{provider:normalizedProvider,model:normalizedModel}}function parseModelRef(raw,defaultProvider){let trimmed=raw.trim();if(!trimmed)return null;let slash=trimmed.indexOf(`/`);if(slash===-1)return normalizeModelRef(defaultProvider,trimmed);let providerRaw=trimmed.slice(0,slash).trim(),model=trimmed.slice(slash+1).trim();return!providerRaw||!model?null:normalizeModelRef(providerRaw,model)}function normalizeModelSelection(value){if(typeof value==`string`)return value.trim()||void 0;if(!value||typeof value!=`object`)return;let primary=value.primary;if(typeof primary==`string`)return primary.trim()||void 0}function resolveAllowlistModelKey(raw,defaultProvider){let parsed=parseModelRef(raw,defaultProvider);return parsed?modelKey(parsed.provider,parsed.model):null}function buildConfiguredAllowlistKeys(params){let rawAllowlist=Object.keys(params.cfg?.agents?.defaults?.models??{});if(rawAllowlist.length===0)return null;let keys=new Set;for(let raw of rawAllowlist){let key=resolveAllowlistModelKey(String(raw??``),params.defaultProvider);key&&keys.add(key)}return keys.size>0?keys:null}function buildModelAliasIndex(params){let byAlias=new Map,byKey=new Map,rawModels=params.cfg.agents?.defaults?.models??{};for(let[keyRaw,entryRaw]of Object.entries(rawModels)){let parsed=parseModelRef(String(keyRaw??``),params.defaultProvider);if(!parsed)continue;let alias=String(entryRaw?.alias??``).trim();if(!alias)continue;let aliasKey=normalizeAliasKey(alias);byAlias.set(aliasKey,{alias,ref:parsed});let key=modelKey(parsed.provider,parsed.model),existing=byKey.get(key)??[];existing.push(alias),byKey.set(key,existing)}return{byAlias,byKey}}function resolveModelRefFromString(params){let trimmed=params.raw.trim();if(!trimmed)return null;if(!trimmed.includes(`/`)){let aliasKey=normalizeAliasKey(trimmed),aliasMatch=params.aliasIndex?.byAlias.get(aliasKey);if(aliasMatch)return{ref:aliasMatch.ref,alias:aliasMatch.alias}}let parsed=parseModelRef(trimmed,params.defaultProvider);return parsed?{ref:parsed}:null}function resolveConfiguredModelRef(params){let rawModel=(()=>{let raw=params.cfg.agents?.defaults?.model;return typeof raw==`string`?raw.trim():raw?.primary?.trim()??``})();if(rawModel){let trimmed=rawModel.trim(),aliasIndex=buildModelAliasIndex({cfg:params.cfg,defaultProvider:params.defaultProvider});if(!trimmed.includes(`/`)){let aliasKey=normalizeAliasKey(trimmed),aliasMatch=aliasIndex.byAlias.get(aliasKey);return aliasMatch?aliasMatch.ref:(console.warn(`[builderforce] Model "${trimmed}" specified without provider. Falling back to "anthropic/${trimmed}". Please use "anthropic/${trimmed}" in your config.`),{provider:`anthropic`,model:trimmed})}let resolved=resolveModelRefFromString({raw:trimmed,defaultProvider:params.defaultProvider,aliasIndex});if(resolved)return resolved.ref}return{provider:params.defaultProvider,model:params.defaultModel}}function resolveDefaultModelForAgent(params){let agentModelOverride=params.agentId?resolveAgentModelPrimary(params.cfg,params.agentId):void 0;return resolveConfiguredModelRef({cfg:agentModelOverride&&agentModelOverride.length>0?{...params.cfg,agents:{...params.cfg.agents,defaults:{...params.cfg.agents?.defaults,model:{...typeof params.cfg.agents?.defaults?.model==`object`?params.cfg.agents.defaults.model:void 0,primary:agentModelOverride}}}}:params.cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL})}function resolveSubagentConfiguredModelSelection(params){let agentConfig=resolveAgentConfig(params.cfg,params.agentId);return normalizeModelSelection(agentConfig?.subagents?.model)??normalizeModelSelection(params.cfg.agents?.defaults?.subagents?.model)??normalizeModelSelection(agentConfig?.model)}function resolveSubagentSpawnModelSelection(params){let runtimeDefault=resolveDefaultModelForAgent({cfg:params.cfg,agentId:params.agentId});return normalizeModelSelection(params.modelOverride)??resolveSubagentConfiguredModelSelection({cfg:params.cfg,agentId:params.agentId})??normalizeModelSelection(params.cfg.agents?.defaults?.model?.primary)??`${runtimeDefault.provider}/${runtimeDefault.model}`}function buildAllowedModelSet(params){let rawAllowlist=(()=>{let modelMap=params.cfg.agents?.defaults?.models??{};return Object.keys(modelMap)})(),allowAny=rawAllowlist.length===0;logDebug(`[model-selection] buildAllowedModelSet: rawAllowlist=[${rawAllowlist.join(`, `)}] allowAny=${allowAny} defaultProvider=${params.defaultProvider} defaultModel=${params.defaultModel??`(none)`}`);let defaultModel=params.defaultModel?.trim(),defaultRef=defaultModel&¶ms.defaultProvider?parseModelRef(defaultModel,params.defaultProvider):null,defaultKey=defaultRef?modelKey(defaultRef.provider,defaultRef.model):void 0,catalogKeys=new Set(params.catalog.map(entry=>modelKey(entry.provider,entry.id)));if(allowAny)return defaultKey&&catalogKeys.add(defaultKey),{allowAny:!0,allowedCatalog:params.catalog,allowedKeys:catalogKeys};let allowedKeys=new Set,configuredProviders=params.cfg.models?.providers??{};for(let raw of rawAllowlist){let parsed=parseModelRef(String(raw),params.defaultProvider);if(!parsed)continue;let key=modelKey(parsed.provider,parsed.model),providerKey=normalizeProviderId(parsed.provider);isCliProvider(parsed.provider,params.cfg)||catalogKeys.has(key)||configuredProviders[providerKey],allowedKeys.add(key)}defaultKey&&allowedKeys.add(defaultKey);let allowedCatalog=params.catalog.filter(entry=>allowedKeys.has(modelKey(entry.provider,entry.id)));return allowedCatalog.length===0&&allowedKeys.size===0?(defaultKey&&catalogKeys.add(defaultKey),{allowAny:!0,allowedCatalog:params.catalog,allowedKeys:catalogKeys}):{allowAny:!1,allowedCatalog,allowedKeys}}function getModelRefStatus(params){let allowed=buildAllowedModelSet({cfg:params.cfg,catalog:params.catalog,defaultProvider:params.defaultProvider,defaultModel:params.defaultModel}),key=modelKey(params.ref.provider,params.ref.model),configuredProviderKey=findNormalizedProviderKey(params.cfg.models?.providers??{},params.ref.provider),inCatalog=params.catalog.some(entry=>modelKey(entry.provider,entry.id)===key),inAllowedKeys=allowed.allowedKeys.has(key),hasConfiguredProvider=!!configuredProviderKey,isCli=isCliProvider(params.ref.provider,params.cfg),isAllowed=allowed.allowAny||inAllowedKeys||hasConfiguredProvider||isCli;return logDebug(`[model-selection] getModelRefStatus: key=${key} inCatalog=${inCatalog} allowAny=${allowed.allowAny} inAllowedKeys=${inAllowedKeys} hasConfiguredProvider=${hasConfiguredProvider} (${configuredProviderKey??`none`}) isCli=${isCli} → allowed=${isAllowed}`),isAllowed||logWarn(`[model-selection] model REJECTED: ${key} — allowedKeys=[${[...allowed.allowedKeys].join(`, `)}] configuredProviders=[${Object.keys(params.cfg.models?.providers??{}).join(`, `)}]`),{key,inCatalog,allowAny:allowed.allowAny,allowed:isAllowed}}function resolveAllowedModelRef(params){let trimmed=params.raw.trim();if(!trimmed)return{error:`invalid model: empty`};let aliasIndex=buildModelAliasIndex({cfg:params.cfg,defaultProvider:params.defaultProvider}),resolved=resolveModelRefFromString({raw:trimmed,defaultProvider:params.defaultProvider,aliasIndex});if(logDebug(`[model-selection] resolveAllowedModelRef: raw="${trimmed}" defaultProvider=${params.defaultProvider} → resolved=${resolved?`${resolved.ref.provider}/${resolved.ref.model}`:`null`}`),!resolved)return{error:`invalid model: ${trimmed}`};let status=getModelRefStatus({cfg:params.cfg,catalog:params.catalog,ref:resolved.ref,defaultProvider:params.defaultProvider,defaultModel:params.defaultModel}),openRouterFallbackStatus=!status.allowed&&normalizeProviderId(params.defaultProvider)===`openrouter`&&!trimmed.toLowerCase().startsWith(`openrouter/`)&&trimmed.includes(`/`)?getModelRefStatus({cfg:params.cfg,catalog:params.catalog,ref:normalizeModelRef(`openrouter`,trimmed),defaultProvider:params.defaultProvider,defaultModel:params.defaultModel}):void 0;return openRouterFallbackStatus?.allowed?(logDebug(`[model-selection] resolveAllowedModelRef: OpenRouter fallback succeeded for "${trimmed}" → openrouter/${trimmed}`),{ref:normalizeModelRef(`openrouter`,trimmed),key:openRouterFallbackStatus.key}):status.allowed?{ref:resolved.ref,key:status.key}:(logWarn(`[model-selection] resolveAllowedModelRef FAILED: raw="${trimmed}" resolvedKey=${status.key} allowed=false (openRouterFallback=${openRouterFallbackStatus?`tried,allowed=${openRouterFallbackStatus.allowed}`:`skipped`})`),{error:`model not allowed: ${status.key}`})}function resolveThinkingDefault(params){return params.cfg.agents?.defaults?.thinkingDefault||(params.catalog?.find(entry=>entry.provider===params.provider&&entry.id===params.model)?.reasoning?`low`:`off`)}function resolveHooksGmailModel(params){let hooksModel=params.cfg.hooks?.gmail?.model;if(!hooksModel?.trim())return null;let aliasIndex=buildModelAliasIndex({cfg:params.cfg,defaultProvider:params.defaultProvider});return resolveModelRefFromString({raw:hooksModel,defaultProvider:params.defaultProvider,aliasIndex})?.ref??null}export{MODEL_ANALYTICS_PATH as $,listProfilesForProvider as $t,resolveImplicitBedrockProvider as A,getModel as At,buildTogetherModelDefinition as B,getSoonestCooldownExpiry as Bt,XIAOMI_DEFAULT_MODEL_ID as C,getShellEnvAppliedKeys as Ct,normalizeGoogleModelId as D,shouldDeferShellEnvFallback as Dt,discoverOllamaModels as E,resolveShellEnvFallbackTimeoutMs as Et,VENICE_DEFAULT_MODEL_REF as F,isHuggingfacePolicyLocked as Ft,OLLAMA_NATIVE_BASE_URL as G,resolveApiKeyForProfile as Gt,SYNTHETIC_DEFAULT_MODEL_REF as H,markAuthProfileFailure as Ht,VENICE_MODEL_CATALOG as I,CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF as It,createAgentSession as J,generateChutesPkce as Jt,createOllamaStreamFn as K,CHUTES_AUTHORIZE_ENDPOINT as Kt,buildVeniceModelDefinition as L,buildCloudflareAiGatewayModelDefinition as Lt,resolveImplicitProviders as M,HUGGINGFACE_MODEL_CATALOG as Mt,resolveOllamaApiBase as N,buildHuggingfaceModelDefinition as Nt,normalizeProviders as O,shouldEnableShellEnvFallback as Ot,VENICE_BASE_URL as P,discoverHuggingfaceModels as Pt,profileWorkload as Q,dedupeProfileIds as Qt,TOGETHER_BASE_URL as R,resolveCloudflareAiGatewayBaseUrl as Rt,QIANFAN_DEFAULT_MODEL_ID as S,resolveModelAuthMode as St,buildXiaomiProvider as T,loadShellEnvFallback as Tt,SYNTHETIC_MODEL_CATALOG as U,markAuthProfileUsed as Ut,SYNTHETIC_BASE_URL as V,isProfileInCooldown as Vt,buildSyntheticModelDefinition as W,resolveProfileUnusableUntilForDisplay as Wt,CHARS_PER_TOKEN as X,loginOpenAICodex as Xt,estimateTokens as Y,parseOAuthCallbackInput as Yt,estimateTokensFromChars as Z,repairOAuthProfileIdMismatch as Zt,resolveModelRefFromString as _,CODEX_CLI_PROFILE_ID as _n,getCustomProviderApiKey as _t,getModelRefStatus as a,loadAuthProfileStore as an,DEFAULT_ACTION_TYPE as at,resolveThinkingDefault as b,DEFAULT_PROVIDER as bn,resolveAwsSdkEnvVarName as bt,normalizeModelRef as c,resolveAuthStorePathForDisplay as cn,canUseToolDecision as ct,parseModelRef as d,resolveProcessScopedMap as dn,nativeComplete as dt,markAuthProfileGood as en,RUN_OUTCOME_PATH as et,resolveAllowedModelRef as f,isPidAlive as fn,createAssistantMessageEventStream as ft,resolveHooksGmailModel as g,CLAUDE_CLI_PROFILE_ID as gn,getApiKeyForModel as gt,resolveDefaultModelForAgent as h,resolveAuthProfileDisplayLabel as hn,SessionManager as ht,findNormalizedProviderValue as i,ensureAuthProfileStore as in,scopeHasSignal as it,resolveImplicitCopilotProvider as j,HUGGINGFACE_BASE_URL as jt,resolveFreetokenApiBase as k,getEnvApiKey as kt,normalizeModelSelection as l,resolveBuilderForceAgentsAgentDir as ln,stripReasoningTagsFromText as lt,resolveConfiguredModelRef as m,normalizeSecretInput as mn,CURRENT_SESSION_VERSION as mt,buildConfiguredAllowlistKeys as n,upsertAuthProfile as nn,scopeToken as nt,isCliProvider as o,updateAuthProfileStoreWithLock as on,learnedRoutingEnabled as ot,resolveAllowlistModelKey as p,normalizeOptionalSecretInput as pn,SettingsManager as pt,registryToAgentTools as q,exchangeChutesCodeForTokens as qt,buildModelAliasIndex as r,upsertAuthProfileWithLock as rn,rankModelsForAction as rt,modelKey as s,resolveAuthStorePath as sn,modelRef as st,buildAllowedModelSet as t,setAuthProfileOrder as tn,OWN_TENANT_SCOPE_TOKEN as tt,normalizeProviderId as u,withFileLock as un,nativeStreamSimple as ut,resolveSubagentConfiguredModelSelection as v,DEFAULT_CONTEXT_TOKENS as vn,requireApiKey as vt,buildQianfanProvider as w,getShellPathFromLoginShell as wt,QIANFAN_BASE_URL as x,resolveEnvApiKey as xt,resolveSubagentSpawnModelSelection as y,DEFAULT_MODEL as yn,resolveApiKeyForProvider as yt,TOGETHER_MODEL_CATALOG as z,resolveAuthProfileOrder as zt};
|
|
58
|
+
`);buffer=lines.pop()??``;for(let line of lines){let trimmed=line.trim();if(trimmed)try{yield JSON.parse(trimmed)}catch{console.warn(`[ollama-stream] Skipping malformed NDJSON line:`,trimmed.slice(0,120))}}}if(buffer.trim())try{yield JSON.parse(buffer.trim())}catch{console.warn(`[ollama-stream] Skipping malformed trailing data:`,buffer.trim().slice(0,120))}}function resolveOllamaChatUrl(baseUrl){return`${normalizeBaseUrl(baseUrl.trim()).replace(/\/v1$/i,``)||OLLAMA_NATIVE_BASE_URL}/api/chat`}function createOllamaStreamFn(baseUrl){let chatUrl=resolveOllamaChatUrl(baseUrl);return(model,context,options)=>{let stream=createAssistantMessageEventStream(),run=async()=>{try{let ollamaMessages=convertToOllamaMessages(context.messages??[],context.systemPrompt),ollamaTools=extractOllamaTools(context.tools),ollamaOptions={num_ctx:model.contextWindow??65536};typeof options?.temperature==`number`&&(ollamaOptions.temperature=options.temperature),typeof options?.maxTokens==`number`&&(ollamaOptions.num_predict=options.maxTokens);let body={model:model.id,messages:ollamaMessages,stream:!0,...ollamaTools.length>0?{tools:ollamaTools}:{},options:ollamaOptions},headers={"Content-Type":`application/json`,...options?.headers};options?.apiKey&&(headers.Authorization=`Bearer ${options.apiKey}`);let response=await fetch(chatUrl,{method:`POST`,headers,body:JSON.stringify(body),signal:options?.signal});if(!response.ok){let errorText=await response.text().catch(()=>`unknown error`);throw Error(`Ollama API error ${response.status}: ${errorText}`)}if(!response.body)throw Error(`Ollama API returned empty response body`);let reader=response.body.getReader(),accumulatedContent=``,accumulatedToolCalls=[],finalResponse;for await(let chunk of parseNdjsonStream(reader))if(chunk.message?.content?accumulatedContent+=chunk.message.content:chunk.message?.reasoning&&(accumulatedContent+=chunk.message.reasoning),chunk.message?.tool_calls&&accumulatedToolCalls.push(...chunk.message.tool_calls),chunk.done){finalResponse=chunk;break}if(!finalResponse)throw Error(`Ollama API stream ended without a final response`);finalResponse.message.content=accumulatedContent,accumulatedToolCalls.length>0&&(finalResponse.message.tool_calls=accumulatedToolCalls);let assistantMessage=buildAssistantMessage(finalResponse,{api:model.api,provider:model.provider,id:model.id}),reason=assistantMessage.stopReason===`toolUse`?`toolUse`:`stop`;stream.push({type:`done`,reason,message:assistantMessage})}catch(err){let errorMessage=err instanceof Error?err.message:String(err);stream.push({type:`error`,reason:`error`,error:{role:`assistant`,content:[],stopReason:`error`,errorMessage,api:model.api,provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},timestamp:Date.now()}})}finally{stream.end()}};return queueMicrotask(()=>void run()),stream}}const SYNTHETIC_BASE_URL=`https://api.synthetic.new/anthropic`,SYNTHETIC_DEFAULT_MODEL_ID=`hf:MiniMaxAI/MiniMax-M2.1`,SYNTHETIC_DEFAULT_MODEL_REF=`synthetic/${SYNTHETIC_DEFAULT_MODEL_ID}`,SYNTHETIC_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},SYNTHETIC_MODEL_CATALOG=[{id:SYNTHETIC_DEFAULT_MODEL_ID,name:`MiniMax M2.1`,reasoning:!1,input:[`text`],contextWindow:192e3,maxTokens:65536},{id:`hf:moonshotai/Kimi-K2-Thinking`,name:`Kimi K2 Thinking`,reasoning:!0,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:zai-org/GLM-4.7`,name:`GLM-4.7`,reasoning:!1,input:[`text`],contextWindow:198e3,maxTokens:128e3},{id:`hf:deepseek-ai/DeepSeek-R1-0528`,name:`DeepSeek R1 0528`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3-0324`,name:`DeepSeek V3 0324`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3.1-Terminus`,name:`DeepSeek V3.1 Terminus`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:159e3,maxTokens:8192},{id:`hf:meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8`,name:`Llama 4 Maverick 17B 128E Instruct FP8`,reasoning:!1,input:[`text`],contextWindow:524e3,maxTokens:8192},{id:`hf:moonshotai/Kimi-K2-Instruct-0905`,name:`Kimi K2 Instruct 0905`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:openai/gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-235B-A22B-Instruct-2507`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen3 VL 235B A22B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:25e4,maxTokens:8192},{id:`hf:zai-org/GLM-4.5`,name:`GLM-4.5`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:128e3},{id:`hf:zai-org/GLM-4.6`,name:`GLM-4.6`,reasoning:!1,input:[`text`],contextWindow:198e3,maxTokens:128e3},{id:`hf:zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`hf:deepseek-ai/DeepSeek-V3`,name:`DeepSeek V3`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192},{id:`hf:Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen3 235B A22B Thinking 2507`,reasoning:!0,input:[`text`],contextWindow:256e3,maxTokens:8192}];function buildSyntheticModelDefinition(entry){return{id:entry.id,name:entry.name,reasoning:entry.reasoning,input:[...entry.input],cost:SYNTHETIC_DEFAULT_COST,contextWindow:entry.contextWindow,maxTokens:entry.maxTokens}}const TOGETHER_BASE_URL=`https://api.together.xyz/v1`,TOGETHER_MODEL_CATALOG=[{id:`zai-org/GLM-4.7`,name:`GLM 4.7 Fp8`,reasoning:!1,input:[`text`],contextWindow:202752,maxTokens:8192,cost:{input:.45,output:2,cacheRead:.45,cacheWrite:2}},{id:`moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],cost:{input:.5,output:2.8,cacheRead:.5,cacheWrite:2.8},contextWindow:262144,maxTokens:32768},{id:`meta-llama/Llama-3.3-70B-Instruct-Turbo`,name:`Llama 3.3 70B Instruct Turbo`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.88,output:.88,cacheRead:.88,cacheWrite:.88}},{id:`meta-llama/Llama-4-Scout-17B-16E-Instruct`,name:`Llama 4 Scout 17B 16E Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:1e7,maxTokens:32768,cost:{input:.18,output:.59,cacheRead:.18,cacheWrite:.18}},{id:`meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8`,name:`Llama 4 Maverick 17B 128E Instruct FP8`,reasoning:!1,input:[`text`,`image`],contextWindow:2e7,maxTokens:32768,cost:{input:.27,output:.85,cacheRead:.27,cacheWrite:.27}},{id:`deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.6,output:1.25,cacheRead:.6,cacheWrite:.6}},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:3,output:7,cacheRead:3,cacheWrite:3}},{id:`moonshotai/Kimi-K2-Instruct-0905`,name:`Kimi K2-Instruct 0905`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:1,output:3,cacheRead:1,cacheWrite:3}}];function buildTogetherModelDefinition(model){return{id:model.id,name:model.name,api:`openai-completions`,reasoning:model.reasoning,input:model.input,cost:model.cost,contextWindow:model.contextWindow,maxTokens:model.maxTokens}}const VENICE_BASE_URL=`https://api.venice.ai/api/v1`,VENICE_DEFAULT_MODEL_REF=`venice/llama-3.3-70b`,VENICE_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},VENICE_MODEL_CATALOG=[{id:`llama-3.3-70b`,name:`Llama 3.3 70B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`llama-3.2-3b`,name:`Llama 3.2 3B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`hermes-3-llama-3.1-405b`,name:`Hermes 3 Llama 3.1 405B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`qwen3-235b-a22b-thinking-2507`,name:`Qwen3 235B Thinking`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`qwen3-235b-a22b-instruct-2507`,name:`Qwen3 235B Instruct`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`qwen3-coder-480b-a35b-instruct`,name:`Qwen3 Coder 480B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`private`},{id:`qwen3-next-80b`,name:`Qwen3 Next 80B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`private`},{id:`qwen3-vl-235b-a22b`,name:`Qwen3 VL 235B (Vision)`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`private`},{id:`qwen3-4b`,name:`Venice Small (Qwen3 4B)`,reasoning:!0,input:[`text`],contextWindow:32768,maxTokens:8192,privacy:`private`},{id:`deepseek-v3.2`,name:`DeepSeek V3.2`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:8192,privacy:`private`},{id:`venice-uncensored`,name:`Venice Uncensored (Dolphin-Mistral)`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:8192,privacy:`private`},{id:`mistral-31-24b`,name:`Venice Medium (Mistral)`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`google-gemma-3-27b-it`,name:`Google Gemma 3 27B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`private`},{id:`openai-gpt-oss-120b`,name:`OpenAI GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,privacy:`private`},{id:`zai-org-glm-4.7`,name:`GLM 4.7`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,privacy:`private`},{id:`claude-opus-45`,name:`Claude Opus 4.5 (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`},{id:`claude-sonnet-45`,name:`Claude Sonnet 4.5 (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`},{id:`openai-gpt-52`,name:`GPT-5.2 (via Venice)`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`openai-gpt-52-codex`,name:`GPT-5.2 Codex (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`gemini-3-pro-preview`,name:`Gemini 3 Pro (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`},{id:`gemini-3-flash-preview`,name:`Gemini 3 Flash (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`grok-41-fast`,name:`Grok 4.1 Fast (via Venice)`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`grok-code-fast-1`,name:`Grok Code Fast 1 (via Venice)`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`kimi-k2-thinking`,name:`Kimi K2 Thinking (via Venice)`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,privacy:`anonymized`},{id:`minimax-m21`,name:`MiniMax M2.1 (via Venice)`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,privacy:`anonymized`}];function buildVeniceModelDefinition(entry){return{id:entry.id,name:entry.name,reasoning:entry.reasoning,input:[...entry.input],cost:VENICE_DEFAULT_COST,contextWindow:entry.contextWindow,maxTokens:entry.maxTokens,compat:{supportsUsageInStreaming:!1}}}async function discoverVeniceModels(){if(process.env.VITEST)return VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition);try{let response=await fetch(`${VENICE_BASE_URL}/models`,{signal:AbortSignal.timeout(5e3)});if(!response.ok)return console.warn(`[venice-models] Failed to discover models: HTTP ${response.status}, using static catalog`),VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition);let data=await response.json();if(!Array.isArray(data.data)||data.data.length===0)return console.warn(`[venice-models] No models found from API, using static catalog`),VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition);let catalogById=new Map(VENICE_MODEL_CATALOG.map(m=>[m.id,m])),models=[];for(let apiModel of data.data){let catalogEntry=catalogById.get(apiModel.id);if(catalogEntry)models.push(buildVeniceModelDefinition(catalogEntry));else{let isReasoning=apiModel.model_spec.capabilities.supportsReasoning||apiModel.id.toLowerCase().includes(`thinking`)||apiModel.id.toLowerCase().includes(`reason`)||apiModel.id.toLowerCase().includes(`r1`),hasVision=apiModel.model_spec.capabilities.supportsVision;models.push({id:apiModel.id,name:apiModel.model_spec.name||apiModel.id,reasoning:isReasoning,input:hasVision?[`text`,`image`]:[`text`],cost:VENICE_DEFAULT_COST,contextWindow:apiModel.model_spec.availableContextTokens||128e3,maxTokens:8192,compat:{supportsUsageInStreaming:!1}})}}return models.length>0?models:VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition)}catch(error){return console.warn(`[venice-models] Discovery failed: ${String(error)}, using static catalog`),VENICE_MODEL_CATALOG.map(buildVeniceModelDefinition)}}const MINIMAX_PORTAL_BASE_URL=`https://api.minimax.io/anthropic`,MINIMAX_DEFAULT_MODEL_ID=`MiniMax-M2.1`,MINIMAX_API_COST={input:15,output:60,cacheRead:2,cacheWrite:10};function buildMinimaxModel(params){return{id:params.id,name:params.name,reasoning:params.reasoning,input:params.input,cost:MINIMAX_API_COST,contextWindow:2e5,maxTokens:8192}}function buildMinimaxTextModel(params){return buildMinimaxModel({...params,input:[`text`]})}const XIAOMI_DEFAULT_MODEL_ID=`mimo-v2-flash`,XIAOMI_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},MOONSHOT_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW=128e3,QWEN_PORTAL_DEFAULT_MAX_TOKENS=8192,QWEN_PORTAL_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},OLLAMA_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},VLLM_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},QIANFAN_BASE_URL=`https://qianfan.baidubce.com/v2`,QIANFAN_DEFAULT_MODEL_ID=`deepseek-v3.2`,QIANFAN_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0},NVIDIA_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0};function resolveOllamaApiBase(configuredBaseUrl){return configuredBaseUrl?normalizeBaseUrl(configuredBaseUrl).replace(/\/v1$/i,``):`http://127.0.0.1:11434`}function resolveFreetokenApiBase(configuredBaseUrl){return configuredBaseUrl?normalizeBaseUrl(configuredBaseUrl).replace(/\/v1$/i,``):`http://127.0.0.1:1919`}async function discoverOllamaModels(baseUrl){if(process.env.VITEST)return[];try{let apiBase=resolveOllamaApiBase(baseUrl),response=await fetch(`${apiBase}/api/tags`,{signal:AbortSignal.timeout(5e3)});if(!response.ok)return console.warn(`Failed to discover Ollama models: ${response.status}`),[];let data=await response.json();return!data.models||data.models.length===0?(console.warn(`No Ollama models found on local instance`),[]):data.models.map(model=>{let modelId=model.name;return{id:modelId,name:modelId,reasoning:modelId.toLowerCase().includes(`r1`)||modelId.toLowerCase().includes(`reasoning`),input:[`text`],cost:OLLAMA_DEFAULT_COST,contextWindow:128e3,maxTokens:8192}})}catch(error){return console.warn(`Failed to discover Ollama models: ${String(error)}`),[]}}async function discoverVllmModels(baseUrl,apiKey){if(process.env.VITEST)return[];let url=`${normalizeBaseUrl(baseUrl.trim())}/models`;try{let trimmedApiKey=apiKey?.trim(),response=await fetch(url,{headers:trimmedApiKey?{Authorization:`Bearer ${trimmedApiKey}`}:void 0,signal:AbortSignal.timeout(5e3)});if(!response.ok)return console.warn(`Failed to discover vLLM models: ${response.status}`),[];let models=(await response.json()).data??[];return models.length===0?(console.warn(`No vLLM models found on local instance`),[]):models.map(m=>({id:typeof m.id==`string`?m.id.trim():``})).filter(m=>!!m.id).map(m=>{let modelId=m.id,lower=modelId.toLowerCase();return{id:modelId,name:modelId,reasoning:lower.includes(`r1`)||lower.includes(`reasoning`)||lower.includes(`think`),input:[`text`],cost:VLLM_DEFAULT_COST,contextWindow:128e3,maxTokens:8192}})}catch(error){return console.warn(`Failed to discover vLLM models: ${String(error)}`),[]}}function normalizeApiKeyConfig(value){let trimmed=value.trim();return/^\$\{([A-Z0-9_]+)\}$/.exec(trimmed)?.[1]??trimmed}function resolveEnvApiKeyVarName(provider){let resolved=resolveEnvApiKey(provider);if(!resolved)return;let match=/^(?:env: |shell env: )([A-Z0-9_]+)$/.exec(resolved.source);return match?match[1]:void 0}function resolveAwsSdkApiKeyVarName(){return resolveAwsSdkEnvVarName()??`AWS_PROFILE`}function resolveApiKeyFromProfiles(params){let ids=listProfilesForProvider(params.store,params.provider);for(let id of ids){let cred=params.store.profiles[id];if(cred){if(cred.type===`api_key`)return cred.key;if(cred.type===`token`)return cred.token}}}function normalizeGoogleModelId(id){return id===`gemini-3-pro`?`gemini-3-pro-preview`:id===`gemini-3-flash`?`gemini-3-flash-preview`:id}function normalizeGoogleProvider(provider){let mutated=!1,models=provider.models.map(model=>{let nextId=normalizeGoogleModelId(model.id);return nextId===model.id?model:(mutated=!0,{...model,id:nextId})});return mutated?{...provider,models}:provider}async function normalizeProviders(params){let{providers}=params;if(!providers)return providers;let authStore=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),mutated=!1,next={};for(let[key,provider]of Object.entries(providers)){let normalizedKey=key.trim(),normalizedProvider=provider;if(normalizedProvider.apiKey&&normalizeApiKeyConfig(normalizedProvider.apiKey)!==normalizedProvider.apiKey&&(mutated=!0,normalizedProvider={...normalizedProvider,apiKey:normalizeApiKeyConfig(normalizedProvider.apiKey)}),Array.isArray(normalizedProvider.models)&&normalizedProvider.models.length>0&&!normalizedProvider.apiKey?.trim())if((normalizedProvider.auth??(normalizedKey===`amazon-bedrock`?`aws-sdk`:void 0))===`aws-sdk`){let apiKey=resolveAwsSdkApiKeyVarName();mutated=!0,normalizedProvider={...normalizedProvider,apiKey}}else{let fromEnv=resolveEnvApiKeyVarName(normalizedKey),fromProfiles=resolveApiKeyFromProfiles({provider:normalizedKey,store:authStore}),apiKey=fromEnv??fromProfiles;apiKey?.trim()?(mutated=!0,normalizedProvider={...normalizedProvider,apiKey}):normalizedProvider.api===`transformers`&&(mutated=!0,normalizedProvider={...normalizedProvider,apiKey:`local`})}if(normalizedKey===`google`){let googleNormalized=normalizeGoogleProvider(normalizedProvider);googleNormalized!==normalizedProvider&&(mutated=!0),normalizedProvider=googleNormalized}next[key]=normalizedProvider}return mutated?next:providers}function buildMinimaxProvider(){return{baseUrl:MINIMAX_PORTAL_BASE_URL,api:`anthropic-messages`,models:[buildMinimaxTextModel({id:MINIMAX_DEFAULT_MODEL_ID,name:`MiniMax M2.1`,reasoning:!1}),buildMinimaxTextModel({id:`MiniMax-M2.1-lightning`,name:`MiniMax M2.1 Lightning`,reasoning:!1}),buildMinimaxModel({id:`MiniMax-VL-01`,name:`MiniMax VL 01`,reasoning:!1,input:[`text`,`image`]}),buildMinimaxTextModel({id:`MiniMax-M2.5`,name:`MiniMax M2.5`,reasoning:!0}),buildMinimaxTextModel({id:`MiniMax-M2.5-Lightning`,name:`MiniMax M2.5 Lightning`,reasoning:!0})]}}function buildMinimaxPortalProvider(){return{baseUrl:MINIMAX_PORTAL_BASE_URL,api:`anthropic-messages`,models:[buildMinimaxTextModel({id:MINIMAX_DEFAULT_MODEL_ID,name:`MiniMax M2.1`,reasoning:!1}),buildMinimaxTextModel({id:`MiniMax-M2.5`,name:`MiniMax M2.5`,reasoning:!0})]}}function buildMoonshotProvider(){return{baseUrl:`https://api.moonshot.ai/v1`,api:`openai-completions`,models:[{id:`kimi-k2.5`,name:`Kimi K2.5`,reasoning:!1,input:[`text`],cost:MOONSHOT_DEFAULT_COST,contextWindow:256e3,maxTokens:8192}]}}function buildQwenPortalProvider(){return{baseUrl:`https://portal.qwen.ai/v1`,api:`openai-completions`,models:[{id:`coder-model`,name:`Qwen Coder`,reasoning:!1,input:[`text`],cost:QWEN_PORTAL_DEFAULT_COST,contextWindow:QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW,maxTokens:QWEN_PORTAL_DEFAULT_MAX_TOKENS},{id:`vision-model`,name:`Qwen Vision`,reasoning:!1,input:[`text`,`image`],cost:QWEN_PORTAL_DEFAULT_COST,contextWindow:QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW,maxTokens:QWEN_PORTAL_DEFAULT_MAX_TOKENS}]}}function buildSyntheticProvider(){return{baseUrl:SYNTHETIC_BASE_URL,api:`anthropic-messages`,models:SYNTHETIC_MODEL_CATALOG.map(buildSyntheticModelDefinition)}}function buildXiaomiProvider(){return{baseUrl:`https://api.xiaomimimo.com/anthropic`,api:`anthropic-messages`,models:[{id:XIAOMI_DEFAULT_MODEL_ID,name:`Xiaomi MiMo V2 Flash`,reasoning:!1,input:[`text`],cost:XIAOMI_DEFAULT_COST,contextWindow:262144,maxTokens:8192}]}}async function buildVeniceProvider(){return{baseUrl:VENICE_BASE_URL,api:`openai-completions`,models:await discoverVeniceModels()}}function buildOllamaProviderSync(configuredBaseUrl){return{baseUrl:resolveOllamaApiBase(configuredBaseUrl),api:`ollama`,models:[]}}async function buildHuggingfaceProvider(apiKey){let resolvedSecret=apiKey?.trim()===``?``:/^[A-Z][A-Z0-9_]*$/.test(apiKey.trim())?(process.env[apiKey.trim()]??``).trim():apiKey.trim();return{baseUrl:HUGGINGFACE_BASE_URL,api:`openai-completions`,models:resolvedSecret===``?HUGGINGFACE_MODEL_CATALOG.map(buildHuggingfaceModelDefinition):await discoverHuggingfaceModels(resolvedSecret)}}function buildTogetherProvider(){return{baseUrl:TOGETHER_BASE_URL,api:`openai-completions`,models:TOGETHER_MODEL_CATALOG.map(buildTogetherModelDefinition)}}async function buildVllmProvider(params){let baseUrl=normalizeBaseUrl(params?.baseUrl?.trim()||`http://127.0.0.1:8000/v1`);return{baseUrl,api:`openai-completions`,models:await discoverVllmModels(baseUrl,params?.apiKey)}}function buildQianfanProvider(){return{baseUrl:QIANFAN_BASE_URL,api:`openai-completions`,models:[{id:QIANFAN_DEFAULT_MODEL_ID,name:`DEEPSEEK V3.2`,reasoning:!0,input:[`text`],cost:QIANFAN_DEFAULT_COST,contextWindow:98304,maxTokens:32768},{id:`ernie-5.0-thinking-preview`,name:`ERNIE-5.0-Thinking-Preview`,reasoning:!0,input:[`text`,`image`],cost:QIANFAN_DEFAULT_COST,contextWindow:119e3,maxTokens:64e3}]}}const BUILDERFORCE_AGENTSLLM_FREE_COST={input:0,output:0,cacheRead:0,cacheWrite:0};function buildBuilderForceAgentsllmProvider(){return{baseUrl:`https://api.builderforce.ai/llm/v1`,api:`openai-completions`,models:[{id:`auto`,name:`BuilderForceAgentsLLM Auto (free pool)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192},{id:`poolside/laguna-s-2.1:free`,name:`Laguna S 2.1 coder (262k ctx)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192},{id:`google/gemma-4-31b-it:free`,name:`Gemma 4 31B (262k ctx)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192},{id:`nvidia/nemotron-3-super-120b-a12b:free`,name:`Nemotron 3 Super 120B (262k ctx)`,reasoning:!1,input:[`text`],cost:BUILDERFORCE_AGENTSLLM_FREE_COST,contextWindow:262144,maxTokens:8192}]}}function buildNvidiaProvider(){return{baseUrl:`https://integrate.api.nvidia.com/v1`,api:`openai-completions`,models:[{id:`nvidia/llama-3.1-nemotron-70b-instruct`,name:`NVIDIA Llama 3.1 Nemotron 70B Instruct`,reasoning:!1,input:[`text`],cost:NVIDIA_DEFAULT_COST,contextWindow:131072,maxTokens:4096},{id:`meta/llama-3.3-70b-instruct`,name:`Meta Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],cost:NVIDIA_DEFAULT_COST,contextWindow:131072,maxTokens:4096},{id:`nvidia/mistral-nemo-minitron-8b-8k-instruct`,name:`NVIDIA Mistral NeMo Minitron 8B Instruct`,reasoning:!1,input:[`text`],cost:NVIDIA_DEFAULT_COST,contextWindow:8192,maxTokens:2048}]}}const LLAMA_DEFAULT_COST={input:0,output:0,cacheRead:0,cacheWrite:0};function buildLlamaProvider(modelPath){let modelName=modelPath.split(/[/\\]/).pop()??modelPath;return{baseUrl:modelPath,api:`llama`,models:[{id:modelName,name:modelName,reasoning:!1,input:[`text`],cost:LLAMA_DEFAULT_COST,contextWindow:4096,maxTokens:2048}]}}async function resolveImplicitProviders(params){let providers={},authStore=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),minimaxKey=resolveEnvApiKeyVarName(`minimax`)??resolveApiKeyFromProfiles({provider:`minimax`,store:authStore});minimaxKey&&(providers.minimax={...buildMinimaxProvider(),apiKey:minimaxKey}),listProfilesForProvider(authStore,`minimax-portal`).length>0&&(providers[`minimax-portal`]={...buildMinimaxPortalProvider(),apiKey:`minimax-oauth`});let moonshotKey=resolveEnvApiKeyVarName(`moonshot`)??resolveApiKeyFromProfiles({provider:`moonshot`,store:authStore});moonshotKey&&(providers.moonshot={...buildMoonshotProvider(),apiKey:moonshotKey});let syntheticKey=resolveEnvApiKeyVarName(`synthetic`)??resolveApiKeyFromProfiles({provider:`synthetic`,store:authStore});syntheticKey&&(providers.synthetic={...buildSyntheticProvider(),apiKey:syntheticKey});let veniceKey=resolveEnvApiKeyVarName(`venice`)??resolveApiKeyFromProfiles({provider:`venice`,store:authStore});veniceKey&&(providers.venice={...await buildVeniceProvider(),apiKey:veniceKey}),listProfilesForProvider(authStore,`qwen-portal`).length>0&&(providers[`qwen-portal`]={...buildQwenPortalProvider(),apiKey:`qwen-oauth`});let xiaomiKey=resolveEnvApiKeyVarName(`xiaomi`)??resolveApiKeyFromProfiles({provider:`xiaomi`,store:authStore});xiaomiKey&&(providers.xiaomi={...buildXiaomiProvider(),apiKey:xiaomiKey});let cloudflareProfiles=listProfilesForProvider(authStore,`cloudflare-ai-gateway`);for(let profileId of cloudflareProfiles){let cred=authStore.profiles[profileId];if(cred?.type!==`api_key`)continue;let accountId=cred.metadata?.accountId?.trim(),gatewayId=cred.metadata?.gatewayId?.trim();if(!accountId||!gatewayId)continue;let baseUrl=resolveCloudflareAiGatewayBaseUrl({accountId,gatewayId});if(!baseUrl)continue;let apiKey=resolveEnvApiKeyVarName(`cloudflare-ai-gateway`)??cred.key?.trim()??``;if(apiKey){providers[`cloudflare-ai-gateway`]={baseUrl,api:`anthropic-messages`,apiKey,models:[buildCloudflareAiGatewayModelDefinition()]};break}}let ollamaKey=resolveEnvApiKeyVarName(`ollama`)??resolveApiKeyFromProfiles({provider:`ollama`,store:authStore});if(ollamaKey){let ollamaBaseUrl=params.explicitProviders?.ollama?.baseUrl;providers.ollama={...buildOllamaProviderSync(ollamaBaseUrl),apiKey:ollamaKey}}if(!params.explicitProviders?.vllm){let vllmEnvVar=resolveEnvApiKeyVarName(`vllm`),vllmProfileKey=resolveApiKeyFromProfiles({provider:`vllm`,store:authStore}),vllmKey=vllmEnvVar??vllmProfileKey;vllmKey&&(providers.vllm={...await buildVllmProvider({apiKey:(vllmEnvVar?process.env[vllmEnvVar]?.trim()??``:vllmProfileKey??``)||void 0}),apiKey:vllmKey})}let togetherKey=resolveEnvApiKeyVarName(`together`)??resolveApiKeyFromProfiles({provider:`together`,store:authStore});togetherKey&&(providers.together={...buildTogetherProvider(),apiKey:togetherKey});let huggingfaceKey=resolveEnvApiKeyVarName(`huggingface`)??resolveApiKeyFromProfiles({provider:`huggingface`,store:authStore});huggingfaceKey&&(providers.huggingface={...await buildHuggingfaceProvider(huggingfaceKey),apiKey:huggingfaceKey});let qianfanKey=resolveEnvApiKeyVarName(`qianfan`)??resolveApiKeyFromProfiles({provider:`qianfan`,store:authStore});qianfanKey&&(providers.qianfan={...buildQianfanProvider(),apiKey:qianfanKey});let nvidiaKey=resolveEnvApiKeyVarName(`nvidia`)??resolveApiKeyFromProfiles({provider:`nvidia`,store:authStore});if(nvidiaKey&&(providers.nvidia={...buildNvidiaProvider(),apiKey:nvidiaKey}),providers.builderforcellm={...buildBuilderForceAgentsllmProvider(),apiKey:`builderforcellm-proxy`},!params.explicitProviders?.llama){let llamaModelPath=(process.env.BUILDERFORCE_AGENTS_LLAMA_MODEL_PATH??``).trim();llamaModelPath&&(providers.llama=buildLlamaProvider(llamaModelPath))}return providers}async function resolveImplicitCopilotProvider(params){let env=params.env??process.env,authStore=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),hasProfile=listProfilesForProvider(authStore,`github-copilot`).length>0,githubToken=(env.COPILOT_GITHUB_TOKEN??env.GH_TOKEN??env.GITHUB_TOKEN??``).trim();if(!hasProfile&&!githubToken)return null;let selectedGithubToken=githubToken;if(!selectedGithubToken&&hasProfile){let profileId=listProfilesForProvider(authStore,`github-copilot`)[0],profile=profileId?authStore.profiles[profileId]:void 0;profile&&profile.type===`token`&&(selectedGithubToken=profile.token)}let{DEFAULT_COPILOT_API_BASE_URL,resolveCopilotApiToken}=await import(`./github-copilot-token-BlyiXyTy.js`),baseUrl=DEFAULT_COPILOT_API_BASE_URL;if(selectedGithubToken)try{baseUrl=(await resolveCopilotApiToken({githubToken:selectedGithubToken,env})).baseUrl}catch{baseUrl=DEFAULT_COPILOT_API_BASE_URL}return{baseUrl,api:`openai-responses`,models:getDefaultCopilotModelIds().map(buildCopilotModelDefinition)}}async function resolveImplicitBedrockProvider(params){let env=params.env??process.env,discoveryConfig=params.config?.models?.bedrockDiscovery,enabled=discoveryConfig?.enabled,hasAwsCreds=resolveAwsSdkEnvVarName(env)!==void 0;if(enabled===!1||enabled!==!0&&!hasAwsCreds)return null;let region=discoveryConfig?.region??env.AWS_REGION??env.AWS_DEFAULT_REGION??`us-east-1`,models=await discoverBedrockModels({region,config:discoveryConfig});return models.length===0?null:{baseUrl:`https://bedrock-runtime.${region}.amazonaws.com`,api:`bedrock-converse-stream`,auth:`aws-sdk`,models}}const OPENAI_CODEX_OAUTH_MODEL_PREFIXES=[`gpt-5.3-codex`];function normalizeAliasKey(value){return value.trim().toLowerCase()}function modelKey(provider,model){return`${provider}/${model}`}function normalizeProviderId(provider){let normalized=provider.trim().toLowerCase();return normalized===`z.ai`||normalized===`z-ai`?`zai`:normalized===`opencode-zen`?`opencode`:normalized===`qwen`?`qwen-portal`:normalized===`kimi-code`?`kimi-coding`:normalized}function findNormalizedProviderValue(entries,provider){if(!entries)return;let providerKey=normalizeProviderId(provider);for(let[key,value]of Object.entries(entries))if(normalizeProviderId(key)===providerKey)return value}function findNormalizedProviderKey(entries,provider){if(!entries)return;let providerKey=normalizeProviderId(provider);return Object.keys(entries).find(key=>normalizeProviderId(key)===providerKey)}function isCliProvider(provider,cfg){let normalized=normalizeProviderId(provider);if(normalized===`claude-cli`||normalized===`codex-cli`)return!0;let backends=cfg?.agents?.defaults?.cliBackends??{};return Object.keys(backends).some(key=>normalizeProviderId(key)===normalized)}function normalizeAnthropicModelId(model){let trimmed=model.trim();return trimmed&&(resolveAnthropicShortAlias(trimmed)??trimmed)}function normalizeProviderModelId(provider,model){return provider===`anthropic`?normalizeAnthropicModelId(model):provider===`google`?normalizeGoogleModelId(model):model}function shouldUseOpenAICodexProvider(provider,model){if(provider!==`openai`)return!1;let normalized=model.trim().toLowerCase();return normalized?OPENAI_CODEX_OAUTH_MODEL_PREFIXES.some(prefix=>normalized===prefix||normalized.startsWith(`${prefix}-`)):!1}function normalizeModelRef(provider,model){let normalizedProvider=normalizeProviderId(provider),normalizedModel=normalizeProviderModelId(normalizedProvider,model.trim());return shouldUseOpenAICodexProvider(normalizedProvider,normalizedModel)?{provider:`openai-codex`,model:normalizedModel}:{provider:normalizedProvider,model:normalizedModel}}function parseModelRef(raw,defaultProvider){let trimmed=raw.trim();if(!trimmed)return null;let slash=trimmed.indexOf(`/`);if(slash===-1)return normalizeModelRef(defaultProvider,trimmed);let providerRaw=trimmed.slice(0,slash).trim(),model=trimmed.slice(slash+1).trim();return!providerRaw||!model?null:normalizeModelRef(providerRaw,model)}function normalizeModelSelection(value){if(typeof value==`string`)return value.trim()||void 0;if(!value||typeof value!=`object`)return;let primary=value.primary;if(typeof primary==`string`)return primary.trim()||void 0}function resolveAllowlistModelKey(raw,defaultProvider){let parsed=parseModelRef(raw,defaultProvider);return parsed?modelKey(parsed.provider,parsed.model):null}function buildConfiguredAllowlistKeys(params){let rawAllowlist=Object.keys(params.cfg?.agents?.defaults?.models??{});if(rawAllowlist.length===0)return null;let keys=new Set;for(let raw of rawAllowlist){let key=resolveAllowlistModelKey(String(raw??``),params.defaultProvider);key&&keys.add(key)}return keys.size>0?keys:null}function buildModelAliasIndex(params){let byAlias=new Map,byKey=new Map,rawModels=params.cfg.agents?.defaults?.models??{};for(let[keyRaw,entryRaw]of Object.entries(rawModels)){let parsed=parseModelRef(String(keyRaw??``),params.defaultProvider);if(!parsed)continue;let alias=String(entryRaw?.alias??``).trim();if(!alias)continue;let aliasKey=normalizeAliasKey(alias);byAlias.set(aliasKey,{alias,ref:parsed});let key=modelKey(parsed.provider,parsed.model),existing=byKey.get(key)??[];existing.push(alias),byKey.set(key,existing)}return{byAlias,byKey}}function resolveModelRefFromString(params){let trimmed=params.raw.trim();if(!trimmed)return null;if(!trimmed.includes(`/`)){let aliasKey=normalizeAliasKey(trimmed),aliasMatch=params.aliasIndex?.byAlias.get(aliasKey);if(aliasMatch)return{ref:aliasMatch.ref,alias:aliasMatch.alias}}let parsed=parseModelRef(trimmed,params.defaultProvider);return parsed?{ref:parsed}:null}function resolveConfiguredModelRef(params){let rawModel=(()=>{let raw=params.cfg.agents?.defaults?.model;return typeof raw==`string`?raw.trim():raw?.primary?.trim()??``})();if(rawModel){let trimmed=rawModel.trim(),aliasIndex=buildModelAliasIndex({cfg:params.cfg,defaultProvider:params.defaultProvider});if(!trimmed.includes(`/`)){let aliasKey=normalizeAliasKey(trimmed),aliasMatch=aliasIndex.byAlias.get(aliasKey);return aliasMatch?aliasMatch.ref:(console.warn(`[builderforce] Model "${trimmed}" specified without provider. Falling back to "anthropic/${trimmed}". Please use "anthropic/${trimmed}" in your config.`),{provider:`anthropic`,model:trimmed})}let resolved=resolveModelRefFromString({raw:trimmed,defaultProvider:params.defaultProvider,aliasIndex});if(resolved)return resolved.ref}return{provider:params.defaultProvider,model:params.defaultModel}}function resolveDefaultModelForAgent(params){let agentModelOverride=params.agentId?resolveAgentModelPrimary(params.cfg,params.agentId):void 0;return resolveConfiguredModelRef({cfg:agentModelOverride&&agentModelOverride.length>0?{...params.cfg,agents:{...params.cfg.agents,defaults:{...params.cfg.agents?.defaults,model:{...typeof params.cfg.agents?.defaults?.model==`object`?params.cfg.agents.defaults.model:void 0,primary:agentModelOverride}}}}:params.cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL})}function resolveSubagentConfiguredModelSelection(params){let agentConfig=resolveAgentConfig(params.cfg,params.agentId);return normalizeModelSelection(agentConfig?.subagents?.model)??normalizeModelSelection(params.cfg.agents?.defaults?.subagents?.model)??normalizeModelSelection(agentConfig?.model)}function resolveSubagentSpawnModelSelection(params){let runtimeDefault=resolveDefaultModelForAgent({cfg:params.cfg,agentId:params.agentId});return normalizeModelSelection(params.modelOverride)??resolveSubagentConfiguredModelSelection({cfg:params.cfg,agentId:params.agentId})??normalizeModelSelection(params.cfg.agents?.defaults?.model?.primary)??`${runtimeDefault.provider}/${runtimeDefault.model}`}function buildAllowedModelSet(params){let rawAllowlist=(()=>{let modelMap=params.cfg.agents?.defaults?.models??{};return Object.keys(modelMap)})(),allowAny=rawAllowlist.length===0;logDebug(`[model-selection] buildAllowedModelSet: rawAllowlist=[${rawAllowlist.join(`, `)}] allowAny=${allowAny} defaultProvider=${params.defaultProvider} defaultModel=${params.defaultModel??`(none)`}`);let defaultModel=params.defaultModel?.trim(),defaultRef=defaultModel&¶ms.defaultProvider?parseModelRef(defaultModel,params.defaultProvider):null,defaultKey=defaultRef?modelKey(defaultRef.provider,defaultRef.model):void 0,catalogKeys=new Set(params.catalog.map(entry=>modelKey(entry.provider,entry.id)));if(allowAny)return defaultKey&&catalogKeys.add(defaultKey),{allowAny:!0,allowedCatalog:params.catalog,allowedKeys:catalogKeys};let allowedKeys=new Set,configuredProviders=params.cfg.models?.providers??{};for(let raw of rawAllowlist){let parsed=parseModelRef(String(raw),params.defaultProvider);if(!parsed)continue;let key=modelKey(parsed.provider,parsed.model),providerKey=normalizeProviderId(parsed.provider);isCliProvider(parsed.provider,params.cfg)||catalogKeys.has(key)||configuredProviders[providerKey],allowedKeys.add(key)}defaultKey&&allowedKeys.add(defaultKey);let allowedCatalog=params.catalog.filter(entry=>allowedKeys.has(modelKey(entry.provider,entry.id)));return allowedCatalog.length===0&&allowedKeys.size===0?(defaultKey&&catalogKeys.add(defaultKey),{allowAny:!0,allowedCatalog:params.catalog,allowedKeys:catalogKeys}):{allowAny:!1,allowedCatalog,allowedKeys}}function getModelRefStatus(params){let allowed=buildAllowedModelSet({cfg:params.cfg,catalog:params.catalog,defaultProvider:params.defaultProvider,defaultModel:params.defaultModel}),key=modelKey(params.ref.provider,params.ref.model),configuredProviderKey=findNormalizedProviderKey(params.cfg.models?.providers??{},params.ref.provider),inCatalog=params.catalog.some(entry=>modelKey(entry.provider,entry.id)===key),inAllowedKeys=allowed.allowedKeys.has(key),hasConfiguredProvider=!!configuredProviderKey,isCli=isCliProvider(params.ref.provider,params.cfg),isAllowed=allowed.allowAny||inAllowedKeys||hasConfiguredProvider||isCli;return logDebug(`[model-selection] getModelRefStatus: key=${key} inCatalog=${inCatalog} allowAny=${allowed.allowAny} inAllowedKeys=${inAllowedKeys} hasConfiguredProvider=${hasConfiguredProvider} (${configuredProviderKey??`none`}) isCli=${isCli} → allowed=${isAllowed}`),isAllowed||logWarn(`[model-selection] model REJECTED: ${key} — allowedKeys=[${[...allowed.allowedKeys].join(`, `)}] configuredProviders=[${Object.keys(params.cfg.models?.providers??{}).join(`, `)}]`),{key,inCatalog,allowAny:allowed.allowAny,allowed:isAllowed}}function resolveAllowedModelRef(params){let trimmed=params.raw.trim();if(!trimmed)return{error:`invalid model: empty`};let aliasIndex=buildModelAliasIndex({cfg:params.cfg,defaultProvider:params.defaultProvider}),resolved=resolveModelRefFromString({raw:trimmed,defaultProvider:params.defaultProvider,aliasIndex});if(logDebug(`[model-selection] resolveAllowedModelRef: raw="${trimmed}" defaultProvider=${params.defaultProvider} → resolved=${resolved?`${resolved.ref.provider}/${resolved.ref.model}`:`null`}`),!resolved)return{error:`invalid model: ${trimmed}`};let status=getModelRefStatus({cfg:params.cfg,catalog:params.catalog,ref:resolved.ref,defaultProvider:params.defaultProvider,defaultModel:params.defaultModel}),openRouterFallbackStatus=!status.allowed&&normalizeProviderId(params.defaultProvider)===`openrouter`&&!trimmed.toLowerCase().startsWith(`openrouter/`)&&trimmed.includes(`/`)?getModelRefStatus({cfg:params.cfg,catalog:params.catalog,ref:normalizeModelRef(`openrouter`,trimmed),defaultProvider:params.defaultProvider,defaultModel:params.defaultModel}):void 0;return openRouterFallbackStatus?.allowed?(logDebug(`[model-selection] resolveAllowedModelRef: OpenRouter fallback succeeded for "${trimmed}" → openrouter/${trimmed}`),{ref:normalizeModelRef(`openrouter`,trimmed),key:openRouterFallbackStatus.key}):status.allowed?{ref:resolved.ref,key:status.key}:(logWarn(`[model-selection] resolveAllowedModelRef FAILED: raw="${trimmed}" resolvedKey=${status.key} allowed=false (openRouterFallback=${openRouterFallbackStatus?`tried,allowed=${openRouterFallbackStatus.allowed}`:`skipped`})`),{error:`model not allowed: ${status.key}`})}function resolveThinkingDefault(params){return params.cfg.agents?.defaults?.thinkingDefault||(params.catalog?.find(entry=>entry.provider===params.provider&&entry.id===params.model)?.reasoning?`low`:`off`)}function resolveHooksGmailModel(params){let hooksModel=params.cfg.hooks?.gmail?.model;if(!hooksModel?.trim())return null;let aliasIndex=buildModelAliasIndex({cfg:params.cfg,defaultProvider:params.defaultProvider});return resolveModelRefFromString({raw:hooksModel,defaultProvider:params.defaultProvider,aliasIndex})?.ref??null}export{MODEL_ANALYTICS_PATH as $,listProfilesForProvider as $t,resolveImplicitBedrockProvider as A,getModel as At,buildTogetherModelDefinition as B,getSoonestCooldownExpiry as Bt,XIAOMI_DEFAULT_MODEL_ID as C,getShellEnvAppliedKeys as Ct,normalizeGoogleModelId as D,shouldDeferShellEnvFallback as Dt,discoverOllamaModels as E,resolveShellEnvFallbackTimeoutMs as Et,VENICE_DEFAULT_MODEL_REF as F,isHuggingfacePolicyLocked as Ft,OLLAMA_NATIVE_BASE_URL as G,resolveApiKeyForProfile as Gt,SYNTHETIC_DEFAULT_MODEL_REF as H,markAuthProfileFailure as Ht,VENICE_MODEL_CATALOG as I,CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF as It,createAgentSession as J,generateChutesPkce as Jt,createOllamaStreamFn as K,CHUTES_AUTHORIZE_ENDPOINT as Kt,buildVeniceModelDefinition as L,buildCloudflareAiGatewayModelDefinition as Lt,resolveImplicitProviders as M,HUGGINGFACE_MODEL_CATALOG as Mt,resolveOllamaApiBase as N,buildHuggingfaceModelDefinition as Nt,normalizeProviders as O,shouldEnableShellEnvFallback as Ot,VENICE_BASE_URL as P,discoverHuggingfaceModels as Pt,profileWorkload as Q,dedupeProfileIds as Qt,TOGETHER_BASE_URL as R,resolveCloudflareAiGatewayBaseUrl as Rt,QIANFAN_DEFAULT_MODEL_ID as S,resolveModelAuthMode as St,buildXiaomiProvider as T,loadShellEnvFallback as Tt,SYNTHETIC_MODEL_CATALOG as U,markAuthProfileUsed as Ut,SYNTHETIC_BASE_URL as V,isProfileInCooldown as Vt,buildSyntheticModelDefinition as W,resolveProfileUnusableUntilForDisplay as Wt,CHARS_PER_TOKEN as X,loginOpenAICodex as Xt,estimateTokens as Y,parseOAuthCallbackInput as Yt,estimateTokensFromChars as Z,repairOAuthProfileIdMismatch as Zt,resolveModelRefFromString as _,CODEX_CLI_PROFILE_ID as _n,getCustomProviderApiKey as _t,getModelRefStatus as a,loadAuthProfileStore as an,DEFAULT_ACTION_TYPE as at,resolveThinkingDefault as b,DEFAULT_PROVIDER as bn,resolveAwsSdkEnvVarName as bt,normalizeModelRef as c,resolveAuthStorePathForDisplay as cn,canUseToolDecision as ct,parseModelRef as d,resolveProcessScopedMap as dn,nativeComplete as dt,markAuthProfileGood as en,RUN_OUTCOME_PATH as et,resolveAllowedModelRef as f,isPidAlive as fn,createAssistantMessageEventStream as ft,resolveHooksGmailModel as g,CLAUDE_CLI_PROFILE_ID as gn,getApiKeyForModel as gt,resolveDefaultModelForAgent as h,resolveAuthProfileDisplayLabel as hn,SessionManager as ht,findNormalizedProviderValue as i,ensureAuthProfileStore as in,scopeHasSignal as it,resolveImplicitCopilotProvider as j,HUGGINGFACE_BASE_URL as jt,resolveFreetokenApiBase as k,getEnvApiKey as kt,normalizeModelSelection as l,resolveBuilderForceAgentsAgentDir as ln,stripReasoningTagsFromText as lt,resolveConfiguredModelRef as m,normalizeSecretInput as mn,CURRENT_SESSION_VERSION as mt,buildConfiguredAllowlistKeys as n,upsertAuthProfile as nn,scopeToken as nt,isCliProvider as o,updateAuthProfileStoreWithLock as on,learnedRoutingEnabled as ot,resolveAllowlistModelKey as p,normalizeOptionalSecretInput as pn,SettingsManager as pt,registryToAgentTools as q,exchangeChutesCodeForTokens as qt,buildModelAliasIndex as r,upsertAuthProfileWithLock as rn,rankModelsForAction as rt,modelKey as s,resolveAuthStorePath as sn,modelRef as st,buildAllowedModelSet as t,setAuthProfileOrder as tn,OWN_TENANT_SCOPE_TOKEN as tt,normalizeProviderId as u,withFileLock as un,nativeStreamSimple as ut,resolveSubagentConfiguredModelSelection as v,DEFAULT_CONTEXT_TOKENS as vn,requireApiKey as vt,buildQianfanProvider as w,getShellPathFromLoginShell as wt,QIANFAN_BASE_URL as x,resolveEnvApiKey as xt,resolveSubagentSpawnModelSelection as y,DEFAULT_MODEL as yn,resolveApiKeyForProvider as yt,TOGETHER_MODEL_CATALOG as z,resolveAuthProfileOrder as zt};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as CONFIG_PATH}from"./paths-BHg-VHB4.js";import{L as colorize,R as isRich$1,S as shortenHomePath,z as theme}from"./utils-BP60e80M.js";import{$t as getShellEnvAppliedKeys,F as modelKey,G as resolveModelRefFromString,Gt as getCustomProviderApiKey,H as resolveConfiguredModelRef,Jt as resolveAwsSdkEnvVarName,M as findNormalizedProviderValue,R as normalizeProviderId,T as resolveBuilderForceAgentsAgentDir,U as resolveDefaultModelForAgent,Yt as resolveEnvApiKey,_ as setAuthProfileOrder,_n as DEFAULT_PROVIDER,an as getEnvApiKey,b as ensureAuthProfileStore,gn as DEFAULT_MODEL,h as listProfilesForProvider,in as shouldEnableShellEnvFallback,j as buildModelAliasIndex,o as resolveProfileUnusableUntilForDisplay,on as getModel,qt as resolveApiKeyForProvider,t as resolveAuthProfileOrder,v as upsertAuthProfile,vn as resolveAuthProfileDisplayLabel,w as resolveAuthStorePathForDisplay,z as parseModelRef,zt as nativeComplete}from"./auth-profiles-C1VbcUOm.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{a as resolveAgentModelFallbacksOverride,c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId,o as resolveAgentModelPrimary}from"./agent-scope-CufEmNj_.js";import{t as ensureAuthJsonFromAuthProfiles}from"./auth-json-DZ7E50Y1.js";import{r as loadConfig,y as parseDurationMs}from"./io-CohJffHG.js";import{a as ensureBuilderForceAgentsModelsJson,i as discoverModels,r as discoverAuthStorage}from"./model-discovery-C9Xm95uL.js";import{r as loadModelCatalog}from"./model-catalog-CiiFJX77.js";import{An as maskApiKey,Gr as antigravityForwardCompatCandidates,Jr as describeFailoverError,Kr as resolveForwardCompatModel,Mn as buildAuthHealthSummary,Nn as formatRemainingShort,Wr as resolveModel,h as runEmbeddedAgent,jn as DEFAULT_OAUTH_WARN_MS}from"./subagent-registry-CyGxu3kP.js";import{i as resolveSessionTranscriptPath,s as resolveSessionTranscriptsDirForAgent}from"./paths-ClsbsPQP.js";import{i as resolveUsageProviderId,r as formatUsageWindowSummary,t as loadProviderUsageSummary}from"./provider-usage-Bn4ZrnU7.js";import{r as withProgressTotals}from"./progress-Cqb-jAjT.js";import{d as openUrl}from"./onboard-helpers-CckrS8_K.js";import{n as stylePromptMessage,r as stylePromptTitle,t as stylePromptHint}from"./prompt-style-BMWmaqSC.js";import{t as createClackPrompter}from"./clack-prompter-B52CP7eY.js";import{t as renderTable}from"./table-BFCCZDsp.js";import{t as inferParamBFromIdOrName}from"./model-param-b-B8jBqz40.js";import{n as redactSecrets}from"./format-BYLQK2kz.js";import{a as isLocalBaseUrl,c as normalizeAlias,d as resolveModelTarget,f as updateConfig,i as formatTokenK,l as resolveKnownAgentId,n as ensureFlagCompatibility,o as loadValidConfigOrThrow,r as formatMs,s as mergePrimaryFallbackConfig,t as applyDefaultModelPrimaryUpdate,u as resolveModelKeysFromEntries}from"./shared-xj-xaKFi.js";import{d as applyAuthProfileConfig,n as validateAnthropicSetupToken}from"./auth-token-CoQ5ePPl.js";import{n as logConfigUpdated}from"./logging-ayt7F7vy.js";import{a as createVpsAwareOAuthHandlers,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-CJTG_tVx.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";import{Type}from"@sinclair/typebox";import{cancel,confirm,isCancel,multiselect,select,text}from"@clack/prompts";async function modelsAliasesListCommand(opts,runtime){ensureFlagCompatibility(opts);let models=loadConfig().agents?.defaults?.models??{},aliases=Object.entries(models).reduce((acc,[modelKey,entry])=>{let alias=entry?.alias?.trim();return alias&&(acc[alias]=modelKey),acc},{});if(opts.json){runtime.log(JSON.stringify({aliases},null,2));return}if(opts.plain){for(let[alias,target]of Object.entries(aliases))runtime.log(`${alias} ${target}`);return}if(runtime.log(`Aliases (${Object.keys(aliases).length}):`),Object.keys(aliases).length===0){runtime.log(`- none`);return}for(let[alias,target]of Object.entries(aliases))runtime.log(`- ${alias} -> ${target}`)}async function modelsAliasesAddCommand(aliasRaw,modelRaw,runtime){let alias=normalizeAlias(aliasRaw),resolved=resolveModelTarget({raw:modelRaw,cfg:loadConfig()});await updateConfig(cfg=>{let modelKey=`${resolved.provider}/${resolved.model}`,nextModels={...cfg.agents?.defaults?.models};for(let[key,entry]of Object.entries(nextModels)){let existing=entry?.alias?.trim();if(existing&&existing===alias&&key!==modelKey)throw Error(`Alias ${alias} already points to ${key}.`)}return nextModels[modelKey]={...nextModels[modelKey]??{},alias},{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,models:nextModels}}}}),logConfigUpdated(runtime),runtime.log(`Alias ${alias} -> ${resolved.provider}/${resolved.model}`)}async function modelsAliasesRemoveCommand(aliasRaw,runtime){let alias=normalizeAlias(aliasRaw),updated=await updateConfig(cfg=>{let nextModels={...cfg.agents?.defaults?.models},found=!1;for(let[key,entry]of Object.entries(nextModels))if(entry?.alias?.trim()===alias){nextModels[key]={...entry,alias:void 0},found=!0;break}if(!found)throw Error(`Alias not found: ${alias}`);return{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,models:nextModels}}}});logConfigUpdated(runtime),(!updated.agents?.defaults?.models||Object.values(updated.agents.defaults.models).every(entry=>!entry?.alias?.trim()))&&runtime.log(`No aliases configured.`)}const confirm$1=params=>confirm({...params,message:stylePromptMessage(params.message)}),text$1=params=>text({...params,message:stylePromptMessage(params.message)}),select$1=params=>select({...params,message:stylePromptMessage(params.message),options:params.options.map(opt=>opt.hint===void 0?opt:{...opt,hint:stylePromptHint(opt.hint)})});function resolveTokenProvider(raw){let trimmed=raw?.trim();return trimmed?normalizeProviderId(trimmed)===`anthropic`?`anthropic`:`custom`:null}function resolveDefaultTokenProfileId(provider){return`${normalizeProviderId(provider)}:manual`}async function modelsAuthSetupTokenCommand(opts,runtime){let provider=resolveTokenProvider(opts.provider??`anthropic`);if(provider!==`anthropic`)throw Error(`Only --provider anthropic is supported for setup-token.`);if(!process.stdin.isTTY)throw Error(`setup-token requires an interactive TTY.`);if(!opts.yes&&!await confirm$1({message:"Have you run `claude setup-token` and copied the token?",initialValue:!0}))return;let tokenInput=await text$1({message:`Paste Anthropic setup-token`,validate:value=>validateAnthropicSetupToken(String(value??``))}),token=String(tokenInput??``).trim(),profileId=resolveDefaultTokenProfileId(provider);await upsertAuthProfile({profileId,credential:{type:`token`,provider,token}}),await updateConfig(cfg=>applyAuthProfileConfig(cfg,{profileId,provider,mode:`token`})),logConfigUpdated(runtime),runtime.log(`Auth profile: ${profileId} (${provider}/token)`)}async function modelsAuthPasteTokenCommand(opts,runtime){let rawProvider=opts.provider?.trim();if(!rawProvider)throw Error(`Missing --provider.`);let provider=normalizeProviderId(rawProvider),profileId=opts.profileId?.trim()||resolveDefaultTokenProfileId(provider),tokenInput=await text$1({message:`Paste token for ${provider}`,validate:value=>value?.trim()?void 0:`Required`}),token=String(tokenInput??``).trim(),expires=opts.expiresIn?.trim()&&opts.expiresIn.trim().length>0?Date.now()+parseDurationMs(String(opts.expiresIn??``).trim(),{defaultUnit:`d`}):void 0;await upsertAuthProfile({profileId,credential:{type:`token`,provider,token,...expires?{expires}:{}}}),await updateConfig(cfg=>applyAuthProfileConfig(cfg,{profileId,provider,mode:`token`})),logConfigUpdated(runtime),runtime.log(`Auth profile: ${profileId} (${provider}/token)`)}async function modelsAuthAddCommand(_opts,runtime){let provider=await select$1({message:`Token provider`,options:[{value:`anthropic`,label:`anthropic`},{value:`custom`,label:`custom (type provider id)`}]}),providerId=provider===`custom`?normalizeProviderId(String(await text$1({message:`Provider id`,validate:value=>value?.trim()?void 0:`Required`}))):provider;if(await select$1({message:`Token method`,options:[...providerId===`anthropic`?[{value:`setup-token`,label:`setup-token (claude)`,hint:"Paste a setup-token from `claude setup-token`"}]:[],{value:`paste`,label:`paste token`}]})===`setup-token`){await modelsAuthSetupTokenCommand({provider:providerId},runtime);return}let profileIdDefault=resolveDefaultTokenProfileId(providerId);await modelsAuthPasteTokenCommand({provider:providerId,profileId:String(await text$1({message:`Profile id`,initialValue:profileIdDefault,validate:value=>value?.trim()?void 0:`Required`})).trim(),expiresIn:await confirm$1({message:`Does this token expire?`,initialValue:!1})?String(await text$1({message:`Expires in (duration)`,initialValue:`365d`,validate:value=>{try{parseDurationMs(String(value??``),{defaultUnit:`d`});return}catch{return`Invalid duration (e.g. 365d, 12h, 30m)`}}})).trim():void 0},runtime)}function resolveRequestedLoginProviderOrThrow(providers,rawProvider){let requested=rawProvider?.trim();if(!requested)return null;let matched=resolveProviderMatch(providers,requested);if(matched)return matched;let available=providers.map(provider=>provider.id).filter(Boolean).toSorted((a,b)=>a.localeCompare(b)),availableText=available.length>0?available.join(`, `):`(none)`;throw Error(`Unknown provider "${requested}". Loaded providers: ${availableText}. Verify plugins via \`${formatCliCommand(`builderforce plugins list --json`)}\`.`)}function credentialMode(credential){return credential.type===`api_key`?`api_key`:credential.type===`token`?`token`:`oauth`}async function modelsAuthLoginCommand(opts,runtime){if(!process.stdin.isTTY)throw Error(`models auth login requires an interactive TTY.`);let config=await loadValidConfigOrThrow(),defaultAgentId=resolveDefaultAgentId(config),agentDir=resolveAgentDir(config,defaultAgentId),workspaceDir=resolveAgentWorkspaceDir(config,defaultAgentId)??resolveDefaultAgentWorkspaceDir(),providers=resolvePluginProviders({config,workspaceDir});if(providers.length===0)throw Error(`No provider plugins found. Install one via \`${formatCliCommand(`builderforce plugins install`)}\`.`);let prompter=createClackPrompter(),selectedProvider=resolveRequestedLoginProviderOrThrow(providers,opts.provider)??await prompter.select({message:`Select a provider`,options:providers.map(provider=>({value:provider.id,label:provider.label,hint:provider.docsPath?`Docs: ${provider.docsPath}`:void 0}))}).then(id=>resolveProviderMatch(providers,String(id)));if(!selectedProvider)throw Error(`Unknown provider. Use --provider <id> to pick a provider plugin.`);let chosenMethod=pickAuthMethod(selectedProvider,opts.method)??(selectedProvider.auth.length===1?selectedProvider.auth[0]:await prompter.select({message:`Auth method for ${selectedProvider.label}`,options:selectedProvider.auth.map(method=>({value:method.id,label:method.label,hint:method.hint}))}).then(id=>selectedProvider.auth.find(method=>method.id===String(id))));if(!chosenMethod)throw Error(`Unknown auth method. Use --method <id> to select one.`);let isRemote=isRemoteEnvironment(),result=await chosenMethod.run({config,agentDir,workspaceDir,prompter,runtime,isRemote,openUrl:async url=>{await openUrl(url)},oauth:{createVpsAwareHandlers:params=>createVpsAwareOAuthHandlers(params)}});for(let profile of result.profiles)await upsertAuthProfile({profileId:profile.profileId,credential:profile.credential,agentDir});await updateConfig(cfg=>{let next=cfg;result.configPatch&&(next=mergeConfigPatch(next,result.configPatch));for(let profile of result.profiles)next=applyAuthProfileConfig(next,{profileId:profile.profileId,provider:profile.credential.provider,mode:credentialMode(profile.credential)});return opts.setDefault&&result.defaultModel&&(next=applyDefaultModel(next,result.defaultModel)),next}),logConfigUpdated(runtime);for(let profile of result.profiles)runtime.log(`Auth profile: ${profile.profileId} (${profile.credential.provider}/${credentialMode(profile.credential)})`);result.defaultModel&&runtime.log(opts.setDefault?`Default model set to ${result.defaultModel}`:`Default model available: ${result.defaultModel} (use --set-default to apply)`),result.notes&&result.notes.length>0&&await prompter.note(result.notes.join(`
|
|
2
|
-
`),`Provider notes`)}function resolveTargetAgent(cfg,raw){let agentId=resolveKnownAgentId({cfg,rawAgentId:raw})??resolveDefaultAgentId(cfg);return{agentId,agentDir:resolveAgentDir(cfg,agentId)}}function describeOrder(store,provider){let providerKey=normalizeProviderId(provider),order=store.order?.[providerKey];return Array.isArray(order)?order:[]}function resolveAuthOrderContext(opts){let rawProvider=opts.provider?.trim();if(!rawProvider)throw Error(`Missing --provider.`);let provider=normalizeProviderId(rawProvider),cfg=loadConfig(),{agentId,agentDir}=resolveTargetAgent(cfg,opts.agent);return{cfg,agentId,agentDir,provider}}async function modelsAuthOrderGetCommand(opts,runtime){let{agentId,agentDir,provider}=resolveAuthOrderContext(opts),order=describeOrder(await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),provider);if(opts.json){runtime.log(JSON.stringify({agentId,agentDir,provider,authStorePath:shortenHomePath(`${agentDir}/auth-profiles.json`),order:order.length>0?order:null},null,2));return}runtime.log(`Agent: ${agentId}`),runtime.log(`Provider: ${provider}`),runtime.log(`Auth file: ${shortenHomePath(`${agentDir}/auth-profiles.json`)}`),runtime.log(order.length>0?`Order override: ${order.join(`, `)}`:`Order override: (none)`)}async function modelsAuthOrderClearCommand(opts,runtime){let{agentId,agentDir,provider}=resolveAuthOrderContext(opts);if(!await setAuthProfileOrder({agentDir,provider,order:null}))throw Error(`Failed to update auth-profiles.json (lock busy?).`);runtime.log(`Agent: ${agentId}`),runtime.log(`Provider: ${provider}`),runtime.log(`Cleared per-agent order override.`)}async function modelsAuthOrderSetCommand(opts,runtime){let{agentId,agentDir,provider}=resolveAuthOrderContext(opts),store=await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),providerKey=provider,requested=(opts.order??[]).map(entry=>String(entry).trim()).filter(Boolean);if(requested.length===0)throw Error(`Missing profile ids. Provide one or more profile ids.`);for(let profileId of requested){let cred=store.profiles[profileId];if(!cred)throw Error(`Auth profile "${profileId}" not found in ${agentDir}.`);if(normalizeProviderId(cred.provider)!==providerKey)throw Error(`Auth profile "${profileId}" is for ${cred.provider}, not ${provider}.`)}let updated=await setAuthProfileOrder({agentDir,provider,order:requested});if(!updated)throw Error(`Failed to update auth-profiles.json (lock busy?).`);runtime.log(`Agent: ${agentId}`),runtime.log(`Provider: ${provider}`),runtime.log(`Order override: ${describeOrder(updated,provider).join(`, `)}`)}function getFallbacks(cfg,key){return cfg.agents?.defaults?.[key]?.fallbacks??[]}function patchDefaultsFallbacks(cfg,params){let existing=cfg.agents?.defaults?.[params.key];return{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,[params.key]:mergePrimaryFallbackConfig(existing,{fallbacks:params.fallbacks}),...params.models?{models:params.models}:void 0}}}}async function listFallbacksCommand(params,opts,runtime){ensureFlagCompatibility(opts);let fallbacks=getFallbacks(loadConfig(),params.key);if(opts.json){runtime.log(JSON.stringify({fallbacks},null,2));return}if(opts.plain){for(let entry of fallbacks)runtime.log(entry);return}if(runtime.log(`${params.label} (${fallbacks.length}):`),fallbacks.length===0){runtime.log(`- none`);return}for(let entry of fallbacks)runtime.log(`- ${entry}`)}async function addFallbackCommand(params,modelRaw,runtime){let updated=await updateConfig(cfg=>{let resolved=resolveModelTarget({raw:modelRaw,cfg}),targetKey=modelKey(resolved.provider,resolved.model),nextModels={...cfg.agents?.defaults?.models};nextModels[targetKey]||(nextModels[targetKey]={});let existing=getFallbacks(cfg,params.key);return resolveModelKeysFromEntries({cfg,entries:existing}).includes(targetKey)?cfg:patchDefaultsFallbacks(cfg,{key:params.key,fallbacks:[...existing,targetKey],models:nextModels})});logConfigUpdated(runtime),runtime.log(`${params.logPrefix}: ${getFallbacks(updated,params.key).join(`, `)}`)}async function removeFallbackCommand(params,modelRaw,runtime){let updated=await updateConfig(cfg=>{let resolved=resolveModelTarget({raw:modelRaw,cfg}),targetKey=modelKey(resolved.provider,resolved.model),aliasIndex=buildModelAliasIndex({cfg,defaultProvider:DEFAULT_PROVIDER}),existing=getFallbacks(cfg,params.key),filtered=existing.filter(entry=>{let resolvedEntry=resolveModelRefFromString({raw:String(entry??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex});return resolvedEntry?modelKey(resolvedEntry.ref.provider,resolvedEntry.ref.model)!==targetKey:!0});if(filtered.length===existing.length)throw Error(`${params.notFoundLabel} not found: ${targetKey}`);return patchDefaultsFallbacks(cfg,{key:params.key,fallbacks:filtered})});logConfigUpdated(runtime),runtime.log(`${params.logPrefix}: ${getFallbacks(updated,params.key).join(`, `)}`)}async function clearFallbacksCommand(params,runtime){await updateConfig(cfg=>patchDefaultsFallbacks(cfg,{key:params.key,fallbacks:[]})),logConfigUpdated(runtime),runtime.log(params.clearedMessage)}async function modelsFallbacksListCommand(opts,runtime){return await listFallbacksCommand({label:`Fallbacks`,key:`model`},opts,runtime)}async function modelsFallbacksAddCommand(modelRaw,runtime){return await addFallbackCommand({label:`Fallbacks`,key:`model`,logPrefix:`Fallbacks`},modelRaw,runtime)}async function modelsFallbacksRemoveCommand(modelRaw,runtime){return await removeFallbackCommand({label:`Fallbacks`,key:`model`,notFoundLabel:`Fallback`,logPrefix:`Fallbacks`},modelRaw,runtime)}async function modelsFallbacksClearCommand(runtime){return await clearFallbacksCommand({key:`model`,clearedMessage:`Fallback list cleared.`},runtime)}async function modelsImageFallbacksListCommand(opts,runtime){return await listFallbacksCommand({label:`Image fallbacks`,key:`imageModel`},opts,runtime)}async function modelsImageFallbacksAddCommand(modelRaw,runtime){return await addFallbackCommand({label:`Image fallbacks`,key:`imageModel`,logPrefix:`Image fallbacks`},modelRaw,runtime)}async function modelsImageFallbacksRemoveCommand(modelRaw,runtime){return await removeFallbackCommand({label:`Image fallbacks`,key:`imageModel`,notFoundLabel:`Image fallback`,logPrefix:`Image fallbacks`},modelRaw,runtime)}async function modelsImageFallbacksClearCommand(runtime){return await clearFallbacksCommand({key:`imageModel`,clearedMessage:`Image fallback list cleared.`},runtime)}function resolveConfiguredEntries(cfg){let resolvedDefault=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),aliasIndex=buildModelAliasIndex({cfg,defaultProvider:DEFAULT_PROVIDER}),order=[],tagsByKey=new Map,aliasesByKey=new Map;for(let[key,aliases]of aliasIndex.byKey.entries())aliasesByKey.set(key,aliases);let addEntry=(ref,tag)=>{let key=modelKey(ref.provider,ref.model);tagsByKey.has(key)||(tagsByKey.set(key,new Set),order.push(key)),tagsByKey.get(key)?.add(tag)};addEntry(resolvedDefault,`default`);let modelConfig=cfg.agents?.defaults?.model,imageModelConfig=cfg.agents?.defaults?.imageModel,modelFallbacks=typeof modelConfig==`object`?modelConfig?.fallbacks??[]:[],imageFallbacks=typeof imageModelConfig==`object`?imageModelConfig?.fallbacks??[]:[],imagePrimary=imageModelConfig?.primary?.trim()??``;if(modelFallbacks.forEach((raw,idx)=>{let resolved=resolveModelRefFromString({raw:String(raw??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex});resolved&&addEntry(resolved.ref,`fallback#${idx+1}`)}),imagePrimary){let resolved=resolveModelRefFromString({raw:imagePrimary,defaultProvider:DEFAULT_PROVIDER,aliasIndex});resolved&&addEntry(resolved.ref,`image`)}imageFallbacks.forEach((raw,idx)=>{let resolved=resolveModelRefFromString({raw:String(raw??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex});resolved&&addEntry(resolved.ref,`img-fallback#${idx+1}`)});for(let key of Object.keys(cfg.agents?.defaults?.models??{})){let parsed=parseModelRef(String(key??``),DEFAULT_PROVIDER);parsed&&addEntry(parsed,`configured`)}return{entries:order.map(key=>{let slash=key.indexOf(`/`);return{key,ref:{provider:slash===-1?key:key.slice(0,slash),model:slash===-1?``:key.slice(slash+1)},tags:tagsByKey.get(key)??new Set,aliases:aliasesByKey.get(key)??[]}})}}const MODEL_AVAILABILITY_UNAVAILABLE_CODE=`MODEL_AVAILABILITY_UNAVAILABLE`;function formatErrorWithStack(err){return err instanceof Error?err.stack??`${err.name}: ${err.message}`:String(err)}function shouldFallbackToAuthHeuristics(err){return err instanceof Error?err.code===MODEL_AVAILABILITY_UNAVAILABLE_CODE:!1}const hasAuthForProvider=(provider,cfg,authStore)=>!cfg||!authStore?!1:!!(listProfilesForProvider(authStore,provider).length>0||provider===`amazon-bedrock`&&resolveAwsSdkEnvVarName()||resolveEnvApiKey(provider)||getCustomProviderApiKey(cfg,provider));function createAvailabilityUnavailableError(message){let err=Error(message);return err.code=MODEL_AVAILABILITY_UNAVAILABLE_CODE,err}function normalizeAvailabilityError(err){return shouldFallbackToAuthHeuristics(err)&&err instanceof Error?err:createAvailabilityUnavailableError(`Model availability unavailable: getAvailable() failed.\n${formatErrorWithStack(err)}`)}function validateAvailableModels(availableModels){if(!Array.isArray(availableModels))throw createAvailabilityUnavailableError(`Model availability unavailable: getAvailable() returned a non-array value.`);for(let model of availableModels)if(!model||typeof model!=`object`||typeof model.provider!=`string`||typeof model.id!=`string`)throw createAvailabilityUnavailableError(`Model availability unavailable: getAvailable() returned invalid model entries.`);return availableModels}function loadAvailableModels(registry){let availableModels;try{availableModels=registry.getAvailable()}catch(err){throw normalizeAvailabilityError(err)}try{return validateAvailableModels(availableModels)}catch(err){throw normalizeAvailabilityError(err)}}async function loadModelRegistry(cfg){await ensureBuilderForceAgentsModelsJson(cfg);let agentDir=resolveBuilderForceAgentsAgentDir();await ensureAuthJsonFromAuthProfiles(agentDir);let registry=discoverModels(discoverAuthStorage(agentDir),agentDir),appended=appendAntigravityForwardCompatModels(registry.getAll(),registry),models=appended.models,synthesizedForwardCompat=appended.synthesizedForwardCompat,availableKeys,availabilityErrorMessage;try{let availableModels=loadAvailableModels(registry);availableKeys=new Set(availableModels.map(model=>modelKey(model.provider,model.id)));for(let synthesized of synthesizedForwardCompat)hasAvailableTemplate(availableKeys,synthesized.templateKeys)&&availableKeys.add(synthesized.key)}catch(err){if(!shouldFallbackToAuthHeuristics(err))throw err;availableKeys=void 0,availabilityErrorMessage||=formatErrorWithStack(err)}return{registry,models,availableKeys,availabilityErrorMessage}}function appendAntigravityForwardCompatModels(models,modelRegistry){let nextModels=[...models],synthesizedForwardCompat=[];for(let candidate of antigravityForwardCompatCandidates()){let key=modelKey(`google-antigravity`,candidate.id);if(nextModels.some(model=>modelKey(model.provider,model.id)===key))continue;let fallback=resolveForwardCompatModel(`google-antigravity`,candidate.id,modelRegistry);fallback&&(nextModels.push(fallback),synthesizedForwardCompat.push({key,templateKeys:candidate.templateKeys}))}return{models:nextModels,synthesizedForwardCompat}}const DATED_SNAPSHOT=/^-\d{8}$/;function hasAvailableTemplate(availableKeys,templateKeys){for(let key of availableKeys)if(templateKeys.some(template=>key===template||key.startsWith(template)&&DATED_SNAPSHOT.test(key.slice(template.length))))return!0;return!1}function toModelRow(params){let{model,key,tags,aliases=[],availableKeys,cfg,authStore}=params;if(!model)return{key,name:key,input:`-`,contextWindow:null,local:null,available:null,tags:[...tags,`missing`],missing:!0};let input=model.input.join(`+`)||`text`,local=isLocalBaseUrl(model.baseUrl),available=availableKeys===void 0?cfg&&authStore?hasAuthForProvider(model.provider,cfg,authStore):!1:availableKeys.has(modelKey(model.provider,model.id)),aliasTags=aliases.length>0?[`alias:${aliases.join(`,`)}`]:[],mergedTags=new Set(tags);if(aliasTags.length>0){for(let tag of mergedTags)(tag===`alias`||tag.startsWith(`alias:`))&&mergedTags.delete(tag);for(let tag of aliasTags)mergedTags.add(tag)}return{key,name:model.name||model.id,input,contextWindow:model.contextWindow??null,local,available,tags:Array.from(mergedTags),missing:!1}}const isRich=opts=>!!(isRich$1()&&!opts?.json&&!opts?.plain),pad=(value,size)=>value.padEnd(size),formatTag=(tag,rich)=>rich?tag===`default`?theme.success(tag):tag===`image`?theme.accentBright(tag):tag===`configured`?theme.accent(tag):tag===`missing`?theme.error(tag):tag.startsWith(`fallback#`)||tag.startsWith(`img-fallback#`)?theme.warn(tag):tag.startsWith(`alias:`)?theme.accentDim(tag):theme.muted(tag):tag,truncate=(value,max)=>value.length<=max?value:max<=3?value.slice(0,max):`${value.slice(0,max-3)}...`;function printModelTable(rows,runtime,opts={}){if(opts.json){runtime.log(JSON.stringify({count:rows.length,models:rows},null,2));return}if(opts.plain){for(let row of rows)runtime.log(row.key);return}let rich=isRich(opts),header=[pad(`Model`,42),pad(`Input`,10),pad(`Ctx`,8),pad(`Local`,5),pad(`Auth`,5),`Tags`].join(` `);runtime.log(rich?theme.heading(header):header);for(let row of rows){let keyLabel=pad(truncate(row.key,42),42),inputLabel=pad(row.input||`-`,10),ctxLabel=pad(formatTokenK(row.contextWindow),8),localLabel=pad(row.local===null?`-`:row.local?`yes`:`no`,5),authLabel=pad(row.available===null?`-`:row.available?`yes`:`no`,5),tagsLabel=row.tags.length>0?rich?row.tags.map(tag=>formatTag(tag,rich)).join(`,`):row.tags.join(`,`):``,coloredInput=colorize(rich,row.input.includes(`image`)?theme.accentBright:theme.info,inputLabel),coloredLocal=colorize(rich,row.local===null?theme.muted:row.local?theme.success:theme.muted,localLabel),coloredAuth=colorize(rich,row.available===null?theme.muted:row.available?theme.success:theme.error,authLabel),line=[rich?theme.accent(keyLabel):keyLabel,coloredInput,ctxLabel,coloredLocal,coloredAuth,tagsLabel].join(` `);runtime.log(line)}}async function modelsListCommand(opts,runtime){ensureFlagCompatibility(opts);let{loadConfig}=await import(`./config-27_FNba3.js`),cfg=loadConfig(),authStore=await ensureAuthProfileStore(),providerFilter=(()=>{let raw=opts.provider?.trim();if(raw)return parseModelRef(`${raw}/_`,DEFAULT_PROVIDER)?.provider??raw.toLowerCase()})(),models=[],modelRegistry,availableKeys,availabilityErrorMessage;try{let loaded=await loadModelRegistry(cfg);modelRegistry=loaded.registry,models=loaded.models,availableKeys=loaded.availableKeys,availabilityErrorMessage=loaded.availabilityErrorMessage}catch(err){runtime.error(`Model registry unavailable:\n${formatErrorWithStack(err)}`),process.exitCode=1;return}availabilityErrorMessage!==void 0&&runtime.error(`Model availability lookup failed; falling back to auth heuristics for discovered models: ${availabilityErrorMessage}`);let modelByKey=new Map(models.map(model=>[modelKey(model.provider,model.id),model])),{entries}=resolveConfiguredEntries(cfg),configuredByKey=new Map(entries.map(entry=>[entry.key,entry])),rows=[];if(opts.all){let sorted=[...models].toSorted((a,b)=>{let p=a.provider.localeCompare(b.provider);return p===0?a.id.localeCompare(b.id):p});for(let model of sorted){if(providerFilter&&model.provider.toLowerCase()!==providerFilter||opts.local&&!isLocalBaseUrl(model.baseUrl))continue;let key=modelKey(model.provider,model.id),configured=configuredByKey.get(key);rows.push(toModelRow({model,key,tags:configured?Array.from(configured.tags):[],aliases:configured?.aliases??[],availableKeys,cfg,authStore}))}}else for(let entry of entries){if(providerFilter&&entry.ref.provider.toLowerCase()!==providerFilter)continue;let model=modelByKey.get(entry.key);if(!model&&modelRegistry){let forwardCompat=resolveForwardCompatModel(entry.ref.provider,entry.ref.model,modelRegistry);forwardCompat&&(model=forwardCompat,modelByKey.set(entry.key,forwardCompat))}model||=resolveModel(entry.ref.provider,entry.ref.model,void 0,cfg).model,!(opts.local&&model&&!isLocalBaseUrl(model.baseUrl))&&(opts.local&&!model||rows.push(toModelRow({model,key:entry.key,tags:Array.from(entry.tags),aliases:entry.aliases,availableKeys,cfg,authStore})))}if(rows.length===0){runtime.log(`No models found.`);return}printModelTable(rows,runtime,opts)}function resolveProviderAuthOverview(params){let{provider,cfg,store}=params,now=Date.now(),profiles=listProfilesForProvider(store,provider),withUnusableSuffix=(base,profileId)=>{let unusableUntil=resolveProfileUnusableUntilForDisplay(store,profileId);if(!unusableUntil||now>=unusableUntil)return base;let stats=store.usageStats?.[profileId];return`${base} [${typeof stats?.disabledUntil==`number`&&now<stats.disabledUntil?`disabled${stats.disabledReason?`:${stats.disabledReason}`:``}`:`cooldown`} ${formatRemainingShort(unusableUntil-now)}]`},labels=profiles.map(profileId=>{let profile=store.profiles[profileId];if(!profile)return`${profileId}=missing`;if(profile.type===`api_key`)return withUnusableSuffix(`${profileId}=${maskApiKey(profile.key??``)}`,profileId);if(profile.type===`token`)return withUnusableSuffix(`${profileId}=token:${maskApiKey(profile.token)}`,profileId);let display=resolveAuthProfileDisplayLabel({cfg,store,profileId}),suffix=display===profileId?``:display.startsWith(profileId)?display.slice(profileId.length).trim():`(${display})`;return withUnusableSuffix(`${profileId}=OAuth${suffix?` ${suffix}`:``}`,profileId)}),oauthCount=profiles.filter(id=>store.profiles[id]?.type===`oauth`).length,tokenCount=profiles.filter(id=>store.profiles[id]?.type===`token`).length,apiKeyCount=profiles.filter(id=>store.profiles[id]?.type===`api_key`).length,envKey=resolveEnvApiKey(provider),customKey=getCustomProviderApiKey(cfg,provider);return{provider,effective:profiles.length>0?{kind:`profiles`,detail:shortenHomePath(resolveAuthStorePathForDisplay())}:envKey?{kind:`env`,detail:envKey.source.includes(`OAUTH_TOKEN`)||envKey.source.toLowerCase().includes(`oauth`)?`OAuth (env)`:maskApiKey(envKey.apiKey)}:customKey?{kind:`models.json`,detail:maskApiKey(customKey)}:{kind:`missing`,detail:`missing`},profiles:{count:profiles.length,oauth:oauthCount,token:tokenCount,apiKey:apiKeyCount,labels},...envKey?{env:{value:envKey.source.includes(`OAUTH_TOKEN`)||envKey.source.toLowerCase().includes(`oauth`)?`OAuth (env)`:maskApiKey(envKey.apiKey),source:envKey.source}}:{},...customKey?{modelsJson:{value:maskApiKey(customKey),source:`models.json: ${shortenHomePath(params.modelsPath)}`}}:{}}}const toStatus=reason=>reason?reason===`auth`?`auth`:reason===`rate_limit`?`rate_limit`:reason===`billing`?`billing`:reason===`timeout`?`timeout`:reason===`format`?`format`:`unknown`:`unknown`;function buildCandidateMap(modelCandidates){let map=new Map;for(let raw of modelCandidates){let parsed=parseModelRef(String(raw??``),DEFAULT_PROVIDER);if(!parsed)continue;let list=map.get(parsed.provider)??[];list.includes(parsed.model)||list.push(parsed.model),map.set(parsed.provider,list)}return map}function selectProbeModel(params){let{provider,candidates,catalog}=params,direct=candidates.get(provider);if(direct&&direct.length>0)return{provider,model:direct[0]};let fromCatalog=catalog.find(entry=>entry.provider===provider);return fromCatalog?{provider:fromCatalog.provider,model:fromCatalog.id}:null}async function buildProbeTargets(params){let{cfg,providers,modelCandidates,options}=params,store=await ensureAuthProfileStore(),providerFilter=options.provider?.trim(),providerFilterKey=providerFilter?normalizeProviderId(providerFilter):null,profileFilter=new Set((options.profileIds??[]).map(id=>id.trim()).filter(Boolean));return loadModelCatalog({config:cfg}).then(catalog=>{let candidates=buildCandidateMap(modelCandidates),targets=[],results=[];for(let provider of providers){let providerKey=normalizeProviderId(provider);if(providerFilterKey&&providerKey!==providerFilterKey)continue;let model=selectProbeModel({provider:providerKey,candidates,catalog}),profileIds=listProfilesForProvider(store,providerKey),explicitOrder=findNormalizedProviderValue(store.order,providerKey)??findNormalizedProviderValue(cfg?.auth?.order,providerKey),allowedProfiles=explicitOrder&&explicitOrder.length>0?new Set(resolveAuthProfileOrder({cfg,store,provider:providerKey})):null,filteredProfiles=profileFilter.size?profileIds.filter(id=>profileFilter.has(id)):profileIds;if(filteredProfiles.length>0){for(let profileId of filteredProfiles){let mode=store.profiles[profileId]?.type,label=resolveAuthProfileDisplayLabel({cfg,store,profileId});if(explicitOrder&&!explicitOrder.includes(profileId)){results.push({provider:providerKey,model:model?`${model.provider}/${model.model}`:void 0,profileId,label,source:`profile`,mode,status:`unknown`,error:`Excluded by auth.order for this provider.`});continue}if(allowedProfiles&&!allowedProfiles.has(profileId)){results.push({provider:providerKey,model:model?`${model.provider}/${model.model}`:void 0,profileId,label,source:`profile`,mode,status:`unknown`,error:`Auth profile credentials are missing or expired.`});continue}if(!model){results.push({provider:providerKey,model:void 0,profileId,label,source:`profile`,mode,status:`no_model`,error:`No model available for probe`});continue}targets.push({provider:providerKey,model,profileId,label,source:`profile`,mode})}continue}if(profileFilter.size>0)continue;let envKey=resolveEnvApiKey(providerKey),customKey=getCustomProviderApiKey(cfg,providerKey);if(!envKey&&!customKey)continue;let label=envKey?`env`:`models.json`,source=envKey?`env`:`models.json`,mode=envKey?.source.includes(`OAUTH_TOKEN`)?`oauth`:`api_key`;if(!model){results.push({provider:providerKey,model:void 0,label,source,mode,status:`no_model`,error:`No model available for probe`});continue}targets.push({provider:providerKey,model,label,source,mode})}return{targets,results}})}async function probeTarget(params){let{cfg,agentId,agentDir,workspaceDir,sessionDir,target,timeoutMs,maxTokens}=params;if(!target.model)return{provider:target.provider,model:void 0,profileId:target.profileId,label:target.label,source:target.source,mode:target.mode,status:`no_model`,error:`No model available for probe`};let sessionId=`probe-${target.provider}-${crypto.randomUUID()}`,sessionFile=resolveSessionTranscriptPath(sessionId,agentId);await fs.mkdir(sessionDir,{recursive:!0});let start=Date.now();try{return await runEmbeddedAgent({sessionId,sessionFile,agentId,workspaceDir,agentDir,config:cfg,prompt:`Reply with OK. Do not use tools.`,provider:target.model.provider,model:target.model.model,authProfileId:target.profileId,authProfileIdSource:target.profileId?`user`:void 0,timeoutMs,runId:`probe-${crypto.randomUUID()}`,lane:`auth-probe:${target.provider}:${target.profileId??target.source}`,thinkLevel:`off`,reasoningLevel:`off`,verboseLevel:`off`,streamParams:{maxTokens}}),{provider:target.provider,model:`${target.model.provider}/${target.model.model}`,profileId:target.profileId,label:target.label,source:target.source,mode:target.mode,status:`ok`,latencyMs:Date.now()-start}}catch(err){let described=describeFailoverError(err);return{provider:target.provider,model:`${target.model.provider}/${target.model.model}`,profileId:target.profileId,label:target.label,source:target.source,mode:target.mode,status:toStatus(described.reason),error:redactSecrets(described.message),latencyMs:Date.now()-start}}}async function runTargetsWithConcurrency(params){let{cfg,targets,timeoutMs,maxTokens,onProgress}=params,concurrency=Math.max(1,Math.min(targets.length||1,params.concurrency)),agentId=resolveDefaultAgentId(cfg),agentDir=resolveBuilderForceAgentsAgentDir(),workspaceDir=resolveAgentWorkspaceDir(cfg,agentId)??resolveDefaultAgentWorkspaceDir(),sessionDir=resolveSessionTranscriptsDirForAgent(agentId);await fs.mkdir(workspaceDir,{recursive:!0});let completed=0,results=Array.from({length:targets.length}),cursor=0,worker=async()=>{for(;;){let index=cursor;if(cursor+=1,index>=targets.length)return;let target=targets[index];onProgress?.({completed,total:targets.length,label:`Probing ${target.provider}${target.profileId?` (${target.label})`:``}`}),results[index]=await probeTarget({cfg,agentId,agentDir,workspaceDir,sessionDir,target,timeoutMs,maxTokens}),completed+=1,onProgress?.({completed,total:targets.length})}};return await Promise.all(Array.from({length:concurrency},()=>worker())),results.filter(entry=>!!entry)}async function runAuthProbes(params){let startedAt=Date.now(),plan=await buildProbeTargets({cfg:params.cfg,providers:params.providers,modelCandidates:params.modelCandidates,options:params.options}),totalTargets=plan.targets.length;params.onProgress?.({completed:0,total:totalTargets});let results=totalTargets?await runTargetsWithConcurrency({cfg:params.cfg,targets:plan.targets,timeoutMs:params.options.timeoutMs,maxTokens:params.options.maxTokens,concurrency:params.options.concurrency,onProgress:params.onProgress}):[],finishedAt=Date.now();return{startedAt,finishedAt,durationMs:finishedAt-startedAt,totalTargets,options:params.options,results:[...plan.results,...results]}}function formatProbeLatency(latencyMs){return!latencyMs&&latencyMs!==0?`-`:formatMs(latencyMs)}function sortProbeResults(results){return results.slice().toSorted((a,b)=>{let provider=a.provider.localeCompare(b.provider);if(provider!==0)return provider;let aLabel=a.label||a.profileId||``,bLabel=b.label||b.profileId||``;return aLabel.localeCompare(bLabel)})}function describeProbeSummary(summary){return summary.totalTargets===0?`No probe targets.`:`Probed ${summary.totalTargets} target${summary.totalTargets===1?``:`s`} in ${formatMs(summary.durationMs)}`}async function modelsStatusCommand(opts,runtime){if(ensureFlagCompatibility(opts),opts.plain&&opts.probe)throw Error(`--probe cannot be used with --plain output.`);let cfg=loadConfig(),agentId=resolveKnownAgentId({cfg,rawAgentId:opts.agent}),agentDir=agentId?resolveAgentDir(cfg,agentId):resolveBuilderForceAgentsAgentDir(),agentModelPrimary=agentId?resolveAgentModelPrimary(cfg,agentId):void 0,agentFallbacksOverride=agentId?resolveAgentModelFallbacksOverride(cfg,agentId):void 0,resolved=agentId?resolveDefaultModelForAgent({cfg,agentId}):resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),modelConfig=cfg.agents?.defaults?.model,imageConfig=cfg.agents?.defaults?.imageModel,rawDefaultsModel=typeof modelConfig==`string`?modelConfig.trim():modelConfig?.primary?.trim()??``,rawModel=agentModelPrimary??rawDefaultsModel,resolvedLabel=`${resolved.provider}/${resolved.model}`,defaultLabel=rawModel||resolvedLabel,defaultsFallbacks=typeof modelConfig==`object`?modelConfig?.fallbacks??[]:[],fallbacks=agentFallbacksOverride??defaultsFallbacks,imageModel=typeof imageConfig==`string`?imageConfig.trim():imageConfig?.primary?.trim()??``,imageFallbacks=typeof imageConfig==`object`?imageConfig?.fallbacks??[]:[],aliases=Object.entries(cfg.agents?.defaults?.models??{}).reduce((acc,[key,entry])=>{let alias=typeof entry?.alias==`string`?entry.alias.trim():void 0;return alias&&(acc[alias]=key),acc},{}),allowed=Object.keys(cfg.agents?.defaults?.models??{}),store=await ensureAuthProfileStore(agentDir),modelsPath=path.join(agentDir,`models.json`),providersFromStore=new Set(Object.values(store.profiles).map(profile=>profile.provider).filter(p=>!!p)),providersFromConfig=new Set(Object.keys(cfg.models?.providers??{}).map(p=>typeof p==`string`?p.trim():``).filter(Boolean)),providersFromModels=new Set,providersInUse=new Set;for(let raw of[defaultLabel,...fallbacks,imageModel,...imageFallbacks,...allowed]){let parsed=parseModelRef(String(raw??``),DEFAULT_PROVIDER);parsed?.provider&&providersFromModels.add(parsed.provider)}for(let raw of[defaultLabel,...fallbacks,imageModel,...imageFallbacks]){let parsed=parseModelRef(String(raw??``),DEFAULT_PROVIDER);parsed?.provider&&providersInUse.add(parsed.provider)}let providersFromEnv=new Set;for(let provider of[`anthropic`,`github-copilot`,`google-vertex`,`openai`,`google`,`groq`,`cerebras`,`xai`,`openrouter`,`zai`,`mistral`,`synthetic`])resolveEnvApiKey(provider)&&providersFromEnv.add(provider);let providers=Array.from(new Set([...providersFromStore,...providersFromConfig,...providersFromModels,...providersFromEnv])).map(p=>typeof p==`string`?p.trim():``).filter(Boolean).toSorted((a,b)=>a.localeCompare(b)),applied=getShellEnvAppliedKeys(),shellFallbackEnabled=shouldEnableShellEnvFallback(process.env)||cfg.env?.shellEnv?.enabled===!0,providerAuth=providers.map(provider=>resolveProviderAuthOverview({provider,cfg,store,modelsPath})).filter(entry=>entry.profiles.count>0||!!entry.env||!!entry.modelsJson),providerAuthMap=new Map(providerAuth.map(entry=>[entry.provider,entry])),missingProvidersInUse=Array.from(providersInUse).filter(provider=>!providerAuthMap.has(provider)).toSorted((a,b)=>a.localeCompare(b)),probeProfileIds=opts.probeProfile?(Array.isArray(opts.probeProfile)?opts.probeProfile:[opts.probeProfile]).flatMap(value=>String(value??``).split(`,`)).map(value=>value.trim()).filter(Boolean):[],probeTimeoutMs=opts.probeTimeout?Number(opts.probeTimeout):8e3;if(!Number.isFinite(probeTimeoutMs)||probeTimeoutMs<=0)throw Error(`--probe-timeout must be a positive number (ms).`);let probeConcurrency=opts.probeConcurrency?Number(opts.probeConcurrency):2;if(!Number.isFinite(probeConcurrency)||probeConcurrency<=0)throw Error(`--probe-concurrency must be > 0.`);let probeMaxTokens=opts.probeMaxTokens?Number(opts.probeMaxTokens):8;if(!Number.isFinite(probeMaxTokens)||probeMaxTokens<=0)throw Error(`--probe-max-tokens must be > 0.`);let aliasIndex=buildModelAliasIndex({cfg,defaultProvider:DEFAULT_PROVIDER}),modelCandidates=[rawModel||resolvedLabel,...fallbacks,imageModel,...imageFallbacks,...allowed].filter(Boolean).map(raw=>resolveModelRefFromString({raw:String(raw??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex})?.ref).filter(ref=>!!ref).map(ref=>`${ref.provider}/${ref.model}`),probeSummary;opts.probe&&(probeSummary=await withProgressTotals({label:`Probing auth profiles…`,total:1},async update=>await runAuthProbes({cfg,providers,modelCandidates,options:{provider:opts.probeProvider,profileIds:probeProfileIds,timeoutMs:probeTimeoutMs,concurrency:probeConcurrency,maxTokens:probeMaxTokens},onProgress:update})));let providersWithOauth=providerAuth.filter(entry=>entry.profiles.oauth>0||entry.profiles.token>0||entry.env?.value===`OAuth (env)`).map(entry=>{let count=entry.profiles.oauth+entry.profiles.token+(entry.env?.value===`OAuth (env)`?1:0);return`${entry.provider} (${count})`}),authHealth=buildAuthHealthSummary({store,cfg,warnAfterMs:DEFAULT_OAUTH_WARN_MS,providers}),oauthProfiles=authHealth.profiles.filter(profile=>profile.type===`oauth`||profile.type===`token`),unusableProfiles=(()=>{let now=Date.now(),out=[];for(let profileId of Object.keys(store.usageStats??{})){let unusableUntil=resolveProfileUnusableUntilForDisplay(store,profileId);if(!unusableUntil||now>=unusableUntil)continue;let stats=store.usageStats?.[profileId],kind=typeof stats?.disabledUntil==`number`&&now<stats.disabledUntil?`disabled`:`cooldown`;out.push({profileId,provider:store.profiles[profileId]?.provider,kind,reason:stats?.disabledReason,until:unusableUntil,remainingMs:unusableUntil-now})}return out.toSorted((a,b)=>a.remainingMs-b.remainingMs)})(),checkStatus=(()=>{let hasExpiredOrMissing=oauthProfiles.some(profile=>[`expired`,`missing`].includes(profile.status))||missingProvidersInUse.length>0,hasExpiring=oauthProfiles.some(profile=>profile.status===`expiring`);return hasExpiredOrMissing?1:hasExpiring?2:0})();if(opts.json){runtime.log(JSON.stringify({configPath:CONFIG_PATH,...agentId?{agentId}:{},agentDir,defaultModel:defaultLabel,resolvedDefault:resolvedLabel,fallbacks,imageModel:imageModel||null,imageFallbacks,...agentId?{modelConfig:{defaultSource:agentModelPrimary?`agent`:`defaults`,fallbacksSource:agentFallbacksOverride===void 0?`defaults`:`agent`}}:{},aliases,allowed,auth:{storePath:resolveAuthStorePathForDisplay(agentDir),shellEnvFallback:{enabled:shellFallbackEnabled,appliedKeys:applied},providersWithOAuth:providersWithOauth,missingProvidersInUse,providers:providerAuth,unusableProfiles,oauth:{warnAfterMs:authHealth.warnAfterMs,profiles:authHealth.profiles,providers:authHealth.providers},probes:probeSummary}},null,2)),opts.check&&runtime.exit(checkStatus);return}if(opts.plain){runtime.log(resolvedLabel),opts.check&&runtime.exit(checkStatus);return}let rich=isRich(opts),label=value=>colorize(rich,theme.accent,value.padEnd(14)),labelWithSource=(value,source)=>label(source?`${value} (${source})`:value),displayDefault=rawModel&&rawModel!==resolvedLabel?`${resolvedLabel} (from ${rawModel})`:resolvedLabel;runtime.log(`${label(`Config`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.info,shortenHomePath(CONFIG_PATH))}`),runtime.log(`${label(`Agent dir`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.info,shortenHomePath(agentDir))}`),runtime.log(`${labelWithSource(`Default`,agentId?agentModelPrimary?`agent`:`defaults`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.success,displayDefault)}`),runtime.log(`${labelWithSource(`Fallbacks (${fallbacks.length||0})`,agentId?agentFallbacksOverride===void 0?`defaults`:`agent`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,fallbacks.length?theme.warn:theme.muted,fallbacks.length?fallbacks.join(`, `):`-`)}`),runtime.log(`${labelWithSource(`Image model`,agentId?`defaults`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,imageModel?theme.accentBright:theme.muted,imageModel||`-`)}`),runtime.log(`${labelWithSource(`Image fallbacks (${imageFallbacks.length||0})`,agentId?`defaults`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,imageFallbacks.length?theme.accentBright:theme.muted,imageFallbacks.length?imageFallbacks.join(`, `):`-`)}`),runtime.log(`${label(`Aliases (${Object.keys(aliases).length||0})`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,Object.keys(aliases).length?theme.accent:theme.muted,Object.keys(aliases).length?Object.entries(aliases).map(([alias,target])=>rich?`${theme.accentDim(alias)} ${theme.muted(`->`)} ${theme.info(target)}`:`${alias} -> ${target}`).join(`, `):`-`)}`),runtime.log(`${label(`Configured models (${allowed.length||0})`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,allowed.length?theme.info:theme.muted,allowed.length?allowed.join(`, `):`all`)}`),runtime.log(``),runtime.log(colorize(rich,theme.heading,`Auth overview`)),runtime.log(`${label(`Auth store`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.info,shortenHomePath(resolveAuthStorePathForDisplay(agentDir)))}`),runtime.log(`${label(`Shell env`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,shellFallbackEnabled?theme.success:theme.muted,shellFallbackEnabled?`on`:`off`)}${applied.length?colorize(rich,theme.muted,` (applied: ${applied.join(`, `)})`):``}`),runtime.log(`${label(`Providers w/ OAuth/tokens (${providersWithOauth.length||0})`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,providersWithOauth.length?theme.info:theme.muted,providersWithOauth.length?providersWithOauth.join(`, `):`-`)}`);let formatKey=key=>colorize(rich,theme.warn,key),formatKeyValue=(key,value)=>`${formatKey(key)}=${colorize(rich,theme.info,value)}`,formatSeparator=()=>colorize(rich,theme.muted,` | `);for(let entry of providerAuth){let separator=formatSeparator(),bits=[];bits.push(formatKeyValue(`effective`,`${colorize(rich,theme.accentBright,entry.effective.kind)}:${colorize(rich,theme.muted,entry.effective.detail)}`)),entry.profiles.count>0&&(bits.push(formatKeyValue(`profiles`,`${entry.profiles.count} (oauth=${entry.profiles.oauth}, token=${entry.profiles.token}, api_key=${entry.profiles.apiKey})`)),entry.profiles.labels.length>0&&bits.push(colorize(rich,theme.info,entry.profiles.labels.join(`, `)))),entry.env&&bits.push(formatKeyValue(`env`,`${entry.env.value}${separator}${formatKeyValue(`source`,entry.env.source)}`)),entry.modelsJson&&bits.push(formatKeyValue(`models.json`,`${entry.modelsJson.value}${separator}${formatKeyValue(`source`,entry.modelsJson.source)}`)),runtime.log(`- ${theme.heading(entry.provider)} ${bits.join(separator)}`)}if(missingProvidersInUse.length>0){runtime.log(``),runtime.log(colorize(rich,theme.heading,`Missing auth`));for(let provider of missingProvidersInUse){let hint=provider===`anthropic`?`Run \`claude setup-token\`, then \`${formatCliCommand(`builderforce models auth setup-token`)}\` or \`${formatCliCommand(`builderforce configure`)}\`.`:`Run \`${formatCliCommand(`builderforce configure`)}\` or set an API key env var.`;runtime.log(`- ${theme.heading(provider)} ${hint}`)}}if(runtime.log(``),runtime.log(colorize(rich,theme.heading,`OAuth/token status`)),oauthProfiles.length===0)runtime.log(colorize(rich,theme.muted,`- none`));else{let usageByProvider=new Map,usageProviders=Array.from(new Set(oauthProfiles.map(profile=>resolveUsageProviderId(profile.provider)).filter(provider=>!!provider)));if(usageProviders.length>0)try{let usageSummary=await loadProviderUsageSummary({providers:usageProviders,agentDir,timeoutMs:3500});for(let snapshot of usageSummary.providers){let formatted=formatUsageWindowSummary(snapshot,{now:Date.now(),maxWindows:2,includeResets:!0});formatted&&usageByProvider.set(snapshot.provider,formatted)}}catch{}let formatStatus=status=>status===`ok`?colorize(rich,theme.success,`ok`):status===`static`?colorize(rich,theme.muted,`static`):status===`expiring`?colorize(rich,theme.warn,`expiring`):status===`missing`?colorize(rich,theme.warn,`unknown`):colorize(rich,theme.error,`expired`),profilesByProvider=new Map;for(let profile of oauthProfiles){let current=profilesByProvider.get(profile.provider);current?current.push(profile):profilesByProvider.set(profile.provider,[profile])}for(let[provider,profiles]of profilesByProvider){let usageKey=resolveUsageProviderId(provider),usage=usageKey?usageByProvider.get(usageKey):void 0,usageSuffix=usage?colorize(rich,theme.muted,` usage: ${usage}`):``;runtime.log(`- ${colorize(rich,theme.heading,provider)}${usageSuffix}`);for(let profile of profiles){let labelText=profile.label||profile.profileId,label=colorize(rich,theme.accent,labelText),status=formatStatus(profile.status),expiry=profile.status===`static`?``:profile.expiresAt?` expires in ${formatRemainingShort(profile.remainingMs)}`:` expires unknown`;runtime.log(` - ${label} ${status}${expiry}`)}}}if(probeSummary)if(runtime.log(``),runtime.log(colorize(rich,theme.heading,`Auth probes`)),probeSummary.results.length===0)runtime.log(colorize(rich,theme.muted,`- none`));else{let tableWidth=Math.max(60,(process.stdout.columns??120)-1),sorted=sortProbeResults(probeSummary.results),statusColor=status=>status===`ok`?theme.success:status===`rate_limit`||status===`timeout`||status===`billing`?theme.warn:status===`auth`||status===`format`?theme.error:theme.muted,rows=sorted.map(result=>{let status=colorize(rich,statusColor(result.status),result.status),latency=formatProbeLatency(result.latencyMs),modelLabel=result.model??`${result.provider}/-`,modeLabel=result.mode?` ${colorize(rich,theme.muted,`(${result.mode})`)}`:``,profile=`${colorize(rich,theme.accent,result.label)}${modeLabel}`,detail=result.error?.trim(),detailLabel=detail?`\n${colorize(rich,theme.muted,`↳ ${detail}`)}`:``,statusLabel=`${status}${colorize(rich,theme.muted,` · ${latency}`)}${detailLabel}`;return{Model:colorize(rich,theme.heading,modelLabel),Profile:profile,Status:statusLabel}});runtime.log(renderTable({width:tableWidth,columns:[{key:`Model`,header:`Model`,minWidth:18},{key:`Profile`,header:`Profile`,minWidth:24},{key:`Status`,header:`Status`,minWidth:12}],rows}).trimEnd()),runtime.log(colorize(rich,theme.muted,describeProbeSummary(probeSummary)))}opts.check&&runtime.exit(checkStatus)}const TOOL_PING={name:`ping`,description:`Return OK.`,parameters:Type.Object({})};function normalizeCreatedAtMs(value){return typeof value!=`number`||!Number.isFinite(value)||value<=0?null:value>0xe8d4a51000?Math.round(value):Math.round(value*1e3)}function parseModality(modality){return modality&&modality.toLowerCase().split(/[^a-z]+/).filter(Boolean).includes(`image`)?[`text`,`image`]:[`text`]}function parseNumberString(value){if(typeof value==`number`&&Number.isFinite(value))return value;if(typeof value!=`string`)return null;let trimmed=value.trim();if(!trimmed)return null;let num=Number(trimmed);return Number.isFinite(num)?num:null}function parseOpenRouterPricing(value){if(!value||typeof value!=`object`)return null;let obj=value,prompt=parseNumberString(obj.prompt),completion=parseNumberString(obj.completion),request=parseNumberString(obj.request)??0,image=parseNumberString(obj.image)??0,webSearch=parseNumberString(obj.web_search)??0,internalReasoning=parseNumberString(obj.internal_reasoning)??0;return prompt===null||completion===null?null:{prompt,completion,request,image,webSearch,internalReasoning}}function isFreeOpenRouterModel(entry){return entry.id.endsWith(`:free`)?!0:entry.pricing?entry.pricing.prompt===0&&entry.pricing.completion===0:!1}async function withTimeout(timeoutMs,fn){let controller=new AbortController,timer=setTimeout(controller.abort.bind(controller),timeoutMs);try{return await fn(controller.signal)}finally{clearTimeout(timer)}}async function fetchOpenRouterModels(fetchImpl){let res=await fetchImpl(`https://openrouter.ai/api/v1/models`,{headers:{Accept:`application/json`}});if(!res.ok)throw Error(`OpenRouter /models failed: HTTP ${res.status}`);let payload=await res.json();return(Array.isArray(payload.data)?payload.data:[]).map(entry=>{if(!entry||typeof entry!=`object`)return null;let obj=entry,id=typeof obj.id==`string`?obj.id.trim():``;if(!id)return null;let name=typeof obj.name==`string`&&obj.name.trim()?obj.name.trim():id,contextLength=typeof obj.context_length==`number`&&Number.isFinite(obj.context_length)?obj.context_length:null,maxCompletionTokens=typeof obj.max_completion_tokens==`number`&&Number.isFinite(obj.max_completion_tokens)?obj.max_completion_tokens:typeof obj.max_output_tokens==`number`&&Number.isFinite(obj.max_output_tokens)?obj.max_output_tokens:null,supportedParameters=Array.isArray(obj.supported_parameters)?obj.supported_parameters.filter(value=>typeof value==`string`).map(value=>value.trim()).filter(Boolean):[];return{id,name,contextLength,maxCompletionTokens,supportedParameters,supportedParametersCount:supportedParameters.length,supportsToolsMeta:supportedParameters.includes(`tools`),modality:typeof obj.modality==`string`&&obj.modality.trim()?obj.modality.trim():null,inferredParamB:inferParamBFromIdOrName(`${id} ${name}`),createdAtMs:normalizeCreatedAtMs(obj.created_at),pricing:parseOpenRouterPricing(obj.pricing)}}).filter(entry=>!!entry)}async function probeTool(model,apiKey,timeoutMs){let context={messages:[{role:`user`,content:`Call the ping tool with {} and nothing else.`,timestamp:Date.now()}],tools:[TOOL_PING]},startedAt=Date.now();try{return(await withTimeout(timeoutMs,signal=>nativeComplete({baseUrl:model.baseUrl,apiKey,defaultModel:model.id},{model:model.id,messages:context.messages.map(m=>({role:m.role,content:m.content})),tools:context.tools?.map(t=>({type:`function`,function:{name:t.name,description:t.description,parameters:t.parameters}})),temperature:0,extra:{max_tokens:32,tool_choice:`required`}},signal))).toolCalls.length>0?{ok:!0,latencyMs:Date.now()-startedAt}:{ok:!1,latencyMs:Date.now()-startedAt,error:`No tool call returned`}}catch(err){return{ok:!1,latencyMs:Date.now()-startedAt,error:err instanceof Error?err.message:String(err)}}}async function probeImage(model,apiKey,timeoutMs){let context={messages:[{role:`user`,content:[{type:`text`,text:`Reply with OK.`},{type:`image`,data:`iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+X3mIAAAAASUVORK5CYII=`,mimeType:`image/png`}],timestamp:Date.now()}]},startedAt=Date.now();try{return await withTimeout(timeoutMs,signal=>nativeComplete({baseUrl:model.baseUrl,apiKey,defaultModel:model.id},{model:model.id,messages:context.messages.map(m=>({role:m.role,content:m.content})),temperature:0,extra:{max_tokens:16}},signal)),{ok:!0,latencyMs:Date.now()-startedAt}}catch(err){return{ok:!1,latencyMs:Date.now()-startedAt,error:err instanceof Error?err.message:String(err)}}}function ensureImageInput(model){return model.input.includes(`image`)?model:{...model,input:Array.from(new Set([...model.input,`image`]))}}function buildOpenRouterScanResult(params){let{entry,isFree}=params;return{id:entry.id,name:entry.name,provider:`openrouter`,modelRef:`openrouter/${entry.id}`,contextLength:entry.contextLength,maxCompletionTokens:entry.maxCompletionTokens,supportedParametersCount:entry.supportedParametersCount,supportsToolsMeta:entry.supportsToolsMeta,modality:entry.modality,inferredParamB:entry.inferredParamB,createdAtMs:entry.createdAtMs,pricing:entry.pricing,isFree,tool:params.tool,image:params.image}}async function mapWithConcurrency(items,concurrency,fn,opts){let limit=Math.max(1,Math.floor(concurrency)),results=Array.from({length:items.length},()=>void 0),nextIndex=0,completed=0,worker=async()=>{for(;;){let current=nextIndex;if(nextIndex+=1,current>=items.length)return;results[current]=await fn(items[current],current),completed+=1,opts?.onProgress?.(completed,items.length)}};return items.length===0?(opts?.onProgress?.(0,0),results):(await Promise.all(Array.from({length:Math.min(limit,items.length)},()=>worker())),results)}async function scanOpenRouterModels(options={}){let fetchImpl=options.fetchImpl??fetch,probe=options.probe??!0,apiKey=options.apiKey?.trim()||getEnvApiKey(`openrouter`)||``;if(probe&&!apiKey)throw Error(`Missing OpenRouter API key. Set OPENROUTER_API_KEY to run models scan.`);let timeoutMs=Math.max(1,Math.floor(options.timeoutMs??12e3)),concurrency=Math.max(1,Math.floor(options.concurrency??3)),minParamB=Math.max(0,Math.floor(options.minParamB??0)),maxAgeDays=Math.max(0,Math.floor(options.maxAgeDays??0)),providerFilter=options.providerFilter?.trim().toLowerCase()??``,catalog=await fetchOpenRouterModels(fetchImpl),now=Date.now(),filtered=catalog.filter(entry=>!(!isFreeOpenRouterModel(entry)||providerFilter&&(entry.id.split(`/`)[0]?.toLowerCase()??``)!==providerFilter||minParamB>0&&(entry.inferredParamB??0)<minParamB||maxAgeDays>0&&entry.createdAtMs&&(now-entry.createdAtMs)/(1440*60*1e3)>maxAgeDays)),baseModel=getModel(`openrouter`,`openrouter/auto`);return options.onProgress?.({phase:`probe`,completed:0,total:filtered.length}),mapWithConcurrency(filtered,concurrency,async entry=>{let isFree=isFreeOpenRouterModel(entry);if(!probe)return buildOpenRouterScanResult({entry,isFree,tool:{ok:!1,latencyMs:null,skipped:!0},image:{ok:!1,latencyMs:null,skipped:!0}});let model={...baseModel,id:entry.id,name:entry.name||entry.id,contextWindow:entry.contextLength??baseModel.contextWindow,maxTokens:entry.maxCompletionTokens??baseModel.maxTokens,input:parseModality(entry.modality),reasoning:baseModel.reasoning};return buildOpenRouterScanResult({entry,isFree,tool:await probeTool(model,apiKey,timeoutMs),image:model.input.includes(`image`)?await probeImage(ensureImageInput(model),apiKey,timeoutMs):{ok:!1,latencyMs:null,skipped:!0}})},{onProgress:(completed,total)=>options.onProgress?.({phase:`probe`,completed,total})})}const multiselect$1=params=>multiselect({...params,message:stylePromptMessage(params.message),options:params.options.map(opt=>opt.hint===void 0?opt:{...opt,hint:stylePromptHint(opt.hint)})});function guardPromptCancel(value,runtime){if(isCancel(value))throw cancel(stylePromptTitle(`Model scan cancelled.`)??`Model scan cancelled.`),runtime.exit(0),Error(`unreachable`);return value}function sortScanResults(results){return results.slice().toSorted((a,b)=>{let aImage=a.image.ok?1:0,bImage=b.image.ok?1:0;if(aImage!==bImage)return bImage-aImage;let aToolLatency=a.tool.latencyMs??1/0,bToolLatency=b.tool.latencyMs??1/0;return aToolLatency===bToolLatency?compareScanMetadata(a,b):aToolLatency-bToolLatency})}function sortImageResults(results){return results.slice().toSorted((a,b)=>{let aLatency=a.image.latencyMs??1/0,bLatency=b.image.latencyMs??1/0;return aLatency===bLatency?compareScanMetadata(a,b):aLatency-bLatency})}function compareScanMetadata(a,b){let aCtx=a.contextLength??0,bCtx=b.contextLength??0;if(aCtx!==bCtx)return bCtx-aCtx;let aParams=a.inferredParamB??0,bParams=b.inferredParamB??0;return aParams===bParams?a.modelRef.localeCompare(b.modelRef):bParams-aParams}function buildScanHint(result){return[result.tool.ok?`tool ${formatMs(result.tool.latencyMs)}`:`tool fail`,result.image.skipped?`img skip`:result.image.ok?`img ${formatMs(result.image.latencyMs)}`:`img fail`,result.contextLength?`ctx ${formatTokenK(result.contextLength)}`:`ctx ?`,result.inferredParamB?`${result.inferredParamB}b`:null].filter(Boolean).join(` | `)}function printScanSummary(results,runtime){let toolOk=results.filter(r=>r.tool.ok),imageOk=results.filter(r=>r.image.ok),toolImageOk=results.filter(r=>r.tool.ok&&r.image.ok),imageOnly=imageOk.filter(r=>!r.tool.ok);runtime.log(`Scan results: tested ${results.length}, tool ok ${toolOk.length}, image ok ${imageOk.length}, tool+image ok ${toolImageOk.length}, image only ${imageOnly.length}`)}function printScanTable(results,runtime){let header=[pad(`Model`,42),pad(`Tool`,10),pad(`Image`,10),pad(`Ctx`,8),pad(`Params`,8),`Notes`].join(` `);runtime.log(header);for(let entry of results){let modelLabel=pad(truncate(entry.modelRef,42),42),toolLabel=pad(entry.tool.ok?formatMs(entry.tool.latencyMs):`fail`,10),imageLabel=pad(entry.image.ok?formatMs(entry.image.latencyMs):entry.image.skipped?`skip`:`fail`,10),ctxLabel=pad(formatTokenK(entry.contextLength),8),paramsLabel=pad(entry.inferredParamB?`${entry.inferredParamB}b`:`-`,8),notes=entry.modality?`modality:${entry.modality}`:``;runtime.log([modelLabel,toolLabel,imageLabel,ctxLabel,paramsLabel,notes].join(` `))}}async function modelsScanCommand(opts,runtime){let minParams=opts.minParams?Number(opts.minParams):void 0;if(minParams!==void 0&&(!Number.isFinite(minParams)||minParams<0))throw Error(`--min-params must be >= 0`);let maxAgeDays=opts.maxAgeDays?Number(opts.maxAgeDays):void 0;if(maxAgeDays!==void 0&&(!Number.isFinite(maxAgeDays)||maxAgeDays<0))throw Error(`--max-age-days must be >= 0`);let maxCandidates=opts.maxCandidates?Number(opts.maxCandidates):6;if(!Number.isFinite(maxCandidates)||maxCandidates<=0)throw Error(`--max-candidates must be > 0`);let timeout=opts.timeout?Number(opts.timeout):void 0;if(timeout!==void 0&&(!Number.isFinite(timeout)||timeout<=0))throw Error(`--timeout must be > 0`);let concurrency=opts.concurrency?Number(opts.concurrency):void 0;if(concurrency!==void 0&&(!Number.isFinite(concurrency)||concurrency<=0))throw Error(`--concurrency must be > 0`);let cfg=loadConfig(),probe=opts.probe??!0,storedKey;if(probe)try{storedKey=(await resolveApiKeyForProvider({provider:`openrouter`,cfg})).apiKey}catch{storedKey=void 0}let results=await withProgressTotals({label:`Scanning OpenRouter models...`,indeterminate:!1,enabled:opts.json!==!0},async update=>await scanOpenRouterModels({apiKey:storedKey??void 0,minParamB:minParams,maxAgeDays,providerFilter:opts.provider,timeoutMs:timeout,concurrency,probe,onProgress:({phase,completed,total})=>{phase===`probe`&&update({completed,total,label:`${probe?`Probing models`:`Scanning models`} (${completed}/${total})`})}}));if(!probe){opts.json?runtime.log(JSON.stringify(results,null,2)):(runtime.log(`Found ${results.length} OpenRouter free models (metadata only; pass --probe to test tools/images).`),printScanTable(sortScanResults(results),runtime));return}let toolOk=results.filter(entry=>entry.tool.ok);if(toolOk.length===0)throw Error(`No tool-capable OpenRouter free models found.`);let sorted=sortScanResults(results),toolSorted=sortScanResults(toolOk),imageSorted=sortImageResults(results.filter(entry=>entry.image.ok)),imagePreferred=toolSorted.filter(entry=>entry.image.ok),preselected=(imagePreferred.length>0?imagePreferred:toolSorted).slice(0,Math.floor(maxCandidates)).map(entry=>entry.modelRef),imagePreselected=imageSorted.slice(0,Math.floor(maxCandidates)).map(entry=>entry.modelRef);opts.json||(printScanSummary(results,runtime),printScanTable(sorted,runtime));let noInput=opts.input===!1,canPrompt=process.stdin.isTTY&&!opts.yes&&!noInput&&!opts.json,selected=preselected,selectedImages=imagePreselected;if(canPrompt)selected=guardPromptCancel(await multiselect$1({message:`Select fallback models (ordered)`,options:toolSorted.map(entry=>({value:entry.modelRef,label:entry.modelRef,hint:buildScanHint(entry)})),initialValues:preselected}),runtime),imageSorted.length>0&&(selectedImages=guardPromptCancel(await multiselect$1({message:`Select image fallback models (ordered)`,options:imageSorted.map(entry=>({value:entry.modelRef,label:entry.modelRef,hint:buildScanHint(entry)})),initialValues:imagePreselected}),runtime));else if(!process.stdin.isTTY&&!opts.yes&&!noInput&&!opts.json)throw Error(`Non-interactive scan: pass --yes to apply defaults.`);if(selected.length===0)throw Error(`No models selected for fallbacks.`);if(opts.setImage&&selectedImages.length===0)throw Error(`No image-capable models selected for image model.`);if(await updateConfig(cfg=>{let nextModels={...cfg.agents?.defaults?.models};for(let entry of selected)nextModels[entry]||(nextModels[entry]={});for(let entry of selectedImages)nextModels[entry]||(nextModels[entry]={});let existingImageModel=cfg.agents?.defaults?.imageModel,nextImageModel=selectedImages.length>0?{...existingImageModel?.primary?{primary:existingImageModel.primary}:void 0,fallbacks:selectedImages,...opts.setImage?{primary:selectedImages[0]}:{}}:cfg.agents?.defaults?.imageModel,existingModel=cfg.agents?.defaults?.model,defaults={...cfg.agents?.defaults,model:{...existingModel?.primary?{primary:existingModel.primary}:void 0,fallbacks:selected,...opts.setDefault?{primary:selected[0]}:{}},...nextImageModel?{imageModel:nextImageModel}:{},models:nextModels};return{...cfg,agents:{...cfg.agents,defaults}}}),opts.json){runtime.log(JSON.stringify({selected,selectedImages,setDefault:!!opts.setDefault,setImage:!!opts.setImage,results,warnings:[]},null,2));return}logConfigUpdated(runtime),runtime.log(`Fallbacks: ${selected.join(`, `)}`),selectedImages.length>0&&runtime.log(`Image fallbacks: ${selectedImages.join(`, `)}`),opts.setDefault&&runtime.log(`Default model: ${selected[0]}`),opts.setImage&&selectedImages.length>0&&runtime.log(`Image model: ${selectedImages[0]}`)}async function modelsSetCommand(modelRaw,runtime){let updated=await updateConfig(cfg=>applyDefaultModelPrimaryUpdate({cfg,modelRaw,field:`model`}));logConfigUpdated(runtime),runtime.log(`Default model: ${updated.agents?.defaults?.model?.primary??modelRaw}`)}async function modelsSetImageCommand(modelRaw,runtime){let updated=await updateConfig(cfg=>applyDefaultModelPrimaryUpdate({cfg,modelRaw,field:`imageModel`}));logConfigUpdated(runtime),runtime.log(`Image model: ${updated.agents?.defaults?.imageModel?.primary??modelRaw}`)}export{modelsAliasesRemoveCommand as C,modelsAliasesListCommand as S,modelsAuthAddCommand as _,modelsListCommand as a,modelsAuthSetupTokenCommand as b,modelsImageFallbacksListCommand as c,modelsFallbacksClearCommand as d,modelsFallbacksListCommand as f,modelsAuthOrderSetCommand as g,modelsAuthOrderGetCommand as h,modelsStatusCommand as i,modelsImageFallbacksRemoveCommand as l,modelsAuthOrderClearCommand as m,modelsSetCommand as n,modelsImageFallbacksAddCommand as o,modelsFallbacksRemoveCommand as p,modelsScanCommand as r,modelsImageFallbacksClearCommand as s,modelsSetImageCommand as t,modelsFallbacksAddCommand as u,modelsAuthLoginCommand as v,modelsAliasesAddCommand as x,modelsAuthPasteTokenCommand as y};
|
|
1
|
+
import{t as CONFIG_PATH}from"./paths-BHg-VHB4.js";import{L as colorize,R as isRich$1,S as shortenHomePath,z as theme}from"./utils-BP60e80M.js";import{$t as getShellEnvAppliedKeys,F as modelKey,G as resolveModelRefFromString,Gt as getCustomProviderApiKey,H as resolveConfiguredModelRef,Jt as resolveAwsSdkEnvVarName,M as findNormalizedProviderValue,R as normalizeProviderId,T as resolveBuilderForceAgentsAgentDir,U as resolveDefaultModelForAgent,Yt as resolveEnvApiKey,_ as setAuthProfileOrder,_n as DEFAULT_PROVIDER,an as getEnvApiKey,b as ensureAuthProfileStore,gn as DEFAULT_MODEL,h as listProfilesForProvider,in as shouldEnableShellEnvFallback,j as buildModelAliasIndex,o as resolveProfileUnusableUntilForDisplay,on as getModel,qt as resolveApiKeyForProvider,t as resolveAuthProfileOrder,v as upsertAuthProfile,vn as resolveAuthProfileDisplayLabel,w as resolveAuthStorePathForDisplay,z as parseModelRef,zt as nativeComplete}from"./auth-profiles-pt7Tr4HA.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{a as resolveAgentModelFallbacksOverride,c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId,o as resolveAgentModelPrimary}from"./agent-scope-CufEmNj_.js";import{t as ensureAuthJsonFromAuthProfiles}from"./auth-json-wrKixZxh.js";import{r as loadConfig,y as parseDurationMs}from"./io-D9hC2aG0.js";import{a as ensureBuilderForceAgentsModelsJson,i as discoverModels,r as discoverAuthStorage}from"./model-discovery-D0i1JpiL.js";import{r as loadModelCatalog}from"./model-catalog-BeBXvbFm.js";import{An as maskApiKey,Gr as antigravityForwardCompatCandidates,Jr as describeFailoverError,Kr as resolveForwardCompatModel,Mn as buildAuthHealthSummary,Nn as formatRemainingShort,Wr as resolveModel,h as runEmbeddedAgent,jn as DEFAULT_OAUTH_WARN_MS}from"./subagent-registry-DDEN4oJi.js";import{i as resolveSessionTranscriptPath,s as resolveSessionTranscriptsDirForAgent}from"./paths-ClsbsPQP.js";import{i as resolveUsageProviderId,r as formatUsageWindowSummary,t as loadProviderUsageSummary}from"./provider-usage-B8lFHp0K.js";import{r as withProgressTotals}from"./progress-Cqb-jAjT.js";import{d as openUrl}from"./onboard-helpers-Ce_c4Raj.js";import{n as stylePromptMessage,r as stylePromptTitle,t as stylePromptHint}from"./prompt-style-BMWmaqSC.js";import{t as createClackPrompter}from"./clack-prompter-B52CP7eY.js";import{t as renderTable}from"./table-BFCCZDsp.js";import{t as inferParamBFromIdOrName}from"./model-param-b-B8jBqz40.js";import{n as redactSecrets}from"./format-BYLQK2kz.js";import{a as isLocalBaseUrl,c as normalizeAlias,d as resolveModelTarget,f as updateConfig,i as formatTokenK,l as resolveKnownAgentId,n as ensureFlagCompatibility,o as loadValidConfigOrThrow,r as formatMs,s as mergePrimaryFallbackConfig,t as applyDefaultModelPrimaryUpdate,u as resolveModelKeysFromEntries}from"./shared-BBOiNdjf.js";import{d as applyAuthProfileConfig,n as validateAnthropicSetupToken}from"./auth-token-BPHeoBAW.js";import{n as logConfigUpdated}from"./logging-ayt7F7vy.js";import{a as createVpsAwareOAuthHandlers,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-hNwpK_hl.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";import{Type}from"@sinclair/typebox";import{cancel,confirm,isCancel,multiselect,select,text}from"@clack/prompts";async function modelsAliasesListCommand(opts,runtime){ensureFlagCompatibility(opts);let models=loadConfig().agents?.defaults?.models??{},aliases=Object.entries(models).reduce((acc,[modelKey,entry])=>{let alias=entry?.alias?.trim();return alias&&(acc[alias]=modelKey),acc},{});if(opts.json){runtime.log(JSON.stringify({aliases},null,2));return}if(opts.plain){for(let[alias,target]of Object.entries(aliases))runtime.log(`${alias} ${target}`);return}if(runtime.log(`Aliases (${Object.keys(aliases).length}):`),Object.keys(aliases).length===0){runtime.log(`- none`);return}for(let[alias,target]of Object.entries(aliases))runtime.log(`- ${alias} -> ${target}`)}async function modelsAliasesAddCommand(aliasRaw,modelRaw,runtime){let alias=normalizeAlias(aliasRaw),resolved=resolveModelTarget({raw:modelRaw,cfg:loadConfig()});await updateConfig(cfg=>{let modelKey=`${resolved.provider}/${resolved.model}`,nextModels={...cfg.agents?.defaults?.models};for(let[key,entry]of Object.entries(nextModels)){let existing=entry?.alias?.trim();if(existing&&existing===alias&&key!==modelKey)throw Error(`Alias ${alias} already points to ${key}.`)}return nextModels[modelKey]={...nextModels[modelKey]??{},alias},{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,models:nextModels}}}}),logConfigUpdated(runtime),runtime.log(`Alias ${alias} -> ${resolved.provider}/${resolved.model}`)}async function modelsAliasesRemoveCommand(aliasRaw,runtime){let alias=normalizeAlias(aliasRaw),updated=await updateConfig(cfg=>{let nextModels={...cfg.agents?.defaults?.models},found=!1;for(let[key,entry]of Object.entries(nextModels))if(entry?.alias?.trim()===alias){nextModels[key]={...entry,alias:void 0},found=!0;break}if(!found)throw Error(`Alias not found: ${alias}`);return{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,models:nextModels}}}});logConfigUpdated(runtime),(!updated.agents?.defaults?.models||Object.values(updated.agents.defaults.models).every(entry=>!entry?.alias?.trim()))&&runtime.log(`No aliases configured.`)}const confirm$1=params=>confirm({...params,message:stylePromptMessage(params.message)}),text$1=params=>text({...params,message:stylePromptMessage(params.message)}),select$1=params=>select({...params,message:stylePromptMessage(params.message),options:params.options.map(opt=>opt.hint===void 0?opt:{...opt,hint:stylePromptHint(opt.hint)})});function resolveTokenProvider(raw){let trimmed=raw?.trim();return trimmed?normalizeProviderId(trimmed)===`anthropic`?`anthropic`:`custom`:null}function resolveDefaultTokenProfileId(provider){return`${normalizeProviderId(provider)}:manual`}async function modelsAuthSetupTokenCommand(opts,runtime){let provider=resolveTokenProvider(opts.provider??`anthropic`);if(provider!==`anthropic`)throw Error(`Only --provider anthropic is supported for setup-token.`);if(!process.stdin.isTTY)throw Error(`setup-token requires an interactive TTY.`);if(!opts.yes&&!await confirm$1({message:"Have you run `claude setup-token` and copied the token?",initialValue:!0}))return;let tokenInput=await text$1({message:`Paste Anthropic setup-token`,validate:value=>validateAnthropicSetupToken(String(value??``))}),token=String(tokenInput??``).trim(),profileId=resolveDefaultTokenProfileId(provider);await upsertAuthProfile({profileId,credential:{type:`token`,provider,token}}),await updateConfig(cfg=>applyAuthProfileConfig(cfg,{profileId,provider,mode:`token`})),logConfigUpdated(runtime),runtime.log(`Auth profile: ${profileId} (${provider}/token)`)}async function modelsAuthPasteTokenCommand(opts,runtime){let rawProvider=opts.provider?.trim();if(!rawProvider)throw Error(`Missing --provider.`);let provider=normalizeProviderId(rawProvider),profileId=opts.profileId?.trim()||resolveDefaultTokenProfileId(provider),tokenInput=await text$1({message:`Paste token for ${provider}`,validate:value=>value?.trim()?void 0:`Required`}),token=String(tokenInput??``).trim(),expires=opts.expiresIn?.trim()&&opts.expiresIn.trim().length>0?Date.now()+parseDurationMs(String(opts.expiresIn??``).trim(),{defaultUnit:`d`}):void 0;await upsertAuthProfile({profileId,credential:{type:`token`,provider,token,...expires?{expires}:{}}}),await updateConfig(cfg=>applyAuthProfileConfig(cfg,{profileId,provider,mode:`token`})),logConfigUpdated(runtime),runtime.log(`Auth profile: ${profileId} (${provider}/token)`)}async function modelsAuthAddCommand(_opts,runtime){let provider=await select$1({message:`Token provider`,options:[{value:`anthropic`,label:`anthropic`},{value:`custom`,label:`custom (type provider id)`}]}),providerId=provider===`custom`?normalizeProviderId(String(await text$1({message:`Provider id`,validate:value=>value?.trim()?void 0:`Required`}))):provider;if(await select$1({message:`Token method`,options:[...providerId===`anthropic`?[{value:`setup-token`,label:`setup-token (claude)`,hint:"Paste a setup-token from `claude setup-token`"}]:[],{value:`paste`,label:`paste token`}]})===`setup-token`){await modelsAuthSetupTokenCommand({provider:providerId},runtime);return}let profileIdDefault=resolveDefaultTokenProfileId(providerId);await modelsAuthPasteTokenCommand({provider:providerId,profileId:String(await text$1({message:`Profile id`,initialValue:profileIdDefault,validate:value=>value?.trim()?void 0:`Required`})).trim(),expiresIn:await confirm$1({message:`Does this token expire?`,initialValue:!1})?String(await text$1({message:`Expires in (duration)`,initialValue:`365d`,validate:value=>{try{parseDurationMs(String(value??``),{defaultUnit:`d`});return}catch{return`Invalid duration (e.g. 365d, 12h, 30m)`}}})).trim():void 0},runtime)}function resolveRequestedLoginProviderOrThrow(providers,rawProvider){let requested=rawProvider?.trim();if(!requested)return null;let matched=resolveProviderMatch(providers,requested);if(matched)return matched;let available=providers.map(provider=>provider.id).filter(Boolean).toSorted((a,b)=>a.localeCompare(b)),availableText=available.length>0?available.join(`, `):`(none)`;throw Error(`Unknown provider "${requested}". Loaded providers: ${availableText}. Verify plugins via \`${formatCliCommand(`builderforce plugins list --json`)}\`.`)}function credentialMode(credential){return credential.type===`api_key`?`api_key`:credential.type===`token`?`token`:`oauth`}async function modelsAuthLoginCommand(opts,runtime){if(!process.stdin.isTTY)throw Error(`models auth login requires an interactive TTY.`);let config=await loadValidConfigOrThrow(),defaultAgentId=resolveDefaultAgentId(config),agentDir=resolveAgentDir(config,defaultAgentId),workspaceDir=resolveAgentWorkspaceDir(config,defaultAgentId)??resolveDefaultAgentWorkspaceDir(),providers=resolvePluginProviders({config,workspaceDir});if(providers.length===0)throw Error(`No provider plugins found. Install one via \`${formatCliCommand(`builderforce plugins install`)}\`.`);let prompter=createClackPrompter(),selectedProvider=resolveRequestedLoginProviderOrThrow(providers,opts.provider)??await prompter.select({message:`Select a provider`,options:providers.map(provider=>({value:provider.id,label:provider.label,hint:provider.docsPath?`Docs: ${provider.docsPath}`:void 0}))}).then(id=>resolveProviderMatch(providers,String(id)));if(!selectedProvider)throw Error(`Unknown provider. Use --provider <id> to pick a provider plugin.`);let chosenMethod=pickAuthMethod(selectedProvider,opts.method)??(selectedProvider.auth.length===1?selectedProvider.auth[0]:await prompter.select({message:`Auth method for ${selectedProvider.label}`,options:selectedProvider.auth.map(method=>({value:method.id,label:method.label,hint:method.hint}))}).then(id=>selectedProvider.auth.find(method=>method.id===String(id))));if(!chosenMethod)throw Error(`Unknown auth method. Use --method <id> to select one.`);let isRemote=isRemoteEnvironment(),result=await chosenMethod.run({config,agentDir,workspaceDir,prompter,runtime,isRemote,openUrl:async url=>{await openUrl(url)},oauth:{createVpsAwareHandlers:params=>createVpsAwareOAuthHandlers(params)}});for(let profile of result.profiles)await upsertAuthProfile({profileId:profile.profileId,credential:profile.credential,agentDir});await updateConfig(cfg=>{let next=cfg;result.configPatch&&(next=mergeConfigPatch(next,result.configPatch));for(let profile of result.profiles)next=applyAuthProfileConfig(next,{profileId:profile.profileId,provider:profile.credential.provider,mode:credentialMode(profile.credential)});return opts.setDefault&&result.defaultModel&&(next=applyDefaultModel(next,result.defaultModel)),next}),logConfigUpdated(runtime);for(let profile of result.profiles)runtime.log(`Auth profile: ${profile.profileId} (${profile.credential.provider}/${credentialMode(profile.credential)})`);result.defaultModel&&runtime.log(opts.setDefault?`Default model set to ${result.defaultModel}`:`Default model available: ${result.defaultModel} (use --set-default to apply)`),result.notes&&result.notes.length>0&&await prompter.note(result.notes.join(`
|
|
2
|
+
`),`Provider notes`)}function resolveTargetAgent(cfg,raw){let agentId=resolveKnownAgentId({cfg,rawAgentId:raw})??resolveDefaultAgentId(cfg);return{agentId,agentDir:resolveAgentDir(cfg,agentId)}}function describeOrder(store,provider){let providerKey=normalizeProviderId(provider),order=store.order?.[providerKey];return Array.isArray(order)?order:[]}function resolveAuthOrderContext(opts){let rawProvider=opts.provider?.trim();if(!rawProvider)throw Error(`Missing --provider.`);let provider=normalizeProviderId(rawProvider),cfg=loadConfig(),{agentId,agentDir}=resolveTargetAgent(cfg,opts.agent);return{cfg,agentId,agentDir,provider}}async function modelsAuthOrderGetCommand(opts,runtime){let{agentId,agentDir,provider}=resolveAuthOrderContext(opts),order=describeOrder(await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),provider);if(opts.json){runtime.log(JSON.stringify({agentId,agentDir,provider,authStorePath:shortenHomePath(`${agentDir}/auth-profiles.json`),order:order.length>0?order:null},null,2));return}runtime.log(`Agent: ${agentId}`),runtime.log(`Provider: ${provider}`),runtime.log(`Auth file: ${shortenHomePath(`${agentDir}/auth-profiles.json`)}`),runtime.log(order.length>0?`Order override: ${order.join(`, `)}`:`Order override: (none)`)}async function modelsAuthOrderClearCommand(opts,runtime){let{agentId,agentDir,provider}=resolveAuthOrderContext(opts);if(!await setAuthProfileOrder({agentDir,provider,order:null}))throw Error(`Failed to update auth-profiles.json (lock busy?).`);runtime.log(`Agent: ${agentId}`),runtime.log(`Provider: ${provider}`),runtime.log(`Cleared per-agent order override.`)}async function modelsAuthOrderSetCommand(opts,runtime){let{agentId,agentDir,provider}=resolveAuthOrderContext(opts),store=await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),providerKey=provider,requested=(opts.order??[]).map(entry=>String(entry).trim()).filter(Boolean);if(requested.length===0)throw Error(`Missing profile ids. Provide one or more profile ids.`);for(let profileId of requested){let cred=store.profiles[profileId];if(!cred)throw Error(`Auth profile "${profileId}" not found in ${agentDir}.`);if(normalizeProviderId(cred.provider)!==providerKey)throw Error(`Auth profile "${profileId}" is for ${cred.provider}, not ${provider}.`)}let updated=await setAuthProfileOrder({agentDir,provider,order:requested});if(!updated)throw Error(`Failed to update auth-profiles.json (lock busy?).`);runtime.log(`Agent: ${agentId}`),runtime.log(`Provider: ${provider}`),runtime.log(`Order override: ${describeOrder(updated,provider).join(`, `)}`)}function getFallbacks(cfg,key){return cfg.agents?.defaults?.[key]?.fallbacks??[]}function patchDefaultsFallbacks(cfg,params){let existing=cfg.agents?.defaults?.[params.key];return{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,[params.key]:mergePrimaryFallbackConfig(existing,{fallbacks:params.fallbacks}),...params.models?{models:params.models}:void 0}}}}async function listFallbacksCommand(params,opts,runtime){ensureFlagCompatibility(opts);let fallbacks=getFallbacks(loadConfig(),params.key);if(opts.json){runtime.log(JSON.stringify({fallbacks},null,2));return}if(opts.plain){for(let entry of fallbacks)runtime.log(entry);return}if(runtime.log(`${params.label} (${fallbacks.length}):`),fallbacks.length===0){runtime.log(`- none`);return}for(let entry of fallbacks)runtime.log(`- ${entry}`)}async function addFallbackCommand(params,modelRaw,runtime){let updated=await updateConfig(cfg=>{let resolved=resolveModelTarget({raw:modelRaw,cfg}),targetKey=modelKey(resolved.provider,resolved.model),nextModels={...cfg.agents?.defaults?.models};nextModels[targetKey]||(nextModels[targetKey]={});let existing=getFallbacks(cfg,params.key);return resolveModelKeysFromEntries({cfg,entries:existing}).includes(targetKey)?cfg:patchDefaultsFallbacks(cfg,{key:params.key,fallbacks:[...existing,targetKey],models:nextModels})});logConfigUpdated(runtime),runtime.log(`${params.logPrefix}: ${getFallbacks(updated,params.key).join(`, `)}`)}async function removeFallbackCommand(params,modelRaw,runtime){let updated=await updateConfig(cfg=>{let resolved=resolveModelTarget({raw:modelRaw,cfg}),targetKey=modelKey(resolved.provider,resolved.model),aliasIndex=buildModelAliasIndex({cfg,defaultProvider:DEFAULT_PROVIDER}),existing=getFallbacks(cfg,params.key),filtered=existing.filter(entry=>{let resolvedEntry=resolveModelRefFromString({raw:String(entry??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex});return resolvedEntry?modelKey(resolvedEntry.ref.provider,resolvedEntry.ref.model)!==targetKey:!0});if(filtered.length===existing.length)throw Error(`${params.notFoundLabel} not found: ${targetKey}`);return patchDefaultsFallbacks(cfg,{key:params.key,fallbacks:filtered})});logConfigUpdated(runtime),runtime.log(`${params.logPrefix}: ${getFallbacks(updated,params.key).join(`, `)}`)}async function clearFallbacksCommand(params,runtime){await updateConfig(cfg=>patchDefaultsFallbacks(cfg,{key:params.key,fallbacks:[]})),logConfigUpdated(runtime),runtime.log(params.clearedMessage)}async function modelsFallbacksListCommand(opts,runtime){return await listFallbacksCommand({label:`Fallbacks`,key:`model`},opts,runtime)}async function modelsFallbacksAddCommand(modelRaw,runtime){return await addFallbackCommand({label:`Fallbacks`,key:`model`,logPrefix:`Fallbacks`},modelRaw,runtime)}async function modelsFallbacksRemoveCommand(modelRaw,runtime){return await removeFallbackCommand({label:`Fallbacks`,key:`model`,notFoundLabel:`Fallback`,logPrefix:`Fallbacks`},modelRaw,runtime)}async function modelsFallbacksClearCommand(runtime){return await clearFallbacksCommand({key:`model`,clearedMessage:`Fallback list cleared.`},runtime)}async function modelsImageFallbacksListCommand(opts,runtime){return await listFallbacksCommand({label:`Image fallbacks`,key:`imageModel`},opts,runtime)}async function modelsImageFallbacksAddCommand(modelRaw,runtime){return await addFallbackCommand({label:`Image fallbacks`,key:`imageModel`,logPrefix:`Image fallbacks`},modelRaw,runtime)}async function modelsImageFallbacksRemoveCommand(modelRaw,runtime){return await removeFallbackCommand({label:`Image fallbacks`,key:`imageModel`,notFoundLabel:`Image fallback`,logPrefix:`Image fallbacks`},modelRaw,runtime)}async function modelsImageFallbacksClearCommand(runtime){return await clearFallbacksCommand({key:`imageModel`,clearedMessage:`Image fallback list cleared.`},runtime)}function resolveConfiguredEntries(cfg){let resolvedDefault=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),aliasIndex=buildModelAliasIndex({cfg,defaultProvider:DEFAULT_PROVIDER}),order=[],tagsByKey=new Map,aliasesByKey=new Map;for(let[key,aliases]of aliasIndex.byKey.entries())aliasesByKey.set(key,aliases);let addEntry=(ref,tag)=>{let key=modelKey(ref.provider,ref.model);tagsByKey.has(key)||(tagsByKey.set(key,new Set),order.push(key)),tagsByKey.get(key)?.add(tag)};addEntry(resolvedDefault,`default`);let modelConfig=cfg.agents?.defaults?.model,imageModelConfig=cfg.agents?.defaults?.imageModel,modelFallbacks=typeof modelConfig==`object`?modelConfig?.fallbacks??[]:[],imageFallbacks=typeof imageModelConfig==`object`?imageModelConfig?.fallbacks??[]:[],imagePrimary=imageModelConfig?.primary?.trim()??``;if(modelFallbacks.forEach((raw,idx)=>{let resolved=resolveModelRefFromString({raw:String(raw??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex});resolved&&addEntry(resolved.ref,`fallback#${idx+1}`)}),imagePrimary){let resolved=resolveModelRefFromString({raw:imagePrimary,defaultProvider:DEFAULT_PROVIDER,aliasIndex});resolved&&addEntry(resolved.ref,`image`)}imageFallbacks.forEach((raw,idx)=>{let resolved=resolveModelRefFromString({raw:String(raw??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex});resolved&&addEntry(resolved.ref,`img-fallback#${idx+1}`)});for(let key of Object.keys(cfg.agents?.defaults?.models??{})){let parsed=parseModelRef(String(key??``),DEFAULT_PROVIDER);parsed&&addEntry(parsed,`configured`)}return{entries:order.map(key=>{let slash=key.indexOf(`/`);return{key,ref:{provider:slash===-1?key:key.slice(0,slash),model:slash===-1?``:key.slice(slash+1)},tags:tagsByKey.get(key)??new Set,aliases:aliasesByKey.get(key)??[]}})}}const MODEL_AVAILABILITY_UNAVAILABLE_CODE=`MODEL_AVAILABILITY_UNAVAILABLE`;function formatErrorWithStack(err){return err instanceof Error?err.stack??`${err.name}: ${err.message}`:String(err)}function shouldFallbackToAuthHeuristics(err){return err instanceof Error?err.code===MODEL_AVAILABILITY_UNAVAILABLE_CODE:!1}const hasAuthForProvider=(provider,cfg,authStore)=>!cfg||!authStore?!1:!!(listProfilesForProvider(authStore,provider).length>0||provider===`amazon-bedrock`&&resolveAwsSdkEnvVarName()||resolveEnvApiKey(provider)||getCustomProviderApiKey(cfg,provider));function createAvailabilityUnavailableError(message){let err=Error(message);return err.code=MODEL_AVAILABILITY_UNAVAILABLE_CODE,err}function normalizeAvailabilityError(err){return shouldFallbackToAuthHeuristics(err)&&err instanceof Error?err:createAvailabilityUnavailableError(`Model availability unavailable: getAvailable() failed.\n${formatErrorWithStack(err)}`)}function validateAvailableModels(availableModels){if(!Array.isArray(availableModels))throw createAvailabilityUnavailableError(`Model availability unavailable: getAvailable() returned a non-array value.`);for(let model of availableModels)if(!model||typeof model!=`object`||typeof model.provider!=`string`||typeof model.id!=`string`)throw createAvailabilityUnavailableError(`Model availability unavailable: getAvailable() returned invalid model entries.`);return availableModels}function loadAvailableModels(registry){let availableModels;try{availableModels=registry.getAvailable()}catch(err){throw normalizeAvailabilityError(err)}try{return validateAvailableModels(availableModels)}catch(err){throw normalizeAvailabilityError(err)}}async function loadModelRegistry(cfg){await ensureBuilderForceAgentsModelsJson(cfg);let agentDir=resolveBuilderForceAgentsAgentDir();await ensureAuthJsonFromAuthProfiles(agentDir);let registry=discoverModels(discoverAuthStorage(agentDir),agentDir),appended=appendAntigravityForwardCompatModels(registry.getAll(),registry),models=appended.models,synthesizedForwardCompat=appended.synthesizedForwardCompat,availableKeys,availabilityErrorMessage;try{let availableModels=loadAvailableModels(registry);availableKeys=new Set(availableModels.map(model=>modelKey(model.provider,model.id)));for(let synthesized of synthesizedForwardCompat)hasAvailableTemplate(availableKeys,synthesized.templateKeys)&&availableKeys.add(synthesized.key)}catch(err){if(!shouldFallbackToAuthHeuristics(err))throw err;availableKeys=void 0,availabilityErrorMessage||=formatErrorWithStack(err)}return{registry,models,availableKeys,availabilityErrorMessage}}function appendAntigravityForwardCompatModels(models,modelRegistry){let nextModels=[...models],synthesizedForwardCompat=[];for(let candidate of antigravityForwardCompatCandidates()){let key=modelKey(`google-antigravity`,candidate.id);if(nextModels.some(model=>modelKey(model.provider,model.id)===key))continue;let fallback=resolveForwardCompatModel(`google-antigravity`,candidate.id,modelRegistry);fallback&&(nextModels.push(fallback),synthesizedForwardCompat.push({key,templateKeys:candidate.templateKeys}))}return{models:nextModels,synthesizedForwardCompat}}const DATED_SNAPSHOT=/^-\d{8}$/;function hasAvailableTemplate(availableKeys,templateKeys){for(let key of availableKeys)if(templateKeys.some(template=>key===template||key.startsWith(template)&&DATED_SNAPSHOT.test(key.slice(template.length))))return!0;return!1}function toModelRow(params){let{model,key,tags,aliases=[],availableKeys,cfg,authStore}=params;if(!model)return{key,name:key,input:`-`,contextWindow:null,local:null,available:null,tags:[...tags,`missing`],missing:!0};let input=model.input.join(`+`)||`text`,local=isLocalBaseUrl(model.baseUrl),available=availableKeys===void 0?cfg&&authStore?hasAuthForProvider(model.provider,cfg,authStore):!1:availableKeys.has(modelKey(model.provider,model.id)),aliasTags=aliases.length>0?[`alias:${aliases.join(`,`)}`]:[],mergedTags=new Set(tags);if(aliasTags.length>0){for(let tag of mergedTags)(tag===`alias`||tag.startsWith(`alias:`))&&mergedTags.delete(tag);for(let tag of aliasTags)mergedTags.add(tag)}return{key,name:model.name||model.id,input,contextWindow:model.contextWindow??null,local,available,tags:Array.from(mergedTags),missing:!1}}const isRich=opts=>!!(isRich$1()&&!opts?.json&&!opts?.plain),pad=(value,size)=>value.padEnd(size),formatTag=(tag,rich)=>rich?tag===`default`?theme.success(tag):tag===`image`?theme.accentBright(tag):tag===`configured`?theme.accent(tag):tag===`missing`?theme.error(tag):tag.startsWith(`fallback#`)||tag.startsWith(`img-fallback#`)?theme.warn(tag):tag.startsWith(`alias:`)?theme.accentDim(tag):theme.muted(tag):tag,truncate=(value,max)=>value.length<=max?value:max<=3?value.slice(0,max):`${value.slice(0,max-3)}...`;function printModelTable(rows,runtime,opts={}){if(opts.json){runtime.log(JSON.stringify({count:rows.length,models:rows},null,2));return}if(opts.plain){for(let row of rows)runtime.log(row.key);return}let rich=isRich(opts),header=[pad(`Model`,42),pad(`Input`,10),pad(`Ctx`,8),pad(`Local`,5),pad(`Auth`,5),`Tags`].join(` `);runtime.log(rich?theme.heading(header):header);for(let row of rows){let keyLabel=pad(truncate(row.key,42),42),inputLabel=pad(row.input||`-`,10),ctxLabel=pad(formatTokenK(row.contextWindow),8),localLabel=pad(row.local===null?`-`:row.local?`yes`:`no`,5),authLabel=pad(row.available===null?`-`:row.available?`yes`:`no`,5),tagsLabel=row.tags.length>0?rich?row.tags.map(tag=>formatTag(tag,rich)).join(`,`):row.tags.join(`,`):``,coloredInput=colorize(rich,row.input.includes(`image`)?theme.accentBright:theme.info,inputLabel),coloredLocal=colorize(rich,row.local===null?theme.muted:row.local?theme.success:theme.muted,localLabel),coloredAuth=colorize(rich,row.available===null?theme.muted:row.available?theme.success:theme.error,authLabel),line=[rich?theme.accent(keyLabel):keyLabel,coloredInput,ctxLabel,coloredLocal,coloredAuth,tagsLabel].join(` `);runtime.log(line)}}async function modelsListCommand(opts,runtime){ensureFlagCompatibility(opts);let{loadConfig}=await import(`./config-Dsnbi-a3.js`),cfg=loadConfig(),authStore=await ensureAuthProfileStore(),providerFilter=(()=>{let raw=opts.provider?.trim();if(raw)return parseModelRef(`${raw}/_`,DEFAULT_PROVIDER)?.provider??raw.toLowerCase()})(),models=[],modelRegistry,availableKeys,availabilityErrorMessage;try{let loaded=await loadModelRegistry(cfg);modelRegistry=loaded.registry,models=loaded.models,availableKeys=loaded.availableKeys,availabilityErrorMessage=loaded.availabilityErrorMessage}catch(err){runtime.error(`Model registry unavailable:\n${formatErrorWithStack(err)}`),process.exitCode=1;return}availabilityErrorMessage!==void 0&&runtime.error(`Model availability lookup failed; falling back to auth heuristics for discovered models: ${availabilityErrorMessage}`);let modelByKey=new Map(models.map(model=>[modelKey(model.provider,model.id),model])),{entries}=resolveConfiguredEntries(cfg),configuredByKey=new Map(entries.map(entry=>[entry.key,entry])),rows=[];if(opts.all){let sorted=[...models].toSorted((a,b)=>{let p=a.provider.localeCompare(b.provider);return p===0?a.id.localeCompare(b.id):p});for(let model of sorted){if(providerFilter&&model.provider.toLowerCase()!==providerFilter||opts.local&&!isLocalBaseUrl(model.baseUrl))continue;let key=modelKey(model.provider,model.id),configured=configuredByKey.get(key);rows.push(toModelRow({model,key,tags:configured?Array.from(configured.tags):[],aliases:configured?.aliases??[],availableKeys,cfg,authStore}))}}else for(let entry of entries){if(providerFilter&&entry.ref.provider.toLowerCase()!==providerFilter)continue;let model=modelByKey.get(entry.key);if(!model&&modelRegistry){let forwardCompat=resolveForwardCompatModel(entry.ref.provider,entry.ref.model,modelRegistry);forwardCompat&&(model=forwardCompat,modelByKey.set(entry.key,forwardCompat))}model||=resolveModel(entry.ref.provider,entry.ref.model,void 0,cfg).model,!(opts.local&&model&&!isLocalBaseUrl(model.baseUrl))&&(opts.local&&!model||rows.push(toModelRow({model,key:entry.key,tags:Array.from(entry.tags),aliases:entry.aliases,availableKeys,cfg,authStore})))}if(rows.length===0){runtime.log(`No models found.`);return}printModelTable(rows,runtime,opts)}function resolveProviderAuthOverview(params){let{provider,cfg,store}=params,now=Date.now(),profiles=listProfilesForProvider(store,provider),withUnusableSuffix=(base,profileId)=>{let unusableUntil=resolveProfileUnusableUntilForDisplay(store,profileId);if(!unusableUntil||now>=unusableUntil)return base;let stats=store.usageStats?.[profileId];return`${base} [${typeof stats?.disabledUntil==`number`&&now<stats.disabledUntil?`disabled${stats.disabledReason?`:${stats.disabledReason}`:``}`:`cooldown`} ${formatRemainingShort(unusableUntil-now)}]`},labels=profiles.map(profileId=>{let profile=store.profiles[profileId];if(!profile)return`${profileId}=missing`;if(profile.type===`api_key`)return withUnusableSuffix(`${profileId}=${maskApiKey(profile.key??``)}`,profileId);if(profile.type===`token`)return withUnusableSuffix(`${profileId}=token:${maskApiKey(profile.token)}`,profileId);let display=resolveAuthProfileDisplayLabel({cfg,store,profileId}),suffix=display===profileId?``:display.startsWith(profileId)?display.slice(profileId.length).trim():`(${display})`;return withUnusableSuffix(`${profileId}=OAuth${suffix?` ${suffix}`:``}`,profileId)}),oauthCount=profiles.filter(id=>store.profiles[id]?.type===`oauth`).length,tokenCount=profiles.filter(id=>store.profiles[id]?.type===`token`).length,apiKeyCount=profiles.filter(id=>store.profiles[id]?.type===`api_key`).length,envKey=resolveEnvApiKey(provider),customKey=getCustomProviderApiKey(cfg,provider);return{provider,effective:profiles.length>0?{kind:`profiles`,detail:shortenHomePath(resolveAuthStorePathForDisplay())}:envKey?{kind:`env`,detail:envKey.source.includes(`OAUTH_TOKEN`)||envKey.source.toLowerCase().includes(`oauth`)?`OAuth (env)`:maskApiKey(envKey.apiKey)}:customKey?{kind:`models.json`,detail:maskApiKey(customKey)}:{kind:`missing`,detail:`missing`},profiles:{count:profiles.length,oauth:oauthCount,token:tokenCount,apiKey:apiKeyCount,labels},...envKey?{env:{value:envKey.source.includes(`OAUTH_TOKEN`)||envKey.source.toLowerCase().includes(`oauth`)?`OAuth (env)`:maskApiKey(envKey.apiKey),source:envKey.source}}:{},...customKey?{modelsJson:{value:maskApiKey(customKey),source:`models.json: ${shortenHomePath(params.modelsPath)}`}}:{}}}const toStatus=reason=>reason?reason===`auth`?`auth`:reason===`rate_limit`?`rate_limit`:reason===`billing`?`billing`:reason===`timeout`?`timeout`:reason===`format`?`format`:`unknown`:`unknown`;function buildCandidateMap(modelCandidates){let map=new Map;for(let raw of modelCandidates){let parsed=parseModelRef(String(raw??``),DEFAULT_PROVIDER);if(!parsed)continue;let list=map.get(parsed.provider)??[];list.includes(parsed.model)||list.push(parsed.model),map.set(parsed.provider,list)}return map}function selectProbeModel(params){let{provider,candidates,catalog}=params,direct=candidates.get(provider);if(direct&&direct.length>0)return{provider,model:direct[0]};let fromCatalog=catalog.find(entry=>entry.provider===provider);return fromCatalog?{provider:fromCatalog.provider,model:fromCatalog.id}:null}async function buildProbeTargets(params){let{cfg,providers,modelCandidates,options}=params,store=await ensureAuthProfileStore(),providerFilter=options.provider?.trim(),providerFilterKey=providerFilter?normalizeProviderId(providerFilter):null,profileFilter=new Set((options.profileIds??[]).map(id=>id.trim()).filter(Boolean));return loadModelCatalog({config:cfg}).then(catalog=>{let candidates=buildCandidateMap(modelCandidates),targets=[],results=[];for(let provider of providers){let providerKey=normalizeProviderId(provider);if(providerFilterKey&&providerKey!==providerFilterKey)continue;let model=selectProbeModel({provider:providerKey,candidates,catalog}),profileIds=listProfilesForProvider(store,providerKey),explicitOrder=findNormalizedProviderValue(store.order,providerKey)??findNormalizedProviderValue(cfg?.auth?.order,providerKey),allowedProfiles=explicitOrder&&explicitOrder.length>0?new Set(resolveAuthProfileOrder({cfg,store,provider:providerKey})):null,filteredProfiles=profileFilter.size?profileIds.filter(id=>profileFilter.has(id)):profileIds;if(filteredProfiles.length>0){for(let profileId of filteredProfiles){let mode=store.profiles[profileId]?.type,label=resolveAuthProfileDisplayLabel({cfg,store,profileId});if(explicitOrder&&!explicitOrder.includes(profileId)){results.push({provider:providerKey,model:model?`${model.provider}/${model.model}`:void 0,profileId,label,source:`profile`,mode,status:`unknown`,error:`Excluded by auth.order for this provider.`});continue}if(allowedProfiles&&!allowedProfiles.has(profileId)){results.push({provider:providerKey,model:model?`${model.provider}/${model.model}`:void 0,profileId,label,source:`profile`,mode,status:`unknown`,error:`Auth profile credentials are missing or expired.`});continue}if(!model){results.push({provider:providerKey,model:void 0,profileId,label,source:`profile`,mode,status:`no_model`,error:`No model available for probe`});continue}targets.push({provider:providerKey,model,profileId,label,source:`profile`,mode})}continue}if(profileFilter.size>0)continue;let envKey=resolveEnvApiKey(providerKey),customKey=getCustomProviderApiKey(cfg,providerKey);if(!envKey&&!customKey)continue;let label=envKey?`env`:`models.json`,source=envKey?`env`:`models.json`,mode=envKey?.source.includes(`OAUTH_TOKEN`)?`oauth`:`api_key`;if(!model){results.push({provider:providerKey,model:void 0,label,source,mode,status:`no_model`,error:`No model available for probe`});continue}targets.push({provider:providerKey,model,label,source,mode})}return{targets,results}})}async function probeTarget(params){let{cfg,agentId,agentDir,workspaceDir,sessionDir,target,timeoutMs,maxTokens}=params;if(!target.model)return{provider:target.provider,model:void 0,profileId:target.profileId,label:target.label,source:target.source,mode:target.mode,status:`no_model`,error:`No model available for probe`};let sessionId=`probe-${target.provider}-${crypto.randomUUID()}`,sessionFile=resolveSessionTranscriptPath(sessionId,agentId);await fs.mkdir(sessionDir,{recursive:!0});let start=Date.now();try{return await runEmbeddedAgent({sessionId,sessionFile,agentId,workspaceDir,agentDir,config:cfg,prompt:`Reply with OK. Do not use tools.`,provider:target.model.provider,model:target.model.model,authProfileId:target.profileId,authProfileIdSource:target.profileId?`user`:void 0,timeoutMs,runId:`probe-${crypto.randomUUID()}`,lane:`auth-probe:${target.provider}:${target.profileId??target.source}`,thinkLevel:`off`,reasoningLevel:`off`,verboseLevel:`off`,streamParams:{maxTokens}}),{provider:target.provider,model:`${target.model.provider}/${target.model.model}`,profileId:target.profileId,label:target.label,source:target.source,mode:target.mode,status:`ok`,latencyMs:Date.now()-start}}catch(err){let described=describeFailoverError(err);return{provider:target.provider,model:`${target.model.provider}/${target.model.model}`,profileId:target.profileId,label:target.label,source:target.source,mode:target.mode,status:toStatus(described.reason),error:redactSecrets(described.message),latencyMs:Date.now()-start}}}async function runTargetsWithConcurrency(params){let{cfg,targets,timeoutMs,maxTokens,onProgress}=params,concurrency=Math.max(1,Math.min(targets.length||1,params.concurrency)),agentId=resolveDefaultAgentId(cfg),agentDir=resolveBuilderForceAgentsAgentDir(),workspaceDir=resolveAgentWorkspaceDir(cfg,agentId)??resolveDefaultAgentWorkspaceDir(),sessionDir=resolveSessionTranscriptsDirForAgent(agentId);await fs.mkdir(workspaceDir,{recursive:!0});let completed=0,results=Array.from({length:targets.length}),cursor=0,worker=async()=>{for(;;){let index=cursor;if(cursor+=1,index>=targets.length)return;let target=targets[index];onProgress?.({completed,total:targets.length,label:`Probing ${target.provider}${target.profileId?` (${target.label})`:``}`}),results[index]=await probeTarget({cfg,agentId,agentDir,workspaceDir,sessionDir,target,timeoutMs,maxTokens}),completed+=1,onProgress?.({completed,total:targets.length})}};return await Promise.all(Array.from({length:concurrency},()=>worker())),results.filter(entry=>!!entry)}async function runAuthProbes(params){let startedAt=Date.now(),plan=await buildProbeTargets({cfg:params.cfg,providers:params.providers,modelCandidates:params.modelCandidates,options:params.options}),totalTargets=plan.targets.length;params.onProgress?.({completed:0,total:totalTargets});let results=totalTargets?await runTargetsWithConcurrency({cfg:params.cfg,targets:plan.targets,timeoutMs:params.options.timeoutMs,maxTokens:params.options.maxTokens,concurrency:params.options.concurrency,onProgress:params.onProgress}):[],finishedAt=Date.now();return{startedAt,finishedAt,durationMs:finishedAt-startedAt,totalTargets,options:params.options,results:[...plan.results,...results]}}function formatProbeLatency(latencyMs){return!latencyMs&&latencyMs!==0?`-`:formatMs(latencyMs)}function sortProbeResults(results){return results.slice().toSorted((a,b)=>{let provider=a.provider.localeCompare(b.provider);if(provider!==0)return provider;let aLabel=a.label||a.profileId||``,bLabel=b.label||b.profileId||``;return aLabel.localeCompare(bLabel)})}function describeProbeSummary(summary){return summary.totalTargets===0?`No probe targets.`:`Probed ${summary.totalTargets} target${summary.totalTargets===1?``:`s`} in ${formatMs(summary.durationMs)}`}async function modelsStatusCommand(opts,runtime){if(ensureFlagCompatibility(opts),opts.plain&&opts.probe)throw Error(`--probe cannot be used with --plain output.`);let cfg=loadConfig(),agentId=resolveKnownAgentId({cfg,rawAgentId:opts.agent}),agentDir=agentId?resolveAgentDir(cfg,agentId):resolveBuilderForceAgentsAgentDir(),agentModelPrimary=agentId?resolveAgentModelPrimary(cfg,agentId):void 0,agentFallbacksOverride=agentId?resolveAgentModelFallbacksOverride(cfg,agentId):void 0,resolved=agentId?resolveDefaultModelForAgent({cfg,agentId}):resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),modelConfig=cfg.agents?.defaults?.model,imageConfig=cfg.agents?.defaults?.imageModel,rawDefaultsModel=typeof modelConfig==`string`?modelConfig.trim():modelConfig?.primary?.trim()??``,rawModel=agentModelPrimary??rawDefaultsModel,resolvedLabel=`${resolved.provider}/${resolved.model}`,defaultLabel=rawModel||resolvedLabel,defaultsFallbacks=typeof modelConfig==`object`?modelConfig?.fallbacks??[]:[],fallbacks=agentFallbacksOverride??defaultsFallbacks,imageModel=typeof imageConfig==`string`?imageConfig.trim():imageConfig?.primary?.trim()??``,imageFallbacks=typeof imageConfig==`object`?imageConfig?.fallbacks??[]:[],aliases=Object.entries(cfg.agents?.defaults?.models??{}).reduce((acc,[key,entry])=>{let alias=typeof entry?.alias==`string`?entry.alias.trim():void 0;return alias&&(acc[alias]=key),acc},{}),allowed=Object.keys(cfg.agents?.defaults?.models??{}),store=await ensureAuthProfileStore(agentDir),modelsPath=path.join(agentDir,`models.json`),providersFromStore=new Set(Object.values(store.profiles).map(profile=>profile.provider).filter(p=>!!p)),providersFromConfig=new Set(Object.keys(cfg.models?.providers??{}).map(p=>typeof p==`string`?p.trim():``).filter(Boolean)),providersFromModels=new Set,providersInUse=new Set;for(let raw of[defaultLabel,...fallbacks,imageModel,...imageFallbacks,...allowed]){let parsed=parseModelRef(String(raw??``),DEFAULT_PROVIDER);parsed?.provider&&providersFromModels.add(parsed.provider)}for(let raw of[defaultLabel,...fallbacks,imageModel,...imageFallbacks]){let parsed=parseModelRef(String(raw??``),DEFAULT_PROVIDER);parsed?.provider&&providersInUse.add(parsed.provider)}let providersFromEnv=new Set;for(let provider of[`anthropic`,`github-copilot`,`google-vertex`,`openai`,`google`,`groq`,`cerebras`,`xai`,`openrouter`,`zai`,`mistral`,`synthetic`])resolveEnvApiKey(provider)&&providersFromEnv.add(provider);let providers=Array.from(new Set([...providersFromStore,...providersFromConfig,...providersFromModels,...providersFromEnv])).map(p=>typeof p==`string`?p.trim():``).filter(Boolean).toSorted((a,b)=>a.localeCompare(b)),applied=getShellEnvAppliedKeys(),shellFallbackEnabled=shouldEnableShellEnvFallback(process.env)||cfg.env?.shellEnv?.enabled===!0,providerAuth=providers.map(provider=>resolveProviderAuthOverview({provider,cfg,store,modelsPath})).filter(entry=>entry.profiles.count>0||!!entry.env||!!entry.modelsJson),providerAuthMap=new Map(providerAuth.map(entry=>[entry.provider,entry])),missingProvidersInUse=Array.from(providersInUse).filter(provider=>!providerAuthMap.has(provider)).toSorted((a,b)=>a.localeCompare(b)),probeProfileIds=opts.probeProfile?(Array.isArray(opts.probeProfile)?opts.probeProfile:[opts.probeProfile]).flatMap(value=>String(value??``).split(`,`)).map(value=>value.trim()).filter(Boolean):[],probeTimeoutMs=opts.probeTimeout?Number(opts.probeTimeout):8e3;if(!Number.isFinite(probeTimeoutMs)||probeTimeoutMs<=0)throw Error(`--probe-timeout must be a positive number (ms).`);let probeConcurrency=opts.probeConcurrency?Number(opts.probeConcurrency):2;if(!Number.isFinite(probeConcurrency)||probeConcurrency<=0)throw Error(`--probe-concurrency must be > 0.`);let probeMaxTokens=opts.probeMaxTokens?Number(opts.probeMaxTokens):8;if(!Number.isFinite(probeMaxTokens)||probeMaxTokens<=0)throw Error(`--probe-max-tokens must be > 0.`);let aliasIndex=buildModelAliasIndex({cfg,defaultProvider:DEFAULT_PROVIDER}),modelCandidates=[rawModel||resolvedLabel,...fallbacks,imageModel,...imageFallbacks,...allowed].filter(Boolean).map(raw=>resolveModelRefFromString({raw:String(raw??``),defaultProvider:DEFAULT_PROVIDER,aliasIndex})?.ref).filter(ref=>!!ref).map(ref=>`${ref.provider}/${ref.model}`),probeSummary;opts.probe&&(probeSummary=await withProgressTotals({label:`Probing auth profiles…`,total:1},async update=>await runAuthProbes({cfg,providers,modelCandidates,options:{provider:opts.probeProvider,profileIds:probeProfileIds,timeoutMs:probeTimeoutMs,concurrency:probeConcurrency,maxTokens:probeMaxTokens},onProgress:update})));let providersWithOauth=providerAuth.filter(entry=>entry.profiles.oauth>0||entry.profiles.token>0||entry.env?.value===`OAuth (env)`).map(entry=>{let count=entry.profiles.oauth+entry.profiles.token+(entry.env?.value===`OAuth (env)`?1:0);return`${entry.provider} (${count})`}),authHealth=buildAuthHealthSummary({store,cfg,warnAfterMs:DEFAULT_OAUTH_WARN_MS,providers}),oauthProfiles=authHealth.profiles.filter(profile=>profile.type===`oauth`||profile.type===`token`),unusableProfiles=(()=>{let now=Date.now(),out=[];for(let profileId of Object.keys(store.usageStats??{})){let unusableUntil=resolveProfileUnusableUntilForDisplay(store,profileId);if(!unusableUntil||now>=unusableUntil)continue;let stats=store.usageStats?.[profileId],kind=typeof stats?.disabledUntil==`number`&&now<stats.disabledUntil?`disabled`:`cooldown`;out.push({profileId,provider:store.profiles[profileId]?.provider,kind,reason:stats?.disabledReason,until:unusableUntil,remainingMs:unusableUntil-now})}return out.toSorted((a,b)=>a.remainingMs-b.remainingMs)})(),checkStatus=(()=>{let hasExpiredOrMissing=oauthProfiles.some(profile=>[`expired`,`missing`].includes(profile.status))||missingProvidersInUse.length>0,hasExpiring=oauthProfiles.some(profile=>profile.status===`expiring`);return hasExpiredOrMissing?1:hasExpiring?2:0})();if(opts.json){runtime.log(JSON.stringify({configPath:CONFIG_PATH,...agentId?{agentId}:{},agentDir,defaultModel:defaultLabel,resolvedDefault:resolvedLabel,fallbacks,imageModel:imageModel||null,imageFallbacks,...agentId?{modelConfig:{defaultSource:agentModelPrimary?`agent`:`defaults`,fallbacksSource:agentFallbacksOverride===void 0?`defaults`:`agent`}}:{},aliases,allowed,auth:{storePath:resolveAuthStorePathForDisplay(agentDir),shellEnvFallback:{enabled:shellFallbackEnabled,appliedKeys:applied},providersWithOAuth:providersWithOauth,missingProvidersInUse,providers:providerAuth,unusableProfiles,oauth:{warnAfterMs:authHealth.warnAfterMs,profiles:authHealth.profiles,providers:authHealth.providers},probes:probeSummary}},null,2)),opts.check&&runtime.exit(checkStatus);return}if(opts.plain){runtime.log(resolvedLabel),opts.check&&runtime.exit(checkStatus);return}let rich=isRich(opts),label=value=>colorize(rich,theme.accent,value.padEnd(14)),labelWithSource=(value,source)=>label(source?`${value} (${source})`:value),displayDefault=rawModel&&rawModel!==resolvedLabel?`${resolvedLabel} (from ${rawModel})`:resolvedLabel;runtime.log(`${label(`Config`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.info,shortenHomePath(CONFIG_PATH))}`),runtime.log(`${label(`Agent dir`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.info,shortenHomePath(agentDir))}`),runtime.log(`${labelWithSource(`Default`,agentId?agentModelPrimary?`agent`:`defaults`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.success,displayDefault)}`),runtime.log(`${labelWithSource(`Fallbacks (${fallbacks.length||0})`,agentId?agentFallbacksOverride===void 0?`defaults`:`agent`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,fallbacks.length?theme.warn:theme.muted,fallbacks.length?fallbacks.join(`, `):`-`)}`),runtime.log(`${labelWithSource(`Image model`,agentId?`defaults`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,imageModel?theme.accentBright:theme.muted,imageModel||`-`)}`),runtime.log(`${labelWithSource(`Image fallbacks (${imageFallbacks.length||0})`,agentId?`defaults`:void 0)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,imageFallbacks.length?theme.accentBright:theme.muted,imageFallbacks.length?imageFallbacks.join(`, `):`-`)}`),runtime.log(`${label(`Aliases (${Object.keys(aliases).length||0})`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,Object.keys(aliases).length?theme.accent:theme.muted,Object.keys(aliases).length?Object.entries(aliases).map(([alias,target])=>rich?`${theme.accentDim(alias)} ${theme.muted(`->`)} ${theme.info(target)}`:`${alias} -> ${target}`).join(`, `):`-`)}`),runtime.log(`${label(`Configured models (${allowed.length||0})`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,allowed.length?theme.info:theme.muted,allowed.length?allowed.join(`, `):`all`)}`),runtime.log(``),runtime.log(colorize(rich,theme.heading,`Auth overview`)),runtime.log(`${label(`Auth store`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,theme.info,shortenHomePath(resolveAuthStorePathForDisplay(agentDir)))}`),runtime.log(`${label(`Shell env`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,shellFallbackEnabled?theme.success:theme.muted,shellFallbackEnabled?`on`:`off`)}${applied.length?colorize(rich,theme.muted,` (applied: ${applied.join(`, `)})`):``}`),runtime.log(`${label(`Providers w/ OAuth/tokens (${providersWithOauth.length||0})`)}${colorize(rich,theme.muted,`:`)} ${colorize(rich,providersWithOauth.length?theme.info:theme.muted,providersWithOauth.length?providersWithOauth.join(`, `):`-`)}`);let formatKey=key=>colorize(rich,theme.warn,key),formatKeyValue=(key,value)=>`${formatKey(key)}=${colorize(rich,theme.info,value)}`,formatSeparator=()=>colorize(rich,theme.muted,` | `);for(let entry of providerAuth){let separator=formatSeparator(),bits=[];bits.push(formatKeyValue(`effective`,`${colorize(rich,theme.accentBright,entry.effective.kind)}:${colorize(rich,theme.muted,entry.effective.detail)}`)),entry.profiles.count>0&&(bits.push(formatKeyValue(`profiles`,`${entry.profiles.count} (oauth=${entry.profiles.oauth}, token=${entry.profiles.token}, api_key=${entry.profiles.apiKey})`)),entry.profiles.labels.length>0&&bits.push(colorize(rich,theme.info,entry.profiles.labels.join(`, `)))),entry.env&&bits.push(formatKeyValue(`env`,`${entry.env.value}${separator}${formatKeyValue(`source`,entry.env.source)}`)),entry.modelsJson&&bits.push(formatKeyValue(`models.json`,`${entry.modelsJson.value}${separator}${formatKeyValue(`source`,entry.modelsJson.source)}`)),runtime.log(`- ${theme.heading(entry.provider)} ${bits.join(separator)}`)}if(missingProvidersInUse.length>0){runtime.log(``),runtime.log(colorize(rich,theme.heading,`Missing auth`));for(let provider of missingProvidersInUse){let hint=provider===`anthropic`?`Run \`claude setup-token\`, then \`${formatCliCommand(`builderforce models auth setup-token`)}\` or \`${formatCliCommand(`builderforce configure`)}\`.`:`Run \`${formatCliCommand(`builderforce configure`)}\` or set an API key env var.`;runtime.log(`- ${theme.heading(provider)} ${hint}`)}}if(runtime.log(``),runtime.log(colorize(rich,theme.heading,`OAuth/token status`)),oauthProfiles.length===0)runtime.log(colorize(rich,theme.muted,`- none`));else{let usageByProvider=new Map,usageProviders=Array.from(new Set(oauthProfiles.map(profile=>resolveUsageProviderId(profile.provider)).filter(provider=>!!provider)));if(usageProviders.length>0)try{let usageSummary=await loadProviderUsageSummary({providers:usageProviders,agentDir,timeoutMs:3500});for(let snapshot of usageSummary.providers){let formatted=formatUsageWindowSummary(snapshot,{now:Date.now(),maxWindows:2,includeResets:!0});formatted&&usageByProvider.set(snapshot.provider,formatted)}}catch{}let formatStatus=status=>status===`ok`?colorize(rich,theme.success,`ok`):status===`static`?colorize(rich,theme.muted,`static`):status===`expiring`?colorize(rich,theme.warn,`expiring`):status===`missing`?colorize(rich,theme.warn,`unknown`):colorize(rich,theme.error,`expired`),profilesByProvider=new Map;for(let profile of oauthProfiles){let current=profilesByProvider.get(profile.provider);current?current.push(profile):profilesByProvider.set(profile.provider,[profile])}for(let[provider,profiles]of profilesByProvider){let usageKey=resolveUsageProviderId(provider),usage=usageKey?usageByProvider.get(usageKey):void 0,usageSuffix=usage?colorize(rich,theme.muted,` usage: ${usage}`):``;runtime.log(`- ${colorize(rich,theme.heading,provider)}${usageSuffix}`);for(let profile of profiles){let labelText=profile.label||profile.profileId,label=colorize(rich,theme.accent,labelText),status=formatStatus(profile.status),expiry=profile.status===`static`?``:profile.expiresAt?` expires in ${formatRemainingShort(profile.remainingMs)}`:` expires unknown`;runtime.log(` - ${label} ${status}${expiry}`)}}}if(probeSummary)if(runtime.log(``),runtime.log(colorize(rich,theme.heading,`Auth probes`)),probeSummary.results.length===0)runtime.log(colorize(rich,theme.muted,`- none`));else{let tableWidth=Math.max(60,(process.stdout.columns??120)-1),sorted=sortProbeResults(probeSummary.results),statusColor=status=>status===`ok`?theme.success:status===`rate_limit`||status===`timeout`||status===`billing`?theme.warn:status===`auth`||status===`format`?theme.error:theme.muted,rows=sorted.map(result=>{let status=colorize(rich,statusColor(result.status),result.status),latency=formatProbeLatency(result.latencyMs),modelLabel=result.model??`${result.provider}/-`,modeLabel=result.mode?` ${colorize(rich,theme.muted,`(${result.mode})`)}`:``,profile=`${colorize(rich,theme.accent,result.label)}${modeLabel}`,detail=result.error?.trim(),detailLabel=detail?`\n${colorize(rich,theme.muted,`↳ ${detail}`)}`:``,statusLabel=`${status}${colorize(rich,theme.muted,` · ${latency}`)}${detailLabel}`;return{Model:colorize(rich,theme.heading,modelLabel),Profile:profile,Status:statusLabel}});runtime.log(renderTable({width:tableWidth,columns:[{key:`Model`,header:`Model`,minWidth:18},{key:`Profile`,header:`Profile`,minWidth:24},{key:`Status`,header:`Status`,minWidth:12}],rows}).trimEnd()),runtime.log(colorize(rich,theme.muted,describeProbeSummary(probeSummary)))}opts.check&&runtime.exit(checkStatus)}const TOOL_PING={name:`ping`,description:`Return OK.`,parameters:Type.Object({})};function normalizeCreatedAtMs(value){return typeof value!=`number`||!Number.isFinite(value)||value<=0?null:value>0xe8d4a51000?Math.round(value):Math.round(value*1e3)}function parseModality(modality){return modality&&modality.toLowerCase().split(/[^a-z]+/).filter(Boolean).includes(`image`)?[`text`,`image`]:[`text`]}function parseNumberString(value){if(typeof value==`number`&&Number.isFinite(value))return value;if(typeof value!=`string`)return null;let trimmed=value.trim();if(!trimmed)return null;let num=Number(trimmed);return Number.isFinite(num)?num:null}function parseOpenRouterPricing(value){if(!value||typeof value!=`object`)return null;let obj=value,prompt=parseNumberString(obj.prompt),completion=parseNumberString(obj.completion),request=parseNumberString(obj.request)??0,image=parseNumberString(obj.image)??0,webSearch=parseNumberString(obj.web_search)??0,internalReasoning=parseNumberString(obj.internal_reasoning)??0;return prompt===null||completion===null?null:{prompt,completion,request,image,webSearch,internalReasoning}}function isFreeOpenRouterModel(entry){return entry.id.endsWith(`:free`)?!0:entry.pricing?entry.pricing.prompt===0&&entry.pricing.completion===0:!1}async function withTimeout(timeoutMs,fn){let controller=new AbortController,timer=setTimeout(controller.abort.bind(controller),timeoutMs);try{return await fn(controller.signal)}finally{clearTimeout(timer)}}async function fetchOpenRouterModels(fetchImpl){let res=await fetchImpl(`https://openrouter.ai/api/v1/models`,{headers:{Accept:`application/json`}});if(!res.ok)throw Error(`OpenRouter /models failed: HTTP ${res.status}`);let payload=await res.json();return(Array.isArray(payload.data)?payload.data:[]).map(entry=>{if(!entry||typeof entry!=`object`)return null;let obj=entry,id=typeof obj.id==`string`?obj.id.trim():``;if(!id)return null;let name=typeof obj.name==`string`&&obj.name.trim()?obj.name.trim():id,contextLength=typeof obj.context_length==`number`&&Number.isFinite(obj.context_length)?obj.context_length:null,maxCompletionTokens=typeof obj.max_completion_tokens==`number`&&Number.isFinite(obj.max_completion_tokens)?obj.max_completion_tokens:typeof obj.max_output_tokens==`number`&&Number.isFinite(obj.max_output_tokens)?obj.max_output_tokens:null,supportedParameters=Array.isArray(obj.supported_parameters)?obj.supported_parameters.filter(value=>typeof value==`string`).map(value=>value.trim()).filter(Boolean):[];return{id,name,contextLength,maxCompletionTokens,supportedParameters,supportedParametersCount:supportedParameters.length,supportsToolsMeta:supportedParameters.includes(`tools`),modality:typeof obj.modality==`string`&&obj.modality.trim()?obj.modality.trim():null,inferredParamB:inferParamBFromIdOrName(`${id} ${name}`),createdAtMs:normalizeCreatedAtMs(obj.created_at),pricing:parseOpenRouterPricing(obj.pricing)}}).filter(entry=>!!entry)}async function probeTool(model,apiKey,timeoutMs){let context={messages:[{role:`user`,content:`Call the ping tool with {} and nothing else.`,timestamp:Date.now()}],tools:[TOOL_PING]},startedAt=Date.now();try{return(await withTimeout(timeoutMs,signal=>nativeComplete({baseUrl:model.baseUrl,apiKey,defaultModel:model.id},{model:model.id,messages:context.messages.map(m=>({role:m.role,content:m.content})),tools:context.tools?.map(t=>({type:`function`,function:{name:t.name,description:t.description,parameters:t.parameters}})),temperature:0,extra:{max_tokens:32,tool_choice:`required`}},signal))).toolCalls.length>0?{ok:!0,latencyMs:Date.now()-startedAt}:{ok:!1,latencyMs:Date.now()-startedAt,error:`No tool call returned`}}catch(err){return{ok:!1,latencyMs:Date.now()-startedAt,error:err instanceof Error?err.message:String(err)}}}async function probeImage(model,apiKey,timeoutMs){let context={messages:[{role:`user`,content:[{type:`text`,text:`Reply with OK.`},{type:`image`,data:`iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+X3mIAAAAASUVORK5CYII=`,mimeType:`image/png`}],timestamp:Date.now()}]},startedAt=Date.now();try{return await withTimeout(timeoutMs,signal=>nativeComplete({baseUrl:model.baseUrl,apiKey,defaultModel:model.id},{model:model.id,messages:context.messages.map(m=>({role:m.role,content:m.content})),temperature:0,extra:{max_tokens:16}},signal)),{ok:!0,latencyMs:Date.now()-startedAt}}catch(err){return{ok:!1,latencyMs:Date.now()-startedAt,error:err instanceof Error?err.message:String(err)}}}function ensureImageInput(model){return model.input.includes(`image`)?model:{...model,input:Array.from(new Set([...model.input,`image`]))}}function buildOpenRouterScanResult(params){let{entry,isFree}=params;return{id:entry.id,name:entry.name,provider:`openrouter`,modelRef:`openrouter/${entry.id}`,contextLength:entry.contextLength,maxCompletionTokens:entry.maxCompletionTokens,supportedParametersCount:entry.supportedParametersCount,supportsToolsMeta:entry.supportsToolsMeta,modality:entry.modality,inferredParamB:entry.inferredParamB,createdAtMs:entry.createdAtMs,pricing:entry.pricing,isFree,tool:params.tool,image:params.image}}async function mapWithConcurrency(items,concurrency,fn,opts){let limit=Math.max(1,Math.floor(concurrency)),results=Array.from({length:items.length},()=>void 0),nextIndex=0,completed=0,worker=async()=>{for(;;){let current=nextIndex;if(nextIndex+=1,current>=items.length)return;results[current]=await fn(items[current],current),completed+=1,opts?.onProgress?.(completed,items.length)}};return items.length===0?(opts?.onProgress?.(0,0),results):(await Promise.all(Array.from({length:Math.min(limit,items.length)},()=>worker())),results)}async function scanOpenRouterModels(options={}){let fetchImpl=options.fetchImpl??fetch,probe=options.probe??!0,apiKey=options.apiKey?.trim()||getEnvApiKey(`openrouter`)||``;if(probe&&!apiKey)throw Error(`Missing OpenRouter API key. Set OPENROUTER_API_KEY to run models scan.`);let timeoutMs=Math.max(1,Math.floor(options.timeoutMs??12e3)),concurrency=Math.max(1,Math.floor(options.concurrency??3)),minParamB=Math.max(0,Math.floor(options.minParamB??0)),maxAgeDays=Math.max(0,Math.floor(options.maxAgeDays??0)),providerFilter=options.providerFilter?.trim().toLowerCase()??``,catalog=await fetchOpenRouterModels(fetchImpl),now=Date.now(),filtered=catalog.filter(entry=>!(!isFreeOpenRouterModel(entry)||providerFilter&&(entry.id.split(`/`)[0]?.toLowerCase()??``)!==providerFilter||minParamB>0&&(entry.inferredParamB??0)<minParamB||maxAgeDays>0&&entry.createdAtMs&&(now-entry.createdAtMs)/(1440*60*1e3)>maxAgeDays)),baseModel=getModel(`openrouter`,`openrouter/auto`);return options.onProgress?.({phase:`probe`,completed:0,total:filtered.length}),mapWithConcurrency(filtered,concurrency,async entry=>{let isFree=isFreeOpenRouterModel(entry);if(!probe)return buildOpenRouterScanResult({entry,isFree,tool:{ok:!1,latencyMs:null,skipped:!0},image:{ok:!1,latencyMs:null,skipped:!0}});let model={...baseModel,id:entry.id,name:entry.name||entry.id,contextWindow:entry.contextLength??baseModel.contextWindow,maxTokens:entry.maxCompletionTokens??baseModel.maxTokens,input:parseModality(entry.modality),reasoning:baseModel.reasoning};return buildOpenRouterScanResult({entry,isFree,tool:await probeTool(model,apiKey,timeoutMs),image:model.input.includes(`image`)?await probeImage(ensureImageInput(model),apiKey,timeoutMs):{ok:!1,latencyMs:null,skipped:!0}})},{onProgress:(completed,total)=>options.onProgress?.({phase:`probe`,completed,total})})}const multiselect$1=params=>multiselect({...params,message:stylePromptMessage(params.message),options:params.options.map(opt=>opt.hint===void 0?opt:{...opt,hint:stylePromptHint(opt.hint)})});function guardPromptCancel(value,runtime){if(isCancel(value))throw cancel(stylePromptTitle(`Model scan cancelled.`)??`Model scan cancelled.`),runtime.exit(0),Error(`unreachable`);return value}function sortScanResults(results){return results.slice().toSorted((a,b)=>{let aImage=a.image.ok?1:0,bImage=b.image.ok?1:0;if(aImage!==bImage)return bImage-aImage;let aToolLatency=a.tool.latencyMs??1/0,bToolLatency=b.tool.latencyMs??1/0;return aToolLatency===bToolLatency?compareScanMetadata(a,b):aToolLatency-bToolLatency})}function sortImageResults(results){return results.slice().toSorted((a,b)=>{let aLatency=a.image.latencyMs??1/0,bLatency=b.image.latencyMs??1/0;return aLatency===bLatency?compareScanMetadata(a,b):aLatency-bLatency})}function compareScanMetadata(a,b){let aCtx=a.contextLength??0,bCtx=b.contextLength??0;if(aCtx!==bCtx)return bCtx-aCtx;let aParams=a.inferredParamB??0,bParams=b.inferredParamB??0;return aParams===bParams?a.modelRef.localeCompare(b.modelRef):bParams-aParams}function buildScanHint(result){return[result.tool.ok?`tool ${formatMs(result.tool.latencyMs)}`:`tool fail`,result.image.skipped?`img skip`:result.image.ok?`img ${formatMs(result.image.latencyMs)}`:`img fail`,result.contextLength?`ctx ${formatTokenK(result.contextLength)}`:`ctx ?`,result.inferredParamB?`${result.inferredParamB}b`:null].filter(Boolean).join(` | `)}function printScanSummary(results,runtime){let toolOk=results.filter(r=>r.tool.ok),imageOk=results.filter(r=>r.image.ok),toolImageOk=results.filter(r=>r.tool.ok&&r.image.ok),imageOnly=imageOk.filter(r=>!r.tool.ok);runtime.log(`Scan results: tested ${results.length}, tool ok ${toolOk.length}, image ok ${imageOk.length}, tool+image ok ${toolImageOk.length}, image only ${imageOnly.length}`)}function printScanTable(results,runtime){let header=[pad(`Model`,42),pad(`Tool`,10),pad(`Image`,10),pad(`Ctx`,8),pad(`Params`,8),`Notes`].join(` `);runtime.log(header);for(let entry of results){let modelLabel=pad(truncate(entry.modelRef,42),42),toolLabel=pad(entry.tool.ok?formatMs(entry.tool.latencyMs):`fail`,10),imageLabel=pad(entry.image.ok?formatMs(entry.image.latencyMs):entry.image.skipped?`skip`:`fail`,10),ctxLabel=pad(formatTokenK(entry.contextLength),8),paramsLabel=pad(entry.inferredParamB?`${entry.inferredParamB}b`:`-`,8),notes=entry.modality?`modality:${entry.modality}`:``;runtime.log([modelLabel,toolLabel,imageLabel,ctxLabel,paramsLabel,notes].join(` `))}}async function modelsScanCommand(opts,runtime){let minParams=opts.minParams?Number(opts.minParams):void 0;if(minParams!==void 0&&(!Number.isFinite(minParams)||minParams<0))throw Error(`--min-params must be >= 0`);let maxAgeDays=opts.maxAgeDays?Number(opts.maxAgeDays):void 0;if(maxAgeDays!==void 0&&(!Number.isFinite(maxAgeDays)||maxAgeDays<0))throw Error(`--max-age-days must be >= 0`);let maxCandidates=opts.maxCandidates?Number(opts.maxCandidates):6;if(!Number.isFinite(maxCandidates)||maxCandidates<=0)throw Error(`--max-candidates must be > 0`);let timeout=opts.timeout?Number(opts.timeout):void 0;if(timeout!==void 0&&(!Number.isFinite(timeout)||timeout<=0))throw Error(`--timeout must be > 0`);let concurrency=opts.concurrency?Number(opts.concurrency):void 0;if(concurrency!==void 0&&(!Number.isFinite(concurrency)||concurrency<=0))throw Error(`--concurrency must be > 0`);let cfg=loadConfig(),probe=opts.probe??!0,storedKey;if(probe)try{storedKey=(await resolveApiKeyForProvider({provider:`openrouter`,cfg})).apiKey}catch{storedKey=void 0}let results=await withProgressTotals({label:`Scanning OpenRouter models...`,indeterminate:!1,enabled:opts.json!==!0},async update=>await scanOpenRouterModels({apiKey:storedKey??void 0,minParamB:minParams,maxAgeDays,providerFilter:opts.provider,timeoutMs:timeout,concurrency,probe,onProgress:({phase,completed,total})=>{phase===`probe`&&update({completed,total,label:`${probe?`Probing models`:`Scanning models`} (${completed}/${total})`})}}));if(!probe){opts.json?runtime.log(JSON.stringify(results,null,2)):(runtime.log(`Found ${results.length} OpenRouter free models (metadata only; pass --probe to test tools/images).`),printScanTable(sortScanResults(results),runtime));return}let toolOk=results.filter(entry=>entry.tool.ok);if(toolOk.length===0)throw Error(`No tool-capable OpenRouter free models found.`);let sorted=sortScanResults(results),toolSorted=sortScanResults(toolOk),imageSorted=sortImageResults(results.filter(entry=>entry.image.ok)),imagePreferred=toolSorted.filter(entry=>entry.image.ok),preselected=(imagePreferred.length>0?imagePreferred:toolSorted).slice(0,Math.floor(maxCandidates)).map(entry=>entry.modelRef),imagePreselected=imageSorted.slice(0,Math.floor(maxCandidates)).map(entry=>entry.modelRef);opts.json||(printScanSummary(results,runtime),printScanTable(sorted,runtime));let noInput=opts.input===!1,canPrompt=process.stdin.isTTY&&!opts.yes&&!noInput&&!opts.json,selected=preselected,selectedImages=imagePreselected;if(canPrompt)selected=guardPromptCancel(await multiselect$1({message:`Select fallback models (ordered)`,options:toolSorted.map(entry=>({value:entry.modelRef,label:entry.modelRef,hint:buildScanHint(entry)})),initialValues:preselected}),runtime),imageSorted.length>0&&(selectedImages=guardPromptCancel(await multiselect$1({message:`Select image fallback models (ordered)`,options:imageSorted.map(entry=>({value:entry.modelRef,label:entry.modelRef,hint:buildScanHint(entry)})),initialValues:imagePreselected}),runtime));else if(!process.stdin.isTTY&&!opts.yes&&!noInput&&!opts.json)throw Error(`Non-interactive scan: pass --yes to apply defaults.`);if(selected.length===0)throw Error(`No models selected for fallbacks.`);if(opts.setImage&&selectedImages.length===0)throw Error(`No image-capable models selected for image model.`);if(await updateConfig(cfg=>{let nextModels={...cfg.agents?.defaults?.models};for(let entry of selected)nextModels[entry]||(nextModels[entry]={});for(let entry of selectedImages)nextModels[entry]||(nextModels[entry]={});let existingImageModel=cfg.agents?.defaults?.imageModel,nextImageModel=selectedImages.length>0?{...existingImageModel?.primary?{primary:existingImageModel.primary}:void 0,fallbacks:selectedImages,...opts.setImage?{primary:selectedImages[0]}:{}}:cfg.agents?.defaults?.imageModel,existingModel=cfg.agents?.defaults?.model,defaults={...cfg.agents?.defaults,model:{...existingModel?.primary?{primary:existingModel.primary}:void 0,fallbacks:selected,...opts.setDefault?{primary:selected[0]}:{}},...nextImageModel?{imageModel:nextImageModel}:{},models:nextModels};return{...cfg,agents:{...cfg.agents,defaults}}}),opts.json){runtime.log(JSON.stringify({selected,selectedImages,setDefault:!!opts.setDefault,setImage:!!opts.setImage,results,warnings:[]},null,2));return}logConfigUpdated(runtime),runtime.log(`Fallbacks: ${selected.join(`, `)}`),selectedImages.length>0&&runtime.log(`Image fallbacks: ${selectedImages.join(`, `)}`),opts.setDefault&&runtime.log(`Default model: ${selected[0]}`),opts.setImage&&selectedImages.length>0&&runtime.log(`Image model: ${selectedImages[0]}`)}async function modelsSetCommand(modelRaw,runtime){let updated=await updateConfig(cfg=>applyDefaultModelPrimaryUpdate({cfg,modelRaw,field:`model`}));logConfigUpdated(runtime),runtime.log(`Default model: ${updated.agents?.defaults?.model?.primary??modelRaw}`)}async function modelsSetImageCommand(modelRaw,runtime){let updated=await updateConfig(cfg=>applyDefaultModelPrimaryUpdate({cfg,modelRaw,field:`imageModel`}));logConfigUpdated(runtime),runtime.log(`Image model: ${updated.agents?.defaults?.imageModel?.primary??modelRaw}`)}export{modelsAliasesRemoveCommand as C,modelsAliasesListCommand as S,modelsAuthAddCommand as _,modelsListCommand as a,modelsAuthSetupTokenCommand as b,modelsImageFallbacksListCommand as c,modelsFallbacksClearCommand as d,modelsFallbacksListCommand as f,modelsAuthOrderSetCommand as g,modelsAuthOrderGetCommand as h,modelsStatusCommand as i,modelsImageFallbacksRemoveCommand as l,modelsAuthOrderClearCommand as m,modelsSetCommand as n,modelsImageFallbacksAddCommand as o,modelsFallbacksRemoveCommand as p,modelsScanCommand as r,modelsImageFallbacksClearCommand as s,modelsSetImageCommand as t,modelsFallbacksAddCommand as u,modelsAuthLoginCommand as v,modelsAliasesAddCommand as x,modelsAuthPasteTokenCommand as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./auth-json-wrKixZxh.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./model-discovery-D0i1JpiL.js";import"./model-catalog-BeBXvbFm.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-DDEN4oJi.js";import"./sessions-BA8Se_bT.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-B7H8Ae5j.js";import"./send-DqR7Rxzm.js";import"./with-timeout-B_p5pWDv.js";import"./deliver-CsG0cHbZ.js";import"./accounts-Cx82nj4E.js";import"./send-KgN1P41U.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DdU30lmt.js";import"./sandbox-DvKMuAXL.js";import"./chrome-CFmcixaE.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-CttALzrW.js";import"./routes-_iZdG1Fo.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-CveeVOWH.js";import"./manager-BeohB4-8.js";import"./gemini-auth-DDR12zst.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-Cu9NJouV.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-9ksvqHYX.js";import"./session-utils-Dxou8SbO.js";import"./coding-tools.policy-D9Ba8eDh.js";import"./pairing-store-YRy7EBgI.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-B8lFHp0K.js";import"./send-kkm_zrHQ.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-2PkCt256.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-CYGOPcKq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-BOGMDhSN.js";import"./onboard-helpers-Ce_c4Raj.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-BJPrScRl.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./table-BFCCZDsp.js";import"./shared-BBOiNdjf.js";import"./onboard-auth.credentials-DneFSdYg.js";import"./auth-token-BPHeoBAW.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-hNwpK_hl.js";import{a as modelsListCommand,i as modelsStatusCommand}from"./models-BjIzVQYX.js";export{modelsListCommand,modelsStatusCommand};
|