@qwen-code/qwen-code 0.25.4-preview.0 → 0.25.4-preview.1

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.
Files changed (306) hide show
  1. package/bundled/browser-use/runtime/native-host.js +0 -0
  2. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +0 -0
  3. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +0 -0
  4. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +0 -0
  5. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +0 -0
  6. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +0 -0
  7. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +0 -0
  8. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +0 -0
  9. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +0 -0
  10. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +0 -0
  11. package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +0 -0
  12. package/bundled/browser-use/runtime/node_modules/playwright-core/cli.js +0 -0
  13. package/bundled/browser-use/runtime/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
  14. package/bundled/browser-use/runtime/node_modules/playwright-core/lib/xdg-open +0 -0
  15. package/bundled/browser-use/runtime/scripts/native-host-setup.js +0 -0
  16. package/chunks/{MaxSizedBox-M27H235V.js → MaxSizedBox-E4RKSA7W.js} +1 -1
  17. package/chunks/{StandaloneSessionPicker-LWWDDYOW.js → StandaloneSessionPicker-2D3UKLVS.js} +1 -1
  18. package/chunks/{acp-subagent-executor-NUV52JVS.js → acp-subagent-executor-UQYUN6AB.js} +1 -1
  19. package/chunks/{acpAgent-IUJDXLZM.js → acpAgent-P7WGK2BP.js} +3 -3
  20. package/chunks/{advisor-MSOUBMJ6.js → advisor-GCH2MBXT.js} +1 -1
  21. package/chunks/{agent-H7XIWYWQ.js → agent-57T4YAYP.js} +1 -1
  22. package/chunks/{agent-headless-XDN3D3S3.js → agent-headless-IBON3A7N.js} +1 -1
  23. package/chunks/{agent-host-client-AZP3PZXS.js → agent-host-client-LE7P72FR.js} +1 -1
  24. package/chunks/{agent-host-connections-JRVX7I6I.js → agent-host-connections-4DM57L26.js} +1 -1
  25. package/chunks/{anthropicContentGenerator-N7TV53LD.js → anthropicContentGenerator-C4TPFXUK.js} +1 -1
  26. package/chunks/{batch-MKSJFJUH.js → batch-YJJGMJWO.js} +1 -1
  27. package/chunks/{bridge-GNMKKHQ4.js → bridge-FIO2ENBG.js} +1 -1
  28. package/chunks/{channel-settings-store-Y4YCS7JX.js → channel-settings-store-TEBCLK2B.js} +1 -1
  29. package/chunks/{chunk-GPOUP5OK.js → chunk-27MTSS3T.js} +1 -1
  30. package/chunks/{chunk-C4ANA47H.js → chunk-2MGCRPM3.js} +1 -1
  31. package/chunks/{chunk-6DQNNRRC.js → chunk-2WBKWPSO.js} +1 -1
  32. package/chunks/{chunk-CATL2PQS.js → chunk-34WLYVDK.js} +5 -5
  33. package/chunks/{chunk-B7CXPNCV.js → chunk-3J2YNEHG.js} +1 -1
  34. package/chunks/{chunk-VTNHPXNL.js → chunk-3TBFTELA.js} +1 -1
  35. package/chunks/{chunk-7JT34VGK.js → chunk-46I6JBVL.js} +1 -1
  36. package/chunks/{chunk-FEMWELCV.js → chunk-4ZKFLOEH.js} +1 -1
  37. package/chunks/{chunk-7AYXAVTZ.js → chunk-5DUJIOOX.js} +3 -3
  38. package/chunks/{chunk-6QLHJSVW.js → chunk-6PWOLWTH.js} +1 -1
  39. package/chunks/{chunk-OW4QBRSR.js → chunk-6UZ65Z2P.js} +1 -1
  40. package/chunks/{chunk-V2JZO5MS.js → chunk-7DSJE3CL.js} +1 -1
  41. package/chunks/{chunk-TJMHIEYI.js → chunk-7LCY7GGX.js} +1 -1
  42. package/chunks/{chunk-TLJHBK3A.js → chunk-7RNTXEWH.js} +1 -1
  43. package/chunks/{chunk-YZ7OO4AQ.js → chunk-A3IF6IOB.js} +1 -1
  44. package/chunks/{chunk-VTF6AVZB.js → chunk-A6OQSOUO.js} +1 -1
  45. package/chunks/{chunk-Y7YDHCON.js → chunk-AJ6JUUP7.js} +1 -1
  46. package/chunks/{chunk-QTMHQGWQ.js → chunk-AOMEBVFW.js} +1 -1
  47. package/chunks/{chunk-KVTG2ZNH.js → chunk-AUNAS7AS.js} +1 -1
  48. package/chunks/{chunk-BOFD4CN3.js → chunk-AVIDPC5K.js} +1 -1
  49. package/chunks/{chunk-ETYTRKB2.js → chunk-BOLPBPWC.js} +1 -1
  50. package/chunks/{chunk-OAPA66DR.js → chunk-BQQBFDBY.js} +1 -1
  51. package/chunks/{chunk-NOS2CNOI.js → chunk-CN22ATWU.js} +1 -1
  52. package/chunks/{chunk-XYBEQRSZ.js → chunk-DIHJELGW.js} +1 -1
  53. package/chunks/{chunk-XCEL3EDX.js → chunk-DJFCI7TU.js} +1 -1
  54. package/chunks/{chunk-VKEL2XTM.js → chunk-DQPDMFS3.js} +1 -1
  55. package/chunks/{chunk-DJRFEZBY.js → chunk-DSYKB77N.js} +1 -1
  56. package/chunks/{chunk-UEW7Q26E.js → chunk-EDNOGHMN.js} +2 -2
  57. package/chunks/{chunk-RXNGYG64.js → chunk-EE36D2EV.js} +1 -1
  58. package/chunks/{chunk-NZKX7HYL.js → chunk-EGQDN3FJ.js} +1 -1
  59. package/chunks/{chunk-DFRSQK5Q.js → chunk-FHFBCG6N.js} +1 -1
  60. package/chunks/{chunk-PECV2VVZ.js → chunk-GI6T3RBV.js} +1 -1
  61. package/chunks/{chunk-37BNHIUB.js → chunk-GOLT5JXA.js} +1 -1
  62. package/chunks/{chunk-KITFF4GL.js → chunk-IDGXHMNL.js} +1 -1
  63. package/chunks/{chunk-6HIOSLUM.js → chunk-IIZWK7ZP.js} +1 -1
  64. package/chunks/{chunk-MPGEAX4K.js → chunk-IJC6ZH2S.js} +1 -1
  65. package/chunks/{chunk-TLYJVB5H.js → chunk-IO6LSEPV.js} +1 -1
  66. package/chunks/{chunk-QIJKEZZR.js → chunk-IYVNCBMS.js} +1 -1
  67. package/chunks/{chunk-S4GOHFRN.js → chunk-JHGOWK7M.js} +1 -1
  68. package/chunks/{chunk-GHRD2MMC.js → chunk-JRJY343T.js} +1 -1
  69. package/chunks/{chunk-WCYZSCG7.js → chunk-JVUXQU3W.js} +1 -1
  70. package/chunks/{chunk-DMCTJUIJ.js → chunk-K2K2YYWO.js} +1 -1
  71. package/chunks/{chunk-37OHWQHB.js → chunk-KF6HU732.js} +2 -2
  72. package/chunks/{chunk-5LSV73BG.js → chunk-KVWUOBH7.js} +1 -1
  73. package/chunks/{chunk-7V4BAHFT.js → chunk-LBWBGFHD.js} +1 -1
  74. package/chunks/{chunk-RKPHDO42.js → chunk-LDXZT3SG.js} +5 -5
  75. package/chunks/{chunk-BGFA2SAQ.js → chunk-LFOZ6AIH.js} +1 -1
  76. package/chunks/{chunk-4322TZID.js → chunk-LGQHT42X.js} +2 -2
  77. package/chunks/{chunk-PDXZ2CUO.js → chunk-M3O2XDHA.js} +1 -1
  78. package/chunks/{chunk-47K2NMP6.js → chunk-M3UC46LS.js} +1 -1
  79. package/chunks/{chunk-UFRY7WND.js → chunk-M7JLPTQI.js} +1 -1
  80. package/chunks/{chunk-SATEKHQP.js → chunk-MBUXP3IS.js} +1 -1
  81. package/chunks/{chunk-RN6JS263.js → chunk-MEZA3VVH.js} +1 -1
  82. package/chunks/{chunk-OBFKP7RI.js → chunk-MWN6TR36.js} +1 -1
  83. package/chunks/{chunk-VHJ43ZYJ.js → chunk-O7XRQWCG.js} +1 -1
  84. package/chunks/{chunk-H224LNV3.js → chunk-OYFRLT5E.js} +1 -1
  85. package/chunks/{chunk-3NWFV2YF.js → chunk-PMBGV76N.js} +1 -1
  86. package/chunks/{chunk-YFAPACDE.js → chunk-PVM4IVFL.js} +6 -6
  87. package/chunks/{chunk-7WS2EYMQ.js → chunk-PWHD4NK3.js} +1 -1
  88. package/chunks/{chunk-JZIQSEFO.js → chunk-Q54NROBX.js} +1 -1
  89. package/chunks/{chunk-FCLAPJ22.js → chunk-QE7R4DPT.js} +1 -1
  90. package/chunks/{chunk-J6TW7GNF.js → chunk-QIUTQICH.js} +1 -1
  91. package/chunks/{chunk-TWDCN5H2.js → chunk-QK63EULE.js} +1 -1
  92. package/chunks/{chunk-HZZT75LI.js → chunk-QTAC4W7J.js} +1 -1
  93. package/chunks/{chunk-P7DIAJNX.js → chunk-R7HBR4QQ.js} +1 -1
  94. package/chunks/{chunk-U2FJSKS3.js → chunk-RHEMFKMX.js} +1 -1
  95. package/chunks/{chunk-TRRY3QMM.js → chunk-RL57IU47.js} +1 -1
  96. package/chunks/{chunk-SPWDYRDH.js → chunk-S2OOQRLJ.js} +1 -1
  97. package/chunks/{chunk-QBRADQ7L.js → chunk-SWTMWNTZ.js} +1 -1
  98. package/chunks/{chunk-AZUDF52L.js → chunk-SXTKQHFZ.js} +1 -1
  99. package/chunks/{chunk-5RQRSPPD.js → chunk-T5S3MJIK.js} +1 -1
  100. package/chunks/{chunk-I3ORWQ2U.js → chunk-UDGDEIBB.js} +1 -1
  101. package/chunks/{chunk-EMDEBV33.js → chunk-UIFBF3E7.js} +1 -1
  102. package/chunks/{chunk-BGEMWNES.js → chunk-UQDPWI7D.js} +1 -1
  103. package/chunks/{chunk-I5LKOTZT.js → chunk-VON4MVIM.js} +1 -1
  104. package/chunks/{chunk-HJPO6MEW.js → chunk-W5D2T2JK.js} +1 -1
  105. package/chunks/{chunk-F6YYDRMH.js → chunk-WNGYYU67.js} +1 -1
  106. package/chunks/{chunk-S2GKUZZZ.js → chunk-WO3F62ZD.js} +1 -1
  107. package/chunks/{chunk-K7KW3ZJQ.js → chunk-WVY5Q6YY.js} +1 -1
  108. package/chunks/{chunk-GH6DPLWU.js → chunk-Y4Q667BW.js} +1 -1
  109. package/chunks/{chunk-FH74N7Y7.js → chunk-YJLMFUCS.js} +2 -2
  110. package/chunks/{chunk-C3Y2S5AM.js → chunk-YKHRCSKP.js} +1 -1
  111. package/chunks/{chunk-P4UJ7CXJ.js → chunk-YLIS36QA.js} +1 -1
  112. package/chunks/{chunk-4QIFOIBS.js → chunk-YVZ4XZRB.js} +1 -1
  113. package/chunks/{chunk-KGRD6G5J.js → chunk-Z27JJPKN.js} +1 -1
  114. package/chunks/{chunk-KOHHDB2L.js → chunk-ZCIS6MJZ.js} +1 -1
  115. package/chunks/{chunk-QNNDZYVW.js → chunk-ZHLQ222N.js} +1 -1
  116. package/chunks/{chunk-KWRZ3WJO.js → chunk-ZP7MTWMR.js} +1 -1
  117. package/chunks/{codex-subagent-executor-H44VDB5E.js → codex-subagent-executor-6OJVGF2S.js} +1 -1
  118. package/chunks/{config-utils-4X4SV4RL.js → config-utils-FI3A4QAN.js} +1 -1
  119. package/chunks/{contextCommand-4KVOHTAJ.js → contextCommand-YEBZQHG4.js} +1 -1
  120. package/chunks/{core-runtime-4RARI4NX.js → core-runtime-CFMHUAS7.js} +1 -1
  121. package/chunks/{create-sub-session-CNSRJFYG.js → create-sub-session-G26337FT.js} +1 -1
  122. package/chunks/{daemon-git-worktree-guard-6XQQPP2H.js → daemon-git-worktree-guard-ITU6NQIV.js} +1 -1
  123. package/chunks/{daemon-status-provider-PRTEQT5T.js → daemon-status-provider-CSWRGMRX.js} +1 -1
  124. package/chunks/{daemon-trust-policy-GXKJVZDU.js → daemon-trust-policy-IYD7NOGK.js} +1 -1
  125. package/chunks/{daemon-trust-policy-monitor-L2ORKHMM.js → daemon-trust-policy-monitor-OWUP5SYB.js} +1 -1
  126. package/chunks/{deferred-core-runtime-RZQFUSPX.js → deferred-core-runtime-CVCQU7O4.js} +1 -1
  127. package/chunks/{edit-W44XQCIS.js → edit-7YBQLILC.js} +1 -1
  128. package/chunks/{enterPlanMode-B456A2XO.js → enterPlanMode-L3PVSD2P.js} +1 -1
  129. package/chunks/{environment-DSGQSQFS.js → environment-BVEOYQHO.js} +1 -1
  130. package/chunks/{errors-KL725247.js → errors-VQWBGR6D.js} +1 -1
  131. package/chunks/{execution-tool-KT3EBWHG.js → execution-tool-P7CBXSGZ.js} +1 -1
  132. package/chunks/{execution-worker-LPQ4HMN4.js → execution-worker-RZXNYK4B.js} +1 -1
  133. package/chunks/{exitPlanMode-JLKS76IA.js → exitPlanMode-MBUTM3NW.js} +1 -1
  134. package/chunks/{fast-path-5UD52IHH.js → fast-path-T2FDUSHV.js} +1 -1
  135. package/chunks/{glob-LYA2H6X3.js → glob-RH7XXSYE.js} +1 -1
  136. package/chunks/{goal-tools-SHSIDLZX.js → goal-tools-K6XBCE5E.js} +1 -1
  137. package/chunks/{handleAutoUpdate-T4RE6CZN.js → handleAutoUpdate-PG7R3KPH.js} +1 -1
  138. package/chunks/{i18n-5DK327WA.js → i18n-EGTBMA3N.js} +1 -1
  139. package/chunks/{initializer-TJGE4OJA.js → initializer-RIKH4PCP.js} +1 -1
  140. package/chunks/{installationInfo-MZ62GDIC.js → installationInfo-BBADHZLD.js} +1 -1
  141. package/chunks/{interactive-mod-session-YCUBQ6RM.js → interactive-mod-session-7RDKAHZ4.js} +1 -1
  142. package/chunks/{list-4L3LYDQM.js → list-YEGWEHJX.js} +1 -1
  143. package/chunks/{llm-3JQWBZXV.js → llm-D3LHPY27.js} +4 -4
  144. package/chunks/{llm-content-generator-6UPJWPOM.js → llm-content-generator-BLTBMV66.js} +1 -1
  145. package/chunks/{loadedSettingsAdapter-STPKAFJG.js → loadedSettingsAdapter-PLGMKMFO.js} +1 -1
  146. package/chunks/{local-execution-environment-IE5BOI7Y.js → local-execution-environment-4LDKFNC4.js} +1 -1
  147. package/chunks/{loggingContentGenerator-4KKWPZJA.js → loggingContentGenerator-376R7DRI.js} +1 -1
  148. package/chunks/{manage-memory-CRV5SXZZ.js → manage-memory-2ZTIVKNU.js} +1 -1
  149. package/chunks/{managed-execution-engine-FHLEWVND.js → managed-execution-engine-5LOM3MXG.js} +1 -1
  150. package/chunks/{managed-npm-update-BRHPOKDU.js → managed-npm-update-2C5JYEXW.js} +1 -1
  151. package/chunks/{managed-runtime-attestation-worker-GIQKZ5BH.js → managed-runtime-attestation-worker-R2FECMZK.js} +1 -1
  152. package/chunks/{managed-runtime-bootstrap-P72BT46H.js → managed-runtime-bootstrap-KPLGH4UE.js} +1 -1
  153. package/chunks/{managed-runtime-session-worker-IYCJDB5K.js → managed-runtime-session-worker-EVKNPK3V.js} +1 -1
  154. package/chunks/{managed-runtime-ssh-worker-ONT4V5ZG.js → managed-runtime-ssh-worker-IA4HZ3PD.js} +1 -1
  155. package/chunks/{mcp-NXCQVE2Y.js → mcp-S67IJLI6.js} +1 -1
  156. package/chunks/{model-call-collection-3DNL45M5.js → model-call-collection-6OGPDTPG.js} +1 -1
  157. package/chunks/{model-configuration-6HRNYBWV.js → model-configuration-6RWVBOQS.js} +1 -1
  158. package/chunks/{modelConfigUtils-SKBN64ZW.js → modelConfigUtils-M3TVVYAO.js} +1 -1
  159. package/chunks/{monitor-7I7Q73UR.js → monitor-ZHOFTN7N.js} +1 -1
  160. package/chunks/{nonInteractiveCli-YLYRJUBE.js → nonInteractiveCli-6SUGPTJ4.js} +1 -1
  161. package/chunks/{nonInteractiveToolExecutor-U2ASWT63.js → nonInteractiveToolExecutor-SAHBGO3A.js} +1 -1
  162. package/chunks/{notebook-edit-WAD7IQCF.js → notebook-edit-ETUOQH6G.js} +1 -1
  163. package/chunks/{omni-POUUDVU3.js → omni-HV2UBGMZ.js} +1 -1
  164. package/chunks/{openaiContentGenerator-L7X6IVPL.js → openaiContentGenerator-RZCG7E4M.js} +1 -1
  165. package/chunks/{openaiResponsesContentGenerator-7XCMFI6P.js → openaiResponsesContentGenerator-X23L5JV3.js} +1 -1
  166. package/chunks/{pidfile-MQQT2ZDA.js → pidfile-26WXQCHG.js} +1 -1
  167. package/chunks/{processUtils-OZLF72NC.js → processUtils-WXLFGNBT.js} +1 -1
  168. package/chunks/{prompt-terminal-ledger-IYUF6SUU.js → prompt-terminal-ledger-EIZZHF4A.js} +1 -1
  169. package/chunks/{qwenContentGenerator-DKH3ILUO.js → qwenContentGenerator-GOY7Y6KH.js} +1 -1
  170. package/chunks/{reactive-degrade-KSNGHMBN.js → reactive-degrade-MNMTTHO5.js} +1 -1
  171. package/chunks/{read-file-VEELW4OQ.js → read-file-OJNGPNTQ.js} +1 -1
  172. package/chunks/{resumeHistoryUtils-4SFDTBXU.js → resumeHistoryUtils-QWOWF4VY.js} +1 -1
  173. package/chunks/{review-QA6HRLVU.js → review-5S24HP2V.js} +1 -1
  174. package/chunks/{ripGrep-4J6ASSE3.js → ripGrep-Y4PY2MQF.js} +1 -1
  175. package/chunks/{run-qwen-serve-EJ67LA5O.js → run-qwen-serve-EOUUDZUK.js} +2 -2
  176. package/chunks/{runtime-6E2FSB5U.js → runtime-ZBPOQX6E.js} +1 -1
  177. package/chunks/{sandboxConfig-4VE4LNRI.js → sandboxConfig-R7KDS3P5.js} +1 -1
  178. package/chunks/{scheduled-tasks-GM5EJMK7.js → scheduled-tasks-Q6V7D6K6.js} +1 -1
  179. package/chunks/{scheduler-HOSVIIOE.js → scheduler-EBQY6BOK.js} +1 -1
  180. package/chunks/{search-memory-HEAQCHIK.js → search-memory-HX6E23JC.js} +1 -1
  181. package/chunks/{send-message-FAQ7XEZ5.js → send-message-OZCCCH2F.js} +1 -1
  182. package/chunks/{serve-VNKPOWSW.js → serve-CMGCI4BK.js} +1 -1
  183. package/chunks/{server-U2XBJLOV.js → server-7LOAKPDN.js} +3 -3
  184. package/chunks/{session-AZGROSFX.js → session-LVQYZSJE.js} +1 -1
  185. package/chunks/{session-attachments-root-6M2ECUNK.js → session-attachments-root-NWG7JOMN.js} +1 -1
  186. package/chunks/{session-execution-engine-selector-PYDVOSJF.js → session-execution-engine-selector-PHH47ZMA.js} +1 -1
  187. package/chunks/{session-pr-refresh-3IS7DLEV.js → session-pr-refresh-5IACZPCY.js} +1 -1
  188. package/chunks/{sessionService-3FWNA4ZB.js → sessionService-7PFAWLHC.js} +1 -1
  189. package/chunks/{settings-VHKT7JJC.js → settings-CPZBOHN5.js} +1 -1
  190. package/chunks/{shell-TYOPVB7H.js → shell-A7NLPS2W.js} +1 -1
  191. package/chunks/{skill-GJQIE5AX.js → skill-VGANGVOD.js} +1 -1
  192. package/chunks/{skill-settings-76NI6SF3.js → skill-settings-TSZO3X6N.js} +1 -1
  193. package/chunks/{spawnChannel-FMSYLDKB.js → spawnChannel-2JQYNQKT.js} +1 -1
  194. package/chunks/{standalone-update-BPZQDQHD.js → standalone-update-QXC3RM6I.js} +1 -1
  195. package/chunks/{start-opentui-ui-X7XYV5N3.js → start-opentui-ui-BKJ4JHVK.js} +1 -1
  196. package/chunks/{startInteractiveUI-UZDF4JUB.js → startInteractiveUI-4QIPR7ZY.js} +1 -1
  197. package/chunks/{team-create-RFZNEF76.js → team-create-5MU6BGXX.js} +1 -1
  198. package/chunks/{team-plan-approval-MGW3JGSC.js → team-plan-approval-NZUJ6FSA.js} +1 -1
  199. package/chunks/{terminal-image-renderer-3UED5GZV.js → terminal-image-renderer-CTMJULJ2.js} +1 -1
  200. package/chunks/{theme-manager-SF6FSSZW.js → theme-manager-6H7GA6QR.js} +1 -1
  201. package/chunks/{tool-call-W2CJR74U.js → tool-call-XG4CAD5X.js} +1 -1
  202. package/chunks/{tool-result-media-XSFON2ZQ.js → tool-result-media-RJ5ONO7R.js} +1 -1
  203. package/chunks/{tool-search-7GY5YTOU.js → tool-search-KBINGEWV.js} +1 -1
  204. package/chunks/{total-session-admission-OATGW6M5.js → total-session-admission-XNWYCO7G.js} +1 -1
  205. package/chunks/{trustedFolders-AM4PSGUB.js → trustedFolders-JT5MOB3A.js} +1 -1
  206. package/chunks/{update-relaunch-YKY52XUT.js → update-relaunch-HXMQI3HO.js} +1 -1
  207. package/chunks/{updateCheck-RKQ5CPZM.js → updateCheck-XWE3TWL5.js} +1 -1
  208. package/chunks/{upload-config-CBT7ARZY.js → upload-config-ET7NRHU7.js} +1 -1
  209. package/chunks/{useAutoAcceptIndicator-Z3YWPUNO.js → useAutoAcceptIndicator-TPMYKNJX.js} +1 -1
  210. package/chunks/{validateNonInterActiveAuth-7CQHU2RF.js → validateNonInterActiveAuth-U52KMEDS.js} +1 -1
  211. package/chunks/{version-N2OB6KWP.js → version-CW4RTJ3H.js} +1 -1
  212. package/chunks/{web-fetch-L5XCBCBA.js → web-fetch-UPMJ3XIZ.js} +1 -1
  213. package/chunks/{web-search-4EHUA3LJ.js → web-search-PXABWQVC.js} +1 -1
  214. package/chunks/{workflow-FGAUAYIP.js → workflow-UQ4V3NBZ.js} +1 -1
  215. package/chunks/{workflow-ancestor-trust-F7RRN6I3.js → workflow-ancestor-trust-QII5KTUJ.js} +1 -1
  216. package/chunks/{workspace-agents-QW4TKC52.js → workspace-agents-Q3KKMDX2.js} +1 -1
  217. package/chunks/{workspace-providers-status-MFSZT3YA.js → workspace-providers-status-3ASB64FB.js} +1 -1
  218. package/chunks/{workspace-registration-store-WQRDSIEI.js → workspace-registration-store-2NPD6U3B.js} +1 -1
  219. package/chunks/{workspace-registry-FXZFRSCH.js → workspace-registry-6QJKRCDR.js} +1 -1
  220. package/chunks/{workspace-runtime-coordinator-LJ5YAT3A.js → workspace-runtime-coordinator-ZXUWDQIB.js} +1 -1
  221. package/chunks/{workspace-service-U632SUWU.js → workspace-service-YPYTYYUN.js} +1 -1
  222. package/chunks/{workspace-skills-status-M7YXM3LF.js → workspace-skills-status-VTFHQ6R7.js} +1 -1
  223. package/chunks/{workspace-trust-reconciler-NLJGGI4K.js → workspace-trust-reconciler-52CZVPKH.js} +1 -1
  224. package/chunks/{write-file-BJCKSXX7.js → write-file-FDBR76G5.js} +1 -1
  225. package/chunks/{zoom-image-TLJPD4DB.js → zoom-image-MYKWCCXO.js} +1 -1
  226. package/cli.js +2 -2
  227. package/execution-worker.js +1 -1
  228. package/export-transcript-document.js +1 -1
  229. package/package.json +4 -4
  230. package/vendor/landlock-run/arm64-linux/qwen-landlock-run +0 -0
  231. package/vendor/landlock-run/x64-linux/qwen-landlock-run +0 -0
  232. package/vendor/ripgrep/arm64-darwin/rg +0 -0
  233. package/vendor/ripgrep/arm64-linux/rg +0 -0
  234. package/vendor/ripgrep/x64-darwin/rg +0 -0
  235. package/vendor/ripgrep/x64-linux/rg +0 -0
  236. package/vendor/tree-sitter/tree-sitter-bash.wasm +0 -0
  237. package/vendor/tree-sitter/tree-sitter.wasm +0 -0
  238. package/web-shell/assets/{PierreFilePreview-D9tbdFw8.js → PierreFilePreview-DGTp45Z4.js} +1 -1
  239. package/web-shell/assets/{SpreadsheetPreview-CeFAk2s-.js → SpreadsheetPreview-DVC_YVei.js} +1 -1
  240. package/web-shell/assets/{WorkspaceFileBrowser-iaURw8SR.js → WorkspaceFileBrowser-DaQNpS06.js} +1 -1
  241. package/web-shell/assets/{abnfDiagram-VCTEODGH-Z4CT1NCF.js → abnfDiagram-VCTEODGH-wJbiOoPK.js} +1 -1
  242. package/web-shell/assets/{agents-route-B7o2Rq-a.js → agents-route-DUhhA1KI.js} +1 -1
  243. package/web-shell/assets/{arc-DcHBdUJQ.js → arc-CvpNMy1d.js} +1 -1
  244. package/web-shell/assets/{architectureDiagram-5GKGNRK7-DRDhEC81.js → architectureDiagram-5GKGNRK7-DIhi3dIz.js} +1 -1
  245. package/web-shell/assets/{blockDiagram-NRAW4CY4-CYRE6WIc.js → blockDiagram-NRAW4CY4-CoeyTlVJ.js} +1 -1
  246. package/web-shell/assets/{c4Diagram-UCG6FXSJ-CIM8N_Sj.js → c4Diagram-UCG6FXSJ-BYoK_I9M.js} +1 -1
  247. package/web-shell/assets/channel-DvtGOCg6.js +1 -0
  248. package/web-shell/assets/{chunk-2Q5K7J3B-Bbfka9Fe.js → chunk-2Q5K7J3B-BeD4GwPg.js} +1 -1
  249. package/web-shell/assets/{chunk-5VM5RSS4-C02zF3RY.js → chunk-5VM5RSS4-BpkJsB_y.js} +1 -1
  250. package/web-shell/assets/{chunk-F27PBJKO-Dn0wRD2F.js → chunk-F27PBJKO-BROEWQ1J.js} +1 -1
  251. package/web-shell/assets/{chunk-G27WJ6UU-Dwpl3l0W.js → chunk-G27WJ6UU-DA8Wtppt.js} +1 -1
  252. package/web-shell/assets/{chunk-JWPE2WC7-sQbzSoTR.js → chunk-JWPE2WC7-GqB-QFh5.js} +1 -1
  253. package/web-shell/assets/{chunk-LCL6LL3I-DNlNDtfr.js → chunk-LCL6LL3I-DIPUwYsX.js} +1 -1
  254. package/web-shell/assets/{chunk-POPQ4Y6H-BOgf1Dl3.js → chunk-POPQ4Y6H-DbnU-jxX.js} +1 -1
  255. package/web-shell/assets/{chunk-SVP7TREG-DOofWP00.js → chunk-SVP7TREG-DvH7bQ-w.js} +1 -1
  256. package/web-shell/assets/{chunk-XXDRQBXY-Bj9FxhWU.js → chunk-XXDRQBXY-DdVWVo3U.js} +1 -1
  257. package/web-shell/assets/classDiagram-DTDB5LWJ-9NR5W1rE.js +1 -0
  258. package/web-shell/assets/classDiagram-v2-JRS7N3AN-9NR5W1rE.js +1 -0
  259. package/web-shell/assets/{cose-bilkent-JH36ORCC-CUlPjyww.js → cose-bilkent-JH36ORCC-JgMKxP9H.js} +1 -1
  260. package/web-shell/assets/{cynefin-OW5HDTMX-5noArzI7.js → cynefin-OW5HDTMX-BVUpNgVm.js} +1 -1
  261. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DELvTqmf.js → cynefinDiagram-5FMLGOSQ-CxAdk-iS.js} +1 -1
  262. package/web-shell/assets/{dagre-3AP2YEHR-CAL6Z3hL.js → dagre-3AP2YEHR-CvXWkM86.js} +1 -1
  263. package/web-shell/assets/{diagram-S7CK7UJ4-DQC2gaIi.js → diagram-S7CK7UJ4-DD_PS4nm.js} +1 -1
  264. package/web-shell/assets/{diagram-UQ7AKVKN-CkU6M-3R.js → diagram-UQ7AKVKN-EVZkTODD.js} +1 -1
  265. package/web-shell/assets/{diagram-VSXAHHWV-CvHpHwVx.js → diagram-VSXAHHWV-CGZc1pZU.js} +1 -1
  266. package/web-shell/assets/{diagram-VX7I27RA-D9l5F9iB.js → diagram-VX7I27RA-DjNql499.js} +1 -1
  267. package/web-shell/assets/{diagram-Z3DM3KII-DW-VFvYx.js → diagram-Z3DM3KII-CCa0WtmR.js} +1 -1
  268. package/web-shell/assets/{docx-preview-8MQfOGQh.js → docx-preview-DpVElxvj.js} +1 -1
  269. package/web-shell/assets/{ebnfDiagram-PWID7BFC-C0Q71wC_.js → ebnfDiagram-PWID7BFC-W2hoOJZF.js} +1 -1
  270. package/web-shell/assets/{erDiagram-SSCWMZ5O-DWDLRh1S.js → erDiagram-SSCWMZ5O-Dz5NxxEb.js} +1 -1
  271. package/web-shell/assets/{flowDiagram-A5DVABFB-CVzJnl1P.js → flowDiagram-A5DVABFB-BTMAn8b5.js} +1 -1
  272. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-B320pcgR.js → ganttDiagram-EL5Y4UJY-BaFrd5ZY.js} +1 -1
  273. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Di4uZh-J.js → gitGraphDiagram-WWUBYQGX-IlmdUqRk.js} +1 -1
  274. package/web-shell/assets/{index-Csr8Hx_O.js → index-C2ez0ZjE.js} +1 -1
  275. package/web-shell/assets/{index-C9BecA_H.js → index-Cs-XBNmB.js} +101 -101
  276. package/web-shell/assets/{infoDiagram-RXCK75RN-CbafhxET.js → infoDiagram-RXCK75RN-BHs9kpar.js} +1 -1
  277. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DrQuIDeR.js → ishikawaDiagram-5VMMS53U-DWCEQ85v.js} +1 -1
  278. package/web-shell/assets/{journeyDiagram-EYS64GPL-BschmjBj.js → journeyDiagram-EYS64GPL-RTDAw9yc.js} +1 -1
  279. package/web-shell/assets/{kanban-definition-3QL26DDD-B7x9BU9N.js → kanban-definition-3QL26DDD-B7Nl9bq6.js} +1 -1
  280. package/web-shell/assets/{layout-BewPaOyO.js → layout-BabjFEb1.js} +1 -1
  281. package/web-shell/assets/{linear-CnLILCVp.js → linear-CZuGjuQd.js} +1 -1
  282. package/web-shell/assets/{mermaid.core-Csj9KPfJ.js → mermaid.core-CK78bIGt.js} +6 -6
  283. package/web-shell/assets/{mindmap-definition-FBJOCRG2-CIGTi5gg.js → mindmap-definition-FBJOCRG2-BbcCi_jP.js} +1 -1
  284. package/web-shell/assets/{pegDiagram-XKGWAZYB-CuWBRQzb.js → pegDiagram-XKGWAZYB-DpLQ7u8i.js} +1 -1
  285. package/web-shell/assets/{pieDiagram-E7YTZNPT-Co5ukXCE.js → pieDiagram-E7YTZNPT-BpWFVtM0.js} +1 -1
  286. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-B0hzjh6o.js → quadrantDiagram-AXDQQJYC-CGzYlaN1.js} +1 -1
  287. package/web-shell/assets/{railroadDiagram-O6MQD6OU-nhkJB0xD.js → railroadDiagram-O6MQD6OU-BNQYW-Zi.js} +1 -1
  288. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-C7NpxjVR.js → requirementDiagram-EFPCY7ZU-C4fCdIDW.js} +1 -1
  289. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CUWlnhZC.js → sankeyDiagram-P5KCCOFB-BvbbAnMA.js} +1 -1
  290. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BoykH0_J.js → sequenceDiagram-WJ2MYXX4-DGXNc6E1.js} +1 -1
  291. package/web-shell/assets/{sizeCapture-X5ZJPWSS-aF-PkSe5.js → sizeCapture-X5ZJPWSS-C4W45Xf5.js} +1 -1
  292. package/web-shell/assets/{stateDiagram-HBIQ2CUA-g5q0b922.js → stateDiagram-HBIQ2CUA-D3q0fen-.js} +1 -1
  293. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-XKoYIi05.js +1 -0
  294. package/web-shell/assets/{swimlanes-XN3QIQJK-BbASszfe.js → swimlanes-XN3QIQJK-D8n-ResR.js} +1 -1
  295. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C7qJMSzs.js +8 -0
  296. package/web-shell/assets/{timeline-definition-24CTP7MA-AXIV0TJJ.js → timeline-definition-24CTP7MA-Cio4y1mM.js} +1 -1
  297. package/web-shell/assets/{vennDiagram-4TSXK5OY-B-E0rj1h.js → vennDiagram-4TSXK5OY-DVlg0xnc.js} +1 -1
  298. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-DiOOYJ2D.js → wardleyDiagram-VM6X3IG4-CgeIsimQ.js} +1 -1
  299. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-De_z7HkS.js → xychartDiagram-S5SC5T6Z-UXjyTLnU.js} +1 -1
  300. package/web-shell/index.html +1 -1
  301. package/web-shell/sw.js +1 -1
  302. package/web-shell/assets/channel-Bwr9aS_E.js +0 -1
  303. package/web-shell/assets/classDiagram-DTDB5LWJ-BmY8Mmyo.js +0 -1
  304. package/web-shell/assets/classDiagram-v2-JRS7N3AN-BmY8Mmyo.js +0 -1
  305. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CTOjUMow.js +0 -1
  306. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Bz6ia3oL.js +0 -8
@@ -1,6 +1,6 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import{MODEL_GENERATION_CONFIG_FIELDS,PROVIDER_SOURCED_FIELDS,QWEN_OAUTH_MODELS}from"./chunk-7WS2EYMQ.js";import{REASONING_EFFORT_TIERS,clampReasoningEffort,defaultModalities,getGptReasoningCapabilities,normalize,parseModelReasoningCapabilities,tokenLimit}from"./chunk-TAAJ7TDB.js";import{DEFAULT_QWEN_MODEL}from"./chunk-4ZBZL23U.js";import{AuthType}from"./chunk-ZZZAYAJW.js";import{createDebugLogger}from"./chunk-JAUJI56S.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var DEFAULT_TIMEOUT=12e4;var DISABLED_REQUEST_TIMEOUT_MS=2147483647;function resolveRequestTimeout(timeout){if(timeout===void 0||timeout===null){return DEFAULT_TIMEOUT}return timeout<=0?DISABLED_REQUEST_TIMEOUT_MS:timeout}__name(resolveRequestTimeout,"resolveRequestTimeout");var DEFAULT_STREAM_IDLE_TIMEOUT_MS=24e4;var QWEN_STREAM_IDLE_TIMEOUT_MS_ENV="QWEN_STREAM_IDLE_TIMEOUT_MS";var MAX_STREAM_GUARD_TIMEOUT_MS=2147483647;var DEFAULT_STREAM_MAX_LIFETIME_MS=9e5;var QWEN_STREAM_MAX_LIFETIME_MS_ENV="QWEN_STREAM_MAX_LIFETIME_MS";var DEFAULT_MAX_RETRIES=3;var DEFAULT_OPENAI_BASE_URL="https://api.openai.com/v1";var DEFAULT_DASHSCOPE_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1";function getDashscopeProxyBaseUrl(){return process.env["DASHSCOPE_PROXY_BASE_URL"]}__name(getDashscopeProxyBaseUrl,"getDashscopeProxyBaseUrl");function normalizeOpenAiWireBaseUrl(baseUrl){return(baseUrl||DEFAULT_OPENAI_BASE_URL).replace(/\/v1\/?$/,"").replace(/\/$/,"")}__name(normalizeOpenAiWireBaseUrl,"normalizeOpenAiWireBaseUrl");init_esbuild_shims();function getRequestModel(generation,model=generation.model??""){if(generation.authType!==void 0&&generation.authType!=="openai"&&generation.authType!=="qwen-oauth")return model;const override={...generation.samplingParams,...generation.extra_body}["model"];return typeof override==="string"?override:model}__name(getRequestModel,"getRequestModel");init_esbuild_shims();function isImageGenerationCapable(model){return model.supportsImageGeneration===true||model.imageOnly===true}__name(isImageGenerationCapable,"isImageGenerationCapable");init_esbuild_shims();var RUNTIME_SNAPSHOT_PREFIX="$runtime|";function buildRuntimeSnapshotId(authType,modelId){return`${RUNTIME_SNAPSHOT_PREFIX}${authType}|${modelId}`}__name(buildRuntimeSnapshotId,"buildRuntimeSnapshotId");function stripRuntimeSnapshotPrefix(modelId){let id=modelId;while(id.startsWith(RUNTIME_SNAPSHOT_PREFIX)){const stripped=id.split("|").slice(2).join("|");if(!stripped)break;id=stripped}return id}__name(stripRuntimeSnapshotPrefix,"stripRuntimeSnapshotPrefix");init_esbuild_shims();import process2 from"node:process";init_esbuild_shims();init_esbuild_shims();var debugLogger=createDebugLogger("MODEL_REGISTRY");function validateAuthTypeKey(key){if(Object.values(AuthType).includes(key)){return key}return void 0}__name(validateAuthTypeKey,"validateAuthTypeKey");function resolveProviderProtocol(providerId,providerProtocol){const explicit=providerProtocol&&Object.hasOwn(providerProtocol,providerId)?providerProtocol[providerId]:void 0;if(explicit!==void 0){return validateAuthTypeKey(explicit)}return validateAuthTypeKey(providerId)}__name(resolveProviderProtocol,"resolveProviderProtocol");function resolveModelProtocol(providerId,model,providerProtocol){const protocol=resolveProviderProtocol(providerId,providerProtocol);if(!protocol||model.wireApi===void 0)return protocol;if(model.wireApi!=="chat-completions"&&model.wireApi!=="responses"){throw new Error(`Invalid wireApi "${model.wireApi}" for provider "${providerId}". Expected "chat-completions" or "responses".`)}if(protocol!=="openai"&&protocol!=="openai-responses"){throw new Error(`Provider "${providerId}" uses protocol "${protocol}"; wireApi is only supported for OpenAI-compatible models.`)}return model.wireApi==="responses"?"openai-responses":"openai"}__name(resolveModelProtocol,"resolveModelProtocol");function tryResolveModelProtocol(providerId,model,providerProtocol){try{return resolveModelProtocol(providerId,model,providerProtocol)}catch{return void 0}}__name(tryResolveModelProtocol,"tryResolveModelProtocol");function validateModelProvidersConfig(modelProviders,providerProtocol){for(const providerId of new Set([...Object.keys(modelProviders??{}),...Object.keys(providerProtocol??{})])){resolveProviderProtocol(providerId,providerProtocol);const models=modelProviders?.[providerId];if(!Array.isArray(models))continue;for(const model of models){resolveModelProtocol(providerId,model,providerProtocol)}}}__name(validateModelProvidersConfig,"validateModelProvidersConfig");function resolveModelSelectionAuthType(authType,modelId,modelProviders,providerProtocol,baseUrl){if(!modelId||authType!=="openai"&&authType!=="openai-responses"){return authType}const candidates=[];for(const[providerId,models]of Object.entries(modelProviders??{})){if(!Array.isArray(models))continue;for(const model of models){const protocol=resolveModelProtocol(providerId,model,providerProtocol);if(model.id===modelId&&(protocol===authType||(model.wireApi!==void 0||resolveProviderProtocol(providerId,providerProtocol)==="openai-responses")&&(protocol==="openai"||protocol==="openai-responses"))){candidates.push({model,authType:protocol})}}}const preferred=__name(entries=>entries.find(entry=>entry.authType===authType)??entries[0],"preferred");const exact=baseUrl===void 0?void 0:preferred(candidates.filter(entry=>(entry.model.baseUrl||null)===(baseUrl||null)));return(exact??preferred(candidates))?.authType??authType}__name(resolveModelSelectionAuthType,"resolveModelSelectionAuthType");function shouldUseCanonicalModalities(modelId){return/^minimax-m3/i.test(modelId.trim().toLowerCase())}__name(shouldUseCanonicalModalities,"shouldUseCanonicalModalities");function modelRegistryKey(id,baseUrl){return baseUrl?`${id}\0${baseUrl}`:id}__name(modelRegistryKey,"modelRegistryKey");var ModelRegistry=class _ModelRegistry{static{__name(this,"ModelRegistry")}modelsByAuthType;providerProtocolConfig;modelProvidersConfig;getDefaultBaseUrl(authType){switch(authType){case"qwen-oauth":return"DYNAMIC_QWEN_OAUTH_BASE_URL";case"openai":return DEFAULT_OPENAI_BASE_URL;default:return""}}constructor(modelProvidersConfig,providerProtocolConfig){validateModelProvidersConfig(modelProvidersConfig,providerProtocolConfig);this.modelsByAuthType=new Map;this.providerProtocolConfig=providerProtocolConfig??{};this.modelProvidersConfig=modelProvidersConfig;this.registerAuthTypeModels("qwen-oauth",QWEN_OAUTH_MODELS);this.registerProvidersConfig(modelProvidersConfig)}registerProvidersConfig(modelProvidersConfig){if(!modelProvidersConfig)return;for(const[providerId,models]of Object.entries(modelProvidersConfig)){const protocol=resolveProviderProtocol(providerId,this.providerProtocolConfig);if(!protocol){const knownProtocols=Object.values(AuthType).filter(value=>value!=="openai-responses").join(", ");const mapped=Object.hasOwn(this.providerProtocolConfig,providerId)?this.providerProtocolConfig[providerId]:void 0;const message=mapped!==void 0?`Provider "${providerId}" maps to "${mapped}" via providerProtocol, which is not a known protocol (${knownProtocols}); skipping.`:`Provider "${providerId}" in modelProviders is not a built-in protocol (${knownProtocols}) and has no providerProtocol mapping; skipping. Add providerProtocol["${providerId}"] to route it to an SDK protocol.`;debugLogger.warn(message);continue}if(protocol==="qwen-oauth"){if(Array.isArray(models)){for(const model of models){resolveModelProtocol(providerId,model,this.providerProtocolConfig)}}continue}this.registerAuthTypeModels(protocol,models,providerId)}}registerAuthTypeModels(authType,models,providerId){if(!Array.isArray(models)){debugLogger.warn(`modelProviders for provider "${providerId??authType}" is not an array; skipping. Expected ModelConfig[]; legacy { protocol, models } entries are normally rewritten by the v5->v4 settings migration.`);return}const providerLabel=providerId&&providerId!==authType?` (provider "${providerId}")`:"";for(const config of models){const modelAuthType=resolveModelProtocol(providerId??authType,config,providerId?this.providerProtocolConfig:void 0);const modelMap=this.modelsByAuthType.get(modelAuthType)??new Map;const key=modelRegistryKey(config.id,config.baseUrl);if(modelMap.has(key)){debugLogger.warn(`Duplicate model id "${config.id}"${config.baseUrl?` with baseUrl "${config.baseUrl}"`:""} for protocol "${modelAuthType}"${providerLabel}. Using the first registered config.`);continue}const resolved=this.resolveModelConfig(config,modelAuthType);modelMap.set(key,resolved);this.modelsByAuthType.set(modelAuthType,modelMap)}}getModelsForAuthType(authType){const models=this.modelsByAuthType.get(authType);if(!models)return[];return Array.from(models.values()).filter(model=>!model.realtimeOnly).map(model=>({id:model.id,label:model.name,description:model.description,capabilities:model.capabilities,authType:model.authType,isVision:model.capabilities?.vision??false,contextWindowSize:model.generationConfig.contextWindowSize??tokenLimit(model.id),modalities:model.generationConfig.modalities,baseUrl:model.baseUrl,...model.registryBaseUrl!==void 0?{registryBaseUrl:model.registryBaseUrl}:{},envKey:model.envKey,fastOnly:model.fastOnly,voiceOnly:model.voiceOnly,visionOnly:model.visionOnly,supportsImageGeneration:model.supportsImageGeneration,imageOnly:model.imageOnly}))}getModel(authType,modelId,baseUrl){const models=this.modelsByAuthType.get(authType);if(!models)return void 0;if(baseUrl!==void 0){const exact=models.get(modelRegistryKey(modelId,baseUrl??void 0));if(exact)return exact;if(baseUrl===null)return void 0;const plain2=models.get(modelId);return plain2?.baseUrl===baseUrl?plain2:void 0}const plain=models.get(modelId);if(plain)return plain;for(const model of models.values()){if(model.id===modelId)return model}return void 0}hasModel(authType,modelId,baseUrl){return this.getModel(authType,modelId,baseUrl)!==void 0}getDefaultModelForAuthType(authType){if(authType==="qwen-oauth"){return this.getModel(authType,DEFAULT_QWEN_MODEL)}const models=this.modelsByAuthType.get(authType);if(!models||models.size===0)return void 0;return Array.from(models.values()).find(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly)}resolveModelConfig(config,authType){this.validateModelConfig(config,authType);const generationConfig={...config.generationConfig??{}};if(generationConfig.modalities===void 0||shouldUseCanonicalModalities(config.id)){generationConfig.modalities=defaultModalities(config.id)}return{...config,authType,name:config.name||config.id,baseUrl:config.baseUrl||this.getDefaultBaseUrl(authType),...config.baseUrl?{registryBaseUrl:config.baseUrl}:{},generationConfig,capabilities:config.capabilities||{}}}validateModelConfig(config,authType){if(!config.id){throw new Error(`Model config in authType '${authType}' missing required field: id`)}const selectorOnlyCount=[config.fastOnly,config.voiceOnly,config.visionOnly,config.imageOnly,config.realtimeOnly].filter(Boolean).length;if(selectorOnlyCount>1){debugLogger.warn(`Model "${config.id}" in authType "${authType}" has multiple selector-only flags. It will be unreachable in at least one model selector.`)}}reloadModels(modelProvidersConfig,providerProtocolConfig){const reloaded=new _ModelRegistry(modelProvidersConfig,providerProtocolConfig??this.providerProtocolConfig);this.modelsByAuthType=reloaded.modelsByAuthType;this.providerProtocolConfig=reloaded.providerProtocolConfig;this.modelProvidersConfig=reloaded.modelProvidersConfig}getModelProvidersConfig(){return this.modelProvidersConfig}getProviderProtocolConfig(){return this.providerProtocolConfig}};var debugLogger2=createDebugLogger("ModelsConfig");var ModelsConfig=class _ModelsConfig{static{__name(this,"ModelsConfig")}modelRegistry;currentAuthType;currentRegistryBaseUrl;_generationConfig;generationConfigSources;strictModelProviderSelection=false;requireCachedQwenCredentialsOnce=false;hasManualCredentials=false;onModelChange;authTypeWasExplicitlyProvided;runtimeModelSnapshots=new Map;activeRuntimeModelSnapshotId;static deepClone(value){if(value===null||typeof value!=="object"){return value}if(Array.isArray(value)){return value.map(v=>_ModelsConfig.deepClone(v))}const out={};for(const key of Object.keys(value)){out[key]=_ModelsConfig.deepClone(value[key])}return out}constructor(options={}){this.modelRegistry=new ModelRegistry(options.modelProvidersConfig,options.providerProtocolConfig);this.onModelChange=options.onModelChange;this._generationConfig={...options.generationConfig||{}};this.generationConfigSources=options.generationConfigSources||{};this.authTypeWasExplicitlyProvided=options.initialAuthType!==void 0;const initialModelId=this._generationConfig.model;this.currentAuthType=options.initialAuthType?resolveModelSelectionAuthType(options.initialAuthType,this.generationConfigSources["model"]?.kind==="default"?void 0:initialModelId,options.modelProvidersConfig,options.providerProtocolConfig,options.initialRegistryBaseUrl):void 0;if(this.currentAuthType&&initialModelId){const initialModel=this.modelRegistry.getModel(this.currentAuthType,initialModelId,options.initialRegistryBaseUrl);if(initialModel){this.currentRegistryBaseUrl=initialModel.registryBaseUrl??null}}}createStateSnapshotForRollback(){return{currentAuthType:this.currentAuthType,generationConfig:_ModelsConfig.deepClone(this._generationConfig),generationConfigSources:_ModelsConfig.deepClone(this.generationConfigSources),strictModelProviderSelection:this.strictModelProviderSelection,requireCachedQwenCredentialsOnce:this.requireCachedQwenCredentialsOnce,hasManualCredentials:this.hasManualCredentials,activeRuntimeModelSnapshotId:this.activeRuntimeModelSnapshotId,currentRegistryBaseUrl:this.currentRegistryBaseUrl}}rollbackToStateSnapshot(snapshot){this.currentAuthType=snapshot.currentAuthType;this._generationConfig=snapshot.generationConfig;this.generationConfigSources=snapshot.generationConfigSources;this.strictModelProviderSelection=snapshot.strictModelProviderSelection;this.requireCachedQwenCredentialsOnce=snapshot.requireCachedQwenCredentialsOnce;this.hasManualCredentials=snapshot.hasManualCredentials;this.activeRuntimeModelSnapshotId=snapshot.activeRuntimeModelSnapshotId;this.currentRegistryBaseUrl=snapshot.currentRegistryBaseUrl}getModel(){return this._generationConfig.model||DEFAULT_QWEN_MODEL}getCurrentAuthType(){return this.currentAuthType}getCurrentRegistryBaseUrl(){return this.currentRegistryBaseUrl}wasAuthTypeExplicitlyProvided(){return this.authTypeWasExplicitlyProvided}getAvailableModels(){return this.currentAuthType?this.modelRegistry.getModelsForAuthType(this.currentAuthType):[]}getAvailableModelsForAuthType(authType){return this.modelRegistry.getModelsForAuthType(authType)}getAllConfiguredModels(authTypes){const inputAuthTypes=authTypes&&authTypes.length>0?authTypes:Object.values(AuthType);const seen=new Set;const uniqueAuthTypes=[];for(const authType of inputAuthTypes){if(!seen.has(authType)){seen.add(authType);uniqueAuthTypes.push(authType)}}const orderedAuthTypes=[];if(uniqueAuthTypes.includes("qwen-oauth")){orderedAuthTypes.push("qwen-oauth")}for(const authType of uniqueAuthTypes){if(authType!=="qwen-oauth"){orderedAuthTypes.push(authType)}}const runtimeOption=this.getRuntimeModelOption();const allModels=[];for(const authType of orderedAuthTypes){if(runtimeOption&&runtimeOption.authType===authType){allModels.push(runtimeOption)}allModels.push(...this.modelRegistry.getModelsForAuthType(authType))}return allModels}hasModel(authType,modelId){return this.modelRegistry.hasModel(authType,modelId)}getResolvedModel(authType,modelId,baseUrl){return this.modelRegistry.getModel(authType,modelId,baseUrl)}getModelDisplayName(modelId){if(!this.currentAuthType)return modelId;const resolved=(this.currentRegistryBaseUrl!==void 0?this.modelRegistry.getModel(this.currentAuthType,modelId,this.currentRegistryBaseUrl):void 0)??this.modelRegistry.getModel(this.currentAuthType,modelId);return resolved?.name??modelId}async setModel(newModel,metadata){if(this.currentAuthType==="qwen-oauth"&&newModel===DEFAULT_QWEN_MODEL){this.strictModelProviderSelection=false;this.currentRegistryBaseUrl=void 0;this._generationConfig.model=newModel;this.generationConfigSources["model"]={kind:"programmatic",detail:metadata?.reason||"setModel"};this.applyRawModelDerivedDefaults(newModel);if(this.onModelChange){await this.onModelChange("qwen-oauth",false)}return}if(this.currentAuthType&&this.modelRegistry.hasModel(this.currentAuthType,newModel)){await this.switchModel(this.currentAuthType,newModel);return}const siblingWire=this.currentAuthType==="openai"?"openai-responses":this.currentAuthType==="openai-responses"?"openai":void 0;if(siblingWire&&this.modelRegistry.hasModel(siblingWire,newModel)){await this.switchModel(siblingWire,newModel);return}const rollbackSnapshot=this.createStateSnapshotForRollback();try{this.strictModelProviderSelection=false;this.currentRegistryBaseUrl=void 0;this._generationConfig.model=newModel;this.generationConfigSources["model"]={kind:"programmatic",detail:metadata?.reason||"setModel"};this.applyRawModelDerivedDefaults(newModel);if(this.onModelChange&&this.currentAuthType){await this.onModelChange(this.currentAuthType,true)}}catch(error){this.rollbackToStateSnapshot(rollbackSnapshot);throw error}}applyRawModelDerivedDefaults(modelId){if(this.shouldUpdateModelDerivedDefault("modalities")){this._generationConfig.modalities=defaultModalities(modelId);this.generationConfigSources["modalities"]={kind:"computed",detail:"auto-detected from model"}}if(this.shouldUpdateModelDerivedDefault("contextWindowSize")){this._generationConfig.contextWindowSize=tokenLimit(modelId,"input");this.generationConfigSources["contextWindowSize"]={kind:"computed",detail:"auto-detected from model"}}}shouldUpdateModelDerivedDefault(field){const source=this.generationConfigSources[field];return source===void 0||source.kind==="computed"||source.kind==="default"||source.kind==="modelProviders"||source.kind==="programmatic"||source.kind==="unknown"}async switchModel(authType,modelId,options){const runtimeModelSnapshotId=this.extractRuntimeModelSnapshotId(modelId);if(runtimeModelSnapshotId){await this.switchToRuntimeModel(runtimeModelSnapshotId);return}const rollbackSnapshot=this.createStateSnapshotForRollback();if(authType==="qwen-oauth"&&options?.requireCachedCredentials){this.requireCachedQwenCredentialsOnce=true}try{const isAuthTypeChange=authType!==this.currentAuthType;this.currentAuthType=authType;const model=this.modelRegistry.getModel(authType,modelId,options?.baseUrl);if(!model){throw new Error(`Model '${modelId}' not found for authType '${authType}'`)}if(model.imageOnly||model.voiceOnly||model.realtimeOnly){throw new Error(`${model.imageOnly?"Image":model.voiceOnly?"Voice":"Realtime"}-only model '${modelId}' cannot be used as the primary model`)}const previousModelId=rollbackSnapshot.generationConfig.model||"";const previousAuthType=rollbackSnapshot.currentAuthType;const previousModel=previousAuthType&&previousModelId?this.modelRegistry.getModel(previousAuthType,previousModelId,rollbackSnapshot.currentRegistryBaseUrl)??this.modelRegistry.getModel(previousAuthType,previousModelId):void 0;const sharesOpenAICredentials=(authType==="openai"||authType==="openai-responses")&&(previousAuthType==="openai"||previousAuthType==="openai-responses");const sameEndpoint=__name((a,b)=>a===b||isAuthTypeChange&&sharesOpenAICredentials&&normalizeOpenAiWireBaseUrl(a)===normalizeOpenAiWireBaseUrl(b),"sameEndpoint");const canReusePreviousApiKey=authType!=="qwen-oauth"&&(!isAuthTypeChange||sharesOpenAICredentials&&sameEndpoint(rollbackSnapshot.generationConfig.baseUrl,model.baseUrl))&&!!rollbackSnapshot.generationConfig.apiKey&&!!model.envKey&&previousModel!==void 0&&previousModel.envKey===model.envKey&&sameEndpoint(previousModel.baseUrl,model.baseUrl);const previousApiKey=canReusePreviousApiKey?rollbackSnapshot.generationConfig.apiKey:void 0;const previousApiKeySource=canReusePreviousApiKey?rollbackSnapshot.generationConfigSources["apiKey"]:void 0;this.applyResolvedModelDefaults(model);if(!this._generationConfig.apiKey&&previousApiKey){this._generationConfig.apiKey=previousApiKey;if(previousApiKeySource){this.generationConfigSources["apiKey"]=_ModelsConfig.deepClone(previousApiKeySource)}}this.activeRuntimeModelSnapshotId=void 0;const requiresRefresh=isAuthTypeChange?true:this.checkRequiresRefresh(previousModelId);if(this.onModelChange){await this.onModelChange(authType,requiresRefresh)}}catch(error){this.rollbackToStateSnapshot(rollbackSnapshot);throw error}}buildRuntimeModelSnapshotId(authType,modelId){return buildRuntimeSnapshotId(authType,modelId)}extractRuntimeModelSnapshotId(modelId){if(modelId.startsWith(RUNTIME_SNAPSHOT_PREFIX)){if(this.runtimeModelSnapshots.has(modelId)){return modelId}return void 0}if(this.runtimeModelSnapshots.has(modelId)){return modelId}return void 0}getGenerationConfig(){return this._generationConfig}getGenerationConfigSources(){return this.generationConfigSources}mergeSettingsGenerationConfig(settingsGenerationConfig){if(!settingsGenerationConfig){return}for(const field of MODEL_GENERATION_CONFIG_FIELDS){if(!(field in this._generationConfig)&&field in settingsGenerationConfig){this._generationConfig[field]=settingsGenerationConfig[field];this.generationConfigSources[field]={kind:"settings",detail:`model.generationConfig.${field}`}}}}updateCredentials(credentials,settingsGenerationConfig){if(credentials.apiKey||credentials.baseUrl||credentials.model){this.hasManualCredentials=true;this.currentRegistryBaseUrl=void 0;this.clearProviderSourcedConfig()}if(credentials.apiKey){this._generationConfig.apiKey=credentials.apiKey;this.generationConfigSources["apiKey"]={kind:"programmatic",detail:"updateCredentials"}}if(credentials.baseUrl){this._generationConfig.baseUrl=credentials.baseUrl;this.generationConfigSources["baseUrl"]={kind:"programmatic",detail:"updateCredentials"}}if(credentials.model){this._generationConfig.model=credentials.model;this.generationConfigSources["model"]={kind:"programmatic",detail:"updateCredentials"}}this.strictModelProviderSelection=false;this._generationConfig.apiKeyEnvKey=void 0;if(settingsGenerationConfig){this.mergeSettingsGenerationConfig(settingsGenerationConfig)}this.syncRuntimeModelSnapshotWithCredentials()}syncRuntimeModelSnapshotWithCredentials(){const currentAuthType=this.currentAuthType;const{model,apiKey,baseUrl}=this._generationConfig;if(!model||!currentAuthType||!apiKey||!baseUrl){return}if(this.modelRegistry.hasModel(currentAuthType,model,baseUrl)){return}if(this.activeRuntimeModelSnapshotId&&this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){const snapshot=this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId);snapshot.apiKey=apiKey;snapshot.baseUrl=baseUrl;snapshot.modelId=model;const newSnapshotId=this.buildRuntimeModelSnapshotId(snapshot.authType,snapshot.modelId);if(newSnapshotId!==snapshot.id){this.runtimeModelSnapshots.delete(snapshot.id);snapshot.id=newSnapshotId;this.runtimeModelSnapshots.set(newSnapshotId,snapshot);this.activeRuntimeModelSnapshotId=newSnapshotId}snapshot.createdAt=Date.now()}else{this.detectAndCaptureRuntimeModel()}}clearProviderSourcedConfig(){for(const field of PROVIDER_SOURCED_FIELDS){const source=this.generationConfigSources[field];if(source?.kind==="modelProviders"){delete this._generationConfig[field];delete this.generationConfigSources[field]}}}isStrictModelProviderSelection(){return this.strictModelProviderSelection}resetStrictModelProviderSelection(){this.strictModelProviderSelection=false}consumeRequireCachedCredentialsFlag(){const value=this.requireCachedQwenCredentialsOnce;this.requireCachedQwenCredentialsOnce=false;return value}applyResolvedModelDefaults(model){this.strictModelProviderSelection=true;this.currentRegistryBaseUrl=model.registryBaseUrl??null;this.hasManualCredentials=false;this._generationConfig.model=model.id;this.generationConfigSources["model"]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"model.id"};if(this.currentAuthType==="qwen-oauth"){this._generationConfig.apiKey="QWEN_OAUTH_DYNAMIC_TOKEN";this.generationConfigSources["apiKey"]={kind:"computed",detail:"Qwen OAuth placeholder token"};this._generationConfig.apiKeyEnvKey=void 0;delete this.generationConfigSources["apiKeyEnvKey"]}else{this._generationConfig.apiKey=void 0;this._generationConfig.apiKeyEnvKey=void 0}if(model.envKey!==void 0){const apiKey=process2.env[model.envKey];if(apiKey){this._generationConfig.apiKey=apiKey;this.generationConfigSources["apiKey"]={kind:"env",envKey:model.envKey,via:{kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"envKey"}}}else{debugLogger2.debug(`No API key found for model "${model.id}": process.env["${model.envKey}"] is ${apiKey===""?"empty string":"not set"}. Run /auth or set ${model.envKey} in your environment.`)}this._generationConfig.apiKeyEnvKey=model.envKey;this.generationConfigSources["apiKeyEnvKey"]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"envKey"}}this._generationConfig.baseUrl=model.baseUrl;this.generationConfigSources["baseUrl"]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"baseUrl"};const gc=model.generationConfig;for(const field of MODEL_GENERATION_CONFIG_FIELDS){this._generationConfig[field]=gc[field];this.generationConfigSources[field]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:`generationConfig.${field}`}}if(gc.contextWindowSize===void 0){this._generationConfig.contextWindowSize=tokenLimit(model.id,"input");this.generationConfigSources["contextWindowSize"]={kind:"computed",detail:"auto-detected from model"}}if(gc.modalities===void 0){this._generationConfig.modalities=defaultModalities(model.id);this.generationConfigSources["modalities"]={kind:"computed",detail:"auto-detected from model"}}}checkRequiresRefresh(previousModelId){const authType=this.currentAuthType;if(!authType){return true}if(authType==="qwen-oauth"){return false}const currentModel=this.modelRegistry.getModel(authType,this._generationConfig.model||"",this._generationConfig.baseUrl||void 0);const previousModel=this.modelRegistry.getModel(authType,previousModelId);if(!previousModel||!currentModel){return true}const criticalFieldsChanged=previousModel.envKey!==currentModel.envKey||previousModel.baseUrl!==currentModel.baseUrl;if(criticalFieldsChanged){return true}return false}syncAfterAuthRefresh(authType,modelId,providerBaseUrlOverride){const previousAuthType=this.currentAuthType;const providerBaseUrl=providerBaseUrlOverride??(previousAuthType===authType&&this.currentRegistryBaseUrl!==void 0?this.currentRegistryBaseUrl:this.generationConfigSources["baseUrl"]?.kind==="modelProviders"?this._generationConfig.baseUrl:void 0);const wasRegistered=(authType==="openai"||authType==="openai-responses")&&previousAuthType===authType&&this.currentRegistryBaseUrl!==void 0&&modelId===this._generationConfig.model;const resolved=modelId?this.modelRegistry.getModel(authType,modelId,providerBaseUrl)??this.modelRegistry.getModel(authType,modelId):void 0;if(wasRegistered&&!resolved){throw new Error(`Model '${modelId}' is no longer configured for authType '${authType}'. Select an available model.`)}if(resolved?.imageOnly||resolved?.voiceOnly||resolved?.realtimeOnly){throw new Error(`${resolved.imageOnly?"Image":resolved.voiceOnly?"Voice":"Realtime"}-only model '${modelId}' cannot be used as the primary model`)}this.strictModelProviderSelection=false;this.currentAuthType=authType;if(resolved){const hasBeenApplied=this.generationConfigSources["baseUrl"]?.kind==="modelProviders";const isProviderChanged=hasBeenApplied&&(this._generationConfig.apiKeyEnvKey!==resolved.envKey||this._generationConfig.baseUrl!==resolved.baseUrl);const isUnchanged=previousAuthType===authType&&this._generationConfig.model===modelId&&!isProviderChanged;const savedApiKey=isUnchanged?this._generationConfig.apiKey:void 0;const savedApiKeySource=isUnchanged?this.generationConfigSources["apiKey"]?{...this.generationConfigSources["apiKey"]}:void 0:void 0;const baseUrlSource2=this.generationConfigSources["baseUrl"];const shouldPreserveResolvedBaseUrl=isUnchanged&&!!this._generationConfig.baseUrl&&(baseUrlSource2?.kind==="cli"||baseUrlSource2?.kind==="env"||baseUrlSource2?.kind==="settings");const savedBaseUrl=shouldPreserveResolvedBaseUrl?this._generationConfig.baseUrl:void 0;const savedBaseUrlSource=shouldPreserveResolvedBaseUrl?baseUrlSource2?{...baseUrlSource2}:void 0:void 0;this.applyResolvedModelDefaults(resolved);if(isUnchanged&&!this._generationConfig.apiKey&&savedApiKey){this._generationConfig.apiKey=savedApiKey;if(savedApiKeySource){this.generationConfigSources["apiKey"]=savedApiKeySource}}if(savedBaseUrl){this._generationConfig.baseUrl=savedBaseUrl;if(savedBaseUrlSource){this.generationConfigSources["baseUrl"]=savedBaseUrlSource}}this.strictModelProviderSelection=true;this.activeRuntimeModelSnapshotId=void 0;return}const apiKeySource=this.generationConfigSources["apiKey"];const baseUrlSource=this.generationConfigSources["baseUrl"];const hasExistingCredentials=this._generationConfig.apiKey&&apiKeySource?.kind!=="modelProviders"||this._generationConfig.baseUrl&&baseUrlSource?.kind!=="modelProviders";const isAuthTypeChange=previousAuthType!==authType;const shouldPreserveCredentials=!isAuthTypeChange&&(modelId===void 0||!this.modelRegistry.hasModel(authType,modelId))&&(this.hasManualCredentials||hasExistingCredentials);if(shouldPreserveCredentials){this.currentRegistryBaseUrl=void 0;if(modelId){this._generationConfig.model=modelId;if(!this.generationConfigSources["model"]){this.generationConfigSources["model"]={kind:"programmatic",detail:"auth refresh (preserved credentials)"}}}return}const defaultModel=this.modelRegistry.getDefaultModelForAuthType(authType);if(defaultModel){this.applyResolvedModelDefaults(defaultModel);this.activeRuntimeModelSnapshotId=void 0;return}if(modelId){this.currentRegistryBaseUrl=void 0;this._generationConfig.model=modelId;if(!this.generationConfigSources["model"]){this.generationConfigSources["model"]={kind:"programmatic",detail:"auth refresh (no default model)"}}}}setOnModelChange(callback){this.onModelChange=callback}detectAndCaptureRuntimeModel(){const{model:currentModel,apiKey,baseUrl,apiKeyEnvKey,...generationConfig}=this._generationConfig;const currentAuthType=this.currentAuthType;if(!currentModel||!currentAuthType){return void 0}if(this.modelRegistry.hasModel(currentAuthType,currentModel,baseUrl)){this.clearRuntimeModelSnapshotForAuthType(currentAuthType);return void 0}const hasValidCredentials=this._generationConfig.apiKey&&this._generationConfig.baseUrl;if(!hasValidCredentials){return void 0}const snapshotId=this.buildRuntimeModelSnapshotId(currentAuthType,currentModel);const snapshot={id:snapshotId,authType:currentAuthType,modelId:currentModel,apiKey,baseUrl,apiKeyEnvKey,generationConfig,sources:{...this.generationConfigSources},createdAt:Date.now()};this.runtimeModelSnapshots.set(snapshotId,snapshot);this.activeRuntimeModelSnapshotId=snapshotId;this.currentRegistryBaseUrl=void 0;this.cleanupOldRuntimeModelSnapshots();return snapshotId}getActiveRuntimeModelSnapshot(){if(!this.activeRuntimeModelSnapshotId){return void 0}return this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId)}getActiveRuntimeModelSnapshotId(){return this.activeRuntimeModelSnapshotId}async switchToRuntimeModel(snapshotId){const runtimeModelSnapshot=this.runtimeModelSnapshots.get(snapshotId);if(!runtimeModelSnapshot){throw new Error(`Runtime model snapshot '${snapshotId}' not found`)}const rollbackSnapshot=this.createStateSnapshotForRollback();try{const isAuthTypeChange=runtimeModelSnapshot.authType!==this.currentAuthType;this.currentAuthType=runtimeModelSnapshot.authType;this.activeRuntimeModelSnapshotId=snapshotId;this.currentRegistryBaseUrl=void 0;this.strictModelProviderSelection=false;this.hasManualCredentials=true;this._generationConfig.model=runtimeModelSnapshot.modelId;this.generationConfigSources["model"]={kind:"programmatic",detail:"runtimeModelSwitch"};if(runtimeModelSnapshot.apiKey){this._generationConfig.apiKey=runtimeModelSnapshot.apiKey;this.generationConfigSources["apiKey"]=runtimeModelSnapshot.sources["apiKey"]||{kind:"programmatic",detail:"runtimeModelSwitch"}}if(runtimeModelSnapshot.baseUrl){this._generationConfig.baseUrl=runtimeModelSnapshot.baseUrl;this.generationConfigSources["baseUrl"]=runtimeModelSnapshot.sources["baseUrl"]||{kind:"programmatic",detail:"runtimeModelSwitch"}}if(runtimeModelSnapshot.apiKeyEnvKey){this._generationConfig.apiKeyEnvKey=runtimeModelSnapshot.apiKeyEnvKey}if(runtimeModelSnapshot.generationConfig){Object.assign(this._generationConfig,runtimeModelSnapshot.generationConfig)}const requiresRefresh=isAuthTypeChange;if(this.onModelChange){await this.onModelChange(runtimeModelSnapshot.authType,requiresRefresh)}}catch(error){this.rollbackToStateSnapshot(rollbackSnapshot);throw error}}getRuntimeModelOption(){const snapshot=this.getActiveRuntimeModelSnapshot();if(!snapshot){return void 0}return{id:snapshot.modelId,label:snapshot.modelId,authType:snapshot.authType,isVision:false,contextWindowSize:snapshot.generationConfig?.contextWindowSize,isRuntimeModel:true,runtimeSnapshotId:snapshot.id}}clearRuntimeModelSnapshotForAuthType(authType){for(const[id,snapshot]of this.runtimeModelSnapshots.entries()){if(snapshot.authType===authType){this.runtimeModelSnapshots.delete(id);if(this.activeRuntimeModelSnapshotId===id){this.activeRuntimeModelSnapshotId=void 0}}}}cleanupOldRuntimeModelSnapshots(){const snapshotsByAuthType=new Map;for(const snapshot of this.runtimeModelSnapshots.values()){const existing=snapshotsByAuthType.get(snapshot.authType);if(!existing||snapshot.createdAt>existing.createdAt){snapshotsByAuthType.set(snapshot.authType,snapshot)}}this.runtimeModelSnapshots.clear();for(const snapshot of snapshotsByAuthType.values()){this.runtimeModelSnapshots.set(snapshot.id,snapshot)}if(this.activeRuntimeModelSnapshotId&&!this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){this.activeRuntimeModelSnapshotId=void 0}}reloadModelProvidersConfig(modelProvidersConfig,providerProtocolConfig){this.modelRegistry.reloadModels(modelProvidersConfig,providerProtocolConfig)}getModelProvidersConfig(){return this.modelRegistry.getModelProvidersConfig()}getProviderProtocolConfig(){return this.modelRegistry.getProviderProtocolConfig()}};init_esbuild_shims();import{isDeepStrictEqual}from"node:util";init_esbuild_shims();import{createHash}from"node:crypto";function resolveEnvKey(config,inputs){const protocol=inputs.protocol??config.protocol;const key=typeof config.envKey==="function"?config.envKey(protocol,inputs.baseUrl):config.envKey;return config.id==="custom-openai-compatible"&&inputs.advancedConfig?.purpose?`${key}_${inputs.advancedConfig.purpose.toUpperCase()}`:key}__name(resolveEnvKey,"resolveEnvKey");function resolveModelNamePrefix(config,baseUrl){return typeof config.modelNamePrefix==="function"?config.modelNamePrefix(baseUrl):config.modelNamePrefix}__name(resolveModelNamePrefix,"resolveModelNamePrefix");function resolveOwnsModel(config){if(config.ownsModel)return config.ownsModel;if(typeof config.envKey!=="string"||typeof config.modelNamePrefix!=="string"){return void 0}const envKey=config.envKey;const prefix=config.modelNamePrefix;if(!prefix)return model=>model.envKey===envKey;const namePrefix=`[${prefix}] `;return model=>model.envKey===envKey&&typeof model.name==="string"&&model.name.startsWith(namePrefix)}__name(resolveOwnsModel,"resolveOwnsModel");function buildGenerationConfig(spec,protocol){const parts={};let hasAny=false;if(spec.enableThinking){if(protocol==="openai-responses"){parts.reasoning={effort:"medium"}}else{parts.extra_body={enable_thinking:true}}hasAny=true}if(spec.thinkingMandatory){parts.thinkingMandatory=true;hasAny=true}if(spec.contextWindowSize){parts.contextWindowSize=spec.contextWindowSize;hasAny=true}if(spec.modalities&&Object.values(spec.modalities).some(Boolean)){parts.modalities=spec.modalities;hasAny=true}return hasAny?parts:void 0}__name(buildGenerationConfig,"buildGenerationConfig");function buildAdvancedGenerationConfig(advCfg,protocol){const cfg={};let hasAny=false;if(advCfg?.enableThinking){if(protocol==="openai-responses"){cfg.reasoning={effort:"medium"}}else{cfg.extra_body={enable_thinking:true}}hasAny=true}if(advCfg?.multimodal&&Object.values(advCfg.multimodal).some(Boolean)){cfg.modalities=advCfg.multimodal;hasAny=true}if(advCfg?.contextWindowSize&&advCfg.contextWindowSize>0){cfg.contextWindowSize=advCfg.contextWindowSize;hasAny=true}if(advCfg?.maxTokens&&advCfg.maxTokens>0){cfg.samplingParams={max_tokens:advCfg.maxTokens};hasAny=true}return hasAny?cfg:void 0}__name(buildAdvancedGenerationConfig,"buildAdvancedGenerationConfig");function specToModelConfig(spec,prefix,baseUrl,envKey,protocol){const genConfig=buildGenerationConfig(spec,protocol);return{id:spec.id,name:prefix?`[${prefix}] ${spec.id}`:spec.id,...spec.description?{description:spec.description}:{},...spec.capabilities?{capabilities:spec.capabilities}:{},baseUrl,envKey,...spec.supportsImageGeneration?{supportsImageGeneration:true}:{},...spec.imageOnly?{imageOnly:true}:{},...genConfig?{generationConfig:genConfig}:{}}}__name(specToModelConfig,"specToModelConfig");function applyProviderCustomHeaders(models,config){if(!config.customHeaders)return models;return models.map(model=>{const existing=model.generationConfig??{};return{...model,generationConfig:{...existing,customHeaders:{...config.customHeaders,...existing.customHeaders}}}})}__name(applyProviderCustomHeaders,"applyProviderCustomHeaders");function buildModelConfigs(config,inputs){const envKey=resolveEnvKey(config,inputs);const prefix=resolveModelNamePrefix(config,inputs.baseUrl);const protocol=resolveModelProtocol(inputs.protocol??config.protocol,inputs);let models;if(config.models&&!config.modelsEditable){models=config.models.map(spec=>specToModelConfig(spec,prefix,inputs.baseUrl,envKey,protocol))}else if(config.models&&config.modelsEditable){const specMap=new Map(config.models.map(s=>[s.id.toLowerCase(),s]));models=inputs.modelIds.map(id=>{const spec=specMap.get(id.toLowerCase());if(spec){return specToModelConfig({...spec,id},prefix,inputs.baseUrl,envKey,protocol)}const genConfig=buildAdvancedGenerationConfig(inputs.advancedConfig,protocol);return{id,name:prefix?`[${prefix}] ${id}`:id,baseUrl:inputs.baseUrl,envKey,...genConfig?{generationConfig:genConfig}:{}}})}else{const advCfg=inputs.advancedConfig;const displayName=__name(id=>prefix?`[${prefix}] ${id}`:id,"displayName");models=inputs.modelIds.map(id=>{const genConfig=buildAdvancedGenerationConfig(advCfg,protocol);return{id,name:displayName(id),baseUrl:inputs.baseUrl,envKey,...advCfg?.purpose==="image"?{supportsImageGeneration:true,imageOnly:true}:advCfg?.purpose==="voice"?{voiceOnly:true}:{},...genConfig?{generationConfig:genConfig}:{}}})}return applyProviderCustomHeaders(models,config)}__name(buildModelConfigs,"buildModelConfigs");function resolveMetadataKey(config){if(!config.models)return void 0;if(config.id.includes(".")){throw new Error(`Provider id must not contain '.' (would corrupt providerMetadata.${config.id} dotted writes): ${config.id}`)}return config.id}__name(resolveMetadataKey,"resolveMetadataKey");var PROVIDER_METADATA_NS="providerMetadata";function resolveProviderState(config,baseUrl,models){const key=resolveMetadataKey(config);if(key){return{[`${PROVIDER_METADATA_NS}.${key}`]:{version:computeModelListVersion(models),baseUrl}}}return void 0}__name(resolveProviderState,"resolveProviderState");function retireProviderState(config){const key=resolveMetadataKey(config);return key?{[`${PROVIDER_METADATA_NS}.${key}`]:{version:void 0}}:void 0}__name(retireProviderState,"retireProviderState");function buildInstallPlan(config,inputs,existingModels=[],selection){const inputProtocol=inputs.protocol??config.protocol;const protocol=resolveModelProtocol(inputProtocol,inputs);const isOpenAI=protocol==="openai"||protocol==="openai-responses";const savedProtocol=isOpenAI?"openai":protocol;const wireApi=inputs.wireApi??(inputProtocol==="openai-responses"?"responses":void 0);if(inputProtocol==="openai-responses"){inputs={...inputs,protocol:savedProtocol,wireApi}}let envKey=resolveEnvKey(config,inputs);const providerOwns=resolveOwnsModel(config);const builtModels=inputs.prebuiltModels??buildModelConfigs(config,inputs);const preserveSavedApis=isOpenAI&&!config.protocolOptions&&wireApi===void 0;let models=wireApi?builtModels.map(model=>model.wireApi===void 0?{...model,wireApi}:model):builtModels;if(preserveSavedApis&&existingModels.length){const responsesModels=inputs.prebuiltModels??buildModelConfigs(config,{...inputs,wireApi:"responses"});models=builtModels.flatMap((model,index)=>{if(model.wireApi!==void 0)return[model];const saved=existingModels.filter(entry=>providerOwns?.(entry)&&entry.id===model.id&&entry.baseUrl===model.baseUrl&&tryResolveModelProtocol(savedProtocol,entry)!==void 0);if(!saved.length)return[model];const seen=new Set;return saved.flatMap(entry=>{const route=resolveModelProtocol(savedProtocol,entry);if(seen.has(route))return[];seen.add(route);return[{...route==="openai-responses"?responsesModels[index]:model,...entry.wireApi!==void 0?{wireApi:entry.wireApi}:{}}]})})}const providerState=resolveProviderState(config,inputs.baseUrl,models);if(config.id==="custom-openai-compatible"&&existingModels?.some(entry=>providerOwns?.(entry)&&(entry.imageOnly||entry.voiceOnly||entry.realtimeOnly)&&models.some(model=>model.id===entry.id)&&typeof entry.baseUrl==="string"&&entry.baseUrl!==inputs.baseUrl&&resolveEnvKey(config,{...inputs,baseUrl:entry.baseUrl})===envKey)){throw new ProviderInstallError("A service model already uses this credential endpoint. Reconnect using its exact saved base URL.","modelPurpose",protocol)}if(existingModels?.length&&!inputs.advancedConfig?.purpose){models=models.map(model=>{const existing=existingModels.find(entry=>(providerOwns?.(entry)||config.mergeModelsByIdentity)&&entry.id===model.id&&entry.baseUrl===model.baseUrl&&tryResolveModelProtocol(savedProtocol,entry)===resolveModelProtocol(savedProtocol,model));if(!existing)return model;const preservedGeneration={...existing.generationConfig};const advanced=inputs.advancedConfig;if(!config.models&&advanced){if(advanced.replaceExisting){delete preservedGeneration.contextWindowSize;if(preservedGeneration.samplingParams){preservedGeneration.samplingParams={...preservedGeneration.samplingParams};delete preservedGeneration.samplingParams.max_tokens;if(!Object.keys(preservedGeneration.samplingParams).length)delete preservedGeneration.samplingParams}}if(advanced.replaceExisting||advanced.multimodal!==void 0)delete preservedGeneration.modalities;if(advanced.replaceExisting||advanced.enableThinking!==void 0){if(preservedGeneration.extra_body){preservedGeneration.extra_body={...preservedGeneration.extra_body};delete preservedGeneration.extra_body["enable_thinking"];if(!Object.keys(preservedGeneration.extra_body).length)delete preservedGeneration.extra_body}if(protocol==="openai-responses")delete preservedGeneration.reasoning}}const generationConfig=Object.keys(preservedGeneration).length||model.generationConfig?{...preservedGeneration,...model.generationConfig,...preservedGeneration.extra_body||model.generationConfig?.extra_body?{extra_body:{...preservedGeneration.extra_body,...model.generationConfig?.extra_body}}:{},...preservedGeneration.contextWindowSize!==void 0&&inputs.advancedConfig?.contextWindowSize===void 0?{contextWindowSize:preservedGeneration.contextWindowSize}:{},...preservedGeneration.samplingParams||model.generationConfig?.samplingParams?{samplingParams:{...preservedGeneration.samplingParams,...model.generationConfig?.samplingParams}}:{},...preservedGeneration.customHeaders||model.generationConfig?.customHeaders?{customHeaders:{...preservedGeneration.customHeaders,...model.generationConfig?.customHeaders}}:{}}:void 0;return{...existing,...model,name:existing?.name??model.name,generationConfig,...existing?.supportsImageGeneration?{supportsImageGeneration:true}:{},...existing?.imageOnly?{imageOnly:true}:{},...existing?.voiceOnly?{voiceOnly:true}:{},...existing?.realtimeOnly?{realtimeOnly:true}:{},...existing.envKey?{envKey:existing.envKey}:{}}})}if(models.length>0){const conversation=models.filter(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly);const credentialModels=conversation.length?conversation:models;const keys=new Set(credentialModels.map(model=>model.envKey));if(keys.size>1&&inputs.apiKey){throw new Error("Reconnect models with different credential references separately to preserve their independent API keys.")}if(credentialModels[0]?.envKey)envKey=credentialModels[0].envKey}const ownsModel=config.mergeModelsByIdentity?void 0:resolveOwnsModel(config);for(const model of models){const modelProtocol=resolveModelProtocol(savedProtocol,model);if(model.voiceOnly&&modelProtocol!=="openai"){throw new ProviderInstallError("Voice transcription requires the OpenAI Chat Completions API.","modelPurpose",protocol)}}const selectedModels=preserveSavedApis&&selection?.id?models.filter(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly&&model.id===selection.id&&(!selection.baseUrl||model.baseUrl===selection.baseUrl)):[];const firstModel=selectedModels.find(model=>resolveModelProtocol(savedProtocol,model)===selection?.authType)??selectedModels[0]??models.find(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly);if(models.length===0){throw new Error(`No models configured for provider "${config.id}". Check model list or provider configuration.`)}const firstModelId=firstModel?.id;const modelSelection=firstModelId===void 0?void 0:{modelId:firstModelId,...config.mergeModelsByIdentity&&firstModel?.baseUrl?{baseUrl:firstModel.baseUrl}:{}};return{providerId:config.id,authType:firstModel?resolveModelProtocol(savedProtocol,firstModel):savedProtocol,env:{[envKey]:inputs.apiKey},...modelSelection?{modelSelection}:{},modelProviders:[{authType:savedProtocol,models,mergeStrategy:"prepend-and-remove-owned",...ownsModel?{ownsModel}:{}}],providerState:models.every(model=>model.wireApi===void 0)&&protocol===config.protocol?providerState:retireProviderState(config)}}__name(buildInstallPlan,"buildInstallPlan");function computeModelListVersion(models){return createHash("sha256").update(JSON.stringify(models)).digest("hex")}__name(computeModelListVersion,"computeModelListVersion");var DEFAULT_BASE_URLS={["openai"]:"https://api.openai.com/v1",["openai-responses"]:"https://api.openai.com",["anthropic"]:"https://api.anthropic.com/v1",["gemini"]:"https://generativelanguage.googleapis.com"};function getDefaultBaseUrlForProtocol(protocol){if(protocol===void 0)return"";return DEFAULT_BASE_URLS[protocol]??""}__name(getDefaultBaseUrlForProtocol,"getDefaultBaseUrlForProtocol");function resolveBaseUrl(config,selectedBaseUrl){if(typeof config.baseUrl==="string"){return config.baseUrl}if(Array.isArray(config.baseUrl)){const normalizedSelectedBaseUrl=normalizeBaseUrlForMatching(selectedBaseUrl);const match=config.baseUrl.find(opt=>normalizeBaseUrlForMatching(opt.url)===normalizedSelectedBaseUrl);if(match)return match.url;return config.baseUrl[0]?.url??selectedBaseUrl??""}return selectedBaseUrl??""}__name(resolveBaseUrl,"resolveBaseUrl");function normalizeBaseUrlForMatching(baseUrl){if(baseUrl===void 0)return"";let end=baseUrl.length;while(end>0&&baseUrl.charCodeAt(end-1)===47){end--}return end===baseUrl.length?baseUrl:baseUrl.slice(0,end)}__name(normalizeBaseUrlForMatching,"normalizeBaseUrlForMatching");function getDefaultModelIds(config){return config.models?.map(s=>s.id)??[]}__name(getDefaultModelIds,"getDefaultModelIds");function isProviderModelConfig(value){return typeof value==="object"&&value!==null&&typeof value.id==="string"}__name(isProviderModelConfig,"isProviderModelConfig");function getModelsForProviderProtocol(modelProviders,protocol,providerProtocol){const canonicalProtocol=protocol==="openai-responses"?"openai":protocol;const result=[];for(const[providerId,raw]of Object.entries(modelProviders??{})){if(!Array.isArray(raw))continue;for(const model of raw){if(!isProviderModelConfig(model))continue;const effective=tryResolveModelProtocol(providerId,model,providerProtocol);if(effective!==canonicalProtocol&&!(canonicalProtocol==="openai"&&effective==="openai-responses"))continue;result.push(effective==="openai-responses"?{...model,wireApi:"responses"}:canonicalProtocol==="openai"&&providerId!==canonicalProtocol?{...model,wireApi:"chat-completions"}:model)}}return result}__name(getModelsForProviderProtocol,"getModelsForProviderProtocol");function findExistingProviderModels(config,modelProviders,mapping,selection){const ownsModel=resolveOwnsModel(config);if(!ownsModel||!modelProviders)return void 0;const protocols=config.protocolOptions?.length?config.protocolOptions:[config.protocol];for(const providerProtocol of protocols){const models=getModelsForProviderProtocol(modelProviders,providerProtocol,mapping).filter(ownsModel);if(!models.length)continue;const selectedModels=selection?.id?models.filter(model=>model.id===selection.id&&(!selection.baseUrl||model.baseUrl===selection.baseUrl)):[];const selected=selectedModels.find(model=>resolveModelProtocol(providerProtocol,model)===selection?.authType)??selectedModels[0]??models[0];const protocol=resolveModelProtocol(providerProtocol,selected);return{protocol,models:models.filter(model=>resolveModelProtocol(providerProtocol,model)===protocol)}}return void 0}__name(findExistingProviderModels,"findExistingProviderModels");function shouldShowStep(config,step,protocol=config.protocol){switch(step){case"protocol":return Array.isArray(config.protocolOptions)&&config.protocolOptions.length>1;case"wireApi":return Boolean(config.protocolOptions?.length)&&(protocol==="openai"||protocol==="openai-responses");case"baseUrl":return config.baseUrl===void 0||Array.isArray(config.baseUrl);case"apiKey":return true;case"models":return!config.models||config.modelsEditable===true;case"advancedConfig":return config.showAdvancedConfig===true;default:return false}}__name(shouldShowStep,"shouldShowStep");function providerMatchesCredentials(config,baseUrl,envKey){let configEnvKey;if(typeof config.envKey==="string"){configEnvKey=config.envKey}else if(typeof config.envKey==="function"&&baseUrl){const protocols=config.protocolOptions?.length?config.protocolOptions:[config.protocol];for(const proto of protocols){try{const derived=config.envKey(proto,baseUrl);if(derived===envKey||config.id==="custom-openai-compatible"&&(envKey===`${derived}_IMAGE`||envKey===`${derived}_VOICE`)){configEnvKey=envKey;break}}catch(err){let safeHost;try{safeHost=new URL(baseUrl).hostname}catch{safeHost="[invalid]"}console.warn(`[providerMatchesCredentials] envKey(${proto}, ${safeHost}) threw (${err instanceof Error?err.constructor.name:typeof err}); skipping this protocol`)}}}if(configEnvKey!==envKey){return false}if(typeof config.baseUrl==="string"){return config.baseUrl===baseUrl}if(Array.isArray(config.baseUrl)){return config.baseUrl.some(opt=>opt.url===baseUrl)}if(config.baseUrl===void 0&&configEnvKey!==void 0){return Boolean(baseUrl)}return false}__name(providerMatchesCredentials,"providerMatchesCredentials");function buildProviderTemplate(config,baseUrl){const resolved=resolveBaseUrl(config,baseUrl);return buildModelConfigs(config,{baseUrl:resolved,apiKey:"",modelIds:getDefaultModelIds(config)})}__name(buildProviderTemplate,"buildProviderTemplate");var DENY_ENV_KEYS=new Set(["NODE_OPTIONS","NODE_PATH","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PATH","HOME","TMPDIR","TMP","TEMP"]);function isSameModelIdentity(a,b){return a.id===b.id&&(a.baseUrl??"")===(b.baseUrl??"")}__name(isSameModelIdentity,"isSameModelIdentity");function applyModelProvidersPatch(existingModelProviders,patch,mapping){if(patch.authType==="openai"&&resolveProviderProtocol(patch.authType,mapping)==="openai-responses"){patch={...patch,models:patch.models.map(model=>({...model,wireApi:model.wireApi??"chat-completions"}))}}const existingModels=existingModelProviders[patch.authType]??[];let updatedModels=patch.models;if(patch.mergeStrategy==="append"){updatedModels=[...existingModels,...patch.models]}else{const ownsModel=patch.ownsModel;const preservedModels=existingModels.filter(model=>{if(ownsModel){return!ownsModel(model)||!patch.models.some(newModel=>resolveModelProtocol(patch.authType,newModel)===tryResolveModelProtocol(patch.authType,model,mapping))}return!patch.models.some(newModel=>isSameModelIdentity(newModel,model)&&resolveModelProtocol(patch.authType,newModel)===tryResolveModelProtocol(patch.authType,model,mapping))});updatedModels=patch.mergeStrategy==="replace-owned"?[...preservedModels,...patch.models]:[...patch.models,...preservedModels]}return{...existingModelProviders,[patch.authType]:updatedModels}}__name(applyModelProvidersPatch,"applyModelProvidersPatch");var ProviderInstallError=class extends Error{static{__name(this,"ProviderInstallError")}step;authType;constructor(message,step,authType,options){super(message,options);this.name="ProviderInstallError";this.step=step;this.authType=authType}};async function applyProviderInstallPlan(plan,options){const{settings,reloadModelProviders,syncAuthState,refreshAuth,doRefreshAuth=true}=options;const selectedAuthType=settings.getValue("security.auth.selectedType");const mapping=settings.getValue("providerProtocol");const serviceOnly=(plan.modelProviders??[]).flatMap(patch=>patch.models);const preserveSelection=serviceOnly.length>0&&serviceOnly.every(model=>model.imageOnly||model.voiceOnly||model.realtimeOnly);const previousEnvValues=new Map;const previousRuntimeProviders={...settings.getModelProviders()};const writeContext=settings.getModelProvidersForWrite?.();const writeMapping=writeContext?writeContext.providerProtocol:mapping;for(const[providerId,models]of Object.entries(writeContext?.modelProviders??{})){if(!Array.isArray(models))continue;if(providerId!=="openai-responses"&&resolveProviderProtocol(providerId,writeMapping)!=="openai-responses")continue;const overwritten=models.filter(existing=>plan.modelProviders?.some(patch=>patch.authType==="openai"&&patch.models.some(model=>isSameModelIdentity(existing,model)&&tryResolveModelProtocol(providerId,existing,writeMapping)===resolveModelProtocol(patch.authType,model))));if(overwritten.length&&(writeContext?.shadowedProviders.includes(providerId)||overwritten.some(model=>tryResolveModelProtocol(providerId,model,writeMapping)!==tryResolveModelProtocol(providerId,model,mapping)))){throw new ProviderInstallError("A higher-precedence settings scope overrides this released provider declaration. Reconfigure it in the owning scope without that override.","modelProviders",plan.authType)}}for(const patch of plan.modelProviders??[]){const existingModels=getModelsForProviderProtocol(previousRuntimeProviders,patch.authType,mapping);const ownBucketModels=previousRuntimeProviders[patch.authType]??[];const changesRole=existingModels.some(existing=>patch.models.some(model=>(isSameModelIdentity(existing,model)||existing.id===model.id&&patch.ownsModel?.(existing)&&(preserveSelection||patch.mergeStrategy!=="append"))&&(Boolean(existing.imageOnly)!==Boolean(model.imageOnly)||Boolean(existing.voiceOnly)!==Boolean(model.voiceOnly)||Boolean(existing.realtimeOnly)!==Boolean(model.realtimeOnly)||isImageGenerationCapable(existing)&&!isImageGenerationCapable(model))));const removesConversation=preserveSelection&&ownBucketModels.some(existing=>!existing.imageOnly&&!existing.voiceOnly&&!existing.realtimeOnly&&(patch.ownsModel?.(existing)??patch.models.some(model=>isSameModelIdentity(existing,model))));const removesService=!preserveSelection&&patch.mergeStrategy!=="append"&&ownBucketModels.some(existing=>(existing.imageOnly||existing.voiceOnly||existing.realtimeOnly)&&patch.ownsModel?.(existing)&&!patch.models.some(model=>model.id===existing.id));if(changesRole||removesConversation||removesService){throw new ProviderInstallError(removesConversation?"This install would remove existing conversation models. Include them in the provider selection, or add the service model with Custom Provider.":removesService?"This install would remove existing service models. Include them in the provider selection, or add the conversation model with Custom Provider.":"This install would replace a model configured for another purpose. Use a different model ID or endpoint.","modelPurpose",plan.authType)}}const voiceIds=new Set([...Object.values(previousRuntimeProviders).flatMap(models=>Array.isArray(models)?models:[]),...serviceOnly].filter(model=>model?.voiceOnly).map(model=>model.id));const selectedVoice=settings.getValue("voiceModel");if(typeof selectedVoice==="string"&&selectedVoice)voiceIds.add(selectedVoice);const changedVoiceIds=[...voiceIds].filter(id=>plan.modelProviders?.some(patch=>patch.models.some(model=>model.id===id)));if(changedVoiceIds.length){let prospective=previousRuntimeProviders;for(const patch of plan.modelProviders??[]){prospective=applyModelProvidersPatch(prospective,patch,mapping)}const configured=new ModelsConfig({modelProvidersConfig:Object.fromEntries(Object.entries(prospective).map(([providerId,models])=>[providerId,Array.isArray(models)?models.filter(model=>tryResolveModelProtocol(providerId,model,mapping)!==void 0):models])),providerProtocolConfig:mapping}).getAllConfiguredModels();if(changedVoiceIds.some(id=>configured.filter(entry=>entry.id===id).length>1)){throw new ProviderInstallError("A voice model with this ID is already configured at another endpoint. Edit that model or use a different model ID.","modelPurpose",plan.authType)}}const previousModelId=settings.getValue("model.name");const previousBaseUrl=settings.getValue("model.baseUrl");let currentStep="init";try{currentStep="backup";settings.backup?.();currentStep="env";const shadowedEnvKeys=[];for(const[key,value]of Object.entries(plan.env??{})){if(DENY_ENV_KEYS.has(key.toUpperCase())){throw new Error(`Install plan must not set reserved environment variable: ${key}`)}const previous=process.env[key];if(previous!==void 0&&previous!==""&&previous!==value){shadowedEnvKeys.push(key)}previousEnvValues.set(key,previous);settings.setValue(`env.${key}`,value);process.env[key]=value}if(shadowedEnvKeys.length>0){console.error(`[auth] Warning: ${shadowedEnvKeys.join(", ")} ${shadowedEnvKeys.length===1?"is":"are"} also set in your shell environment or .env file. The shell/file value will take priority on restart. To ensure your new key is used, update or remove the variable from your shell profile or .env file.`)}currentStep="modelProviders";let updatedModelProviders={...previousRuntimeProviders};for(const patch of plan.modelProviders??[]){updatedModelProviders=applyModelProvidersPatch(updatedModelProviders,preserveSelection?{...patch,mergeStrategy:"replace-owned",ownsModel:__name(existing=>(patch.ownsModel?.(existing)??false)||patch.models.some(model=>isSameModelIdentity(existing,model)),"ownsModel")}:patch,mapping);settings.setValue(`modelProviders.${patch.authType}`,updatedModelProviders[patch.authType]??[]);if(patch.authType!=="openai")continue;const ownProviders=settings.getModelProvidersForWrite?.().modelProviders??settings.getModelProviders();for(const[providerId,models]of Object.entries(ownProviders)){if(providerId===patch.authType||!Array.isArray(models))continue;if(providerId.includes("."))continue;if(providerId!=="openai-responses"&&resolveProviderProtocol(providerId,writeMapping)!=="openai-responses")continue;const remaining=models.filter(existing=>!patch.models.some(model=>isSameModelIdentity(existing,model)&&tryResolveModelProtocol(providerId,existing,writeMapping)===resolveModelProtocol(patch.authType,model)));if(remaining.length!==models.length)settings.setValue(`modelProviders.${providerId}`,remaining)}}const effectiveProviders=settings.getModelProviders();for(const patch of plan.modelProviders??[]){const effectiveModels=getModelsForProviderProtocol(effectiveProviders,patch.authType,mapping);const expectedModels=getModelsForProviderProtocol({[patch.authType]:patch.models},patch.authType);const ownProviders=settings.getModelProvidersForWrite?.().modelProviders;const installedModels=ownProviders?getModelsForProviderProtocol({[patch.authType]:ownProviders[patch.authType]??[]},patch.authType,mapping):expectedModels;if(expectedModels.some(model=>{const winner=effectiveModels.find(effective=>isSameModelIdentity(model,effective)&&resolveModelProtocol(patch.authType,model)===resolveModelProtocol(patch.authType,effective));const installed=installedModels.find(entry=>isSameModelIdentity(model,entry)&&resolveModelProtocol(patch.authType,model)===resolveModelProtocol(patch.authType,entry));return!winner||!installed||!isDeepStrictEqual(JSON.parse(JSON.stringify({...installed,wireApi:void 0})),JSON.parse(JSON.stringify({...winner,wireApi:void 0})))})){throw new ProviderInstallError("A higher-precedence settings scope overrides the installed models. Update the scope that owns this provider.","modelProviders",plan.authType)}}currentStep="authType";if(!preserveSelection){settings.setValue("security.auth.selectedType",plan.authType)}currentStep="legacyCredentials";if(plan.legacyCredentials?.apiKey!=null){settings.setValue("security.auth.apiKey",plan.legacyCredentials.apiKey)}if(plan.legacyCredentials?.baseUrl!=null){settings.setValue("security.auth.baseUrl",plan.legacyCredentials.baseUrl)}currentStep="modelSelection";let effectiveModelSelection=preserveSelection?void 0:plan.modelSelection;let routeResyncSelection;if(effectiveModelSelection?.modelId){const currentModelId=settings.getValue("model.name");const currentBaseUrl=settings.getValue("model.baseUrl");const planOffersCurrentModel=typeof currentModelId==="string"&&currentModelId.length>0&&(plan.modelProviders??[]).some(patch=>patch.models.some(model=>resolveModelProtocol(patch.authType,model)===plan.authType&&(currentBaseUrl===""||currentBaseUrl===void 0?model.id===currentModelId:isSameModelIdentity({id:currentModelId,baseUrl:currentBaseUrl},model))));if(planOffersCurrentModel){effectiveModelSelection=void 0;let previousAuthType;if((plan.authType==="openai"||plan.authType==="openai-responses")&&typeof selectedAuthType==="string"){try{previousAuthType=resolveModelSelectionAuthType(selectedAuthType,typeof previousModelId==="string"?previousModelId:void 0,previousRuntimeProviders,settings.getValue("providerProtocol"),typeof previousBaseUrl==="string"?previousBaseUrl:void 0)}catch{previousAuthType=void 0}}if(previousAuthType!==void 0&&previousAuthType!==plan.authType){routeResyncSelection={modelId:currentModelId,...currentBaseUrl?{baseUrl:currentBaseUrl}:{}}}}}if(effectiveModelSelection?.modelId){settings.setValue("model.name",effectiveModelSelection.modelId);if(effectiveModelSelection.baseUrl){settings.setValue("model.baseUrl",effectiveModelSelection.baseUrl)}else{settings.setValue("model.baseUrl","")}}currentStep="providerState";for(const[key,entries]of Object.entries(plan.providerState??{})){for(const[field,value]of Object.entries(entries)){settings.setValue(`${key}.${field}`,value)}}currentStep="persist";settings.persist();currentStep="reloadModelProviders";updatedModelProviders=settings.getModelProviders();reloadModelProviders?.(updatedModelProviders);const syncSelection=effectiveModelSelection?.modelId?effectiveModelSelection:routeResyncSelection;if(syncSelection){currentStep="syncAuthState";syncAuthState?.(plan.authType,syncSelection.modelId,syncSelection.baseUrl)}if(!preserveSelection&&doRefreshAuth&&refreshAuth){currentStep="refreshAuth";await refreshAuth(plan.authType)}currentStep="cleanupBackup";settings.cleanupBackup?.();return{updatedModelProviders}}catch(error){try{settings.restore?.()}catch(restoreErr){console.error("[applyProviderInstallPlan] settings.restore failed during rollback:",restoreErr)}try{for(const[key,prev]of previousEnvValues){if(prev===void 0){delete process.env[key]}else{process.env[key]=prev}}}catch(envErr){console.error("[applyProviderInstallPlan] env rollback failed:",envErr)}try{reloadModelProviders?.(previousRuntimeProviders)}catch(reloadErr){console.error("[applyProviderInstallPlan] reloadModelProviders failed during rollback:",reloadErr)}const errMsg=error instanceof Error?error.message:String(error);throw new ProviderInstallError(errMsg,currentStep,plan.authType,{cause:error instanceof Error?error:void 0})}}__name(applyProviderInstallPlan,"applyProviderInstallPlan");init_esbuild_shims();init_esbuild_shims();init_esbuild_shims();var QWENCLOUD_ENV_KEY="QWENCLOUD_API_KEY";var QWENCLOUD_CHINA_BASE_URL="https://maas.qianwenaiapi.com/compatible-mode/v1";var QWENCLOUD_GLOBAL_BASE_URL="https://maas.qwencloudapi.com/compatible-mode/v1";var QWENCLOUD_CHINA_API_KEY_URL="https://platform.qianwenai.com/docs/developer-guides/administration/api-keys";var QWENCLOUD_GLOBAL_API_KEY_URL="https://docs.qwencloud.com/developer-guides/administration/api-keys";var QWENCLOUD_MODELS=[{id:"qwen3.8-max",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"qwen3.7-plus",contextWindowSize:1e6,enableThinking:true,capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},modalities:{image:true,video:true}},{id:"qwen3.8-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"deepseek-v4-pro-0813",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}},{id:"deepseek-v4.1-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}},modalities:{image:true}},{id:"kimi-k3",thinkingMandatory:true,contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"max",canDisable:false,disableField:"reasoning_effort"}},modalities:{image:true}},{id:"glm-5.3",contextWindowSize:1e6,enableThinking:true}];var qwencloudStandardProvider={id:"qwencloud-standard",label:"Standard API Key",description:"Pay-as-you-go \xB7 Connect with an existing platform API key",protocol:"openai",baseUrl:[{id:"cn-qianwenai",label:"China \u2014 \u5343\u95EEAI\u5E73\u53F0",url:QWENCLOUD_CHINA_BASE_URL,documentationUrl:QWENCLOUD_CHINA_API_KEY_URL,apiKeyUrl:QWENCLOUD_CHINA_API_KEY_URL},{id:"intl-qwencloud",label:"International \u2014 QwenCloud",url:QWENCLOUD_GLOBAL_BASE_URL,documentationUrl:QWENCLOUD_GLOBAL_API_KEY_URL,apiKeyUrl:QWENCLOUD_GLOBAL_API_KEY_URL}],envKey:QWENCLOUD_ENV_KEY,models:QWENCLOUD_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:"QwenCloud Standard",apiKeyPlaceholder:"sk-...",validateApiKey:__name(key=>key.startsWith("sk-")&&!key.startsWith("sk-sp-")?null:'Invalid API key. Pay-as-you-go keys start with "sk-" or "sk-ws-". Token Plan keys ("sk-sp-") need the Token Plan entry instead.',"validateApiKey"),webSearch:{backend:"dashscope"},ownsModel:__name(model=>model.envKey===QWENCLOUD_ENV_KEY&&typeof model.baseUrl==="string"&&(model.baseUrl===QWENCLOUD_CHINA_BASE_URL||model.baseUrl===QWENCLOUD_GLOBAL_BASE_URL),"ownsModel"),uiGroup:"qwencloud",uiLabels:{flowTitle:"QwenCloud",baseUrlStepTitle:"Platform"}};var QWENCLOUD_TOKEN_PLAN_ENV_KEY="QWENCLOUD_TOKEN_PLAN_API_KEY";var QWENCLOUD_TOKEN_PLAN_CHINA_BASE_URL="https://token-plan.maas.qianwenaiapi.com/compatible-mode/v1";var QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL="https://token-plan.maas.qwencloudapi.com/compatible-mode/v1";var QWENCLOUD_TOKEN_PLAN_CHINA_DOC_URL="https://platform.qianwenai.com/docs/token-plan/overview";var QWENCLOUD_TOKEN_PLAN_GLOBAL_DOC_URL="https://docs.qwencloud.com/token-plan/overview";var QWENCLOUD_TOKEN_PLAN_MODELS=QWENCLOUD_MODELS.filter(model=>model.id!=="kimi-k3");var qwencloudTokenPlanProvider={id:"qwencloud-token-plan",label:"Token Plan",description:"Subscription with a monthly Credit quota \xB7 Dedicated endpoint (Personal and Team editions)",protocol:"openai",baseUrl:[{id:"cn-qianwenai",label:"China \u2014 \u5343\u95EEAI\u5E73\u53F0",url:QWENCLOUD_TOKEN_PLAN_CHINA_BASE_URL,documentationUrl:QWENCLOUD_TOKEN_PLAN_CHINA_DOC_URL,apiKeyUrl:QWENCLOUD_TOKEN_PLAN_CHINA_DOC_URL},{id:"intl-qwencloud",label:"International \u2014 QwenCloud",url:QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL,documentationUrl:QWENCLOUD_TOKEN_PLAN_GLOBAL_DOC_URL,apiKeyUrl:QWENCLOUD_TOKEN_PLAN_GLOBAL_DOC_URL}],envKey:QWENCLOUD_TOKEN_PLAN_ENV_KEY,models:QWENCLOUD_TOKEN_PLAN_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:__name(baseUrl=>baseUrl===QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL?"QwenCloud Token Plan for Global/Intl":"QwenCloud Token Plan","modelNamePrefix"),apiKeyPlaceholder:"sk-sp-...",validateApiKey:__name(key=>key.startsWith("sk-sp-")?null:'Invalid API key. Token Plan API keys start with "sk-sp-". Generate one from the Token Plan console, or use the Standard API Key entry for a pay-as-you-go key.',"validateApiKey"),ownsModel:__name(model=>model.envKey===QWENCLOUD_TOKEN_PLAN_ENV_KEY&&typeof model.baseUrl==="string"&&(model.baseUrl===QWENCLOUD_TOKEN_PLAN_CHINA_BASE_URL||model.baseUrl===QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL),"ownsModel"),webSearch:{backend:"dashscope"},uiGroup:"qwencloud",uiLabels:{flowTitle:"QwenCloud",baseUrlStepTitle:"Platform"}};init_esbuild_shims();var CODING_PLAN_ENV_KEY="BAILIAN_CODING_PLAN_API_KEY";var CODING_PLAN_CHINA_BASE_URL="https://coding.dashscope.aliyuncs.com/v1";var CODING_PLAN_GLOBAL_BASE_URL="https://coding-intl.dashscope.aliyuncs.com/v1";var MODELSTUDIO_MODELS=[{id:"qwen3.5-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.6-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},description:"Currently available to Pro subscribers only.",contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.7-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"glm-5",contextWindowSize:202752,enableThinking:true},{id:"kimi-k2.5",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true,modalities:{image:true,video:true}},{id:"MiniMax-M2.5",contextWindowSize:196608,enableThinking:true},{id:"qwen3-coder-plus",contextWindowSize:1e6},{id:"qwen3-coder-next",contextWindowSize:262144},{id:"qwen3-max-2026-01-23",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true},{id:"glm-4.7",contextWindowSize:202752,enableThinking:true}];var codingPlanProvider={id:"coding-plan",label:"Coding Plan",description:"For individual developers \xB7 Weekly quota included",protocol:"openai",baseUrl:[{id:"aliyun",label:"China (Beijing)",url:CODING_PLAN_CHINA_BASE_URL,documentationUrl:"https://help.aliyun.com/zh/model-studio/coding-plan"},{id:"alibabacloud",label:"Singapore (International)",url:CODING_PLAN_GLOBAL_BASE_URL,documentationUrl:"https://www.alibabacloud.com/help/en/model-studio/coding-plan"}],envKey:CODING_PLAN_ENV_KEY,models:MODELSTUDIO_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:__name(baseUrl=>baseUrl===CODING_PLAN_GLOBAL_BASE_URL?"ModelStudio Coding Plan for Global/Intl":"ModelStudio Coding Plan","modelNamePrefix"),apiKeyPlaceholder:"sk-sp-...",validateApiKey:__name(key=>!key.startsWith("sk-sp-")?'Invalid API key. Coding Plan API keys start with "sk-sp-". Please check.':null,"validateApiKey"),ownsModel:__name(model=>model.envKey===CODING_PLAN_ENV_KEY&&typeof model.baseUrl==="string"&&(model.baseUrl===CODING_PLAN_CHINA_BASE_URL||model.baseUrl===CODING_PLAN_GLOBAL_BASE_URL),"ownsModel"),uiGroup:"alibaba",uiLabels:{flowTitle:"Alibaba ModelStudio",baseUrlStepTitle:"Region"}};init_esbuild_shims();var TOKEN_PLAN_ENV_KEY="BAILIAN_TOKEN_PLAN_API_KEY";var TOKEN_PLAN_CHINA_BASE_URL="https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1";var TOKEN_PLAN_GLOBAL_BASE_URL="https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1";var TOKEN_PLAN_MODELS=[{id:"qwen3.7-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.6-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.7-max",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"qwen3.8-max",capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",canDisable:false,disableField:"reasoning_effort"}},contextWindowSize:1e6,enableThinking:true,thinkingMandatory:true,modalities:{image:true,video:true}},{id:"qwen3.8-max-preview",capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",canDisable:false,disableField:"reasoning_effort"}},contextWindowSize:1e6,enableThinking:true,thinkingMandatory:true,modalities:{image:true,video:true}},{id:"qwen3.6-flash",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"deepseek-v4-pro",capabilities:{reasoning:{thinking:true,efforts:["high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"deepseek-v4-flash-0731",capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"deepseek-v3.2",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:131072},{id:"kimi-k2.7-code",capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true,modalities:{image:true,video:true},thinkingMandatory:true},{id:"kimi-k2.6",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true},{id:"kimi-k2.5",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true,modalities:{image:true,video:true}},{id:"glm-5.2",contextWindowSize:1e6,enableThinking:true},{id:"glm-5.1",contextWindowSize:202752,enableThinking:true},{id:"glm-5",contextWindowSize:202752,enableThinking:true},{id:"MiniMax-M2.5",contextWindowSize:196608},{id:"qwen3.8-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"deepseek-v4-pro-0813",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}}];var tokenPlanProvider={id:"token-plan",label:"Token Plan",description:"For teams and companies \xB7 Usage-based billing with dedicated endpoint",protocol:"openai",baseUrl:[{id:"cn-beijing",label:"China (Beijing)",url:TOKEN_PLAN_CHINA_BASE_URL,documentationUrl:"https://bailian.console.aliyun.com/cn-beijing?tab=doc#/doc/?type=model&url=3028856"},{id:"ap-southeast-1",label:"Singapore (International)",url:TOKEN_PLAN_GLOBAL_BASE_URL,documentationUrl:"https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=doc#/doc/?type=model"}],envKey:TOKEN_PLAN_ENV_KEY,models:TOKEN_PLAN_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:__name(baseUrl=>baseUrl===TOKEN_PLAN_GLOBAL_BASE_URL?"ModelStudio Token Plan for Global/Intl":"ModelStudio Token Plan","modelNamePrefix"),ownsModel:__name(model=>model.envKey===TOKEN_PLAN_ENV_KEY&&(typeof model.baseUrl==="string"&&(model.baseUrl===TOKEN_PLAN_CHINA_BASE_URL||model.baseUrl===TOKEN_PLAN_GLOBAL_BASE_URL)||typeof model.name==="string"&&model.name.startsWith("[ModelStudio Token Plan]")),"ownsModel"),webSearch:{backend:"dashscope"},uiGroup:"alibaba",uiLabels:{flowTitle:"Alibaba ModelStudio",baseUrlStepTitle:"Region"}};init_esbuild_shims();var alibabaStandardProvider={id:"alibabaStandard",label:"Standard API Key",description:"Connect with an existing ModelStudio API key",protocol:"openai",baseUrl:[{id:"cn-beijing",label:"China (Beijing)",url:"https://dashscope.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://bailian.console.aliyun.com/cn-beijing?tab=api#/api"},{id:"sg-singapore",label:"Singapore",url:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=api#/api/?type=model&url=2712195"},{id:"us-virginia",label:"US (Virginia)",url:"https://dashscope-us.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://modelstudio.console.alibabacloud.com/us-east-1?tab=api#/api/?type=model&url=2712195"},{id:"cn-hongkong",label:"China (Hong Kong)",url:"https://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://modelstudio.console.alibabacloud.com/cn-hongkong?tab=api#/api/?type=model&url=2712195"}],envKey:"DASHSCOPE_API_KEY",models:[{id:"qwen3.6-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"qwen3.7-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"qwen3.7-max",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"glm-5.1",contextWindowSize:202752,enableThinking:true},{id:"deepseek-v4-pro",capabilities:{reasoning:{thinking:true,efforts:["high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"deepseek-v4-flash",capabilities:{reasoning:{thinking:true,efforts:["high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"qwen3.8-max",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"qwen3.8-max-0902",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"qwen3.8-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"deepseek-v4-pro-0813",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}},{id:"deepseek-v4-flash-0731",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}},{id:"kimi-k3",thinkingMandatory:true,contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"max",canDisable:false,disableField:"reasoning_effort"}},modalities:{image:true}},{id:"kimi-k2.7-code",thinkingMandatory:true,enableThinking:true,contextWindowSize:262144,capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"enable_thinking"}},modalities:{image:true,video:true}},{id:"kimi-k2.6",enableThinking:true,contextWindowSize:262144,capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},modalities:{image:true,video:true}}],modelsEditable:true,modelNamePrefix:"ModelStudio Standard",webSearch:{backend:"dashscope"},uiGroup:"alibaba",uiLabels:{flowTitle:"Alibaba ModelStudio",baseUrlStepTitle:"Region"}};init_esbuild_shims();var OPENROUTER_ENV_KEY="OPENROUTER_API_KEY";var OPENROUTER_BASE_URL="https://openrouter.ai/api/v1";var openRouterProvider={id:"openrouter",label:"OpenRouter",description:"Connect with an OpenRouter API key (get one from openrouter.ai/keys)",protocol:"openai",baseUrl:OPENROUTER_BASE_URL,envKey:OPENROUTER_ENV_KEY,models:[{id:"z-ai/glm-4.5-air:free",contextWindowSize:128e3},{id:"openai/gpt-oss-120b:free",contextWindowSize:131072}],modelsEditable:true,modelNamePrefix:"OpenRouter",ownsModel:__name(model=>{if(model.envKey!==OPENROUTER_ENV_KEY)return false;try{const host=new URL(model.baseUrl??"").hostname;return host==="openrouter.ai"||host.endsWith(".openrouter.ai")}catch{return false}},"ownsModel"),customHeaders:{"HTTP-Referer":"https://github.com/QwenLM/qwen-code.git","X-OpenRouter-Title":"Qwen Code"},documentationUrl:"https://openrouter.ai/docs",uiGroup:"third-party"};init_esbuild_shims();var REQUESTY_ENV_KEY="REQUESTY_API_KEY";var REQUESTY_BASE_URL="https://router.requesty.ai/v1";var requestyProvider={id:"requesty",label:"Requesty",description:"Connect with a Requesty API key (get one from app.requesty.ai/api-keys)",protocol:"openai",baseUrl:REQUESTY_BASE_URL,envKey:REQUESTY_ENV_KEY,models:[{id:"openai/gpt-4o-mini",contextWindowSize:128e3},{id:"openai/gpt-4o",contextWindowSize:128e3}],modelsEditable:true,modelNamePrefix:"Requesty",ownsModel:__name(model=>{if(model.envKey!==REQUESTY_ENV_KEY)return false;try{const host=new URL(model.baseUrl??"").hostname;return host==="router.requesty.ai"||host.endsWith(".requesty.ai")}catch{return false}},"ownsModel"),customHeaders:{"HTTP-Referer":"https://github.com/QwenLM/qwen-code.git","X-Title":"Qwen Code"},documentationUrl:"https://docs.requesty.ai",uiGroup:"third-party"};init_esbuild_shims();var deepseekProvider={id:"deepseek",label:"DeepSeek API Key",description:"Quick setup for DeepSeek (deepseek-v4-flash, deepseek-v4-pro)",protocol:"openai",baseUrl:"https://api.deepseek.com",envKey:"DEEPSEEK_API_KEY",models:[{id:"deepseek-v4-pro",contextWindowSize:1e6,capabilities:{reasoning:{profile:"deepseek-openai",thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"thinking"}}},{id:"deepseek-v4-flash",capabilities:{reasoning:{profile:"deepseek-openai",thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"thinking"}},contextWindowSize:1e6}],modelsEditable:true,modelNamePrefix:"DeepSeek",documentationUrl:"https://api-docs.deepseek.com/zh-cn/",uiGroup:"third-party"};init_esbuild_shims();var GROK_ENV_KEY="XAI_API_KEY";var GROK_BASE_URL="https://api.x.ai/v1";var grokProvider={id:"grok",label:"Grok (xAI) API Key",description:"Quick setup for xAI Grok chat & code models",protocol:"openai",baseUrl:GROK_BASE_URL,envKey:GROK_ENV_KEY,models:[{id:"grok-4.5",contextWindowSize:5e5},{id:"grok-4.3",contextWindowSize:1e6},{id:"grok-4.20-0309-reasoning",contextWindowSize:1e6},{id:"grok-4.20-0309-non-reasoning",contextWindowSize:1e6},{id:"grok-4.20-multi-agent-0309",contextWindowSize:1e6},{id:"grok-build-0.1",contextWindowSize:262144}],modelsEditable:true,modelNamePrefix:"Grok",documentationUrl:"https://docs.x.ai/docs",uiGroup:"third-party"};init_esbuild_shims();var minimaxProvider={id:"minimax",label:"MiniMax API Key",description:"Quick setup for MiniMax models",protocol:"openai",baseUrl:[{id:"international",label:"International",url:"https://api.minimax.io/v1",documentationUrl:"https://www.minimax.io/platform"},{id:"china",label:"China",url:"https://api.minimaxi.com/v1",documentationUrl:"https://platform.minimaxi.com"}],envKey:"MINIMAX_API_KEY",models:[{id:"MiniMax-M3",contextWindowSize:1e6,modalities:{image:true,video:true}},{id:"MiniMax-M2.7",contextWindowSize:204800},{id:"MiniMax-M2.7-highspeed",contextWindowSize:204800},{id:"MiniMax-M2.5",contextWindowSize:196608},{id:"MiniMax-M2.5-highspeed",contextWindowSize:196608},{id:"image-01",imageOnly:true},{id:"image-01-live",imageOnly:true}],modelsEditable:true,modelNamePrefix:"MiniMax",uiGroup:"third-party"};init_esbuild_shims();var zaiProvider={id:"zai",label:"Z.AI API Key",description:"Quick setup for Z.AI models",protocol:"openai",baseUrl:[{id:"standard-api-key",label:"Standard API Key",url:"https://api.z.ai/api/paas/v4",documentationUrl:"https://docs.z.ai/"},{id:"coding-plan",label:"Coding Plan",url:"https://api.z.ai/api/coding/paas/v4",documentationUrl:"https://docs.z.ai/"}],envKey:"ZAI_API_KEY",models:[{id:"GLM-5.2",contextWindowSize:1e6,enableThinking:true},{id:"GLM-5.1",contextWindowSize:204800,enableThinking:true},{id:"GLM-5",contextWindowSize:204800},{id:"GLM-5-Turbo",contextWindowSize:204800}],modelsEditable:true,modelNamePrefix:"Z.AI",uiGroup:"third-party"};init_esbuild_shims();var moonshotProvider={id:"moonshot",label:"Kimi (Moonshot AI) API Key",description:"Quick setup for Kimi models",protocol:"openai",baseUrl:[{id:"international",label:"International",url:"https://api.moonshot.ai/v1",documentationUrl:"https://platform.kimi.ai/docs"},{id:"china",label:"China",url:"https://api.moonshot.cn/v1",documentationUrl:"https://platform.moonshot.cn/docs"}],envKey:"MOONSHOT_API_KEY",models:[{id:"kimi-k3",capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"max",canDisable:false,disableField:"reasoning_effort"}},contextWindowSize:1e6,thinkingMandatory:true,modalities:{image:true,video:true}},{id:"kimi-k2.7-code",capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"thinking"}},contextWindowSize:262144,modalities:{image:true,video:true},thinkingMandatory:true},{id:"kimi-k2.7-code-highspeed",capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"thinking"}},contextWindowSize:262144,modalities:{image:true,video:true},thinkingMandatory:true},{id:"kimi-k2.6",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"thinking"}},contextWindowSize:262144,modalities:{image:true,video:true}}],modelsEditable:true,modelNamePrefix:"Kimi",uiGroup:"third-party"};init_esbuild_shims();var idealabProvider={id:"idealab",label:"Idealab API Key",description:"Alibaba internal LLM service (Qwen3.6-Plus-DogFooding, DeepSeek V4, Kimi K2.6)",protocol:"openai",baseUrl:"https://idealab.alibaba-inc.com/api/openai/v1",envKey:"IDEALAB_API_KEY",models:[{id:"Qwen3.6-Plus-DogFooding",contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"bailian/deepseek-v4-pro",contextWindowSize:1e6,enableThinking:true},{id:"bailian/deepseek-v4-flash",contextWindowSize:1e6,enableThinking:true},{id:"bailian/kimi-k2.6",contextWindowSize:262144,enableThinking:true}],modelsEditable:true,modelNamePrefix:"Idealab",uiGroup:"third-party"};init_esbuild_shims();var modelscopeProvider={id:"modelscope",label:"ModelScope API Key",description:"Quick setup for ModelScope API Inference",protocol:"openai",baseUrl:"https://api-inference.modelscope.cn/v1",envKey:"MODELSCOPE_API_KEY",models:[{id:"deepseek-ai/DeepSeek-V4-Flash",contextWindowSize:1e6,enableThinking:true},{id:"Qwen/Qwen3.5-397B-A17B",contextWindowSize:1e6,enableThinking:true},{id:"ZhipuAI/GLM-5.1",contextWindowSize:1e6,enableThinking:true}],modelsEditable:true,modelNamePrefix:"ModelScope",documentationUrl:"https://modelscope.cn/docs/model-service/API-Inference/intro",uiGroup:"third-party"};init_esbuild_shims();import{createHash as createHash2}from"node:crypto";var CUSTOM_API_KEY_ENV_PREFIX="QWEN_CUSTOM_API_KEY_";function normalizeEnvSegment(value){const upper=value.trim().toUpperCase();let result="";let prevWasUnderscore=false;for(let i=0;i<upper.length;i++){const code=upper.charCodeAt(i);const isAlphaNum=code>=65&&code<=90||code>=48&&code<=57;if(isAlphaNum){result+=upper[i];prevWasUnderscore=false}else if(!prevWasUnderscore){result+="_";prevWasUnderscore=true}}let start=0;let end=result.length;while(start<end&&result.charCodeAt(start)===95)start++;while(end>start&&result.charCodeAt(end-1)===95)end--;return result.slice(start,end)}__name(normalizeEnvSegment,"normalizeEnvSegment");function stripTrailingSlashes(value){let end=value.length;while(end>0&&value.charCodeAt(end-1)===47)end--;return value.slice(0,end)}__name(stripTrailingSlashes,"stripTrailingSlashes");function generateCustomEnvKey(protocol,baseUrl){const canonicalBaseUrl=stripTrailingSlashes(baseUrl.trim());const suffix=createHash2("sha256").update(`${protocol}\0${canonicalBaseUrl}`).digest("hex").slice(0,12).toUpperCase();return`${CUSTOM_API_KEY_ENV_PREFIX}${normalizeEnvSegment(protocol)}_${normalizeEnvSegment(baseUrl)}_${suffix}`}__name(generateCustomEnvKey,"generateCustomEnvKey");var customProvider={id:"custom-openai-compatible",label:"Custom Provider",description:"Manually connect a local server, proxy, or unsupported provider",protocol:"openai",protocolOptions:["openai","anthropic","gemini"],baseUrl:void 0,envKey:generateCustomEnvKey,models:void 0,modelNamePrefix:"",showAdvancedConfig:true,ownsModel:__name(model=>typeof model.envKey==="string"&&model.envKey.startsWith(CUSTOM_API_KEY_ENV_PREFIX),"ownsModel"),mergeModelsByIdentity:true,uiGroup:"custom"};var ALL_PROVIDERS=[qwencloudTokenPlanProvider,qwencloudStandardProvider,codingPlanProvider,tokenPlanProvider,alibabaStandardProvider,deepseekProvider,grokProvider,minimaxProvider,zaiProvider,moonshotProvider,idealabProvider,modelscopeProvider,openRouterProvider,requestyProvider,customProvider];var QWENCLOUD_PROVIDERS=ALL_PROVIDERS.filter(p=>p.uiGroup==="qwencloud");var ALIBABA_PROVIDERS=ALL_PROVIDERS.filter(p=>p.uiGroup==="alibaba");var THIRD_PARTY_PROVIDERS=ALL_PROVIDERS.filter(p=>p.uiGroup==="third-party");function findProviderById(id){return ALL_PROVIDERS.find(p=>p.id===id)}__name(findProviderById,"findProviderById");function findProviderByCredentials(baseUrl,envKey){return ALL_PROVIDERS.find(p=>providerMatchesCredentials(p,baseUrl,envKey))}__name(findProviderByCredentials,"findProviderByCredentials");function getAllProviderBaseUrls(){return ALL_PROVIDERS.flatMap(p=>{if(typeof p.baseUrl==="string")return[p.baseUrl];if(Array.isArray(p.baseUrl))return p.baseUrl.map(o=>o.url);return[]})}__name(getAllProviderBaseUrls,"getAllProviderBaseUrls");init_esbuild_shims();var FLASH_MODELS=new Set(["deepseek-flash","deepseek-v4-flash","deepseek-v4.1-flash","deepseek-v4.1-flash-1017"]);var LEGACY_MODELS=new Set(["deepseek-v4-pro","deepseek-v4-pro-0813","deepseek-v4-flash-0731"]);function getDeepSeekEndpoint(baseUrl){let hostname;try{hostname=new URL(baseUrl??"").hostname.toLowerCase()}catch{return void 0}if(hostname==="api.deepseek.com"||hostname.endsWith(".api.deepseek.com"))return"official";if(hostname.endsWith(".maas.aliyuncs.com")||/^(?:dashscope(?:-intl|-us)?|cn-hongkong\.dashscope)\.aliyuncs\.com$/.test(hostname))return"maas";return void 0}__name(getDeepSeekEndpoint,"getDeepSeekEndpoint");function getBuiltinDeepSeekReasoning(config){const endpoint=getDeepSeekEndpoint(config.baseUrl);const model=config.model?.toLowerCase()??"";if(config.authType!=="openai"||!endpoint||!FLASH_MODELS.has(model)&&!LEGACY_MODELS.has(model)&&!(endpoint==="official"&&model==="deepseek-v4-flash-vision-exp"))return void 0;return{profile:"deepseek-openai",thinking:true,efforts:endpoint==="maas"&&(model==="deepseek-v4-pro"||model==="deepseek-v4-flash")?["high","max"]:["low","high","max"],defaultEffort:"high",disableField:endpoint==="official"?"thinking":"enable_thinking",...config.thinkingMandatory?{canDisable:false}:{}}}__name(getBuiltinDeepSeekReasoning,"getBuiltinDeepSeekReasoning");function normalizeDeepSeekReasoningEffort(effort,model,baseUrl){const builtin=getBuiltinDeepSeekReasoning({authType:"openai",model,baseUrl});if(effort==="low")return builtin&&!builtin.toggleOnly&&builtin.efforts.includes("low")?"low":"high";if(effort==="medium")return"high";if(effort==="xhigh")return builtin&&getDeepSeekEndpoint(baseUrl)==="official"||FLASH_MODELS.has(model?.toLowerCase()??"")&&model?.toLowerCase()!=="deepseek-v4-flash"?"high":"max";return effort}__name(normalizeDeepSeekReasoningEffort,"normalizeDeepSeekReasoningEffort");function applyDeepSeekReasoningEffort(request,baseUrl,configuredEffort){const body=request;const model=typeof body["model"]==="string"?body["model"]:void 0;if(getDeepSeekEndpoint(baseUrl)!=="official"&&!getBuiltinDeepSeekReasoning({authType:"openai",model,baseUrl}))return request;const reasoning=body["reasoning"];const nestedEffort=reasoning?.["effort"];const effort=nestedEffort??configuredEffort;if(typeof effort!=="string"||!effort)return request;const next={...body};if(typeof next["reasoning_effort"]!=="string"||!next["reasoning_effort"])next["reasoning_effort"]=nestedEffort===void 0?effort:normalizeDeepSeekReasoningEffort(effort,model,baseUrl);const{effort:_effort,...rest}=reasoning??{};if(Object.keys(rest).length>0)next["reasoning"]=rest;else delete next["reasoning"];return next}__name(applyDeepSeekReasoningEffort,"applyDeepSeekReasoningEffort");function getDeepSeekReasoningState(config,resolved){const model=getRequestModel(config);if(!getBuiltinDeepSeekReasoning({...config,model})||!resolved||resolved.profile!==void 0&&resolved.profile!=="deepseek-openai"||resolved.toggleOnly)return void 0;const defaultEffort=resolved.defaultEffort;const configured=(config.reasoning||void 0)?.effort;const effort=configured??defaultEffort;const normalized=effort===void 0||resolved.efforts.includes(effort)?effort:normalizeDeepSeekReasoningEffort(effort,model,config.baseUrl);const body=applyDeepSeekReasoningEffort({model:config.model,...config.samplingParams,...config.extra_body},config.baseUrl,normalized===void 0?void 0:clampReasoningEffort(normalized,resolved.efforts));const disabled=resolved.canDisable!==false&&(config.reasoning===false||(resolved.disableField==="thinking"?body["thinking"]?.type==="disabled":body["enable_thinking"]===false)||body["reasoning_effort"]==="none");const wireEffort=config.reasoning!==false&&typeof body["reasoning_effort"]==="string"?body["reasoning_effort"]:defaultEffort;const effective=wireEffort===void 0||resolved.efforts.includes(wireEffort)?wireEffort:normalizeDeepSeekReasoningEffort(wireEffort,model,config.baseUrl);return{enabled:!disabled,effort:resolved.efforts.includes(effective)?effective:defaultEffort}}__name(getDeepSeekReasoningState,"getDeepSeekReasoningState");init_esbuild_shims();init_esbuild_shims();function isOpenRouterHostname(contentGeneratorConfig){const baseUrl=contentGeneratorConfig.baseUrl??"";if(!baseUrl)return false;try{const hostname=new URL(baseUrl).hostname.toLowerCase();return hostname==="openrouter.ai"||hostname.endsWith(".openrouter.ai")}catch{return false}}__name(isOpenRouterHostname,"isOpenRouterHostname");init_esbuild_shims();var CLAUDE_MODEL_FAMILIES=["opus","sonnet","haiku","fable","mythos"];function parseClaudeModelVersion(model){const match=model.toLowerCase().match(new RegExp(`claude-(${CLAUDE_MODEL_FAMILIES.join("|")})-(\\d+)(?:[-.](\\d{1,2})(?!\\d))?`));if(!match){return null}return{family:match[1],major:Number.parseInt(match[2],10),minor:match[3]?Number.parseInt(match[3],10):0}}__name(parseClaudeModelVersion,"parseClaudeModelVersion");function anthropicSupportedEffortTiers(model){const tiers=["low","medium","high"];const parsed=parseClaudeModelVersion(model);if(!parsed){return tiers}const{family,major,minor}=parsed;const atLeast=__name((maj,min)=>major>maj||major===maj&&minor>=min,"atLeast");if(major>=5||family==="opus"&&atLeast(4,7)){tiers.push("xhigh")}if(major>=5||(family==="opus"||family==="sonnet")&&atLeast(4,6)){tiers.push("max")}return tiers}__name(anthropicSupportedEffortTiers,"anthropicSupportedEffortTiers");var REASONING_PROFILES=["openai-effort","openai-reasoning","deepseek-openai","dashscope-effort","dashscope-thinking","qwen-chat-template","anthropic-manual","anthropic-adaptive","deepseek-anthropic","gemini"];function invalidReasoning(route){throw new Error(`Model "${route.model}" capabilities.reasoning: invalid profile, efforts or defaultEffort`)}__name(invalidReasoning,"invalidReasoning");function validateReasoningDeclaration(route,declaration){if(declaration===void 0)return void 0;if(!declaration||typeof declaration!=="object"||Array.isArray(declaration))return invalidReasoning(route);const input=declaration;if(input.profile===void 0&&("thinking"in input||"disableField"in input))return parseModelReasoningCapabilities(input);if(!Object.keys(input).length||Object.keys(input).some(key=>!["profile","efforts","defaultEffort","thinking","toggleOnly","canDisable","disableField"].includes(key)))return invalidReasoning(route);if(input.profile!==void 0&&!REASONING_PROFILES.includes(input.profile)||input.thinking!==void 0&&input.thinking!==true||input.toggleOnly!==void 0&&typeof input.toggleOnly!=="boolean"||input.canDisable!==void 0&&input.canDisable!==false)return invalidReasoning(route);if(input.efforts!==void 0&&(!Array.isArray(input.efforts)||!input.efforts.length||input.efforts.some(tier=>!REASONING_EFFORT_TIERS.includes(tier))||new Set(input.efforts).size!==input.efforts.length))return invalidReasoning(route);if(input.defaultEffort!==void 0&&(!REASONING_EFFORT_TIERS.includes(input.defaultEffort)||input.efforts&&!input.efforts.includes(input.defaultEffort)))return invalidReasoning(route);return input}__name(validateReasoningDeclaration,"validateReasoningDeclaration");function resolveReasoningCapabilities(route,declaration){try{return validateReasoningCapabilities(route,declaration)}catch{return void 0}}__name(resolveReasoningCapabilities,"resolveReasoningCapabilities");function validateReasoningCapabilities(route,declaration){if(declaration===void 0)return getBuiltinDeepSeekReasoning(route);const input=validateReasoningDeclaration(route,declaration);if(!input)return void 0;if(input.profile===void 0&&"thinking"in input)return parseModelReasoningCapabilities(input);const model=normalize(route.model);const provider=ALL_PROVIDERS.find(candidate=>typeof candidate.baseUrl==="string"?candidate.baseUrl===route.baseUrl:candidate.baseUrl?.some(option=>option.url===route.baseUrl));const known=(provider?.models?.find(candidate=>candidate.id===route.model)??provider?.models?.find(candidate=>candidate.id===model))?.capabilities?.reasoning;const inherited=parseModelReasoningCapabilities(known);if(!input.profile&&inherited?.toggleOnly){if(input.efforts||input.defaultEffort)return invalidReasoning(route);return parseModelReasoningCapabilities({...inherited,...input})}const gpt=getGptReasoningCapabilities(route.model);const claude=route.authType==="anthropic"?parseClaudeModelVersion(route.model):void 0;if(!inherited&&!gpt&&!claude&&!input.profile)return invalidReasoning(route);const auth=route.authType;let host="";try{host=new URL(route.baseUrl??"").hostname.toLowerCase()}catch{host=""}const dashscope=auth==="qwen-oauth"||/(^|\.)(dashscope(?:-intl|-us)?\.aliyuncs\.com|alibaba-inc\.com|aliyun-inc\.com|alicloudapi\.com|maas\.qianwenaiapi\.com|maas\.qwencloudapi\.com)$/.test(host)||/^token-plan\..+\.maas\.aliyuncs\.com$/.test(host);const profile=input.profile??(auth==="gemini"||auth==="vertex-ai"?"gemini":auth==="openai-responses"?"openai-reasoning":auth==="openai"&&isOpenRouterHostname(route)?"openai-reasoning":auth==="anthropic"?model.includes("deepseek")?"deepseek-anthropic":claude&&(claude.major>4||claude.major===4&&claude.minor>=6)?"anthropic-adaptive":"anthropic-manual":model.startsWith("qwen")?dashscope?inherited?.disableField==="reasoning_effort"?"dashscope-effort":"dashscope-thinking":"qwen-chat-template":inherited?.disableField==="thinking"?"deepseek-openai":"openai-effort");const protocol=profile==="gemini"?"gemini":profile.startsWith("anthropic-")||profile==="deepseek-anthropic"?"anthropic":"openai";if(auth==="openai-responses"&&profile!=="openai-reasoning"||auth&&protocol!==(auth==="vertex-ai"?"gemini":auth==="qwen-oauth"||auth==="openai-responses"?"openai":auth))return invalidReasoning(route);const toggleOnly=profile==="dashscope-thinking"||profile==="qwen-chat-template";const disableField=!input.profile&&inherited?.disableField||(toggleOnly?"enable_thinking":profile==="openai-effort"||profile==="dashscope-effort"?"reasoning_effort":"thinking");const inheritedEfforts=inherited&&!inherited.toggleOnly?inherited.efforts:gpt?.efforts??(claude?anthropicSupportedEffortTiers(route.model):void 0);const efforts=input.efforts??inheritedEfforts;const inheritedDefault=inherited&&!inherited.toggleOnly?inherited.defaultEffort:gpt?.defaultEffort;const defaultEffort=input.defaultEffort??(inheritedDefault&&efforts?clampReasoningEffort(inheritedDefault,efforts):void 0);if(toggleOnly&&(input.efforts!==void 0||input.defaultEffort!==void 0)||!toggleOnly&&(!efforts||!defaultEffort)||profile==="gemini"&&efforts?.some(tier=>tier==="xhigh"||tier==="max"))return invalidReasoning(route);const result={...input,thinking:true,profile,toggleOnly,disableField,...toggleOnly?{}:{efforts,defaultEffort},...route.thinkingMandatory||inherited?.canDisable===false||gpt?.thinkingMandatory?{canDisable:false}:{}};const parsed=parseModelReasoningCapabilities(result);if(!parsed)return invalidReasoning(route);return{...parsed,profile,...gpt&&input.defaultEffort===void 0?{defaultEnabled:gpt.defaultEnabled}:{}}}__name(validateReasoningCapabilities,"validateReasoningCapabilities");function captureReasoningSnapshot(models){return Object.freeze(models.map(model=>Object.freeze({id:model.id,authType:model.authType,baseUrl:model.baseUrl,registryBaseUrl:model.registryBaseUrl,reasoning:model.capabilities?.reasoning&&typeof model.capabilities.reasoning==="object"?Object.freeze({...structuredClone(model.capabilities.reasoning),..."efforts"in model.capabilities.reasoning&&Array.isArray(model.capabilities.reasoning.efforts)?{efforts:Object.freeze([...model.capabilities.reasoning.efforts])}:{}}):model.capabilities?.reasoning})))}__name(captureReasoningSnapshot,"captureReasoningSnapshot");function resolveReasoningForModel(config,generation,model=generation.model,strict=false){model=getRequestModel(generation,model);let declaration;if(generation.reasoningSnapshot){const rows=generation.reasoningSnapshot.filter(row2=>row2.authType===generation.authType&&row2.id===model);const row=generation.reasoningRouteBaseUrl===null&&model===generation.model?rows.find(row2=>row2.registryBaseUrl===void 0):typeof generation.reasoningRouteBaseUrl==="string"&&model===generation.model?rows.find(row2=>row2.registryBaseUrl===generation.reasoningRouteBaseUrl):rows.find(row2=>row2.registryBaseUrl===generation.baseUrl)??rows.find(row2=>row2.registryBaseUrl===void 0&&row2.baseUrl===generation.baseUrl);declaration=row?.reasoning}else{declaration=generation.authType?config?.getResolvedModelConfig?.(generation.authType,model,generation.baseUrl)?.capabilities?.reasoning:void 0}return(strict?validateReasoningCapabilities:resolveReasoningCapabilities)({...generation,model,thinkingMandatory:model===generation.model?generation.thinkingMandatory:void 0},declaration)}__name(resolveReasoningForModel,"resolveReasoningForModel");function getEffectiveReasoning(generation,resolved){if(!resolved)return generation.reasoning;if(generation.reasoning===false&&resolved.canDisable!==false)return false;const selected=generation.reasoning||void 0;if(!selected&&resolved.defaultEnabled===false&&resolved.canDisable!==false)return false;if(resolved.toggleOnly)return selected??(resolved.profile?{}:void 0);const model=getRequestModel(generation);const knownDeepSeek=(resolved.profile===void 0||resolved.profile==="deepseek-openai")&&getBuiltinDeepSeekReasoning({...generation,model});let effort=selected?.effort??resolved.defaultEffort;if(effort&&knownDeepSeek&&!resolved.efforts.includes(effort))effort=normalizeDeepSeekReasoningEffort(effort,model,generation.baseUrl);return effort?{...selected,effort:(resolved.profile||knownDeepSeek)&&REASONING_EFFORT_TIERS.includes(effort)?clampReasoningEffort(effort,resolved.efforts):effort}:selected}__name(getEffectiveReasoning,"getEffectiveReasoning");init_esbuild_shims();init_esbuild_shims();var debugLogger3=createDebugLogger("OUTBOUND_CORRELATION");var PLACEHOLDERS=[{token:"${session_id}",resolve:__name(config=>config.getSessionId(),"resolve")}];var SESSION_ID_PLACEHOLDER_PATTERN=/\$(?:session_id|QWEN_CODE_SESSION_ID)(?!\w)|\$\{(?:session_id|QWEN_CODE_SESSION_ID)\}/gi;var warnedGateOff=new Set;function warnIfDynamicHeadersDisabled(customHeaders,config){try{const names=Object.entries(customHeaders??{}).filter(([,value])=>typeof value==="string"&&hasDynamicPlaceholder(value)).map(([name])=>name);if(names.length===0)return;if(config.getOutboundAllowDynamicHeaderValues())return;const key=names.slice().sort().join(",");if(warnedGateOff.has(key))return;warnedGateOff.add(key);console.warn(`customHeaders ${names.join(", ")} contain a runtime placeholder, but outboundCorrelation.allowDynamicHeaderValues is not enabled \u2014 the header(s) will not be sent. Set it to true in settings.json to allow the value to be filled in per request.`)}catch{}}__name(warnIfDynamicHeadersDisabled,"warnIfDynamicHeadersDisabled");function hasDynamicPlaceholder(value){return value.search(SESSION_ID_PLACEHOLDER_PATTERN)!==-1}__name(hasDynamicPlaceholder,"hasDynamicPlaceholder");function resolveDynamicHeaderValue(value,config){if(typeof value!=="string")return void 0;if(!hasDynamicPlaceholder(value))return value;try{if(!config.getOutboundAllowDynamicHeaderValues()){debugLogger3.warn(`Dropping a customHeaders value containing a runtime placeholder: outboundCorrelation.allowDynamicHeaderValues is not enabled.`);return void 0}let expanded=value.replace(SESSION_ID_PLACEHOLDER_PATTERN,"${session_id}");for(const{token,resolve}of PLACEHOLDERS){if(!expanded.includes(token))continue;const resolved=resolve(config);if(!resolved)return void 0;expanded=expanded.split(token).join(resolved)}return expanded}catch(error){debugLogger3.warn(`Unable to expand a customHeaders placeholder: ${error instanceof Error?error.message:String(error)}`);return void 0}}__name(resolveDynamicHeaderValue,"resolveDynamicHeaderValue");function applyDynamicHeaderValues(headers,config){const pending=[];headers.forEach((value,key)=>{if(hasDynamicPlaceholder(value))pending.push([key,value])});for(const[key,value]of pending){const resolved=resolveDynamicHeaderValue(value,config);if(resolved===void 0){headers.delete(key)}else{headers.set(key,resolved)}}}__name(applyDynamicHeaderValues,"applyDynamicHeaderValues");function expandDynamicHeaders(customHeaders,config){if(!customHeaders)return{};const expanded={};for(const[key,value]of Object.entries(customHeaders)){if(typeof value!=="string"||!hasDynamicPlaceholder(value))continue;const resolved=resolveDynamicHeaderValue(value,config);if(resolved!==void 0)expanded[key]=resolved}return expanded}__name(expandDynamicHeaders,"expandDynamicHeaders");var debugLogger4=createDebugLogger("OUTBOUND_CORRELATION");var SESSION_ID_HEADER="session_id";var SESSION_ID_HEADER_HOSTS=["routify.alibaba-inc.com","routify-online.alibaba-inc.com","routify-pub.alibaba-inc.com"];function requestUrl(input){try{if(typeof input==="string")return new URL(input);if(input instanceof URL)return input;return new URL(input.url)}catch{return void 0}}__name(requestUrl,"requestUrl");function buildSessionIdHeaders(config,destination){try{const url=requestUrl(destination);if(url?.protocol!=="https:"||!SESSION_ID_HEADER_HOSTS.includes(url.hostname.toLowerCase())){return{}}const sessionId=config.getSessionId();return sessionId?{[SESSION_ID_HEADER]:sessionId}:{}}catch(error){debugLogger4.warn(`Unable to add ${SESSION_ID_HEADER} to outbound request: ${error instanceof Error?error.message:String(error)}`);return{}}}__name(buildSessionIdHeaders,"buildSessionIdHeaders");function wrapFetchWithSessionId(baseFetch,config,customHeaders){const fetchLike=baseFetch;const expandsHeaders=Object.values(customHeaders??{}).some(value=>typeof value==="string"&&hasDynamicPlaceholder(value));if(expandsHeaders)warnIfDynamicHeadersDisabled(customHeaders,config);const wrapped=__name(async(input,init)=>{const sessionHeaders=buildSessionIdHeaders(config,input);const sessionId=sessionHeaders[SESSION_ID_HEADER];if(!sessionId&&!expandsHeaders)return fetchLike(input,init);const headers=new Headers(input instanceof Request?input.headers:void 0);new Headers(init?.headers).forEach((value,key)=>headers.set(key,value));if(expandsHeaders)applyDynamicHeaderValues(headers,config);if(sessionId)headers.set(SESSION_ID_HEADER,sessionId);return fetchLike(input,{...init,headers})},"wrapped");return wrapped}__name(wrapFetchWithSessionId,"wrapFetchWithSessionId");function buildSessionAwareFetch(runtimeFetch,config,customHeaders){const baseFetch=runtimeFetch??globalThis.fetch;return wrapFetchWithSessionId(baseFetch,config,customHeaders)}__name(buildSessionAwareFetch,"buildSessionAwareFetch");export{DISABLED_REQUEST_TIMEOUT_MS,resolveRequestTimeout,DEFAULT_STREAM_IDLE_TIMEOUT_MS,QWEN_STREAM_IDLE_TIMEOUT_MS_ENV,MAX_STREAM_GUARD_TIMEOUT_MS,DEFAULT_STREAM_MAX_LIFETIME_MS,QWEN_STREAM_MAX_LIFETIME_MS_ENV,DEFAULT_MAX_RETRIES,DEFAULT_DASHSCOPE_BASE_URL,getDashscopeProxyBaseUrl,normalizeOpenAiWireBaseUrl,isOpenRouterHostname,getRequestModel,isImageGenerationCapable,RUNTIME_SNAPSHOT_PREFIX,buildRuntimeSnapshotId,stripRuntimeSnapshotPrefix,ModelsConfig,ProviderInstallError,applyProviderInstallPlan,resolveOwnsModel,resolveMetadataKey,PROVIDER_METADATA_NS,buildInstallPlan,computeModelListVersion,getDefaultBaseUrlForProtocol,resolveBaseUrl,getDefaultModelIds,getModelsForProviderProtocol,findExistingProviderModels,shouldShowStep,providerMatchesCredentials,buildProviderTemplate,customProvider,ALL_PROVIDERS,QWENCLOUD_PROVIDERS,ALIBABA_PROVIDERS,THIRD_PARTY_PROVIDERS,findProviderById,findProviderByCredentials,getAllProviderBaseUrls,getBuiltinDeepSeekReasoning,applyDeepSeekReasoningEffort,getDeepSeekReasoningState,parseClaudeModelVersion,anthropicSupportedEffortTiers,resolveReasoningCapabilities,validateReasoningCapabilities,captureReasoningSnapshot,resolveReasoningForModel,getEffectiveReasoning,warnIfDynamicHeadersDisabled,hasDynamicPlaceholder,expandDynamicHeaders,buildSessionIdHeaders,buildSessionAwareFetch,resolveProviderProtocol,resolveModelProtocol,tryResolveModelProtocol,validateModelProvidersConfig,resolveModelSelectionAuthType};
3
+ import{MODEL_GENERATION_CONFIG_FIELDS,PROVIDER_SOURCED_FIELDS,QWEN_OAUTH_MODELS}from"./chunk-PWHD4NK3.js";import{REASONING_EFFORT_TIERS,clampReasoningEffort,defaultModalities,getGptReasoningCapabilities,normalize,parseModelReasoningCapabilities,tokenLimit}from"./chunk-TAAJ7TDB.js";import{DEFAULT_QWEN_MODEL}from"./chunk-4ZBZL23U.js";import{AuthType}from"./chunk-ZZZAYAJW.js";import{createDebugLogger}from"./chunk-JAUJI56S.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var DEFAULT_TIMEOUT=12e4;var DISABLED_REQUEST_TIMEOUT_MS=2147483647;function resolveRequestTimeout(timeout){if(timeout===void 0||timeout===null){return DEFAULT_TIMEOUT}return timeout<=0?DISABLED_REQUEST_TIMEOUT_MS:timeout}__name(resolveRequestTimeout,"resolveRequestTimeout");var DEFAULT_STREAM_IDLE_TIMEOUT_MS=24e4;var QWEN_STREAM_IDLE_TIMEOUT_MS_ENV="QWEN_STREAM_IDLE_TIMEOUT_MS";var MAX_STREAM_GUARD_TIMEOUT_MS=2147483647;var DEFAULT_STREAM_MAX_LIFETIME_MS=9e5;var QWEN_STREAM_MAX_LIFETIME_MS_ENV="QWEN_STREAM_MAX_LIFETIME_MS";var DEFAULT_MAX_RETRIES=3;var DEFAULT_OPENAI_BASE_URL="https://api.openai.com/v1";var DEFAULT_DASHSCOPE_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1";function getDashscopeProxyBaseUrl(){return process.env["DASHSCOPE_PROXY_BASE_URL"]}__name(getDashscopeProxyBaseUrl,"getDashscopeProxyBaseUrl");function normalizeOpenAiWireBaseUrl(baseUrl){return(baseUrl||DEFAULT_OPENAI_BASE_URL).replace(/\/v1\/?$/,"").replace(/\/$/,"")}__name(normalizeOpenAiWireBaseUrl,"normalizeOpenAiWireBaseUrl");init_esbuild_shims();function getRequestModel(generation,model=generation.model??""){if(generation.authType!==void 0&&generation.authType!=="openai"&&generation.authType!=="qwen-oauth")return model;const override={...generation.samplingParams,...generation.extra_body}["model"];return typeof override==="string"?override:model}__name(getRequestModel,"getRequestModel");init_esbuild_shims();function isImageGenerationCapable(model){return model.supportsImageGeneration===true||model.imageOnly===true}__name(isImageGenerationCapable,"isImageGenerationCapable");init_esbuild_shims();var RUNTIME_SNAPSHOT_PREFIX="$runtime|";function buildRuntimeSnapshotId(authType,modelId){return`${RUNTIME_SNAPSHOT_PREFIX}${authType}|${modelId}`}__name(buildRuntimeSnapshotId,"buildRuntimeSnapshotId");function stripRuntimeSnapshotPrefix(modelId){let id=modelId;while(id.startsWith(RUNTIME_SNAPSHOT_PREFIX)){const stripped=id.split("|").slice(2).join("|");if(!stripped)break;id=stripped}return id}__name(stripRuntimeSnapshotPrefix,"stripRuntimeSnapshotPrefix");init_esbuild_shims();import process2 from"node:process";init_esbuild_shims();init_esbuild_shims();var debugLogger=createDebugLogger("MODEL_REGISTRY");function validateAuthTypeKey(key){if(Object.values(AuthType).includes(key)){return key}return void 0}__name(validateAuthTypeKey,"validateAuthTypeKey");function resolveProviderProtocol(providerId,providerProtocol){const explicit=providerProtocol&&Object.hasOwn(providerProtocol,providerId)?providerProtocol[providerId]:void 0;if(explicit!==void 0){return validateAuthTypeKey(explicit)}return validateAuthTypeKey(providerId)}__name(resolveProviderProtocol,"resolveProviderProtocol");function resolveModelProtocol(providerId,model,providerProtocol){const protocol=resolveProviderProtocol(providerId,providerProtocol);if(!protocol||model.wireApi===void 0)return protocol;if(model.wireApi!=="chat-completions"&&model.wireApi!=="responses"){throw new Error(`Invalid wireApi "${model.wireApi}" for provider "${providerId}". Expected "chat-completions" or "responses".`)}if(protocol!=="openai"&&protocol!=="openai-responses"){throw new Error(`Provider "${providerId}" uses protocol "${protocol}"; wireApi is only supported for OpenAI-compatible models.`)}return model.wireApi==="responses"?"openai-responses":"openai"}__name(resolveModelProtocol,"resolveModelProtocol");function tryResolveModelProtocol(providerId,model,providerProtocol){try{return resolveModelProtocol(providerId,model,providerProtocol)}catch{return void 0}}__name(tryResolveModelProtocol,"tryResolveModelProtocol");function validateModelProvidersConfig(modelProviders,providerProtocol){for(const providerId of new Set([...Object.keys(modelProviders??{}),...Object.keys(providerProtocol??{})])){resolveProviderProtocol(providerId,providerProtocol);const models=modelProviders?.[providerId];if(!Array.isArray(models))continue;for(const model of models){resolveModelProtocol(providerId,model,providerProtocol)}}}__name(validateModelProvidersConfig,"validateModelProvidersConfig");function resolveModelSelectionAuthType(authType,modelId,modelProviders,providerProtocol,baseUrl){if(!modelId||authType!=="openai"&&authType!=="openai-responses"){return authType}const candidates=[];for(const[providerId,models]of Object.entries(modelProviders??{})){if(!Array.isArray(models))continue;for(const model of models){const protocol=resolveModelProtocol(providerId,model,providerProtocol);if(model.id===modelId&&(protocol===authType||(model.wireApi!==void 0||resolveProviderProtocol(providerId,providerProtocol)==="openai-responses")&&(protocol==="openai"||protocol==="openai-responses"))){candidates.push({model,authType:protocol})}}}const preferred=__name(entries=>entries.find(entry=>entry.authType===authType)??entries[0],"preferred");const exact=baseUrl===void 0?void 0:preferred(candidates.filter(entry=>(entry.model.baseUrl||null)===(baseUrl||null)));return(exact??preferred(candidates))?.authType??authType}__name(resolveModelSelectionAuthType,"resolveModelSelectionAuthType");function shouldUseCanonicalModalities(modelId){return/^minimax-m3/i.test(modelId.trim().toLowerCase())}__name(shouldUseCanonicalModalities,"shouldUseCanonicalModalities");function modelRegistryKey(id,baseUrl){return baseUrl?`${id}\0${baseUrl}`:id}__name(modelRegistryKey,"modelRegistryKey");var ModelRegistry=class _ModelRegistry{static{__name(this,"ModelRegistry")}modelsByAuthType;providerProtocolConfig;modelProvidersConfig;getDefaultBaseUrl(authType){switch(authType){case"qwen-oauth":return"DYNAMIC_QWEN_OAUTH_BASE_URL";case"openai":return DEFAULT_OPENAI_BASE_URL;default:return""}}constructor(modelProvidersConfig,providerProtocolConfig){validateModelProvidersConfig(modelProvidersConfig,providerProtocolConfig);this.modelsByAuthType=new Map;this.providerProtocolConfig=providerProtocolConfig??{};this.modelProvidersConfig=modelProvidersConfig;this.registerAuthTypeModels("qwen-oauth",QWEN_OAUTH_MODELS);this.registerProvidersConfig(modelProvidersConfig)}registerProvidersConfig(modelProvidersConfig){if(!modelProvidersConfig)return;for(const[providerId,models]of Object.entries(modelProvidersConfig)){const protocol=resolveProviderProtocol(providerId,this.providerProtocolConfig);if(!protocol){const knownProtocols=Object.values(AuthType).filter(value=>value!=="openai-responses").join(", ");const mapped=Object.hasOwn(this.providerProtocolConfig,providerId)?this.providerProtocolConfig[providerId]:void 0;const message=mapped!==void 0?`Provider "${providerId}" maps to "${mapped}" via providerProtocol, which is not a known protocol (${knownProtocols}); skipping.`:`Provider "${providerId}" in modelProviders is not a built-in protocol (${knownProtocols}) and has no providerProtocol mapping; skipping. Add providerProtocol["${providerId}"] to route it to an SDK protocol.`;debugLogger.warn(message);continue}if(protocol==="qwen-oauth"){if(Array.isArray(models)){for(const model of models){resolveModelProtocol(providerId,model,this.providerProtocolConfig)}}continue}this.registerAuthTypeModels(protocol,models,providerId)}}registerAuthTypeModels(authType,models,providerId){if(!Array.isArray(models)){debugLogger.warn(`modelProviders for provider "${providerId??authType}" is not an array; skipping. Expected ModelConfig[]; legacy { protocol, models } entries are normally rewritten by the v5->v4 settings migration.`);return}const providerLabel=providerId&&providerId!==authType?` (provider "${providerId}")`:"";for(const config of models){const modelAuthType=resolveModelProtocol(providerId??authType,config,providerId?this.providerProtocolConfig:void 0);const modelMap=this.modelsByAuthType.get(modelAuthType)??new Map;const key=modelRegistryKey(config.id,config.baseUrl);if(modelMap.has(key)){debugLogger.warn(`Duplicate model id "${config.id}"${config.baseUrl?` with baseUrl "${config.baseUrl}"`:""} for protocol "${modelAuthType}"${providerLabel}. Using the first registered config.`);continue}const resolved=this.resolveModelConfig(config,modelAuthType);modelMap.set(key,resolved);this.modelsByAuthType.set(modelAuthType,modelMap)}}getModelsForAuthType(authType){const models=this.modelsByAuthType.get(authType);if(!models)return[];return Array.from(models.values()).filter(model=>!model.realtimeOnly).map(model=>({id:model.id,label:model.name,description:model.description,capabilities:model.capabilities,authType:model.authType,isVision:model.capabilities?.vision??false,contextWindowSize:model.generationConfig.contextWindowSize??tokenLimit(model.id),modalities:model.generationConfig.modalities,baseUrl:model.baseUrl,...model.registryBaseUrl!==void 0?{registryBaseUrl:model.registryBaseUrl}:{},envKey:model.envKey,fastOnly:model.fastOnly,voiceOnly:model.voiceOnly,visionOnly:model.visionOnly,supportsImageGeneration:model.supportsImageGeneration,imageOnly:model.imageOnly}))}getModel(authType,modelId,baseUrl){const models=this.modelsByAuthType.get(authType);if(!models)return void 0;if(baseUrl!==void 0){const exact=models.get(modelRegistryKey(modelId,baseUrl??void 0));if(exact)return exact;if(baseUrl===null)return void 0;const plain2=models.get(modelId);return plain2?.baseUrl===baseUrl?plain2:void 0}const plain=models.get(modelId);if(plain)return plain;for(const model of models.values()){if(model.id===modelId)return model}return void 0}hasModel(authType,modelId,baseUrl){return this.getModel(authType,modelId,baseUrl)!==void 0}getDefaultModelForAuthType(authType){if(authType==="qwen-oauth"){return this.getModel(authType,DEFAULT_QWEN_MODEL)}const models=this.modelsByAuthType.get(authType);if(!models||models.size===0)return void 0;return Array.from(models.values()).find(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly)}resolveModelConfig(config,authType){this.validateModelConfig(config,authType);const generationConfig={...config.generationConfig??{}};if(generationConfig.modalities===void 0||shouldUseCanonicalModalities(config.id)){generationConfig.modalities=defaultModalities(config.id)}return{...config,authType,name:config.name||config.id,baseUrl:config.baseUrl||this.getDefaultBaseUrl(authType),...config.baseUrl?{registryBaseUrl:config.baseUrl}:{},generationConfig,capabilities:config.capabilities||{}}}validateModelConfig(config,authType){if(!config.id){throw new Error(`Model config in authType '${authType}' missing required field: id`)}const selectorOnlyCount=[config.fastOnly,config.voiceOnly,config.visionOnly,config.imageOnly,config.realtimeOnly].filter(Boolean).length;if(selectorOnlyCount>1){debugLogger.warn(`Model "${config.id}" in authType "${authType}" has multiple selector-only flags. It will be unreachable in at least one model selector.`)}}reloadModels(modelProvidersConfig,providerProtocolConfig){const reloaded=new _ModelRegistry(modelProvidersConfig,providerProtocolConfig??this.providerProtocolConfig);this.modelsByAuthType=reloaded.modelsByAuthType;this.providerProtocolConfig=reloaded.providerProtocolConfig;this.modelProvidersConfig=reloaded.modelProvidersConfig}getModelProvidersConfig(){return this.modelProvidersConfig}getProviderProtocolConfig(){return this.providerProtocolConfig}};var debugLogger2=createDebugLogger("ModelsConfig");var ModelsConfig=class _ModelsConfig{static{__name(this,"ModelsConfig")}modelRegistry;currentAuthType;currentRegistryBaseUrl;_generationConfig;generationConfigSources;strictModelProviderSelection=false;requireCachedQwenCredentialsOnce=false;hasManualCredentials=false;onModelChange;authTypeWasExplicitlyProvided;runtimeModelSnapshots=new Map;activeRuntimeModelSnapshotId;static deepClone(value){if(value===null||typeof value!=="object"){return value}if(Array.isArray(value)){return value.map(v=>_ModelsConfig.deepClone(v))}const out={};for(const key of Object.keys(value)){out[key]=_ModelsConfig.deepClone(value[key])}return out}constructor(options={}){this.modelRegistry=new ModelRegistry(options.modelProvidersConfig,options.providerProtocolConfig);this.onModelChange=options.onModelChange;this._generationConfig={...options.generationConfig||{}};this.generationConfigSources=options.generationConfigSources||{};this.authTypeWasExplicitlyProvided=options.initialAuthType!==void 0;const initialModelId=this._generationConfig.model;this.currentAuthType=options.initialAuthType?resolveModelSelectionAuthType(options.initialAuthType,this.generationConfigSources["model"]?.kind==="default"?void 0:initialModelId,options.modelProvidersConfig,options.providerProtocolConfig,options.initialRegistryBaseUrl):void 0;if(this.currentAuthType&&initialModelId){const initialModel=this.modelRegistry.getModel(this.currentAuthType,initialModelId,options.initialRegistryBaseUrl);if(initialModel){this.currentRegistryBaseUrl=initialModel.registryBaseUrl??null}}}createStateSnapshotForRollback(){return{currentAuthType:this.currentAuthType,generationConfig:_ModelsConfig.deepClone(this._generationConfig),generationConfigSources:_ModelsConfig.deepClone(this.generationConfigSources),strictModelProviderSelection:this.strictModelProviderSelection,requireCachedQwenCredentialsOnce:this.requireCachedQwenCredentialsOnce,hasManualCredentials:this.hasManualCredentials,activeRuntimeModelSnapshotId:this.activeRuntimeModelSnapshotId,currentRegistryBaseUrl:this.currentRegistryBaseUrl}}rollbackToStateSnapshot(snapshot){this.currentAuthType=snapshot.currentAuthType;this._generationConfig=snapshot.generationConfig;this.generationConfigSources=snapshot.generationConfigSources;this.strictModelProviderSelection=snapshot.strictModelProviderSelection;this.requireCachedQwenCredentialsOnce=snapshot.requireCachedQwenCredentialsOnce;this.hasManualCredentials=snapshot.hasManualCredentials;this.activeRuntimeModelSnapshotId=snapshot.activeRuntimeModelSnapshotId;this.currentRegistryBaseUrl=snapshot.currentRegistryBaseUrl}getModel(){return this._generationConfig.model||DEFAULT_QWEN_MODEL}getCurrentAuthType(){return this.currentAuthType}getCurrentRegistryBaseUrl(){return this.currentRegistryBaseUrl}wasAuthTypeExplicitlyProvided(){return this.authTypeWasExplicitlyProvided}getAvailableModels(){return this.currentAuthType?this.modelRegistry.getModelsForAuthType(this.currentAuthType):[]}getAvailableModelsForAuthType(authType){return this.modelRegistry.getModelsForAuthType(authType)}getAllConfiguredModels(authTypes){const inputAuthTypes=authTypes&&authTypes.length>0?authTypes:Object.values(AuthType);const seen=new Set;const uniqueAuthTypes=[];for(const authType of inputAuthTypes){if(!seen.has(authType)){seen.add(authType);uniqueAuthTypes.push(authType)}}const orderedAuthTypes=[];if(uniqueAuthTypes.includes("qwen-oauth")){orderedAuthTypes.push("qwen-oauth")}for(const authType of uniqueAuthTypes){if(authType!=="qwen-oauth"){orderedAuthTypes.push(authType)}}const runtimeOption=this.getRuntimeModelOption();const allModels=[];for(const authType of orderedAuthTypes){if(runtimeOption&&runtimeOption.authType===authType){allModels.push(runtimeOption)}allModels.push(...this.modelRegistry.getModelsForAuthType(authType))}return allModels}hasModel(authType,modelId){return this.modelRegistry.hasModel(authType,modelId)}getResolvedModel(authType,modelId,baseUrl){return this.modelRegistry.getModel(authType,modelId,baseUrl)}getModelDisplayName(modelId){if(!this.currentAuthType)return modelId;const resolved=(this.currentRegistryBaseUrl!==void 0?this.modelRegistry.getModel(this.currentAuthType,modelId,this.currentRegistryBaseUrl):void 0)??this.modelRegistry.getModel(this.currentAuthType,modelId);return resolved?.name??modelId}async setModel(newModel,metadata){if(this.currentAuthType==="qwen-oauth"&&newModel===DEFAULT_QWEN_MODEL){this.strictModelProviderSelection=false;this.currentRegistryBaseUrl=void 0;this._generationConfig.model=newModel;this.generationConfigSources["model"]={kind:"programmatic",detail:metadata?.reason||"setModel"};this.applyRawModelDerivedDefaults(newModel);if(this.onModelChange){await this.onModelChange("qwen-oauth",false)}return}if(this.currentAuthType&&this.modelRegistry.hasModel(this.currentAuthType,newModel)){await this.switchModel(this.currentAuthType,newModel);return}const siblingWire=this.currentAuthType==="openai"?"openai-responses":this.currentAuthType==="openai-responses"?"openai":void 0;if(siblingWire&&this.modelRegistry.hasModel(siblingWire,newModel)){await this.switchModel(siblingWire,newModel);return}const rollbackSnapshot=this.createStateSnapshotForRollback();try{this.strictModelProviderSelection=false;this.currentRegistryBaseUrl=void 0;this._generationConfig.model=newModel;this.generationConfigSources["model"]={kind:"programmatic",detail:metadata?.reason||"setModel"};this.applyRawModelDerivedDefaults(newModel);if(this.onModelChange&&this.currentAuthType){await this.onModelChange(this.currentAuthType,true)}}catch(error){this.rollbackToStateSnapshot(rollbackSnapshot);throw error}}applyRawModelDerivedDefaults(modelId){if(this.shouldUpdateModelDerivedDefault("modalities")){this._generationConfig.modalities=defaultModalities(modelId);this.generationConfigSources["modalities"]={kind:"computed",detail:"auto-detected from model"}}if(this.shouldUpdateModelDerivedDefault("contextWindowSize")){this._generationConfig.contextWindowSize=tokenLimit(modelId,"input");this.generationConfigSources["contextWindowSize"]={kind:"computed",detail:"auto-detected from model"}}}shouldUpdateModelDerivedDefault(field){const source=this.generationConfigSources[field];return source===void 0||source.kind==="computed"||source.kind==="default"||source.kind==="modelProviders"||source.kind==="programmatic"||source.kind==="unknown"}async switchModel(authType,modelId,options){const runtimeModelSnapshotId=this.extractRuntimeModelSnapshotId(modelId);if(runtimeModelSnapshotId){await this.switchToRuntimeModel(runtimeModelSnapshotId);return}const rollbackSnapshot=this.createStateSnapshotForRollback();if(authType==="qwen-oauth"&&options?.requireCachedCredentials){this.requireCachedQwenCredentialsOnce=true}try{const isAuthTypeChange=authType!==this.currentAuthType;this.currentAuthType=authType;const model=this.modelRegistry.getModel(authType,modelId,options?.baseUrl);if(!model){throw new Error(`Model '${modelId}' not found for authType '${authType}'`)}if(model.imageOnly||model.voiceOnly||model.realtimeOnly){throw new Error(`${model.imageOnly?"Image":model.voiceOnly?"Voice":"Realtime"}-only model '${modelId}' cannot be used as the primary model`)}const previousModelId=rollbackSnapshot.generationConfig.model||"";const previousAuthType=rollbackSnapshot.currentAuthType;const previousModel=previousAuthType&&previousModelId?this.modelRegistry.getModel(previousAuthType,previousModelId,rollbackSnapshot.currentRegistryBaseUrl)??this.modelRegistry.getModel(previousAuthType,previousModelId):void 0;const sharesOpenAICredentials=(authType==="openai"||authType==="openai-responses")&&(previousAuthType==="openai"||previousAuthType==="openai-responses");const sameEndpoint=__name((a,b)=>a===b||isAuthTypeChange&&sharesOpenAICredentials&&normalizeOpenAiWireBaseUrl(a)===normalizeOpenAiWireBaseUrl(b),"sameEndpoint");const canReusePreviousApiKey=authType!=="qwen-oauth"&&(!isAuthTypeChange||sharesOpenAICredentials&&sameEndpoint(rollbackSnapshot.generationConfig.baseUrl,model.baseUrl))&&!!rollbackSnapshot.generationConfig.apiKey&&!!model.envKey&&previousModel!==void 0&&previousModel.envKey===model.envKey&&sameEndpoint(previousModel.baseUrl,model.baseUrl);const previousApiKey=canReusePreviousApiKey?rollbackSnapshot.generationConfig.apiKey:void 0;const previousApiKeySource=canReusePreviousApiKey?rollbackSnapshot.generationConfigSources["apiKey"]:void 0;this.applyResolvedModelDefaults(model);if(!this._generationConfig.apiKey&&previousApiKey){this._generationConfig.apiKey=previousApiKey;if(previousApiKeySource){this.generationConfigSources["apiKey"]=_ModelsConfig.deepClone(previousApiKeySource)}}this.activeRuntimeModelSnapshotId=void 0;const requiresRefresh=isAuthTypeChange?true:this.checkRequiresRefresh(previousModelId);if(this.onModelChange){await this.onModelChange(authType,requiresRefresh)}}catch(error){this.rollbackToStateSnapshot(rollbackSnapshot);throw error}}buildRuntimeModelSnapshotId(authType,modelId){return buildRuntimeSnapshotId(authType,modelId)}extractRuntimeModelSnapshotId(modelId){if(modelId.startsWith(RUNTIME_SNAPSHOT_PREFIX)){if(this.runtimeModelSnapshots.has(modelId)){return modelId}return void 0}if(this.runtimeModelSnapshots.has(modelId)){return modelId}return void 0}getGenerationConfig(){return this._generationConfig}getGenerationConfigSources(){return this.generationConfigSources}mergeSettingsGenerationConfig(settingsGenerationConfig){if(!settingsGenerationConfig){return}for(const field of MODEL_GENERATION_CONFIG_FIELDS){if(!(field in this._generationConfig)&&field in settingsGenerationConfig){this._generationConfig[field]=settingsGenerationConfig[field];this.generationConfigSources[field]={kind:"settings",detail:`model.generationConfig.${field}`}}}}updateCredentials(credentials,settingsGenerationConfig){if(credentials.apiKey||credentials.baseUrl||credentials.model){this.hasManualCredentials=true;this.currentRegistryBaseUrl=void 0;this.clearProviderSourcedConfig()}if(credentials.apiKey){this._generationConfig.apiKey=credentials.apiKey;this.generationConfigSources["apiKey"]={kind:"programmatic",detail:"updateCredentials"}}if(credentials.baseUrl){this._generationConfig.baseUrl=credentials.baseUrl;this.generationConfigSources["baseUrl"]={kind:"programmatic",detail:"updateCredentials"}}if(credentials.model){this._generationConfig.model=credentials.model;this.generationConfigSources["model"]={kind:"programmatic",detail:"updateCredentials"}}this.strictModelProviderSelection=false;this._generationConfig.apiKeyEnvKey=void 0;if(settingsGenerationConfig){this.mergeSettingsGenerationConfig(settingsGenerationConfig)}this.syncRuntimeModelSnapshotWithCredentials()}syncRuntimeModelSnapshotWithCredentials(){const currentAuthType=this.currentAuthType;const{model,apiKey,baseUrl}=this._generationConfig;if(!model||!currentAuthType||!apiKey||!baseUrl){return}if(this.modelRegistry.hasModel(currentAuthType,model,baseUrl)){return}if(this.activeRuntimeModelSnapshotId&&this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){const snapshot=this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId);snapshot.apiKey=apiKey;snapshot.baseUrl=baseUrl;snapshot.modelId=model;const newSnapshotId=this.buildRuntimeModelSnapshotId(snapshot.authType,snapshot.modelId);if(newSnapshotId!==snapshot.id){this.runtimeModelSnapshots.delete(snapshot.id);snapshot.id=newSnapshotId;this.runtimeModelSnapshots.set(newSnapshotId,snapshot);this.activeRuntimeModelSnapshotId=newSnapshotId}snapshot.createdAt=Date.now()}else{this.detectAndCaptureRuntimeModel()}}clearProviderSourcedConfig(){for(const field of PROVIDER_SOURCED_FIELDS){const source=this.generationConfigSources[field];if(source?.kind==="modelProviders"){delete this._generationConfig[field];delete this.generationConfigSources[field]}}}isStrictModelProviderSelection(){return this.strictModelProviderSelection}resetStrictModelProviderSelection(){this.strictModelProviderSelection=false}consumeRequireCachedCredentialsFlag(){const value=this.requireCachedQwenCredentialsOnce;this.requireCachedQwenCredentialsOnce=false;return value}applyResolvedModelDefaults(model){this.strictModelProviderSelection=true;this.currentRegistryBaseUrl=model.registryBaseUrl??null;this.hasManualCredentials=false;this._generationConfig.model=model.id;this.generationConfigSources["model"]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"model.id"};if(this.currentAuthType==="qwen-oauth"){this._generationConfig.apiKey="QWEN_OAUTH_DYNAMIC_TOKEN";this.generationConfigSources["apiKey"]={kind:"computed",detail:"Qwen OAuth placeholder token"};this._generationConfig.apiKeyEnvKey=void 0;delete this.generationConfigSources["apiKeyEnvKey"]}else{this._generationConfig.apiKey=void 0;this._generationConfig.apiKeyEnvKey=void 0}if(model.envKey!==void 0){const apiKey=process2.env[model.envKey];if(apiKey){this._generationConfig.apiKey=apiKey;this.generationConfigSources["apiKey"]={kind:"env",envKey:model.envKey,via:{kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"envKey"}}}else{debugLogger2.debug(`No API key found for model "${model.id}": process.env["${model.envKey}"] is ${apiKey===""?"empty string":"not set"}. Run /auth or set ${model.envKey} in your environment.`)}this._generationConfig.apiKeyEnvKey=model.envKey;this.generationConfigSources["apiKeyEnvKey"]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"envKey"}}this._generationConfig.baseUrl=model.baseUrl;this.generationConfigSources["baseUrl"]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:"baseUrl"};const gc=model.generationConfig;for(const field of MODEL_GENERATION_CONFIG_FIELDS){this._generationConfig[field]=gc[field];this.generationConfigSources[field]={kind:"modelProviders",authType:model.authType,modelId:model.id,detail:`generationConfig.${field}`}}if(gc.contextWindowSize===void 0){this._generationConfig.contextWindowSize=tokenLimit(model.id,"input");this.generationConfigSources["contextWindowSize"]={kind:"computed",detail:"auto-detected from model"}}if(gc.modalities===void 0){this._generationConfig.modalities=defaultModalities(model.id);this.generationConfigSources["modalities"]={kind:"computed",detail:"auto-detected from model"}}}checkRequiresRefresh(previousModelId){const authType=this.currentAuthType;if(!authType){return true}if(authType==="qwen-oauth"){return false}const currentModel=this.modelRegistry.getModel(authType,this._generationConfig.model||"",this._generationConfig.baseUrl||void 0);const previousModel=this.modelRegistry.getModel(authType,previousModelId);if(!previousModel||!currentModel){return true}const criticalFieldsChanged=previousModel.envKey!==currentModel.envKey||previousModel.baseUrl!==currentModel.baseUrl;if(criticalFieldsChanged){return true}return false}syncAfterAuthRefresh(authType,modelId,providerBaseUrlOverride){const previousAuthType=this.currentAuthType;const providerBaseUrl=providerBaseUrlOverride??(previousAuthType===authType&&this.currentRegistryBaseUrl!==void 0?this.currentRegistryBaseUrl:this.generationConfigSources["baseUrl"]?.kind==="modelProviders"?this._generationConfig.baseUrl:void 0);const wasRegistered=(authType==="openai"||authType==="openai-responses")&&previousAuthType===authType&&this.currentRegistryBaseUrl!==void 0&&modelId===this._generationConfig.model;const resolved=modelId?this.modelRegistry.getModel(authType,modelId,providerBaseUrl)??this.modelRegistry.getModel(authType,modelId):void 0;if(wasRegistered&&!resolved){throw new Error(`Model '${modelId}' is no longer configured for authType '${authType}'. Select an available model.`)}if(resolved?.imageOnly||resolved?.voiceOnly||resolved?.realtimeOnly){throw new Error(`${resolved.imageOnly?"Image":resolved.voiceOnly?"Voice":"Realtime"}-only model '${modelId}' cannot be used as the primary model`)}this.strictModelProviderSelection=false;this.currentAuthType=authType;if(resolved){const hasBeenApplied=this.generationConfigSources["baseUrl"]?.kind==="modelProviders";const isProviderChanged=hasBeenApplied&&(this._generationConfig.apiKeyEnvKey!==resolved.envKey||this._generationConfig.baseUrl!==resolved.baseUrl);const isUnchanged=previousAuthType===authType&&this._generationConfig.model===modelId&&!isProviderChanged;const savedApiKey=isUnchanged?this._generationConfig.apiKey:void 0;const savedApiKeySource=isUnchanged?this.generationConfigSources["apiKey"]?{...this.generationConfigSources["apiKey"]}:void 0:void 0;const baseUrlSource2=this.generationConfigSources["baseUrl"];const shouldPreserveResolvedBaseUrl=isUnchanged&&!!this._generationConfig.baseUrl&&(baseUrlSource2?.kind==="cli"||baseUrlSource2?.kind==="env"||baseUrlSource2?.kind==="settings");const savedBaseUrl=shouldPreserveResolvedBaseUrl?this._generationConfig.baseUrl:void 0;const savedBaseUrlSource=shouldPreserveResolvedBaseUrl?baseUrlSource2?{...baseUrlSource2}:void 0:void 0;this.applyResolvedModelDefaults(resolved);if(isUnchanged&&!this._generationConfig.apiKey&&savedApiKey){this._generationConfig.apiKey=savedApiKey;if(savedApiKeySource){this.generationConfigSources["apiKey"]=savedApiKeySource}}if(savedBaseUrl){this._generationConfig.baseUrl=savedBaseUrl;if(savedBaseUrlSource){this.generationConfigSources["baseUrl"]=savedBaseUrlSource}}this.strictModelProviderSelection=true;this.activeRuntimeModelSnapshotId=void 0;return}const apiKeySource=this.generationConfigSources["apiKey"];const baseUrlSource=this.generationConfigSources["baseUrl"];const hasExistingCredentials=this._generationConfig.apiKey&&apiKeySource?.kind!=="modelProviders"||this._generationConfig.baseUrl&&baseUrlSource?.kind!=="modelProviders";const isAuthTypeChange=previousAuthType!==authType;const shouldPreserveCredentials=!isAuthTypeChange&&(modelId===void 0||!this.modelRegistry.hasModel(authType,modelId))&&(this.hasManualCredentials||hasExistingCredentials);if(shouldPreserveCredentials){this.currentRegistryBaseUrl=void 0;if(modelId){this._generationConfig.model=modelId;if(!this.generationConfigSources["model"]){this.generationConfigSources["model"]={kind:"programmatic",detail:"auth refresh (preserved credentials)"}}}return}const defaultModel=this.modelRegistry.getDefaultModelForAuthType(authType);if(defaultModel){this.applyResolvedModelDefaults(defaultModel);this.activeRuntimeModelSnapshotId=void 0;return}if(modelId){this.currentRegistryBaseUrl=void 0;this._generationConfig.model=modelId;if(!this.generationConfigSources["model"]){this.generationConfigSources["model"]={kind:"programmatic",detail:"auth refresh (no default model)"}}}}setOnModelChange(callback){this.onModelChange=callback}detectAndCaptureRuntimeModel(){const{model:currentModel,apiKey,baseUrl,apiKeyEnvKey,...generationConfig}=this._generationConfig;const currentAuthType=this.currentAuthType;if(!currentModel||!currentAuthType){return void 0}if(this.modelRegistry.hasModel(currentAuthType,currentModel,baseUrl)){this.clearRuntimeModelSnapshotForAuthType(currentAuthType);return void 0}const hasValidCredentials=this._generationConfig.apiKey&&this._generationConfig.baseUrl;if(!hasValidCredentials){return void 0}const snapshotId=this.buildRuntimeModelSnapshotId(currentAuthType,currentModel);const snapshot={id:snapshotId,authType:currentAuthType,modelId:currentModel,apiKey,baseUrl,apiKeyEnvKey,generationConfig,sources:{...this.generationConfigSources},createdAt:Date.now()};this.runtimeModelSnapshots.set(snapshotId,snapshot);this.activeRuntimeModelSnapshotId=snapshotId;this.currentRegistryBaseUrl=void 0;this.cleanupOldRuntimeModelSnapshots();return snapshotId}getActiveRuntimeModelSnapshot(){if(!this.activeRuntimeModelSnapshotId){return void 0}return this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId)}getActiveRuntimeModelSnapshotId(){return this.activeRuntimeModelSnapshotId}async switchToRuntimeModel(snapshotId){const runtimeModelSnapshot=this.runtimeModelSnapshots.get(snapshotId);if(!runtimeModelSnapshot){throw new Error(`Runtime model snapshot '${snapshotId}' not found`)}const rollbackSnapshot=this.createStateSnapshotForRollback();try{const isAuthTypeChange=runtimeModelSnapshot.authType!==this.currentAuthType;this.currentAuthType=runtimeModelSnapshot.authType;this.activeRuntimeModelSnapshotId=snapshotId;this.currentRegistryBaseUrl=void 0;this.strictModelProviderSelection=false;this.hasManualCredentials=true;this._generationConfig.model=runtimeModelSnapshot.modelId;this.generationConfigSources["model"]={kind:"programmatic",detail:"runtimeModelSwitch"};if(runtimeModelSnapshot.apiKey){this._generationConfig.apiKey=runtimeModelSnapshot.apiKey;this.generationConfigSources["apiKey"]=runtimeModelSnapshot.sources["apiKey"]||{kind:"programmatic",detail:"runtimeModelSwitch"}}if(runtimeModelSnapshot.baseUrl){this._generationConfig.baseUrl=runtimeModelSnapshot.baseUrl;this.generationConfigSources["baseUrl"]=runtimeModelSnapshot.sources["baseUrl"]||{kind:"programmatic",detail:"runtimeModelSwitch"}}if(runtimeModelSnapshot.apiKeyEnvKey){this._generationConfig.apiKeyEnvKey=runtimeModelSnapshot.apiKeyEnvKey}if(runtimeModelSnapshot.generationConfig){Object.assign(this._generationConfig,runtimeModelSnapshot.generationConfig)}const requiresRefresh=isAuthTypeChange;if(this.onModelChange){await this.onModelChange(runtimeModelSnapshot.authType,requiresRefresh)}}catch(error){this.rollbackToStateSnapshot(rollbackSnapshot);throw error}}getRuntimeModelOption(){const snapshot=this.getActiveRuntimeModelSnapshot();if(!snapshot){return void 0}return{id:snapshot.modelId,label:snapshot.modelId,authType:snapshot.authType,isVision:false,contextWindowSize:snapshot.generationConfig?.contextWindowSize,isRuntimeModel:true,runtimeSnapshotId:snapshot.id}}clearRuntimeModelSnapshotForAuthType(authType){for(const[id,snapshot]of this.runtimeModelSnapshots.entries()){if(snapshot.authType===authType){this.runtimeModelSnapshots.delete(id);if(this.activeRuntimeModelSnapshotId===id){this.activeRuntimeModelSnapshotId=void 0}}}}cleanupOldRuntimeModelSnapshots(){const snapshotsByAuthType=new Map;for(const snapshot of this.runtimeModelSnapshots.values()){const existing=snapshotsByAuthType.get(snapshot.authType);if(!existing||snapshot.createdAt>existing.createdAt){snapshotsByAuthType.set(snapshot.authType,snapshot)}}this.runtimeModelSnapshots.clear();for(const snapshot of snapshotsByAuthType.values()){this.runtimeModelSnapshots.set(snapshot.id,snapshot)}if(this.activeRuntimeModelSnapshotId&&!this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){this.activeRuntimeModelSnapshotId=void 0}}reloadModelProvidersConfig(modelProvidersConfig,providerProtocolConfig){this.modelRegistry.reloadModels(modelProvidersConfig,providerProtocolConfig)}getModelProvidersConfig(){return this.modelRegistry.getModelProvidersConfig()}getProviderProtocolConfig(){return this.modelRegistry.getProviderProtocolConfig()}};init_esbuild_shims();import{isDeepStrictEqual}from"node:util";init_esbuild_shims();import{createHash}from"node:crypto";function resolveEnvKey(config,inputs){const protocol=inputs.protocol??config.protocol;const key=typeof config.envKey==="function"?config.envKey(protocol,inputs.baseUrl):config.envKey;return config.id==="custom-openai-compatible"&&inputs.advancedConfig?.purpose?`${key}_${inputs.advancedConfig.purpose.toUpperCase()}`:key}__name(resolveEnvKey,"resolveEnvKey");function resolveModelNamePrefix(config,baseUrl){return typeof config.modelNamePrefix==="function"?config.modelNamePrefix(baseUrl):config.modelNamePrefix}__name(resolveModelNamePrefix,"resolveModelNamePrefix");function resolveOwnsModel(config){if(config.ownsModel)return config.ownsModel;if(typeof config.envKey!=="string"||typeof config.modelNamePrefix!=="string"){return void 0}const envKey=config.envKey;const prefix=config.modelNamePrefix;if(!prefix)return model=>model.envKey===envKey;const namePrefix=`[${prefix}] `;return model=>model.envKey===envKey&&typeof model.name==="string"&&model.name.startsWith(namePrefix)}__name(resolveOwnsModel,"resolveOwnsModel");function buildGenerationConfig(spec,protocol){const parts={};let hasAny=false;if(spec.enableThinking){if(protocol==="openai-responses"){parts.reasoning={effort:"medium"}}else{parts.extra_body={enable_thinking:true}}hasAny=true}if(spec.thinkingMandatory){parts.thinkingMandatory=true;hasAny=true}if(spec.contextWindowSize){parts.contextWindowSize=spec.contextWindowSize;hasAny=true}if(spec.modalities&&Object.values(spec.modalities).some(Boolean)){parts.modalities=spec.modalities;hasAny=true}return hasAny?parts:void 0}__name(buildGenerationConfig,"buildGenerationConfig");function buildAdvancedGenerationConfig(advCfg,protocol){const cfg={};let hasAny=false;if(advCfg?.enableThinking){if(protocol==="openai-responses"){cfg.reasoning={effort:"medium"}}else{cfg.extra_body={enable_thinking:true}}hasAny=true}if(advCfg?.multimodal&&Object.values(advCfg.multimodal).some(Boolean)){cfg.modalities=advCfg.multimodal;hasAny=true}if(advCfg?.contextWindowSize&&advCfg.contextWindowSize>0){cfg.contextWindowSize=advCfg.contextWindowSize;hasAny=true}if(advCfg?.maxTokens&&advCfg.maxTokens>0){cfg.samplingParams={max_tokens:advCfg.maxTokens};hasAny=true}return hasAny?cfg:void 0}__name(buildAdvancedGenerationConfig,"buildAdvancedGenerationConfig");function specToModelConfig(spec,prefix,baseUrl,envKey,protocol){const genConfig=buildGenerationConfig(spec,protocol);return{id:spec.id,name:prefix?`[${prefix}] ${spec.id}`:spec.id,...spec.description?{description:spec.description}:{},...spec.capabilities?{capabilities:spec.capabilities}:{},baseUrl,envKey,...spec.supportsImageGeneration?{supportsImageGeneration:true}:{},...spec.imageOnly?{imageOnly:true}:{},...genConfig?{generationConfig:genConfig}:{}}}__name(specToModelConfig,"specToModelConfig");function applyProviderCustomHeaders(models,config){if(!config.customHeaders)return models;return models.map(model=>{const existing=model.generationConfig??{};return{...model,generationConfig:{...existing,customHeaders:{...config.customHeaders,...existing.customHeaders}}}})}__name(applyProviderCustomHeaders,"applyProviderCustomHeaders");function buildModelConfigs(config,inputs){const envKey=resolveEnvKey(config,inputs);const prefix=resolveModelNamePrefix(config,inputs.baseUrl);const protocol=resolveModelProtocol(inputs.protocol??config.protocol,inputs);let models;if(config.models&&!config.modelsEditable){models=config.models.map(spec=>specToModelConfig(spec,prefix,inputs.baseUrl,envKey,protocol))}else if(config.models&&config.modelsEditable){const specMap=new Map(config.models.map(s=>[s.id.toLowerCase(),s]));models=inputs.modelIds.map(id=>{const spec=specMap.get(id.toLowerCase());if(spec){return specToModelConfig({...spec,id},prefix,inputs.baseUrl,envKey,protocol)}const genConfig=buildAdvancedGenerationConfig(inputs.advancedConfig,protocol);return{id,name:prefix?`[${prefix}] ${id}`:id,baseUrl:inputs.baseUrl,envKey,...genConfig?{generationConfig:genConfig}:{}}})}else{const advCfg=inputs.advancedConfig;const displayName=__name(id=>prefix?`[${prefix}] ${id}`:id,"displayName");models=inputs.modelIds.map(id=>{const genConfig=buildAdvancedGenerationConfig(advCfg,protocol);return{id,name:displayName(id),baseUrl:inputs.baseUrl,envKey,...advCfg?.purpose==="image"?{supportsImageGeneration:true,imageOnly:true}:advCfg?.purpose==="voice"?{voiceOnly:true}:{},...genConfig?{generationConfig:genConfig}:{}}})}return applyProviderCustomHeaders(models,config)}__name(buildModelConfigs,"buildModelConfigs");function resolveMetadataKey(config){if(!config.models)return void 0;if(config.id.includes(".")){throw new Error(`Provider id must not contain '.' (would corrupt providerMetadata.${config.id} dotted writes): ${config.id}`)}return config.id}__name(resolveMetadataKey,"resolveMetadataKey");var PROVIDER_METADATA_NS="providerMetadata";function resolveProviderState(config,baseUrl,models){const key=resolveMetadataKey(config);if(key){return{[`${PROVIDER_METADATA_NS}.${key}`]:{version:computeModelListVersion(models),baseUrl}}}return void 0}__name(resolveProviderState,"resolveProviderState");function retireProviderState(config){const key=resolveMetadataKey(config);return key?{[`${PROVIDER_METADATA_NS}.${key}`]:{version:void 0}}:void 0}__name(retireProviderState,"retireProviderState");function buildInstallPlan(config,inputs,existingModels=[],selection){const inputProtocol=inputs.protocol??config.protocol;const protocol=resolveModelProtocol(inputProtocol,inputs);const isOpenAI=protocol==="openai"||protocol==="openai-responses";const savedProtocol=isOpenAI?"openai":protocol;const wireApi=inputs.wireApi??(inputProtocol==="openai-responses"?"responses":void 0);if(inputProtocol==="openai-responses"){inputs={...inputs,protocol:savedProtocol,wireApi}}let envKey=resolveEnvKey(config,inputs);const providerOwns=resolveOwnsModel(config);const builtModels=inputs.prebuiltModels??buildModelConfigs(config,inputs);const preserveSavedApis=isOpenAI&&!config.protocolOptions&&wireApi===void 0;let models=wireApi?builtModels.map(model=>model.wireApi===void 0?{...model,wireApi}:model):builtModels;if(preserveSavedApis&&existingModels.length){const responsesModels=inputs.prebuiltModels??buildModelConfigs(config,{...inputs,wireApi:"responses"});models=builtModels.flatMap((model,index)=>{if(model.wireApi!==void 0)return[model];const saved=existingModels.filter(entry=>providerOwns?.(entry)&&entry.id===model.id&&entry.baseUrl===model.baseUrl&&tryResolveModelProtocol(savedProtocol,entry)!==void 0);if(!saved.length)return[model];const seen=new Set;return saved.flatMap(entry=>{const route=resolveModelProtocol(savedProtocol,entry);if(seen.has(route))return[];seen.add(route);return[{...route==="openai-responses"?responsesModels[index]:model,...entry.wireApi!==void 0?{wireApi:entry.wireApi}:{}}]})})}const providerState=resolveProviderState(config,inputs.baseUrl,models);if(config.id==="custom-openai-compatible"&&existingModels?.some(entry=>providerOwns?.(entry)&&(entry.imageOnly||entry.voiceOnly||entry.realtimeOnly)&&models.some(model=>model.id===entry.id)&&typeof entry.baseUrl==="string"&&entry.baseUrl!==inputs.baseUrl&&resolveEnvKey(config,{...inputs,baseUrl:entry.baseUrl})===envKey)){throw new ProviderInstallError("A service model already uses this credential endpoint. Reconnect using its exact saved base URL.","modelPurpose",protocol)}if(existingModels?.length&&!inputs.advancedConfig?.purpose){models=models.map(model=>{const existing=existingModels.find(entry=>(providerOwns?.(entry)||config.mergeModelsByIdentity)&&entry.id===model.id&&entry.baseUrl===model.baseUrl&&tryResolveModelProtocol(savedProtocol,entry)===resolveModelProtocol(savedProtocol,model));if(!existing)return model;const preservedGeneration={...existing.generationConfig};const advanced=inputs.advancedConfig;if(!config.models&&advanced){if(advanced.replaceExisting){delete preservedGeneration.contextWindowSize;if(preservedGeneration.samplingParams){preservedGeneration.samplingParams={...preservedGeneration.samplingParams};delete preservedGeneration.samplingParams.max_tokens;if(!Object.keys(preservedGeneration.samplingParams).length)delete preservedGeneration.samplingParams}}if(advanced.replaceExisting||advanced.multimodal!==void 0)delete preservedGeneration.modalities;if(advanced.replaceExisting||advanced.enableThinking!==void 0){if(preservedGeneration.extra_body){preservedGeneration.extra_body={...preservedGeneration.extra_body};delete preservedGeneration.extra_body["enable_thinking"];if(!Object.keys(preservedGeneration.extra_body).length)delete preservedGeneration.extra_body}if(protocol==="openai-responses")delete preservedGeneration.reasoning}}const generationConfig=Object.keys(preservedGeneration).length||model.generationConfig?{...preservedGeneration,...model.generationConfig,...preservedGeneration.extra_body||model.generationConfig?.extra_body?{extra_body:{...preservedGeneration.extra_body,...model.generationConfig?.extra_body}}:{},...preservedGeneration.contextWindowSize!==void 0&&inputs.advancedConfig?.contextWindowSize===void 0?{contextWindowSize:preservedGeneration.contextWindowSize}:{},...preservedGeneration.samplingParams||model.generationConfig?.samplingParams?{samplingParams:{...preservedGeneration.samplingParams,...model.generationConfig?.samplingParams}}:{},...preservedGeneration.customHeaders||model.generationConfig?.customHeaders?{customHeaders:{...preservedGeneration.customHeaders,...model.generationConfig?.customHeaders}}:{}}:void 0;return{...existing,...model,name:existing?.name??model.name,generationConfig,...existing?.supportsImageGeneration?{supportsImageGeneration:true}:{},...existing?.imageOnly?{imageOnly:true}:{},...existing?.voiceOnly?{voiceOnly:true}:{},...existing?.realtimeOnly?{realtimeOnly:true}:{},...existing.envKey?{envKey:existing.envKey}:{}}})}if(models.length>0){const conversation=models.filter(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly);const credentialModels=conversation.length?conversation:models;const keys=new Set(credentialModels.map(model=>model.envKey));if(keys.size>1&&inputs.apiKey){throw new Error("Reconnect models with different credential references separately to preserve their independent API keys.")}if(credentialModels[0]?.envKey)envKey=credentialModels[0].envKey}const ownsModel=config.mergeModelsByIdentity?void 0:resolveOwnsModel(config);for(const model of models){const modelProtocol=resolveModelProtocol(savedProtocol,model);if(model.voiceOnly&&modelProtocol!=="openai"){throw new ProviderInstallError("Voice transcription requires the OpenAI Chat Completions API.","modelPurpose",protocol)}}const selectedModels=preserveSavedApis&&selection?.id?models.filter(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly&&model.id===selection.id&&(!selection.baseUrl||model.baseUrl===selection.baseUrl)):[];const firstModel=selectedModels.find(model=>resolveModelProtocol(savedProtocol,model)===selection?.authType)??selectedModels[0]??models.find(model=>!model.imageOnly&&!model.voiceOnly&&!model.realtimeOnly);if(models.length===0){throw new Error(`No models configured for provider "${config.id}". Check model list or provider configuration.`)}const firstModelId=firstModel?.id;const modelSelection=firstModelId===void 0?void 0:{modelId:firstModelId,...config.mergeModelsByIdentity&&firstModel?.baseUrl?{baseUrl:firstModel.baseUrl}:{}};return{providerId:config.id,authType:firstModel?resolveModelProtocol(savedProtocol,firstModel):savedProtocol,env:{[envKey]:inputs.apiKey},...modelSelection?{modelSelection}:{},modelProviders:[{authType:savedProtocol,models,mergeStrategy:"prepend-and-remove-owned",...ownsModel?{ownsModel}:{}}],providerState:models.every(model=>model.wireApi===void 0)&&protocol===config.protocol?providerState:retireProviderState(config)}}__name(buildInstallPlan,"buildInstallPlan");function computeModelListVersion(models){return createHash("sha256").update(JSON.stringify(models)).digest("hex")}__name(computeModelListVersion,"computeModelListVersion");var DEFAULT_BASE_URLS={["openai"]:"https://api.openai.com/v1",["openai-responses"]:"https://api.openai.com",["anthropic"]:"https://api.anthropic.com/v1",["gemini"]:"https://generativelanguage.googleapis.com"};function getDefaultBaseUrlForProtocol(protocol){if(protocol===void 0)return"";return DEFAULT_BASE_URLS[protocol]??""}__name(getDefaultBaseUrlForProtocol,"getDefaultBaseUrlForProtocol");function resolveBaseUrl(config,selectedBaseUrl){if(typeof config.baseUrl==="string"){return config.baseUrl}if(Array.isArray(config.baseUrl)){const normalizedSelectedBaseUrl=normalizeBaseUrlForMatching(selectedBaseUrl);const match=config.baseUrl.find(opt=>normalizeBaseUrlForMatching(opt.url)===normalizedSelectedBaseUrl);if(match)return match.url;return config.baseUrl[0]?.url??selectedBaseUrl??""}return selectedBaseUrl??""}__name(resolveBaseUrl,"resolveBaseUrl");function normalizeBaseUrlForMatching(baseUrl){if(baseUrl===void 0)return"";let end=baseUrl.length;while(end>0&&baseUrl.charCodeAt(end-1)===47){end--}return end===baseUrl.length?baseUrl:baseUrl.slice(0,end)}__name(normalizeBaseUrlForMatching,"normalizeBaseUrlForMatching");function getDefaultModelIds(config){return config.models?.map(s=>s.id)??[]}__name(getDefaultModelIds,"getDefaultModelIds");function isProviderModelConfig(value){return typeof value==="object"&&value!==null&&typeof value.id==="string"}__name(isProviderModelConfig,"isProviderModelConfig");function getModelsForProviderProtocol(modelProviders,protocol,providerProtocol){const canonicalProtocol=protocol==="openai-responses"?"openai":protocol;const result=[];for(const[providerId,raw]of Object.entries(modelProviders??{})){if(!Array.isArray(raw))continue;for(const model of raw){if(!isProviderModelConfig(model))continue;const effective=tryResolveModelProtocol(providerId,model,providerProtocol);if(effective!==canonicalProtocol&&!(canonicalProtocol==="openai"&&effective==="openai-responses"))continue;result.push(effective==="openai-responses"?{...model,wireApi:"responses"}:canonicalProtocol==="openai"&&providerId!==canonicalProtocol?{...model,wireApi:"chat-completions"}:model)}}return result}__name(getModelsForProviderProtocol,"getModelsForProviderProtocol");function findExistingProviderModels(config,modelProviders,mapping,selection){const ownsModel=resolveOwnsModel(config);if(!ownsModel||!modelProviders)return void 0;const protocols=config.protocolOptions?.length?config.protocolOptions:[config.protocol];for(const providerProtocol of protocols){const models=getModelsForProviderProtocol(modelProviders,providerProtocol,mapping).filter(ownsModel);if(!models.length)continue;const selectedModels=selection?.id?models.filter(model=>model.id===selection.id&&(!selection.baseUrl||model.baseUrl===selection.baseUrl)):[];const selected=selectedModels.find(model=>resolveModelProtocol(providerProtocol,model)===selection?.authType)??selectedModels[0]??models[0];const protocol=resolveModelProtocol(providerProtocol,selected);return{protocol,models:models.filter(model=>resolveModelProtocol(providerProtocol,model)===protocol)}}return void 0}__name(findExistingProviderModels,"findExistingProviderModels");function shouldShowStep(config,step,protocol=config.protocol){switch(step){case"protocol":return Array.isArray(config.protocolOptions)&&config.protocolOptions.length>1;case"wireApi":return Boolean(config.protocolOptions?.length)&&(protocol==="openai"||protocol==="openai-responses");case"baseUrl":return config.baseUrl===void 0||Array.isArray(config.baseUrl);case"apiKey":return true;case"models":return!config.models||config.modelsEditable===true;case"advancedConfig":return config.showAdvancedConfig===true;default:return false}}__name(shouldShowStep,"shouldShowStep");function providerMatchesCredentials(config,baseUrl,envKey){let configEnvKey;if(typeof config.envKey==="string"){configEnvKey=config.envKey}else if(typeof config.envKey==="function"&&baseUrl){const protocols=config.protocolOptions?.length?config.protocolOptions:[config.protocol];for(const proto of protocols){try{const derived=config.envKey(proto,baseUrl);if(derived===envKey||config.id==="custom-openai-compatible"&&(envKey===`${derived}_IMAGE`||envKey===`${derived}_VOICE`)){configEnvKey=envKey;break}}catch(err){let safeHost;try{safeHost=new URL(baseUrl).hostname}catch{safeHost="[invalid]"}console.warn(`[providerMatchesCredentials] envKey(${proto}, ${safeHost}) threw (${err instanceof Error?err.constructor.name:typeof err}); skipping this protocol`)}}}if(configEnvKey!==envKey){return false}if(typeof config.baseUrl==="string"){return config.baseUrl===baseUrl}if(Array.isArray(config.baseUrl)){return config.baseUrl.some(opt=>opt.url===baseUrl)}if(config.baseUrl===void 0&&configEnvKey!==void 0){return Boolean(baseUrl)}return false}__name(providerMatchesCredentials,"providerMatchesCredentials");function buildProviderTemplate(config,baseUrl){const resolved=resolveBaseUrl(config,baseUrl);return buildModelConfigs(config,{baseUrl:resolved,apiKey:"",modelIds:getDefaultModelIds(config)})}__name(buildProviderTemplate,"buildProviderTemplate");var DENY_ENV_KEYS=new Set(["NODE_OPTIONS","NODE_PATH","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PATH","HOME","TMPDIR","TMP","TEMP"]);function isSameModelIdentity(a,b){return a.id===b.id&&(a.baseUrl??"")===(b.baseUrl??"")}__name(isSameModelIdentity,"isSameModelIdentity");function applyModelProvidersPatch(existingModelProviders,patch,mapping){if(patch.authType==="openai"&&resolveProviderProtocol(patch.authType,mapping)==="openai-responses"){patch={...patch,models:patch.models.map(model=>({...model,wireApi:model.wireApi??"chat-completions"}))}}const existingModels=existingModelProviders[patch.authType]??[];let updatedModels=patch.models;if(patch.mergeStrategy==="append"){updatedModels=[...existingModels,...patch.models]}else{const ownsModel=patch.ownsModel;const preservedModels=existingModels.filter(model=>{if(ownsModel){return!ownsModel(model)||!patch.models.some(newModel=>resolveModelProtocol(patch.authType,newModel)===tryResolveModelProtocol(patch.authType,model,mapping))}return!patch.models.some(newModel=>isSameModelIdentity(newModel,model)&&resolveModelProtocol(patch.authType,newModel)===tryResolveModelProtocol(patch.authType,model,mapping))});updatedModels=patch.mergeStrategy==="replace-owned"?[...preservedModels,...patch.models]:[...patch.models,...preservedModels]}return{...existingModelProviders,[patch.authType]:updatedModels}}__name(applyModelProvidersPatch,"applyModelProvidersPatch");var ProviderInstallError=class extends Error{static{__name(this,"ProviderInstallError")}step;authType;constructor(message,step,authType,options){super(message,options);this.name="ProviderInstallError";this.step=step;this.authType=authType}};async function applyProviderInstallPlan(plan,options){const{settings,reloadModelProviders,syncAuthState,refreshAuth,doRefreshAuth=true}=options;const selectedAuthType=settings.getValue("security.auth.selectedType");const mapping=settings.getValue("providerProtocol");const serviceOnly=(plan.modelProviders??[]).flatMap(patch=>patch.models);const preserveSelection=serviceOnly.length>0&&serviceOnly.every(model=>model.imageOnly||model.voiceOnly||model.realtimeOnly);const previousEnvValues=new Map;const previousRuntimeProviders={...settings.getModelProviders()};const writeContext=settings.getModelProvidersForWrite?.();const writeMapping=writeContext?writeContext.providerProtocol:mapping;for(const[providerId,models]of Object.entries(writeContext?.modelProviders??{})){if(!Array.isArray(models))continue;if(providerId!=="openai-responses"&&resolveProviderProtocol(providerId,writeMapping)!=="openai-responses")continue;const overwritten=models.filter(existing=>plan.modelProviders?.some(patch=>patch.authType==="openai"&&patch.models.some(model=>isSameModelIdentity(existing,model)&&tryResolveModelProtocol(providerId,existing,writeMapping)===resolveModelProtocol(patch.authType,model))));if(overwritten.length&&(writeContext?.shadowedProviders.includes(providerId)||overwritten.some(model=>tryResolveModelProtocol(providerId,model,writeMapping)!==tryResolveModelProtocol(providerId,model,mapping)))){throw new ProviderInstallError("A higher-precedence settings scope overrides this released provider declaration. Reconfigure it in the owning scope without that override.","modelProviders",plan.authType)}}for(const patch of plan.modelProviders??[]){const existingModels=getModelsForProviderProtocol(previousRuntimeProviders,patch.authType,mapping);const ownBucketModels=previousRuntimeProviders[patch.authType]??[];const changesRole=existingModels.some(existing=>patch.models.some(model=>(isSameModelIdentity(existing,model)||existing.id===model.id&&patch.ownsModel?.(existing)&&(preserveSelection||patch.mergeStrategy!=="append"))&&(Boolean(existing.imageOnly)!==Boolean(model.imageOnly)||Boolean(existing.voiceOnly)!==Boolean(model.voiceOnly)||Boolean(existing.realtimeOnly)!==Boolean(model.realtimeOnly)||isImageGenerationCapable(existing)&&!isImageGenerationCapable(model))));const removesConversation=preserveSelection&&ownBucketModels.some(existing=>!existing.imageOnly&&!existing.voiceOnly&&!existing.realtimeOnly&&(patch.ownsModel?.(existing)??patch.models.some(model=>isSameModelIdentity(existing,model))));const removesService=!preserveSelection&&patch.mergeStrategy!=="append"&&ownBucketModels.some(existing=>(existing.imageOnly||existing.voiceOnly||existing.realtimeOnly)&&patch.ownsModel?.(existing)&&!patch.models.some(model=>model.id===existing.id));if(changesRole||removesConversation||removesService){throw new ProviderInstallError(removesConversation?"This install would remove existing conversation models. Include them in the provider selection, or add the service model with Custom Provider.":removesService?"This install would remove existing service models. Include them in the provider selection, or add the conversation model with Custom Provider.":"This install would replace a model configured for another purpose. Use a different model ID or endpoint.","modelPurpose",plan.authType)}}const voiceIds=new Set([...Object.values(previousRuntimeProviders).flatMap(models=>Array.isArray(models)?models:[]),...serviceOnly].filter(model=>model?.voiceOnly).map(model=>model.id));const selectedVoice=settings.getValue("voiceModel");if(typeof selectedVoice==="string"&&selectedVoice)voiceIds.add(selectedVoice);const changedVoiceIds=[...voiceIds].filter(id=>plan.modelProviders?.some(patch=>patch.models.some(model=>model.id===id)));if(changedVoiceIds.length){let prospective=previousRuntimeProviders;for(const patch of plan.modelProviders??[]){prospective=applyModelProvidersPatch(prospective,patch,mapping)}const configured=new ModelsConfig({modelProvidersConfig:Object.fromEntries(Object.entries(prospective).map(([providerId,models])=>[providerId,Array.isArray(models)?models.filter(model=>tryResolveModelProtocol(providerId,model,mapping)!==void 0):models])),providerProtocolConfig:mapping}).getAllConfiguredModels();if(changedVoiceIds.some(id=>configured.filter(entry=>entry.id===id).length>1)){throw new ProviderInstallError("A voice model with this ID is already configured at another endpoint. Edit that model or use a different model ID.","modelPurpose",plan.authType)}}const previousModelId=settings.getValue("model.name");const previousBaseUrl=settings.getValue("model.baseUrl");let currentStep="init";try{currentStep="backup";settings.backup?.();currentStep="env";const shadowedEnvKeys=[];for(const[key,value]of Object.entries(plan.env??{})){if(DENY_ENV_KEYS.has(key.toUpperCase())){throw new Error(`Install plan must not set reserved environment variable: ${key}`)}const previous=process.env[key];if(previous!==void 0&&previous!==""&&previous!==value){shadowedEnvKeys.push(key)}previousEnvValues.set(key,previous);settings.setValue(`env.${key}`,value);process.env[key]=value}if(shadowedEnvKeys.length>0){console.error(`[auth] Warning: ${shadowedEnvKeys.join(", ")} ${shadowedEnvKeys.length===1?"is":"are"} also set in your shell environment or .env file. The shell/file value will take priority on restart. To ensure your new key is used, update or remove the variable from your shell profile or .env file.`)}currentStep="modelProviders";let updatedModelProviders={...previousRuntimeProviders};for(const patch of plan.modelProviders??[]){updatedModelProviders=applyModelProvidersPatch(updatedModelProviders,preserveSelection?{...patch,mergeStrategy:"replace-owned",ownsModel:__name(existing=>(patch.ownsModel?.(existing)??false)||patch.models.some(model=>isSameModelIdentity(existing,model)),"ownsModel")}:patch,mapping);settings.setValue(`modelProviders.${patch.authType}`,updatedModelProviders[patch.authType]??[]);if(patch.authType!=="openai")continue;const ownProviders=settings.getModelProvidersForWrite?.().modelProviders??settings.getModelProviders();for(const[providerId,models]of Object.entries(ownProviders)){if(providerId===patch.authType||!Array.isArray(models))continue;if(providerId.includes("."))continue;if(providerId!=="openai-responses"&&resolveProviderProtocol(providerId,writeMapping)!=="openai-responses")continue;const remaining=models.filter(existing=>!patch.models.some(model=>isSameModelIdentity(existing,model)&&tryResolveModelProtocol(providerId,existing,writeMapping)===resolveModelProtocol(patch.authType,model)));if(remaining.length!==models.length)settings.setValue(`modelProviders.${providerId}`,remaining)}}const effectiveProviders=settings.getModelProviders();for(const patch of plan.modelProviders??[]){const effectiveModels=getModelsForProviderProtocol(effectiveProviders,patch.authType,mapping);const expectedModels=getModelsForProviderProtocol({[patch.authType]:patch.models},patch.authType);const ownProviders=settings.getModelProvidersForWrite?.().modelProviders;const installedModels=ownProviders?getModelsForProviderProtocol({[patch.authType]:ownProviders[patch.authType]??[]},patch.authType,mapping):expectedModels;if(expectedModels.some(model=>{const winner=effectiveModels.find(effective=>isSameModelIdentity(model,effective)&&resolveModelProtocol(patch.authType,model)===resolveModelProtocol(patch.authType,effective));const installed=installedModels.find(entry=>isSameModelIdentity(model,entry)&&resolveModelProtocol(patch.authType,model)===resolveModelProtocol(patch.authType,entry));return!winner||!installed||!isDeepStrictEqual(JSON.parse(JSON.stringify({...installed,wireApi:void 0})),JSON.parse(JSON.stringify({...winner,wireApi:void 0})))})){throw new ProviderInstallError("A higher-precedence settings scope overrides the installed models. Update the scope that owns this provider.","modelProviders",plan.authType)}}currentStep="authType";if(!preserveSelection){settings.setValue("security.auth.selectedType",plan.authType)}currentStep="legacyCredentials";if(plan.legacyCredentials?.apiKey!=null){settings.setValue("security.auth.apiKey",plan.legacyCredentials.apiKey)}if(plan.legacyCredentials?.baseUrl!=null){settings.setValue("security.auth.baseUrl",plan.legacyCredentials.baseUrl)}currentStep="modelSelection";let effectiveModelSelection=preserveSelection?void 0:plan.modelSelection;let routeResyncSelection;if(effectiveModelSelection?.modelId){const currentModelId=settings.getValue("model.name");const currentBaseUrl=settings.getValue("model.baseUrl");const planOffersCurrentModel=typeof currentModelId==="string"&&currentModelId.length>0&&(plan.modelProviders??[]).some(patch=>patch.models.some(model=>resolveModelProtocol(patch.authType,model)===plan.authType&&(currentBaseUrl===""||currentBaseUrl===void 0?model.id===currentModelId:isSameModelIdentity({id:currentModelId,baseUrl:currentBaseUrl},model))));if(planOffersCurrentModel){effectiveModelSelection=void 0;let previousAuthType;if((plan.authType==="openai"||plan.authType==="openai-responses")&&typeof selectedAuthType==="string"){try{previousAuthType=resolveModelSelectionAuthType(selectedAuthType,typeof previousModelId==="string"?previousModelId:void 0,previousRuntimeProviders,settings.getValue("providerProtocol"),typeof previousBaseUrl==="string"?previousBaseUrl:void 0)}catch{previousAuthType=void 0}}if(previousAuthType!==void 0&&previousAuthType!==plan.authType){routeResyncSelection={modelId:currentModelId,...currentBaseUrl?{baseUrl:currentBaseUrl}:{}}}}}if(effectiveModelSelection?.modelId){settings.setValue("model.name",effectiveModelSelection.modelId);if(effectiveModelSelection.baseUrl){settings.setValue("model.baseUrl",effectiveModelSelection.baseUrl)}else{settings.setValue("model.baseUrl","")}}currentStep="providerState";for(const[key,entries]of Object.entries(plan.providerState??{})){for(const[field,value]of Object.entries(entries)){settings.setValue(`${key}.${field}`,value)}}currentStep="persist";settings.persist();currentStep="reloadModelProviders";updatedModelProviders=settings.getModelProviders();reloadModelProviders?.(updatedModelProviders);const syncSelection=effectiveModelSelection?.modelId?effectiveModelSelection:routeResyncSelection;if(syncSelection){currentStep="syncAuthState";syncAuthState?.(plan.authType,syncSelection.modelId,syncSelection.baseUrl)}if(!preserveSelection&&doRefreshAuth&&refreshAuth){currentStep="refreshAuth";await refreshAuth(plan.authType)}currentStep="cleanupBackup";settings.cleanupBackup?.();return{updatedModelProviders}}catch(error){try{settings.restore?.()}catch(restoreErr){console.error("[applyProviderInstallPlan] settings.restore failed during rollback:",restoreErr)}try{for(const[key,prev]of previousEnvValues){if(prev===void 0){delete process.env[key]}else{process.env[key]=prev}}}catch(envErr){console.error("[applyProviderInstallPlan] env rollback failed:",envErr)}try{reloadModelProviders?.(previousRuntimeProviders)}catch(reloadErr){console.error("[applyProviderInstallPlan] reloadModelProviders failed during rollback:",reloadErr)}const errMsg=error instanceof Error?error.message:String(error);throw new ProviderInstallError(errMsg,currentStep,plan.authType,{cause:error instanceof Error?error:void 0})}}__name(applyProviderInstallPlan,"applyProviderInstallPlan");init_esbuild_shims();init_esbuild_shims();init_esbuild_shims();var QWENCLOUD_ENV_KEY="QWENCLOUD_API_KEY";var QWENCLOUD_CHINA_BASE_URL="https://maas.qianwenaiapi.com/compatible-mode/v1";var QWENCLOUD_GLOBAL_BASE_URL="https://maas.qwencloudapi.com/compatible-mode/v1";var QWENCLOUD_CHINA_API_KEY_URL="https://platform.qianwenai.com/docs/developer-guides/administration/api-keys";var QWENCLOUD_GLOBAL_API_KEY_URL="https://docs.qwencloud.com/developer-guides/administration/api-keys";var QWENCLOUD_MODELS=[{id:"qwen3.8-max",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"qwen3.7-plus",contextWindowSize:1e6,enableThinking:true,capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},modalities:{image:true,video:true}},{id:"qwen3.8-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"deepseek-v4-pro-0813",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}},{id:"deepseek-v4.1-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}},modalities:{image:true}},{id:"kimi-k3",thinkingMandatory:true,contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"max",canDisable:false,disableField:"reasoning_effort"}},modalities:{image:true}},{id:"glm-5.3",contextWindowSize:1e6,enableThinking:true}];var qwencloudStandardProvider={id:"qwencloud-standard",label:"Standard API Key",description:"Pay-as-you-go \xB7 Connect with an existing platform API key",protocol:"openai",baseUrl:[{id:"cn-qianwenai",label:"China \u2014 \u5343\u95EEAI\u5E73\u53F0",url:QWENCLOUD_CHINA_BASE_URL,documentationUrl:QWENCLOUD_CHINA_API_KEY_URL,apiKeyUrl:QWENCLOUD_CHINA_API_KEY_URL},{id:"intl-qwencloud",label:"International \u2014 QwenCloud",url:QWENCLOUD_GLOBAL_BASE_URL,documentationUrl:QWENCLOUD_GLOBAL_API_KEY_URL,apiKeyUrl:QWENCLOUD_GLOBAL_API_KEY_URL}],envKey:QWENCLOUD_ENV_KEY,models:QWENCLOUD_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:"QwenCloud Standard",apiKeyPlaceholder:"sk-...",validateApiKey:__name(key=>key.startsWith("sk-")&&!key.startsWith("sk-sp-")?null:'Invalid API key. Pay-as-you-go keys start with "sk-" or "sk-ws-". Token Plan keys ("sk-sp-") need the Token Plan entry instead.',"validateApiKey"),webSearch:{backend:"dashscope"},ownsModel:__name(model=>model.envKey===QWENCLOUD_ENV_KEY&&typeof model.baseUrl==="string"&&(model.baseUrl===QWENCLOUD_CHINA_BASE_URL||model.baseUrl===QWENCLOUD_GLOBAL_BASE_URL),"ownsModel"),uiGroup:"qwencloud",uiLabels:{flowTitle:"QwenCloud",baseUrlStepTitle:"Platform"}};var QWENCLOUD_TOKEN_PLAN_ENV_KEY="QWENCLOUD_TOKEN_PLAN_API_KEY";var QWENCLOUD_TOKEN_PLAN_CHINA_BASE_URL="https://token-plan.maas.qianwenaiapi.com/compatible-mode/v1";var QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL="https://token-plan.maas.qwencloudapi.com/compatible-mode/v1";var QWENCLOUD_TOKEN_PLAN_CHINA_DOC_URL="https://platform.qianwenai.com/docs/token-plan/overview";var QWENCLOUD_TOKEN_PLAN_GLOBAL_DOC_URL="https://docs.qwencloud.com/token-plan/overview";var QWENCLOUD_TOKEN_PLAN_MODELS=QWENCLOUD_MODELS.filter(model=>model.id!=="kimi-k3");var qwencloudTokenPlanProvider={id:"qwencloud-token-plan",label:"Token Plan",description:"Subscription with a monthly Credit quota \xB7 Dedicated endpoint (Personal and Team editions)",protocol:"openai",baseUrl:[{id:"cn-qianwenai",label:"China \u2014 \u5343\u95EEAI\u5E73\u53F0",url:QWENCLOUD_TOKEN_PLAN_CHINA_BASE_URL,documentationUrl:QWENCLOUD_TOKEN_PLAN_CHINA_DOC_URL,apiKeyUrl:QWENCLOUD_TOKEN_PLAN_CHINA_DOC_URL},{id:"intl-qwencloud",label:"International \u2014 QwenCloud",url:QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL,documentationUrl:QWENCLOUD_TOKEN_PLAN_GLOBAL_DOC_URL,apiKeyUrl:QWENCLOUD_TOKEN_PLAN_GLOBAL_DOC_URL}],envKey:QWENCLOUD_TOKEN_PLAN_ENV_KEY,models:QWENCLOUD_TOKEN_PLAN_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:__name(baseUrl=>baseUrl===QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL?"QwenCloud Token Plan for Global/Intl":"QwenCloud Token Plan","modelNamePrefix"),apiKeyPlaceholder:"sk-sp-...",validateApiKey:__name(key=>key.startsWith("sk-sp-")?null:'Invalid API key. Token Plan API keys start with "sk-sp-". Generate one from the Token Plan console, or use the Standard API Key entry for a pay-as-you-go key.',"validateApiKey"),ownsModel:__name(model=>model.envKey===QWENCLOUD_TOKEN_PLAN_ENV_KEY&&typeof model.baseUrl==="string"&&(model.baseUrl===QWENCLOUD_TOKEN_PLAN_CHINA_BASE_URL||model.baseUrl===QWENCLOUD_TOKEN_PLAN_GLOBAL_BASE_URL),"ownsModel"),webSearch:{backend:"dashscope"},uiGroup:"qwencloud",uiLabels:{flowTitle:"QwenCloud",baseUrlStepTitle:"Platform"}};init_esbuild_shims();var CODING_PLAN_ENV_KEY="BAILIAN_CODING_PLAN_API_KEY";var CODING_PLAN_CHINA_BASE_URL="https://coding.dashscope.aliyuncs.com/v1";var CODING_PLAN_GLOBAL_BASE_URL="https://coding-intl.dashscope.aliyuncs.com/v1";var MODELSTUDIO_MODELS=[{id:"qwen3.5-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.6-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},description:"Currently available to Pro subscribers only.",contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.7-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"glm-5",contextWindowSize:202752,enableThinking:true},{id:"kimi-k2.5",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true,modalities:{image:true,video:true}},{id:"MiniMax-M2.5",contextWindowSize:196608,enableThinking:true},{id:"qwen3-coder-plus",contextWindowSize:1e6},{id:"qwen3-coder-next",contextWindowSize:262144},{id:"qwen3-max-2026-01-23",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true},{id:"glm-4.7",contextWindowSize:202752,enableThinking:true}];var codingPlanProvider={id:"coding-plan",label:"Coding Plan",description:"For individual developers \xB7 Weekly quota included",protocol:"openai",baseUrl:[{id:"aliyun",label:"China (Beijing)",url:CODING_PLAN_CHINA_BASE_URL,documentationUrl:"https://help.aliyun.com/zh/model-studio/coding-plan"},{id:"alibabacloud",label:"Singapore (International)",url:CODING_PLAN_GLOBAL_BASE_URL,documentationUrl:"https://www.alibabacloud.com/help/en/model-studio/coding-plan"}],envKey:CODING_PLAN_ENV_KEY,models:MODELSTUDIO_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:__name(baseUrl=>baseUrl===CODING_PLAN_GLOBAL_BASE_URL?"ModelStudio Coding Plan for Global/Intl":"ModelStudio Coding Plan","modelNamePrefix"),apiKeyPlaceholder:"sk-sp-...",validateApiKey:__name(key=>!key.startsWith("sk-sp-")?'Invalid API key. Coding Plan API keys start with "sk-sp-". Please check.':null,"validateApiKey"),ownsModel:__name(model=>model.envKey===CODING_PLAN_ENV_KEY&&typeof model.baseUrl==="string"&&(model.baseUrl===CODING_PLAN_CHINA_BASE_URL||model.baseUrl===CODING_PLAN_GLOBAL_BASE_URL),"ownsModel"),uiGroup:"alibaba",uiLabels:{flowTitle:"Alibaba ModelStudio",baseUrlStepTitle:"Region"}};init_esbuild_shims();var TOKEN_PLAN_ENV_KEY="BAILIAN_TOKEN_PLAN_API_KEY";var TOKEN_PLAN_CHINA_BASE_URL="https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1";var TOKEN_PLAN_GLOBAL_BASE_URL="https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1";var TOKEN_PLAN_MODELS=[{id:"qwen3.7-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.6-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"qwen3.7-max",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"qwen3.8-max",capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",canDisable:false,disableField:"reasoning_effort"}},contextWindowSize:1e6,enableThinking:true,thinkingMandatory:true,modalities:{image:true,video:true}},{id:"qwen3.8-max-preview",capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",canDisable:false,disableField:"reasoning_effort"}},contextWindowSize:1e6,enableThinking:true,thinkingMandatory:true,modalities:{image:true,video:true}},{id:"qwen3.6-flash",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"deepseek-v4-pro",capabilities:{reasoning:{thinking:true,efforts:["high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"deepseek-v4-flash-0731",capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"deepseek-v3.2",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:131072},{id:"kimi-k2.7-code",capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true,modalities:{image:true,video:true},thinkingMandatory:true},{id:"kimi-k2.6",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true},{id:"kimi-k2.5",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:262144,enableThinking:true,modalities:{image:true,video:true}},{id:"glm-5.2",contextWindowSize:1e6,enableThinking:true},{id:"glm-5.1",contextWindowSize:202752,enableThinking:true},{id:"glm-5",contextWindowSize:202752,enableThinking:true},{id:"MiniMax-M2.5",contextWindowSize:196608},{id:"qwen3.8-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"deepseek-v4-pro-0813",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}}];var tokenPlanProvider={id:"token-plan",label:"Token Plan",description:"For teams and companies \xB7 Usage-based billing with dedicated endpoint",protocol:"openai",baseUrl:[{id:"cn-beijing",label:"China (Beijing)",url:TOKEN_PLAN_CHINA_BASE_URL,documentationUrl:"https://bailian.console.aliyun.com/cn-beijing?tab=doc#/doc/?type=model&url=3028856"},{id:"ap-southeast-1",label:"Singapore (International)",url:TOKEN_PLAN_GLOBAL_BASE_URL,documentationUrl:"https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=doc#/doc/?type=model"}],envKey:TOKEN_PLAN_ENV_KEY,models:TOKEN_PLAN_MODELS,modelsEditable:true,supportsModelDiscovery:true,modelNamePrefix:__name(baseUrl=>baseUrl===TOKEN_PLAN_GLOBAL_BASE_URL?"ModelStudio Token Plan for Global/Intl":"ModelStudio Token Plan","modelNamePrefix"),ownsModel:__name(model=>model.envKey===TOKEN_PLAN_ENV_KEY&&(typeof model.baseUrl==="string"&&(model.baseUrl===TOKEN_PLAN_CHINA_BASE_URL||model.baseUrl===TOKEN_PLAN_GLOBAL_BASE_URL)||typeof model.name==="string"&&model.name.startsWith("[ModelStudio Token Plan]")),"ownsModel"),webSearch:{backend:"dashscope"},uiGroup:"alibaba",uiLabels:{flowTitle:"Alibaba ModelStudio",baseUrlStepTitle:"Region"}};init_esbuild_shims();var alibabaStandardProvider={id:"alibabaStandard",label:"Standard API Key",description:"Connect with an existing ModelStudio API key",protocol:"openai",baseUrl:[{id:"cn-beijing",label:"China (Beijing)",url:"https://dashscope.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://bailian.console.aliyun.com/cn-beijing?tab=api#/api"},{id:"sg-singapore",label:"Singapore",url:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=api#/api/?type=model&url=2712195"},{id:"us-virginia",label:"US (Virginia)",url:"https://dashscope-us.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://modelstudio.console.alibabacloud.com/us-east-1?tab=api#/api/?type=model&url=2712195"},{id:"cn-hongkong",label:"China (Hong Kong)",url:"https://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1",documentationUrl:"https://modelstudio.console.alibabacloud.com/cn-hongkong?tab=api#/api/?type=model&url=2712195"}],envKey:"DASHSCOPE_API_KEY",models:[{id:"qwen3.6-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"qwen3.7-plus",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"qwen3.7-max",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},contextWindowSize:1e6,enableThinking:true},{id:"glm-5.1",contextWindowSize:202752,enableThinking:true},{id:"deepseek-v4-pro",capabilities:{reasoning:{thinking:true,efforts:["high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"deepseek-v4-flash",capabilities:{reasoning:{thinking:true,efforts:["high","max"],defaultEffort:"high",disableField:"enable_thinking"}},contextWindowSize:1e6},{id:"qwen3.8-max",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"qwen3.8-max-0902",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"qwen3.8-flash",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","medium","xhigh"],defaultEffort:"xhigh",disableField:"reasoning_effort"}},modalities:{image:true,video:true}},{id:"deepseek-v4-pro-0813",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}},{id:"deepseek-v4-flash-0731",contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"enable_thinking"}}},{id:"kimi-k3",thinkingMandatory:true,contextWindowSize:1e6,capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"max",canDisable:false,disableField:"reasoning_effort"}},modalities:{image:true}},{id:"kimi-k2.7-code",thinkingMandatory:true,enableThinking:true,contextWindowSize:262144,capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"enable_thinking"}},modalities:{image:true,video:true}},{id:"kimi-k2.6",enableThinking:true,contextWindowSize:262144,capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"enable_thinking"}},modalities:{image:true,video:true}}],modelsEditable:true,modelNamePrefix:"ModelStudio Standard",webSearch:{backend:"dashscope"},uiGroup:"alibaba",uiLabels:{flowTitle:"Alibaba ModelStudio",baseUrlStepTitle:"Region"}};init_esbuild_shims();var OPENROUTER_ENV_KEY="OPENROUTER_API_KEY";var OPENROUTER_BASE_URL="https://openrouter.ai/api/v1";var openRouterProvider={id:"openrouter",label:"OpenRouter",description:"Connect with an OpenRouter API key (get one from openrouter.ai/keys)",protocol:"openai",baseUrl:OPENROUTER_BASE_URL,envKey:OPENROUTER_ENV_KEY,models:[{id:"z-ai/glm-4.5-air:free",contextWindowSize:128e3},{id:"openai/gpt-oss-120b:free",contextWindowSize:131072}],modelsEditable:true,modelNamePrefix:"OpenRouter",ownsModel:__name(model=>{if(model.envKey!==OPENROUTER_ENV_KEY)return false;try{const host=new URL(model.baseUrl??"").hostname;return host==="openrouter.ai"||host.endsWith(".openrouter.ai")}catch{return false}},"ownsModel"),customHeaders:{"HTTP-Referer":"https://github.com/QwenLM/qwen-code.git","X-OpenRouter-Title":"Qwen Code"},documentationUrl:"https://openrouter.ai/docs",uiGroup:"third-party"};init_esbuild_shims();var REQUESTY_ENV_KEY="REQUESTY_API_KEY";var REQUESTY_BASE_URL="https://router.requesty.ai/v1";var requestyProvider={id:"requesty",label:"Requesty",description:"Connect with a Requesty API key (get one from app.requesty.ai/api-keys)",protocol:"openai",baseUrl:REQUESTY_BASE_URL,envKey:REQUESTY_ENV_KEY,models:[{id:"openai/gpt-4o-mini",contextWindowSize:128e3},{id:"openai/gpt-4o",contextWindowSize:128e3}],modelsEditable:true,modelNamePrefix:"Requesty",ownsModel:__name(model=>{if(model.envKey!==REQUESTY_ENV_KEY)return false;try{const host=new URL(model.baseUrl??"").hostname;return host==="router.requesty.ai"||host.endsWith(".requesty.ai")}catch{return false}},"ownsModel"),customHeaders:{"HTTP-Referer":"https://github.com/QwenLM/qwen-code.git","X-Title":"Qwen Code"},documentationUrl:"https://docs.requesty.ai",uiGroup:"third-party"};init_esbuild_shims();var deepseekProvider={id:"deepseek",label:"DeepSeek API Key",description:"Quick setup for DeepSeek (deepseek-v4-flash, deepseek-v4-pro)",protocol:"openai",baseUrl:"https://api.deepseek.com",envKey:"DEEPSEEK_API_KEY",models:[{id:"deepseek-v4-pro",contextWindowSize:1e6,capabilities:{reasoning:{profile:"deepseek-openai",thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"thinking"}}},{id:"deepseek-v4-flash",capabilities:{reasoning:{profile:"deepseek-openai",thinking:true,efforts:["low","high","max"],defaultEffort:"high",disableField:"thinking"}},contextWindowSize:1e6}],modelsEditable:true,modelNamePrefix:"DeepSeek",documentationUrl:"https://api-docs.deepseek.com/zh-cn/",uiGroup:"third-party"};init_esbuild_shims();var GROK_ENV_KEY="XAI_API_KEY";var GROK_BASE_URL="https://api.x.ai/v1";var grokProvider={id:"grok",label:"Grok (xAI) API Key",description:"Quick setup for xAI Grok chat & code models",protocol:"openai",baseUrl:GROK_BASE_URL,envKey:GROK_ENV_KEY,models:[{id:"grok-4.5",contextWindowSize:5e5},{id:"grok-4.3",contextWindowSize:1e6},{id:"grok-4.20-0309-reasoning",contextWindowSize:1e6},{id:"grok-4.20-0309-non-reasoning",contextWindowSize:1e6},{id:"grok-4.20-multi-agent-0309",contextWindowSize:1e6},{id:"grok-build-0.1",contextWindowSize:262144}],modelsEditable:true,modelNamePrefix:"Grok",documentationUrl:"https://docs.x.ai/docs",uiGroup:"third-party"};init_esbuild_shims();var minimaxProvider={id:"minimax",label:"MiniMax API Key",description:"Quick setup for MiniMax models",protocol:"openai",baseUrl:[{id:"international",label:"International",url:"https://api.minimax.io/v1",documentationUrl:"https://www.minimax.io/platform"},{id:"china",label:"China",url:"https://api.minimaxi.com/v1",documentationUrl:"https://platform.minimaxi.com"}],envKey:"MINIMAX_API_KEY",models:[{id:"MiniMax-M3",contextWindowSize:1e6,modalities:{image:true,video:true}},{id:"MiniMax-M2.7",contextWindowSize:204800},{id:"MiniMax-M2.7-highspeed",contextWindowSize:204800},{id:"MiniMax-M2.5",contextWindowSize:196608},{id:"MiniMax-M2.5-highspeed",contextWindowSize:196608},{id:"image-01",imageOnly:true},{id:"image-01-live",imageOnly:true}],modelsEditable:true,modelNamePrefix:"MiniMax",uiGroup:"third-party"};init_esbuild_shims();var zaiProvider={id:"zai",label:"Z.AI API Key",description:"Quick setup for Z.AI models",protocol:"openai",baseUrl:[{id:"standard-api-key",label:"Standard API Key",url:"https://api.z.ai/api/paas/v4",documentationUrl:"https://docs.z.ai/"},{id:"coding-plan",label:"Coding Plan",url:"https://api.z.ai/api/coding/paas/v4",documentationUrl:"https://docs.z.ai/"}],envKey:"ZAI_API_KEY",models:[{id:"GLM-5.2",contextWindowSize:1e6,enableThinking:true},{id:"GLM-5.1",contextWindowSize:204800,enableThinking:true},{id:"GLM-5",contextWindowSize:204800},{id:"GLM-5-Turbo",contextWindowSize:204800}],modelsEditable:true,modelNamePrefix:"Z.AI",uiGroup:"third-party"};init_esbuild_shims();var moonshotProvider={id:"moonshot",label:"Kimi (Moonshot AI) API Key",description:"Quick setup for Kimi models",protocol:"openai",baseUrl:[{id:"international",label:"International",url:"https://api.moonshot.ai/v1",documentationUrl:"https://platform.kimi.ai/docs"},{id:"china",label:"China",url:"https://api.moonshot.cn/v1",documentationUrl:"https://platform.moonshot.cn/docs"}],envKey:"MOONSHOT_API_KEY",models:[{id:"kimi-k3",capabilities:{reasoning:{thinking:true,efforts:["low","high","max"],defaultEffort:"max",canDisable:false,disableField:"reasoning_effort"}},contextWindowSize:1e6,thinkingMandatory:true,modalities:{image:true,video:true}},{id:"kimi-k2.7-code",capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"thinking"}},contextWindowSize:262144,modalities:{image:true,video:true},thinkingMandatory:true},{id:"kimi-k2.7-code-highspeed",capabilities:{reasoning:{thinking:true,toggleOnly:true,canDisable:false,disableField:"thinking"}},contextWindowSize:262144,modalities:{image:true,video:true},thinkingMandatory:true},{id:"kimi-k2.6",capabilities:{reasoning:{thinking:true,toggleOnly:true,disableField:"thinking"}},contextWindowSize:262144,modalities:{image:true,video:true}}],modelsEditable:true,modelNamePrefix:"Kimi",uiGroup:"third-party"};init_esbuild_shims();var idealabProvider={id:"idealab",label:"Idealab API Key",description:"Alibaba internal LLM service (Qwen3.6-Plus-DogFooding, DeepSeek V4, Kimi K2.6)",protocol:"openai",baseUrl:"https://idealab.alibaba-inc.com/api/openai/v1",envKey:"IDEALAB_API_KEY",models:[{id:"Qwen3.6-Plus-DogFooding",contextWindowSize:1e6,enableThinking:true,modalities:{image:true,video:true}},{id:"bailian/deepseek-v4-pro",contextWindowSize:1e6,enableThinking:true},{id:"bailian/deepseek-v4-flash",contextWindowSize:1e6,enableThinking:true},{id:"bailian/kimi-k2.6",contextWindowSize:262144,enableThinking:true}],modelsEditable:true,modelNamePrefix:"Idealab",uiGroup:"third-party"};init_esbuild_shims();var modelscopeProvider={id:"modelscope",label:"ModelScope API Key",description:"Quick setup for ModelScope API Inference",protocol:"openai",baseUrl:"https://api-inference.modelscope.cn/v1",envKey:"MODELSCOPE_API_KEY",models:[{id:"deepseek-ai/DeepSeek-V4-Flash",contextWindowSize:1e6,enableThinking:true},{id:"Qwen/Qwen3.5-397B-A17B",contextWindowSize:1e6,enableThinking:true},{id:"ZhipuAI/GLM-5.1",contextWindowSize:1e6,enableThinking:true}],modelsEditable:true,modelNamePrefix:"ModelScope",documentationUrl:"https://modelscope.cn/docs/model-service/API-Inference/intro",uiGroup:"third-party"};init_esbuild_shims();import{createHash as createHash2}from"node:crypto";var CUSTOM_API_KEY_ENV_PREFIX="QWEN_CUSTOM_API_KEY_";function normalizeEnvSegment(value){const upper=value.trim().toUpperCase();let result="";let prevWasUnderscore=false;for(let i=0;i<upper.length;i++){const code=upper.charCodeAt(i);const isAlphaNum=code>=65&&code<=90||code>=48&&code<=57;if(isAlphaNum){result+=upper[i];prevWasUnderscore=false}else if(!prevWasUnderscore){result+="_";prevWasUnderscore=true}}let start=0;let end=result.length;while(start<end&&result.charCodeAt(start)===95)start++;while(end>start&&result.charCodeAt(end-1)===95)end--;return result.slice(start,end)}__name(normalizeEnvSegment,"normalizeEnvSegment");function stripTrailingSlashes(value){let end=value.length;while(end>0&&value.charCodeAt(end-1)===47)end--;return value.slice(0,end)}__name(stripTrailingSlashes,"stripTrailingSlashes");function generateCustomEnvKey(protocol,baseUrl){const canonicalBaseUrl=stripTrailingSlashes(baseUrl.trim());const suffix=createHash2("sha256").update(`${protocol}\0${canonicalBaseUrl}`).digest("hex").slice(0,12).toUpperCase();return`${CUSTOM_API_KEY_ENV_PREFIX}${normalizeEnvSegment(protocol)}_${normalizeEnvSegment(baseUrl)}_${suffix}`}__name(generateCustomEnvKey,"generateCustomEnvKey");var customProvider={id:"custom-openai-compatible",label:"Custom Provider",description:"Manually connect a local server, proxy, or unsupported provider",protocol:"openai",protocolOptions:["openai","anthropic","gemini"],baseUrl:void 0,envKey:generateCustomEnvKey,models:void 0,modelNamePrefix:"",showAdvancedConfig:true,ownsModel:__name(model=>typeof model.envKey==="string"&&model.envKey.startsWith(CUSTOM_API_KEY_ENV_PREFIX),"ownsModel"),mergeModelsByIdentity:true,uiGroup:"custom"};var ALL_PROVIDERS=[qwencloudTokenPlanProvider,qwencloudStandardProvider,codingPlanProvider,tokenPlanProvider,alibabaStandardProvider,deepseekProvider,grokProvider,minimaxProvider,zaiProvider,moonshotProvider,idealabProvider,modelscopeProvider,openRouterProvider,requestyProvider,customProvider];var QWENCLOUD_PROVIDERS=ALL_PROVIDERS.filter(p=>p.uiGroup==="qwencloud");var ALIBABA_PROVIDERS=ALL_PROVIDERS.filter(p=>p.uiGroup==="alibaba");var THIRD_PARTY_PROVIDERS=ALL_PROVIDERS.filter(p=>p.uiGroup==="third-party");function findProviderById(id){return ALL_PROVIDERS.find(p=>p.id===id)}__name(findProviderById,"findProviderById");function findProviderByCredentials(baseUrl,envKey){return ALL_PROVIDERS.find(p=>providerMatchesCredentials(p,baseUrl,envKey))}__name(findProviderByCredentials,"findProviderByCredentials");function getAllProviderBaseUrls(){return ALL_PROVIDERS.flatMap(p=>{if(typeof p.baseUrl==="string")return[p.baseUrl];if(Array.isArray(p.baseUrl))return p.baseUrl.map(o=>o.url);return[]})}__name(getAllProviderBaseUrls,"getAllProviderBaseUrls");init_esbuild_shims();var FLASH_MODELS=new Set(["deepseek-flash","deepseek-v4-flash","deepseek-v4.1-flash","deepseek-v4.1-flash-1017"]);var LEGACY_MODELS=new Set(["deepseek-v4-pro","deepseek-v4-pro-0813","deepseek-v4-flash-0731"]);function getDeepSeekEndpoint(baseUrl){let hostname;try{hostname=new URL(baseUrl??"").hostname.toLowerCase()}catch{return void 0}if(hostname==="api.deepseek.com"||hostname.endsWith(".api.deepseek.com"))return"official";if(hostname.endsWith(".maas.aliyuncs.com")||/^(?:dashscope(?:-intl|-us)?|cn-hongkong\.dashscope)\.aliyuncs\.com$/.test(hostname))return"maas";return void 0}__name(getDeepSeekEndpoint,"getDeepSeekEndpoint");function getBuiltinDeepSeekReasoning(config){const endpoint=getDeepSeekEndpoint(config.baseUrl);const model=config.model?.toLowerCase()??"";if(config.authType!=="openai"||!endpoint||!FLASH_MODELS.has(model)&&!LEGACY_MODELS.has(model)&&!(endpoint==="official"&&model==="deepseek-v4-flash-vision-exp"))return void 0;return{profile:"deepseek-openai",thinking:true,efforts:endpoint==="maas"&&(model==="deepseek-v4-pro"||model==="deepseek-v4-flash")?["high","max"]:["low","high","max"],defaultEffort:"high",disableField:endpoint==="official"?"thinking":"enable_thinking",...config.thinkingMandatory?{canDisable:false}:{}}}__name(getBuiltinDeepSeekReasoning,"getBuiltinDeepSeekReasoning");function normalizeDeepSeekReasoningEffort(effort,model,baseUrl){const builtin=getBuiltinDeepSeekReasoning({authType:"openai",model,baseUrl});if(effort==="low")return builtin&&!builtin.toggleOnly&&builtin.efforts.includes("low")?"low":"high";if(effort==="medium")return"high";if(effort==="xhigh")return builtin&&getDeepSeekEndpoint(baseUrl)==="official"||FLASH_MODELS.has(model?.toLowerCase()??"")&&model?.toLowerCase()!=="deepseek-v4-flash"?"high":"max";return effort}__name(normalizeDeepSeekReasoningEffort,"normalizeDeepSeekReasoningEffort");function applyDeepSeekReasoningEffort(request,baseUrl,configuredEffort){const body=request;const model=typeof body["model"]==="string"?body["model"]:void 0;if(getDeepSeekEndpoint(baseUrl)!=="official"&&!getBuiltinDeepSeekReasoning({authType:"openai",model,baseUrl}))return request;const reasoning=body["reasoning"];const nestedEffort=reasoning?.["effort"];const effort=nestedEffort??configuredEffort;if(typeof effort!=="string"||!effort)return request;const next={...body};if(typeof next["reasoning_effort"]!=="string"||!next["reasoning_effort"])next["reasoning_effort"]=nestedEffort===void 0?effort:normalizeDeepSeekReasoningEffort(effort,model,baseUrl);const{effort:_effort,...rest}=reasoning??{};if(Object.keys(rest).length>0)next["reasoning"]=rest;else delete next["reasoning"];return next}__name(applyDeepSeekReasoningEffort,"applyDeepSeekReasoningEffort");function getDeepSeekReasoningState(config,resolved){const model=getRequestModel(config);if(!getBuiltinDeepSeekReasoning({...config,model})||!resolved||resolved.profile!==void 0&&resolved.profile!=="deepseek-openai"||resolved.toggleOnly)return void 0;const defaultEffort=resolved.defaultEffort;const configured=(config.reasoning||void 0)?.effort;const effort=configured??defaultEffort;const normalized=effort===void 0||resolved.efforts.includes(effort)?effort:normalizeDeepSeekReasoningEffort(effort,model,config.baseUrl);const body=applyDeepSeekReasoningEffort({model:config.model,...config.samplingParams,...config.extra_body},config.baseUrl,normalized===void 0?void 0:clampReasoningEffort(normalized,resolved.efforts));const disabled=resolved.canDisable!==false&&(config.reasoning===false||(resolved.disableField==="thinking"?body["thinking"]?.type==="disabled":body["enable_thinking"]===false)||body["reasoning_effort"]==="none");const wireEffort=config.reasoning!==false&&typeof body["reasoning_effort"]==="string"?body["reasoning_effort"]:defaultEffort;const effective=wireEffort===void 0||resolved.efforts.includes(wireEffort)?wireEffort:normalizeDeepSeekReasoningEffort(wireEffort,model,config.baseUrl);return{enabled:!disabled,effort:resolved.efforts.includes(effective)?effective:defaultEffort}}__name(getDeepSeekReasoningState,"getDeepSeekReasoningState");init_esbuild_shims();init_esbuild_shims();function isOpenRouterHostname(contentGeneratorConfig){const baseUrl=contentGeneratorConfig.baseUrl??"";if(!baseUrl)return false;try{const hostname=new URL(baseUrl).hostname.toLowerCase();return hostname==="openrouter.ai"||hostname.endsWith(".openrouter.ai")}catch{return false}}__name(isOpenRouterHostname,"isOpenRouterHostname");init_esbuild_shims();var CLAUDE_MODEL_FAMILIES=["opus","sonnet","haiku","fable","mythos"];function parseClaudeModelVersion(model){const match=model.toLowerCase().match(new RegExp(`claude-(${CLAUDE_MODEL_FAMILIES.join("|")})-(\\d+)(?:[-.](\\d{1,2})(?!\\d))?`));if(!match){return null}return{family:match[1],major:Number.parseInt(match[2],10),minor:match[3]?Number.parseInt(match[3],10):0}}__name(parseClaudeModelVersion,"parseClaudeModelVersion");function anthropicSupportedEffortTiers(model){const tiers=["low","medium","high"];const parsed=parseClaudeModelVersion(model);if(!parsed){return tiers}const{family,major,minor}=parsed;const atLeast=__name((maj,min)=>major>maj||major===maj&&minor>=min,"atLeast");if(major>=5||family==="opus"&&atLeast(4,7)){tiers.push("xhigh")}if(major>=5||(family==="opus"||family==="sonnet")&&atLeast(4,6)){tiers.push("max")}return tiers}__name(anthropicSupportedEffortTiers,"anthropicSupportedEffortTiers");var REASONING_PROFILES=["openai-effort","openai-reasoning","deepseek-openai","dashscope-effort","dashscope-thinking","qwen-chat-template","anthropic-manual","anthropic-adaptive","deepseek-anthropic","gemini"];function invalidReasoning(route){throw new Error(`Model "${route.model}" capabilities.reasoning: invalid profile, efforts or defaultEffort`)}__name(invalidReasoning,"invalidReasoning");function validateReasoningDeclaration(route,declaration){if(declaration===void 0)return void 0;if(!declaration||typeof declaration!=="object"||Array.isArray(declaration))return invalidReasoning(route);const input=declaration;if(input.profile===void 0&&("thinking"in input||"disableField"in input))return parseModelReasoningCapabilities(input);if(!Object.keys(input).length||Object.keys(input).some(key=>!["profile","efforts","defaultEffort","thinking","toggleOnly","canDisable","disableField"].includes(key)))return invalidReasoning(route);if(input.profile!==void 0&&!REASONING_PROFILES.includes(input.profile)||input.thinking!==void 0&&input.thinking!==true||input.toggleOnly!==void 0&&typeof input.toggleOnly!=="boolean"||input.canDisable!==void 0&&input.canDisable!==false)return invalidReasoning(route);if(input.efforts!==void 0&&(!Array.isArray(input.efforts)||!input.efforts.length||input.efforts.some(tier=>!REASONING_EFFORT_TIERS.includes(tier))||new Set(input.efforts).size!==input.efforts.length))return invalidReasoning(route);if(input.defaultEffort!==void 0&&(!REASONING_EFFORT_TIERS.includes(input.defaultEffort)||input.efforts&&!input.efforts.includes(input.defaultEffort)))return invalidReasoning(route);return input}__name(validateReasoningDeclaration,"validateReasoningDeclaration");function resolveReasoningCapabilities(route,declaration){try{return validateReasoningCapabilities(route,declaration)}catch{return void 0}}__name(resolveReasoningCapabilities,"resolveReasoningCapabilities");function validateReasoningCapabilities(route,declaration){if(declaration===void 0)return getBuiltinDeepSeekReasoning(route);const input=validateReasoningDeclaration(route,declaration);if(!input)return void 0;if(input.profile===void 0&&"thinking"in input)return parseModelReasoningCapabilities(input);const model=normalize(route.model);const provider=ALL_PROVIDERS.find(candidate=>typeof candidate.baseUrl==="string"?candidate.baseUrl===route.baseUrl:candidate.baseUrl?.some(option=>option.url===route.baseUrl));const known=(provider?.models?.find(candidate=>candidate.id===route.model)??provider?.models?.find(candidate=>candidate.id===model))?.capabilities?.reasoning;const inherited=parseModelReasoningCapabilities(known);if(!input.profile&&inherited?.toggleOnly){if(input.efforts||input.defaultEffort)return invalidReasoning(route);return parseModelReasoningCapabilities({...inherited,...input})}const gpt=getGptReasoningCapabilities(route.model);const claude=route.authType==="anthropic"?parseClaudeModelVersion(route.model):void 0;if(!inherited&&!gpt&&!claude&&!input.profile)return invalidReasoning(route);const auth=route.authType;let host="";try{host=new URL(route.baseUrl??"").hostname.toLowerCase()}catch{host=""}const dashscope=auth==="qwen-oauth"||/(^|\.)(dashscope(?:-intl|-us)?\.aliyuncs\.com|alibaba-inc\.com|aliyun-inc\.com|alicloudapi\.com|maas\.qianwenaiapi\.com|maas\.qwencloudapi\.com)$/.test(host)||/^token-plan\..+\.maas\.aliyuncs\.com$/.test(host);const profile=input.profile??(auth==="gemini"||auth==="vertex-ai"?"gemini":auth==="openai-responses"?"openai-reasoning":auth==="openai"&&isOpenRouterHostname(route)?"openai-reasoning":auth==="anthropic"?model.includes("deepseek")?"deepseek-anthropic":claude&&(claude.major>4||claude.major===4&&claude.minor>=6)?"anthropic-adaptive":"anthropic-manual":model.startsWith("qwen")?dashscope?inherited?.disableField==="reasoning_effort"?"dashscope-effort":"dashscope-thinking":"qwen-chat-template":inherited?.disableField==="thinking"?"deepseek-openai":"openai-effort");const protocol=profile==="gemini"?"gemini":profile.startsWith("anthropic-")||profile==="deepseek-anthropic"?"anthropic":"openai";if(auth==="openai-responses"&&profile!=="openai-reasoning"||auth&&protocol!==(auth==="vertex-ai"?"gemini":auth==="qwen-oauth"||auth==="openai-responses"?"openai":auth))return invalidReasoning(route);const toggleOnly=profile==="dashscope-thinking"||profile==="qwen-chat-template";const disableField=!input.profile&&inherited?.disableField||(toggleOnly?"enable_thinking":profile==="openai-effort"||profile==="dashscope-effort"?"reasoning_effort":"thinking");const inheritedEfforts=inherited&&!inherited.toggleOnly?inherited.efforts:gpt?.efforts??(claude?anthropicSupportedEffortTiers(route.model):void 0);const efforts=input.efforts??inheritedEfforts;const inheritedDefault=inherited&&!inherited.toggleOnly?inherited.defaultEffort:gpt?.defaultEffort;const defaultEffort=input.defaultEffort??(inheritedDefault&&efforts?clampReasoningEffort(inheritedDefault,efforts):void 0);if(toggleOnly&&(input.efforts!==void 0||input.defaultEffort!==void 0)||!toggleOnly&&(!efforts||!defaultEffort)||profile==="gemini"&&efforts?.some(tier=>tier==="xhigh"||tier==="max"))return invalidReasoning(route);const result={...input,thinking:true,profile,toggleOnly,disableField,...toggleOnly?{}:{efforts,defaultEffort},...route.thinkingMandatory||inherited?.canDisable===false||gpt?.thinkingMandatory?{canDisable:false}:{}};const parsed=parseModelReasoningCapabilities(result);if(!parsed)return invalidReasoning(route);return{...parsed,profile,...gpt&&input.defaultEffort===void 0?{defaultEnabled:gpt.defaultEnabled}:{}}}__name(validateReasoningCapabilities,"validateReasoningCapabilities");function captureReasoningSnapshot(models){return Object.freeze(models.map(model=>Object.freeze({id:model.id,authType:model.authType,baseUrl:model.baseUrl,registryBaseUrl:model.registryBaseUrl,reasoning:model.capabilities?.reasoning&&typeof model.capabilities.reasoning==="object"?Object.freeze({...structuredClone(model.capabilities.reasoning),..."efforts"in model.capabilities.reasoning&&Array.isArray(model.capabilities.reasoning.efforts)?{efforts:Object.freeze([...model.capabilities.reasoning.efforts])}:{}}):model.capabilities?.reasoning})))}__name(captureReasoningSnapshot,"captureReasoningSnapshot");function resolveReasoningForModel(config,generation,model=generation.model,strict=false){model=getRequestModel(generation,model);let declaration;if(generation.reasoningSnapshot){const rows=generation.reasoningSnapshot.filter(row2=>row2.authType===generation.authType&&row2.id===model);const row=generation.reasoningRouteBaseUrl===null&&model===generation.model?rows.find(row2=>row2.registryBaseUrl===void 0):typeof generation.reasoningRouteBaseUrl==="string"&&model===generation.model?rows.find(row2=>row2.registryBaseUrl===generation.reasoningRouteBaseUrl):rows.find(row2=>row2.registryBaseUrl===generation.baseUrl)??rows.find(row2=>row2.registryBaseUrl===void 0&&row2.baseUrl===generation.baseUrl);declaration=row?.reasoning}else{declaration=generation.authType?config?.getResolvedModelConfig?.(generation.authType,model,generation.baseUrl)?.capabilities?.reasoning:void 0}return(strict?validateReasoningCapabilities:resolveReasoningCapabilities)({...generation,model,thinkingMandatory:model===generation.model?generation.thinkingMandatory:void 0},declaration)}__name(resolveReasoningForModel,"resolveReasoningForModel");function getEffectiveReasoning(generation,resolved){if(!resolved)return generation.reasoning;if(generation.reasoning===false&&resolved.canDisable!==false)return false;const selected=generation.reasoning||void 0;if(!selected&&resolved.defaultEnabled===false&&resolved.canDisable!==false)return false;if(resolved.toggleOnly)return selected??(resolved.profile?{}:void 0);const model=getRequestModel(generation);const knownDeepSeek=(resolved.profile===void 0||resolved.profile==="deepseek-openai")&&getBuiltinDeepSeekReasoning({...generation,model});let effort=selected?.effort??resolved.defaultEffort;if(effort&&knownDeepSeek&&!resolved.efforts.includes(effort))effort=normalizeDeepSeekReasoningEffort(effort,model,generation.baseUrl);return effort?{...selected,effort:(resolved.profile||knownDeepSeek)&&REASONING_EFFORT_TIERS.includes(effort)?clampReasoningEffort(effort,resolved.efforts):effort}:selected}__name(getEffectiveReasoning,"getEffectiveReasoning");init_esbuild_shims();init_esbuild_shims();var debugLogger3=createDebugLogger("OUTBOUND_CORRELATION");var PLACEHOLDERS=[{token:"${session_id}",resolve:__name(config=>config.getSessionId(),"resolve")}];var SESSION_ID_PLACEHOLDER_PATTERN=/\$(?:session_id|QWEN_CODE_SESSION_ID)(?!\w)|\$\{(?:session_id|QWEN_CODE_SESSION_ID)\}/gi;var warnedGateOff=new Set;function warnIfDynamicHeadersDisabled(customHeaders,config){try{const names=Object.entries(customHeaders??{}).filter(([,value])=>typeof value==="string"&&hasDynamicPlaceholder(value)).map(([name])=>name);if(names.length===0)return;if(config.getOutboundAllowDynamicHeaderValues())return;const key=names.slice().sort().join(",");if(warnedGateOff.has(key))return;warnedGateOff.add(key);console.warn(`customHeaders ${names.join(", ")} contain a runtime placeholder, but outboundCorrelation.allowDynamicHeaderValues is not enabled \u2014 the header(s) will not be sent. Set it to true in settings.json to allow the value to be filled in per request.`)}catch{}}__name(warnIfDynamicHeadersDisabled,"warnIfDynamicHeadersDisabled");function hasDynamicPlaceholder(value){return value.search(SESSION_ID_PLACEHOLDER_PATTERN)!==-1}__name(hasDynamicPlaceholder,"hasDynamicPlaceholder");function resolveDynamicHeaderValue(value,config){if(typeof value!=="string")return void 0;if(!hasDynamicPlaceholder(value))return value;try{if(!config.getOutboundAllowDynamicHeaderValues()){debugLogger3.warn(`Dropping a customHeaders value containing a runtime placeholder: outboundCorrelation.allowDynamicHeaderValues is not enabled.`);return void 0}let expanded=value.replace(SESSION_ID_PLACEHOLDER_PATTERN,"${session_id}");for(const{token,resolve}of PLACEHOLDERS){if(!expanded.includes(token))continue;const resolved=resolve(config);if(!resolved)return void 0;expanded=expanded.split(token).join(resolved)}return expanded}catch(error){debugLogger3.warn(`Unable to expand a customHeaders placeholder: ${error instanceof Error?error.message:String(error)}`);return void 0}}__name(resolveDynamicHeaderValue,"resolveDynamicHeaderValue");function applyDynamicHeaderValues(headers,config){const pending=[];headers.forEach((value,key)=>{if(hasDynamicPlaceholder(value))pending.push([key,value])});for(const[key,value]of pending){const resolved=resolveDynamicHeaderValue(value,config);if(resolved===void 0){headers.delete(key)}else{headers.set(key,resolved)}}}__name(applyDynamicHeaderValues,"applyDynamicHeaderValues");function expandDynamicHeaders(customHeaders,config){if(!customHeaders)return{};const expanded={};for(const[key,value]of Object.entries(customHeaders)){if(typeof value!=="string"||!hasDynamicPlaceholder(value))continue;const resolved=resolveDynamicHeaderValue(value,config);if(resolved!==void 0)expanded[key]=resolved}return expanded}__name(expandDynamicHeaders,"expandDynamicHeaders");var debugLogger4=createDebugLogger("OUTBOUND_CORRELATION");var SESSION_ID_HEADER="session_id";var SESSION_ID_HEADER_HOSTS=["routify.alibaba-inc.com","routify-online.alibaba-inc.com","routify-pub.alibaba-inc.com"];function requestUrl(input){try{if(typeof input==="string")return new URL(input);if(input instanceof URL)return input;return new URL(input.url)}catch{return void 0}}__name(requestUrl,"requestUrl");function buildSessionIdHeaders(config,destination){try{const url=requestUrl(destination);if(url?.protocol!=="https:"||!SESSION_ID_HEADER_HOSTS.includes(url.hostname.toLowerCase())){return{}}const sessionId=config.getSessionId();return sessionId?{[SESSION_ID_HEADER]:sessionId}:{}}catch(error){debugLogger4.warn(`Unable to add ${SESSION_ID_HEADER} to outbound request: ${error instanceof Error?error.message:String(error)}`);return{}}}__name(buildSessionIdHeaders,"buildSessionIdHeaders");function wrapFetchWithSessionId(baseFetch,config,customHeaders){const fetchLike=baseFetch;const expandsHeaders=Object.values(customHeaders??{}).some(value=>typeof value==="string"&&hasDynamicPlaceholder(value));if(expandsHeaders)warnIfDynamicHeadersDisabled(customHeaders,config);const wrapped=__name(async(input,init)=>{const sessionHeaders=buildSessionIdHeaders(config,input);const sessionId=sessionHeaders[SESSION_ID_HEADER];if(!sessionId&&!expandsHeaders)return fetchLike(input,init);const headers=new Headers(input instanceof Request?input.headers:void 0);new Headers(init?.headers).forEach((value,key)=>headers.set(key,value));if(expandsHeaders)applyDynamicHeaderValues(headers,config);if(sessionId)headers.set(SESSION_ID_HEADER,sessionId);return fetchLike(input,{...init,headers})},"wrapped");return wrapped}__name(wrapFetchWithSessionId,"wrapFetchWithSessionId");function buildSessionAwareFetch(runtimeFetch,config,customHeaders){const baseFetch=runtimeFetch??globalThis.fetch;return wrapFetchWithSessionId(baseFetch,config,customHeaders)}__name(buildSessionAwareFetch,"buildSessionAwareFetch");export{DISABLED_REQUEST_TIMEOUT_MS,resolveRequestTimeout,DEFAULT_STREAM_IDLE_TIMEOUT_MS,QWEN_STREAM_IDLE_TIMEOUT_MS_ENV,MAX_STREAM_GUARD_TIMEOUT_MS,DEFAULT_STREAM_MAX_LIFETIME_MS,QWEN_STREAM_MAX_LIFETIME_MS_ENV,DEFAULT_MAX_RETRIES,DEFAULT_DASHSCOPE_BASE_URL,getDashscopeProxyBaseUrl,normalizeOpenAiWireBaseUrl,isOpenRouterHostname,getRequestModel,isImageGenerationCapable,RUNTIME_SNAPSHOT_PREFIX,buildRuntimeSnapshotId,stripRuntimeSnapshotPrefix,ModelsConfig,ProviderInstallError,applyProviderInstallPlan,resolveOwnsModel,resolveMetadataKey,PROVIDER_METADATA_NS,buildInstallPlan,computeModelListVersion,getDefaultBaseUrlForProtocol,resolveBaseUrl,getDefaultModelIds,getModelsForProviderProtocol,findExistingProviderModels,shouldShowStep,providerMatchesCredentials,buildProviderTemplate,customProvider,ALL_PROVIDERS,QWENCLOUD_PROVIDERS,ALIBABA_PROVIDERS,THIRD_PARTY_PROVIDERS,findProviderById,findProviderByCredentials,getAllProviderBaseUrls,getBuiltinDeepSeekReasoning,applyDeepSeekReasoningEffort,getDeepSeekReasoningState,parseClaudeModelVersion,anthropicSupportedEffortTiers,resolveReasoningCapabilities,validateReasoningCapabilities,captureReasoningSnapshot,resolveReasoningForModel,getEffectiveReasoning,warnIfDynamicHeadersDisabled,hasDynamicPlaceholder,expandDynamicHeaders,buildSessionIdHeaders,buildSessionAwareFetch,resolveProviderProtocol,resolveModelProtocol,tryResolveModelProtocol,validateModelProvidersConfig,resolveModelSelectionAuthType};
4
4
  /**
5
5
  * @license
6
6
  * Copyright 2026 Qwen Team